声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3563|回复: 0

[计算力学] 平面弹性力学有限元源程序(FORTRAN)

 关闭 [复制链接]
发表于 2006-10-9 12:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
  1. $DEBUG
  2.                 PROGRAM PLANE
  3.                 IMPLICIT REAL*8(A-H,O-Z),INTEGER(I-N)
  4.                 ALLOCATABLE::IJK(:,:),XY(:,:),BCA(:,:),SK(:,:),STR(:,:),MB(:,:),ZB(:),B(:)
  5.                 ALLOCATABLE::DELD(:,:,:),TOD(:,:),DELST(:,:,:),TOST(:,:),DELSUP(:,:),TOTSUP(:)
  6.                 DIMENSION EK(6,6)
  7.         CHARACTER PN*40,FN*12

  8.         WRITE(*,'(A)') ' 本程序为计算平面问题的有限元程序'
  9.         WRITE(*,'(A)') ' 特点:(1)采用三结点三角形单元;'
  10.         WRITE(*,'(A)') '       (2)采用等带宽存贮技术;'
  11.         WRITE(*,'(A)') '       (3)采用高斯消元法解线性方程组。'
  12.         WRITE(*,'(/A)') ' 输入计算问题名(PN):'
  13.         READ(*,'(A)') PN
  14.         CALL FNAME(PN,'.DAT',FN)
  15.         WRITE(*,'(2A)') '  输入数据文件名为:',FN
  16.         OPEN(5,FILE=FN,STATUS='OLD')
  17.         CALL FNAME(PN,'.OUT',FN)
  18.         WRITE(*,'(/2A)') ' 结果输出数据文件名为: ',FN
  19.         OPEN(6,FILE=FN,STATUS='UNKNOWN')
  20.         CALL FNAME(PN,'.OU1',FN)
  21.         WRITE(*,'(/2A)') ' 参数输出数据文件名为: ',FN
  22.         OPEN(7,FILE=FN,STATUS='UNKNOWN')

  23.                 READ(5,*) NG,NE,MC,NX,NB,EO,VO,DENSITY,T
  24.                 WRITE(6,120) NG,NE,MC,NX,NB
  25.                 WRITE(6,130) EO,VO,DENSITY,T
  26.                 READ(5,*) NWA,NWE,NWK,NWP
  27.                 NT=2*NG
  28.                 ALLOCATE (IJK(3,NE),XY(2,NG),BCA(7,NE),STR(3,NE),MB(2,NB),ZB(NB),B(NT))
  29.                 ALLOCATE (DELD(2,NG,NX),TOD(2,NG),DELST(3,NE,NX),TOST(3,NE),DELSUP(NB,NX),TOTSUP(NB))
  30.                 CALL CLEAR(2,NG,TOD)
  31.                 CALL CLEAR(3,NE,TOST)
  32.                 CALL CLEAR1(NB,TOTSUP)
  33.                 IF (NG.EQ.0) THEN
  34.                   STOP 000
  35.                 ENDIF
  36.                 CALL INPUT(NG,NE,NB,IJK,XY,MB,ZB)
  37.                 CALL CALND(NG,NE,IJK,ND)
  38.                 ALLOCATE (SK(NT,ND))
  39.                 IF(MC.EQ.0) THEN
  40.                 E=EO
  41.                 V=VO
  42.                 ELSE
  43.                 E=EO/(1-VO*VO)
  44.                 V=VO/(1-VO)
  45.                 ENDIF
  46.                 IP=0
  47.                 NX1=NX
  48.                 A1=E/(1-V*V)/4.0
  49.                 A2=0.5*(1-V)
  50.                 CALL ABC(NG,NE,IJK,XY,BCA,NWA)
  51.                 CALL CLEAR(NT,ND,SK)
  52.                 DO 100 K=1,NE
  53.                 CALL KE(K,NE,T,V,A1,A2,IJK,BCA,EK,NWE)
  54.                 CALL SUMK(K,NE,NT,ND,IJK,EK,SK)
  55. 100                CONTINUE
  56.                 CALL CHECK(NT,ND,SK)
  57. 110                CONTINUE
  58.                 IP=IP+1
  59.                 WRITE(6,'(///1X,A,I4)') "荷载工况=",IP
  60.                 READ(5,*) NF,NP,NM
  61.                 DO I=1,NT
  62.                 B(I)=0.0
  63.                 ENDDO
  64.                 IF(NF.GT.0) THEN
  65.                 CALL PF(NF,NT,B)
  66.                 ENDIF
  67.                 IF(NP.GT.0) THEN
  68.                 CALL PP(NP,NG,NT,T,XY,B)
  69.                 ENDIF
  70.                 IF(NM.GT.0) THEN
  71.                 CALL PG(NM,NE,NT,DENSITY,T,IJK,BCA,B)
  72.                 ENDIF
  73.                 DO I=1,NB
  74.                 I1=2*(MB(1,I)-1)+2-MB(2,I)
  75.                 DELSUP(I,IP)=-B(I1)
  76.                 ENDDO
  77.                 IF(NF.NE.0.OR.NP.NE.0.OR.NM.NE.0) THEN
  78.                 CALL DBC(NB,ND,NT,NX,NX1,MB,ZB,SK,B)
  79.                 CALL GAUSS(NT,ND,NX1,NX,SK,B,NWK,NWP)
  80.                 CALL STRESS(NE,NT,V,A1,A2,IJK,BCA,B,STR)
  81.                 CALL TRES(IP,NG,NE,NX,NT,B,STR,DELD,TOD,DELST,TOST)
  82.                 CALL SUPT(IP,NG,NE,NB,NX,T,V,A1,A2,IJK,MB,BCA,DELD,DELSUP,TOTSUP)
  83.                 CALL OUTPUT(IP,NG,NE,NB,NX,MB,DELD,TOD,DELST,TOST,DELSUP,TOTSUP)
  84.                 ELSE
  85.                 WRITE(*,'(2x,A,I4,A)') "荷载工况=",IP,"没有荷载!"
  86.                 WRITE(6,'(2x,A,I4,A)') "荷载工况=",IP,"没有荷载!"
  87.                 ENDIF
  88.                 NX1=NX1-1
  89.                 IF (NX1.GT.0) GOTO 110
  90. 120                FORMAT(1X, '结点总数=', I3, 1X, '单元总数=', I3, 1X, '问题类型=', &
  91.       & I1, 1X, '荷载工况数=', I2, 1X, '支承位移数=', I2)
  92. 130                FORMAT(/1X, '弹性模量=', E10.3, 1X, '泊松比=', F5.3, 1X, '密度=', E10.3, &
  93.       & 1X, '厚度=', F6.3)
  94.                 END

  95.                                
  96.                 SUBROUTINE GAUSS(NT,ND,NX1,NX,SK,B,NWK,NWP)
  97.                 IMPLICIT REAL*8(A-H,O-Z),INTEGER(I-N)
  98.                 DIMENSION SK(NT,ND),A(NT,NT),B(NT)
  99.                 CALL CLEAR(NT,NT,A)
  100.                 DO I=1,NT
  101.                  DO J=1,ND
  102.                   IF((I+J-1).LE.NT) THEN
  103.                   A(I,I+J-1)=SK(I,J)
  104.                   ENDIF
  105.                  ENDDO
  106.                 ENDDO
  107.                 IF(NWK.EQ.1.AND.NX1.EQ.NX) THEN
  108.             WRITE(7,'(A)') "结构总刚(列出右上三角元素)"
  109.                 DO I=1,NT
  110.                 WRITE(7,100) (A(I,J),J=1,NT)
  111.                 ENDDO
  112.                 ENDIF
  113.                 IF (NWP.EQ.1) THEN
  114.                 WRITE(7,'(1X,A,I3,A)') "第",NX-NX1+1,"荷载工况的荷载列阵"
  115.                 DO I=1,NT
  116.                 WRITE(7,'(1x,E11.4)') B(I)
  117.                 ENDDO
  118.                 ENDIF
  119.                 DO 50 K=1,NT-1
  120.                  DO 60 I=K+1,NT
  121.                   C1=A(K,I)/A(K,K)
  122.                   DO 70 J=I,NT
  123.                   A(I,J)=A(I,J)-C1*A(K,J)
  124. 70                  CONTINUE
  125.                   B(I)=B(I)-C1*B(K)
  126. 60                 CONTINUE
  127. 50                CONTINUE
  128.                 B(NT)=B(NT)/A(NT,NT)
  129.                 DO 80 I=NT-1,1,-1
  130.                  DO 90 J=I+1,NT
  131.                  B(I)=B(I)-A(I,J)*B(J)
  132. 90                 CONTINUE
  133.                  B(I)=B(I)/A(I,I)
  134. 80                CONTINUE
  135. 100                FORMAT(1x, 4000E10.3)
  136.                 END


  137.                 SUBROUTINE CHECK(NT,ND,SK)
  138.                 IMPLICIT REAL*8(A-H,O-Z),INTEGER(I-N)
  139.                 DIMENSION SK(NT,ND)
  140.                 M=0
  141.                 DO I=1,NT
  142.                  IF(SK(I,1).LE.0.0) THEN
  143.                  M=M+1
  144.                  ENDIF
  145.                 ENDDO
  146.                 IF (M.GT.0) THEN
  147.                 WRITE(*,*) "总刚矩阵的对角元素为负值!!"
  148.                 STOP 2222
  149.                 ENDIF
  150.                 END

  151.                 SUBROUTINE STRESS(NE,NT,V,A1,A2,IJK,BCA,B,STR)
  152.                 IMPLICIT REAL*8(A-H,O-Z),INTEGER(I-N)
  153.                 DIMENSION D1(6),D2(3),B(NT),S(3,6),IJK(3,NE),BCA(7,NE),STR(3,NE)
  154.                 CALL CLEAR(3,NE,STR)
  155.                 DO 10 K=1,NE
  156.                  DO I=1,3
  157.                  II=IJK(I,K)
  158.                  D1(2*(I-1)+1)=B(2*(II-1)+1)
  159.                  D1(2*(I-1)+2)=B(2*(II-1)+2)
  160.                  ENDDO
  161.                  CALL CLEAR(3,6,S)
  162.                  C1=2*A1/BCA(7,K)
  163.                  DO 20 I=1,3
  164.                   S(1,2*(I-1)+1)=C1*BCA(I,K)
  165.                   S(1,2*(I-1)+2)=C1*V*BCA(I+3,K)
  166.                   S(2,2*(I-1)+1)=C1*V*BCA(I,K)
  167.                   S(2,2*(I-1)+2)=C1*BCA(I+3,K)
  168.                   S(3,2*(I-1)+1)=C1*A2*BCA(I+3,K)
  169.                   S(3,2*(I-1)+2)=C1*A2*BCA(I,K)
  170. 20                 CONTINUE
  171.                  CALL MATMUL(3,6,1,S,D1,D2)
  172.                  DO I=1,3
  173.                  STR(I,K)=D2(I)
  174.                  ENDDO
  175. 10                CONTINUE
  176.                 END

  177.                 SUBROUTINE OUTPUT(IP,NG,NE,NB,NX,MB,DELD,TOD,DELST,TOST,DELSUP,TOTSUP)
  178.                 IMPLICIT REAL*8(A-H,O-Z),INTEGER(I-N)
  179.                 DIMENSION MB(2,NB),DELD(2,NG,NX),TOD(2,NG)
  180.                 DIMENSION DELST(3,NE,NX),TOST(3,NE),DELSUP(NB,NX),TOTSUP(NB)
  181.                 CHARACTER VE*6
  182.                 WRITE(6,20) IP
  183.                 WRITE(6,30)
  184.                 DO I=1,NG
  185.                 WRITE(6,40) I,DELD(1,I,IP),TOD(1,I),DELD(2,I,IP),TOD(2,I)
  186.                 ENDDO
  187.                 WRITE(6,50)
  188.                 DO J=1,NE
  189.                 WRITE(6,60) J,(DELST(L,J,IP),TOST(L,J),L=1,3)
  190.                 ENDDO
  191.                 WRITE(6,70)
  192.                 DO J=1,NB
  193.                 IF (MB(2,J).EQ.1) THEN
  194.                 VE='x方向'
  195.                 ELSE
  196.                 VE='Y方向'
  197.                 ENDIF
  198.                 WRITE(6,80) MB(1,J),VE,DELSUP(J,IP),TOTSUP(J)
  199.                 ENDDO
  200. 20                FORMAT(/1X, '荷载工况=', I3, '的计算结果')
  201. 30                FORMAT(/, 1X, '结点号', 5X, 'X位移增量', 5X, 'X累计位移', 5x, &
  202.       & 'Y位移增量', 5X, 'Y累计位移')
  203. 40                FORMAT(1X, I3, 6X, F10.4, 4x, F10.4, 4X, F10.4, 4x, F10.4)
  204. 50                FORMAT(/, 1X, '单元号', 6x, 'X应力增量', 6x, 'X累计应力', 6x, &
  205.       & 'Y应力增量', 6x, 'Y累计应力', 6x, '剪应力增量', 6x, &
  206.       & '累计剪应力')
  207. 60                FORMAT(2X, I3, 6X, E10.3, 5X, E10.3, 5X, E10.3, 5X, E10.3, 6X, E10.3, &
  208.       & 6X, E10.3)
  209. 70                FORMAT(/, 1X, '支座结点号', 6x, '支反力方向', 6x, '支反力增量', &
  210.       & 6x, '支反力累计量')
  211. 80                FORMAT(5X, I3, 12X, A, 6x, E10.3, 8X, E10.3)
  212.             END                                                           


  213.                 SUBROUTINE MATMUL(M,N,L,A,B,C)
  214.                 IMPLICIT REAL*8(A-H,O-Z),INTEGER(I-N)
  215.         DIMENSION A(M,N),B(N,L),C(M,L)
  216.         DO 100 I=1,M
  217.          DO 100 J=1,L
  218.           C(I,J)=0.0
  219.           DO 100 K=1,N
  220. 100     C(I,J)=C(I,J)+A(I,K)*B(K,J)
  221.         END

  222.                 SUBROUTINE CLEAR(M,N,A)
  223.                 IMPLICIT REAL*8(A-H,O-Z),INTEGER(I-N)
  224.                 DIMENSION A(M,N)
  225.                 DO I=1,M
  226.                 DO J=1,N
  227.                 A(I,J)=0.0
  228.                 ENDDO
  229.                 ENDDO
  230.                 END

  231.                 SUBROUTINE ABC(NG,NE,IJK,XY,BCA,NWA)
  232.                 IMPLICIT REAL*8(A-H,O-Z),INTEGER(I-N)
  233.                 DIMENSION X(2,5),XY(2,NG),IJK(3,NE),B(7),BCA(7,NE)
  234.                 DO 10 I=1,NE
  235.                  DO 20 K=1,3
  236.                  DO 20 J=1,2
  237.                  X(J,K)=XY(J,IJK(K,I))
  238. 20                 CONTINUE
  239.                  DO 30 J=1,2
  240.                  X(J,4)=X(J,1)
  241.                  X(J,5)=X(J,2)
  242. 30                 CONTINUE
  243.                  DO 40 K=1,3
  244.                  B(K)=X(2,K+1)-X(2,K+2)
  245.                  B(K+3)=X(1,K+2)-X(1,K+1)
  246. 40                 CONTINUE
  247.                  B(7)=(B(1)*B(5)-B(4)*B(2))*0.5
  248.                  IF (B(7).LE.0.0) THEN
  249.                  WRITE(*,*) "单元号=",I
  250.                  WRITE(*,*) "单元的结点I,J AND K编号:",(IJK(K,I),K=1,3)
  251.                  STOP 1111
  252.                  ELSE
  253.                  DO J=1,7
  254.                  BCA(J,I)=B(J)
  255.                  ENDDO
  256.                  ENDIF
  257. 10                CONTINUE
  258.                 IF(NWA.EQ.1) THEN
  259.                 WRITE(7,100)
  260.                 DO I=1,NE
  261.                 WRITE(7,110) I,(BCA(J,I),J=1,7)
  262.                 ENDDO
  263.                 ENDIF
  264. 100                 FORMAT(1X, '单元号', 3x, 'bi', 7x, 'bj', 7x, 'bk', 7x, 'ci', 7x, &
  265.       & 'cj', 7x, 'ck', 7x, '面积A')
  266. 110                 FORMAT(2X, I3, 3X, F6.3, 3X, F6.3, 3X, F6.3, 3X, F6.3, 3X, F6.3, &
  267.       & 3X, F6.3, 3X, F6.3)
  268.              END

  269.                  SUBROUTINE SUMK(K,NE,NT,ND,IJK,EK,SK)
  270.              IMPLICIT REAL*8(A-H,O-Z),INTEGER(I-N)
  271.                  DIMENSION        IJ(3),EK(6,6),IJK(3,NE),SK(NT,ND)
  272.                  DO I=1,3
  273.                  IJ(I)=IJK(I,K)
  274.                  ENDDO
  275.                  DO 10 I=1,3
  276.                   DO 20 J=1,3
  277.                   IF (IJ(I).GT.IJ(J)) GOTO 20
  278.                   M=2*(IJ(I)-1)+1
  279.                   N=2*(IJ(J)-1)+1-(2*(IJ(I)-1)+1)+1
  280.                   MO=2*(I-1)+1
  281.                   NO=2*(J-1)+1
  282.                   SK(M,N)=SK(M,N)+EK(MO,NO)
  283.                   SK(M,N+1)=SK(M,N+1)+EK(MO,NO+1)
  284.                   SK(M+1,N)=SK(M+1,N)+EK(MO+1,NO+1)
  285.                   IF (IJ(I).EQ.IJ(J)) GOTO 20
  286.                   SK(M+1,N-1)=SK(M+1,N-1)+EK(MO+1,NO)
  287. 20                  CONTINUE
  288. 10             CONTINUE
  289.                  END

  290.                 SUBROUTINE KE(K,NE,T,V,A1,A2,IJK,BCA,EK,NWE)
  291.                 IMPLICIT REAL*8(A-H,O-Z),INTEGER(I-N)
  292.                 DIMENSION  IJ(3),IJK(3,NE),BCA(7,NE),EK(6,6)
  293.                 CALL CLEAR(6,6,EK)
  294.                 DO I=1,3
  295.                 IJ(I)=IJK(I,K)
  296.                 ENDDO
  297.                 DO 10 I=1,3
  298.                  DO 20 J=I,3
  299.                  IO=2*(I-1)
  300.                  JO=2*(J-1)
  301.                  EK(IO+1,JO+1)=BCA(I,K)*BCA(J,K)+A2*BCA(I+3,K)*BCA(J+3,K)
  302.                  EK(IO+1,JO+2)=V*BCA(I,K)*BCA(J+3,K)+A2*BCA(I+3,K)*BCA(J,K)
  303.                  EK(IO+2,JO+2)=BCA(I+3,K)*BCA(J+3,K)+A2*BCA(I,K)*BCA(J,K)
  304.                  IF (I.EQ.J) GOTO 20
  305.                  EK(IO+2,JO+1)=V*BCA(I+3,K)*BCA(J,K)+A2*BCA(I,K)*BCA(J+3,K)
  306. 20                 CONTINUE
  307. 10                CONTINUE
  308.                 DO I=2,6
  309.                  DO J=1,I-1
  310.                  EK(I,J)=EK(J,I)
  311.                  ENDDO
  312.                 ENDDO
  313.                 DO I=1,6
  314.                  DO J=1,6
  315.                  EK(I,J)=EK(I,J)*A1*T/BCA(7,K)
  316.                  ENDDO
  317.                 ENDDO
  318.                 IF(NWE.EQ.1) THEN
  319.              WRITE(7,40)        K, "号单元的单刚"
  320.                 DO I=1,6
  321.                  WRITE(7,50) (EK(I,J),J=1,6)
  322.                 ENDDO
  323.                 ENDIF
  324. 40                FORMAT(1X, I3, A)
  325. 50                FORMAT(1X, 6(E10.4, 4X))
  326.                 END

  327.                 SUBROUTINE PF(NF,NT,B)
  328.                 IMPLICIT REAL*8(A-H,O-Z),INTEGER(I-N)
  329.                 DIMENSION MF(2,NF),ZF(NF),B(NT)
  330.                 DO I=1,NF
  331.                 READ(5,*) K,MF(1,I),MF(2,I),ZF(I)
  332.                 ENDDO
  333.                 WRITE(6,'(/A,I3)') "集中荷载个数NF=",NF
  334.                 WRITE(6,20)
  335.                 DO I=1,NF
  336.                 WRITE(6,30) MF(1,I),MF(2,I),ZF(I)
  337.                 ENDDO
  338.                 DO 10 I=1,NF
  339.                  II=2*(MF(1,I)-1)-MF(2,I)+2
  340.                  B(II)=B(II)+ZF(I)
  341. 10                CONTINUE
  342. 20                FORMAT(1X, '结点号', 4x, '方向', 4x, '荷载值')
  343. 30                FORMAT(2X, I3, 5X, I3, 4X, E10.4)
  344.                 END               

  345.         SUBROUTINE FNAME(PN,FN2,FN)
  346.         CHARACTER PN*40,FN2*4,FN*12
  347. !       去掉PN中前面的空格
  348.         DO 10 I=1,40
  349.          IF(PN(I:I).EQ.' ') GOTO 10
  350.          IP=I
  351.          GOTO 20
  352. 10      CONTINUE
  353. 20      CONTINUE
  354.         FN(1:8)=PN(IP:IP+7)
  355. !       去掉FN中后面的空格
  356.         DO 30 I=8,1,-1
  357.          IF(FN(I:I).EQ.' ') GOTO 30
  358.          IL=I
  359.          GOTO 40
  360. 30      CONTINUE
  361. 40      CONTINUE
  362. !       生成文件名FN=PN+FN2
  363.         FN(IL+1:IL+4)=FN2(1:4)
  364.         END

  365.                 SUBROUTINE PP(NP,NG,NT,T,XY,B)
  366.                 IMPLICIT REAL*8(A-H,O-Z),INTEGER(I-N)
  367.                 DIMENSION MP(2,NP),ZP(NP),XY(2,NG),B(NT)
  368.                 DO I=1,NP
  369.                 READ(5,*) K,MP(1,I),MP(2,I),ZP(I)
  370.                 ENDDO
  371.                 WRITE(6,'(/A,I3)') "分布荷载数NP=",NP
  372.                 WRITE(6,20)
  373.                 DO I=1,NP
  374.                 WRITE(6,30) I,MP(1,I),MP(2,I),ZP(I)
  375.                 ENDDO
  376.                 DO 10 I=1,NP
  377.                  II=2*(MP(1,I)-1)
  378.                  JJ=2*(MP(2,I)-1)
  379.                  PX=0.5*ZP(I)*T*(XY(2,MP(1,I))-XY(2,MP(2,I)))
  380.                  PY=0.5*ZP(I)*T*(XY(1,MP(2,I))-XY(1,MP(1,I)))
  381.                  B(II+1)=B(II+1)+PX
  382.                  B(II+2)=B(II+2)+PY
  383.                  B(JJ+1)=B(JJ+1)+PX
  384.                  B(JJ+2)=B(JJ+2)+PY
  385. 10                CONTINUE
  386. 20                FORMAT(1X, '序号', 4x, '首结点号', 4x, '末结点号', 7x, '荷载值')
  387. 30                FORMAT(1X, I3, 8x, I3, 9X, I3, 7X, F10.3)
  388.                 END               

  389.                 SUBROUTINE PG(NM,NE,NT,DENSITY,T,IJK,BCA,B)
  390.                 IMPLICIT REAL*8(A-H,O-Z),INTEGER(I-N)
  391.                 DIMENSION IJK(3,NE),BCA(7,NE),MG(NM),B(NT)
  392.                 IF (NM.GE.NE) THEN
  393.                 NM=NE
  394.                 DO I=1,NM
  395.                 MG(I)=I
  396.                 ENDDO
  397.                 ELSE
  398.                 READ(5,*) (MG(I),I=1,NM)
  399.                 ENDIF
  400.                 WRITE(6,'(/A,I3)') "计自重单元数NM=",NM
  401.                 WRITE(6,'(A)') "计自重的单元号为:"
  402.                 K1=0
  403.                 K2=0
  404.                 DO WHILE((NM-K2).GE.10)
  405.                 WRITE(6,100) (MG(K2+J),J=1,10)
  406.                 K1=K1+1
  407.                 K2=10*K1
  408.                 ENDDO
  409.                 WRITE(6,100) (MG(K2+J),J=1,NM-K2)
  410.                 DO 10 I=1,NM
  411.                  II=2*(IJK(1,MG(I))-1)
  412.                  JJ=2*(IJK(2,MG(I))-1)
  413.                  KK=2*(IJK(3,MG(I))-1)
  414.                  PE1=-DENSITY*T*BCA(7,MG(I))/3.0
  415.                  B(II+2)=B(II+2)+PE1
  416.                  B(JJ+2)=B(JJ+2)+PE1
  417.                  B(KK+2)=B(KK+2)+PE1
  418. 10                CONTINUE
  419. 100                FORMAT(10(1X,I3))
  420.                 END               

  421.                 SUBROUTINE INPUT(NG,NE,NB,IJK,XY,MB,ZB)
  422.                 IMPLICIT REAL*8(A-H,O-Z),INTEGER(I-N)
  423.                 DIMENSION IJK(3,NE),XY(2,NG),MB(2,NB),ZB(NB)
  424.                 DO I=1,NE
  425.                 READ(5,*) K,(IJK(J,I),J=1,3)
  426.                 ENDDO
  427.                 DO I=1,NG
  428.                 READ(5,*) K,XY(1,I),XY(2,I)
  429.                 ENDDO
  430.                 DO I=1,NB
  431.                  READ(5,*) K,MB(1,I),MB(2,I),ZB(I)
  432.                 ENDDO
  433.                 WRITE(6,15)
  434.                 DO K=1,NE
  435.                 WRITE(6,20) K,(IJK(J,K),J=1,3)
  436.                 ENDDO
  437.                 WRITE(6,30)
  438.                 DO K=1,NG
  439.                 WRITE(6,35) K,XY(1,K),XY(2,K)
  440.                 ENDDO
  441.                 WRITE(6,40)
  442.                 DO K=1,NB
  443.                  WRITE(6,45) K,MB(1,K),MB(2,K),ZB(K)
  444.                 ENDDO
  445. 15                FORMAT(/1X, '单元号', 4X, 'I结点号', 4x, 'J结点号', 4x, 'K结点号')
  446. 20                FORMAT(2X, I3, 7X, I3, 8X, I3, 8X, I3)
  447. 30                FORMAT(/1X, '结点号', 8X, 'X坐标', 8X, 'Y坐标')
  448. 35                FORMAT(2X, I3, 6X, F8.3, 5X, F8.3)
  449. 40                FORMAT(/1X, '序号', 4x, '支承结点号', 6x, '支承方向', 6x, &
  450.       & '支承位移')
  451. 45                FORMAT(2X, I2, 8X, I4, 11X, I2, 7X, F10.3)
  452.                 END

  453.                 SUBROUTINE DBC(NB,ND,NT,NX,NX1,MB,ZB,SK,B)
  454.                 IMPLICIT REAL*8(A-H,O-Z),INTEGER(I-N)
  455.                 DIMENSION  MB(2,NB),ZB(NB),SK(NT,ND),B(NT)
  456.                 DO 5 I=1,NB
  457.                  N=2*MB(1,I)-MB(2,I)
  458.                  Z=ZB(I)
  459.                  IF (ABS(Z).LT.1.0E-10) THEN
  460.                   IF (NX.NE.NX1) GOTO 30
  461.                   SK(N,1)=1.0
  462.                   DO J=2,ND
  463.                   SK(N,J)=0.0
  464.                   ENDDO
  465.                   DO 10 K=2,ND
  466.                   IF (N.LT.K) GOTO 20
  467.                   M=N-K+1
  468.                   SK(M,K)=0.0
  469. 10                  CONTINUE
  470. 20                  CONTINUE
  471. 30                  B(N)=0.0
  472.                  ELSE
  473.                   IF (NX.NE.NX1) GOTO 40
  474.                   SK(N,1)=SK(N,1)*1.0E+15
  475. 40                  B(N)=SK(N,1)*Z
  476.                  ENDIF
  477. 5                CONTINUE
  478.                 END

  479.                 SUBROUTINE CALND(NG,NE,IJK,ND)
  480.                 IMPLICIT REAL*8(A-H,O-Z),INTEGER(I-N)
  481.                 DIMENSION  IJK(3,NE)
  482.                 ND=0
  483.                 DO 10 I=1,NG
  484.                  M1=0
  485.                  DO 20 J=1,NE
  486.                   DO 30 K=1,3
  487.                   IF(IJK(K,J).EQ.I) THEN
  488.                   M2=0
  489.                    DO 40 L=1,3
  490.                     M3=IJK(L,J)-I
  491.                     IF(M3.GT.M2) THEN
  492.                     M2=M3
  493.                     ENDIF
  494. 40                   CONTINUE
  495.                   GOTO 25
  496.                   ENDIF
  497. 30                  CONTINUE
  498. 25                 IF(M2.GT.M1) M1=M2
  499. 20                CONTINUE
  500.                 IF(M1.GT.ND)ND=M1
  501. 10                CONTINUE
  502.                 ND=2*(ND+1)
  503.                 WRITE(7,100) ND
  504. 100                FORMAT(1X,'总刚矩阵的半带宽ND为:',I4)
  505.                 END

  506.                 SUBROUTINE TRES(IP,NG,NE,NX,NT,B,STR,DELD,TOD,DELST,TOST)
  507.                 IMPLICIT REAL*8(A-H,O-Z),INTEGER(I-N)
  508.                 DIMENSION B(NT),STR(3,NE),DELD(2,NG,NX),TOD(2,NG),DELST(3,NE,NX),TOST(3,NE)
  509.                 DO I=1,NG
  510.                 IO=2*(I-1)
  511.                 DELD(1,I,IP)=B(IO+1)
  512.                 DELD(2,I,IP)=B(IO+2)
  513.                 TOD(1,I)=TOD(1,I)+DELD(1,I,IP)
  514.                 TOD(2,I)=TOD(2,I)+DELD(2,I,IP)
  515.                 ENDDO
  516.                 DO I=1,NE
  517.                 DO J=1,3
  518.                 DELST(J,I,IP)=STR(J,I)
  519.                 TOST(J,I)=TOST(J,I)+DELST(J,I,IP)
  520.                 ENDDO
  521.                 ENDDO
  522.                 END


  523.                 SUBROUTINE SUPT(IP,NG,NE,NB,NX,T,V,A1,A2,IJK,MB,BCA,DELD,DELSUP,TOTSUP)
  524.                 IMPLICIT REAL*8(A-H,O-Z),INTEGER(I-N)
  525.                 DIMENSION IJK(3,NE),MB(2,NB),BCA(7,NE),DELD(2,NG,NX),EK(6,6)
  526.                 DIMENSION D1(6),DELSUP(NB,NX),TOTSUP(NB)
  527.                 DO 10 K=1,NB
  528.                 I1=MB(1,K)
  529.                 I2=MB(2,K)
  530.                 RF=0.0
  531.                  DO 20 I=1,NE
  532.                   DO 30 J=1,3
  533.                   I3=IJK(J,I)
  534.                   IF (I1.NE.I3) THEN
  535.                    GOTO 30
  536.                   ELSE
  537.                    I4=2*(J-1)+2-I2
  538.                    CALL KE(I,NE,T,V,A1,A2,IJK,BCA,EK,0)
  539.                    DO M=1,3
  540.                    IO=IJK(M,I)
  541.                    D1(2*(M-1)+1)=DELD(1,IO,IP)
  542.                    D1(2*(M-1)+2)=DELD(2,IO,IP)
  543.                    ENDDO
  544.                    DO L=1,6
  545.                    RF=RF+EK(I4,L)*D1(L)
  546.                    ENDDO
  547.                    GOTO 20
  548.                   ENDIF
  549. 30                  CONTINUE
  550. 20                 CONTINUE
  551.                 DELSUP(K,IP)=DELSUP(K,IP)+RF
  552.                 TOTSUP(K)= TOTSUP(K)+DELSUP(K,IP)
  553. 10                CONTINUE
  554.                 END               
  555.                                    
  556.                 SUBROUTINE CLEAR1(N,B)
  557.                 IMPLICIT REAL*8(A-H,O-Z),INTEGER(I-N)
  558.                 DIMENSION B(N)
  559.                 DO I=1,N
  560.                 B(I)=0.0
  561.                 ENDDO
  562.                 END
