Professional Documents
Culture Documents
----
[1]
1
FORTRAN
FORTRAN
FORTRAN
FORTRAN
1.1
1.2
ax 2 + bx + c = 0, a 0
x1 =
b + b 2 4ac
2a
x2 =
b b2 4ac
2a
abc
(1) abc
(2) abc b 4ac
2
(3) b 4ac 0
2
(4) b 4ac =0
2
x =
b
2a x
(5) b 4ac 0
2
FORTRAN
FORTRAN IBM 1957 IBM 704
FORTRAN
IBM 709 FORTRAN
FORTRAN
FORTRAN
FORTRAN
FORTRAN
FORTRAN
FORTRAN
FORTRAN
( IBM 48 )
ALGOL
FORTRAN
ALGOL
ALGOL
ALGOL
FORTRAN
FORTRAN ALGOL
1.3 FORTRAN
FORTRAN
FORTRAN
ALGOL
FORTRAN FORTRAN
FORTRAN
FORTRAN
C C C
C
C
C
C FORTRAN
C FORTRAN
FORTRAN
FORTRAN
C C++ FORTRAN
C FORTRAN
FORTRAN 77
FORTRAN
FORTRAN 77FORTRAN FORTRAN 90
FORTRAN 95 C C++
FORTRAN 95 FORTRAN 95
C C++ C++FORTRAN 2000
FORTRAN
FORTRAN FORTRAN 95
PC
FORTRAN 95 FORTRAN 95
FORALL
FORTRAN 95
FORTRAN
FORTRAN(High Performance Fortran)Fortran DVienna Fortran CRAFT
FORTRAN 95
FORTRAN 95
FORTRAN
FORTRAN 95
FORTRAN 95 CC++
MATHEMATICAMAPLE
MATLABMacsymaMATHCAD
FORTRAN
1.4 FORTRAN
FORTRAN FORTRAN 95
FORTRAN 90 FORTRAN
1.4.1 FORTRAN 95
FORTRAN
FORTRAN
FORTRAN
FORTRAN
FORTRAN
1.4.2
FORTRAN 95
FORALL
(PURE)
(ELEMENTAL)
WHERE
NULL
CPU_TIME
CEILINGFLOORMAXLOCMINLOC
IEEE 754/854
1. FORALL
FORALL
FORALL
FORTRAN
2. (PURE)
PURE PURE
FORTRAN 95 PURE
PURE FORALL
3. (ELEMENTAL)
4. WHERE
WHERE FORALL FORALL
WHERE
5.
NULL
NULLIFY
6. NULL
NULL
NULL
7. CPU_TIME
CPU_TIME
8. CEILINGFLOORMAXLOCMINLOC
FORTRAN 90 FORTRAN
FORTRAN DIM
FORTRAN 95 MASK
DIM FORTRAN 95 FORTRAN
9.
FORTRAN 95 SAVE
DEALLOCATE
10.
11.
10
1.4.3
FORTRAN 95 FORTRAN 90
FORTRAN 95 FORTRAN
IF
DO
GO TO
DATA
CHARACTER*
1. IF
IF IF IF
2. DO
DO END DO CONTINUE DO
END DO DO
3.
CASE
4. GO TO
GO TO CASE CASE GO
TO CASE
GO TO
5.
6. DATA
DATA DATA
DATA
DATA
11
7.
8.
9. CHARACTER*
CHARACTER*
1.4.4
FORTRAN 90 FORTRAN 95
FORTRAN 95
FORTRAN 95
DO
END IF
PAUSE
ASSIGN GO TO
nH
FORTRAN 90
1. DO
DO DO
FORTRAN DO
2. END IF
END IF
3. PAUSE
PAUSE
WRITE
READ
PAUSE
4. ASSIGN GO TO
ASSIGN
ASSIGN
12
ASSIGN GO TO
ASSIGN
ASSIGN FORMAT
WRITEREADPRINT
5. nH
13
2.
----
D.E.Knuth
[1]
The
Art
of
Computer
Programming
FORTRAN
4 FORTRAN
FORTRAN
FORTRAN
FORTRAN 95
14
[1]
15
4 FORTRAN 95
4.1 FORTRAN
()
FORTRAN 95
FORTRAN 95
4.1.1 FORTRAN 95
FORTRAN 95 FORTRAN 95 4-1
FORTRAN 95
FORTRAN 95
4-1 FORTRAN 95
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0 1 2 3 4 5 6 7 8 9
_
16
and
.
.
FORTRAN 95
.
FORTRAN 95
FORTRAN 95 CVF
( C )
17
B,O,Z
4-2
DATA I, J, K / O1001, 23.54, Z5CA2 /
4.1.2 FORTRAN
FROTRAN FORTRAN 95
Tab
(Tab ) FORTRAN77 6
Tab 6
FORTRAN77 Tab
6 Tab 1 Tab
FORTRAN 95
18
4.2
FORTRAN FORTRAN
6
4
IMPLICIT
EIGEN_FREQUENCY_3
1.234567_long
213
: +.OR.
==%
FORTRAN 95 B
1.
4-3 DO DO
DO I=1,500
4-4 INTENT IN,OUT, INOUT
INTENT(IN)AB
INTENT(INOUT)XYZ
4-5 DO WHILE
DO WHILE( .NOT. VECTOR )
FORTRAN
FORTRAN 95
2.
19
31
3.
4-6
66953
Z5120A
2.3417
.TRUE.
(33.2, 5.0)
4-7 UNSTABLE_POINT
REAL, DIMENSION(3), PARAMETER ::UNSTABLE_POINT =&
(/5.332, 0.221, 190.632/)
4.
CALL
DO
1 5 0 000
0 0034 34
4-8
456
5.
20
FORTRAN 95 R310
4-9
//
+
.NOT.
.OR.
.XXX .
n n 31
6.
12
/
(/
/) ,
=>
: ::
()(//)
4.3
FORTRAN
FORTRAN 95
FORTRAN 95 A
B
4.4
FORTRAN 95
21
FORTRAN
INCLUDE
FORTRAN 95
FORTRAN
FORTRAN ()
FORTRAN90
FORTRAN
FORTRAN
FORTRAN
4-10
&
CONTAINS END
22
&
4-11
22 CHAR = NAME01 // KNOWLEDGE ARCHIVE
23 CHAR = NAME02 // KNOWLEDGEARCHIVE
DO43I=1,N
DO 43 I = 1,N
4.4.1
FORTRAN 132
132
4-12 132
TEXT = CHINESE_SENTENCEthis line has exactly 132 characters and contains
FORTRAN
&
&
FORTRAN 39
&
&,
23
()
()
FORTRAN
4-13
X=(3.0,4.6);Y=(44.5,566.0)
X=(3.0,4.6);
X=(3.0,4.6); Y=(44.5,566.0)
X=(3.0,4.6)&
;Y=(44.5, 566.0)
Y=(44.5,&
566.0);Z=ZERO
4-14
53 INTEGER X,Y ! 53
IF (X==0)76 Y=X 76 IF
1.
&
4-15
ENERGY = 0.5*MASS * VILOC& ! VILOCITY
&ITY**2
ENERGY = 0.5*MASS * VILOC & ! VILOC ITY
&ITY**2
24
2.
4-16
CALL SUBROUTINE A
CALL SUBRO UTINE A
IF X = .NOT .
IF X = .NOT.
4-17
INTEGER X,Y
IF A=0
DO Y=1,20
4-1
4-1
BLOCK DATA
CASE DEFAULT
DOUBLE COMPLEX
DO WHILE
DOUBLE COMPLEX
DO WHILE
DOUBLE PRECISION
IMPLICIT type-specifier
ELSE IF
IMPLICIT NONE
INTERFACE ASSIGNMENT
END DO
INTERFACE OPERATOR
END FILE
MODULE PROCEDURE
END FORALL
RECURSIVE FUNCTION
END FUNCTION
RECURSIVE SUBROUTINE
END IF
END INTERFACE
type-specifier FUNCTION
END MODULE
END PROGRAM
END SELECT
END SUBROUTINE
END TYPE
25
END WHERE
GO TO
IN OUT
SELECT CASE
4.4.2
7 72
C,*,
! 6
()
7 72
0 6
19
1 5
1 5
END
4.4.3
1 5 7 72
6 C,*
73 &, 6 &, 74
80 1 5
4-18
Column:
12345678...73
_________________________________________________________________________
! Define the function CUT_SIN
26
4.4.4
FORTRAN 95 B
FORMAT,DATA,ENTRY DATA
USE
CONTAINS
4-19 FORTRAN
! 100-999
PROGRAM SUM_OF_CUBES
INTEGER A,B,C
DO A = 1,9
DO B = 0,9
DO C = 0,9
IF (100*A + 10*B + C == A**3 + B**3 + C**3) &
PRINT (3I1), A,B,C
END DO
END DO
END DO
END PROGRAM SUM_OF_CUBES
RUN SUM_OF_CUBES
153
370
371
407
1000-9999
27
4-2
4-2
USE
FORMAT ,
IMPLICIT NONE
ENTRY
PARAMETER
IMPLICIT
PARAMETER
DATA
DATA
CONTAINS
END
DATA
4-3
4-3
USE
ENTRY
FORMAT
DATA
CONTAINS
Y N
28
4.5 INCLUDE
INCLUDE
4-20
PROGRAM GREEN_FUNCTION
REAL X,Y,Z
.!
INCLUDE GAUSE
.!
END
GAUSE GREEN_FUNCTION
INCLUDE
INCLUDE INCLUDE
INCLUDE FORTRAN
INCLUDE
INCLUDE
INCLUDE
INCLUDE
4.6
FORTRAN
1.
ASCII
29
FORTRANC
APL ASCII
1960
256 52
(65536)
2.
FORTRAN77
3.
+-()
APL LISP
TIMES
FORTRAN .EQ.**
4.
IFREAD
COBOL
COBOL
()
FORTRAN
5.
C **
30
FORTRAN 95 ! Ada - C //
6.
FORTRAN
7.
8.
FORTRAN
31
FORTRAN
FORTRAN
FORTRAN
FORTRAN ()
FORTRAN
FORTRAN
FORTRAN
5.1
6
------
------
32
------
------
------
------
()
----
(1)
(2)
(3) ()
33
(4)
FORTRAN
FORTRAN
5.2 FORTRAN
10
FORTRAN
FORTRAN
FORTRAN
FORTRAN
FORTRAN
34
FORTRAN
(INTEGER)(REAL)(COMPLEX)(LOGICAL)
(CHARACTER)
FORTRAN
FORTRAN
FORTRAN
FORTRAN FORTRAN77
FORTRAN
FORTRAN
FORTRAN
FORTRAN77
FORTRAN
FORTRAN90 95
FORTRAN90
6
FORTRAN77
35
FORTRAN
()
FORTRAN
FORTRAN ,
FORTRAN
CPU
()
KIND()
LEN()
5-1
REAL(KIND3)ABCXLONG
36
CHARACTER(LEN40KINDGREECE)NAME
FORTRAN
DOUBLE PRECISION
DOUBLE PRECISION
REAL
----
FORTRAN90 COMPLEX
FORTRAN
---- 8bits
28=256
16bits
216
FORTRAN 95
FORTRAN
----
FORTRAN
FORTRAN90 FORTRAN 95
bit
----
37
(
)
5-2
TYPE SAMPLE
REAL
CURRENT
SOURCE
SI401SI402SI403SI404
SAMPLE SAMPLE
CURRENTPHASESOURCE
SI401SI402SI403SI404
TYPE END TYPE
38
5.3
5-1
BYTE
1 byte (8 bits)
BYTE INTEGER(1)
INTEGER(1)
INTEGER
INTEGER(2),
, INTEGER(2), INTEGER(4), or
INTEGER(4),
INTEGER(8)/integer_size:nn
INTEGER(8).
/integer_size:32 (
INTEGER(4))
INTEGER(1)
1 byte (8 bits)
-128 127
INTEGER(2)
-32,768 32,767
INTEGER(4)
-2,147,483,648 2,147,483,647
INTEGER(8)
-9,223,372,036,854,775,808 9,223,372,036,854,775,807
REAL(4)
1.17549435E-38
3.40282347E38 IEEE
S_floating 1.17549429E-38
REAL
1.40129846E-45
REAL(8)
2.2250738585072013D-308 1.7976931348623158D308
DOUBLE
IEEE T_floating
PRECISION
2.2250738585072008D-308 4.94065645841246544D-324
COMPLEX(4)
COMPLEX
1.17549429E-38 1.40129846E-45
COMPLEX(8)
2.2250738585072013D-308
DOUBLE
COMPLEX
2.2250738585072008D-308 4.94065645841246544D-324
LOGICAL
LOGICAL(2),
, LOGICAL(2), LOGICAL(4),
LOGICAL(4),
LOGICAL(8). /integer_size:nn
39
LOGICAL(8).
/integer_size:32 (
LOGICAL(4))
LOGICAL(1)
1 byte (8 bits)
.TRUE. .FALSE.
LOGICAL(2)
.TRUE. .FALSE.
LOGICAL(4)
.TRUE. .FALSE.
LOGICAL(8)
.TRUE. .FALSE.
CHARACTER
1 byte (8
bits)
CHARACTER(LEN=n) CHARACTER*n,
n byte
HOLLERITH
Hollerith 1
Hollerith
byte (8 bits)
5.4 FORTRAN
FORTRAN
FORTRAN
FORTRAN
5.4.1
5 INTEGERREALCOMPLEXLOGICAL
CHARACTER
TYPE
FORTRAN
FORTRAN FORTRAN
FORTRAN90 FORTRAN 95
40
5.4.2
( MATHEMATICA)
()
FORTRAN
FORTRAN
(K1ND)
SHORT
FORTRAN
FORTRAN
FORTRAN Fortran
41
5.4.3
FORTRAN
1.
FORTRAN
1.
2.
3.
4.
7
2
-
+
5
+
-
*
**
5
FORTRAN
42
ABC//RTY ABCRTY
.TRUE..FALSE.
FORTRAN 95 ,
.GT.
.GE.>=
.LT.
.LE.<=
.EQ.==
.NE./=
(1)
(2)
(3)
1 2
1 2
ASCII
43
.NOT.
5-2
5-2
.NOT.
.TRUE.
.NOT.
.FALSE.
.FALSE.
.TRUE.
.AND.
.OR.
.EQV.
.NEQV.
5-3
A.AND.B
.TRUE.
.FALSE.
.TRUE.
.TRUE.
.FALSE.
.FALSE.
.FALSE.
.FALSE.
5-4
A.OR.B
.TRUE.
.FALSE.
.TRUE.
.TRUE.
.TRUE.
.FALSE.
.TRUE.
.FALSE.
5-5
A.EQV.B
44
.TRUE.
.FALSE.
.TRUE.
.TRUE.
.FALSE.
.FALSE.
.FALSE.
.TRUE.
5-6
A.NEQV.B
.TRUE.
.FALSE.
.TRUE.
.FALSE.
.TRUE.
.FALSE.
.TRUE.
.FALSE.
2.
()
5-3
.REMAINDER.
.REVERSE.
.INTEGRAL.
(
)
OPERATOR
45
5.4.4
5-4
345
INTEGER
345
713.2 7.132E2
REAL
(2.775.38)
713.2
COMPLEX
.TRUE.
LOGICAL
2.77+5.38i
TRUE
CHARACTER SPACE_A
SPACE_A
SAMPLE(1.582,(3.2,5.5),CHENG)
SAMPLE(1.582,3.2+5.5iCHENG)
5-5
INTEGER
REAL
2_SHORT
3.14159267895632_QUAD
COMPLEX
(3.14159_HIGH, 56.2)
LOGICAL
.TRUE._BYTE
CHARACTER
CHINESE_
SHORTQUADHIGHBYTECHINESE
46
5.5
FORTRAN
FORTRAN90
5.5.1
FORTRAN
i = s wk r k 1
k =1
i
s (+1 -1)
l i i
r 1 i r
wk r i
-41 -0101001
( 1) (0 26 + 1 25 + 0 24 + 1 23 + 0 22 + 0 21 + 1 20 )
= 41
i slrwk(k=12l)
-41
s=-1l=2r=10w1=1w2=4
n s wk(k=12
l) l r
47
5-6
INTEGER(4) i
31
i = s wk 2k 1
k =1
l=31 r=2
1.
INTEGER
5-7
INTEGER X
INTEGER DIMENSION(:), POINTER :: days, hours
INTEGER(SHORT)RED_BALL
INTEGER(2) POINTER :: k, limit
INTEGER(1) DIMENSION(10) :: min
5-8
INTEGER days, hours
INTEGER(2) k, limit
INTEGER(1) min
DIMENSION days(:), hours(:), min (10)
POINTER days, hours, k, limit
5-9
INTEGER I, X
READ (*,*) I
IF (I) THEN
X=1
END IF
2.
48
FORTRAN
FORTRAN
FORTRAN
FORTRAN
KIND
RANGE
SELECTED_INT_KIND
KIND
x
x
5-10
KIND (0)
KIND (12)
RANGE
INT(LOG10( HUGE(x) ))
INT(MIN (LOG10( HUGE(x) ),
-LOG10( TINY(x) ))).
5-11
X REAL(4) RANGE (X) 37. ( HUGE(X) = (1 - 2-24) x 2128
128
TINY(X) = 2-126 2
3.4028236692093846346337460743177 1038
49
l
-10l < n < 10l n
-1
5-12
INTEGER (SELECTED_INT_KIND (6))X INTEGER(4)X X
106
10-6
INTEGER (SELECTED_INT_KIND (5)) NM
N M
10
10-5
i = SELECTED_INT_KIND(8)
! 4
i = SELECTED_INT_KIND(3)
! 2
i = SELECTED_INT_KIND(10)
! -1,
3.
-+
+-***
.GT..GE.>=.LT..LE.
<=.EQ.==.NE./=
4.
()()
(R403)
[s]n[n...][ _k]
50
s (-)(+)
n (0 9) 0 0
k ( _ )
digit-string
scalar-integer-constant-name
5-13
1 INTEGER(1)
2 INTEGER(2)
4 INTEGER(4)
8 INTEGER(8)
LONG
SHORT
1248 LONG SHORT
DATA
FORTRAN
(R408)
B digit [ digit ]
B digit [ digit ]
0 1.
B
0 l
(R409)
O digit [ digit ]
O digit [ digit ]
0 7.
O
0 7
(R410)
Z digit [ digit ]
Z digit [ digit ]
0 9, A F , 10 15.
51
z
0 9 A F
DATA
CVF
FORTRAN
base 2 36 CVF 2 36
base # 16
base # 10
36 26
0 9
11 A 10 36 A 10B
11C 12 Z 35
5-14 7 3,994,575:
I = 2#1111001111001111001111
m = 7#45644664
J = +8#17171717
K = #3CF3CF
n = +17#2DE110
L = 3994575
index = 36#2DM8F
5-15
0
-112
+43212
62_2
1992110235764803_8
31_SHORT
9999999999999999999_LONG
5-16 :
9999999999999999999 ,
3.14
32,767
33_3
52
5-17
FORTRAN
LOGICAL(1)X
INTEGER(1)X
X = -128
-128
X = 127
127
X = 255
-1
X = 255
255
X = -32768
-32768
X = 32767
32767
X = 65535
-1
Z'80'
Z'7F'
Z'FF'
Z'FF'
Z'8000'
Z'7FFF'
Z'FFFF'
KIND(0)
SHORT
5.5.2
FORTRAN
x = s r e wk r k
k =1
x
s (+1 -1)
r 1 x r
l 1 x x
r
wk r x w1 0
e emin emax
x = 0 wk e 0
l e (REAL(4))
x=0,
53
24
5-7
CVF
5-7
IEEE S_floating
24
24
IEEE T_floating
53
53 2
53
VMS
VAX D_floating 56 53
Compaq Fortran 53
5-8
IEEE S_floating
Compaq VAX F_floating
IEEE T_floating
emin
emax
-125
128
-127
127
-1021
1024
-127
127
-1023
1023
VMS only
1.
REAL DOUBLE
PRECISION FORTRAN
n 4, 8, 16
16 OpenVMS, Tru64 UNIX, Linux
54
/real_size:size
5-18
2.
FORTRAN
FORTRAN
FORTRAN90
DOUBLE PRECISION REAL (REAL(8))
D
FORTRAN
KIND
PRECISION
RANGE
SELECTED_REAL_KIND
KIND
KIND(0.0D0)
KIND(0.0)
x
x
5-19 KIND (0.0)
PRECISION
55
p p
x
INT((DIGITS(x) - 1) * LOG10(RADIX(x)))
RADIX(x) 10 1
X REAL(4) PRECISION(X) 6
INT ((24-1) * LOG10 (2.)) = INT (6.92...)
RANGE
SELECTED_REAL_KIND
p
r
p () r
p ()-10r < n < 10r n
p PRECISION r RANGE
-1
-2
-3
5-20
REAL (SELECTED_REAL_KIND (5))X X 5
! returns 8
5.5.3
56
-+
+-***
.GT..GE.>=.LT..LE.
<=.EQ.==.NE./=
,
5.5.4
FORTRAN
(R412)
[s]n[n...][ _k]
[s]n[n...]E[s]nn...[_k]
[s]n[n...]D[s]nn...
[s]n[n...]Q[s]nn...
413
s (-)(+)
n 0 9 ()
R402 R416
R401
k REAL(4) 4 REAL(8) 8( _ )
ED (R415) 10 1.0E6 1.0 * 10**6
FORTRAN
10
E
D(REAL(8))
KIND(0.0D0)
REAL(4)
KIND(0.0)
0
57
0 00.0000562389 5 0
E (REAL(4))
-7.E2_8 -7.D2
0
HIGHLOWQUAD
(REAL(4))
x=0,
24
5-21
-12.78
+3.73E2
-13.6E_4
10.93E7_QUAD
.96D2
3.14159_4
-.00127
+5.0E3
2E-3_4
123456789D+5
123456789E+5_8
+2.7843D00
2E200_8
123456789Q4000
1.23Q-400
5-22
1,234,567.
325E-47
-47.E47
625._6 6
100
$25.00
-.25D0_2
+2.7182812846182
D 7
58
1234567890D45 D_floating ; G_floating
T_floating
123456789.D400
123456789.D-400
1.Q5000
1.Q-5000
5.6
(c,c)
c
REAL(4) COMPLEX(4)
5.6.1
COMPLEX
COMPLEX [([KIND = ] kind-parameter)] [ attribute-list] entity-list
n 4 or 8
5-23
COMPLEX ch
COMPLEX (KIND=4),PRIVATE :: zz, yy
! COMPLEX*8 zz, yy
59
5.6.2
FORTRAN
KINDRANGEPRECISION
SELECTED_REAL_KIND
5-24
COMPLEX (SELECTED_REAL_KIND(550))CY
CY
5
10-50 1050
5.6.3
-+
+-***
.GT..GE.>=.LT..LE.
<=.EQ.==.NE./=
5.6.4
(R417)
60
(real-partimaginary-part)
(R403)(R412)
6.4.5.2
5-25
(13)
(7.0-7.0)
(03.6E5)
(0.5_4+8.6E29) 4 8
8
5-26
(1.23,)
(1.0, 2H12)
Hollerith
(1.23Q0)
(1.7039E0,-1.7039D0) 2 REAL(16)
5.7
5.7.1
LOGICAL
LOGICAL [([KIND = ] kind-parameter n)] [ attribute-list] entity-list
n 1, 2, 4, 8
5-27
LOGICAL, ALLOCATABLE :: flag1, flag2
LOGICAL (KIND = byte), SAVE :: doit, dont
5-28
LOGICAL flag1, flag2
LOGICAL (KIND = byte) doit, dont
ALLOCATABLE flag1, flag2
SAVE doit, dont
61
5.7.2
(.TRUE.)(.FALSE.)
KIND(.FALSE.)
bit byte
SELECTED_INT_KIND
SELECTED_REAL_KIND
5.7.3
(.NOT.)
(.AND.)(.OR.)(.EQV.)
(.NEQV.)
5.7.4
.TRUE.[_k]
.FALSE.[_k]
5-29
.TRUE._BIT
.FALSE._LONG
! LONG
!.
5.8
62
5.8.1
CHARACTER
CHARACTER [([LEN = ] length-parameter &
[ , [KIND = ] kind-parameter])] [ attribute-list] entity-list
CHARACTER
CHARACTER([KIND=]n)
CHARACTER([LEN=]len)
CHARACTER([LEN=]len [, [KIND=]n])
CHARACTER(KIND=n [, LEN=len])
CHARACTER*len[,]
n 1
len
CHARACTER
5-30
CHARACTER (70)PROJECT
CHARACTER (LEN=30 KIND=GERMAN)TRANSFORMATION
CHARACTER (LEN=25KIND=GREEK)DIMENSION(11)Z1
5.8.2
123.n n
()
0
LEN 1
0
63
FORTRAN
0129
ASCII ACHAR IACHAR
ASCII
LGTLGELLELLT ASCII
5.8.3
//
.GT.
.GE.>=
.LT.
.LE.<=
.EQ.==
.NE./=
.TRUE..FALSE.
5.8.4
(R420)
[k_]'[ch...]'
[k_]"[ch...]"
k 1( _ )
()
ch ASCII
Tab
64
()
5-31
"WHAT KIND TYPE? "
'TODAY''S DATE IS: '
"The average is: "
''
Im a student
Im a student
CHINESE_ CHINESE
5-32 :
'HEADINGS
'Map Number:"
65
3
3
FORTRAN 95
FORTRAN 95
FORTRAN 95
2 FORTRAN 95
6.1 2
()
()
66
()()
FORTRAN 95 FORTRAN
FORTRAN77
FORTRAN
FORTRAN
PARAMETBR
DATA
FORTRAN 95 FORTRAN
DIMENSION FORTRAN 95
FORTRAN 95
67
DATA
SAVE RETURN
END
6-1
X=0
N = X+1
X 0 X
X X 0
X 1 N
X N
X
(variable)(R601)
scalar-variable-name
array- variable-name
subobject
(subobject)(R602)
array-element
array-section
structure-component
substring
6.2 ----
,,,,,
FORTRAN
Kronecker
68
FORTRAN
(3771) 37/71
FORTRAN
FORTRAN (
)
(FORTRAN )
FORTRAN
FORTRAN FORTRAN
FORTRAN
FORTRAN
FORTRAN
FORTRAN 90
69
DATA
FORTRAN
PUBLIC
PRIVATE
PRIVATE
PUBLIC PRIVATE
PUBLIC
PRIVATE
PRIVATE PRIVATE
PRIVATE
SEQUENCE
SEQUENCE
COMMON EQUIVALENCE
FORTRAN
70
PARAMETER
FORTRAN
6.2.1
(R422)
TYPE [[, access-specification] :: ] type-name
[private-sequence-statement]
component-definition-statement
[component-definition-statement]
END TYPE [type-name]
(type-specification)
POINTER
71
:
(component-array-specification)
DIMENSION
(character-length)
(component-initialization)(R429) 2
=initialization-expression
=>NULL()
(initialization-expression)
=>NULL() NULL
2
TYPE(type-name)[attribute-list] entity-list
parent-structure % component-name
(parent-structure)()
END TYPE
PRIVATE
SEQUENCE
PUBLIC PRIVATE
72
SEQUENCE
( SEQUENCE)
1
2 (=)
NULL()
6-2
TYPE SET
INTEGER N, M
END TYPE
TYPE (SET), DIMENSION (2, 2) :: a, b(3)
a b SET
6-3
TYPE CURRENT
REALHIGH=5.5, LOW=1.2
END TYPE CURRENT
.
6-4
TYPE employee_name
CHARACTER(25) last_name
CHARACTER(15) first_name
END TYPE
TYPE employee_addr
CHARACTER(20) street_name
INTEGER(2) street_number
INTEGER(2) apt_number
CHARACTER(20) city
73
CHARACTER(2) state
INTEGER(4) zip
END TYPE
2
6-5 6-4 3
TYPE employee_data
TYPE (employee_name) :: name
TYPE (employee_addr) :: addr
INTEGER(4) telephone
INTEGER(2) date_of_birth
INTEGER(2) date_of_hire
INTEGER(2) social_security(3)
LOGICAL(2) married
INTEGER(2) dependents
END TYPE
6-6
TYPE ARTICLE
CHARACTER(LEN=100)ABSTRACT
INTEGER LINES
CHARACTERPOINTERTEXT()
END TYPE ARTICLE
6-7
TYPE LINK
INTEGER VALUE
TYPE(LINK)POINTERPREVIOUS=>NULL()
TYPE(LINK)POINTERNEXT=>NULL()
END TYPE LINK
TYPE (LINK),POINTRE::A_LINK
ALLOCATE(LINK)
6-8
TYPEPRIVATEFILE
INTEGER FILE_NO
CHARACTER(LEN=30) FOLDER_NAME
CHARACTER(LEN=10) ACCESS_LEVEL
END TYPE
74
6.2.2
,
.
OPERATOR ASSIGNMENT
13
FORTRAN
FORTRAN -
6.2.3
(R431)
type-name (expression-list)
(type-name)
(expression-list)
type-name
75
6-9
TYPE EMPLOYEE
INTEGER ID
CHARACTER(LEN=40) NAME
END TYPE EMPLOYEE
EMPLOYEE(5645, "")
6-10
TYPE ITEM
REAL COST
CHARACTER(LEN=30) SUPPLIER
CHARACTER(LEN=20) ITEM_NAME
END TYPE ITEM
TYPE PRODUCE
REAL MARKUP
TYPE(ITEM) BOOK
END TYPE PRODUCE
6.3
ASDFJASDF
12349123123
12349123123 ASDFJASDF
(R609)
parent-string(substring-range)
76
(parent-string)(R610)
scalar-variable-name
array-element
scalar-structure-component
scalar-constant
(substring-range)(R611)
[starting-position][ending-position]
1 LEN LEN
0
1 LENLEN
i j I j
1 LEN i j
i i 1 j j LEN
0 i j
0
MAX
MAX(ending-position - starting-position + 10)
0 0
6-11
CHARACTER(10)signal_peptide
signal_peptide = HLA-A*0301
signal_peptide(1:3) = HAI
PRINT *, signal_peptide(7:10)
signal_peptide 10
HLA-A*0301 1
3 HAI signal_peptide
HAI-A*0301 7 10 0301
6-12
CHARACTER*8 A, Asteroid
Asteroid = '2000 DG8'
A = Asteroid (1:4)
77
8 2 A Asteroid 2
Asteroid '2000 DG8' A Asteroid '2000'
6-13
TYPE nearly_isotropic_comets
INTEGER inclination
REAL semi-major_axis, eccentricity, perihelion_distance, Absolute_Magnitude
CHARACTER*12 designation
END TYPE nearly_isotropic_comets
TYPE(nearly_isotropic_comets) 2000YEAR
CHARACTER*12 ASTEROID, BIG_INCLINATION(5)
BIG_INCLINATION(2) (1:4) !
2000YEAR % designation(6:12)!
ASTEROID (1:4)!
ABCDEFGH(N:N+1)
BIG_INCLINATION(:) (1:4)
BIG_INCLINATION(1:4) (1:4)
6-14
2
BIG_INCLINATION(:) (1:4)
BIG_INCLINATION (1:4)
5 4
ABCDEFGH(N:N+1)
6.4
parent
(%)
component
section-subscript-list
(R614)(R612)
( B)
part-reference [%part-reference]
(part-reference)(R613)
part-name [(section-subscript-list)]
(section-subscript)(R618)
subscript
subscript-triplet
vector-subscript
6.5.5
part-name (section-subscript-list)
0 0 0
()
6-15 2
TYPE EMPLOYEE
INTEGER ID
79
CHARACTER(LEN=40) NAME
END TYPE EMPLOYEE
CONTRACT EMPLOYEE
TYPE(EMPLOYEE) :: CONTRACT
CONTRACT%ID
6-16
TYPE DOT
REAL X, Y
END TYPE DOT
....
TYPE SCREEN
TYPE(DOT) C, D
END TYPE SCREEN
M SCREEN:
TYPE(SCREEN) M
M%C
M%D (both of type DOT);
M%C has components
M%C%X
M%C%Y of type REAL.
6-17
TYPE CAR_INFO
INTEGER YEAR
CHARACTER(LEN=15), DIMENSION(10) :: MAKER
CHARACTER(LEN=10) MODEL, BODY_TYPE*8
REAL PRICE
END TYPE
...
TYPE(CAR_INFO) MY_CAR
6-18 2
TYPE CHARGE
INTEGER PARTS(40)
REAL LABOR
REAL MILEAGE
END TYPE CHARGE
TYPE(CHARGE) MONTH
TYPE(CHARGE) YEAR(12)
80
MONTH%PARTS(I)
! An array element
! An array section
YEAR(J:K)%PARTS(I)
! An array section
6-19
TYPE NUMBER
INTEGER NUM
TYPE(NUMBER), POINTER :: START_NUM => NULL( )
TYPE(NUMBER), POINTER :: NEXT_NUM => NULL( )
END TYPE
6-20
TYPE, PRIVATE :: SYMBOL
LOGICAL TEST
CHARACTER(LEN=50) EXPLANATION
END TYPE SYMBOL
6.5
FORTRAN 95
FORTRAN
DIMENSION DIMENSION
81
6.5.1
6-1
USE
ENTRY
FORMAT
DATA
CONTAINS
a
b E
Eab a 7
b 10
USE ENTRY FORMAT DATA
CONTAINS
Eab Y N
7 FORTRAN
7 FORTRAN
REAL A(22510)
82
A 3 22510
REAL A(20:2410)
2
0 24 25
A 2 25 10 = 500 A 500
A
6-21
DIMENSION A(20:2410)
REALDIMENSION(20:2410):: A
COMMON A(20:2410)
TARGET A(20:2410)
n 1n 1
n
A
REAL A(2-5:1910)
REAL A(25:2910)
6.5.2
INTENTTARGETPARAMETER
POINTER
POINTER
83
6.5.3
6-22 1 X
INTEGERDIMENSION(25)X
X
X(3)X(12)X(24)
3 A
REALDIMENSION(22510):: A
A
A(1125)A(2228)A(11710)
(1125)
6.5.4
6-23
INTEGERDIMENSION(25)X
X(1016)=78
1 X 25 X X 10
16 7 X 7
78
(1016) 3
6.5.5
R612
(R616)
6.3 R611
(R618)
3
84
subscript
subscript-triplet
vector-subscript
(subscript-triplet)(R619)
[subscript][subscript][stride]
(vector-subscript)(R621) 1
(stride)
0
0
0 0
6-24
X(23)
X(1:N:2M)
Y(: , : , :)(1:3)
SCALAR_A % ARRAY_D(L)
SCALAR_A % ARRAY_D(1:L)
SCALAR_A % ARRAY_E(1:N)%SCALAR_D
ARRAY_F(1:N:2) % ARRAY_G(I,J) % STRING(K)(:)
TYPE REPAIR_BILL
REAL PARTS (30)
REAL LABOR
END TYPE REPAIR_BILL
TYPE VEHICLE
CHARACTER(LEN=35)OWNER
INTEGER MILEAGE
TYPE(REPAIR_BILL)COST
END TYPE VEHICLE
TYPE(VEHICLE)BLACK_BURK YELLOW_XIALI
PRINT*BLACK_BURK % COST % PARTS
PRINT*YELLOW_XIALI % COST % LABOR
PRINT*BLACK_BURK % OWNER
TYPE(REPAIR_BILL)FIRST
85
TYPE(REPAIR_BILL)FOR2000(10)
6-25
FIRST % LABOR
FIRST % PARTS(I)
FIRST % PARTS
FIRST % PARTS(IJ)
FOR2000(K)% LABOR
FOR2000(K)% PARTS(I)
FOR2000(K)% PARTS
FOR2000(K)% PARTS(IJ)
6-26
FOR2000 % LABOR
FOR2000 % PARTS(I)
FOR2000(KL)% LABOR
FOR2000(KL) % PARTS(I)
6-27
FOR2000(KL) % PARTS
FOR2000(KL) % PARTS(IJ)
FOR2000 % PARTS
FOR2000 % PARTS(IJ)
1.
1
2.
(R619)
1
()
86
0
0
6-28 A
A(789)
A
A(47534)
2 A 1 2
1(42) 8 8
A(453)
A(454)
A(553)
A(554)
A(653)
A(654)
A(753)
A(754)
A(4528) 1 0
A(2511035) 2 A
A(25)
A(60)
A(95)
87
3.
FORTRAN
6-30
INTEGER I(10)
REAL A(100)
I=(/ 2335114657657889901/)
A(I)=3.34
2 1 I(10) A(100)
I I A
I A(I) I
A(100)
I A
1.
2.
3. INTENT(OUT) INTENT(INPUT)
I
I=(/ 2335234657657889901/)
READ
6.5.6
1
6-31 A
A(201020)
A
A(4227 9 10153)
88
A(4910)
A(11910)
A(18910)
A(4913)
A(11913)
A(18913)
()
INTEGER DIMENSION(4)I=(/3739/)
A(10208 I 14)
A(10314)
A(18314)
A(10714)
A(18714)
A(10314)
A(18314)
A(10914)
A(18914)
6.5.7
1
6-32 2
A(23)
1 2 2 3
A(11)A(21)A(12)A(22)A(13)A(23)
89
1 2 2 2
1 1
6.5.6
1
1
1
(R432)
(/ ac-value-list /)
(ac-value-list)(R723)
do (R434) do do
6-33
(SQRT(REAL(K))K=1013)
REAL(K)(SQRT(REAL(K))K=1020) do
K
(/ 3.1623.3173.4643.606 /)
(ac-value-listac-do-variable=scalar-integer-expression&
scalar-integer-expression [scalar-integer-expression])
6-34
/2.46.42.42.59.8/)
90
6-35
(/X(110I)X(3030I-2)/)
do
6-36
(/(SQRT(REAL(I))I=010)/)
do
0 0
do do
do do
91
7
FROTRAN
FORTRAN 2
FORTRAN
FORTRAN
FORTRAN
FORTRAN
NAMELIST
7.1
7-1
7-1
INTEGER
REAL( DOUBLE PRECISION)
COMPLEX
LOGICAL
CHARACTER
TYPE()
DIMENSION
ALLOCATABLE
POINTER
TARGET
92
DATA
PARAMETER
PUBLIC
PRIVATE
INTENT
OPTIONAL
SAVE
EXTERNAL
INTRINSIC
NAMELIST
EQUIVALENCE
COMMON
2 FORTRAN
FORTRAN90 95
7-1 2 XY
FORTRAN
REAL XY
POINTER XY
2 1
REAL POINTERXY
2 DIMENSION
DIMENSION
FORTRAN
7-2
COMPLEX X
DIMENSION X(35)
SAVE X
93
COMPLEX X(35)
SAVE X
COMPLEXDIMENSION(35)SAVEX
COMPLEXSAVEX(35)
FORTRAN
FORTRAN
IMPLICIT NONE
7-1 FORTRAN
7.2
5
(R501)
type-specification [[ attribute- specification]:: ] entity-declaration-list
(type-specification)
(entity-declaration-list)(attribute- specification)[]
(type-specification)(R502)
INTEGER [kind-selector]
REAL [kind-selector]
DOUBLE PRECISION
COMPLEX [kind-selector]
CHARACTER [character-selector]
94
LOGICAL [kind-selector]
TYPE(type-name)
(kind-selector)(R506)
([KIND = ] kind-value)
(kind-value)
(attribute- specification)(R503)
PARAMETER
ALLOCATABLE
DIMENSION(array- specification)
EXTERNAL
INTENT(intent-specification)
INTRINSIC
OPTIONAL
POINTER
SAVE
TARGET
access- specification
(initialization)(R505) 2
= initialization-expression
=>NULL()
(character-length) CHARACTER
()
95
PARAMETER
=> POINTER
= POINTER
(function-name)
POINTER
7-3
REAL, INTENT(IN) :: COS
REAL, INTRINSIC :: SIN
INTEGER X(25)
LOGICALDIMENSION(1015)RESULT1RESULT2
INTEGERPARAMETERSHORT=SELECTED_INT_KIND(4)
COMPLEX :: SQUARE_ROOT = ( 2.76, -0.85)
REAL, ALLOCATABLE :: X( : , : )
TYPE, POINTER :: CURRENT_OF_SAMPLE => NULL()
7.2.1
INTEGER
7-4
INTEGER X
INTEGER DIMENSION(:), POINTER :: days, hours
INTEGER(SHORT)RED_BALL
INTEGER(2) POINTER :: k, limit
INTEGER(1) DIMENSION(10) :: min
7-5
INTEGER days, hours
INTEGER(2) k, limit
INTEGER(1) min
DIMENSION days(:), hours(:), min (10)
POINTER days, hours, k, limit
96
7.2.2
REAL
DOUBLE
REAL(DOUBLE)
7-6
REAL (KIND = high), OPTIONAL :: testval
REAL, SAVE :: a(10), b(20,30)
DOUBLE PRECISIONPOINTERAB()
DOUBLE PRECISIONDIMENSION(510)TABLE1TABLE2
REAL(DOUBLE)POINTERAB()
REAL(DOUBLE)DIMENSION(510)TABLE1TABLE2
7-7
REAL (KIND = high) testval
REAL a(10), b(20,30)
OPTIONAL testval
SAVE a, b
DOUBLE PRECISION TABLE1TABLE2
DIMENSION TABLE1(510)TABLE2(510)B()
POINTER A
7.2.3
COMPLEX
7-8
COMPLEX ch
COMPLEX (KIND=4),PRIVATE :: zz, yy
! COMPLEX*8 zz, yy
97
7.2.4
LOGICA
7-9 :
LOGICAL, ALLOCATABLE :: flag1, flag2
LOGICAL (KIND = byte), SAVE :: doit, dont
7-10
LOGICAL flag1, flag2
LOGICAL (KIND = byte) doit, dont
ALLOCATABLE flag1, flag2
SAVE doit, dont
7.2.5
CHARACTER
(character-selector)(R507)
length-selector
(LEN =length-value , KIND = kind-value )
(length-value , [ KIND = ] kind-value )
(KIND = kind-value [LEN =length-value] )
(length-selector)(R508)
([LEN =] length-value)
* character-length[ ]
(LEN)(R509)
(length-value)
scalar-integer-literal-constant
(length-value)(R510)
specification-expression
98
*
*
1
0
IMPLICIT *
*
7-11
CHARACTER (LEN=25KIND=GREEK)DIMENSION(11)Z1
CHARACTER (LEN=20KIND=KANJI)SAVEGREETING(2)
CHARACTER (10)QUESTION=WHERE
CHARACTER (LEN=*KIND=CHINESE)PARAMETERMESSAGE = &
7-12
CHARACTER (70)PROJECT
99
7.2.6
TYPE TYPE
PUBLIC
FUNCTION
7-13
TYPE(SAMPLE)DIMENSION( )ALLOCATABLESTOVE
TYPE(STUDENT)SAVEGRAD(5)
TYPE(HOMEWORK)SAVEQUESTIONTAPEWORD_SHEET
7-14 :
TYPE(SAMPLE)STOVE
TYPE(STUDENT)GRAD(5)
TYPE(HOMEWORK)QUESTIONTAPEWORD_SHEET
DIMENSION STOVE( )
ALLOCATABLE STOVE
SAVE GRAD(5), QUESTIONTAPEWORD_SHEET
100
7.3
FORTRAN
FORTRAN
IMPLICIT NONE
REAL
ABCDEFGH
INTEGER I J K L M N
REAL
OPQRSTUVWXYZ
FORTRAN
IJKLMN
IMPLICIT type-specification(letter-specification-list)
IMPLICIT NONE
(R543)
letter[-letter]
IMPLICIT
IMPLICIT
letter-letter
IMPLICIT
2
IMPLICIT
101
IMPLICIT
IMPLICIT COMPLEX(E-GW-Z)
IMPLICIT
(E-GW-Z)
(A-DHO-V)(I-N)
IMPLICIT NONE
7-15 IMPLICIT
IMPLICIT CHARACTER*30(BT)COMPLEX(W-Z)
IMPLICIT LOGICAL(KIND=BIT)(Q)
IMPLICIT REAL(QUAD)(X-Z)
IMPLICIT TYPE(NUMBER)(A-E)
IMPLICIT TYPE(ARTICAL)(AV)CHARACTER*100(B)
7-16 IMPLICIT
IMPLICIT CHARACTER*30(BT)COMPLEX(Z -W)W Z
IMPLICIT LOGICAL(KIND=BIT)(Q)REAL(QUAD)(P-T)Q 2
IMPLICIT TYPE(ARTICAL)(A-H)CHARACTER*100(BQ)B 2
7.4
3
ALLOCATABLE
4 DIMENSION
ALLOCATABLE
102
7.3.1 4
4 (R513)
explicit-shape-specification-list
deferred-shape-specification-list
assumed- shape-specification-list
assumed-size-specification
(explicit-shape arrays)
(deferred-shape arrays)
(assumed- shape arrays)
(assumed-size arrays)
FORTRAN 7 2 3
FORTRAN 7
0
POINTER ALLOCATABLE
7.3.2
(R514)
[ low-bound ] upper-bound
(upper-bound)(low-bound)
1
0
103
0
0
7-17
INTEGER X(20305-1040)
.
SUBROUTINE AAA(IJK)
REALDIMENSION(10I+2J)K
.
7-18
INTEGER X(20305-1040)
.
SUBROUTINE AAA(IJK)
REAL K
DIMENSION K(10I+2J)
.
7.3.3
(R518)
ALLOCATE
LBOUND
UBOUND
104
7-19
REALPOINTERA( )B( )
REALALLOCATABLEA( )
7-20
REAL A( )B( )
POINTER AB
ALLOCATABLE A
7.3.4
(R517)
[ low-bound]
1
1
POINTER ALLOCATABLE
7-21
SUBROUTING AAA(XYZ)
REALDIMENSION(5)A
REALINTENT(IN)X( )Y(5)
7-22
SUBROUTING AAA(XYZ)
REAL X( )Y(5)Z
DIMENSION A(5)
INTENT(IN)XY
.
105
7.3.5
()
(*)
(R519)
[ explicit-shape-list] [ low-bound] *
x v x-v+1
c
t
MAX(INT((c-t+1)/e)0)
e
r r-1
1
LBOUND
7-23
SUBROUTING PRO(ABC)
REALDIMENSION(A*)B
REAL C(10020*)
.
106
7-24
SUBROUTING PRO(ABC)
REAL B C(10020*)
DIMENSION B(A*)
.
7.3.6
7-2
7-2
I/O
DIMENSION
type-specificationDIMENSION(array-specification)[ attribute-list]&
entity-list
DIMENSION
107
initialization
ALLOCATABLE
INTENT
OPTIONAL
PARAMETER
POINTER
PRIVATE
PUBLIC
SAVE
TARGET
DIMENSION ALLOCATABLEPOINTERTARGETCOMMON
DIMENSION
(R526)
DIMENSION[ ] array-name(array-specification)&
[array-name(array-specification)]
7-25
REALALLOCATABLETARGETX( )
REALDIMENSION(30)TARGETSAVEMETER
7-26
REAL X( )METER
DIMENSION METER(30)
TARGET XMETER
ALLOCATABLE X
SAVE METER
7-27
REAL XMETER
TARGET XMETER(30)
ALLOCATABLE X( )
SAVE METER
7-28 COMMON
COMMON / MOTION / TIME(30)SPACE(100010001000)
108
ALLOCATABLE
DIMENSION(deferred-shape- specification-list)
PRIVATE
PUBLIC
SAVE
TARGET
ALLOCATABLE (R527)
ALLOCATABLE[] array-name [(deferred-shape- specification-list)]&
[array-name [(deferred-shape- specification-list)]]
ALLOCATABLE
ALLOCATABLE
ALLOCATABLE DIMENSION
7-29
REALALLOCATABLESAVEX()
INTEGERALLOCATABLEDIMENSION()Y
7-30
REAL X()
INTEGER Y
DIMENSION Y()
ALLOCATABLE XY
SAVE X
7.4
(POINTER) POINTER
POINTER
109
POINTER
ALLOCATE POINTER
POINTER
TARGET
ALLOCATABLE
TARGET
( 7.5) ASSOCIATED
DEALLOCATE
ALLOCATE
DEALLOCATE NULLIFY
ASSOCIATED
POINTER
initialization
DIMENSION(deferred-shape- specification-list)
OPTIONAL
PRIVATE
PUBLIC
SAVE
POINTER (R528)
POINTER [] object-name [(deferred-shape- specification-list)]&
[object-name [(deferred-shape- specification-list)]]
110
(
)
7-31
TYPE(SAMPLE)POINTERCAPACITANCE
REALPOINTERA()B()
7-32
TYPE(SAMPLE) CAPACITANCE
REAL A()B()
POINTER CAPACITANCEAB
TARGET
type-specificationTARGET [ attribute-list]entity-list
POINTER
initialization
ALLOCATABLE
DIMENSION
INTENT
OPTIONAL
PRIVATE
PUBLIC
SAVE
TARGET (R529)
TARGET [] object-name [(array-specification)]&
[object-name [(array-specification)]]
7-33
TYPE(SAMPLE)TARGETCAPACITANCE
REALTARGETDIMENSION(100100)AB(100)
7-34
TYPE(SAMPLE) CAPACITANCE
111
REAL AB(100)
DIMENSION A(100100)
TARGET CAPACITANCEAB
7.5
2
()
obiect-name = initialization-expression
pointer-name =>NULL()
DATA
PARAMETER
obiect-name = initialization-expression
PARAMETER
PI=3.14
7.5.1 DATA
DATA 2
DATA
DATA
( 5 )
112
DEALLOCATE ASSOCIATED
(initialization)
obiect-name = initialization-expression
pointer-name =>NULL()
DIMENSION
POINTER
PRIVATE
PUBLIC
SAVE
TARGET
DATA
SAVE
SAVE SAVE
SAVE
DATA (R532)
DATA data-object-list / data-value-list / &
[[ ] data-object-list / data-value-list / ]
(data-object)(R534)
varible
data-implied-do
(data-value)(R538)
[repeat-factor * ] data-constant
(repeat-factor)(data-constant)(R540)
113
scalar-constant
scalar-constant-subobject
signed-integer-literal-constant
signed-real -literal-constant
NULL()
structure-constructor
boz-literal-constant
do (data-implied-do)(R535)
(data-implied-do-object-listscalar-integer-variable = &
scalar-integer-expressionscalar-integer-expression &
[ scalar-integer-expression])
do (data-implied-do-object)(R536)
array-element
scalar-structure-component
data-implied-do
DATA
NULL() DATA
POINTER
DATA
DATA
114
do
DATA
DATA
do
DATA 0 DATA
DATA
do do
do do
0 0 do
0
DATA
DATA
0
7-35
CHARACTER(LEN= 20)SYMBOL = AIPHA
INTEGERDIMENSION(110)COUNT = (/(1I=211)/)
TYPE(LINK)POINTERSTART=>NULL()
TYPE(SAMPLE)SAMPLE1 = SAMPLE(33BETA)&
SAMPLE2= SAMPLE(45BETA)
REALOVERFLOW(100100)=RESHAPE((/((1.0J=1K-1)&
(0.0J=K100)K=1100)/)(/100100/))
7-36
CHARACTER(LEN= 20)SYMBOL
INTEGER COUNT
DIMENSION OUNT(110)
TYPE(LINK)START
POINTER START
DATA START /NULL()/
DATA SYMBOL /AIPHA /COUNT /10*0/
TYPE(SAMPLE)SAMPLE1SAMPLE2
115
RESHAPE OVERFLOW
2
7.5.2
PARAMETER PARAMETER
PARAMETER PARAMETER
PARAMETER
type-specificationPARAMETER [ attribute-list]name= initialization-expression
PARAMETER
initialization()
DIMENSION
PRIVATE
PUBLIC
SAVE
PARAMETER (R530)
PARAMETER (name-constant= initialization-expression &
[name-constant= initialization-expression ])
PARAMETER
PARAMETER
PARAMETER
116
PARAMETER
7-37
INTEGERPARAMETERLOCAL=100
INTEGERPARAMETERA=COUNT(2010)&
TEST=100+LOCAL
7-38
INTEGER LOCALATEST
PARAMETER (LOCAL=100)
PARAMETER(A= COUNT(2010)&
TEST=100+LOCAL)
7.6
PUBLIC PRIVATE
INTENT
OPTIONAL
SAVE
PUBLIC
PRIVATE
PUBLIC PRIVATE
type-specificationPUBLIC [ attribute-list]entity-list
type-specificationPRIVATE [ attribute-list]entity-list
PUBLIC PRIVATE
TYPEPUBLICtype-name
TYPEPRIVATEtype-name
117
PRIVATE id
POINTER
initialization
ALLOCATABLE
DIMENSION
EXTERNAL
INTRINSIC
PARAMETER
POINTER
TARGET
SAVE
PUBLIC PRIVATE
id(access-id)(R523)
use-name
generic-specification
(generic-specification)(R1207)
generic-name
OPERATOR()
ASSIGNMENT(=)
13
7-39 PUBLIC PRIVATE
PUBLIC HYPERBOLIC_COS, HYPERBOLIC_SIN !
PRIVATE HY_COS_RAT, HY_SIN_RAT
PRIVATE HY_COS_INF_PREC
PUBLIC :: OPERATOR( .THAT.), OPERATOR(+), ASSIGNMENT(=)
PUBLIC PRIVATE
PUBLIC PRIVATE
(use-name)
id PUBLIC PRIVATE
118
PRIVATE
PUBLIC
PUBLIC
id PUBLIC
id PRIVATE PUBLIC
7-40
REALPUBLICGLOBAL_1
TYPE, PRIVATE :: LOCAL_DATA
LOGICAL :: ANSWER
REAL,DIMENSION(20) :: DENSITY
END TYPE LOCAL_DATA
7-41 :
REAL GLOBAL_1
PUBLIC GLOBAL_1
TYPE, LOCAL_DATA
LOGICAL ANSWER
REAL DENSITY (20)
END TYPE LOCAL_DATA
PRIVATE LOCAL_DATA
7-42 :
TYPR LIST_ELEMENT
PRIVATE
REAL VALUE
TYPE (LIST_ELEMENT), POINTER:: NEXT, FORMER
END TYPR LIST_ELEMENT
7-43 :
MODULE M
PRIVATE
REAL A, B, TEMP(20)
REAL, PUBLIC :: X(20), Y(20)
END MODULE M
119
INTENT
IN
OUT
INOUT
IN
OUT
INOUT
INTENT
INTENT
type-specificationINTENT(intent- specification) [ attribute-list]&
dummy-argument-name-list
INTENT INOUOTINOUT
INTENT
DIMENSION
OPTIONAL
TARGET
INTENT INOUOTINOUT
INTENT
INTENT
INTENT
INTENT
INTENT INTENT
120
INTENT(OUT)
7-44
SUBROUTING MOVE(FROMTO)
USE PERSON_MODULE
TYPE(PERSON), INTENT(IN) :: FROM
TYPR(PERSON), INTENT(OUT) :: TO
7-45 :
SUBROUTING MOVE(FROMTO)
USE PERSON_MODULE
TYPE(PERSON) FROM, TO
INTENT(IN) FROM
INTENT(OUT) TO
OPTIONAL
OPTIONAL
type-specificationOPTIONAL [ attribute-list]dummy-argument-list
OPTIONAL
DIMENSION
121
EXTERNAL
INTENT
POINTER
TARGET
OPTIONAL
OPTIONAL
OPTIONAL
7-46
CALL SORT_X (X= VECTOR_A)
INTEGER TSIZE
7-47 :
SUBROUTING SORT_X (X,SIZEX, FAST)
REAL X ( : )
INTENT (INOUT) X
INTEGER SIZEX
LOGICAL FAST
INTENT (IN) SIZEX, FAST
OPTIONAL SIZEX, FAST
INTEGER TSIZE
122
SAVE
SAVE
SAVE
SAVE
type-specificationSAVE [ attribute-list]entity-list
SAVE
initialization
ALLOCATABLE
DIMENSION
POINTER
TARGET
PUBLIC
PRIVATE
PARAMETER
SAVE PARAMETER
SAVE
SAVE SAVE (R524)
SAVE [[ ] saved- entity-list]
(saved- entity)(R525)
data-object-name
/ common-block-name /
SAVE
SAVE
SAVE
SAVE
123
SAVE SAVE
SAVE
SAVE
SAVE ()
SAVE
7-48
REALDIMENSION(10)SAVEA
7-49
REAL A
DIMENSION A(10)
SAVE A
7-50
SAVE XY/BLOCKA/Z/BLOCKB/
7.7
PUBLICPRIVATESAVE
EXTERNAL INTRINSIC
EXTERNAL
EXTERNAL
INTRINSIC
EXTERNAL INTRINSIC
EXTERNAL INTRINSIC
EXTERNAL
type-specificationEXTERNAL [ attribute-list]function-name-list
EXTERNAL
124
OPTIONAL
PUBLIC
PRIVATE
EXTERNAL
EXTERNAL
(R1208)
EXTERNAL[ ] external-name-list
EXTERNAL
EXTERNAL
MODULE PROCEDURE
7-51
SUBROUTING SUB(DESIGN)
INTEGEREXTERNALDESIGN
LOGICALEXTERNALSIN
7-52
SUBROUTING SUB(DESIGN)
INTEGER DESIGN
LOGICAL SIN
EXTERNAL DESIGNSIN
INTRINSIC
type-specificationINTRINSIC [ attribute-list]intrinsic-function-name-list
INTRINSIC
PUBLIC
PRIVATE
INTRINSIC (R1209)
INTRINSIC [ ] intrinsic-procedure-name-list
INTRINSIC
125
INTRINSIC
INTRINSIC EXTERNAL
FORTRAN
7-53
REALINTRINSICSINCOS
7-54
REAL SINCOS
INTRINSIC SINCOS
7.8
7-3
7-3
ALL
DI
PA
OP
EX
IN
OCA
ME
RA
TI
TE
TR
TAB
NS
ME
RN
IN
LE
IO
TE
AL
SI
R
INITI
ALIZ
ATIO
N
126
ALL
OCA
TAB
LE
DIM
ENSI
ON
POIN
TER
TAR
GET
PAR
AME
TER
PUB
LIC
PRIV
ATE
INTE
NT
OPTI
ONA
L
SAV
E
EXT
ERN
AL
7.9
FORTRAN
127
7-55
SUBROUTING SWAP_ARRAYS (X, Y, X_NAME, Y NAME)
REAL, DIMENSION(:), INTENT(INOUT) :: X,Y
CHARACTER (LEN= *), INTENT(IN) :: X_NAME, Y_NAME
REAL C (SIZE(X))
CHARACTER (LEN= LEN(X_NAME) + LEN(Y_NAME) +20) MESSAGE
C=X
X=Y
Y=C
MESSAGE = X_NAME // and //Y_NAME// are swapped.
PRINT *, MESSAGE
END SUBROUTING SWAP_ARRAYS
C , MESSAGE .
7.10 NAMELIST
NAMELIST
NAMELIST (R544)
NAMELIST / namelist-group-name / variable-name-list &
[[ ]/ namelist-group-name / variable-name-list ]
NAMELIST
(variable-name-list)
128
PUBLIC
PRIVATE PRIVATE
NAMELIST
NAMELIST
7-56
NAMELIST / X_LIST / I, J, K, L, M, N
NAMELIST / Y_LIST / A, B, C
7.11
FORTRAN
FORTRAN
FORTRAN
COMMON
EQUIVALENCE
SEQUENCE
FORTRAN COMMON EQUIVALENCE
COMMON
EQUIVALENCE
FORTRAN
FORTRAN90
SEQUENCE
7.11.1
FORTRAN
129
FORTRAN
FORTRAN
SEQUENCE
7-4
7-4
1
130
n ( n )
n ( n )
(
)
7.11.2
131
FORTRAN
FORTRAN
FORTRAN
4
FORTRAN
FORTRAN FORTRAN
FORTRAN
()
C
LISP
FORTRAN
132
FORTRAN
FORTRAN FORTRAN
FORTRAN
8.1
8-1
2.7183
.TURE.
X(I)
X
133
X(101005)
A%B
X(I)(KK+100)
X(I)
8.1.1
8-2
X
Y(3)
Z(10100)
(X+SIN(Y))
(/5.524031/)
EULER(59)
RT
8.1.2
8-1 FORTRAN
FORTRAN
FORTRAN
operator x
8-3
+A
-G
.NOT. B
134
+-.NOT.
+
2
x operator y
2
8-4
A+B
D**3
X .AND. Y
A .GT. B
C .NE. D
PROGRAMER // CALCULATE
A == B
C-D
8.1.3
FORTRAN
8-1 FORTRAN
8-1 FORTRAN
+-()
***/+-()
//
.EQ..NE.
==/=
.GT..GE..LT..LE.
>>=<<=
.NOT.()
.AND..OR..EQV.NEQV. (
)
==/=>>=<<= FORTRAN
.EQ..NE..GT..GE..LT..LE.
135
FORTRAN
FORTRAN
.XXX .
n n 31
8.2.4
FORTRAN
FORTRAN
1.
(R701)
constant
constant-subobject
variable
array-constructor
structure-constructor
function-reference
(expression)
constant-subobject
136
8-5
3.1416
PI
LENGTH
WHOLE(I:I)
X(K)
X(:,1:K)
STRING(I:J)
(/I,5,100/)
BESSEL1(A,B)
F(X)
(WHOLE(I:I)//BUT)
PI
WHOLE(I:I) I
BESSEL1(A,B) F(X)
2.
(R703)
[defined-operetor]primary
(defined-operetor)(R704)
.letter[letter] .
31
8-6
.ABEL.G
.ABEL.
3.
(R705)
defined-unary-expression[**exponentiation-expression]
137
(exponentiation-expression)
X**Y**Z X**(Y**Z)
8-7
X**Y
X**Y**Z
.ABEL.G
4.
*/(R706)
[multiplication-expression*]exponentiation-expression
multiplication-expression / exponentiation-expression
(multiplication-expression)
X*Y*Z (X*Y)*Z
8-8
X*Y
X*Y*Z
X/Y
X/Y/Z
X**Y
.ABEL.G
5.
+-(R707)
[summation-expression + ] multiplication -expression
summation-expression - multiplication expression
+ multiplication -expression
- multiplication expression
X+Y+Z (X+Y)+Z
+
8-9
X+Y
138
X-Y+Z
-X-Y-Z
-X
+X
X*Y
X/Y/Z
X**Y
.ABEL.G
6.
//(R711)
[concatenation-expression // ] summation-expression
8-10
X//Y
X//Y//Z
X+Y
-X-Y-Z
-X
X*Y
X/Y/Z
X**Y
.ABEL.G
7.
(R713)
[concatenation-expression relation-operator ] concatenation-expression
==/=>>=<<=
.EQ..NE..GT..GE..LT..LE.
8-11
X .NE. Y
X <=Y
X//Y
X+Y
-X
X/Y/Z
X**Y
.ABEL.G
139
8.
.NOT.(R715)
[.NOT. ] comparision-expression
.NOT.
8-12
.NOT. X
X .NE. Y
X <=Y
X//Y
X+Y
X/Y/Z
X**Y
.ABEL.G
9.
.AND.(R716)
[conjunct-expression .NOT. ] not-expression
.AND. X .AND.
Y.AND. Z (X .AND. Y).AND. Z
8-13
X .AND. Y
X .AND. Y.AND. Z
.NOT. X
X .NE. Y
X <=Y
X//Y
X+Y
X/Y/Z
X**Y
.ABEL.G
10.
.OR.(R717)
[disjunct-expression .OR. ] conjunct -expression
140
.OR. X.OR.
Y.OR. Z (X.OR. Y).OR. Z
8-14
X.OR. Y
X.OR. Y.OR. Z
X .AND. Y
.NOT. X
X .NE. Y
X <=Y
X//Y
X+Y
X/Y/Z
X**Y
.ABEL.G
11.
.EQV..NEQV.(R718)
[equivalence-expression .EQV. ] disjunct -expression
equivalence-expression .NEQV. disjunct expression
.EQV. .NEQV.
X.NEQV. Y.EQV. Z (X.NEQV. Y).EQV. Z
8-15
Y.EQV. Z
X.NEQV. Y
X.NEQV. Y.EQV. Z
X.OR. Y
X .AND. Y
.NOT. X
X .NE. Y
X <=Y
X//Y
X+Y
X/Y/Z
X**Y
.ABEL.G
12.
(R723)
[ expression defined-operator ] equivalence-expression
141
(expression)
8-16
X .CROSS. Y
X .CROSS. Y .CROSS. Z
Y.EQV. Z
X.NEQV. Y
X.NEQV. Y.EQV. Z
X.OR. Y
X .AND. Y
.NOT. X
X .NE. Y
X <=Y
X//Y
X+Y
X/Y/Z
X**Y
.ABEL.G
13.
8-17
X
.INVERSE. X
X**Y
X*Y
-X
X//Y
X .EQ. Y
.NOT. X
X .AND. Y
X .OR. Y
X .EQV. Y
X .CROSS. Y
8-2
8-2
142
()
[]
[**]
[*]
/
[+]
-
+
-
[ //]
[]
[.NOT.]
[ .AND.]
[ .OR.]
[ .EQV.]
.NEQV.
[]
8.2.5
8-3
8-3
**
* /
+-
+-
//
.EQ..NE..LT..LE..GT..GE.
==/=<<=>>=
.NOT.
.AND.
.OR.
143
.EQV..NEQV.
8-3
8.2.6
8-4
8-4
IRZ
IRZ
IRZ
IRZ
IRZ
RRZ
IRZ
ZZZ
//
.EQ..NE.
IRZ
LLL
==/=
IRZ
LLL
IRZ
LLL
.LT..LE..GT..GE.
IR
LL
==/=<<=>>=
IR
LL
++-*/**
.NOT.
.AND..OR..EQV.NEQV.
I R Z C L
8.2.7
8-3
(R703R723)
intrinsic-unary-operator y
defined-operator y
144
x intrinsic-binary-operator y
x defined-operator y
(defined-operator) OPERATOR
8.2.8
1.
8-18
INTEGER I(10020)
REAL (8.564.4)
8-19
INTEGERPOINTERX()
INTEGERTARGETY(100200)
X Y (100200)
NULL
NULL() NULL
NULL 8-5
145
8-5 NULL
NULL()
DATA
8-20 NULL
INTERFACE ADD
SUBROUTING S1(JPI)
INTEGER J
INTEGERPOINTERPI
END SUBROUTING S1
SUBROUTING S2(KPR)
INTEGER K
REALPOINTERPR
END SUBROUTING S2
END INTERFACE
REALPOINTERREAL_KER
CALL ADD(10, NULL(REAL_KER))
,
1
8-21
(/2.4_2, 5.9_1, 9.4_1, 6.4_1)
, 2, 4.
,,
8-22
SAMPLE(5.0, ALPHA)
SAMPLE.
146
(
)
8-23
REAL FUNCTION FUN(A)
DIMENSION FUN(2050)
FUN FUN(8.1)
(2050)
8-24
REAL(DOUBLE)A(3050)
COS(A)
8-25
IMPLICIT REAL (SINGLE)(A)
FUN(X)
FUN(X)
ALLOCATE
2.
8-3
147
8-3
8-26
INTERFACE OPERATOR(.PLUS.)
TYPE(SET)FCN_SET_PLUS(X, Y)
TYPE(SET), INTENT(IN)::X,Y
END FUNCTION FCN_SET_PLUS
TYPE(ADD) FCN_SET_PLUS(X, Y)
TYPE(ADD) , INTENT(IN)::X,Y
END FUNCTION FCN_SET_PLUS
END INTERFACE
SET A B A.PLUS.B
SET ADD A B A.PLUS.B
ADD
3.
148
NULL
8-27
INTERFACE OPERATOR(//)
FUNCTION FCN_CONCAT(A,B)
CHARACTER (*,1) A
CHARACTER (*,2) B
CHARACTER (LEN(A)+LEN(B),2) FCN_CONCAT (SIZE(B))
END FUNCTION FCN_CONCAT
END INTERFACE
X 1 30 Y 2 50
(25) X//Y // FCN_CONCAT
X//Y 2 2
80 1 B Y
(25)
4.
LBOUND UBOUND
ARRAY
DIM
DIM LBOUND UBOUND DIM
149
8.2.9
PARAMETER
2
1.
do
PRESENTASSOCIATED
ALLOCATED
A A SIZE(A)
SIZE(A)*3
8-28
3.141
45
-5.0_QUAD
, QUAD
5_SHORT
, SHORT
(/(K,K=0,100),50)
BESSEL1(3.1, J)
, BESSEL ,J
UBOUND(X,1)-10
,X
COS(X)
, X
KIND(X)
, X
REAL(K-2)
, K
150
COUNT(X)
, X
SIN(3.3)
SUM(X)
, X
3*I+J**4/2.5
, I,J
2.
:
do
do do
NULLREPEATRESHAPE
SELECTED_INT_KIND,SELECTED_REAL_KIND,TRANSFER, TRIM
NULL
ALLANYCOUNTCSHIFTDOT_PRODUCTEOSHIFTMATMULMAXLOC
MAXVALMINLOCMINVALPACKPRODUCTSPREADSUMTRANSPOSE
UNPACK
ALLOCATE
8.2.9.1 5
5
8-29
SIZE(2X)+10
KIND(5.0E+01)
SELECTED_REAL_KIND(33100)
SELECTED_INT_KIND(10**K)
PARAMETER PARAMETER
DATA
151
KIND
AINTANINTCHARCMPLXINTLOGICALNINTREAL
CASE
EQUIVALENCE
3.
do
NULLREPEATRESHAPE
SELECTED_INT_KIND,SELECTED_REAL_KIND,TRANSFER, TRIM
NULL
ALLANYCOUNTCSHIFTDOT_PRODUCTEOSHIFTMATMULMAXLOC
MAXVALMINLOCMINVALPACKPRODUCTSPREADSUMTRANSPOSE
UNPACK
PRESENTALLOCATEDASSOCIATED
ALLOCATE
152
4.
8-30 I
INTEGER I
COMMON I
REAL X(I)
I X
8-31
INTEGERDIMENSION(4)PARAMETERX=(/5729/)
REALDIMENSION(X(2))YZ(SIZE(Y))
X 7 YZ 7
8-32
REALDIMENSION(X(2))Z(SIZE(Y))Y
SIZE(Y) Y
8-33
SUBROUTING X(A)
REALA()
REALWORK(SIZE(ADIM=1)SIZE(ADIM=2))
END SUBROUTING X
FORTRAN 95
8-34
SUBROUTING S(A)
153
IMPLICIT NONE
REALA()
REALTAMP(RN(A)CN(A))
REALTTAMP(CN(A)RN(A))
CONTAINS
PURE FUNCTION RN(X)
INTEGERRN
REALINTENT(IN)X()
RN=SIZE(XDIM=1)
END FUNCTION RN
PURE FUNCTION CN(X)
INTEGERCN
REALINTENT(IN)X()
CN=SIZE(XDIM=2)
END FUNCTION CN
END SUBROUTING S
5.
8-1
8-1
8-6
8-6
154
()
REPEATRESHAPE
SELECTED_INT_KIND,SELECTED_REAL_KIND,TRANSFER,
TRIM
( ALLOCATEASSOCIATED
PRESENT)
*
8-7
8-7
EQUIVALENCE
CASE
ILC
PARAMETER
PARAMETER
do
155
=1
SELECT CASE
ILC
IF-THEN
ELSE-IF
IF
IF
IR
DO
FORALL
FORALL
WHERE
WHERE
FMT= I/O
IC
I/OFMT=
RETURN
GO TO
do
doI/O
1
2( 8)
3DIMENSIONTARGETCOMMON
4IMPLICITFUNCTION
5 do do do
156
8.2
FORTRAN
FORTRAN
FORTRAN
FORTRAN
OPERATOR
8.2.1
157
1.
X**Y
Y
1/(X**(-Y))
8-35
5**(-2)
0
X Y
Y XY
8-7
8-8
**
X Y
XY
XY
XY
XY
//
X Y
.LT.
X Y TRUE
<
X Y TRUE
.LE.
X Y TRUE
<=
X Y TRUE
158
.GT.
X Y TRUE
>
X Y TRUE
.GE.
X Y TRUE
>=
X Y TRUE
.EQ.
X Y TRUE
==
X Y TRUE
.NE.
X Y TRUE
/=
X Y TRUE
.NOT.
Y FALSE TRUE
.AND.
X Y TRUE TRUE
.OR.
X Y TURE TRUE
.EQV.
.NEQV.
2.
8-9
8-9
X
.NOT.Y
X.AND.Y
X.OR.Y
X.EQV.Y
X.NEQV.Y
TURE
TURE
FALSE
TURE
TURE
TURE
FALSE
FALSE
TURE
FALSE
FALSE
TURE
FALSE
TURE
159
TURE
FALSE
TURE
FALSE
TURE
FALSE
TURE
FALSE
FALSE
TURE
FALSE
FALSE
TURE
FALSE
3.
A+B AB
A B
-A A
A
4.
8-36
TYPE(ADD)
IJINTEGER
END TYPE
TYPE(ADD)POINTERPTR
TYPE(ADD)TARGETT
PTR T PTR%I T
I T%I
160
8.2.2
OPERATOR
OPERATOR
A.ADD.B
.ADD. OPERATOR , 2 :
INTERFACE OPERATOR(.ADD.)
FUNCTION RATIONAL_ADD(L, R)
USE RATIONAL_MODULE
TYPE (RATIONAL),INTENT(IN)::L,R
TYPE (RATIONAL)
::RATIONAL_ADD
::LOGICAL_ADD
.ADD. RATIONAL_ADD .
1 2
1 2
OPERATOR
2
8-3
1 2
1 2
8-38
161
INTERFACE OPERATOR(.ADD.)
ELEMENTAL FUNCTION ELEM(XY)
REALINTENT(IN)XY
END FUNCTION ELEM
FUNCTION NOELEM(XY)
REALINTENT(IN)DIMENSION(20)XY
REAL NONELEM(20)
END FUNCTION NONELEM
END INTERFACE
A.ADD.B
REAL A(20)B(20)C(20)
C=A.ADD.B
NONELEM ELEM
0/0
0**0
X**YX Y
8.3
( 17 )
FORTRAN
162
FORTRAN
8-10 8-11
8-10
X+Y
Y+X
X*Y
Y*X
-X+Y
Y-X
X+Y+Z
X+(Y+Z)
X-Y+Z
X-(Y-Z)
X*Y/Z
X*(Y/Z)
X*Y-X*Z
X*(Y-Z)
X/Y/Z
X/(Y*Z)
X/5.0
0.2*X
X>Y
(X-Y)>0
X.OR.Y.OR.Z
X.OR.(Y.OR.Z)
X.AND.X
X=Y//Z
X=Y LEN(X)<=LEN(Y)
8-11
I/2
0.5*I
X*I/J
X*(I/J)
I/J/X
I/(J*X)
(X+Y)+Z
X+(Y+Z)
(X*Y)-(X*Z)
X*(Y-Z)
X*(Y-Z)
X*Y-X*Z
X-Y-Z
X-(Y+Z)
163
164
9 ()
FORTRAN
variable = expression
variable => expression
()
ASSIGNMENT
=>
5
9-1
X=X-2
CHAR(58)=M_30
165
SAMPLE=NOTE_2
STRING=MYSAMPLE
WHERE(X/=0.0)
A=B/X
END WHERE
FORALL(I=0:N,J=1:N)
A(I,J)=3.0/(I-J+2)
B(I,J)%PTR=>C(I:N,J:N)
END FORALL
PTR=>X
9.1
9-1
9-1
INTEGER
INTEGERREALCOMPLEX
REAL
INTEGERREALCOMPLEX
COMPLEX
INTEGERREALCOMPLEX
CHARACTER
CHARACTER
LOGICAL
LOGICAL
ALLOCATE
166
9-2
9-2
INTEGER
INT(expressionKIND(variable))
REAL
REAL(expressionKIND(variable))
COMPLEX
CMPLX(expressionKIND(variable))
LOGICAL
LOGICAL(expressionKIND(variable))
9-2
DATE(510)=DATE(26)
FORTAN FORTRAN77
9-3
INTEGER X(100)
X=5.0
X 100 5.0
9-4 X Y
X=Y
Y X
167
9.2
9-1 9-2
ASSIGNMENT(=)
(
)
INTENT OUT INOUT
INTENT IN
ASSIGNMENT(=)
9-5
INTERFACE ASSIGNMENT(=)
ELEMENTAL SUBROUTING RATIONAL_TO_REAL(L,R)
USE RATIONAL_MODULE
TYPE (RATIONAL), INTENT(IN) :: R
REAL, INTENT(OUT)
::L
::R
168
RATIONAL RATIONAL
9.3
TARGET
ALLOCATEDEALLOCATENULLIFY
(R736)
pointer-object=> target
(pointer-object)(R630)
variable-name
structure-component
(target)(R737)
variable
expression
POINTER
TARGET POINTER
TARGET POINTER
POINTER
=> TARGET =>
=> POINTER =>
=> POINTER
NULL=>
=> POINTER =>
169
9-6
INTEGERTARGETT(1120)
INTEGERPOINTERP1()P2()
P1=>T
P2=>T()
P1 11 20 P2 1 10
NULL
NULL
POINTER
POINTER
9-7
MONTH=>DAYS(1:30)
PTR=>X(:,5)
NUMBER=>INDEXONE%INDEXTWO
FIRST_RESLUT=>NULL()
9-8
REAL,POINTER::PTR,P
REAL,TARGET::X
REAL Y
X=5.7
P=>X
PTR=>P
Y=PTR-8.1
9-9
INTERFACE
FUNCTION POINTER_FCN(X)
REAL X
170
REAL,POINTER::POINTER_FCN
END FUNCTION
REAL,POINTER::P
REAL A
P=>POINTER_FCN(A)
, ALLOCATE
DEALLOCATE NULLIFY
POINTER
9.4
FORTRAN
WHERE ELSEWHERE WHERE
WHERE WHERE
WHERE WHERE IF IF
WHERE
IF
9.4.1 WHERE
WHERE (R738)
WHERE(logical-expression)array-assignment-statement
171
(logical-expression)
TURE FALSE
9-10
WHERE(CURRENT>1.00)PASS=CURRENT
WHERE(TEMP<0.40)USEFULL=TEMP
9.4.2 WHERE
WHERE (R739)
[where-construct-name] WHERE(logical-expression)
[where-body-construct]
[ELSEWHERE(logical-expression)[where-construct-name]
[where-body-construct]]
[ELSEWHERE [where-construct-name]
[where-body-construct]]
END WHERE [where-construct-name]
where (R741)
assignment-statement
where-construct
where-statement
WHERE WHERE
ELSEWHERE
ELSEWHERE
9-11
INTEGERN(9)=(/123456789/)
WHERE(MOD(N2)==0)
N=2
N=(/123252729/)
ELSEWHERE(MOD(N3)==0)
N=3
N=(/123252723/)
ELSEWHERE(MOD(N5)==0)
N=5
N=(/123252723/)
ELSEWHERE
N=0
N=(/023252023/)
END WHERE
WHERE
WHERE END WHERE
ELSEWHERE ELSEWHERE
WHERE
172
WHERE
WHERE
WHERE
WHERE
9-12
REAL X(1100)
WHERE(X>0.0)
SQRTX=SQRT(X)
END WHERE
9-13
REAL A(23)B(310)C(210)D(210)
IMTRINSIC MATMUL
WHERE (D<0.0)
C=MATMUL(AB)
END WHERE
0
WHERE WHERE
9.4.3 WHERE
WHERE
1
1
2
2
3
3
173
END WHERE
1 A1.NOT.A1
2 (.NOT.A1).AND.A2
(.NOT.A1).AND(.NOT..A2)
3 (.NOT.A1).AND(.NOT..A2)
WHERE WHERE
outer-mask 1
outer-mask.AND.A1
END WHERE
outer-mask
9.4.4 WHERE
WHERE 9.4
WHERE WHERE ELSEWHERE
WHERE
9.5
xij = i 2 j 2
i 1 nj 1 m
xii = yi i 1 n
DO
DO J=1M
DO I=1N
X(IJ)=I**2-J**2
END DO
END DO
FORTRAN DO SPREAD
X=SPREAD((/(II=1N)/)DIM=2NCOPIES=M)**2-&
SPREAD((/(II=1M)/)DIM=1NCOPIES=N)
174
FORTRAN FORALL
FORALL (I=1NJ=1M)X(IJ)=I**2-J**2
FORALL
FORALL
1 Y X
FORALL(IN)X(II)=Y(I)
FORALL FORALL
9-15
FORALL (I=2N-1J=2N-1)
A(IJ)=(A(I+1J)+A(I-1J)+A(IJ+1)+A(IJ-1))/10.0
B(IJ)=10.0/A(I+1J+1)
END FORALL
WHERE
FORALL
FORALL FORALL FORALL
FORALL
FORALL
FORTRAN
FORALL
FORALL
FORALL
9-16
FORALL(I=1NJ-=1MA(I)<100.AND.B(I)<100)&
C(IJ)=A(I)+B(J)
175
9.5.1 FORALL
FORALL FORALL
WHERE FORALL
FORALL
1. FORALL
FORALL (R747)
[forall-construct-name]FORALL(forall-triplet-specification-list &
[scalar-logical-expression])
[forall-body-construct]
END FORALL [forall-construct-name]
forall (forall-triplet-specification)(R750)
index-name = scalar-integer-expression&
scalar-integer-expression [scalar-integer-expression]
forall (R751)
assignment-statement
pointer- assignment-statement
where-construct
where-statement
forall-construct
forall-statement
FORALL
FORALL END FORALL
FORALL
9-17
SUBROUTING OPE(IX)
INTEGERINTENT(IN)I
INTEGER X()
FORALL(I=1SIZE(X))
X(I)=I
END FORALL
..
END SUBROUTING OPE
FORALL X (12) I
FORALL I I IN
176
9-18 FORALL
FORALL(I=1JJ=1M)A(IJ)=I*2+J*3
FORALL(I=1NJ=1MI<=J)A(IJ)=I*2+J*3
9-19
FORALL(I=1100J=1100X(I)/=0.0 .AND. Y(J)>0.0)
END FORALL
FORALL
FORALL
FORALL
9-20
FORALL(J=130)
X(INDEX(J))=Y
END FORALL
INDEX(130) FORALL
FORALL
FORALL
9-21
REAL X(100100)
FORALL(I=1N)
X(I)=1.0/REAL(I)
1.0/REAL(I) X 2
FORALL
9-22
TYPE SCREW
CHARACTER(20)POINTERHEAD_TYPE
REAL LENGTH,THREAD
END TYPE SCREW
177
TYPE(SCREW) INVENTORY(500)
REAL THREAD(100)
CHARACTER(20), TARGET:: HEAD_TYPES(5)
scalar-integer-expressionscalar-integer-expressionscalar-integer-expression
2. FORALL
FORALL 3 :
;
,;
1.
3 m1m2m3
n=(m2-m1+m3)/m3
m3 1
n 0
m1+(k-1)*m3
2.
TURE (
)
3.
FORALL
WHERE
178
FORALL
variable = expression
pointer-object=>target
WHERE
WHERE
WHERE ELSEWHERE
FORALL WHERE
9-23
INTEGER X(54)
X :
0
1
1
0
0
0
3
0 0 0
0
1
2
0
0
1
0
2
179
1
1
1
5
1
2
3
5 5 5
1
1
2
4
1
1
3
2
FORALL
FORALL FORALL
, FORALL
9-24
INTEGER X(33)
OUTERFORALL(I=1N-1)
INTERFORALL(J=I+1N)
X(IJ)=X(JI)
END FORALL INTER
END FORALL OUTER
N 3X
0 3 6
1 4 7
2 5 8
0 1 2
1 4 5
2 5 8
9.5.2 FORALL
FORALL
FORALL (R754)
FORALL(forall-triplet-specification-list [scalar-logical-expression])&
forall-assignment-statement
forall (R752)
assignment-statement
pointer- assignment-statement
180
FORALL
FORALL FORALL
FORALL FORALL
FORALL
FORALL(I=1N-1J=1NJ>I)X(IJ)=X(JI)
181
10 ()
FORTRAN
FORTRAN
FORTRAN
10.1
FORTRAN
182
10.2
0 (R801)
[execution-part-construct]
DO
10-1
IF(K<=1)THEN
IF
X=K**2
Y=SIN(X)
END IF
IF
FORTRAN
IF
CASE
DO
183
WHERE FORALL
WHERE
FORALL FORALL
FORALL
10.3 IF IF
IF IF
IF IF IF
10.3.1 IF
IF ELSE ELSE IF
IF
IF
ELSE
IF
1. IF
IF (R802)
[if-construct-name] IF(scalar-logical-expression)THEN
block
[ELSE IF(scalar-logical-expression)THEN[if-construct-name]
block].
[ELSE [if- construct-name]
block]
END IF [if-construct-name]
IF
ELSE IF ELSE
ELSE IF ELSE
IF END IF IF
IF-THEN END IF
184
2. IF
IF
IF () ELSE
ELSE IF
10-1 IF
10-1 IF
10-2
185
IF(I<J)THEN
X=Y*2.5
ELSE IF(I>8.3)THEN
X=0.0
Y=100
ELSE
X=100
Y=0.0
END IF
10.3.2 IF
IF
1. IF
IF (R807)
IF(scalar-logical-expression)action-statement
10-3
IF(X=0)Y=X+1
2. IF
IF (action-statement)
IF
(action-statement) IF END
186
10.4 CASE
IF CASE
IF .TURE.
.FALSE.
CASE
CASE CASE
CASE
CASE
10-4
sin( x ) x 0
y=
cos( x ) x < 0
CASE
SELECT CASE(x0)
CASE(.TRUE.)
YSIN(X)
CASE(.FALSE.)
YCOS(X)
END SELECT
10-5 CASE
MONTHDAY SELECT CASE(MONTH)
CASE(2)
DAYS28
CASE(46911)
DAYS30
CASE(135781012)
DAYS31
END SELECT MONTHDAY
10.4.1 CASE
CASE (R808)
[case-construct-name]SELECT CASE(case-expression)
[CASE(case-value-range-list)[case-construct-name]
block]
187
[CASE DEFAULT[case-construct-name]
block]
END SELECT [case-construct-name]
(case-expression)
(case-value-range)
(R814)
case-value
case-value
case-value
case-value case-value
(case-value)
CASE
SELECT CASE
CASE
END SELECT
CASE CASE (case-value-range-list) DEFAULT
CASE
CASE SELECT CASE
END SELECT
SELECT CASE
DEFAULT CASE
CASE
CASE
10-6
CASE(ABOUTZ)
ABOUT Z
188
DEFAULT
10-7
CALCU_AREA: SELECT CASE(OBJECT)
CASE(RECTANGLE) CALCU_AREA
AREA=LENGTH*WIDTH
CASE(SQUARE) CALCU_AREA
AREA=SIDE*SIDE
CASE(CIRCLE) CALCU_AREA
AREA=PI*RADIUS**2
END SELECT CALCU_AREA
10.4.2 CASE
SELECT CASE
END SELECT
CASE DEFAULT
DEFAULT
CASE DEFAULT
10-1
10-1
case-value1 case-value2
case-value
case-value
CASE
END SELECT
CASE SELECT CASE
10-2 CASE
189
10-2 CASE
10-8
INDEX=2
SELECT CASE(INDEX)
CASE(1)
A=(12)
CASE(2)
A=(23)
CASE DEFAULT
190
A=(00)
END SELECT
10-9 :
COLOR=GREEN
SELECT CASE(COLOR)
CASE(RED)
STOP
CASE(YELLOW)
CALL STOP_IF_YOU_CAN_SAFELY
CASE(GREEN)
CALL GO_AHEAD
END SELECT
191
11 ()
11-1
n
x = 1/ i 3
i =1
N=K
K
I=1
SUM=1/I**3
I=2
SUM=SUM+1/I**3
I=3
SUM=SUM+1/I**3
I=K
SUM=SUM+1/I**3
SUM=0.0
DO I=1K
SUM= SUM+1/I**3
END DO
192
DO
FORTRAN DO
DO
11.1 DO
DO 0 DO
DO
DO
DO DO
DO
DO
DO 3
DO (
)
WHERE
DO DO
DO EXIT
DO DO
DO
DO END DO CONTINUE
DO
DO
DO
DO DO
DO WHERE DO
DO FORTRAN
FORTRAN
DO
11-2
DO I=1N
SUM=SUM+X(I)
END DO
DO
11-3
193
DO 100 I=1N
100 SUM=SUM+X(I)
11.1.1 DO
DO DO END DO CONTINUE
DO (R817)
[do-construct-name] DO [label][loop-control]
[execution-part-construct]
[label] END DO
(loop-control)(R821)
[ ]scalar-integer-variable-name = &
scalar-integer-expressionscalar-integer-expression &
[ scalar-integer-expression]
[ ]WHILE(scalar-logical-expression)
END DO (R824)
END DO [do-construct-name]
CONTINUE
DO DO END DO
END DO CONTINUE CONTINUE
DO
DO DO
DO DO END DO
DO END DO DO
END DO DO
DO END DO
DO DO
DO
DO
11-4
SUM=0.0
DO I=1N
SUM=SUM+(-1)**N*(1/N**2)
END DO
DO I
11-5
FOUND=.FALSE.
194
I=0
DO WHILE(.NOT.FOUND.AND.I<LIMIT)
IF(KEY==X(I))THEN
FOUND=.TRUE.
ELSE
I=I+1
END IF
END DO
WHERE
11-6
NO_ITERS=0
DO
FU FU_PRIME
X1=X0-FU(X0)/FU_PRIME(X0)
IF ( ABS (X1 - X0 ) < SPACING ( X0 ) .OR. &
NO_ITERS > MAX_ITERS ) EXIT
X0 = X1
NO_ITERS=NO_ITERS+1
END DO
DO IF
11-7
INNER_PROD=0.0
DO 100 I=1,10
INNER_PROD=INNER_PROD+X(I)*Y(I)
100 CONTINUE
CONTINUE
11-8
LOOP: DO I=1 , N
Y(I)=A*X(I)+Y(I)
END DO LOOP
DO
11.1.2 DO
DO :
DO DO
DO END DO
CONTINUE
195
DO
DO (R826)
action-terminated-do-construct
outer-shared-do-construct
DO (action-terminated-do-construct)(R827)
[do-construct-name]DO label [loop-control]
[execution-part-construct]
label action-statement
DO (outer-shared-do-construct)(R830)
[do--construct-name]DO label [loop-control]
[execution-part-construct]
label shared-termination-do-construct
DO (shared-termination-do-construct)(R831)
outer-shared-do-construct
inner-shared-do-construct
DO (inner-shared-do-construct)(R832)
[do-construct-name]DO label [loop-control]
[execution-part-construct]
label action-statement
DO (action-terminated-do-construct)
DO DO (inner-shared-do-construct)
DO DO DO
DO DO DO DO
DO
DO
CONTINUE GO TO RETURN STOP EXIT CYCLE
END
DO DO
DO
GO TO RETURN STOP EXIT CYCLE END
DO DO
DO
DO
11-9
PROD=1.0
DO 20 I=1N
196
20
PROD=PROD*P(I)
11-10
DO 20 I=1N
DO 20 J=1N
20
HILBERT(IJ)=1.0/REAL(I+J)
DO
11-11
FOUND=.FALSE.
I=0
DO 20 WHILE(.NOT.FOUND.AND.I<LIMIT)
I=I+1
20
FOUND=KEY==X(I)
WHERE
11-12
DO 20 I=1N
DO 20 J=I+1N
A=B(IJ)B(IJ)=B(JI)B(JI)=A
20 CONTINUE
CONTINUE
11.1.3 DO
DO DO DO
DO IF CASE
DO
DO DO DO DO
DO
DO
11.1.4 DO
DO
DO
DO
0
WHILE
EXIT DO
197
CYCLE
DO
RETURN
11.1.5 DO
DO DO
DO
DO WHILE
DO
DO
1. DO
DO
DO (R818)
DO [label] [ ] do-variable=expression1expression2[ expression3]
DO
DO
11-13
DO 100 I=0N
DOI=-NN
DO J=N1-1
DO
DO
e1e2e3( e3 0 1)
e1 DO
e2 DO
e3 DO 1
MAX((e2-e1+e3)/e30)
0 DO
e1>e2 e3>0
e1<e2 e3<0
DO
1. DO e1
198
2. 0 DO
3. 0 DO
1 DO e3
4. 2 3 0
DO DO 0
DO DO
DO
DO
11-1 DO
11-1 DO
11-14 10
N=10
SUM=0.0
DO 10 I=1N
SUM=SUM+A(I)
N=N+1
10
CONTINUE
I=11N=20
11-15 10
X=20
199
DO 10 I=12
DO 9 J=15
X=X+1.0
9
CONTINUE
10 CONTINUE
DO I=3J=6X=30
DO
DO 9 J=51
DO X 20J=5I=3
2. DO WHILE
DO WHILE
DO WHILE
DO 100 WHILE(X(I)/=0)
DOWHILE(.NOT.FOUND)
DO WHILE(y>=0.01)
DO WHILE
DO
11-16
SUM=0.0
I=0
DO WHILE (I<5)
I=I+1
SUM=SUM+I
END DO
5 SUM=15.0I=5
3. DO
DO DO
DO
DO
DO [label ]
11-17
DO
200
READ*DATA
IF(DATA<0) STOP
CALL PROCESS(DATA)
END DO
DATA DO
DO
DO 15
READ*DATA
IF(DATA<0) STOP
CALL PROCESS(DATA)
15 CONTINUE
11.1.6 DO
DO
EXIT
CYCLE
DO
RETURN STOP DO
1. EXIT
EXIT DO DO
EXIT DO DO
DO DO DO
EXIT (R835)
EXIT[do-construct-name]
EXIT DO
EXIT EXIT DO
EXIT DO EXIT
DO DO DO
EXIT EXIT EXIT
DO
11-18
LOOP10DO
IF(TEMP==INDEX)EXIT LOOP10
201
END DO LOOP10
EXIT
IF
EXIT
LOOP10
2. CYCLE
EXIT DO CYCLE
DO
CYCLE DO DO
DO DO DO
CYCLE DO DO DO
DO
CYCLE (R834)
CYCLE[do-construct-name]
CYCLE DO
CYCLE CYCLE DO
CYCLE DO CYCLE
DO DO DO
CYCLE CYCLE CYCLE
DO
CYCLE DO
DO CYCLE DO DO DO
1 DO
11-19
DO
INDEX=
IF (INDEX<0)EXIT
IF (INDEX=0)CYCLE
END DO
INDEX INDEX
DO INDEX 0 CYCLE
202
11.2
IF-THEN
SELECT CASE
DO
WHERE
FORALL
END SELECT CASE
END DO DO
END IF IF
END DO DO DO DO
FORTRAN
11.2.1 GO TO
GO TO
DO TO (R836)
GO TO label
GO TO GO TO
GO TO GO TO
11-20
GO TO 100
100
IF X=3THEN A(X)=X**2
GO TO
100
203
GO TO 20
GO TO 020
20 020
GO TO
11.2.2 CONTINUE
CONTINUE (R839)
[label] CONTINUE
CONTINUE DO
CONTINUE
11-21
CONTINUE
20 CONTINUE
11.2.3 STOP
STOP
STOP (R840)
STOP [scalar-character-constant]
STOP digit [digit [digit [digit [digit ] ] ] ]
(scalar-character-constant)(digit)
0
STOP
11-22
STOP
STOP 100
STOP Error #909
11.2.4 IF
IF
(R838)
IF(scalar-numeric-expression)labellabellabel
IF
IF
204
(scalar-numeric-expression)
IF
IF
0
IF
11.2.5 GO TO
IF GO TO
CASE
CASE GO TO
GO TO (R837)
GO TO(label-list)[ ]scalar-integer-expression
GO TO
(label-list) n 1 n k
k
1 n
GO TO
GO TO
11-23
GO TO(1545)A(X)
GO TO(3347321)X**2*I
11-24
SWITCH=
GO TO(331003356)SWITH
X=Y**3
X=Y+2
.
X=SIN(Y)
100 X=Y**(1/2)
SWITH 1 3 33 33 SWITH 2
100 SWITH 4 56 SWITH 4
1 GO TO X=Y**3 33
205
? 1000
()
[1]
FORTRAN
FORTRAN FORTRAN
FORTRAN
FORTRAN
FORTRAN
206
[1]
Herbert A. Simon1916-200120
1975 1978
1993 1994
207
12
FORTRAN 4
12.1
FORTRAN
FORTRAN
FORTRAN
FORTRAN
13
FORTRAN
12-1
208
USE
ENTRY
FORMAT
DATA
CONTAINS
*PARAMETER IMPLICIT
#
FORTRAN
FORTRAN 12-1
FORTRAN
12-1
12.2
FORTRAN
12.3 12.2
STOP
12.2.1
(R1101)
[PROGRAM program-name]
[specification-part]
[execution-part]
[internal-subprogram-part]
END [PROGRAM [program-name]]
FORTRAN
12-1
END
12-2
PROGRAM HI
PRINT*HELLO
END
210
PROGRAM
END PROGRAM
END
RETURN ENTRY
RETURN
12.2.2
12-1 12-2
12-2
ALLOCATABLE
PARAMETER
COMMON
POINTER
DATA
SAVE
DIMENSION
TARGET
EQUIVALENCE
USE
EXTERNAL
FORMAT
IMPLICIT
INTRINSIC
NAMELIST
OPTIONAL INTENT
PUBLIC PRIVATE
SAVE
12.2.3
12-3
12-3
211
ALLOCATE
GO TO
BACKSPACE
IF
CALL
IF
CASE
INQUIRE
CLOSE
NULLIFY
CONTINUE
OPEN
CYCLE
DATA
READ
DEALLOCATE
REWIND
DO
STOP
END
WHERE
ENDFILE
WHERE
ENTRY
WRITE
EXIT
IF
FORALL
FORALL
GO TO
FORMAT
12.3
ENTRY
(R210)
CONTAINS
internal-subprogram
[internal-subprogram]
(R1216)
function-statement
212
[specification-part]
[execution-part]
END FUNCTION [function-name]
(R1221)
subroutine-statement
[specification-part]
[execution-part]
END SUBROUTINE [subroutine-name]
12-3
PROGRAM WEATHER
CONTAINS
FUNCTION STORM(CLOUD)
STORM WEATHER
ENTRY
PUBLIC PRIVATE
INTENT OPTIONAL
RETURN
CONTAINS
USE
15
213
12.4
15
12.5
(R1216)
function-statement
[specification-part]
[execution-part]
[internal-subprogram-part]
END FUNCTION [function-name]
(R1221)
subroutine-statement
[specification-part]
[execution-part]
[internal-subprogram-part]
END SUBROUTINE [subroutine-name]
FORTRAN
13
FORTRAN
FORTRAN
214
12-4
FUNCTION CIRCLE(NET)
INTEGER CIRCLE
CIRCLE=NODE
END FUNCTION
12-5
SUBROUTINE TAYLOR(IJ)
I=
J=
END SUBROUTINE
FUNCTION SUBROUTINE
END
INTENT OPTIONAL
ENTRY
RETURN
PUBLIC PRIVATE
RECURSIVE
13
12.6
FORTRAN90
FORTRAN
INCLUDE ()
COPY+PASTE
215
FORTRAN90
INCLUDE
FORTRAN
12.6.1
(R1104)
MODULE module-name
[specification-part]
[module-subprogram-part]
END [MODULE [module-name]]
END MODULE
12.6.2
12-4
12-4
ALLOCATABLE
POINTER
COMMON
PRIVATE
DATA
PUBLIC
DIMENSION
SAVE
EQUIVALENCE
TARGET
EXTERNAL
USE
IMPLICIT
INTRINSIC
NAMELIST
PARAMETER
OPTIONAL INTENT
ENTRY
216
FORMAT
PUBLIC PRIVATE
SAVE SAVE
SAVE
SAVE
12-6
MODULE DATA1
SAVE
INTEGERXIX
REALK=0.01
REALY(1020)Z(2030)
END MODULE DATA1
SUBROUTINE TASK1
USE DATA1
DATA1 XIX K K
Y(1020)Z(2030) 5
TASK1 USE 5
12.6.3
PRIVATE
(R212)
CONTAINS
module-subprogram
[module-subprogram]
(R1216)
function-statement
[specification-part]
217
[execution-part]
[internal-subprogram-part]
END FUNCTION [function-name]
(R1221)
subroutine-statement
[specification-part]
[execution-part]
[internal-subprogram-part]
END SUBROUTINE [subroutine-name]
12-7
MODULE INTERNAL
.
CONTAINS
FUNCTION SET_INTERNAL(KEY)
END FUNCTION
END
CONTAINS
12.6.4
USE
USE USE
PUBLIC PRIVATE
PUBLIC
USE
PRIVATE
12-2
218
12-2
1.
USE
USE (R1107)
USE module-name
USE
USE module-namerename-list
(rename-list)(R1108)
local-name=>module-entity-name
(module-entity-name)
(local-name)
12-8
USE FOURIER
USE S_LIB, PRESSURE => X_PRES
USE
2.
USE
USE module-nameONLYaccess-list
219
USE ONLY
(R1109)
[local-name=>]module-entity-name
OPERATOR(defined-operator)
ASSIGNMENT(=)
12-9
USE TENSOR1ONLYXYOPERATOR(.CROSS.)
USE MONTHSONLYJANUARY=>JANMAY
3.
USE
USE
USE
PUBLIC
PRIVATE
PRIVATE PRIVATE
PRIVATE PUBLIC
PUBLIC
12-3
220
12-3
4.
USE ONLY
12-10
MODULE BLUE
INTEGER ABC
END MODULE BLUE
MODULE GREEN
USE BLUEONLYA1=>A
REAL BC
END MODULE GREEN
RED
A1 A A
B B
B1 B
C
PROGRAM RED
USE BLUE
USE GREEN B1=>B
AB
A1 A B1 B C
END PROGRAM
221
5.
USE
USE
PRIVATE
PUBLIC
12-11
M2 X
Y Y M2 PRIVATE Y M1 M1
PUBLIC
MODULE M2
USE M1ONLYXY
PRIVATE Y
END MODULE M2
COMMON COMMON
12.6.5
222
1.
12-12
MODULE MODELS
COMPLEX A(3398)
REALX(50)
REALALLOCATABLEY()Z()
INTEGER LVARVA
END MODELS
USE MODELS
USE MODELSONLYAZ
A Z
USE MODELSK=>LVA
LVA
K
2.
12-13
MODULE COFF
COMMON
COMMON
COMMON
COMMON /BLOCK1/
END MODULE
PROGRAM EQU1
USE COFF
END
223
3.
USE
12-14
MODULE NEW_TYPE
TYPE NODE_STAT
REAL X
COMPLEX Z
END TYPE NODE_STAT
END MODULE NEW_TYPE
USE
NODE_STAT
4.
OPERATOR ASSIGNMENT
12-15
INTERFACE OPERATOR(.INVERSE.)
FUNCTION INVERSE(MATRIX1)
TYPE(MATRIX)INTENT(IN)MATRIX1
TYPE(MATRIX)INVERSE
END FUNCTION INVERSE
END INTERFACE
OPERATOR
INVERSE
.INVERSE.
0.5+(.INVERSE.A)
+
5.
12-16
224
MODULE POLAR_COORDINATES
TYPE POLAR
PRIVATE
REAL RHO,THETA
END TYPE POLAR
INTERFACE OPERATOR(*)
MODULE PROCEDURE POLAR_MULT
END INTERFACE
CONTAINS
FUNCTION POLAR_MULT(P1, P2)
TYPE (POLAR), INTENT(IN) :: P1,P2
TYPE(POLAR) POLAR_MULT
POLAR_MULT = POLAR(P1 % RHO * P2 %RHO, &
P1 %THETA + P2 % THETA)
END FUNCTION POLAR_MULT
POLAR_MULT POLAR
POLAR_COORDINATES
POLAR *
6.
12-17
MODULE ENG_LIBRARY
INTERFACE
FUNCTION FOURIER(X,Y)
END
SUBROUTINE INPUT(A,B,C,L)
OPTIONAL C
INPUT :
CALL INPUT (AXX, L=LXX, B=BXX)
225
,,
12-18
MODULE BOOKKEEPER
TYPEPRIVATEIDDATA
INTEGER IDNUMBER
CHARACTER(25) NAMEADDRESS(3)
REAL BALANCE
END TYPE IDDATA
REALPRIVATEGROSSINEXPENSESPROFITLOSS
INTEGERPARAMETERNUMCUST=1000&
NUMBER=100KUIBU
NUMCH=10
CONTAINS
SUBROUTINE ACCTS_RECEIVABLE(CUST_ID, AMOUNT)
12.6.6
FORTRAN
EXTERNAL
(R1112)
BLOCK DATA[block-data-name]
[specification-part]
END [BLOCK DATA[block-data-name]]
226
12-5
12-19
BLOCK DATA SEQ
COMMON / BLOCK1 / ABC
DATA A/1.02/B/9.01/C/0.04/
END BLOCK DATA SEQ
12-5
COMMON
POINTER
DATA
SAVE
DIMENSION
TARGET
EQUIVALENCE
USE
IMPLICIT
INTRINSIC
PARAMETER
227
13
FORTRAN 95
FORTRAN
FORTRAN
FORTRAN
FORTRAN 95
FORTRAN 95
13.1
13.1.1
FORTRAN
FORTRAN
CALL
228
CALL
FUNCTION RESULT
CONTAINS END
CONTAINS END
PUBLIC PUBLIC
PRIVATE
FORTRAN
ENTRY
ENTRY
SIN COS
SIN COS
cos( x ) = sin(
x)
229
A B X A X 1.0 B X
2.0 A B X
A B
FORTRAN
115 FORTRAN
EXTERNAL
FORTRAN
13.1.2
CALL
230
FORTRAN
4
13.7
15
USE USE
ONLY
12
7 15
SAVE
231
FORTRAN
13.8
CC++ FORTRAN
13.2
SUBROUTINE
232
END
13.2.1
(R1221)
[subroutine-prefix] SUBROUTINE subroutine-name &
[([dummy-argument-list])]
[specification-part]
[execution-part]
[internal-subprogram-part]
END [ SUBROUTINE [subroutine-name]]
(subroutine-prefix)
RECURSIVE
PURE
ELEMENTAL
RECURSIVE ELEMENTAL
(dummy-argument-list)(*)
END
SUBROUTINE
ENTRY
END
END SUBROUTINE [subroutine-name]
END SUBROUTINE
SUBROUTINE
RECURSIVE
SUBROUTINE
13.4 13.5
INTENT OPTIONAL
INTENT
233
PUBLIC PRIVATE
*
13-1
SUBROUTINE
ELEMENTAL SUBROUTINE BESSELL1
SUBROUTINE IMBEDDING(X)
SUBROUTINE TASK()
SUBROUTINE PARTICAL(CURRENT*)
SUBROUTINE COMPUT2
RECURSIVE SUBROUTINE WALLIS(XY)
13-2
SUBROUTINE WAVELET(AB)
REAL A
INTEGER B
.
END SUBROUTINE WAVELET
13.2.2
CALL
CALL
CALL (R1211)
CALL subroutine-name [([subroutine-actual-argument-list])]
(R1212)
[keyword=] subroutine-actual-argument
(R1214)
INTENT(INOUTINOUT)
INTENT(IN)
234
CALL
CALL
ASSIGNMENT arg1
arg2 arg1 INTENT(OUT) INTENT(INOUT) arg2 INTENT(IN)
arg1 = arg2
13.8.5
13-3 CALL
CALL SUB1(100.01+X*25)
SUBROUTINE SUB1
25
CALL SUB2(X=5.02N=75)
SUBROUTINE SUB2(XN)
13-4
MODULE POLAR_COORDINATES
TYPE POLAR
REAL RHO THETA
END TYPE
INTERFACE ASSIGNMENT(=)
235
:: Z
:: P
CARTESIAN = POLAR(RPI/6)
CALL
CALL ASSIGN_POLAR_TO_COMPLEX(CARTESIANPOLAR(RPI/6))
13.3
13.3.1
(function-prefix)
type-specification
RECURSIVE
PURE
ELEMENTAL
RECURSIVE ELEMENTAL
236
FUNCTION (simplest-function-statement)
FUNCTION function-name ([dummy-argument-name-list])
13-5
FUNCTION LAGRANGE1 (XY)
COMPLEX FUNCTION SHORDINGER2(XT)
FUNCTION LATTICE(XY) RESULT(CROSS)
RECURSIVE REAL FUNCTION SUM1(NK)RESULT(SUM2)
END FUNCTION
ENTRY
ELEMENTAL RECURSIVE 13.4 13.5
END
END FUNCTION [function-name]
END FUNCTION
237
INTENT OPTIONAL
INTENT
PUBLIC PRIVATE
RECURSIVE RESULT
RESULT
13.3.2 RESULT
RESULT
RESULT
RESULT
RESULT
RESULT
13-6
PROGRAM REVERSE_PHRASE
PRINT *REVERSE(The following inequalities hold for any lattice)
CONTAINS
RECURSIVE FUNCTION REVERSE (PHRASE)RESULT(LATTICE)
CHARACTER(*) PHRASE
CHARACTER(LEN(PHRASE)) LATTICE
L=LEN_TRIM(PHRASE)
K=INDEX(PHRASE(1L)BACK=.TRUE.)
IF(K==0)THENLATTICE=PHRASE
ELSELATTICE=PHRASE(K+1L)//// REVERSE(PHRASE(1K-1))
END IF
END FUNCTION REVERSE
END PROGRAM REVERSE_PHRASE
13.3.3
238
(R1210)
function-name([function-actual-argument-list])
(function-actual-argument)(R1212)
[keyword = ] function-argument
(function-argument)(R1214)
(keyword)
INTENT(INOUTINOUT)
INTENT(IN)
(X) X X
INTENT(IN)
13.2.2
13-7
X=Y+5*LEBESGUE1(3.5)
PRINT*ANALOG1(5.06.7)
LEBESGUE1(R)
ANALOG1(IU)
13.8.4
INTENT(IN)
31
13-8
INTERFACE OPERATOR(.FOURIER.)
FUNCTION FOURIER_OPERATOR(XY)
239
FOURIER_OPERATOR
XY X Y
INTENT(IN)
END FUNCTION FOURIER_OPERATOR
END INTERFACE
PRINT*X1 .FOURIER. Y1
PRINT .FOURIER.
FOURIER_OPERATOR X1 Y1 X Y
13.3.4
FORTRAN
(R1228)
function-name([dummy-argument-name-list])= scalar-expression
FUNCTION function-name([dummy-argument-name-list])
function-name = scalar-expression
END FUNCTION
SUM(A+B)
240
INTENT(IN)
13-9
CHARACTER (10) WORD_10
CHARACTER (20) WORD_20
WORD_10 (WORD_20) = WORD_20 (11 : 20)
REAL WAVEX
WAVE(X)= COS(X)+SIN(X)
REAL LENS
COMPLE C
LENS(C)= REAL(C)**2 + AIMAG(C)**2
13.4
FORTRAN 95
FORTRAN
FORALL
MVBITS
FUNCTION SUBROUTINE PURE
4
FORALL
241
PURE
INTENT(IN)
INTENT
SAVE
SAVE
STOP
PRINT
OPEN
CLOSE
BACKSPACE
ENDFILE
REWIND
INQUIRE
READ
WRITE
INTENT(IN)
DO DO
READ
WRITE
I/O IOSTAT SIZE
ALLOCATE DEALLOCATE STAT
NULLIFY
13-10
PURE FUNCTION ACROSS(XC)
REAL ACROSS
REALINTENT(IN)X
242
COMPLEX C INTENT(IN)C
13.5
FORTRAN 95
KIND
FORTRAN 95 FORTRAN
FORTRAN90
FUNCTION SUBROUTINE
ELEMENTAL
ELEMENTAL PURE
( 13.4 )
13-11
243
QUADRIC((3.05.4)6.8)
QUADRIC
QUADRIC(C1X1)
C1 X1
13.6
RETURN
CONTAINS
ENTRY
EXTERNAL
INTRINSIC
13.6.1 RETURN
RETURN
END RETURN
END RETURN END
RETURN
RETURN (R1226)
RETURN [scalar-integer-expression]
(scalar-integer-expression)
1 nn
GO TO
244
CALL SUBROUTINE22(SELE)
GO TO (label-list)SELE
SUBROUTINE22 SELE
CASE CASE
RETURN
13.6.2 CONTAINS
CONTAINS
CONTAINS (R1227)
CONTAINS
CONTAINS
CONTAINS
CONTAINS
END
13.6.3 ENTRY
ENTRY
ENTRY
ENTRY (R1225)
ENTRY entry-name [([dummy-argument-list])] [RESULT(result-name)]
(dummy-argument)(result-name)
ENTRY
FUNCTION SUBROUTINE
ENTRY
13-12
SUBROUTINE COUNT1(dummy-argument-list1)
RETURN
ENTRY OP1(dummy-argument-list2)
ENTRY OP2(dummy-argument-list3)
RETURN
245
ENTRY
ENTRY RETURN
END
ENTRY
ENTRY ENTRY
ENTRY
ENTRY
ENTRY RESULT FUNCTION RESULT
ENTRY
ENTRY ENTRY
ENTRY ENTRY
ENTRY
IFDOCASEFORALLWHERE
DO ENTRY
EXTERNAL INTRINSIC
ENTRY RESULT
RESULT
RESULT
ENTRY RECURSIVE
SUBROUTINE FUNCTION RECURSIVE
ENTRY RECURSIVE
ENTRY
ENTRY
246
ENTRY
ENTRY ENTRY
ENTRY
ENTRY
ENTRY
FUNCTION SUBROUTINE ENTRY
ENTRY
ENTRY
ENTRY FUNCTION
SUBROUTINE
RECURSIVE
ENTRY
ENTRY
13-13
ENTRY SUB_WAVELET (X)
13.6.4 EXTERNAL
EXTERNAL
7.7.1
X=SIN(A)* COS(B)
CALL SUB1(AB)
CALL SUB2(XSUB1C)
XA B SUB1SUB2
C
C
EXTERNAL
247
EXTERNAL
EXTERNAL
EXTERNAL
EXTERNAL
EXTERNAL
EXTERNAL
EXTERNAL
13.6.5 INTRINSIC
INTRINSIC EXTERNAL INTRINSIC
EXTERNAL INTRINSIC 7.7.2
13-14
CALL SUB1(XYLOG)
LOG
LOG FORTRAN
INTRINSIC
INTRINSIC EXTERNAL
13.7 --
FORTRAN
FORTRN
248
FORTRAN
FORTRAN
SUBROUTINE
FUNCTION
CALL
SUBROUTINE CALL
SUBROUTINE name(dummy-argument1dummy-argument2dummy-argument3)
|
...
13.7.1
249
TKR
TKR
FORTRAN
(*)
250
FORTRAN
FORTRAN
13.7.2
FORTRAN
TKR
FORTRAN FORTRAN
FORTRAN
1.
(AES)
6
(13.7.1)
251
0 0
TKR
TKR
TKR
252
2.
TKR
FORTRAN
INTENT(OUT) INTENT(INOUT)
X(110) X(515)
X(510)
X X
X
13-15
CALL SUBROUTINE1(X)
CONTAINS
SUBROUTINE SUBROUTINE1(A)
A = 1000
253
TKR
SQUIRT SQUIRT(X(10))
3.
13.7.3
POINTER TARGET
13-1
13-1
POINTER
TARGET
POINTER
TARGET
TKR
F B
TKR AES
TKR AES
TKR AES
G D
TKR AES
TKR AES
TKR AES
254
POINTER
TARGET 5
E POINTER TARGET
BCD TARGET
TARGET POINTER E
TKR
BCD TARGET
B D TARGET
B C TARGET
TARGET
POINTER
B C
TKR
A POINTER
POINTER A
TKR
F G
B
D
POINTER POINTER
255
D AB
C
13.7.4
FORTRAN
dummy-argument-name = actual-argument
13-16
CALL SUBBATA(XYZCORE=30SHELL=PI**2)
CALL UNIT(ABMINI=0.23)
13.7.5 OPTIONAL
OPTIONAL
256
OPTIONAL
OPTIONAL
OPTIONAL
OPTIONAL 7
13-17
CALL UNIT(0.85X=FUN1(I))
SUBROUTINE UNIT(ABXY)
OPTIONAL BXY
PRESENT
13-18
IF(PRESENT(A)) THEN
A
FUN1=FUN2(A)**2
ELSE
A
FUN1=FUN2(B)**2
END IF
PRESENT
PRESENT
257
PRESENT
13.7.6 INTENT
INTENT
INTENT INTENT
INTENT 3
INTENT(IN)
INTENT(OUT)
INTENT(IN)
INTENT(OUT)
INTENT(OUT)
INTENT(INOUT)
INTENT(INOUT)
INTENT(INOUT) INTENT(INOUT)
INTENT(OUT)
INTENT(INOUT) INTENT
13.7.7
FORTRAN
258
2 2
KIND
13.7.8
2 2
TKR TKR
TKR
TKR
13-19 3 SIN SIN 3
SIN(9.9)
SIN((0.16.4))
SIN(9D+10)
TKR
TKR
TKR
13-20
INTERFACE SUB1
ELEMENTAL SUBROUTINE SUB2(X)
259
REAL X
END SUBROUTINE
SUBROUTINE SUB3(Z)
REAL Z()
END SUBROUTINE
END INTERFACE
REAL A(99) B(2550)
CALL SUB1(A)
SUB2
CALL SUB1(B)
SUB3
13.8
13.7.9
()
RETURN
FORTRAN
13-21
SUBROUTINE SUB1(XY*Z*)
.
END SUBROUTINE SUB1
CALLSUB1(AB*99C*999)
99
999
RETURN RETURN
RETURN scalar-integer-expression
260
(scalar-integer-expression) 1
n RETURN k
k
RETURN 1
99
RETURN (2)
99*
RETURN
EXTERNAL
INTENT
13.8
FORTRAN
261
13.8.1
FROTRAN
FROTRAN
1.
2.
3.
4.
5.
6. POINTER TARGET
7.
8.
9.
10.
11.
12.
1 7
13-22
SUBROUTINE SUB1(ABCDE)OPTIONAL ABC
END SUBROUTINE
CALL SUB1(FGHIJ)
CALL SUB1(FHIJ)
CALL SUB1(A=FB=GC=HD=IE=J)
CALL SUB1(A=F C=HD=IE=J)
CALL SUB1(D=IE=J)
CALL SUB1(E=JD=I)
2 3
262
5 FORTRAN
POINTER
TKR
13.8.3
13.8.4
10
13.8.5
11
12
FORALL
263
13.8.2
4
1.
2.
3.
4.
3 13.8.313.8.413.8.5
(R1201)
INTERFACE [generic-specification]
[interface-body]
[MODULE PROCEDURE procedure-name-list]
END INTERFACE
(generic-specification)(R1207)
generic-name
OPERATOR
ASSIGNMENT(=)
(interface-body)(R1205)
function-statement
[specification-part]
END [FUNCTION [function-name]]
subroutine-statement
[specification-part]
END [SUBROUTINE [subroutine-name]]
MODULE PROCEDURE
264
2 3 OPERATOR 4
ASSIGNMENT
ENTRY
DATA FORMAT
USE
MODULE PROCEDURE
ENTRY
END FUNCTION SUBROUTINE
END
PUREELEMENTALRECURSIVE
INTERFACE
[interface-body]
END INTERFACE
IMPLICIT
265
13.8.3
LOG 3 ALOG
CLOGDLOG
LOG
INTERFACE generic-name
[interface-body]
[MODULE PROCEDURE procedure-name-list]
END INTERFACE
(generic-name)
MODULE PROCEDURE
13-23
INTERFACE SQRT
MODULE PROCEDURE NORMAL_SQRT
END INTERFACE
SQRT NORMAL_SQRT
USE
266
TKR
CALL SUB(B=Y X)
CALL SUB(A=XB=Y)
CALL SUB(B=YA=X)
SUB ESUB
ESUB
ESUB ESUB SUB
A B TKR
ESUB(BA) ESUB
B SUB B TKR ESUB
A SUB A TKR
ESUB SUB
TKR 15
13.8.4
FORTRAN
1 2
FORTRAN 1 2
INTERFACE OPERATOR(defined-operator)
[interface-body]
[MODULE PROCEDURE procedure-name-list]
END INTERFACE
267
1 2 MODULE PROCEDURE
1 2
INTENT(IN)
INTERFACE
1 2
2
intrinsic-operator
. letter [letter] .
TKR
TKR
+
+
13-25++
+
INTERFACE OPERATOR(+)
FUNCTION INTEGER_PLUS_INTERVAL (A, B)
USE INTERVAL_ARITHMETIC
TYPE (INTERVAL) :: INTEGER_PLUS_INTERVAL
INTEGER, INTENT (IN)
:: A
268
13-26 VERTEX_VALENCE
.VALENCE.
INTERFACE OPERATOR(.VALENCE.)
MODULE PROCEDURE VERTEX_VALENCE
END INTERFACE
13.8.5
TKR
TKR
FORTRAN
==
INTERFACE ASSIGNMENT(=)
[interface-body]
[MODULE PROCEDURE procedure-name-list]
END INTERFACE
MODULE PROCEDURE
INTENT(OUT) INTENT(INOUT)
INTENT(IN)
variable=expression
(variable)
(expression)
269
=
TKR
()
TKR
13-27
INTERFACE ASSIGNMENT(=)
SUBROUTINE ASSIGN_STRING_TO_CHARACTER (CH, ST)
USE STRING_DATA
CHARACTER (*), INTENT (OUT) :: CH
TYPE (STRING), INTENT (IN)
:: ST
ASSIGN_STRING_TO_CHARACTER ASSIGN_REAL_TO_COMPLEX
CH = ST
CO = RE
ST CH
RE CO
13.9
13-1
13-2
N/A
270
CONTAINS
ENTRY
N/A
N/A
N/A
271
14
FORTRAN 95 FORTRAN 95
FORTRAN 95
FORTRAN 95 FORTRAN 95
115 109 6
FORTRAN 95 +
EXTERNAL
INTRINSIC
INTRINSIC
FORTRAN 95 5
5 13
272
14.1
115 4
LGE
LGT
LLE
LLT
14-1
( REPEATTRIMDOT_PRODUCTMATMUL )
MVBITS
NULL
273
DIM
DIM
DIM
MASK
MASK
MASK
MASK
KIND
KIND KIND
BACK
BACK
INTENT(IN)
14-1
ABS(A)
CABS(A)
DABS(A)
IABS(A)
ACOS(X)
DACOS(X)
AIMAG
AIMAG(Z)
AINT
AINT(A)
DINT(A)
ANINT(A)
DNINT(A)
ASIN(X)
DSIN(X)
ATAN(A)
ABS
ACOS
ANINT
ASIN
ATAN
274
DTAN(A)
ATAN2(A)
DTAN2(A)
CHAR
*CHAR(I)
COS
COS(X)
CCOS(X)
DCOS(X)
CONJG
CONJG(X)
COSH
COSH(X)
DCOSH(X)
DIM(XY)
IDIM(XY)
DPROD
DPROD(XY)
EXP
EXP(X)
CEXP(X)
DEXP(X)
ICHAR
*ICHAR(C)
INDEX
INDEX(STRINGSUBSTRING)
INT
*INT(A)
*IFIX(A)
*IDINT(A)
LEN
LEN(STRING)
LGE
*LGE(STRING_ASTRING_B)
LGT
*LGT(STRING_ASTRING_B)
LLE
*LLE(STRING_ASTRING_B)
LLT
*LLT(STRING_ASTRING_B)
LOG
ALOG(X)
CLOG(X)
DLOG(X)
ALOG10(X)
DLOG10(X)
*MAX0(A1A2A3)
*AMAX1(A1A2A3)
*DMAX1(A1A2A3)
*MAX1(A1A2A3)
*AMAX0(A1A2A3)
MIN
*MIN0(A1A2A3)
*AMIN1(A1A2A3)
*DMIN1(A1A2A3)
*MIN1(A1A2A3)
ATAN2
DIM
LOG10
MAX
275
*AMIN0(A1A2A3)
MOD
MOD(AP)
AMOD(AP)
DMOD(AP)
NINT(A)
IDNINT(A)
*REAL(A)
*FLOAT(A)
*SNGL(A)
SIGN(AB)
DSIGN(AB)
ISIGN(AB)
SIN(X)
CSIN(X)
DSIN(X)
SINH(X)
DSINH(X)
SQRT(X)
CSQRT(X)
SDQRT(X)
TAN(X)
DTAN(X)
TANH(X)
DTANH(X)
NINT
REAL
SIGN
SIN
SINH
SQRT
TAN
TANH
1
2
3*
4
14.2
3
3
276
B 2
b0b1b2 ...bn 1
0 1 10
n 1
B = bk 2k
k =0
19
n 1
I = s bk r k
k =0
s +1 -1
r 1
bk 0 bk < r
R = sr e bk r k
k =1
s +1 -1
r 1
n 1
bk 0 bk < r
e
IEEE 2
r=2
n=24
125 e 128
24
8 32
e -126-127-128 0 NaNs
277
14.3
7
LEN
LEN
BIT_SIZE
KIND SELECTED_INT_KIND
SELECTED_REAL_KIND
3
KIND
SELECTED_INT_KIND 10
SELECTED_REAL_KIND 10 10
5
14-2
14-2
ALLOCATED
LBOUND
SHAPE
278
SIZE
UBOUND
5 SIZELBOUNDUBOUND
DIM DIM
ASSOCIATED
3
PRESENT
9
14-3
14-3
DIGITS
EPSILON
n
r
1 n
HUGE
MINEXPONENT
MAXEXPONENT
PRECISION
10
RADIX
RANGE
10
TINY
EPSILONMINEXPONENTMAXEXPONENT 3
279
7 14-4
14-4
EXPONENT
FRACTION
NEAREST
RRSPACING
SCALE
SET_EXPONENT
SPACING
14.4 NULL
1.
15 14-5
14-5
ACHAR
ASCII
AIMAG
AINT
ANINT
CHAR
CMPLX
CONJG
DBLE
IACHAR
ASCII
IBITS
ICHAR
INT
LOGICAL
280
NINT
REAL
2. NULL
NULL
NULLIFY
NULL
NULLIFY
NULL
3. TRANSFER
TRANSFER
TRANSFER
MOLD
TRANSFER
14.5
47
ABS
ACOS
ASIN
ATAN
ATAN2
(XY)
CEILING
COS
281
COSH
DIM
2 0
DOT_PRODUCT
2 1
DPROD
EXP
FLOOR
LOG
LOG10
10
MATMUL
MAX
MIN
MOD
MODULO
SIGN
SIN
SINH
SQRT
TAN
TANH
14-7
ADJUSTL
ADJUSTR
INDEX
LEN_TRIM
LGE
ASCII
LGT
ASCII
LLE
ASCII
LLT
ASCII
REPEAT
SCAN
TRIM
VERIFY
14-8
BTEST
282
IAND
2 AND
IBCLR
IBSET
IEOR
2 OR
IOR
2 OR
ISHFT
ISHFTC
NOT
LGELGTLLELLT
DOT_PRODUCTMATMULREPEAT
14.6
17 5
5
1.
1 14-9
14-9
ALL
ANY
COUNT
MAXVAL
MINVAL
PRODUCT
SUM
2.
283
14-10
14-10
MERGE
PACK
SPREAD
UNPACK
3.
RESHAPE 1
4.
14-11
14-11
CSHIFT
EOSHIFT
TRANSPOSE
5.
14-12
14-12
MAXLOC
MINLOC
14.7
CALL
6
CPU_TIME
INTENT(OUT)
284
DATE_AND_TIME
INTENT(OUT)
MVBITS
RANDOM_NUMBER
RANDOM_SEED
SYSTEM_CLOCK
INTENT(OUT)
285
15
FORTRAN
FORTRAN
FORTRAN
FORTRAN
4
FORTRAN FORTRAN
FORTRAN
FORTRAN
286
4
4
15.1
(
)
SUM
FORTRAN
15.2
FORTRAN
FORTRAN
287
FORALL DO
15-1
288
15-1
15-1 FORTRAN
4 1 2 A D1 E
B C
F G
FORTRAN B C
F G
15.2.1
4
FORTRAN
FORTRAN
289
1.
FORTRAN
2.
3
290
3.
FORTRAN FORALL
FORALL FORALL
FORALL
4.
DATA DO DO
DATA DO DO
DO DO
DO DO DO
DO
DO DO
15.2.2
291
15.2.3
FORTRAN
15.2.4
15.2.5
(=)
15.2.6
292
15.2.7
FORTRAN
1. CALL
2.
3.
4.
2 (=)
ASSIGNMENT
13.7.7
13.8.5 15.2.6
3
OPERATOR
13.7.7 13.8.4 15.2.6
1 4
EXTERNAL
13.7
13.7.7 15.2.6
293
INTRINSIC
15.3
FORTRAN
EQUIVALENCE
COMMON
294
15-2 15-3
15-2
295
15-3
15.3.1
3
296
1.
2.
USE
USE
USE ONLY
USE
USE
USE USE
PUBLIC PRIVATE
3.
FORTRAN
297
IMPLICIT NONE
IMPLICIT NONE
IMPLICIT NONE
IMPLICIT
15-1 IMPLICIT NONE
IMPLICIT
IMPLICIT COMPLEX(OZ)
IMPLICIT LOGICAL(A-C)
O Z AB
C
4
1.
2.
3.
4.
1
IMPLICIT
298
IMPLICIT
IMPLICIT
IMPLICIT
15-2
PROGRAM HOST
USE GLOBAL_DATA
IMPLICIT LOGICAL (E-J)
!:A-D ;
!
E-J ;
K-N ;
O-Z
REAL A,B
READ *, P
! P
CALL CALC (Z )
! Z
CONTAINS
E-F ;
G-I ;
J ;
K-N ;
O-Z
REAL B
X=A+B+P+Q+Y
! SUBROUTINE CALC
!X ;
!A ;
!B ;
!P ;
!Q ;
!Y .
299
END SUBROUTINE
X=A+B+P+Q+Y
15.3.2
2
TARGET
ALLOCATE
3
NULLIFY
DEALLOCATE
15.3.3
FORTRAN
FORTRAN
FORTRAN
300
FORTRAN
FORTRAN
2
len len
7.11
ENTRY 13.6
EQUIVALENCE
COMMON
EQUIVALENCE ENTRY
15-3
REAL X(03)
COMPLEX Z
EQUIVALENCE(ZX(2))
X 4
X(0)
X(1)
X(2)
X(3)
Z 2 o
Zr
Zi
EQUIVALENCE Z X 2
X(0)
X(1)
X(2)
X(3)
Zr
Zi
301
EQUIVALENCE
EQUIVALENCE(ZX(3))
Z X
X(0)
X(1)
X(2)
X(3)
Zr
Zi
15.3.4
13.7.2
15.4
DATA
302
15.4.1
0
0 0
15.4.2
15.4.3
WRITE
DO DO
FORALL
DO DO
303
IOSTAT=
SIZE= READ
INQUIRE
( 6 )
ALLOCATABLE POINTER
INTENT(OUT)
15.4.4
304
RETURN END
SAVE
DO
INQUIRE NAME=RECL=NEXTREC=
ALLOCATE
INQUIRE
IOSTAT=
305
INTENT(OUT)
INTENT(OUT)
FORALL
FORALL
306
16
FORTRAN
FORTRAN
FORTRAN
FORTRAN
FORTRAN
FORTRAN
OPEN CLOSE
2
READ
WRITE PRINT
BACKSPACE ENDFILE REWIND
INQUIRE
FORTRAN
307
16.1
FORTRAN
16.1.1
FORTRAN
FORTRAN
FORTRAN
ASCII
FORTRAN
FORTRAN
308
ENDFILE
REWIND BACKSPACE
CLOSE
OPEN
16.1.2
CPU
FORTRAN FORTRAN
309
FORTRAN
16.1.3
n
1 n-1 n
n-1 n
CLOSE OPEN
1.
310
2.
16.1.4
FORTRAN
FORTRAN
311
REWIND BACKSPACE
312
16.1.5
FORTRAN
NULL BLANK=
16.2
FORTRAN
(R901)
io-unit
(io-unit)
external-file-unit
*
313
internal-file-unit
INQUIRE CLOSE
16-1
SUBROUTINE A
READ (6) X
...
SUBROUTINE B
N=6
REWIND N
16.2.1
OPEN
314
CLOSE
CLOSE
OPEN
INQUIRE
OPEN
WRITE
16.2.2 OPEN
OPEN
OPEN
OPEN (R904)
OPEN ( connect-spec-list )
(connect-spec)(R905)
[ UNIT = ] external-file-unit
IOSTAT = scalar-default-int-variable
ERR = label
FILE = file-name-expr
STATUS = scalar-default-char-expr
ACCESS = scalar-default-char-expr
FORM = scalar-default-char-expr
RECL = scalar-int-expr
BLANK = scalar-default-char-expr
POSITION = scalar-default-char-expr
ACTION = scalar-default-char-expr
DELIM = scalar-default-char-expr
PAD = scalar-default-char-expr
315
(file-name-expr)(R906)
OPEN
UNIT=(connect-spec-list)
OPEN
(external-file-unit)
ERR= OPEN
OPEN
OPEN
OPEN FILE=
OPEN
OPEN
OPEN OPEN
STATUS= CLOSE
OPEN
BLANK=DELIM=PAD=ERR= IOSTAT=
OPEN POSITION=
OPEN
OLD STATUS= OPEN
SCRATCH SCRATCH
OPEN
16-2
OPEN (10, FILE = 'employee.names', ACTION = 'READ', PAD = 'YES')
316
OPEN
1 FILE=
FILE=
OPEN
STATUS= SCRATCH
2 STATUS=
OLDNEWSCRATCHREPLACE
UNKNOWN
OLD NEW
NEW OPEN
OLD
REPLACE OPEN
OLDOPEN
OLD
SCRATCH
CLOSE
SCRATCH
UNKNOWN
UNKNOWN
3 ACCESS=
SEQUENTIAL DIRECT
SEQUENTIAL
4 FORM=
FORMATTED UNFORMATTED
UNFORMATTED FORMATTED
5 RECL=
317
6 BLANK=
NULL ZERO
BLANK=
NULL
ZERO 0
NULL
7. POSITION=
ASISREWIND APPEND
REWIND
APPEND
ASIS
ASIS ASIS
8. ACTION=
READWRITEREADWRITE
READ WRITEPRINT ENDFILE
WRITE READ
READWRITE
READWRITE READ WRITE
9. DELIM=
APOSTROPHEQUOTENONE
318
APOSTROPHE
QUOTE
NONE
NONE
10. PAD=
YESNO
YES
NO
YES
16.2.3 CLOSE
CLOSE
CLOSE (R907)
CLOSE ( close-spec-list )
(close-spec)(R908)
[ UNIT = ] external-file-unit
IOSTAT = scalar-default-int-variable
ERR = label
STATUS = scalar-default-char-expr
CLOSE
UNIT=
ERR= CLOSE
CLOSE
OPEN
319
CLOSE
CLOSE
CLOSE
SCRATCH DELETE
KEEP
16-3
CLOSE (10, STATUS = 'KEEP')
CLOSE STATUS=
KEEPDELETE
DELETE CLOSE
KEEP CLOSE
SCRATCH DELETE
16.3
READ
WRITE PRINT
READ (R909)
READ ( io-control-spec-list ) [ input-item-list ]
READ format [ , input-item-list ]
WRITE (R910)
WRITE ( io-control-spec-list ) [ output-item-list ]
PRINT (R911)
PRINT format [ , output-item-list ]
(io-control-spec-list)
(input/output-item-list)
320
16-4
READ (6, *) SIZE
READ 10, A, B
WRITE (6, 10) A, S, J
PRINT 10, A, S, J
10 FORMAT (2E16.3, I5)
16.3.1
(R912)
[ UNIT = ] io-unit
[ FMT = ] format
[ NML = ] namelist-group-name
REC = scalar-int-expr
IOSTAT = scalar-default-int-variable
ERR = label
END = label
ADVANCE = scalar-default-char-expr
SIZE = scalar-default-int-variable
EOR = label
321
UNIT=
FMT=
UNIT=
NML=
UNIT=
REC=
REC= END=
ADVANCE=
EOR= ADVANCE=
SIZE= ADVANCE=
SIZE= NO ADVANCE=
EOR= NO ADVANCE=
IOSTAT= SIZE=
do do
IOSTAT= SIZE=
do
16-5 READ
READ (IOSTAT = IOS, UNIT = 6, FMT = '(10F8.2)') A, B
1. FMT=
FMT=
(R913)
default-char-expr
label
(label)
FORMAT
322
(default-char-expr)
7
*
16-6
READ (6, FMT = "(" // CHAR_FMT // ")" ) X, Y, Z
CHAR_FMT
2. NML=
NML=
3. REC=
The REC=
REC=
4. IOSTAT=
IOSTAT= IOSTAT=
16-7
READ (FMT = "(E8.3)", UNIT = 3, IOSTAT = IOSS) X
IF (IOSS < 0) THEN
! 3 .
CALL END_PROCESSING
ELSE IF (IOSS > 0) THEN
!
CALL ERROR_PROCESSING
END IF
323
5.
ERR=
IOSTAT=
READ SIZE=
ERR=
6.
END=
IOSTAT=
END=
7.
EOR=
PAD= YES
IOSTAT=
SIZE=
EOR=
8. ADVANCE=
(scalar-default-char-expr) YES NO
NO
YES
YES
9. SIZE=
SIZE=
324
16.3.2
(input-item)(R914)
variable
io-implied-do
(output-item)(R915)
expr
io-implied-do
do (io-implied-do)(R916)
( io-implied-do-object-list , io-implied-do-control )
do (io-implied-do-object)(R917)
input-item
output-item
do (io-implied-do-control)(R918)
do-variable = scalar-int-expr , &
& scalar-int-expr [ , scalar-int-expr ]
do
(input-item-list) do (io-implied-do-object)
(output-item-list) do (io-implied-do-object)
do do
do
do do do
do do
325
do DO
16-8
INTEGER A (100), J (100)
...
READ *, A (A) !
READ *, A (LBOUND (A, 1) : UBOUND (A, 1)) !
READ *, A (J) ! J
READ *, A (A (1) : A (10)) !
16-9
WRITE (LP, FMT = '(10F8.2)') (LOG (A (I)), I = 1, N + 9, K), G
do
16.3.3
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8) IOSTAT= SIZE=
16.3.4
16-1
16-1
326
PRINT WRITE
16.3.5
(namelist-group-object-list)
An end-of-file condition occurs.
(/)
16.4
BACKSPACE ENDFILE REWIND
BACKSPACE (R919)
BACKSPACE external-file-unit
BACKSPACE ( position-spec-list )
ENDFILE (R920)
ENDFILE external-file-unit
ENDFILE ( position-spec-list )
REWIND (R921)
REWIND external-file-unit
REWIND ( position-spec-list )
327
(position-spec)(R922)
[ UNIT = ] external-file-unit
IOSTAT = scalar-default-int-variable
ERR = label
ERR=
UNIT=
ACTION=
READ ENDFILE
16.4.1 BACKSPACE
BACKSPACE
BACKSPACE
16-10 BACKSPACE
BACKSPACE (10, ERR = 20)
16.4.2 ENDFILE
ENDFILE
ENDFILE
BACKSPACE REWIND
ENDFILE
16-11
ENDFILE K
328
ENDFILE
16.4.3 REWIND
REWIND
REWIND
REWIND
16-12
REWIND 10
REWIND
16.5
INQUIRE
INQUIRE
FILE=
UNIT=
IOLENGTH=
INQUIRE INQUIRE
INQUIRE (R923)
INQUIRE ( inquire-spec-list )
INQUIRE ( IOLENGTH = scalar-default-int-variable ) &
&output-item-list
16-13
INQUIRE (IOLENGTH = IOL) A (1:N)
INQUIRE (UNIT = JOAN, OPENED = LOG_01, NAMED = LOG_02, &
FORM = CHAR_VAR, IOSTAT = IOS)
329
17
FORTRAN
FORTRAN
FORTRAN
FORTRAN FORTRAN
FORTRAN 95
17.1
FORMAT
17.1.1 FORMAT
FORMAT (R1001)
FORMAT format-specification
(format-specification)(R1002)
( [ format-item-list ] )
(format-item-list) 17.2
FORMAT
FORMAT
P F, E, EN, ES, D, G
330
17-1
5 FORMAT (1PE12.4, I10)
9 FORMAT (I12, /, ' Dates: ', 2 (2I3, I5))
FORMAT
17.1.2
FORMAT
17-2
2 ISN'T 3
17.2
(format-item)(R1003)
[ r ] data-edit-desc
control-edit-desc
331
char-string-edit-desc
[ r ] ( format-item-list )
r(R1004)
1. (R1005)
Iw[.m]
Bw[.m]
Ow[.m]
Zw[.m]
Fw.d
Ew.d[Ee]
EN w . d [ E e ]
ES w . d [ E e ]
Gw.d[Ee]
Lw
A[w]
Dw.d
w(R1006)m(R1007)d(R1008)e(R1009) I, B, O,
Z, F, E, EN, ES, G, L, A, D 17.5
e
w I, B, O, Z, F 0
w, m, d, e
2. (R1010)
position-edit-desc
[r]/
:
sign-edit-desc
kP
blank-interp-edit-desc
k(R1011)
332
(position-edit-desc)(R1012)
Tn
TL n
TR n
nX
n(R1013)
(sign-edit-desc)(R1014)
S
SP
SS
(R1015)
BN
BZ
kP k
T, TL, TR, X, , , S, SP, SS,
P, BN, BZ 17-6
3. (R1016)
17.3
333
()
0 0 0 DO
r
r r
r 1
F, E, EN, ES,
D, G
(17.6.5)(17.6.4)
(17.6.6)
17-3
10 FORMAT (1X, 2(F10.3, I5))
334
17.4
TTLTR X 17.6.1
17.6.2
17.5
17.5.1
IBOZ
FEENESD G
BLANK=
BN BZ
0
335
FEENESD G
IFEENESDG 0
SSPSS
Ew.dEeENw.dEeESw.dEeGw.dEe
w
SP
IBOZF w 0
w 0
1.
IwIw.mBwBw.mOwOw.mZw Zw.m
I
(signed-digit-string)(R401) BOZ
(R408, R409, R410)
w w 0
w 0
G 17.5.4.1
m
Iw 0
0
BwOwZw 0
0
m Iw.mBw.mOw.mZw.m
IwBwOwZw
0
m w w 0
m 0 0
m w 0 0
336
2.
FEENES D FE
ENES D G
17.5.4.1
1. F
Fw.d w d w
0 w 0 F
0
d
d
E 0
D 0
D E
-k k
1 0 0
0 0
2. E D
Ew.dDw.d Ew.dEe w
d ( 1 ) e e
d
F
0
] [0].x
[1x2x...dexp
337
] yyy.x
[1x2x...dexp
0 1
1000
ENw.d ENw.dEe w
d e
F
|exp| > 999 ENw.d
17-4
SS, EN12.3
6.421
6.421E+00
.5
500.000E03
03..00217
4721.3
2.170E
4.721E+03
4. ES
ES
0 1 10
] y.x
[1x2x...dexp
ESw.d ESw.dEe w d
e
F
|exp| > 999 ESw.d
17-5
6.421
.5
SS, ES12.3
6.421E+00
5.000E01
.00217
2.170E-03
4721.3
4.721E+03
5.
FORTRAN
17.5.2
Lw w
G 17.5.4
338
T F T
F
.TRUE..FALSE
w-1 T F
17.5.3
A[w]
G
A G
A w w A
w
LEN A w
w LEN LEN w LEN
w LEN-w
A w LEN w-LEN LEN
w LEN w
17.5.4
Gw.d Gw.dEe
w d
e d e
1.
Gw.d Gw.dEe
17.5.1
Gw.dEe Ew.dEe
Gw.d Gw.dEe
Iw w 0
F
F
2.
Gw.d Gw.dEe Lw
339
3.
Gw.d Gw.dEe Aw
17.6
FORTRAN
17.6.1
TTLTR X
nX TRn
TTLTR X
TTLTR X
TTLTR X
17.6.2
17.6.3
340
17.6.4 SSP SS
SSS SP
SP
SS
S
SSS SP IFEENESD
G
17.6.5 P
kP k
0 FE
ENESD G P
k
FEENESDG
F
10k
FEENESDG
ED 10k
k
G F
E E
ENES
17.7
341
C FORTRAN95
FORTRAN95 (ISO/IEC 1559-1:1997(E))
FORTRAN95
FORTRAN95
FORTRAN95
Backus-Naur BNF
FORTRAN
Rxyy
R x FORTRAN yy
Rxyy
argumentarg
attribute..attr
declaration..decl
definitiondef
descriptordesc
expression..expr
integerint
operator..op
specifier.spec
statementstmt
FORTRAN
FORTRAN |
& and
342
<
>
|
FORTRAN95 (ISO/IEC 1559-1:1997(E))
access-id
use-name
| generic-spec
523
access-spec
PUBLIC
| PRIVATE
511
access-stmt
access-spec [ [ :: ] access-id-list ]
522
ac-do-variable
scalar-int-variable
436
ac-implied-do
( ac-value-list, ac-implied-do-control )
434
ac-implied-do-control
435
action-stmt
allocate-stmt
| assignment-stmt
| backspace-stmt
| call-stmt
| close-stmt
| continue-stmt
| cycle-stmt
| deallocate-stmt
| endfile-stmt
| end-function-stmt
| end-program-stmt
| end-subroutine-stmt
| exit-stmt
| forall-stmt
| goto-stmt
| if-stmt
| inquire-stmt
| nullify-stmt
| open-stmt
| pointer-assignment-stmt
| print-stmt
| read-stmt
| return-stmt
| rewind-stmt
| stop-stmt
| where-stmt
216
343
| write-stmt
actual-arg
Expr
| variable
| procedure-name
1214
actual-arg-spec
[ keyword = ] actual-arg
1212
ac-value
Expr
| ac-implied-do
433
add-op
+
|-
710
add-operand
706
allocatable-stmt
ALLOCATABLE [ :: ] array-name
[ ( deferred-shape-spec-list ) ]
{ , array-name
[ ( deferred-shape-spec-list ) ] }
527
allocate-lower-bound
scalar-int-expr
627
allocate-object
variable-name
| structure-component
625
allocate-shape-spec
[ allocate-lower-bound : ] allocate-upper-bound
626
allocate-stmt
622
allocate-upper-bound
scalar-int-expr
628
allocation allocate-object
[ ( allocate-shape-spec-list ) ]
624
alphanumeric-character
Letter
| digit
| underscore
302
and-op
.AND.
720
and-operand
[ not-op ] level-4-expr
715
array-constructor
( / ac-value-list / )
432
array-element
data-ref
615
array-section
dataref [ ( substringrange ) ]
616
array-spec
explicit-shape-spec-list
| assumed-shape-spec-list
| deferred-shape-spec-list
| assumed-size-spec
513
assignment-stmt
variable = expr
735
assumed-shape-spec
[ lower-bound ] :
517
assumed-shape-spec-list
assumed-shape-spec { assumed-shape-spec }
assumed-size-spec
[ explicit-shape-spec-list , ] [ lower-bound : ] *
519
attr-spec
PARAMETER
| access-spec
| ALLOCATABLE
| DIMENSION (array-spec )
| EXTERNAL
| INTENT ( intent-spec )
503
344
| INTRINSIC
| OPTIONAL
| POINTER
| SAVE
| TARGET
backspace-stmt
BACKSPACE external-file-unit
| BACKSPACE ( position-spec-list )
919
binary-constant
408
blank-interp-edit-desc
BN
| BZ
1015
block
{ execution-part-construct }
801
block-data
1112
block-data-stmt
1113
block-do-construct
817
boz-literal-constant
binary-constant
| octal-constant
| hex-constant
407
call-stmt
1211
case-construct
808
case-expr
scalar-int-expr
| scalar-char-expr
| scalar-logical-expr
812
case-selector
( case-value-range-list )
| DEFAULT
813
case-stmt
810
case-value
scalar-int-initialization-expr
| scalar-char-initialization-expr
| scalar-logical-initialization-expr
815
case-value-range
case-value
| case-value :
| : case-value
| case-value : case-value
814
case-value-range-list
case-value-range { case-value-range }
char-constant
constant
309
char-expr
expr
726
char-initialization-exr
char-expr
731
char-length
( char-len-param-value )
| scalar-int-literal-constant
509
char-len-param-value
specification-expr
|*
|:
510
char-literal-constant
420
345
length-selector
| (LEN = char-len-param-value, KIND =
scalar-int-initialization-expr )
| ( char-len-param-value, [ KIND = ]
scalar-int-initialization-expr )
| (KIND = scalar-int-initialization-expr [, LEN =
char-len-param-value ] )
507
char-string-edit-desc
char-literal-constant
1016
char-variable
variable
605
close-spec
[ UNIT = ] external-file-unit
| IOSTAT = scalar-default-int-variable
| ERR = label
| STATUS = scalar-default-char-expr
908
close-stmt
CLOSE ( close-spec-list )
907
common-block-object
variable-name [ ( explicit-shape-spec-list ) ]
530
common-stmt
COMMON [ / [ common-block-name ] / ]
common-block-object-list
{ [,] / [ common-block-name ] /
common-block object-list }
549
complex-literal-constant
( real-part , imag-part )
417
component-array-spec
explicit-shape-spec-list
| deferred-shape-spec-list
427
component-attr-spec
POINTER
| DIMENSION ( component-array-spec )
426
component-attr-spec-list
component-attr-spec { component-attr-spec }
component-decl
component-name [ ( component-array-spec ) ] [ *
char-length ] [ component-initialization ]
428
component-decl-list
component-decl { component-decl }
component-def-stmt
type-spec [ [ , component-attr-spec-list ] :: ]
component-decl-list
425
component-initialization
= initialization-expr
| => NULL ()
429
concat-op
//
712
connect-spec
[ UNIT = ] external-file-unit
| IOSTAT = scalar-default-int-variable
| ERR = label
| FILE = file-name-expr
| STATUS = scalar-default-char-expr
| ACCESS = scalar-default-char-expr
| FORM = scalar-default-char-expr
| RECL = scalar-int-expr
| BLANK = scalar-default-char-expr
905
346
| POSITION = scalar-default-char-expr
| ACTION = scalar-default-char-expr
| DELIM = scalar-default-char-expr
| PAD = scalar-default-char-expr
constant
literal-constant
| named-constant
305
constant-subobject
subobject
702
contains-stmt
CONTAINS
1227
continue-stmt
CONTINUE
839
control-edit-desc
position-edit-desc
|[r]/
|:
| sign-edit-desc
|kP
| blank-interp-edit-desc
1010
cycle-stmt
CYCLE [ do-construct-name ]
834
int-literal-constant
1008
data-edit-desc
Iw[.m]
|Bw[.m]
|Ow[.m]
|Zw[.m]
|Fw.d
|Ew.d[Ee]
| EN w . d [ E e ]
| ES w . d [ E e ]
|Gw.d[Ee]
|Lw
|A[ w]
|Dw.d
1005
Data-i-do-object
Array-element
| scalarstructurecomponent
| dataimplieddo
536
Data-i-do-variable
Scalar-int-variable
537
Data-implied-do
( data-i-do-object-list, data-i-do-variable =
scalar-int-expr
scalar-int-expr [ , scalar-int-expr] )
535
data-ref
part-ref { % part-ref }
612
data-stmt
532
data-stmt-constant
scalar-constant
| scalar-constant-subobject
| signed-int-literal-constant
| signed-real-literal-constant
| NULL ( )
540
347
| structure-constructor
| entry-stmt
Data-stmt-object
variable
| data-implied-do
534
data-stmt-object-list
data-stmt-object { data-stmt-object }
datastmtrepeat
Scalar-int-constant
| scalar-int-constant-subobject
539
data-stmt-set
data-stmt-object-list / data-stmt-value-list /
533
Data-stmt-value
[ data-stmt-repeat* ] data-stmt-constant
538
data-stmt-value-list
data-stmt-value { data-stmt-value }
deallocate-stmt
631
declaration-construct
derived-type-def
| interface-block
| type-declaration-stmt
| specification-stmt
| parameter-stmt
| format-stmt
| entry-stmt
| stmt-function-stmt
207
default-char-expr
expr
727
Default-char-variable
variable
606
default-int-variable
variable
608
default-logical-variable
variable
604
deferred-shape-spec
518
defined-binary-op
. letter { letter }.
724
defined-operator
defined-binary-op
| defined-unary-op
| extended-intrinsic-op
311
defined-unary-op
. letter { letter }.
704
derived-type-def
derived-type-stmt { private-sequence-stmt }
component-def-stmt { component-def-stmt }
end-type-stmt
422
derived-type-stmt
423
digit-string
digit { digit }
402
dimension-stmt
526
do-block
block
823
do-construct
block-do-construct
816
do-construct-name
name
do-stmt
label-do-stmt
| nonlabel-do-stmt
818
do-variable
scalar-int-variable
822
348
dummy-arg
dummy-arg-name
|*
1223
int-literal-constant
1009
else-if-stmt
804
else-stmt
ELSE [ if-construct-name ]
805
elsewhere-stmt
ELSEWHERE [ where-construct-name ]
745
end-block-data-stmt
1114
end-do
end-do-stmt
| continue-stmt
824
end-do-stmt
END DO [ do-construct-name ]
825
endfile-stmt
ENDFILE external-file-unit
920
end-forall-stmt
753
end-function-stmt
1220
end-if-stmt
END IF [ if-construct-name ]
806
end-interface-stmt
1204
end-module-stmt
1106
end-program-stmt
1103
end-select-stmt
811
end-subroutine-stmt
1224
end-type-stmt
430
end-where-stmt
746
entity-decl
504
entry-stmt
1225
enum-def equivalence-object
type-alias-name ( enumerator-list )
| variable-name
| array-element
| substring
0
548
equivalence-set
( equivalence-object, equivalence-object-list )
547
equivalence-set-list
equivalence-set { equivalence-set }
equivalence-stmt
EQUIVALENCE equivalence-set-list
546
equiv-op
.EQ.
| .NEQ.
722
equiv-operand
717
executable-construct
action-stmt
| case-construct
| do-construct
| forall-construct
| if-construct
215
349
| where-construct
execution-part
executable-construct {execution-part-construct}
208
execution-part-construct
executable-construct
| format-stmt
| entry-stmt
| data stmt (check still present)
209
exit-stmt
EXIT [ do-construct-name ]
835
explicit-shape-spec
[ lower-bound : ] upper-bound
514
exponent
signed-digit-string
406
exponent-letter
E
|D
415
expr
723
extended-intrinsic-op
intrinsic-operator
312
external-file -unit
scalar-int-expr
902
external-name-list
external-name { external-name }
external-stmt
EXTERNAL [ :: ] external-name-list
1208
external-subprogram
function-subprogram
| subroutine-subprogram
203
file-name-expr
scalar-default-char-expr
906
forall-assignment-stmt
assignment-stmt
| pointer-assignment-stmt
752
forall-body-construct
forall-assignment-stmt
| where-stmt
| where-construct
| forall-construct
| forall-stmt
751
forall-construct
forall-construct-stmt { forall-body-construct }
end-forall-stmt
747
forall-construct-name
name
forall-construct-stmt
748
forall-header
( forall-triplet-spec-list [, scalar-mask-expr ] )
749
forall-stmt
754
forall-triplet-spec
750
format
default-char-expr
| label
|*
913
format-item
[ r ] data-edit-desc
| control-edit-desc
| char-string-edit-desc
| [ r ] ( format-item-list )
1003
format-item-list
format-item { format-item }
format-specification
( [ format-item-list ) ]
1002
350
format-stmt
FORMAT format-specification
1001
function-name
name
function-reference
function-name ( [ actual-arg-spec-list ] )
1210
function-stmt
1217
function-subprogram
1216
generic-spec
generic-name
| OPERATOR ( defined-operator )
| ASSIGNMENT ( = )
1207
goto-stmt
GO TO label
836
hex-constant
410
hex-digit
digit
|A
|B
|C
|D
|E
|F
411
if-construct
802
if-construct-name
name
if-stmt
IF ( scalar-logical-expr ) action-stmt
807
if-then-stmt
[ if-construct-name : ] IF ( scalar-logical-expr )
THEN
803
imag-part
signed-int-literal-constant
| signed-real-literal-constant
419
implicit-part
{ implicit-part-stmt } implicit-stmt
205
implicit-part-stmt
implicit-stmt
| parameter-stmt
| format-stmt
| entry-stmt
206
implicit-spec
type-spec ( letter-spec-list )
542
implicit-stmt
IMPLICIT implicit-spec-list
| IMPLICIT NONE
541
initialization
initialization-expr
| => NULL()
505
initialization-expr
expr
730
input-item
variable
| io-implied-do
914
input-item-list
input-item { input-item }
0
351
inquire-spec
[ UNIT = ] external-file-unit
| FILE = file-name-expr
| IOSTAT = scalar-default-int-variable
| ERR = label
| EXIST = scalar-default-logical-variable
| OPENED = scalar-default-logical-variable
| NUMBER = scalar-default-int-variable
| NAMED = scalar-default-logical-variable
| NAME = scalar-default-char-variable
| ACCESS = scalar-default-char-variable
| SEQUENTIAL = scalar-default-char-variable
| DIRECT = scalar-default-char-variable
| FORM = scalar-default-char-variable
| FORMATTED = scalar-default-char-variable
| UNFORMATTED = scalar-default-char-variable
| RECL = scalar-default-int-variable
| NEXTREC = scalar-default-int-variable
| BLANK = scalar-default-char-variable
| POSITION = scalar-default-char-variable
| ACTION = scalar-default-char-variable
| READ = scalar-default-char-variable
| WRITE = scalar-default-char-variable
| READWRITE = scalar-default-char-variable
| DELIM = scalar-default-char-variable
| PAD = scalar-default-char-variable
924
inquire-spec-list
inquire-spec { inquire-spec }
inquire-stmt
INQUIRE ( inquire-spec-list )
| INQUIRE ( IOLENGTH = scalar-default-int-variable )
output-item-list
923
int-constant
constant
308
intent-spec
IN
| OUT
| INOUT
512
intent-stmt
520
interface-block
interface-stmt { interface-specification }
end-interface-stmt
1201
interface-body
1205
interface-specification
interface-body
| module-procedure-stmt
1202
interface-stmt
INTERFACE [generic-spec]
1203
internal-file-unit
default-char-variable
903
352
internal-subprogram
function-subprogram
| subroutine-subprogram
211
internal-subprogram-part
contains-stmt internal-subprogram
{internal-subprogram}
210
int-expr
expr
728
int-initialization-expr
int-expr
732
int-literal-constant
digit-string [ _ kind-param ]
404
intrinsic-operator
power-op
| mult-op
| add-op
| concat-op
| rel-op
| not-op
| and-op
| or-op
| equiv-op
310
intrinsic-procedure-name-list
intrinsic-procedure-name { intrinsic-procedure-name }
intrinsic-stmt
INTRINSIC [ :: ] intrinsic-procedure-name-list
1209
int-variable
variable
607
io-control-spec
[ UNIT = ] io-unit
| [ FMT = ] format
| [ NML = ] namelist-group-name
| REC = scalar-int-expr
| IOSTAT = scalar-default-int-variable
| ERR = label
| END = label
| ADVANCE = scalar-default-char-expr
| SIZE = scalar-default-int-variable
| EOR = label
912
io-implied-do
( io-implied-do-object-list , io-implied-do-control )
916
io-implied-do-control
918
io-implied-do-object
input-item
| output-item
917
io-unit
external-file-unit
|*
| internal-file-unit
901
signed-int-literal-constant
1011
keyword
dummy-arg-name
1213
kind-param
digit-string
| scalar-int-constant-name
405
kind-selector
( [ KIND = ] scalar-int-initialization-expr )
506
label
313
353
label-do-stmt
819
Length-selector
( [ LEN = ] charlenparamvalue)
| * char-length [ , ]
508
Letter-spec
letter [ - letter ]
543
level-1-expr
[ defined-unary-op ] primary
703
level-2-expr
707
level-3-expr
711
level-4-expr
713
level-5-expr
718
literal-constant
int-literal-constant
| real-literal-constant
| complex-literal-constant
| logical-literal-constant
| char-literal-constant
| boz-literal-constant
306
local-name
name
logical-expr
expr
725
logical-initialization-expr
logical-expr
733
logical-literal-constant
.TRUE. [ _kind-param ]
| . FALSE. [ _kind-param ]
421
logical-variable
variable
603
loop-control
821
lower-bound
specification-expr
515
int-literal-constant
1007
main-program
1101
masked-elsewhere-stmt
744
mask-expr
logical-expr
743
module
module-stmt [specification-part]
[module-subprogram-part] end-module-stmt
1104
module-procedure-stmt
1206
module-stmt
MODULE module-name
1105
module-subprogram
function-subprogram
| subroutine-subprogram
213
module-subprogram-part
contains-stmt module-subprogram
{module-subprogram}
212
mult-op
*
|/
709
mult-operand
705
int-literal-constant
1013
354
name
letter (alphanumeric-character }
304
named-constant
name
307
named-constant-def
named-constant = initialization
531
namelist-group-name
name
namelist-group-object
variable-name
545
namelist-group-object-list
namelist-group-object {namelist-group-object }
namelist-stmt
NAMELIST / namelist-group-name /
namelist-group-object-list
{ [ , ] / namelist-group-name /
namelist-group-object-list }
544
nonlabel-do-stmt
[ do-construct-name : ] DO [ loop-control ]
820
not-op
.NOT.
719
nullify-stmt
NULLIFY ( pointer-object-list )
629
numeric-e xpr
expr
729
object-name
name
object-name-list
object-name { object-name }
octal-constant
409
only
generic-spec
| only-use-name
| only-rename
1109
only-rename
1111
only-use-name
only-name
1110
open-stmt
OPEN ( connect-spec-list )
904
optional-stmt
OPTIONAL [ :: ] dummy-arg-name-list
521
or-op
.OR.
721
or-operand
716
output-item
expr
| io-implied-do
915
output-item-list
output-item { output-item }
parameter-stmt
PARAMETER ( named-constant-def-list )
550
parent-string
scalar-variable-name
| array-element
| scalar-structure-component
| scalar-constant
610
part-ref part-name
[ ( section-subscript-list ) ]
613
pointer-assignment-stmt
736
pointer-object
variable-name
| structure-component
630
pointer-object-list
pointer-object { pointer-object }
pointer-stmt
POINTER [ :: ] object-name
528
355
[ ( deferred-shape-spec-list ) ]
{ , object-name
[ ( deferred-shape-spec-list ) ] }
position-edit-desc
Tn
| TL n
| TR n
|nX
1012
position-spec
[ UNIT = ] external-file-unit
| IOSTAT = scalar-default-int-variable
| ERR = label
922
position-spec-list
position-spec { position-spec }
power-op
**
708
prefix
prefix-spec { prefix-spec }
1218
prefix-spec
type-spec
| RECURSIVE
| PURE
| ELEMENTAL
1219
primary
constant
| constant-sub-object
| variable
| array-constructor
| structure-constructor
| function-reference
| ( expr )
701
print-stmt
911
private-sequence-stmt
PRIVATE
| SEQUENCE
424
program
program-unit {program-unit}
201
program-name
name
program-stmt
PROGRAM program-name
1102
program-unit
main-program
| external-subprogram
| module
| block-data
202
int-literal-constant
1004
read-stmt
909
real-literal-constant
413
real-part
signed-int-literal-constant
| signed-real-literal-constant
418
356
rel-op
.EQ.
|.NE.
|.LT.
|.LE.
|.GT.
|.GE.
| ==
| /=
|<
| <=
|>
| >=
714
rename
1108
result-name
name
return-stmt
RETURN [ scalar-int-expr ]
1226
rewind-stmt
REWIND external-file-unit
| REWIND ( position-spec-list )
921
saved-entity
object-name
| / common-block-name /
525
saved-entity-list
saved-entity { saved-entity }
save-stmt
SAVE [ [ :: ] saved-entity-list ]
524
scalar-default-int-variable
scalar-int-variable
scalar-int-expr
expr
scalar-int-initialization-expr
expr
scalar-logical-expr
expr
sectionsubscript
subscript
| subscripttriplet
| vectorsubscript
618
select-case-construct-name
name
select-case-stmt
809
select-construct-name
name
sign
+
|-
416
signed-digit-string
[ sign ] digit-string
401
signed-int-literal-constant
[ sign ] int-literal-constant
403
sign-edit-desc
S
| SP
| SS
1014
signed-real-literal-constant
[ sign ] real-literal-constant
412
significand
digit-string . [ digit-string ]
| . digit-string
414
414
specification-expr
scalar-int-expr
734
specification-part
204
357
specification-stmt
access-stmt
| allocatable-stmt
| common-stmt
| data-stmt
| dimension-stmt
| equivalence-stmt
| external-stmt
| intent-stmt
| intrinsic-stmt
| namelist-stmt
| optional-stmt
| pointer-stmt
| save-stmt
| target-stmt
214
stat-variable
scalar-int-variable
623
stmt-function-stmt
1228
stop-code
scalar-char-constant
| digit [ digit [ digit [ digit [ digit ]]]]
841
stop-stmt
STOP [ stop-code ]
840
stride
scalar-int-expr
620
structure-component
data-ref
614
structure-constructor
type-name ( expr-list )
431
subobject
array-element
| array-section
| structure-component
| substring
602
subroutine-stmt
1222
subroutine-subprogram
1221
subscript
scalar-int-expr
617
Subscript-triplet
619
substring
parent-string ( substring-range )
609
substring-range
[ scalar-int-expr ] : [scalar-int-expr ]
611
target
variable
| expr
737
target-stmt
529
type-declaration-stmt
501
type-name
name
type-spec
INTEGER [ kind-selector ]
| REAL [ kind-selector ]
| DOUBLE PRECISION
502
358
| COMPLEX [ kind-selector ]
| CHARACTER [char-selector ]
| LOGICAL [ kind-selector ]
| TYPE ( type-name )
underscore
303
Upper-bound
Specification-expr
516
use-name
name
use-stmt
1107
variable
scalar-variable-name
| array-variable-name
| subobject
601
Vectorsub-script
intexpr
621
int-literal-constant
1006
where-assignment-stmt
assignment-stmt
742
where-body-construct
where-assignment-stmt
| where-stmt
| where-construct
741
where-construct
where-construct-stmt
{ where-body-construct }
{ masked-elsewhere-stmt { where-body-construct } }
{ elsewhere-stmt { where-body-construct } }
end-where-stmt
739
where-construct-name
name
where-construct-stmt
740
where-stmt
738
write-stmt
910
741
359