You are on page 1of 359

[1]

----

[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 1958 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.

12. IEEE 754/854


FORTRAN +0.-0. 0 0 FORTRAN 95
SIGN 0
0

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]

Donald E. Knuth (), Stanford University The Art of Computer Programming

The Art of Computer Programming


The Art of Computer Programming1974

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

OPEN INQUIRE FILE= NAME=

( C )

4-1 C EIGEN eigen FROTRAN


EXTERNAL EIGEN
...
CALL EIGEN
...
END

17

EIGEN eigen FROTRAN


CVF EIGEN eigen


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

&

23 FORMAT( 6Y, J9)!


37 FUNCTION string_concat(s1, & ! s2)

64 FORMAT( 6Y, J0)37 FUNCTION &


string_concat(s1, s2)
TYPE (string) :: s1, s2, string_concat
string_concat%string_data = s1%string_data(1:s1%length) // &
s2%string_data(1:s2%length)string_concat%length & !
= s1%length + s2%length
END FUNCTION string_concat

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

ENERGY = 0.5*MASS * VILOC & & ! VILOC & ITY


&ITY**2

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

END BLOCK DATA

INTERFACE ASSIGNMENT

END DO

INTERFACE OPERATOR

END FILE

MODULE PROCEDURE

END FORALL

RECURSIVE FUNCTION

END FUNCTION

RECURSIVE SUBROUTINE

END IF

RECURSIVE type-specifier FUNCTION

END INTERFACE

type-specifier FUNCTION

END MODULE

type-specifier RECURSIVE FUNCTION

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

DOUBLE PRECISION FUNCTION CUT_SIN(X)


CUT_SIN = X - X**3/FACTOR(3) + X**5/FACTOR(5)&
&- X**7/FACTOR(7)
CONTAINS
INTEGER FUNCTION FACTOR(N)
FACTOR = 1
DO 10 I = N, 1, -1
10 FACTOR = FACTOR * I
END FUNCTION FACTOR
END FUNCTION CUT_SIN

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

( KUBRICK 2001: A Space Odyssey


))
FORTRAN
FORTRAN FORTRAN

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

REAL DOUBLE PRECISION FORTRAN90

DOUBLE PRECISION

DOUBLE PRECISION

---- DOUBLE PRECISION DOUBLE


PRECISION
32 64 64
128

REAL

----

FORTRAN90 COMPLEX
FORTRAN

---- 8bits
28=256
16bits
216

FORTRAN 95
FORTRAN
----
FORTRAN

FORTRAN90 FORTRAN 95

bit
----

37

(
)

5-2
TYPE SAMPLE
REAL

CURRENT

COMPLEX (KIND = QUAD) PHASE


CHARACTER (LEN = 50)

SOURCE

END TYPE SAMPLE


TYPE (SAMPLE)

SI401SI402SI403SI404

SAMPLE SAMPLE
CURRENTPHASESOURCE

SI401SI402SI403SI404
TYPE END TYPE

38

5.3

Compaq Visual Fortran Compaq Visual Fortran

5-1 Compaq Visual Fortran

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)

2 bytes (16 bits)

-32,768 32,767

INTEGER(4)

4 bytes (32 bits)

-2,147,483,648 2,147,483,647

INTEGER(8)

8 bytes (64 bits)

-9,223,372,036,854,775,808 9,223,372,036,854,775,807

REAL(4)

4 bytes (32 bits)

1.17549435E-38

3.40282347E38 IEEE

S_floating 1.17549429E-38

REAL

1.40129846E-45
REAL(8)

8 bytes (64 bits)

2.2250738585072013D-308 1.7976931348623158D308

DOUBLE

IEEE T_floating

PRECISION

2.2250738585072008D-308 4.94065645841246544D-324

COMPLEX(4)

8 bytes (64 bits)

1.17549435E-38 3.40282347E38 IEEE


S_floating

COMPLEX

