1
Fortran 90 Overview
J.E. Akin, Copyright 1998
This overview of Fortran 90 (F90) features is presented as a series of tables that illustrate the syntax
and abilities of F90. Frequently comparisons are made to similar features in the C++ and F77 languages
and to the Matlab environment.
These tables show that F90 has significant improvements over F77 and matches or exceeds newer
software capabilities found in C++ and Matlab for dynamic memory management, user defined data
structures, matrix operations, operator definition and overloading, intrinsics for vector and parallel pro-
cessors and the basic requirements for object-oriented programming.
They are intended to serve as a condensed quick reference guide for programming in F90 and for
understanding programs developed by others.
List of Tables
1 Comment syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Intrinsic data types of variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3 Arithmetic operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4 Relational operators (arithmetic and logical) . . . . . . . . . . . . . . . . . . . . . . . . 5
5 Precedence pecking order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
6 Colon Operator Syntax and its Applications . . . . . . . . . . . . . . . . . . . . . . . . 5
7 Mathematical functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
8 Flow Control Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
9 Basic loop constructs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
10 IF Constructs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
11 Nested IF Constructs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
12 Logical IF-ELSE Constructs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
13 Logical IF-ELSE-IF Constructs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
14 Case Selection Constructs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
15 F90 Optional Logic Block Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
16 GO TO Break-out of Nested Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
17 Skip a Single Loop Cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
18 Abort a Single Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
19 F90 DOs Named for Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
20 Looping While a Condition is True . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
21 Function definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
22 Arguments and return values of subprograms . . . . . . . . . . . . . . . . . . . . . . . 12
23 Defining and referring to global variables . . . . . . . . . . . . . . . . . . . . . . . . . 12
24 Bit Function Intrinsics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
25 The ACSII Character Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
26 F90 Character Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
27 How to type non-printing characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
28 Referencing Structure Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
29 Defining New Types of Data Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
30 Nested Data Structure Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
31 Declaring, initializing, and assigning components of user-defined datatypes . . . . . . . 14
32 F90 Derived Type Component Interpretation . . . . . . . . . . . . . . . . . . . . . . . 15
33 Definition of pointers and accessing their targets . . . . . . . . . . . . . . . . . . . . . . 15
34 Nullifing a Pointer to Break Association with Target . . . . . . . . . . . . . . . . . . . . 15
35 Special Array Characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
36 Array Operations in Programming Constructs . . . . . . . . . . . . . . . . . . . . . . . 16
37 Equivalent Fortran90 and MATLAB Intrinsic Functions . . . . . . . . . . . . . . . . . . 17
38 Truncating Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
39 F90 WHERE Constructs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
40 F90 Array Operators with Logic Mask Control . . . . . . . . . . . . . . . . . . . . . . 19
41 Array initialization constructs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
42 Array initialization constructs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3
LIST OF TABLES 3
43 Elementary matrix computational routines . . . . . . . . . . . . . . . . . . . . . . . . . 20
44 Dynamic allocation of arrays and pointers . . . . . . . . . . . . . . . . . . . . . . . . . 21
45 Automatic memory management of local scope arrays . . . . . . . . . . . . . . . . . . . 21
46 F90 Single Inheritance Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
47 F90 Selective Single Inheritance Form . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
48 F90 Single Inheritance Form, with Local Renaming . . . . . . . . . . . . . . . . . . . . 22
49 F90 Multiple Selective Inheritance with Renaming . . . . . . . . . . . . . . . . . . . . 22
4 LIST OF TABLES
Language Syntax Location
MATLAB % comment (to end of line) anywhere
C /*comment*/ anywhere
F90 ! comment (to end of line) anywhere
F77 * comment (to end of line) column 1
Table 1: Comment syntax.
Storage MATLABa C++ F90 F77
byte char character:: character
integer int integer:: integer
single precision float real:: real
double precision double real*8:: double precision
complex b complex:: complex
Boolean bool logical:: logical
argument parameter:: parameter
pointer * pointer::
structure struct type::
aMATLAB4 requires no variable type declaration; the only two distinct types in MATLAB are strings and reals (which include
complex). Booleans are just 0s and 1s treated as reals. MATLAB5 allows the user to select more types.
bThere is no specific data type for a complex variable in C++; they must be created by the programmer.
Table 2: Intrinsic data types of variables.
Description MATLABa C++ Fortranb
addition + + +
subtractionc - - -
multiplication * and .* * *
division / and ./ / /
exponentiation ˆ and .ˆ powd **
remainder %
increment ++
decrement --
parentheses (expres-
sion grouping)
() () ()
aWhen doing arithmetic operations on matrices in MATLAB, a period (‘.’) must be put before the operator if scalar arithmetic
is desired. Otherwise, MATLAB assumes matrix operations; figure out the difference between ‘*’ and ‘.*’. Note that since matrix
and scalar addition coincide, no ‘.+’ operator exists (same holds for subtraction).
bFortran 90 allows the user to change operators and to define new operator symbols.
cIn all languages the minus sign is used for negation (i.e., changing sign).
dIn C++ the exponentiation is calculated by function pow
���������
.
Table 3: Arithmetic operators.
LIST OF TABLES 5
Description MATLAB C++ F90 F77
Equal to == == == .EQ.
Not equal to ˜= != /= .NE.
Less than < < < .LT.
Less or equal <= <= <= .LE.
Greater than > > > .GT.
Greater or equal >= >= >= .GE.
Logical NOT ˜ ! .NOT. .NOT.
Logical AND & && .AND. .AND.
Logical inclusive OR ! || .OR. .OR.
Logical exclusive OR xor .XOR. .XOR.
Logical equivalent == == .EQV. .EQV.
Logical not equivalent ˜= != .NEQV. .NEQV.
Table 4: Relational operators (arithmetic and logical).
MATLAB
Operators C++ Operators F90 Operators
a F77 Operators
() () [] -> . () ()
+ - ! ++ -- +
- * & (type)
sizeof
** **
* / * / % * / * /
+ -b + -b + -b + -b
< <= > >= << >> // //
== ˜= < <= > => == /= < <= >
>=
.EQ. .NE.
.LT. .LE.
.GT. .GE.
˜ == != .NOT. .NOT.
& && .AND. .AND.
| || .OR. .OR.
= | .EQV. .NEQV. .EQV. .NEQV.
?:
= += -= *= /=
%= &= ˆ= |=
<<= >>=
,
aUser-defined unary (binary) operators have the highest (lowest) precedence in F90.
bThese are binary operators representing addition and subtraction. Unary operators + and - have higher precedence.
Table 5: Precedence pecking order.
B = Beginning, E = Ending, I = Increment
Syntax F90 MATLAB
Default B:E:I B:I:E
�
B B: B:
�
E :E :E
Full range : :
Use F90 MATLAB
Array subscript ranges yes yes
Character positions in a string yes yes
Loop control no yes
Array element generation no yes
Table 6: Colon Operator Syntax and its Applications.
6 LIST OF TABLES
Description MATLAB C++ F90 F77
exponential exp(x) exp(x) exp(x) exp(x)
natural log log(x) log(x) log(x) log(x)
base 10 log log10(x) log10(x) log10(x) log10(x)
square root sqrt(x) sqrt(x) sqrt(x) sqrt(x)
raise to power ( ��� ) x.ˆr pow(x,r) x**r x**r
absolute value abs(x) fabs(x) abs(x) abs(x)
smallest integer � x ceil(x) ceil(x) ceiling(x)
largest integer � x floor(x) floor(x) floor(x)
division remainder rem(x,y) fmod(x,y) mod(x,y) � mod(x,y)
modulo modulo(x,y)a
complex conjugate conj(z) conjg(z) conjg(z)
imaginary part imag(z) imag(z) aimag(z)
drop fraction fix(x) aint(x) aint(x)
round number round(x) nint(x) nint(x)
cosine cos(x) cos(x) cos(x) cos(x)
sine sin(x) sin(x) sin(x) sin(x)
tangent tan(x) tan(x) tan(x) tan(x)
arc cosine acos(x) acos(x) acos(x) acos(x)
arc sine asin(x) asin(x) asin(x) asin(x)
arc tangent atan(x) atan(x) atan(x) atan(x)
arc tangentb atan2(x,y) atan2(x,y) atan2(x,y) atan2(x,y)
hyperbolic cosine cosh(x) cosh(x) cosh(x) cosh(x)
hyperbolic sine sinh(x) sinh(x) sinh(x) sinh(x)
hyperbolic tangent tanh(x) tanh(x) tanh(x) tanh(x)
hyperbolic arc cosine acosh(x)
hyperbolic arc sine asinh(x)
hyperbolic arctan atanh(x)
aDiffer for
��� �
.
batan2(x,y) is used to calculate the arc tangent of ��
� in the range �
�� ��� ��� . The one-argument function atan(x)
computes the arc tangent of
�
in the range �
��
�� ���
�
��
� .
Table 7: Mathematical functions.
LIST OF TABLES 7
Description C++ F90 F77 MATLAB
Conditionally execute statements if if if if
���
end if end if end
Loop a specific number of times for k=1:n do k=1,n do # k=1,n for k=1:n
���
end do # continue end
Loop an indefinite number of times while do while — while
���
end do — end
Terminate and exit loop break exit go to break
Skip a cycle of loop continue cycle go to —
Display message and abort error() stop stop error
Return to invoking function return return return return
Conditional array action — where — if
Conditional alternate statements else else else else
else if elseif elseif elseif
Conditional array alternatives — elsewhere — else
— — — elseif
Conditional case selections switch ��� select case if if
end select end if end
Table 8: Flow Control Statements.
Loop MATLAB C++ Fortran
Indexed loop for index=matrix
statements
end
for (init;test;inc)
�
statements
�
do index=b,e,i
statements
end do
Pre-test loop while test
statements
end
while (test)
�
statements
�
do while (test)
statements
end do
Post-test loop do �
statements
�
while (test)
do
statements
if (test) exit
end do
Table 9: Basic loop constructs.
8 LIST OF TABLES
MATLAB Fortran C++
if l expression
true group
end
IF (l expression) THEN
true group
END IF
if (l expression)
�
true group;
�
IF (l expression) true statement if (l expression)
true state-
ment;
Table 10: IF Constructs. The quantity l expression means a logical expression having a value that
is either TRUE of FALSE. The term true statement or true group means that the statement or group
of statements, respectively, are executed if the conditional in the if statement evaluates to TRUE.
MATLAB Fortran C++
if l expression1
true group A
if l expression2
true group B
end
true group C
end
statement group D
IF (l expression1) THEN
true group A
IF (l expression2) THEN
true group B
END IF
true group C
END IF
statement group D
if (l expression1)
�
true group A
if (l expression2)
�
true group B
�
true group C
�
statement group D
Table 11: Nested IF Constructs.
MATLAB Fortran C++
if l expression
true group A
else
false group B
end
IF (l expression) THEN
true group A
ELSE
false group B
END IF
if (l expression)
�
true group A
�
else
�
false group B
�
Table 12: Logical IF-ELSE Constructs.
MATLAB Fortran C++
if l expression1
true group A
elseif l expression2
true group B
elseif l expression3
true group C
else
default group D
end
IF (l expression1) THEN
true group A
ELSE IF (l expression2) THEN
true group B
ELSE IF (l expression3) THEN
true group C
ELSE
default group D
END IF
if (l expression1)
�
true group A
�
else if (l expression2)
�
true group B
�
else if (l expression3)
�
true group C
�
else
�
default group D
�
Table 13: Logical IF-ELSE-IF Constructs.
LIST OF TABLES 9
F90 C++
SELECT CASE (expression)
CASE (value 1)
group 1
CASE (value 2)
group 2
.
.
.
CASE (value n)
group n
CASE DEFAULT
default group
END SELECT
switch (expression)
�
case value 1 :
group 1
break;
case value 2 :
group 2
break;
.
.
.
case value n :
group n
break;
default:
default group
break;
�
Table 14: Case Selection Constructs.
F90 Named IF F90Named SELECT
name: IF (logical 1) THEN
true group A
ELSE IF (logical 2) THEN
true group B
ELSE
default group C
ENDIF name
name: SELECT CASE (expression)
CASE (value 1)
group 1
CASE (value 2)
group 2
CASE DEFAULT
default group
END SELECT name
Table 15: F90 Optional Logic Block Names.
Fortran C++
DO 1 ...
DO 2 ...
...
IF (disaster) THEN
GO TO 3
END IF
...
2 END DO
1 END DO
3 next statement
for (...)
�
for (...)
�
...
if (disaster)
go to error
...
�
�
error:
Table 16: GO TO Break-out of Nested Loops. This situation can be an exception to the general recom-
mendation to avoid GO TO statements.
10 LIST OF TABLES
F77 F90 C++
DO 1 I = 1,N
...
IF (skip condi-
tion) THEN
GO TO 1
ELSE
false group
END IF
1 continue
DO I = 1,N
...
IF (skip condi-
tion) THEN
CYCLE ! to next I
ELSE
false group
END IF
END DO
for (i=1; i 63 ?
64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G
72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O
80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W
88 X 89 Y 90 Z 91 [ 92 \ 93 ] 94 ˆ 95 _
96 ‘ 97 a 98 b 99 c 100 d 101 e 102 f 103 g
104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o
112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w
120 x 121 y 122 z 123 { 124 | 125 } 126 ˜ 127 DEL
Table 25: The ACSII Character Set.
ACHAR (I) Character number I in ASCII collating set
ADJUSTL (STRING) Adjust left
ADJUSTR (STRING) Adjust right
CHAR (I) � Character I in processor collating set
IACHAR (C) Position of C in ASCII collating set
ICHAR (C) Position of C in processor collating set
INDEX (STRING, SUBSTRING)a Starting position of a substring
LEN (STRING) Length of a character entity
LEN TRIM (STRING) Length without trailing blanks
LGE (STRING A, STRING B) Lexically greater than or equal
LGT (STRING A, STRING B) Lexically greater than
LLE (STRING A, STRING B) Lexically less than or equal
LLT (STRING A, STRING B) Lexically less than
REPEAT (STRING, NCOPIES) Repeated concatenation
SCAN (STRING, SET)a Scan a string for a character in a set
TRIM (STRING) Remove trailing blank characters
VERIFY (STRING, SET)a Verify the set of characters in a string
STRING A//STRING B Concatenate two strings
aOptional arguments not shown.
Table 26: F90 Character Functions.
Action ASCII Character F90 Inputa C++ Input
Alert (Bell) 7 Ctrl-G � a
Backspace 8 Ctrl-H
�
b
Carriage Return 13 Ctrl-M
�
r
End of Transmission 4 Ctrl-D Ctrl-D
Form Feed 12 Ctrl-L
�
f
Horizontal Tab 9 Ctrl-I
�
t
New Line 10 Ctrl-J
�
n
Vertical Tab 11 Ctrl-K
�
v
a
“Ctrl-” denotes control action. That is, simultaneous pressing of the CONTROL key and the letter following.
Table 27: How to type non-printing characters.
14 LIST OF TABLES
C, C++ Variable.component.sub component
F90 Variable%component%sub component
Table 28: Referencing Structure Components.
C, C++ struct data tag �
intrinsic type 1 component names;
intrinsic type 2 component names;
�
;
F90 type data tag
intrinsic type 1 :: component names;
intrinsic type 2 :: component names;
end type data tag
Table 29: Defining New Types of Data Structure.
C, C++ struct data tag �
intrinsic type 1 co
本文档为【C++_Fortran90_Fortran77_Matlab 的详细语法比较】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。