复制代码



PFEM,EXE平面问题有限元程序的数据文件输入格式:

基本输入数据文件名:*.DAT
计算结果输出数据文件名:*.OUT
中间参数输出数据文件名:*.OU1
下面按在文件中的前后顺序进行说明:
1 基本控制参数信息:NG,NE,MC,NX,NB,EO,VO,DENSITY ,T(共计5个整形数,4个实型数)
  NG:结构的结点总数;
  NE:结构的单元总数;
  MC:平面问题的类型,MC=0,为平面应力,MC=1,为平面应变;
  NX:荷载工况数;
  NB:支承位移数;
  EO:材料弹性模量(Pa);
  VO:材料泊松比;
  DENSITY :容重(N/m3)
  T :材料厚度(m);
2 打印输出控制参数:NWA,NEW,NWK,NWP(4个整形数)
  等于1时,输出,否则不输出。
3 单元结点信息:(K,(IJK(I,K),I=1,3),K=1,NE) (每行4个整形数,共计NE行)
  K:单元号;
  IJK(1,K):K单元I结点编号;
  IJK(2,K):K单元J结点编号;
  IJK(3,K):K单元K结点编号;
4  结点坐标信息:((K,XY(1,K),XY(2,K)),K=1,NG)(每行3个整形数,共计NG行)
  K:结点号
  XY(1,K):K结点X坐标;
  XY(2,K):K结点Y坐标;