1.17549429E-38 1.40129846E-45

COMPLEX(8)

16 bytes (128 bits)

2.2250738585072013D-308

DOUBLE

1.7976931348623158D308 IEEE T_floating

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)

2 bytes (16 bits)

.TRUE. .FALSE.

LOGICAL(4)

4 bytes (32 bits)

.TRUE. .FALSE.

LOGICAL(8)

8 bytes (64 bits)

.TRUE. .FALSE.

CHARACTER

1 byte (8

bits)

CHARACTER(LEN=n) CHARACTER*n,
n byte

HOLLERITH

Hollerith 1

Hollerith

byte (8 bits)

INTEGER(4) INTEGER(KIND=4) INTEGER*4.

5.4 FORTRAN
FORTRAN
FORTRAN

FORTRAN



5.4.1

5 INTEGERREALCOMPLEXLOGICAL
CHARACTER
TYPE

TYPE END 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

99/100 0(-99)/100 058/3 19(-58)/3 -19




//

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

INTEGER [ ( [ KIND = ] kind-parameter) ] [ [ , attribute-list] :: ] entity-list

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

result = KIND (x)

x
x
5-10
KIND (0)
KIND (12)
RANGE

result = RANGE (x)

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

2126 8.5070591730234615865843651857942 1037 )


SELECTED_INT_KIND

result = SELECTED_INT_KIND (l)

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

[s] [[base] #] nnn...

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

x = s 2e [1/ 2 + wk 2 k ], 125 e 128


k =2

5-7
CVF
5-7
IEEE S_floating

24

Compaq ( DIGITAL) VAX F_floating

24

IEEE T_floating

53

Compaq VAX D_floating 1

53 2

Compaq VAX G_floating 1

53

VMS

VAX D_floating 56 53

Compaq Fortran 53

emin emax 5-8 CVF

5-8

IEEE S_floating
Compaq VAX F_floating

IEEE T_floating

emin

emax

-125

128

-127

127

-1021

1024

Compaq VAX D_floating

-127

127

Compaq VAX G_floating

-1023

1023

VMS only

1.
REAL DOUBLE
PRECISION FORTRAN

REAL [ ( [KIND=] n) ] [ attribute-list] entity-list


DOUBLE PRECISION [ attribute-list] entity-list

n 4, 8, 16
16 OpenVMS, Tru64 UNIX, Linux

54

DOUBLE PRECISION REAL(8) DOUBLE PRECISION

/real_size:size

5-18

REAL (KIND = high), OPTIONAL :: testval


REAL, SAVE :: a(10), b(20,30)

REAL (KIND = high) testval


REAL a(10), b(20,30)
OPTIONAL testval
SAVE a, b

2.
FORTRAN

FORTRAN

FORTRAN90
DOUBLE PRECISION REAL (REAL(8))
D
FORTRAN

KIND
PRECISION
RANGE
SELECTED_REAL_KIND
KIND

KIND(0.0D0)
KIND(0.0)

result = KIND (x)

x
x
5-19 KIND (0.0)
PRECISION

55

p p

result = PRECISION (x)

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

result = SELECTED_REAL_KIND ([p] [,r])

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

REAL (SELECTED_REAL_KIND (6, 50))X X 6


1050 10-50
REAL (SELECTED_REAL_KIND (6, 70)) REAL (8)
i = SELECTED_REAL_KIND(r=200) ! returns 8
i = SELECTED_REAL_KIND(13)

! 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

x = s 2e [1/ 2 + wk 2 k ], 125 e 128


k =2

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

REAL ,; DOUBLE PRECISION

-47.E47

REAL ,; DOUBLE PRECISION

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)

REAL(4) DOUBLE PRECISION (REAL(8))


COMPLEX(8)

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

COMPLEX(8) ax, by! COMPLEX*16 ax, by


COMPLEX (kind(4)) y(10)
complex (kind=8) x, z(10)

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]

