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)