Fortran语言编写的有限元结构程序

Fortran语言编写的有限元结构程序
Fortran语言编写的有限元结构程序

算例一计算简图及结果输出

用平面刚架静力计算程序下图结构的内力。各杆EA,EI相同。已知:642

EA=4.010KN,EI=1.610KN m

???

计算简图如下:

(1输入原始数据

控制参数3,5,8,7,1,2(NE,NJ,N,NW,NPJ,NPF

结点坐标集结点未知量编号0.0,0.0,0,0 0.0,4.0,1,2,3 0.0,4.0,1,2,4 4.0,4.0,5,6,7 4.0,0.0,0,0,8

单元杆端结点编号及单元EA、EI 1,2,4.0E+06,1.6E+04 3,4,4.0E+06,1.6E+04 5,4,4.0E+06,1.6E+04

结点荷载7.0,-15.

非结点荷载1.0,2.0,2.0,-

2.0,1.0,4.0,-25.0

(2输出结果

NE= 3 NJ= 5 N= 8 NW= 7 NPJ= 1 NPF= 2 NODE X Y XX YY ZZ

1 0.0000 0.0000 0 0 0

2 0.0000 4.0000 1 2 3

3 0.0000 4.0000 1 2 4

4 4.0000 4.0000

5

6 7

5 4.0000 0.0000 0 0 8

ELEMENT NODE-I NODE-J EA EI

1 1

2 0.400000E+07 0.160000E+05

2 3 4 0.400000E+07 0.160000E+05

3 5

4 0.400000E+07 0.160000E+05

CODE PX-PY-PM

7. -15.0000

ELEMENT IND A Q

1. 2. 2.0000 -18.0000

2. 1. 4.0000 -25.0000

NODE U V CETA

1 0.000000E+00 0.000000E+00 0.000000E+00

2 -0.221743E-02 -0.464619E-04 -0.139404E-02

3 -0.221743E-02 -0.464619E-0

4 0.357876E-02

4 -0.222472E-02 -0.535381E-04 -0.298554E-02

5 0.000000E+00 0.000000E+00 0.658499E-03 ELEMENT N Q M

1 N1= 46.4619 Q1= 10.7119 M1= -6.8477

N2= -46.4619 Q2= 7.2881 M2= 0.0000

2 N1= 7.2881 Q1= 46.4619 M1= 0.0000

N2= -7.2881 Q2= 53.5381 M2= 14.1523

3 N1= 53.5381 Q1= 7.2881 M1= 0.0000

N2= -53.5381 Q2= -7.2881 M2= -29.1523

算例二计算简图及结果输出

用平面刚架静力计算程序下图结构的内力。已知:桁架单元的抗拉刚度为6

EA=2.010KN

?,平面刚架单元的抗拉刚度为已知: 6

EA=4.010KN

?,抗弯刚度为42

EI=1.8410KN m

??。

计算简图如下:

(1输入原始数据

控制参数5,4,8,7,0

(NE,NJ,N,NW,NPJ,NPF

结点坐标集结点未知量编号0.0,0.0,0,0 4.0,0.0,2,3,4 4.0,-3.0,5,6,0 8.0,0.0,7,0,8

单元杆端结点编号及单元EA、EI 1,2,6.0E+06,1.84E+05 2,4,6.0E+06,1.84E+05 3,1,2.0E+06,0.0

3,2,2.0E+06,0.0

3,4,2.0E+06,0.0

非结点荷载 1.0,1.0,4.0,-

(2输出结果

NE= 5 NJ= 4 N= 8 NW= 7 NPJ= 0 NPF= 1 NODE X Y XX YY ZZ

1 0.0000 0.0000 0 0 1

2 4.0000 0.0000 2

3 4

3 4.0000 -3.0000 5 6 0

4 8.0000 0.0000 7 0 8

ELEMENT NODE-I NODE-J EA EI

1 1

2 0.600000E+07 0.184000E+06

2 2 4 0.600000E+07 0.184000E+06

3 3 1 0.200000E+07 0.000000E+00

4 3 2 0.200000E+07 0.000000E+00

5 3 4 0.200000E+07 0.000000E+00 ELEMENT IND A Q

1. 1. 4.0000 -20.0000

NODE U V CETA

1 0.000000E+00 0.000000E+00 0.312593E-03

2 -0.202759E-04 -0.253871E-0

3 -0.144928E-03

3 -0.202759E-0

4 -0.185440E-03 0.000000E+00

4 -0.405518E-04 0.000000E+00 -0.227378E-04

ELEMENT N Q M

1 N1= 30.4138 Q1= 37.1896 M1= 0.0000

N2= -30.4138 Q2= 42.8104 M2= 11.2415

2 N1= 30.4138 Q1= 2.8104 M1= -11.2415

N2= -30.4138 Q2= -2.8104 M2= 0.0000

3 N1= -38.0173 Q1= 0.0000 M1= 0.0000

N2= 38.0173 Q2= 0.0000 M2= 0.0000

4 N1= 45.6207 Q1= 0.0000 M1= 0.0000

N2= -45.6207 Q2= 0.0000 M2= 0.0000

5 N1= -38.0173 Q1= 0.0000 M1= 0.0000

N2= 38.0173 Q2= 0.0000 M2= 0.0000

C 主程序

C (一输入原始数据

DIMENSION JE(2,100,JN(3,100,JC(6,EA(100,EI(100,X(100, $Y(100,PJ(2,50,PF(4,100

REAL*8 KE(6,6,KD(6,6,T(6,6,P(300,KB(200,20,F(6,FO(6, $D(6,BL,SI,CO,S,C

OPEN (5,FILE='RPF1.TXT'

open (6,file='jieguo1.dat',status='new'

READ (5,* NE,NJ,N,NW,NPJ,NPF

READ (5,* (X(J,Y(J,(JN(I,J,I=1,3,J=1,NJ

READ (5,* ((JE(I,J,I=1,2,EA(J,EI(J,J=1,NE

IF (NPJ.NE.0 READ (5,* ((PJ(I,J,I=1,2,J=1,NPJ

IF (NPF.NE.0 READ (5,* ((PF(I,J,I=1,4,J=1,NPF

WRITE (6,10 NE,NJ,N,NW,NPJ,NPF

WRITE (6,20 (J,X(J,Y(J,(JN(I,J,I=1,3,J=1,NJ

WRITE (6,30 (J,(JE(I,J,I=1,2,EA(J,EI(J,J=1,NE

IF (NPJ.NE.0 WRITE (6,40 ((PJ(I,J,I=1,2,J=1,NPJ

IF (NPF.NE.0 WRITE (6,50 ((PF(I,J,I=1,4,J=1,NPF

10 FORMAT(/6X,'NE=',I5,2X,'NJ=',I5,2X,'N=',I5,2X,'NW=',I5,2X,

$'NPJ=',I5,2X,'NPF='I5

20 FORMAT(/7X,'NODE',7X,'X',11X,'Y',12X,'XX',8X,'YY',8X,'ZZ'/

$(1X,I10,2F12.4,3I10

30 FORMAT(/4X,'ELEMENT',4X,'NODE-I',4X,'NODE-J',11X,'EA',13X,'EI'/ $(1X,3I10,2E15.6

40 FORMAT(/7X,'CODE',7X,'PX-PY-PM'/(1X,F10.0,F15.4

50 FORMAT(/4X,'ELEMENT',7X,'IND',10X,'A',14X,'Q',/

$(1X,2F10.0,2F15.4

C (二形成总结点荷载向量

DO 55 I=1,N

55 P(I=0.00

IF(NPJ.EQ.0 GO TO 65

DO 60 I=1,NPJ

L=PJ(1,I

60 P(L=PJ(2,I

65 IF(NPF.EQ.0 GO TO 90

DO 70 I=1,NPF

M=PF(1,I

CALL SCL(M,NE,NJ,BL,SI,CO,JE,X,Y CALL EFX(I,NPF,BL,PF,FO

CALL CTM(SI,CO,T

CALL EJC(M,NE,NJ,JE,JN,JC

DO 75 L=1,6

S=0.00

DO 80 K=1,6

80 S=S-T(K,L*FO(K

F(L=S

75 CONTINUE

DO 85 J=1,6

L=JC(J

IF(L.EQ.0 GO TO 85

P(L=P(L+F(J

85 CONTINUE

70 CONTINUE

C (三形成整体刚度矩阵

90 DO 95 I=1,N

DO 100 J=1,NW

100 KB(I,J=0.00

95 CONTINUE

DO 105 M=1,NE

CALL SCL(M,NE,NJ,BL,SI,CO,JE,X,Y CALL CTM(SI,CO,T CALL ESM(M,NE,BL,EA,EI,KD

CALL EJC(M,NE,NJ,JE,JN,JC

DO 110 I=1,6

DO 115 J=1,6

S=0.00

DO 120 L=1,6

DO 125 K=1,6

125 S=S+T(L,I*KD(L,K*T(K,J 120 CONTINUE

KE(I,J=S

115 CONTINUE

110 CONTINUE

DO 130 L=1,6

I=JC(L

IF(I.EQ.0 GO TO 130

DO 135 K=1,6

J=JC(K

IF(J.EQ.0.OR.J.LT.IGO TO 135 JJ=J-I+1

KB(I,JJ=KB(I,JJ+KE(L,K

135 CONTINUE

130 CONTINUE

105 CONTINUE

C (四解线性方程组

N1=N-1

DO 140 K=1,N1

IM=K+NW-1

IF(N.LT.IM IM=N

I1=K+1

DO 145 I=I1,IM

L=I-K+1

C=KB(K,L/KB(K,1

JM=NW-L+1

DO 150 J=1,JM

JJ=J+I-K

150 KB(I,J=KB(I,J-C*KB(K,JJ 145 P(I=P(I-C*P(K

140 CONTINUE

P(N=P(N/KB(N,1

DO 155 K=1,N1

I=N-K

JM=K+1

IF(NW.LT.JM JM=NW

DO 160 J=2,JM

L=J+I-1

160 P(I=P(I-KB(I,J*P(L

155 P(I=P(I/KB(I,1

WRITE(6,165

165 FORMAT(/7X,'NODE',10X,'U',14X,'V',11X,'CETA' DO 170 I=1,NJ DO 175 J=1,3

D(J=0.00

L=JN(J,I

IF(L.EQ.0 GO TO 175

D(J=P(L

175 CONTINUE

WRITE(6,180 I,D(1,D(2,D(3

180 FORMAT(1X,I10,3E15.6

170 CONTINUE

C (五求单元杆端内力

WRITE(6,200

200 FORMAT(/4X,'ELEMENT',13X,'N',17X,'Q',17X,'M' DO 205 M=1,NE

CALL SCL(M,NE,NJ,BL,SI,CO,JE,X,Y CALL ESM(M,NE,BL,EA,EI,KD CALL CTM(SI,CO,T

CALL EJC(M,NE,NJ,JE,JN,JC

DO 210 I=1,6

L=JC(I

D(I=0.00

IF(L.EQ.0 GO TO 210

D(I=P(L

210 CONTINUE

DO 220 I=1,6

F(I=0.00

DO 230 J=1,6

DO 240 K=1,6

240 F(I=F(I+KD(I,J*T(J,K*D(K

230 CONTINUE

220 CONTINUE

IF(NPF.EQ.0 GO TO 270

DO 250 I=1,NPF

L=PF(1,I

IF(M.NE.L GO TO 250

CALL EFX(I,NPF,BL,PF,FO

DO 260 J=1,6

260 F(J=F(J+FO(J

250 CONTINUE

270 WRITE(6,280 M,(F(I,I=1,6

280 FORMAT(/1X,I10,3X,'N1=',F12.4,3X,'Q1=',F12.4,3X,'M1=',F12.4 $/14X,'N2=',F12.4,3X,'Q2=',F12.4,3X,'M2=',F12.4

205 CONTINUE

CLOSE(5

STOP

END

C 子程序

C (六形成单元定位向量

SUBROUTINE EJC(M,NE,NJ,JE,JN,JC

DIMENSION JE(2,NE,JN(3,NJ,JC(6

J1=JE(1,M

J2=JE(2,M

DO 10 I=1,3

JC(I=JN(I,J1

10 JC(I+3=JN(I,J2

RETURN

END

C (七求单元常数

SUBROUTINE SCL(M,NE,NJ,BL,SI,CO,JE,X,Y DIMENSION JE(2,NE,X(NJ,Y(NJ

REAL*8 BL,SI,CO,DX,DY

J1=JE(1,M

J2=JE(2,M

DX=X(J2-X(J1

DY=Y(J2-Y(J1

BL=DSQRT(DX*DX+DY*DY

SI=DY/BL

CO=DX/BL

RETURN

END

C (八形成单元刚度矩阵

SUBROUTINE ESM(M,NE,BL,EA,EI,KD DIMENSION EA(NE,EI(NE REAL*8 KD(6,6,BL,S,G,G1,G2,G3

G=EA(M/BL

G1=2.00*EI(M/BL

G2=3.00*G1/BL

G3=2.00*G2/BL

DO 10 I=1,6

DO 10 J=1,6

10 KD(I,J=0.00

KD(1,1=G

KD(1,4=-G

KD(4,4=G

KD(2,2=G3

KD(5,5=G3

KD(2,5=-G3

KD(2,3=-G2

KD(2,6=-G2

KD(3,5=G2

KD(5,6=G2

KD(3,3=2.00*G1

KD(6,6=2.00*G1

KD(3,6=G1

DO 20 I=1,5

I1=I+1

DO 30 J=I1,6

30 KD(J,I=KD(I,J

20 CONTINUE

RETURN

END

C (九形成单元坐标转换矩阵SUBROUTINE CTM(SI,CO,T REAL*8 T(6,6,SI,CO

DO 10 I=1,6

DO 10 J=1,6

10 T(I,J=0.00

T(1,1=CO

T(1,2=SI

T(2,1=-SI

T(2,2=CO

T(3,3=1.00

DO 20 I=1,3

DO 20 J=1,3

20 T(I+3,J+3=T(I,J

RETURN

END

C (十形成单元固端力

SUBROUTINE EFX(I,NPF,BL,PF,FO DIMENSION PF(4,NPF REAL*8 FO(6,A,B,C,G,Q,S,BL

IND=PF(2,I

A=PF(3,I

Q=PF(4,I

C=A/BL

G=C*C

B=BL-A

DO 5 J=1,6

5 FO(J=0.00

GO TO (10,20,30,40,50,60,70,IND

10 S=Q*A*0.50

FO(2=-S*(2.00-2.00*G+C*G FO(5=-S*G*(2.00-C

S=S*A/6.00

FO(3=S*(6.00-8.00*C+3.00*G FO(6=-S*C*(4.00-3.00*C

GO TO 100

20 S=B/BL

FO(2=-Q*S*S*(1.00+2.00*C FO(5=-Q*G*(1.00+2.00*S FO(3=Q*S*S*A

FO(6=-Q*B*G

GO TO 100

30 S=B/BL

FO(2=-6.00*Q*C*S/BL

FO(5=-FO(2

FO(3=Q*S*(2.00-3.00*S

FO(6=Q*C*(2.00-3.00*C

GO TO 100

FORTRAN 90 程序编程规范

FORTRAN 90 程序编程规范 Fortran 90 编程规范,使程序代码高度组织化,更加易读、易懂、易于维护,程序更加高效。使编出的程序更易懂、易于维护。 1 语言选择 数值预报创新系统软件开发应避免使用Fortran77 的某些过时特征以Fortran 90不一致的特征。选择Fortran 90 作为开发语言,并采用Fortran 90 的新功能,如动态内存的分配(dynamic memory allocation)、递归(recursion ), 模块(modules)、POINTER 、长变量名、自由格式等。 Fortran 77其中某些只是一些冗余的功能,这些功能已经过时,另外,还有一些在Fortran90 中被证明是不好的用法,建议不要使用。 2 Fortran 90 的新特性 2.1.1 建议使用的Fortran 90 新特性 建议使用Fortran 90 提供的模块(module ),并用Use ONLY 指定module 中哪些变量或派生类型定义可用于调用程序。 尽量使用数组下标三元组,这样可优化并减少所需的代码行数。为提高可读性,要在括号内表明数组的维数,例如: 1dArrayA(:) = 1dArrayB(:) + 1dArrayC(:) 2dArray(: , :) = scalar * Another2dArray(: , :) 当访问数组的子集时,例如在有限差分等式中,可以通过使用下标三元组实现。例如:2dArray(: , 2:len2) = scalar *( & Another2dArray(:, 1:len2 -1) & - Another2dArray(:, 2:len2) & ) 对程序单元(program units )命名,并使用End program ,End subroutine ,End interface ,End module 等结构再次指定“program unit ”的名称。 在逻辑表达式中使用>、 >=、 ==、 <、 <=、 /=,它们分别代 替.gt.、.ge.、.eq.、.lt.、.le.、.ne. 。新的表示方法更接近标准的数学符号 在变量定义中始终使用“::”;始终用“DIMENSION ”定义数组形状;始终用(len=)的语法格式声明字符变量的长度。

FORTRAN程序设计复习题及答案

FORTRAN程序设计复习题 一、选择题 B (1)下列各FORTRAN表达式中合法的是 A) S+T*2P >= B) .NOT. (A*B+C) C) A2+B2/(C+D) <= D) (A+B).NOT.A*B.GT.(.NOT.只跟一个表达式) C (2)数学式(3/5)ex+y的FORTRAN表达式是 A) 3*EXP(X+Y)/5 B) 3*E* *(X+Y)/ C) (3/5)*EXP(X+Y)D) EXP(X+Y) D (3)下列FORTRAN77表达式中不合法的是 A) A.GT.B.EQV.C.GT.D B) A.AND.B.AND.C.AND.D C) .NOT.(X.LE.D) A.LT.B.LT.C.LT.D D(4)下列叙述中不正确的是 A) FORTRAN子程序可以单独编译 B) 对一个FORTRAN源程序进行编译和连接无误后可生成可执行文件 C) 即使编译和连接都正确无误,FORTRAN程序运行时仍可能出错 D) FORTRAN连接的主要任务是把函数库中的函数翻译成机器指令(正确描述:主要任务为连接目标文件) B (5)在下列FORTRAN77运算符中,优先级最高的是 A) .AND. B) .NOT. C) .OR. D) .EQ. B (6)FORTRAN表达式"6/5+9/2**3/2"的值为 A) 33 B) 1 C) 5 D) 3 A (7)下列FORTRAN77表达式中,合法的是: A) .AND.. B) 10.0 C) D) 提示:A)相当于 .AND.(.NOT.()) D (8)关于编译一个FORTRAN源程序文件,下列说法中错误的是 A) 允许编译只有一个主程序而没有子程序的源文件 B) 允许编译有多个子程序的源文件 C) 允许编译只有一个子程序而没有主程序的源文件 D) 允许编译有多个主程序的源文件 C (9)在FORTRAN77源程序中,续行标志符必须放在 A) 第1列 B) 第1-6列C) 第6列D) 第5列 D (10)下列关于"SUBROUTIN E MAP(X,Y)"语句行的叙述中,不正确的是 A) 这是子程序的第一个语句 B) 字符串"MAP"是子程序名 C) 变量X是子程序的形参D) 子程序执行后,MAP将返回整型数据 提示:子程序无返回值,自定义函数才有) A (11)FORTRAN表达式"2/4+"的值是 A) B) 1 C) D) 0 提示:2/4默认等于整型,=》 D (12)FORTRAN表达式"MOD,"的值是 A) B)0.0 C) D) A (13下列FORTRAN运算符中,优先级最低的是 A)逻辑运算符.AND. B)算术运算符*

(完整)Fortran经典编程语言笔记(你值得拥有)

FORTRAN笔记 2014.10.07 目录 第七讲_FORTRAN的基本知识.ppt (2) FORTRAN语言程序设计初步 (2) FORTRAN源程序的书写格式(以77为例) (2) 变量 (2) 变量类型 (2) 算术运算符和运算优先级 (3) 赋值语句 (3) 参数语句(PARAMETER语句) (3) END语句 (3) PAUSE语句 (3) 逻辑运算和选择结构 (4) 关系表达式 (4) FORTRAN中数组的定义及使用 (4) 其他 (5) 1. fortran语言定义CHARACTER*6 TTL(14,3),CNAM(400)是什么意思? (5) 2. fortran里character*10 是什么意思 (5) 3. Fortran中kind是什么函数? (5)

第七讲_FORTRAN的基本知识.ppt FORTRAN语言程序设计初步 FORTRAN是Formula Translation的缩写,意为“公式翻译”,它是为科学、工程问题或企事业管理中的那些能够用 数学公式表达的问题而设计的,其数值计算的功能较强。 常用的是FORTRAN77和FORTRAN90两种标准。 1、一个程序由若干个程序单位组成。主程序和每一个子程序分别是一个独立的程序单位。 2、每一个程序单位都是以“END”结束的。 3、一个程序单位包括若干行。 1)语句行。由一个FORTRAN语句组成。 2)非语句行,即注释行。 4、FORTRAN程序中的语句可以没有标号,也可以有标号,根据需要而定。标号的作用是标志一个语句以便被其 他语句引用。 5、一个程序单位中各类语句的位置是有一定规定的。 6、FORTRAN源程序必须按一定的格式书写。 FORTRAN源程序的书写格式(以77为例) 每一行有80列,分别如下: 1、第1-5列为标号区。一行中第一列为“C”或“*”,该行即被认为是注释行。 2、第6列为“续行标志区”,如果在一行的第6列上写一个非空格和非零的字符,则该行作为其上一行的续行。 3、第7-72列为语句区。 4、第73-80列,注释区。 变量 变量名:一个变量需要用一个名字(变量名)来识别。在同一个程序单位中不能用同一个变量名代表两个不同的变 量。 FORTRAN的变量名按以下规则选定: 1)第一个字符必须是字母,即变量名必须以字母开头; 2)在一个字母后面可以跟1-5为数字或字母。 如果选定的变量名超过6个字符,则只有前面6个字符有效。 注:在变量名中大写与小写字母是等价的。 变量类型 整型变量Integer、实型变量Real、双精度变量Double Precision、复型变量Complex、逻辑型变量Logical和字符型变量Character。 1、隐含约定(I-N规则) FORTRAN规定:在程序中的变量名,凡以字母I,J,K,L,M,N六个字母开头的,即认为该变量为整型变量。 在程序中,凡是变量名以字母I,J,K,L,M,N,i,j,k,l,m,n开头的变量被默认为整型变量,以其他字母开头的变量被 默认为实型变量。 2、用类型说明语句确定变量类型 1)INTEGER语句(整型说明语句) 2)REAL语句(实型说明语句) 3)DOUBLE PRECISION语句(双精度说明语句) 4)COMPLEX语句(复型说明语句) 5)LOGICAL语句(逻辑型说明语句)

fortran程序案例题汇编(14道)

1.Fibonacci数列定义如下: F1=1 F2=1 F n=F n-1+F n-2 (n>2) 求Fibonacci数列的前30项。 integer f(30),i f(1)=1 f(2)=2 do i=3,30 f(i)=f(i-1)+f(i-2) enddo print*,f end 2.输入10个学生的总分,求每个学生的名次integer s(10),a(10),i,j do i=1,10 read*,s(i) enddo do i=1,10 a(i)=1 do j=1,10 if(s(i)

3.给定一组数,按照从小到大的顺序输出。integer a(10) integer p do i=1,10 read *,a(i) enddo do j=1,9 p=j do i=j+1,10 if (a(i)

4.输入若干名学生的学号和三门课程(语数英)的成绩,要求从键盘输入一个学生的学号,能打印出该学生的三门功课成绩和总分。 character*6,dimension(:),allocatable::xue integer,dimension(:,:),allocatable::g integer,dimension(:),allocatable::zong integer i,j,n character*6,xh print *,"请输入学生的个数" read *,n allocate(xue(n)) allocate(g(n,3)) allocate(zong(n)) do i=1,n read *,xue(i),(g(i,j),j=1,3) enddo do i=1,n zong(i)=0 do j=1,3 zong(i)=zong(i)+g(i,j) enddo enddo print *,"请输入你要打印的学生的学号" read *,xh do i=1,n if(xue(i)==xh)then print *,(g(i,j),j=1,3),zong(i) exit endif enddo end

Fortran95程序设计课后习题答案(word版方便)

第四章 1.program main implicit none write(*,*) "Have a good time." write(*,*) "That's not bad." write(*,*) '"Mary" isn''t my name.' end program 2.program main real, parameter :: PI=3 implicit none.14159 real radius write(*,*) "请输入半径长" read(*,*) radius write(*,"(' 面积='f8. 3)") radius*radius*PI end program 3.program main implicit none real grades write(*,*) "请输入成绩" read(*,*) grades write(*,"(' 调整后成绩为'f8.3)") SQRT(grades)*10.0 end program 4.integer a,b real ra,rb a=2 b=3 ra=2.0 rb=3.0 write(*,*) b/a ! 输出1, 因为使用整数计算, 小数部分会无条件舍去write(*,*) rb/ra ! 输出1.5 5.p rogram main implicit none type distance real meter, inch, cm end type type(distance) :: d write(*,*) "请输入长度:" read(*,*) d%meter d%cm = d%meter*100 d%inch = d%cm/2.54 write(*,"(f8.3'米='f8.3'厘米='f8.3'英寸')") d%meter, d%cm, d%inch end program 第五章 1.program main implicit none integer money real tax write(*,*) "请输入月收入" read(*,*) money if ( money<1000 ) then tax = 0.03 else if ( money<5000) then tax = 0.1 else tax = 0.15 end if write(*,"(' 税金为'I8)") nint(money*tax) end program 2.program main implicit none integer day character(len=20) :: tv write(*,*) "请输入星期几" read(*,*) day select case(day) case(1,4) tv = "新闻" case(2,5) tv = "电视剧" case(3,6) tv = "卡通" case(7) tv = "电影" case default write(*,*) "错误的输入" stop end select write(*,*) tv end program 3.program main implicit none integer age, money real tax write(*,*) "请输入年龄" read(*,*) age write(*,*) "请输入月收入" read(*,*) money if ( age<50 ) then if ( money<1000 ) then tax = 0.03 else if ( money<5000 )then tax = 0.10 else tax = 0.15 end if else if ( money<1000 ) then tax = 0.5 else if ( money<5000 )then tax = 0.7 else tax = 0.10 end if end if write(*,"(' 税金为'I8)") nint(money*tax) end program 4.program main implicit none integer year, days logical mod_4, mod_100, mod_400 write(*,*) "请输入年份" read(*,*) year mod_4 = ( MOD(year,4) == 0 ) mod_100 = ( MOD(year,100) == 0 ) mod_400 = ( MOD(year,400) == 0 ) if ( (mod_4 .NEQV. mod_100) .or. mod_400 ) then days = 366 else days = 365 end if write(*,"('这一年有'I3'天')") days stop end program 第六章 1.program main implicit none integer i do i=1,5 write(*,*) "Fortran" end do stop end program 2.program main implicit none integer i,sum sum = 0 do i=1,99,2 sum = sum+i end do write(*,*) sum stop end program 3.program main implicit none integer, parameter :: answer = 45 integer, parameter :: max = 5 integer weight, i do i=1,max write(*,*) "请输入体重" read(*,*) weight if ( weight==answer ) exit end do if ( i<=max ) then write(*,*) "猜对了" else write(*,*) "猜错了" end if stop end program 4.program main implicit none integer, parameter :: max=10 integer i real item real ans ans = 1.0 item = 1.0 do i=2,max item = item/real(i) ans = ans+item

fortran程序实例

1)实例3—求多个半径下的圆周长 ! z3.f90 --Fortran95 ! FUNCTIONS: ! z3 - Entry point of console application. !************************************************************************* ! PROGRAM: z3 ! PURPOSE: Entry point for the console application. !************************************************************************ program z3 ! 求多个半径下的圆周长 ! 主程序 ! PROGRAM Z3 PRINT *, 'R=',1.2,'C=',C(1.2) PRINT *, 'R=',3.4,'C=',C(3.4) PRINT *, 'R=',15.6,'C=',C(15.6) PRINT *, 'R=',567.3,'C=',C(567.3) END program z3 !子程序 FUNCTION C(R) PI=3.1415926 C=2*PI*R RETURN ! Body of z3 end

2)实例4—键盘与显示器输入/输出 a)Fortran 基本操作 b)程序指令 ! ZXZ_I_O.f90 ! FUNCTIONS: ! ZXZ_I_O - Entry point of console application. ! PROGRAM: ZXZ_I_O ! PURPOSE: Entry point for the console application. !***************输入、输出样式种种************************** program ZXZ_I_O implicit none !变量声明的位置 INTEGER(2) i; INTEGER(4) j; INTEGER(4) m; REAL n INTEGER A,B ! Variables PRINT*,'输入整数A'; READ*, A PRINT*,'输入整数B'; READ*, B B=A+B PRINT*,'B=A+B=',B WRITE(*,*) 'A*B=',A*B PRINT* ,'以上为计算机的计算结果,注意B的值'

FORTRAN 95 语法速查

FORTRAN 95 语法速查 ----------白云、李学哲、陈国新、贾波编著《FORTRAN95程序设计》读书笔记 目录:一、应用程序的创建与运行/FORTRAN 95所用的字符/ 变量类型及其声明,常量声明/表达式与运算符 二、输入与输出:表控、有格式 三、选择语句与结构:IF语句、CASE结构 四、DO循环结构 五、数组:数组的声明,数组的引用,数组的算术运算,数组的输入、输出,给数组赋初值, 动态数组,WHERE、FORALL语句 六、子程序:语句函数,内部子程序,调用子程序时的虚实结合:形参为数组、非定界数组、子 程序名、星号,递归子程序,外部子程序,纯子程序,逐元子程序 七、派生数据类型与结构体 八、指针与动态链表 九、文件:存取方式,基本操作语句,各类文件的读写操作 十、接口、模块 十一、公用区、存储关联、数据块子程序 十二、绘图:坐标系、设置图形颜色、创建图形程序/ 常用过程:设置线型、绘一像素点、设置当前位置、绘直线、绘弧线、绘矩形、绘多边形、绘制扇形(圆、椭圆)/ 文字信息的显示 附/录:标准函数与标准子例行程序 一、基础部份 1-1 FORTRAN 95 应用程序的创建与运行 创建或运行FORTRAN 95程序必须在Microsoft Developer Studio平台上进行。尽管程序文本及相关文件的编辑可以在任一文本编辑器上进行,然后再拷到Studio的文档窗口中。但最好还是一开始就进入Studio环境。创建FORTRAN 95 程序的步骤大致如下: 1)启动Microsoft Developer Studio 可以通过不同方式运行dfdev.exe程序以启动Microsoft Developer Studio [开始] \ Compaq Visual Fortran 6 \ Developer Studio \ dfdev.exe:或 ……\CVF66 \https://www.360docs.net/doc/7415355852.html,\MSDEV98\dfdev.exe Microsoft Developer Studio的界面如下图所示: 文档窗口 工作空间窗口 输出窗口

计算机程序设计语言(FORTRAN语言)

计算机程序设计语言(FORTRAN语言) (总分:36.00,做题时间:90分钟) 一、 (总题数:36,分数:36.00) 1.编译程序能将高级语言编写的源程序转换成( )。 A.解释程序 B.汇编程序 C.映象程序 D.目标程序 (分数:1.00) A. B. C. D. √ 解析: 2.一个完整的FORTRAN源程序( )。 A.至少包括一个主程序 B.至少包括一个主程序和一个子程序 C.由一个主程序与一个以上的子程序组成 D.由一个主程序与一个子程序组成 (分数:1.00) A. √ B. C. D. 解析: 3.语句函数定义语句在程序内合法的位置是( )。 A.在程序块开头语句之后,END语句之前 B.在程序块开头语句之后,可执行语句之前 C.在说明语句之后,END语句之前 D.在说明语句之后,可执行语句之前 (分数:1.00) A. B. C. D. √ 解析: 4.下列关于函数子程序虚实参数的错误说法是( )。 A.可以没有形参数 B.虚实结合的数组长度可以不同 C.实参表与虚参表类型可以不同 D.函数名可以作为虚参

(分数:1.00) A. B. C. √ D. 解析: 5.下列叙述中正确的是( )。 A.FORTRAN程序块中,无名公用语句只能有一个B.FORTRAN子程序中,至少应有一个RETURN语句C.FORTRAN程序块中,最后一行必须是END语句D.FORTRAN程序块中,必须有变量说明语句 (分数:1.00) A. B. C. √ D. 解析: 6.运行下面的程序时得不到所需的结果,其主要原因是( )。INTEGER X(11) DATA X/9,8,7,6,5,4,3,2,1,0,-1/ DO 10 1=1,X(1) ,-1 WRITE(*,*)1.0/SQRT(25.0-REAL(X(1) )* * 2) 10 CONTINUE END A.没有给X(11) 赋初值 B.发生除以零的情况 C.发生负数开平方的情况 D.循环参数设置错误 (分数:1.00) A. B. C. D. √ 解析: 7.下列数据中,不符合FORTRAN常量表示法的是( )。 A.-25.6 B.2.758D3 C.'FOOT"=' D.TRUE (分数:1.00) A. B. C. D. √ 解析:

fortran语言语法

FORTRAN是世界上最早出现的高级编程语言,是工程界最常用的编程语言,它在科学计算中(如航空航天、地质勘探、天气预报和建筑工程等领域)发挥着极其重要的作用。经过40多年的发展,伴随着FORTRAN语言多次版本的更新及相应开发系统的出现,其功能不断完善,最新版本的开发系统几乎具备了VC、VB的所有特点,如图形界面编程、数据库等。目前,工科院校开设的计算机编程语言课首选仍然是FORTRAN :< 说实话,从科技发展的趋势来说这不是好事。您可以设想一下,如果需要用鹅毛笔抄写大量的古籍是什么感受! 强烈建议阅读《发掘C#特性赋予科学计算项目以威力》 1 FORTRAN77四则运算符 + - * / ** (其中**表示乘方) 在表达式中按优先级次序由低到高为: +或-→*或/→**→函数→() 2 FORTRAN77变量类型 隐含约定:I-N规则 凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。 用类型说明语句确定变量类型:可以改变I-N规则

用IMPLICIT语句将某一字母开头的全部变量指定为所需类型 如IMPLICIT REAL (I,J) 三种定义的优先级别由低到高顺序为:I-N规则→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。 数组的说明与使用 使用I-N规则时用DIMENSION说明数组,也可在定义变量类型同时说明数组,说明格式为:数组名(下标下界,下标上界),也可省略下标下界,此时默认为1,例:DIMENSION IA(0:9),ND(80:99),W(3,2),NUM(-1:0),A(0:2,0:1,0:3)

几个fortran程序

计算圆周率 REAL R,R1,R2,PI ISEED=RTC() N0=0 N=300000 DO I=1,N R1=RAN(ISEED) R2=RAN(ISEED) R=SQRT(R1*R1+R2*R2) IF(R<1.0)N0=N0+1 END DO PI=4.0*N0/N WRITE(*,*)PI END 一)蒙特卡洛计算生日问题 假设有N个人在一起,各自的生日为365天之一,根据概率理论,与很多人的直觉相反,只需23个人便有大于50%的几率人群中至少有2个人生日相同。 INTEGER M(1:10000), NUMBER1(0:364), NUMBER2 REAL X,Y ISEED=RTC() DO J=1, 10000 NUMBER1=0 X=RAN(ISEED) NUMBER1(0)=INT(365*X+1) JJJ=1 DO I=1,364 Y=RAN(ISEED) NUMBER2=INT(365*Y+1) ETR=COUNT(NUMBER1.EQ.NUMBER2) IF (ETR= =1) THEN EXIT ELSE JJJ=JJJ+1 M(J)=JJJ NUMBER1(I)=NUMBER2 END IF END DO END DO DO I=1,10000 IF(M(I).LE.23) SUM=SUM+1 END DO PRINT *,SUM/10000 END 二)MONTE CARLO SIMULATION OF ONE DIMENSIONAL DIFFUSION 蒙特卡罗计算一维扩散问题

INTEGER X,XX(1:1000,1:1000) REAL XXM(1:1000) ! X:INSTANTANEOUS POSITION OF ATOM ! XX(J,I):X*X ,J:第几天实验,I:第几步跳跃 ! XXM(I): THE MEAN OF XX WRITE(*,*) "实验天数JMAX,实验次数IMAX" READ(*,*) JMAX,IMAX ISEED=RTC() DO J=1,JMAX !第几天实验 X=0 !!! DO I=1,IMAX !第几步跳跃 RN=RAN(ISEED) IF(RN<0.5)THEN X=X+1 ELSE X=X-1 END IF XX(J,I)=X*X END DO END DO OPEN(1,FILE="C:\DIF1.DAT") DO I=1,IMAX XXM=0.0 XXM(I)=1.0*SUM(XX(1:JMAX,I))/JMAX !! WRITE(1,*) I, XXM(I) END DO CLOSE(1) END 三维的! 三)通过该程序了解FORTRAN语言如何画图(通过像素画图)USE MSFLIB INTEGER XR,YR !在的区域中画一个圆 PARAMETER XR=400,YR=400 INTEGER R, S(1:XR,1:YR) X0=XR/2 ! 圆心位置X0,YO Y0=YR/2 R=MIN(X0-10,Y0-10) !圆半径 S=0 !像素的初始状态(颜色) DO I=1,XR DO J=1,YR IF((I-X0)**2+(J-Y0)**2<=R**2)S(I,J)=10 IER=SETCOLOR(S(I,J)) IER=SETPIXEL(I,J) END DO END DO END

fortran语法手册

1F O R T R A N77四则运算符+ - */ ** (其中**表示乘方) 在表达式中按优先级次序由低到高为:+或-→*或/→**→函数→() 2 FORTRAN77变量类型 隐含约定:I-N规则 凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。 如IMPLICIT REAL (I,J) 三种定义的优先级别由低到高顺序为:I-N规则→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。 数组的说明与使用 使用I-N规则时用DIMENSION说明数组,也可在定义变量类型同时说明数组,说明格式为:数组名(下标下界,下标上界),也可省略下标下界,此时默认为1,例:DIMENSION IA(0:9),ND(80:99),W(3,2),NUM(-1:0),A(0:2,0:1,0:3) REAL IA(10),ND(80:99)使用隐含DO循环进行数组输入输出操作:例如 WRITE(*,10) ('I=',I,'A=',A(I),I=1,10,2) 10FORMAT(1X,5(A2,I2,1X,A2,I4)) 使用DATA语句给数组赋初值 变量表中可出现变量名,数组名,数组元素名,隐含DO循环,但不许出现任何形式的表达式:例如 DATA A,B,C/,, DATA A/,B/,C/ DATA A,B,C/3*CHARACTER*6 CHN(10) DATA CHN/10*''/INTEGER NUM(1000) DATA (NUM(I),I=1,500)/500*0/,(NUM(I),I=501,1000)/500*1/ 3 FORTRAN77程序书写规则

fortran程序30个

程序1 PROGRAM chaper1272 INTEGER :: A(10)=(/5,7,4,8,12,2,10,3,9,11/) INTEGER :: sum=0,ave !打开一数据文件,设置一个有格式直接存取文件,将10个数分2个记录写入文件。 !数据文件生成2个记录,每个记录行长度相同,记录长度为25 OPEN(1,FILE='input21.dat',FORM='FORMATTED',ACCESS='D IRECT',RECL=25) WRITE(1,"(5I5)",REC=1)(A(I)+10,I=1,5) !按格式说明将头5个数写入第1个记录 WRITE(1,"(5I5)",REC=2)(A(I)+10,I=6,10)!按格式说明将后5个数写入第2个记录 READ(1,"(5I5)",REC=2)(A(I),I=6,10) !按格式说明从第2个记录中读取后5个数 READ(1,"(5I5)",REC=1)(A(I),I=1,5) !按格式说明从第1个记录中读取头5个数 DO I=1,10 sum=sum+A(I) ENDDO ave=sum/10 !打开一个最大记录长度为22的有格式顺序存取文件

OPEN(2,FILE='input22.dat',FORM='FORMATTED',ACCESS='D IRECT',RECL=22) WRITE(2,"('10个数之和为:',I5)",REC=1) sum !输出1记录行,记录长度为22 WRITE(2,"('10个数平均值为:',I5)",REC=2)ave !输出1记录行,记录长度为22 WRITE(2,"(A)",REC=3) '程序运行正常结束。' !输出一个记录行,记录长度为22 END 程序2 PROGRAM average REAL sum,ave INTEGER n OPEN(1,file='score.dat') PRINT*,'正在统计平均成绩,请等待。' sum=0.0;n=0 DO READ(1,*,END=100) S sum=sum+s n=n+1 ENDDO 100 ave=sum/n

fortran语法手册

1 FORTRAN77四则运算符 + - * / ** (其中**表示乘方) 在表达式中按优先级次序由低到高为: +或-→*或/→**→函数→() 2 FORTRAN77变量类型 2.1 隐含约定:I-N规则 凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。 如 IMPLICIT REAL (I,J) 三种定义的优先级别由低到高顺序为:I-N规则→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。 2.4 数组的说明与使用 使用I-N规则时用DIMENSION说明数组,也可在定义变量类型同时说明数组,说明格式为:数组名(下标下界,下标上界),也可省略下标下界,此时默认为1,例: DIMENSION IA(0:9),ND(80:99),W(3,2),NUM(-1:0),A(0:2,0:1,0:3) REAL IA(10),ND(80:99)使用隐含DO循环进行数组输入输出操作:例如 WRITE(*,10) ('I=',I,'A=',A(I),I=1,10,2) 10FORMAT(1X,5(A2,I2,1X,A2,I4)) 2.5 使用DATA语句给数组赋初值 变量表中可出现变量名,数组名,数组元素名,隐含DO循环,但不许出现任何形式的表达式:例如 DATA A,B,C/-1.0,-1.0,-1.0/ DATA A/-1.0/,B/-1.0/,C/-1.0/ DATA A,B,C/3*-1.0/CHARACTER*6 CHN(10)

DATA CHN/10*' '/INTEGER NUM(1000) DATA (NUM(I),I=1,500)/500*0/,(NUM(I),I=501,1000)/500*1/ 3 FORTRAN77程序书写规则 程序中的变量名,不分大小写; 变量名称是以字母开头再加上1到5位字母或数字构成,即变更名字串中只有前6位有效; 一行只能写一个语句; 程序的第一个语句固定为PROGRAM 程序名称字符串 某行的第1个字符至第5个字符位为标号区,只能书写语句标号或空着或注释内容; 某行的第1个字符为C或*号时,则表示该行为注释行,其后面的内容为注释内容; 某行的第6个字符位为非空格和非0字符时,则该行为上一行的续行,一个语句最多可有19个续行; 某行的第7至72字符位为语句区,语句区内可以任加空格以求美观; 某行的第73至80字符位为注释区,80字符位以后不能有内容。 4 FORTRAN77关系运算符 .GT. 大于 .GE. 天于或等于 .LT. 小于 .LE. 小于或等于 .EQ. 等于 .NE. 不等于 .AND. 逻辑与 .OR. 逻辑或 .NOT. 逻辑非 .EQV. 逻辑等 .NEQV. 逻辑不等 运算符优先级由高到低顺序为:()→**→*或/→+或-→.GT.或.GE.或.LT.或.LE.或.EQ.或.NE.→.NOT.→.AND.→.OR.→.EQV.或.NEQV 5 FORTRAN77语句

FORTRAN经典入门程序20例

对于FORTRAN的初学者。这些例子可作为小练习。 1.例题:计算工资问题。每小时工资为RATE,如果工作超过40小时,加班呢部分工资是正常时间工资的1.5倍。 C Payroll with overtime program payroll real rate, hours, pay read (*,*) rate, hours if (hours>40) then pay=40*rate+(hours-40)*1.5*rate else pay=hours*rate END IF print *,"rate=", rate print *, "hours=", hours print *,"pay=",pay end 2.学生成绩问题。大于80为A级。大于60小于80为B级。小于60为C级。IF的嵌套。注意空格可以看清楚else if ,end if,print的内容. PROGRAM GRADESTUDENT READ *,GRADE IF (GRADE .GE. 80) THEN PRINT *,GRADE,"GRADE=>A" ELSE IF (GRADE.LT.60) THEN PRINT*,GRADE,"GRADE=>C" ELSE PRINT*,GRADE,"GRADE=>B" END IF END IF END 3.三个数按从小到大排序。 PROGRAM MAXMIN REAL A,B,C,T READ *,A,B,C IF (A.GT.B) THEN T=A A=B B=T ELSE END IF IF (B.GT.C) THEN T=B B=C

PROGRAM EQUATION READ (*,*) X IF (X .GE. 0.0) Y=3*X+6 IF (X .LT. 0.0) Y=-X**2+2*X-8 PRINT *,"X=",X, "Y=",Y END 6.CONTINUE语句。为了使循环的起止范围清晰,使用终端语句 例:求5! program ex1 FACT=1 do 10, N=1,5,1 ##DO 语句标号,循环不变量=初值,终值,步长FACT=FACT*N 10continue print*,FACT end 求1!+2!+3!+···+N! READ *,N FACT=1

优秀的fortran程序编程规范

Programming Guidelines for PARAMESH Software Development(NOTE: This document is heavily based upon the Introduction This document describes the programming guidelines to be used by software developers wishing to contribute software to the PARAMESH, parallel, adaptive mesh refinement software. We welcome people to contribute software and/or bug fixes to the PARAMESH AMR software. Software to be added to PARAMESH can come in 2 forms: ?Improvements to the basic PARAMESH kernal software found in the mpi_source, source and hearders directories. ?Software the addes additional functionality to PARAMESH. This type of software should be added as separate entities within the utilities directory. Complete applications should not be added as part of PARAMESH. PARAMESH is only meant to be a tool which supports parallel adaptive mesh applications and any software which supports this goal will be considered for acceptance into PARAMESH. For instance, a solver for the poisson equation that works with PARAMESH would be acceptable, but an application that solves the equation of gas dynamics would not. The PARAMESH software is slowly being evolved to be consistent with this document. Any new software which is contributed should follow these guidlines. If not, it will be rejected. This document deals mainly with Fortran 90, since most new PARAMESH software will probably be written in that language. [Throughout this document, the term "Fortran" should be understood to mean Fortran 90.] Since we expect C and C++ also to be used, a separate document dealing with them will be developed in the future. In the meantime, this document can serve as a general guideline for developing code to be used with PARAMESH in those programming languages. The guidlines in this document should be adhered to by ANY software which will be released as part of the PARAMESH package of source code. This includes software 'utilities' (stored in the paramesh/utilities directory) which add functionality to PARAMESH for different algorithms. It also should be applied to any new code developed and added to the main source code for PARAMESH in the paramesh/source, paramesh/mpi_source, or paramesh/headers directories.

相关文档
最新文档