k : LOGICAL(1) 1LOGICAL(2) 2LOGICAL(4) 4


LOGICAL(8) 8( _ )

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]

(access-specification) PUBLIC PRIVATE


(type-name)
(private-sequence-statement) PRIVATE SEQUENCE
(component-definition-statement)(R425)
(R502)
type-specification[ [, component-attribute-list] :: ] component-declaration-list

(type-specification)
POINTER

(component-attribute)(R426) POINTER DIMENSION


POINTER DIMENSION
POINTER DIMENSION
(component-declaration)
(R428)
component-name[(component-array-specification)] &
[*character-length] [component-initialization]

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

TYPE TYPE TYPE

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

PRODUCE(.70, ITEM (.25, "XIN HUA", "A BOY"))

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)]] ... %component [(section-subscript-list)]


78


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)

INTENT, TARGET, PARAMETER


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

MONTH%PARTS(I:K) ! An array section


YEAR(I)%PARTS! An array structure component (a whole array)
YEAR(J)%PARTS(I) ! An array element
YEAR(J)%PARTS(I:K)

! An array section

YEAR(J:K)%PARTS(I)

! An array section

YEAR%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)

6-29 A(100) A(4528-5) 1


(4) 4
A(45)
A(40)
A(35)
A(30)

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/)

A(23) 2 A(I(1)) A(I(3))


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

A(10) A(293) A(2)A(5)A(8)


1 A(10) 258 A(2
93) 123

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

(access- specification) PUBLIC PRIVATE


(R505) 2
object-name [(array- specification)] [*character-length] [initialization]
function-name [(array- specification)] [*character-length]

(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

INTEGER [ ( [ KIND = ] kind-value ) ] [ [ , attribute-list] :: ] entry-list

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 PRECISION REAL


DOUBLE PRECISION

DOUBLE
REAL(DOUBLE)

REAL [ ( [KIND=] kind-value ) ] [ [ , attribute-list] :: ] entry-list


DOUBLE PRECISION [ attribute-list] :: ] entry-list

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

COMPLEX [([KIND = ] kind-value ) ] [ [ , attribute-list] :: ] entry-list

7-8
COMPLEX ch
COMPLEX (KIND=4),PRIVATE :: zz, yy

! COMPLEX*8 zz, yy
97

COMPLEX(8) ax, by ! COMPLEX*16 ax, by


COMPLEX (kind(4)) y(10)
complex (kind=8) x, z(10)

7.2.4
LOGICA

LOGICAL [([KIND = ] kind-value ) ] [ [ , attribute-list] :: ] entry-list

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 [character-selector] [ , attribute-list :: ] entry-list

