4.txt
来自「文件1.txt,2.txt,3.txt和5.txt为用Fortran编写的有限元」· 文本 代码 · 共 569 行 · 第 1/2 页
TXT
569 行
PZ(1)=P(I0+1)
PZ(2)=P(I0+2)
PZ(3)=P(I0+3)
PZ(4)=P(J0+1)
PZ(5)=P(J0+2)
PZ(6)=P(J0+3)
CALL MATMU(AL,PZ,PB,6,6,1)
CALL FDK1(DK1,PB(2),PB(5),PB(3),PB(6),EL,EF(K))
CALL FDK2(DK2,EL,TN)
DO 210 I=1,6
DO 210 J=1,6
DK(I,J)=DK0(I,J)+DK1(I,J)+DK2(I,J)
210 CONTINUE
WRITE(10,102)K
102 FORMAT(1X,'Element ',I2,' Stiff Matrix(大位移)')
DO 101 I=1,6
WRITE(10,103)(DK1(I,J),J=1,6)
103 FORMAT(1X,6e12.3,';')
write(10,*)
101 CONTINUE
WRITE(10,402)K
402 FORMAT(1X,'Element ',I2,' Stiff Matrix(弹性+大位移)')
DO 401 I=1,6
WRITE(10,403)(DK0(I,J)+DK1(I,J),J=1,6)
403 FORMAT(1X,6e12.3,';')
write(10,*)
401 CONTINUE
WRITE(10,201)K
201 FORMAT(1X,'Element ',I2,' Stiff Matrix(几何)')
WRITE(10,204)TN
204 FORMAT(1X,'轴力=',e12.3)
DO 202 I=1,6
WRITE(10,203)(DK2(I,J),J=1,6)
203 FORMAT(1X,6e12.3,';')
write(10,*)
202 CONTINUE
WRITE(10,301)K
301 FORMAT(1X,'Element ',I2,' Stiff Matrix(切线刚阵)')
DO 302 I=1,6
WRITE(10,303)(DK(I,J),J=1,6)
303 FORMAT(1X,6e12.3,';')
write(10,*)
302 CONTINUE
RETURN
END
!-------------------------子程序FDK0-------------------------
!计算弹性刚度矩阵Ke
!
!
!
SUBROUTINE FDK0(DK0,A,TL,TI)
IMPLICIT INTEGER*2(I-N)
REAL DK0(6,6),A,TL,TI
COMMON/C1/E
CALL CLEAR(DK0,6,6)
DK0(1,1)=E*A/TL
DK0(1,4)=-DK0(1,1)
DK0(2,2)=12*E*TI/TL/TL/TL
DK0(2,3)=6*E*TI/TL/TL
DK0(2,5)=-DK0(2,2)
DK0(2,6)=DK0(2,3)
DK0(3,3)=4*E*TI/TL
DK0(3,5)=-DK0(2,3)
DK0(3,6)=2*E*TI/TL
DK0(4,4)=E*A/TL
DK0(5,5)=DK0(2,2)
DK0(5,6)=-DK0(2,3)
DK0(6,6)=DK0(3,3)
DO 100 I=1,5
DO 100 J=I+1,6
DK0(J,I)=DK0(I,J)
100 CONTINUE
! DO 101 I=1,6
! DO 101 J=1,6
! WRITE(10,103)I,J,DK0(I,J)
!103 FORMAT(1X,'DK0(',I3,',',I3,')=',E12.3)
!101 CONTINUE
RETURN
END
!-------------------------子程序FDK1-------------------------
!计算大位移刚度矩阵
!
!
SUBROUTINE FDK1(DK1,VI,VJ,THI,THJ,TL,TA)
IMPLICIT INTEGER*2(I-N)
REAL DK1(6,6),DK11(6,6),DK12(6,6),A,B,C,D, &
& AA,BB,CC,AB,AC,BC,TL,TA,VI,VJ,THI,THJ
COMMON/C1/E
D=VJ-VI
A=6*D/5/TL-(THI+THJ)/10
B=-D/10-2*TL*THI/15-TL*THJ/30
C=D/10+TL*THI/30-2*TL*THJ/15
AA=72.0*D*D/35/TL/TL/TL+ &
& 3*(THI*THI+THJ*THJ)/35/TL-18*D*(THI+THJ)/35/TL/TL
BB=3*D*D/35/TL+2*TL*THI*THI/35+ &
& TL*THJ*THJ/210+D*(THI-THJ)/70-THI*THJ/70
CC=3*D*D/35/TL+TL*THI*THI/210- &
& 2*TL*THJ*THJ/35-D*(THI-THJ)/70-TL*THI*THJ/70
AB=-9*D*D/35/TL/TL+6*THI*D/35/TL+(THI*THI-THJ*THJ)/140
AC=9*D*D/35/TL/TL-4*THJ*D/35/TL+ &
& (THI*THI+2*THI*THJ-THJ*THJ)/140
BC=D*(THI+THJ)/70+(THI*THI+THJ*THJ)/140-TL*THI*THJ/105
CALL CLEAR(DK1,6,6)
CALL CLEAR(DK11,6,6)
CALL CLEAR(DK12,6,6)
DK11(1,2)=A
DK11(1,3)=-B
DK11(1,5)=-A
DK11(1,6)=C
DK11(2,4)=-A
DK11(3,4)=B
DK11(4,5)=A
DK11(4,6)=-C
DO 110 I=1,5
DO 110 J=I+1,6
DK11(J,I)=DK11(I,J)
110 CONTINUE
DO 120 I=1,6
DO 120 J=1,6
DK11(I,J)=DK11(I,J)*E*TA/TL
120 CONTINUE
DK12(2,2)=AA
DK12(2,3)=-AB
DK12(2,5)=-AA
DK12(2,6)=AC
DK12(3,3)=BB
DK12(3,5)=AB
DK12(3,6)=-BC
DK12(5,5)=AA
DK12(5,6)=-AC
DK12(6,6)=CC
DO 130 I=1,5
DO 130 J=I+1,6
DK12(J,I)=DK12(I,J)
130 CONTINUE
DO 140 I=1,6
DO 140 J=1,6
DK12(I,J)=E*TA*DK12(I,J)
140 CONTINUE
DO 150 I=1,6
DO 150 J=1,6
DK1(I,J)=DK11(I,J)+DK12(I,J)
150 CONTINUE
RETURN
END
!-------------------------子程序FDK2-------------------------
!计算几何刚度矩阵
!
!
SUBROUTINE FDK2(DK2,TL,TN)
IMPLICIT INTEGER*2(I-N)
REAL DK2(6,6),TL,TN
CALL CLEAR(DK2,6,6)
DK2(2,2)=6*TN/5/TL
DK2(2,3)=TN/10
DK2(2,5)=-DK2(2,2)
DK2(2,6)=DK2(2,3)
DK2(3,3)=2*TN*TL/15
DK2(3,5)=-DK2(2,3)
DK2(3,6)=-TN*TL/30
DK2(5,5)=DK2(2,2)
DK2(5,6)=-DK2(2,3)
DK2(6,6)=DK2(3,3)
DO 160 I=1,5
DO 160 J=I+1,6
DK2(J,I)=DK2(I,J)
160 CONTINUE
RETURN
END
!-------------------------子程序GAS--------------------------
! 高斯法求解方程组
! N 方程组规模;A 方程组;B 输入为荷载,输出为位移
!
SUBROUTINE GAS(N,A,B)
IMPLICIT INTEGER*2(I-N)
DIMENSION A(150,150),B(150)
DO 310 K=1,N
T=A(K,K)
DO 320 J=K,N
WRITE(*,*)A(K,J),T
320 A(K,J)=A(K,J)/T
B(K)=B(K)/T
DO 330 I=K+1,N
T=A(I,K)
DO 340 J=K+1,N
340 A(I,J)=A(I,J)-A(K,J)*T
330 B(I)=B(I)-B(K)*T
310 CONTINUE
DO 350 I=N-1,1,-1
T=0.0
DO 360 J=I+1,N
360 T=T+A(I,J)*B(J)
B(I)=B(I)-T
350 CONTINUE
!RETURN
END
!-------------------------子程序CHL--------------------------
!单元角度正余弦
!
SUBROUTINE CHL(K,NJ,NE,NL,NR,X,Y)
IMPLICIT INTEGER*2(I-N)
DIMENSION NL(NE),NR(NE),X(NJ),Y(NJ)
COMMON/C2/I0,J0,SI,CO,EL
I=NL(K)
J=NR(K)
I0=3*(I-1)
J0=3*(J-1)
CO=X(J)-X(I)
SI=Y(J)-Y(I)
EL=SQRT(CO*CO+SI*SI)
CO=CO/EL
SI=SI/EL
RETURN
END
!-------------------------子程序MLA--------------------------
!计算方向矩阵 AL
!转置矩阵 AT
!
!
SUBROUTINE MLA
IMPLICIT INTEGER*2(I-N)
DIMENSION AL(6,6),AT(6,6)
COMMON/C2/I0,J0,SI,CO,EL
COMMON/C3/AL,AT
CALL CLEAR(AL,6,6)
AL(1,1)=CO
AL(1,2)=SI
AL(2,1)=-SI
AL(2,2)=CO
AL(3,3)=1.0
DO 400 I=1,3
DO 400 J=1,3
AL(I+3,J+3)=AL(I,J)
400 CONTINUE
DO 410 I=1,6
DO 410 J=1,6
AT(I,J)=AL(J,I)
410 CONTINUE
RETURN
END
!-------------------------子程序MATMU------------------------
SUBROUTINE MATMU(A,B,C,M,N,L)
!Multi Array
!A(M,N)*B(N,L) = C(M,L)!
DIMENSION A(M,N),B(N,L),C(M,L)
DO 420 I=1,M
DO 420 J=1,L
C(I,J)=0.0
DO 420 K=1,N
C(I,J)=C(I,J)+A(I,K)*B(K,J)
420 CONTINUE
RETURN
END
!-------------------------子程序CLEAR------------------------
SUBROUTINE CLEAR(A,M,N)
!
!Clear Array(M,N)!
DIMENSION A(M,N)
DO 430 I=1,M
DO 430 J=1,N
A(I,J)=0.0
430 CONTINUE
RETURN
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?