zoukankan      html  css  js  c++  java
  • 平面四边形八节点等参单元的平面有限元分析程序

       1 C       这是一个采用平面四边形八节点等参单元的平面有限元分析程序。
       2         PROGRAM PLANEFEM
       3         IMPLICIT REAL*8(A-H,O-Z)
       4         CHARACTER*80 LINECHAR,NEWLINECHAR
       5         COMMON  A(30000),L(4000)
       6         COMMON /SOL/NPOIN,NELEM,NTYPE,NMATS
       7         OPEN(5,FILE='FEMDATA',STATUS='OLD')
       8         OPEN(6,FILE='FEMOUT',STATUS='UNKNOWN')
       9 C       以下进行的是从数据文件FEMDATA中读入数据文件主标题信息。
      10         READ(5,5000) LINECHAR
      11         LOCATECHAR=INDEX(LINECHAR,'输入')
      12         IF(LOCATECHAR.NE.0) THEN
      13           LINECHAR(LOCATECHAR:LOCATECHAR+3)='输出'
      14         ENDIF
      15         WRITE(6,5100) LINECHAR
      16 5000    FORMAT(A)
      17 5100    FORMAT(80('*')/A/80('*')/)
      18 C       以下进行的是先读入一行字符,然后从字符中读入网格单元总数NELEM。
      19         READ(5,5000) LINECHAR
      20         WRITE(6,5000) LINECHAR
      21         LOCATECHAR=INDEX(LINECHAR,'=')
      22         LOCATECHAR=LOCATECHAR+1
      23         NEWLINECHAR=LINECHAR(LOCATECHAR:80)
      24         READ(NEWLINECHAR,5200) NELEM
      25 5200    FORMAT(I5)
      26 C       以下进行的是先读入一行字符,然后从字符中读入单元节点总数NPOIN。
      27         READ(5,5000) LINECHAR
      28         WRITE(6,5000) LINECHAR
      29         LOCATECHAR=INDEX(LINECHAR,'=')
      30         LOCATECHAR=LOCATECHAR+1
      31         NEWLINECHAR=LINECHAR(LOCATECHAR:80)
      32         READ(NEWLINECHAR,5200) NPOIN
      33 C       以下进行的是先读入一行字符,然后从字符中读入问题类型编号NTYPE。
      34         READ(5,5000) LINECHAR
      35         WRITE(6,5000) LINECHAR
      36         LOCATECHAR=INDEX(LINECHAR,'=')
      37         LOCATECHAR=LOCATECHAR+1
      38         NEWLINECHAR=LINECHAR(LOCATECHAR:80)
      39         READ(NEWLINECHAR,5200) NTYPE
      40 C       以下进行的是先读入一行字符,然后从字符中读入材料类型总数NMATS。
      41         READ(5,5000) LINECHAR
      42         WRITE(6,5000) LINECHAR
      43         LOCATECHAR=INDEX(LINECHAR,'=')
      44         LOCATECHAR=LOCATECHAR+1
      45         NEWLINECHAR=LINECHAR(LOCATECHAR:80)
      46         READ(NEWLINECHAR,5200) NMATS
      47 C       以下进行的是根据以输入的控制参数确定虚拟数组在实数组中的起始位置。
      48         N1=1
      49         N2=N1+NPOIN*2
      50         N3=N2+NMATS*3
      51         N4=N3+NPOIN*2
      52         NN2=N1+NELEM*8
      53         NN3=NN2+NPOIN
      54         NN4=NN3+NELEM
      55         NN5=NN4+NELEM
      56 C       以下进行的是调用子程序进行有限元分析计算。
      57         CALL INPUT(A(N1),A(N2),L(N1),L(NN2),L(NN3))
      58         CALL STIF(A(N1),A(N2),L(N1),L(NN3))
      59         CALL LOAD(A(N1),L(N1),L(NN4))
      60         CALL ASEM(A(N3),A(N4),L(N1),L(NN2),L(NN4),L(NN5))
      61         CALL SOLVE(A(N3),A(N4),L(NN5))
      62         CALL STRE(A(N1),A(N2),A(N3),L(N1),L(NN3))
      63         WRITE(*,5300)
      64 5300    FORMAT(////////////////)
      65         STOP '                            *** 程序正常运行结束 ***'
      66         END
      67 C*****************************************************************************
      68 C       这是一个进行数据输入并进行数据检验的子程序。                         *
      69 C*****************************************************************************
      70         SUBROUTINE INPUT(COORD,PROPS,LNODS,IFPRE,MATNO)
      71         IMPLICIT REAL*8(A-H,O-Z)
      72         CHARACTER*80 LINECHAR,NEWLINECHAR,CHARCOMP
      73         LOGICAL NOTREADCHAR
      74         DIMENSION COORD(2,1),PROPS(3,1),LNODS(8,1),IFPRE(1),MATNO(1)
      75         DIMENSION NEROR(6)
      76         COMMON/SOL/NPOIN,NELEM,NTYPE,NMATS
      77         CHARCOMP='aa(这个字符常量在ASCII序列中介于数字和字符之间)'
      78         NNODE=8
      79 C       以下进行的是对材料类型编号赋初值。
      80         I=1
      81         DO WHILE (I.LE.NELEM)
      82           MATNO(I)=1
      83           I=I+1
      84         ENDDO
      85 C       以下进行的是输入材料类型编号信息标题。
      86         READ(5,5000) LINECHAR
      87         WRITE(6,5000) LINECHAR
      88 5000    FORMAT(A)
      89 C       以下进行的是输入材料类型编号。
      90         DO WHILE (NMATS.GT.1)
      91           NUMBERREAD=1
      92           DO WHILE (NUMBERREAD.LE.NMATS)
      93           READ(5,*) I,MATNO(I)
      94           NUMBERREAD=NUMBERREAD+1
      95           ENDDO
      96         ENDDO
      97 C       以下进行的是输出材料类型编号。
      98         I=1
      99         DO WHILE (I.LE.NELEM)
     100           WRITE(6,6000) I,MATNO(I)
     101           I=I+1
     102         ENDDO
     103 6000    FORMAT(2X,'单元编号为:',I4,10X,'材料类型编号为:'I6)
     104 C       以下进行的是输入单元节点总体编号标题。
     105         READ(5,5000) LINECHAR
     106         LOCATECHAR=INDEX(LINECHAR,'输入')
     107         IF(LOCATECHAR.NE.0) THEN
     108           LINECHAR(LOCATECHAR:LOCATECHAR+3)='输出'
     109         ENDIF
     110         WRITE(6,5000) LINECHAR
     111 C       以下进行的是输入单元节点总体编号。
     112         NOTREADCHAR=.TRUE.
     113         DO WHILE (NOTREADCHAR)
     114           READ(5,5000) LINECHAR
     115           IF (LINECHAR(1:2).LT.CHARCOMP(1:2)) THEN
     116             READ(LINECHAR,6100) IELEM,(LNODS(I,IELEM),I=1,NNODE)
     117             J=1
     118             DO WHILE (J.LE.10)
     119               KELEM=IELEM+J
     120               IF (KELEM.GT.NELEM) GOTO 100
     121               K=1
     122               DO WHILE (K.LE.8)
     123                 LNODS(K,KELEM)=LNODS(K,IELEM)+J
     124                 K=K+1
     125               ENDDO
     126 100           J=J+1
     127             ENDDO
     128           ELSE
     129             NOTREADCHAR=.FALSE.
     130           END IF
     131         ENDDO
     132 6100    FORMAT(9I5)
     133 C       以下进行的是输出单元节点总体编号。
     134         IELEM=1
     135         DO WHILE (IELEM.LE.NELEM)
     136           WRITE(6,6200) IELEM,(LNODS(I,IELEM),I=1,NNODE)
     137           IELEM=IELEM+1
     138         ENDDO
     139 6200    FORMAT(2X,'单元编号为:',I4,'    节点总体编号为:',8I5)
     140 C       以下进行的是输出单元节点的直角坐标信息标题。
     141         LOCATECHAR=INDEX(LINECHAR,'输入')
     142         IF(LOCATECHAR.NE.0) THEN
     143           LINECHAR(LOCATECHAR:LOCATECHAR+3)='输出'
     144         ENDIF
     145         WRITE(6,5000) LINECHAR
     146 C       以下进行的是输入单元节点的直角坐标信息。
     147         NOTREADCHAR=.TRUE.
     148         DO WHILE (NOTREADCHAR)
     149           READ(5,5000) LINECHAR
     150           IF (LINECHAR(1:2).LT.CHARCOMP(1:2)) THEN
     151             READ(LINECHAR,6300) IPOIN,(COORD(J,IPOIN),J=1,2)
     152           ELSE
     153             NOTREADCHAR=.FALSE.
     154           END IF
     155         ENDDO
     156 6300    FORMAT(I5,2F15.5)
     157 C       以下进行的是输出单元节点的极坐标信息标题。
     158         LOCATECHAR=INDEX(LINECHAR,'输入')
     159         IF(LOCATECHAR.NE.0) THEN
     160           LINECHAR(LOCATECHAR:LOCATECHAR+3)='输出'
     161         ENDIF
     162         WRITE(6,5000) LINECHAR
     163 C       以下进行的是输入单元节点的极坐标信息。
     164         PI=DATAN(1.D0)*4.D0
     165         NOTREADCHAR=.TRUE.
     166         DO WHILE (NOTREADCHAR)
     167           READ(5,5000) LINECHAR
     168           IF (LINECHAR(1:2).LT.CHARCOMP(1:2)) THEN
     169             READ(LINECHAR,6300) IPOIN,R,ANGLE
     170             ANGLE=ANGLE/180.D0*PI
     171             COORD(1,IPOIN)=R*DCOS(ANGLE)
     172             COORD(2,IPOIN)=R*DSIN(ANGLE)
     173             NUMBERREAD=NUMBERREAD+1
     174           ELSE
     175             NOTREADCHAR=.FALSE.
     176           END IF
     177         ENDDO
     178 C       以下进行的是根据输入信息计算出单元节点的坐标。
     179         I=1
     180         DO WHILE (I.LE.NELEM)
     181           INODE=1
     182           DO WHILE (INODE.LE.NNODE)
     183             NODST =LNODS(INODE,I)
     184             IGASH=INODE+2
     185             IF(IGASH.GT.NNODE) IGASH=1
     186             NDOFN=LNODS(IGASH,I)
     187             MIDPT=INODE+1
     188             NODMD=LNODS(MIDPT,I)
     189             J=1
     190             DO WHILE (J.LE.2)
     191               IF(DABS(COORD(J,NODMD)).LT.1.E-6) THEN
     192                 COORD(J,NODMD)=(COORD(J,NDOFN)+COORD(J,NODST))/2.0
     193               ENDIF
     194               J=J+1
     195             ENDDO
     196             INODE=INODE+2
     197           ENDDO
     198           I=I+1
     199         ENDDO
     200 C       以下进行的是输出单元节点的坐标信息。
     201         WRITE(6,6400)
     202         I=1
     203         DO WHILE (I.LE.NPOIN)
     204           WRITE(6,6500) I,(COORD(J,I),J=1,2)
     205           I=I+1
     206         ENDDO
     207 6400    FORMAT(4X,'节点编号',10X,'X坐标',16X,'Y坐标')
     208 6500    FORMAT(2X,I10,F16.5,6X,F16.5)
     209 C       以下进行的是输出单元节点约束代码信息标题。
     210         LOCATECHAR=INDEX(LINECHAR,'输入')
     211         IF(LOCATECHAR.NE.0) THEN
     212           LINECHAR(LOCATECHAR:LOCATECHAR+3)='输出'
     213         ENDIF
     214         WRITE(6,5000) LINECHAR
     215 C       以下进行的是输入单元节点约束代码信息。
     216         NOTREADCHAR=.TRUE.
     217         DO WHILE (NOTREADCHAR)
     218           READ(5,5000) LINECHAR
     219           IF (LINECHAR(1:2).LT.CHARCOMP(1:2)) THEN
     220             READ(LINECHAR,6600) I,IFPRE(I)
     221           ELSE
     222             NOTREADCHAR=.FALSE.
     223           END IF
     224         ENDDO
     225 6600    FORMAT(2I5)
     226 C       以下进行的是输出单元节点约束代码信息。
     227         LINECHAR='节点约束代码信息为一个两位数的阿拉伯数字,其中,'
     228         WRITE(6,5000) LINECHAR
     229         LINECHAR='十位数表示X方向的约束状况,'
     230         NEWLINECHAR='个位数表示Y方向的约束状况,'
     231         LOCATECHAR=LEN_TRIM(LINECHAR)
     232         LOCATECHAR=LOCATECHAR+1
     233         LINECHAR(LOCATECHAR:)=NEWLINECHAR(1:LOCATECHAR)
     234         WRITE(6,5000) LINECHAR
     235         LINECHAR='具体的,0表示自由,1表示固定,2表示给定非零位移。'
     236         WRITE(6,5000) LINECHAR
     237         I=1
     238         DO WHILE (I.LE.NPOIN)
     239           WRITE(6,6700) I,IFPRE(I)
     240           I=I+1
     241         ENDDO
     242 6700    FORMAT(2X,'节点编号为:',I4,13X,'约束代码为:',I4)
     243 C       以下进行的是输入材料的特性参数信息标题。
     244         LINECHAR='以下输出的是材料特性参数(格式为:'
     245         NEWLINECHAR='材料类型编号NMATS,弹性模量E,泊松比μ,厚度t)'
     246         LOCATECHAR=LEN_TRIM(LINECHAR)
     247         LOCATECHAR=LOCATECHAR+1
     248         LINECHAR(LOCATECHAR:)=NEWLINECHAR(1:46)
     249         WRITE(6,5000) LINECHAR
     250 C       以下进行的是输入材料的特性参数。
     251         NUMBERREAD=1
     252         DO WHILE (NUMBERREAD.LE.NMATS)
     253           READ(5,*) I,(PROPS(J,I),J=1,3)
     254           WRITE(6,6800) I
     255           WRITE(6,6900) (PROPS(J,I),J=1,3)
     256           NUMBERREAD=NUMBERREAD+1
     257         ENDDO
     258 6800    FORMAT(2X,'材料类型编号为:',I2,'  的特性参数为:')
     259 6900    FORMAT(2X,1PE13.3,1PE13.3,1PE13.3)
     260 C       以下进行的是对输入和计算出的数据进行检验。
     261         IERROR=1
     262         DO WHILE (IERROR.LE.6)
     263           NEROR(IERROR)=0
     264           IERROR=IERROR+1
     265         ENDDO
     266 C       以下进行的是对输入和计算出的单元节点坐标进行检验。
     267         IPOIN=1
     268         DO WHILE (IPOIN.LE.NPOIN)
     269           KPOIN=IPOIN-1
     270           JPOIN=1
     271           DO WHILE (JPOIN.LE.KPOIN)
     272             J=1
     273             DO WHILE (J.LE.2)
     274               IF(COORD(J,IPOIN).NE.COORD(J,JPOIN)) GOTO 200
     275               J=J+1
     276             ENDDO
     277             NEROR(1)=NEROR(1)+1
     278             WRITE(6,7000) IPOIN,JPOIN
     279             JPOIN=JPOIN+1
     280           ENDDO
     281 200       CONTINUE
     282           IPOIN=IPOIN+1
     283         ENDDO
     284 7000    FORMAT(2X,'坐标错误!节点编号为',I4,' 的坐标等于',I4,' 的坐标')
     285 C       以下进行的是对输入和计算出的材料类型编号进行检验。
     286         I=1
     287         DO WHILE (I.LE.NELEM)
     288           IF(MATNO(I).LE.0.OR.MATNO(I).GT.NMATS) THEN
     289             NEROR(2)=NEROR(2)+1
     290           END IF
     291           I=I+1
     292         ENDDO
     293         IF(NEROR(2).NE.0) THEN
     294           WRITE(6,7100) NEROR(2)
     295         END IF
     296 7100    FORMAT(2X,'  材料类型编号错误,错误个数为',I2,'')
     297 C       以下进行的是对输入和计算出的单元节点总体编号进行检验。
     298         I=1
     299         DO WHILE (I.LE.NELEM)
     300           J=1
     301           DO WHILE (J.LE.8)
     302             IF(LNODS(J,I).LE.0.OR.LNODS(J,I).GT.NPOIN) THEN
     303               NEROR(3)=NEROR(3)+1
     304             END IF
     305             J=J+1
     306           ENDDO
     307           I=I+1
     308         ENDDO
     309         IF(NEROR(3).NE.0) THEN
     310           WRITE(6,7200) NEROR(3)
     311         END IF
     312 7200    FORMAT(2X,'单元节点总体编号错误,错误个数为',I5,'')
     313 C       以下进行的是对输入和计算出的单元节点编号进行检验。
     314         I=1
     315         DO WHILE (I.LE.NPOIN)
     316           KSTAR=0
     317           IELEM=1
     318           DO WHILE (IELEM.LE.NELEM)
     319             KZERO=0
     320             J=1
     321             DO WHILE(J.LE.8)
     322               IF(LNODS(J,IELEM).EQ.I) THEN
     323                 KZERO=KZERO+1
     324                 KSTAR=IELEM
     325               END IF
     326               J=J+1
     327             ENDDO
     328             IF(KZERO.GT.1) THEN
     329               NEROR(4)=NEROR(4)+1
     330               WRITE(6,7300) I,IELEM
     331             END IF
     332             IELEM=IELEM+1
     333           ENDDO
     334           IF(KSTAR.EQ.0)THEN
     335             NEROR(5)=NEROR(5)+1
     336             WRITE(6,7400) I
     337           END IF
     338           I=I+1
     339         ENDDO
     340 7300    FORMAT(2X,'节点编号',I5,' 在单元',I5,' 中重复。')
     341 7400    FORMAT(2X,'总体节点编号',I5,' 在单元中从未出现')
     342 C       以下进行的是对输入的单元节点约束代码进行检验。
     343         I=1
     344         DO WHILE (I.LE.NPOIN)
     345           IF(IFPRE(I).LT.0) THEN
     346             NEROR(6)=NEROR(6)+1
     347           END IF
     348           IF(IFPRE(I).GT.22) THEN
     349             NEROR(6)=NEROR(6)+1
     350           END IF
     351           I=I+1
     352         ENDDO
     353         IF(NEROR(6).NE.0) THEN
     354           WRITE(6,7500) NEROR(6)
     355         END IF
     356 7500    FORMAT(2X,'总体节点编号为',I5,' 的节点约束代码出现错误。')
     357 C       以下进行的是判断出错类型。
     358         KEROR=0
     359         IERROR=1
     360         DO WHILE (IERROR.LE.6)
     361           IF(NEROR(IERROR).NE.0) THEN
     362             WRITE(6,7600) IERROR
     363             KEROR=KEROR+1
     364           END IF
     365           IERROR=IERROR+1
     366         ENDDO
     367 7600    FORMAT(2X,'出现第 ',I1,' 类错误。')
     368 C       以下进行的是判断是否出错,如出错,则中断程序运行,否则返回调用主程序。
     369 7700    FORMAT(2X,'*****在输入数据文件中发现错误。程序运行中断*****')
     370         IF(KEROR.NE.0) THEN
     371           WRITE(6,7700)
     372           STOP '*** 程序运行被中断,这是由于输入数据出现错误引起的。***'
     373         END IF
     374         RETURN
     375         END
     376 C*****************************************************************************
     377 C       这是一个形成单元刚度矩阵的子程序。                                   *
     378 C*****************************************************************************
     379         SUBROUTINE STIF(COORD,PROPS,LNODS,MATNO)
     380         IMPLICIT REAL*8(A-H,O-Z)
     381         DIMENSION COORD(2,1),PROPS(3,1),LNODS(8,1),MATNO(1)
     382         DIMENSION POSGP(3),WEIGP(3),ESTIF(136),ELCOD(2,8),DBMAT(3)
     383         COMMON/SOL/NPOIN,NELEM,NTYPE,NMATS
     384         COMMON/GCOD/GPCOD(2,9)
     385         COMMON/BMDMP/BMATX(3,16),DMATX(3,3)
     386         OPEN(7,FILE='ESTIF',FORM='UNFORMATTED')
     387 C       以下进行的是高斯积分点位置赋值。
     388         POSGP(1)=-DSQRT(0.6D0)
     389         POSGP(2)=0.0
     390         POSGP(3)=DSQRT(0.6D0)
     391 C       以下进行的是加权系数赋值。
     392         WEIGP(1)=5.0/9.0
     393         WEIGP(2)=8.0/9.0
     394         WEIGP(3)=5.0/9.0
     395 C       以下进行的是应力分量个数赋值。
     396         NSTRE=3
     397 C       以下进行的是形成弹性矩阵[D]。
     398         DO 90 IELEM=1,NELEM
     399         WRITE(6,615) IELEM
     400  615    FORMAT(2X,'网格单元编号为:',I5)
     401         LPROP=MATNO(IELEM)
     402         DO 10 I=1,8
     403         LNODE=LNODS(I,IELEM)
     404         DO 10 J=1,2
     405  10     ELCOD(J,I)=COORD(J,LNODE)
     406         YOUNG=PROPS(1,LPROP)
     407         POISS=PROPS(2,LPROP)
     408         THICK=PROPS(3,LPROP)
     409         CALL MODPS(YOUNG,POISS)
     410 C       以下进行的是存放[K]的一维数组赋初值零。
     411         KEVAB=0
     412         DO 20 I=1,16
     413         DO 20 J=1,I
     414         KEVAB=KEVAB+1
     415         ESTIF(KEVAB)=0.0
     416  20     CONTINUE
     417 C       以下进行的是计算积分点处形函数及其导数之值以及对整体坐标的偏导数之值。
     418         KGASP=0
     419         DO 80 IGAUS=1,3
     420         DO 80 JGAUS=1,3
     421         KGASP=KGASP+1
     422         EXISP=POSGP(IGAUS)
     423         ETASP=POSGP(JGAUS)
     424         WRITE(6,705) KGASP
     425  705    FORMAT(6X,'高斯积分点编号为:',I5)
     426         CALL SFR2(EXISP,ETASP)
     427         CALL JACOB2(IELEM,DJACB,KGASP,ELCOD)
     428         DVOLU=DJACB*WEIGP(IGAUS)*WEIGP(JGAUS)*THICK
     429         CALL BMATPS
     430 C       以下进行的是弹性矩阵[D]赋初值零。
     431         KEVAB=0
     432         DO 70 IEVAB=1,16
     433         DO 40 ISTRE=1,NSTRE
     434         DBMAT(ISTRE)=0.0
     435         DO 30 JSTRE=1,NSTRE
     436         DBMAT(ISTRE)=DBMAT(ISTRE)+BMATX(JSTRE,IEVAB)*DMATX(JSTRE,ISTRE)
     437  30     CONTINUE
     438  40     CONTINUE
     439         DO 60 JEVAB=1,IEVAB
     440         KEVAB=KEVAB+1
     441         BTDBM=0.0
     442         DO 50 ISTRE=1,NSTRE
     443         BTDBM=BTDBM+DBMAT(ISTRE)*BMATX(ISTRE,JEVAB)
     444  50     CONTINUE
     445         ESTIF(KEVAB)=ESTIF(KEVAB)+BTDBM*DVOLU
     446  60     CONTINUE
     447  70     CONTINUE
     448  80     CONTINUE
     449         WRITE(7) ESTIF
     450  90     CONTINUE
     451         REWIND 7
     452         RETURN
     453         END
     454 C*****************************************************************************
     455 C       这是一个形成弹性矩阵的子程序。                                       *
     456 C*****************************************************************************
     457         SUBROUTINE MODPS(Y,P)
     458         IMPLICIT REAL*8(A-H,O-Z)
     459         COMMON/SOL/NPOIN,NELEM,NTYPE,NMATS
     460         COMMON/BMDMP/BMATX(3,16),DMATX(3,3)
     461         DO 100 I=1,3
     462         DO 100 J=1,3
     463         DMATX(I,J)=0.0
     464 100     CONTINUE
     465 C       如果NTYPE=1,表示为平面应力问题。
     466         IF(NTYPE.EQ.1) THEN
     467           CONST=Y/(1.0-P*P)
     468           DMATX(1,1)=CONST
     469           DMATX(2,2)=CONST
     470           DMATX(1,2)=CONST*P
     471           DMATX(2,1)=CONST*P
     472           DMATX(3,3)=CONST*(1.0-P)/2.0
     473         ENDIF
     474 C       如果NTYPE=2,表示为平面应变问题。
     475         IF(NTYPE.EQ.2) THEN
     476           CONST=Y*(1.0-P)/((1.0+P)*(1.0-2.0*P))
     477           DMATX(1,1)=CONST
     478           DMATX(2,2)=CONST
     479           DMATX(1,2)=CONST*P/(1.0-P)
     480           DMATX(2,1)=CONST*P/(1.0-P)
     481           DMATX(3,3)=Y/(2.0*(1.0+P))
     482         ENDIF
     483         RETURN
     484         END
     485 C*****************************************************************************
     486 C       这是一个计算形函数当前积分点及形函数对局部坐标的导数值的子程序。     *
     487 C*****************************************************************************
     488         SUBROUTINE SFR2(S,T)
     489         IMPLICIT REAL*8(A-H,O-Z)
     490         COMMON/SD/SHAPE(8),DERIV(2,8)
     491 C       以下进行的是为简化表达式定义一些变量。
     492         S2=S*2.0
     493         T2=T*2.0
     494         SS=S*S
     495         TT=T*T
     496         ST=S*T
     497         STT=S*T*T
     498         SST=S*S*T
     499         ST2=S*T*2.0
     500 C       以下进行的是给形函数赋值。
     501         SHAPE(1)=(-1.0+ST+SS+TT-SST-STT)/4.0
     502         SHAPE(2)=(1.0-T-SS+SST)/2.0
     503         SHAPE(3)=(-1.0-ST+SS+TT-SST+STT)/4.0
     504         SHAPE(4)=(1.0+S-TT-STT)/2.0
     505         SHAPE(5)=(-1.0+ST+SS+TT+SST+STT)/4.0
     506         SHAPE(6)=(1.0+T-SS-SST)/2.0
     507         SHAPE(7)=(-1.0-ST+SS+TT+SST-STT)/4.0
     508         SHAPE(8)=(1.0-S-TT+STT)/2.0
     509 C       以下进行的是给形函数对局部坐标的导数赋值。
     510         DERIV(1,1)=(T+S2-ST2-TT)/4.0
     511         DERIV(1,2)=-S+ST
     512         DERIV(1,3)=(-T+S2-ST2+TT)/4.0
     513         DERIV(1,4)=(1.0-TT)/2.0
     514         DERIV(1,5)=(T+S2+ST2+TT)/4.0
     515         DERIV(1,6)=-S-ST
     516         DERIV(1,7)=(-T+S2+ST2-TT)/4.0
     517         DERIV(1,8)=(-1.0+TT)/2.0
     518         DERIV(2,1)=(S+T2-SS-ST2)/4.0
     519         DERIV(2,2)=(-1.0+SS)/2.0
     520         DERIV(2,3)=(-S+T2-SS+ST2)/4.0
     521         DERIV(2,4)=-T-ST
     522         DERIV(2,5)=(S+T2+SS+ST2)/4.0
     523         DERIV(2,6)=(1.0-SS)/2.0
     524         DERIV(2,7)=(-S+T2+SS-ST2)/4.0
     525         DERIV(2,8)=-T+ST
     526         RETURN
     527         END
     528 C*****************************************************************************
     529 C       这是一个形成雅可比矩阵的子程序。                                     *
     530 C*****************************************************************************
     531         SUBROUTINE JACOB2(IELEM,DJACB,KGASP,ELCOD)
     532         IMPLICIT REAL*8(A-H,O-Z)
     533         DIMENSION XJACM(2,2),XJACI(2,2),ELCOD(2,8)
     534         COMMON/SD/SHAPE(8),DERIV(2,8)
     535         COMMON/CAR/CARTD(2,8)
     536         COMMON/GCOD/GPCOD(2,9)
     537 C       以下进行的是计算当前积分点的整体坐标。
     538         DO 100 I=1,2
     539         GPCOD(I,KGASP)=0.0
     540         DO 100 J=1,8
     541         GPCOD(I,KGASP)=GPCOD(I,KGASP)+ELCOD(I,J)*SHAPE(J)
     542 100     CONTINUE
     543 C       以下进行的是形成雅可比矩阵[J]的各元素。
     544         DO 200 I=1,2
     545         DO 200 J=1,2
     546         XJACM(I,J)=0.0
     547         DO 200 K=1,8
     548         XJACM(I,J)=XJACM(I,J)+DERIV(I,K)*ELCOD(J,K)
     549 200     CONTINUE
     550 C       以下进行的是计算雅可比行列式┃J┃的值。
     551         DJACB=XJACM(1,1)*XJACM(2,2)-XJACM(1,2)*XJACM(2,1)
     552         WRITE(6,6000) DJACB
     553 6000    FORMAT(14X,'雅可比行列式┃J┃的值为:',F12.5)
     554         IF(DJACB.LT.1.E-6)THEN
     555         WRITE(6,6100) IELEM
     556 6100    FORMAT('单元编号为:',I4,'  的雅可比行列式的值小于或等于零!')
     557         STOP '****** 程序运行被中断于子程序JACOB2 ******'
     558         END IF
     559 C       以下进行的是形成雅可比矩阵[J]的逆矩阵的各元素。
     560         XJACI(1,1)=XJACM(2,2)/DJACB
     561         XJACI(2,2)=XJACM(1,1)/DJACB
     562         XJACI(1,2)=-XJACM(1,2)/DJACB
     563         XJACI(2,1)=-XJACM(2,1)/DJACB
     564 C       以下进行的是计算形函数对整体坐标的导数。
     565         DO 300 I=1,2
     566         DO 300 K=1,8
     567         CARTD(I,K)=0.0
     568         DO 300 J=1,2
     569         CARTD(I,K)=CARTD(I,K)+XJACI(I,J)*DERIV(J,K)
     570 300     CONTINUE
     571         RETURN
     572         END
     573 C*****************************************************************************
     574 C       这是一个形成应变矩阵的子程序。                                       *
     575 C*****************************************************************************
     576         SUBROUTINE BMATPS
     577         IMPLICIT REAL*8(A-H,O-Z)
     578         COMMON/CAR/CARTD(2,8)
     579         COMMON/SD/SHAPE(8),DERIV(2,8)
     580         COMMON/BMDMP/BMATX(3,16),DMATX(3,3)
     581         COMMON/SOL/NPOIN,NELEM,NTYPE,NMATS
     582         COMMON/GCOD/GPCOD(2,9)
     583 C       以下进行的是应变矩阵[B]赋初值零。
     584         DO 100 I=1,16
     585         DO 100 J=1,3
     586 100     BMATX(J,I)=0.0
     587 C       以下进行的是形成应变矩阵[B]。
     588         NGASH=0
     589         DO 200 I=1,8
     590         MGASH=NGASH+1
     591         NGASH=MGASH+1
     592         BMATX(1,MGASH)=CARTD(1,I)
     593         BMATX(1,NGASH)=0.0
     594         BMATX(2,MGASH)=0.0
     595         BMATX(2,NGASH)=CARTD(2,I)
     596         BMATX(3,MGASH)=CARTD(2,I)
     597         BMATX(3,NGASH)=CARTD(1,I)
     598 200     CONTINUE
     599         RETURN
     600         END
     601 C*****************************************************************************
     602 C       这是一个计算等效节点载荷的子程序。                                   *
     603 C*****************************************************************************
     604         SUBROUTINE LOAD(COORD,LNODS,NLOAD)
     605         IMPLICIT REAL*8(A-H,O-Z)
     606         CHARACTER*80 LINECHAR,NEWLINECHAR
     607         DIMENSION COORD(2,1),LNODS(8,1),NLOAD(1)
     608         DIMENSION ELCOD(2,3),ELOAD(16),POSGP(3),WEIGP(3),NOPRS(3)
     609         DIMENSION PRESS(3,2),PGASH(2),DGASH(2)
     610         COMMON/SOL/NPOIN,NELEM,NTYPE,NMATS
     611         COMMON/SD/SHAPE(8),DERIV(2,8)
     612         OPEN(8,FILE='ELOAD',FORM='UNFORMATTED')
     613 C       以下进行的是高斯积分点位置赋值。
     614         POSGP(1)=-DSQRT(0.6D0)
     615         POSGP(2)=0.0
     616         POSGP(3)=DSQRT(0.6D0)
     617 C       以下进行的是加权系数赋值。
     618         WEIGP(1)=5.0/9.0
     619         WEIGP(2)=8.0/9.0
     620         WEIGP(3)=5.0/9.0
     621 C       以下进行的是输入两行单元受载信息标题。
     622         READ(5,5000) LINECHAR
     623         LOCATECHAR=INDEX(LINECHAR,'输入')
     624         IF(LOCATECHAR.NE.0) THEN
     625           LINECHAR(LOCATECHAR:LOCATECHAR+3)='输出'
     626         ENDIF
     627         WRITE(6,5000) LINECHAR
     628         READ(5,5000) LINECHAR
     629         LOCATECHAR=INDEX(LINECHAR,'输入')
     630         IF(LOCATECHAR.NE.0) THEN
     631         LINECHAR(LOCATECHAR:LOCATECHAR+3)='输出'
     632         ENDIF
     633         WRITE(6,5000) LINECHAR
     634         LOCATECHAR=INDEX(LINECHAR,'=')
     635         LOCATECHAR=LOCATECHAR+1
     636         NEWLINECHAR=LINECHAR(LOCATECHAR:80)
     637         READ(NEWLINECHAR,5200) NUMBER
     638 5000    FORMAT(A)
     639 5200    FORMAT(I5)
     640 C       以下进行的是单元受载边数赋初值零。
     641         DO 10 I=1,NELEM
     642  10     NLOAD(I)=0
     643 C       以下进行的是输入受载网格单元的编号及其受载边数。
     644  755    FORMAT(2X,'网格单元编号为:',I4,',      单元受载边数为:',I3)
     645         DO 20 I=1,NUMBER
     646         READ(5,*) KEL,NEDGE
     647         NLOAD(KEL)=NEDGE
     648         WRITE(6,755) KEL,NLOAD(KEL)
     649  20     CONTINUE
     650         DO 200 IELEM=1,NELEM
     651         NEDGE=NLOAD(IELEM)
     652 C       如果当前单元受载边数为零,则转移到循环的终端语句进行下一个网格单元。
     653         IF(NEDGE.EQ.0) GO TO 200
     654 C       以下进行的是输入单元受载信息标题。
     655         READ(5,5000) LINECHAR
     656         LOCATECHAR=INDEX(LINECHAR,'输入')
     657         IF(LOCATECHAR.NE.0) THEN
     658           LINECHAR(LOCATECHAR:LOCATECHAR+3)='输出'
     659         ENDIF
     660         WRITE(6,5000) LINECHAR
     661 C       以下进行的是单元等效节点载荷列阵赋初值零。
     662         DO 50 I=1,16
     663         ELOAD(I)=0.0
     664  50     CONTINUE
     665 C       以下进行的是输入受载边三个节点的总体编号及当前受载边均布载荷σ和τ。
     666         DO 160 IEDGE=1,NEDGE
     667         READ(5,*) (NOPRS(I),I=1,3)
     668         READ(5,*) SGMAR,TAU
     669 C       如果均布载荷为零,则输入三个节点的法向载荷σ(1,2,3)及切向载荷τ(1,2,3)。
     670         IF(ABS(SGMAR).LT.1.D-8.AND.ABS(TAU).LT.1.D-8) THEN
     671         READ(5,*) ((PRESS(J,I),J=1,3),I=1,2)
     672         ELSE
     673 C       如果均布载荷不为零,则给三个节点赋值。
     674         DO 60 I=1,3
     675         PRESS(I,1)=SGMAR
     676         PRESS(I,2)=TAU
     677  60     CONTINUE
     678         END IF
     679 C       给当前受载边三个节点坐标赋值。
     680         DO 100 I=1,3
     681         LNODE=NOPRS(I)
     682         DO 100 J=1,2
     683         ELCOD(J,I)=COORD(J,LNODE)
     684  100    CONTINUE
     685         T=-1.0
     686         DO 150 IGAUS=1,3
     687         S=POSGP(IGAUS)
     688         CALL SFR2(S,T)
     689         DO 110 J=1,2
     690         PGASH(J)=0.0
     691         DGASH(J)=0.0
     692 C       以下进行的是计算当前积分点的σ和τ及偏导数在当前积分点的值。
     693         DO 110 I=1,3
     694         PGASH(J)=PGASH(J)+PRESS(I,J)*SHAPE(I)
     695         DGASH(J)=DGASH(J)+ELCOD(J,I)*DERIV(1,I)
     696  110    CONTINUE
     697         DVOLU=WEIGP(IGAUS)
     698         PXCOM=DGASH(1)*PGASH(2)-DGASH(2)*PGASH(1)
     699         PYCOM=DGASH(1)*PGASH(1)+DGASH(2)*PGASH(2)
     700 C       查找当前受载边的第I个节点是当前单元的第几个节点,查找结果为第I个节点。
     701         DO 120 I=1,8
     702         NLOCA=LNODS(I,IELEM)
     703         IF(NLOCA.EQ.NOPRS(1)) GO TO 130
     704  120    CONTINUE
     705  130    J=I+2
     706         KOUNT=0
     707         DO 140 K=I,J
     708         KOUNT=KOUNT+1
     709         N=(K-1)*2+1
     710         M=N+1
     711 C       如果单元节点局部编号大于8,则应等于1。
     712         IF(K.GT.8)THEN
     713         N=1
     714         M=2
     715         END IF
     716 C       以下进行的是累加得到当前单元的等效节点载荷。
     717         ELOAD(N)=ELOAD(N)+SHAPE(KOUNT)*PXCOM*DVOLU
     718         ELOAD(M)=ELOAD(M)+SHAPE(KOUNT)*PYCOM*DVOLU
     719  140    CONTINUE
     720  150    CONTINUE
     721  160    CONTINUE
     722         WRITE(6,795) ELOAD
     723  795    FORMAT(2X,'单元等效载荷列阵为:'/4(1P4E15.5/))
     724         WRITE(8)ELOAD
     725  200    CONTINUE
     726         RETURN
     727         END
     728 C*****************************************************************************
     729 C       这是一个形成整体刚度矩阵和整体载荷列阵的单元组集子程序。             *
     730 C*****************************************************************************
     731         SUBROUTINE ASEM(V,A,LNODS,IFPRE,NLOAD,MAXA)
     732         IMPLICIT REAL*8(A-H,O-Z)
     733         DIMENSION V(1),A(1)
     734         DIMENSION LNODS(8,1),IFPRE(1),NLOAD(1),MAXA(1)
     735         DIMENSION NCODF(2),ESTIF(136),ELOAD(16)
     736         COMMON/SOL/NPOIN,NELEM,NTYPE,NMATS
     737         MAXA(1)=1
     738         DO 100 IPOIN=1,NPOIN
     739         KMIN=NPOIN+1
     740         DO 40 IELEM=1,NELEM
     741         DO 10 I=1,8
     742         LNODE=LNODS(I,IELEM)
     743         IF(LNODE.EQ.IPOIN)GO TO 20
     744  10     CONTINUE
     745         GO TO 40
     746  20     CONTINUE
     747         DO 30 I=1,8
     748         LNODE=LNODS(I,IELEM)
     749         IF(LNODE.GE.KMIN)GO TO 30
     750         KMIN=LNODE
     751  30     CONTINUE
     752  40     CONTINUE
     753         KHIGH=(IPOIN-KMIN)*2
     754         DO 60 J=1,2
     755         KDOFN=(IPOIN-1)*2+J+1
     756         MAXA(KDOFN)=MAXA(KDOFN-1)+KHIGH+J
     757  60     CONTINUE
     758  100    CONTINUE
     759         NN=NPOIN*2
     760         NNM=NN+1
     761         NWK=MAXA(NNM)-1
     762         WRITE(6,735) NWK
     763  735    FORMAT(2X,'剖面元素之和=',I7)
     764         DO 120 IWK=1,NWK
     765         A(IWK)=0.0
     766  120    CONTINUE
     767         DO 130 IN=1,NN
     768  130    V(IN)=0.0
     769         DLARG=1.0D+15
     770         REWIND 8
     771         DO 300 IELEM=1,NELEM
     772         WRITE(6,135) IELEM
     773  135    FORMAT(2X,'网格单元编号为:',I5)
     774         READ(7) ESTIF
     775         IF(NLOAD(IELEM).GT.0)THEN
     776         READ(8) ELOAD
     777         END IF
     778         DO 280 INODE=1,8
     779         LNODI=LNODS(INODE,IELEM)
     780         ICODF=IFPRE(LNODI)
     781         NCODF(1)=ICODF/10
     782         NCODF(2)=ICODF-NCODF(1)*10
     783         DO 260 IDOFN=1,2
     784         IEVAB=(INODE-1)*2+IDOFN
     785         ICOLN=(LNODI-1)*2+IDOFN
     786         DO 240 JNODE=1,8
     787         LNODJ=LNODS(JNODE,IELEM)
     788         DO 220 JDOFN=1,2
     789         JEVAB=(JNODE-1)*2+JDOFN
     790         JROW=(LNODJ-1)*2+JDOFN
     791         IF(JROW.GT.ICOLN)GO TO 220
     792         IF(JEVAB.GT.IEVAB)THEN
     793         KEVAB=JEVAB*(JEVAB-1)/2+IEVAB
     794         ELSE
     795         KEVAB=IEVAB*(IEVAB-1)/2+JEVAB
     796         END IF
     797         LDIS=MAXA(ICOLN)+(ICOLN-JROW)
     798         A(LDIS)=A(LDIS)+ESTIF(KEVAB)
     799  220    CONTINUE
     800  240    CONTINUE
     801         IF(NLOAD(IELEM).GT.0)THEN
     802         V(ICOLN)=V(ICOLN)+ELOAD(IEVAB)
     803         END IF
     804         IF(NCODF(IDOFN).EQ.0)GO TO 260
     805         KEVAB=IEVAB*(IEVAB+1)/2
     806         LDIS=MAXA(ICOLN)
     807         A(LDIS)=A(LDIS)+DLARG*ESTIF(KEVAB)
     808  260    CONTINUE
     809  280    CONTINUE
     810  300    CONTINUE
     811 C*******
     812 C   ENTER GIVED DISPLACEMENTS
     813 C*******
     814         DO 400 I=1,NPOIN
     815         ICODF=IFPRE(I)
     816         NCODF(1)=ICODF/10
     817         NCODF(2)=ICODF-NCODF(1)*10
     818         DO 320 J=1,2
     819         IF(NCODF(J).EQ.2)THEN
     820 C*******
     821         READ(5,*) X
     822 C*******
     823         ICOLN=(I-1)*2+J
     824         LDIS=MAXA(ICOLN)
     825         V(ICOLN)=A(LDIS)*X
     826         END IF
     827  320    CONTINUE
     828  400    CONTINUE
     829         RETURN
     830         END
     831 C*****************************************************************************
     832 C       这是一个求解结构平衡方程组的子程序。                                 *
     833 C*****************************************************************************
     834         SUBROUTINE SOLVE(V,A,MAXA)
     835         IMPLICIT REAL*8(A-H,O-Z)
     836         DIMENSION V(1),A(1),MAXA(1)
     837         COMMON/SOL/NPOIN,NELEM,NTYPE,NMATS
     838         K=0
     839         NN=NPOIN*2
     840         NNM=NN+1
     841         NWK=MAXA(NNM)-1
     842         DO 640 N=1,NN
     843         KN=MAXA(N)
     844         KL=KN+1
     845         KU=MAXA(N+1)-1
     846         KH=KU-KL
     847         IF(KH)610,590,550
     848  550    K=N-KH
     849         IC=0
     850         KLT=KU
     851         DO 580 J=1,KH
     852         IC=IC+1
     853         KLT=KLT-1
     854         KI=MAXA(K)
     855         ND=MAXA(K+1)-KI-1
     856         IF(ND)580,580,560
     857  560    KK=MIN(IC,ND)
     858         C=0
     859         DO 570 L=1,KK
     860         M1=KI+L
     861         M2=KLT+L
     862  570    C=C+A(M1)*A(M2)
     863         A(KLT)=A(KLT)-C
     864  580    K=K+1
     865  590    K=N
     866         B=0.0
     867         DO 600 KK=KL,KU
     868         K=K-1
     869         KI=MAXA(K)
     870         C=A(KK)/A(KI)
     871         B=B+C*A(KK)
     872  600    A(KK)=C
     873         A(KN)=A(KN)-B
     874  610    IF(A(KN)) 620,620,640
     875  620    WRITE(6,2000) N,A(KN)
     876         STOP
     877  640    CONTINUE
     878 C********
     879 C   REDUCE RIGHT--HAND--SIDE LOAD VECTOR
     880 C********
     881  650    CONTINUE
     882         DO 680 N=1,NN
     883         KL=MAXA(N)+1
     884         KU=MAXA(N+1)-1
     885         KUL=KU-KL
     886         IF(KUL)680,660,660
     887  660    K=N
     888         C=0.0
     889         DO 670 KK=KL,KU
     890         K=K-1
     891  670    C=C+A(KK)*V(K)
     892         V(N)=V(N)-C
     893  680    CONTINUE
     894 C*******
     895 C   BACK-SUBSTITUTE
     896 C********
     897         DO 700 N=1,NN
     898         K=MAXA(N)
     899         V(N)=V(N)/A(K)
     900  700    CONTINUE
     901         IF(NN.EQ.1)GO TO 740
     902         N=NN
     903         DO 730 L=2,NN
     904         KL=MAXA(N)+1
     905         KU=MAXA(N+1)-1
     906         KUL=KU-KL
     907         IF(KUL)730,710,710
     908  710    K=N
     909         DO 720 KK=KL,KU
     910         K=K-1
     911  720    V(K)=V(K)-A(KK)*V(N)
     912  730    N=N-1
     913  740    CONTINUE
     914  2000   FORMAT(//10X,'***** 停止运行!系数矩阵非正定!*****'//'NON
     915      +  POSITIVE PIVOT FOR EQUATION'I4//' PIVOT=',E20.12)
     916 C********
     917 C  OUTPUT DISPLACEMENT
     918 C********
     919         WRITE(6,903)
     920  903    FORMAT(//80('=')/36X,'移动输出'/80('=')//)
     921         WRITE(6,905)
     922  905    FORMAT(32X,'X方向',10X,'Y方向')
     923         M2=0
     924         DO 1000 I=1,NPOIN
     925         M1=M2+1
     926         M2=M1+1
     927  1000   WRITE(6,915)I,(V(J),J=M1,M2)
     928  915    FORMAT(2X,'高斯积分点编号为:',I5,1PE16.5,1PE16.5)
     929         RETURN
     930         END
     931 C*****************************************************************************
     932 C       这是一个计算单元应力的子程序。                                       *
     933 C*****************************************************************************
     934         SUBROUTINE STRE(COORD,PROPS,V,LNODS,MATNO)
     935         IMPLICIT REAL*8(A-H,O-Z)
     936         CHARACTER*80 LINECHAR
     937         DIMENSION COORD(2,1),PROPS(3,1),V(1),LNODS(8,1),MATNO(1)
     938         DIMENSION POSGP(3),ELCOD(2,8)
     939         DIMENSION ELDIS(16),BE(3),S(3),SP(2)
     940         COMMON/SOL/NPOIN,NELEM,NTYPE,NMATS
     941         COMMON/BMDMP/BMATX(3,16),DMATX(3,3)
     942         COMMON/GCOD/GPCOD(2,9)
     943         POSGP(1)=-DSQRT(0.6D0)
     944         POSGP(2)=0.0
     945         POSGP(3)=DSQRT(0.6D0)
     946         WRITE(6,616)
     947 616     FORMAT(80('=')/26X,'以下是高斯积分点的应力输出'/80('=')/)
     948         DO 90 IELEM=1,NELEM
     949         WRITE(6,636) IELEM
     950 636     FORMAT(2X,'网格单元编号为:',I5)
     951         LPROP=MATNO(IELEM)
     952         DO 20 I=1,8
     953         LNODE=LNODS(I,IELEM)
     954         LDOFN=LNODE*2-2
     955         DO 10 J=1,2
     956         IEVAB=I*2-2+J
     957         MDOFN=LDOFN+J
     958         ELDIS(IEVAB)=V(MDOFN)
     959         ELCOD(J,I)=COORD(J,LNODE)
     960 10      CONTINUE
     961 20      CONTINUE
     962         YOUNG=PROPS(1,LPROP)
     963         POISS=PROPS(2,LPROP)
     964         THICK=PROPS(3,LPROP)
     965         CALL MODPS(YOUNG,POISS)
     966         KGASP=0
     967         DO 80 IGAUS=1,3
     968         DO 80 JGAUS=1,3
     969         KGASP=KGASP+1
     970         EXISP=POSGP(IGAUS)
     971         ETASP=POSGP(JGAUS)
     972         CALL SFR2(EXISP,ETASP)
     973         CALL JACOB2(IELEM,DJACB,KGASP,ELCOD)
     974         CALL BMATPS
     975         DO 40 I=1,3
     976         BE(I)=0.0
     977         DO 30 J=1,16
     978         BE(I)=BE(I)+BMATX(I,J)*ELDIS(J)
     979 30      CONTINUE
     980 40      CONTINUE
     981         DO 60 L=1,3
     982         S(L)=0.0
     983         DO 50 J=1,3
     984         S(L)=S(L)+DMATX(L,J)*BE(J)
     985 50      CONTINUE
     986 60      CONTINUE
     987         WRITE(6,755) KGASP
     988 755     FORMAT(/2X,'高斯积分点的编号为:',I2)
     989         LINECHAR='高斯积分点的坐标为:'
     990         WRITE(6,775) LINECHAR,GPCOD(1,KGASP),GPCOD(2,KGASP)
     991 775     FORMAT(2X,A26,' X=',F9.3,5X,'Y=',F9.3)
     992 C *****
     993         XA=(S(1)+S(2))*0.5
     994         XI=(S(1)-S(2))*0.5
     995         XE=S(3)
     996         X0=DSQRT(XI*XI+XE*XE)
     997         SP(1)=XA+X0
     998         SP(2)=XA-X0
     999 C ******
    1000         WRITE(6,815)
    1001 815     FORMAT(14X,'正应力σx',6X,'正应力σy',7X,'剪应力τ')
    1002         WRITE(6,835) S
    1003 835     FORMAT(10X,1PE13.4,2X,1PE13.4,2X,1PE13.4)
    1004         WRITE(6,855)
    1005 855     FORMAT(14X,'主应力σ1',6X,'主应力σ2')
    1006         WRITE(6,875) SP
    1007 875     FORMAT(10X,1PE13.4,2X,1PE13.4)
    1008 80      CONTINUE
    1009 90      CONTINUE
    1010         RETURN
    1011         END
    1012 
  • 相关阅读:
    前端小白之每天学习记录php(2)数据库操作软件
    前端小白之每天学习记录简单的原生js路由
    Dualembedded LSTM for QA match: 双embedding的LSTM聊天匹配式模型
    歌词爬虫
    Web第六周作业:css单位
    一篇无厘头的Roadmap
    web第二周作业:Register Form
    Web第六周作业:position.fixed vs sticky
    Web第六周作业:css颜色表
    Web第三周作业:grid layout
  • 原文地址:https://www.cnblogs.com/zhubinglong/p/6556063.html
Copyright © 2011-2022 走看看