(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 = &

CHARACTER (*)INTENT(IN)SCHOOL, HOME


CHARACTER *3, SAVE :: COMPONENT_1, LONGER(9) *20, COMPONENT_2
CHARACTER :: RESULT = PASS

7-12
CHARACTER (70)PROJECT
99

CHARACTER (LEN=30 KIND=GERMAN)TRANSFORMATION


CHARACTER (LEN=25KIND=GREEK)Z1
CHARACTER (LEN=20KIND=KANJI)GREETING(2)
CHARACTER (10)QUESTION
CHARACTER (*)SCHOOL, HOME
CHARACTER *3 COMPONENT_1, LONGER(9) *20, COMPONENT_2
CHARACTER RESULT
SAVE GREETING(2)
INTENT(IN)SCHOOL, HOME
DATA QUESTION /WHERE/
CHARACTER (*)MESSAGE
PARAMETER( MESSAGE = &
)

7.2.6
TYPE TYPE

TYPE(type-name)[ , attribute-list :: ] entry-list

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 IMPLICIT (R541) 2

IMPLICIT type-specification(letter-specification-list)
IMPLICIT NONE

(R543)
letter[-letter]

IMPLICIT
IMPLICIT

IMPLICIT NONE PARAMETER


IMPLICIT
IMPLICIT letter-letter

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

7.3.7 DIMENSION DIMENSION

DIMENSION DIMENSION FORTRAN

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

7.3.8 ALLOCATABLE ALLOCATABLE


ALLOCATE
ALLOCATABLE
ALLOCATABLE
type-specificationALLOCATABLE [ attribute-list]entity-list

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

7.4.1 POINTER POINTER


POINTER
type-specificationPOINTER [ attribute-list]entity-list

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

7.4.2 TARGET TARGET


TARGET
TARGET

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

type-specification [ attribute-list]object-name [(array-specification)]&


[*character-length] initialization

(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

DATA SAMPLE1 / SAMPLE(33BETA)/


DATA SAMPLE2 / SAMPLE(45BETA)/
REAL OVERFLOW(100100)
DATA ((OVERFLOW(JK)J=1K-1)K=1100)/4950*1.0/
DATA ((OVERFLOW(JK)J=K100)K=1100)/5050*0.0/

SYMBOL AIPHA COUNT 10


0
START SAMPLE1 SAMPLE2
SAMPLE SAMPLE1 SAMPLE2

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

7.6.1 PUBLIC PRIVATE


PUBLIC PRIVATE

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

PUBLIC PRIVATE (R522)


PUBLIC [ [ ] access-id-list ]
PRIVATE [ [ ] access-id -list ]

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

7.6.2 INTENT INTENT


INTENT , INTENT




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 INTENT (R520)


INTENT(intent- specification) [ ] dummy-argument-name-list

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

SUBROUTING SUB (X, Y)


INTEGER, INTENT(INOUT) :: X, Y

7-45 :
SUBROUTING MOVE(FROMTO)
USE PERSON_MODULE
TYPE(PERSON) FROM, TO
INTENT(IN) FROM
INTENT(OUT) TO

SUBROUTING SUB (X, Y)


INTEGER X, Y
INTENT(INOUT) X, Y

7.6.3 OPTIONAL OPTIONAL


OPTIONAL ,

OPTIONAL

OPTIONAL
type-specificationOPTIONAL [ attribute-list]dummy-argument-list

OPTIONAL
DIMENSION
121

EXTERNAL
INTENT
POINTER
TARGET

OPTIONAL OPTIONAL (R521)


OPTIONAL [ ] dummy-argument-name-list

OPTIONAL
OPTIONAL
OPTIONAL
7-46
CALL SORT_X (X= VECTOR_A)

SUBROUTING SORT_X (X,SIZEX, FAST)


REAL, INTENT(INOUT) :: X(:)
INTEGER, INTENT(IN),OPTIONAL :: SIZEX
LOGICAL, INTENT(IN), OPTIONAL :: FAST

INTEGER TSIZE

IF (PRESENT (SIZEX)) THEN


TSIZE= SIZEX
ELSE
TSIZE= SIZE(X)
END IF
IF (.NOT. PRESENT (FAST) .AND. TSIZE > 100) THEN
CALL QUICK_SORT(X)
ELSE
CALL BUBBLE_SORT(X)
END IF

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

7.6.3 SAVE SAVE


SAVE
SAVE
FORTRAN
SAVE
SAVE
SAVE

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

7.7.1 EXTERNAL EXTERNAL


EXTERNAL

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

7.7.2 INTRINSIC INTRINSIC


INTRINSIC

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

COMMON EQUIVALENCE FORTRAN

7.11.1
FORTRAN

129

FORTRAN

FORTRAN

SEQUENCE

7-4

7-4

1
130

n ( n )

n ( n )

(
)

7.11.2

131

FORTRAN

FORTRAN (FORMULA TRANSLATION)


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

LENGTH PARAMETER PARAMETER

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)

COS COS COS(A)


(3050)

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

LBOUND UBOUND
ARRAY
DIM
DIM LBOUND UBOUND DIM

DIM LBOUND UBOUND ARRAY


1

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

X-Y Z=X-Y X-Y.EQ.Z

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.

X Y TURE FALSE TRUE

.NEQV.

X Y TURE FALSE TRUE

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

8-37 .ADD., RATIONAL A B

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

END FUNCTION RATIONAL_ADD


FUNCTION LOGICAL_ADD(L, R)
LOGICAL, INTENT(IN)::L, R
LOGICAL

::LOGICAL_ADD

END FUNCTION LOGICAL_ADD


END INTERFACE

.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

END SUBROUTING RATIONAL_TO_REAL


ELEMENTAL SUBROUTING REAL_TO_RATIONAL (L,R)
USE RATIONAL_MODULE
REAL INTENT(IN)

::R

TYPE (RATIONAL), INTENT(OUT)::L


END SUBROUTING REAL_TO_RATIONAL
END INTERFACE

168


RATIONAL RATIONAL

REAL R_VALUE, R_ARRAY(20)


TYPE (RATIONAL) RAT_VALUE, RAT_ARRAY(20)
R_VALUE=RATIONAL(5,8)
RAT_VALUE=6.2

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

WHERE WHERE mask


.NOT.mask
9-14
WHERE(A1)
CALL B1
ELSEWHERE(A2)
CALL B2
ELSEWHERE
CALL B3

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

FORALL END FORALL FORALL 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)