5 支承信息:((K,MB(1,K),MB(2,K),ZB(K)),K=1,NB)(每行3个整形数,1个实型数,共计NB行)
  K:支承位移序号;
  MB(1,K):第K个支承位移所在的结点号;
  MB(2,K):第K个支承位移的坐标方向;
  ZB(K):  第K个支承位移的数值;
6 按NX荷载工况数输入荷载信息:每一荷载工况如下
  (1) NF,NP,NM(3个整型数)
     NF:集中荷载个数;
     NP:分布荷载个数;
     NM:计自重单元数;
  (2) 若NF≠0,则输入下面数据
      K,MF(1,K),MF(2,K),ZF(K)(每行3个整形数,1个实型数,共计NF行)
       K:集中荷载序号;
       MF(1,K):第K个集中荷载作用的结点号;
       MF(2,K):第K个集中荷载的坐标方向;
       ZF(K):  第K个集中荷载的数值;
  (3) 若NP≠0,则输入下面数据
      K,MP(1,K),MP(2,K),ZP(K)(每行3个整形数,1个实型数,共计NP行)
       K:分布荷载序号;
       MP(1,K):第K个分布荷载作用的结点号;
       MP(2,K):第K个分布荷载的坐标方向;
       ZP(K):  第K个分布荷载的数值;
  (4) 若NM≠0,则输入下面数据
      若NM≥NE,则表示计所有单元的自重,不需输入计自重的单元号;
      若NM<NE,则需要输入计自重的单元号;


例题验证

1 (选自徐芝伦编《弹性力学简明教程》(第二版))设有对角受压的正方形薄板,荷载沿厚度均匀分布,为2N/m,由于xz和yz面均为该薄板的对称面,所以只需取1/4部分作为计算对象,图1(a,b),将该对象划分为4个单元,共有6个结点。对称面上的结点没有垂直于对称面的位移分量,因此,在1、2、4三个结点上设置了水平链杆支座,在4、5、6三个结点设置了铅直链杆支座,如图1c所示。
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-11 04:55 , Processed in 0.069690 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表