FORALL (I=1:500, INVENTORY(I)%LENGTH> .05)


INVENTORY(I)% HEAD_TYPE=> HEAD_TYPES &
(MOD(I-1, 5)+1
! HEAD_TYPES 1,2,3,4,5,1,2,3,4,5,
INVENTORY(I)%THREAD=THREADS((I-1)/5+1)
! THREADS 1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,
END FORALL

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)

INT_WHERE: FORALL (I=1:5)


WHERE(X(I,:)==0) X(I,:)=I
END FORALL INT_WHERE

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

ELSE IF ELSE IF-THEN


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

I<J X=Y*2.5 ELSE IF


-THEN
ELSE IF-THEN I>8.3 X=0.0Y=100
ELSE
ELSE X=100Y=0.0
END IF 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

WRITEGO TO FORMAT ENTRY

186

10.4 CASE
IF CASE

IF CASE SELECT 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-value1 .LE. case-index .LE. case-value2

case-value

case-value .LE. case-index

case-value

case-value .GE. case-index

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 WHILE DO WHILE

DO [label ] [ ]WHILE [scalar-logical-expression]

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]

----H.Simon The Sciences of the Artificial

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

ACCESSORY_BOX() PARTS() TOOL(


) TOOL
ACCESSORY_BOX
209

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

PRINT

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)

END FUNCTION STORM


END

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

END SUBROUTINE TASK1

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

USE-ONLY PUBLIC PRIVATE

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

EQU1 USE COFF

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

END MODULE POLAR_COORDINATES

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

END SUBROUTINE INPUT


END INTERFACE
END MODULE ENG_LIBRARY

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)

END SUBROUTINE ACCTS_RECEIVABLE


SUBROUTINE ACCTS_PAYABLE(CUST_ID, AMOUNT)

END SUBROUTINE ACCTS_PAYABLE


SUBROUTINE PAYROLL(EMP_ID, AMOUNT)

END SUBROUTINE PAYROLL


FUNCTION BOTTOM_LINE(AMOUNT)

END FUNCTION BOTTOM_LINE


END MODULE

12.6.6

FORTRAN

EXTERNAL
(R1112)
BLOCK DATA[block-data-name]
[specification-part]
END [BLOCK DATA[block-data-name]]


226

END BLOCK DATA

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

FUNCTION SUBROUTINE RECURSIVE

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

MODULE PROCEDURE ASSIGN_POLAR_TO_COMPLEX


END INTERFACE

SUBROUTINE ASSIGN_POLAR_TO_COMPLEX (Z, P)


COMPLEX INTENT ( OUT )

:: Z

TYPE (POLAR) INTENT (IN)

:: P

Z= CMPLX (P%RHO * COS (P%THETA), &


P%RHO * SIN (P%THETA))
END SUBROUTINE ASSIGN_POLAR_TO_COMPLEX
USE POLAR_COORDINATES
COMPLEX CARTESIAN

CARTESIAN = POLAR(RPI/6)

CALL
CALL ASSIGN_POLAR_TO_COMPLEX(CARTESIANPOLAR(RPI/6))

13.3

13.3.1

[function-prefix] simplest-function-statement [RESULT (result-name) ]


[specification-part]
[execution-part]
[internal-subprogram-part]
END [FUNCTION [function-name]]

(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

END FUNCTION ACROSS

13.5

FORTRAN 95

KIND

FORTRAN 95 FORTRAN
FORTRAN90

FUNCTION SUBROUTINE
ELEMENTAL

ELEMENTAL PURE
( 13.4 )







13-11
243

ELEMENTAL FUNCTION QUADRIC(ZX)


REAL QUADRIC
REALINTENT(IN)X
COMPLEXINTENT(IN)Z

END FUNCTION QUADRIC

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

END SUBROUTINE COUNT1

COUNT1 OP1 OP2ENTRY

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)

ENTRY FUN_FACTOR(AB) RESULT(CO_FACTOR)


RESULT

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)
|

...

CALL name(actual-argument1actual -argument2actual -argument3)


13-1

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

END SUBROUTINE UNIT

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

INTENT(OUT) INTENT (INOUT)

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)

CALL SUB1(C=HB=G D=IE=J)

CALL SUB1(D=IA=FB=G E=J)

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

13-24 2 SUB(AB) SUB


AB XY SUB
CALL SUB(XY)
CALL SUB(XB=Y)

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

TYPE (INTERVAL), INTENT (IN) :: B


END FUNCTION INTEGER_PLUS_INTERVAL
MODULE PROCEDURE RATIONAL_ADD
END INTERFACE

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

END SUBROUTINE ASSIGN_STRING_TO_CHARACTER


MODULE PROCEDURE REAL _TO_ COMPLE
END INTERFACE

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

INDEX BACK=.TRUE. INDEX

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

3 14-6 14-7 14-8


14-6

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
(
)

FORTRAN SUM SUM

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

SUBROUTINE CALC (X)


IMPLICIT REAL (G-I)
!:A-D ;
!

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

END PROGRAM HOST

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

STAT= ALLOCATE DEALLOCATE


STAT=


( 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

INQUIRE OPEN CLOSE WRITE


PRINT REWIND ENDFILE
WRITE PRINT ENDFILE

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

OPEN CLOSE INQUIRE

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

STATUS= NEW REPLACE FILE=


STATUS= SCRATCH FILE=
STATUS= OLD FILE=

OPEN

OPEN
OPEN FILE=


OPEN
OPEN
OPEN OPEN
STATUS= CLOSE
OPEN
BLANK=DELIM=PAD=ERR= IOSTAT=

OPEN POSITION=

OPEN STATUS= OLD


BLANK=DELIM=PAD=

OPEN ERR= IOSTAT= OPEN

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

KEEP CLOSE SCRATCH


KEEP CLOSE
KEEP CLOSE

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

WRITE END=EOR= SIZE=


ERR=EOR= END=

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

WRITE (6, 100) 2, 3


100 FORMAT (1X, I1, 1X, 'ISN''T', 1X, I1)
WRITE (6, '(1X, I1, 1X, ''ISN''''T'', 1X, I1)') 2, 3
WRITE (6, '(A)') ' 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))

WRITE (10,10) 10.1, 3, 4.7, 1, 12.4, 5, 5.2, 6

10 FORMAT (1X, F10.3, I5, F10.3, I5/F10.3, I5, 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

|exp| > 999 Ew.d Dw.d


3. EN
EN

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

ac-do-variable = scalar-int-expr , scalar-int-expr [ ,


scalar-int-expr ]

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

[ add-operand mult-op ] mult-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

ALLOCATE ( allocation-list [ , STAT = stat-variable ] )

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

B ' digit { digit } '


| B "digit { digit } "

408

blank-interp-edit-desc

BN
| BZ

1015

block

{ execution-part-construct }

801

block-data

block-data-stmt [specification-part] end-block-data-stmt

1112

block-data-stmt

BLOCK DATA [block-data-name]

1113

block-do-construct

do-stmt do-block end-do

817

boz-literal-constant

binary-constant
| octal-constant
| hex-constant

407

call-stmt

CALL subroutine-name [ ( [ actual-arg-spec-list ] ) ]

1211

case-construct

select-case-stmt { case-stmt block } end-select-stmt

808

case-expr

scalar-int-expr
| scalar-char-expr
| scalar-logical-expr

812

case-selector

( case-value-range-list )
| DEFAULT

813

case-stmt

CASE case-selector [ case-construct-name ]

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

[ _kind-param ] ' { rep-char } '

420
345

| [ _kind-param ] " { rep-char } "


char-selector

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

DATA data-stmt-set { [ , ] data-stmt-set }

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

DEALLOCATE ( allocate-object-list [, STAT =


stat-variable ] )

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

TYPE [ [ , access-spec ] ] type-name

423

digit-string

digit { digit }

402

dimension-stmt

DIMENSION [ :: ] array-name ( array-spec ) { ,


array-name ( array-spec ) }

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

ELSE IF ( scalar-logical-expr ) THEN


[ if-construct-name ]

804

else-stmt

ELSE [ if-construct-name ]

805

elsewhere-stmt

ELSEWHERE [ where-construct-name ]

745

end-block-data-stmt

END [BLOCK DATA [block-data-name]]

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

END FORALL [ forall-construct-name ]

753

end-function-stmt

END [ FUNCTION [ function-name ]]

1220

end-if-stmt

END IF [ if-construct-name ]

806

end-interface-stmt

END INTERFACE [ generic-spec ]

1204

end-module-stmt

END [MODULE [ module-name]]

1106

end-program-stmt

END [PROGRAM [ program-name]]

1103

end-select-stmt

END SELECT [ select-case-construct-name ]

811

end-subroutine-stmt

END [ SUBROUTINE [ subroutine-name ]]

1224

end-type-stmt

END TYPE [ type-name ]

430

end-where-stmt

END WHERE [ where-construct-name ]

746

entity-decl

object-name [ ( array-spec ) ] [ * char-length ]


[ initialization ]
| function-name [ * char-length ]

504

entry-stmt

ENTRY entry-name [ ( [ dummy-arg-list ] ) [ RESULT


( result-name ) ] ]

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

[ equiv-operand or-op ] or-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

[ expr defined-binary-op ] level-5-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

[ forall-construct-name : ] FORALL forall-header

748

forall-header

( forall-triplet-spec-list [, scalar-mask-expr ] )

749

forall-stmt

FORALL forall-header forall-assignment-stmt

754

forall-triplet-spec

index-name = subscript : subscript [ : stride ]

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

[ prefix ] FUNCTION function-name


( [ dummy-arg-name-list ] ) [ RESULT
( result-name ) ]

1217

function-subprogram

function-stmt [specification-part] [execution-part]


[internal-subprogram-part] end-function-stmt

1216

generic-spec

generic-name
| OPERATOR ( defined-operator )
| ASSIGNMENT ( = )

1207

goto-stmt

GO TO label

836

hex-constant

Z ' hex-digit { hex-digit } '


| Z " hex-digit { hex-digit } "

410

hex-digit

digit
|A
|B
|C
|D
|E
|F

411

if-construct

if-then-stmt block { else-if-stmt block } [ else-stmt


block ] end-if-stmt

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

INTENT ( intent-spec ) [ :: ] dummy-arg-name-list

520

interface-block

interface-stmt { interface-specification }
end-interface-stmt

1201

interface-body

function-stmt [ specification-part ] end-function-stmt


| subroutine-stmt [ specification-part ]
end-subroutine-stmt

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

do-variable = scalar-int-expr, scalar-int-expr


[ , scalar-int-expr ]

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

digit [ digit [ digit [ digit [ digit ]]]]]

313
353

label-do-stmt

[ do-construct-name : ] DO label [ loop-control ]

819

Length-selector

( [ LEN = ] charlenparamvalue)
| * char-length [ , ]

508

Letter-spec

letter [ - letter ]

543

level-1-expr

[ defined-unary-op ] primary

703

level-2-expr

[ [ level-2-expr ] add-op ] add-operand

707

level-3-expr

[ level-3-expr concat-op ] level-2-expr

711

level-4-expr

[ level-3-expr rel-op ] level-3-expr

713

level-5-expr

[ level-5-expr equiv-op ] equiv-operand

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

[ , ] do-variable = scalar-int-expr , scalar-int-expr


[ , scalar-int-expr ]
| [ , ] WHILE scalar-logical-expr

821

lower-bound

specification-expr

515

int-literal-constant

1007

main-program

[program-stmt] [specification-part] [execution-part]


[internal-subprogram-part] end-program-stmt

1101

masked-elsewhere-stmt

ELSEWHERE ( mask-expr ) [ where-construct-name ]

744

mask-expr

logical-expr

743

module

module-stmt [specification-part]
[module-subprogram-part] end-module-stmt

1104

module-procedure-stmt

MODULE PROCEDURE procedure-name-list

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

level-1-expr [ power-op 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

O ' digit { digit } '


| O " digit { digit } "

409

only

generic-spec
| only-use-name
| only-rename

1109

only-rename

local-name => use-name

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

[ or-operand and-op ] and-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

pointer-object => target

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

PRINT format [ , output-item-list ]

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

READ ( io-control-spec-list ) [ input-item-list ]


READ format [, input-item-list ]

909

real-literal-constant

significand [ exponent-letter exponent ] [ _kind-param ]


| digit-string exponent-letter exponent [ _kind-param ]

413

real-part

signed-int-literal-constant
| signed-real-literal-constant

418

356

rel-op

.EQ.
|.NE.
|.LT.
|.LE.
|.GT.
|.GE.
| ==
| /=
|<
| <=
|>
| >=

714

rename

local-name => use-name

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

[ case-construct-name : ] SELECT CASE ( case-expr )

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

{ use-stmt } [ implicit-part ] { declaration-construct }

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

function-name ( [ dummy-arg-name-list ] ) = scalar-expr

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

[ prefix ] SUBROUTINE subroutine-name


[ ( [ dummy-arg-list ] ) ]

1222

subroutine-subprogram

subroutine-stmt [specification-part] [execution-part]


[internal-subprogram-part] end-subroutine-stmt

1221

subscript

scalar-int-expr

617

Subscript-triplet

[ subscript] : [subscript ] [ :stride ]

619

substring

parent-string ( substring-range )

609

substring-range

[ scalar-int-expr ] : [scalar-int-expr ]

611

target

variable
| expr

737

target-stmt

TARGET [ :: ] object-name [ ( array-spec ) ] { ,


object-name [ ( array-spec ) ] }

529

type-declaration-stmt

type-spec [ { , attr-spec } :: ] entity-decl-list

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

USE module-name [ , rename-list ]


| USE module-name , ONLY : [only-list]

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

[ where-construct-name: ] WHERE ( mask-expr )

740

where-stmt

WHERE ( mask-expr ) where-assignment-stmt

738

write-stmt

WRITE ( io-control-spec-list ) [ output-item-list ]

910

741

359

You might also like