数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 397|回复: 8

[软件] FORTRAN 5.1 同样没有解决640K 内存上限问题

[复制链接]
发表于 2024-9-30 11:41:36 | 显示全部楼层 |阅读模式
共 6 张软盘,安装后测试,问题依然存在。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
发表于 2024-9-30 12:24:19 | 显示全部楼层
是64K,编译器不支持。
如果是DOS的640K限制,倒是可以用EMS/XMS解决。
回复 支持 反对

使用道具 举报

发表于 2024-9-30 16:33:49 | 显示全部楼层
楼主能把源程序也发一下吗,我也编译一下试试。
回复 支持 反对

使用道具 举报

发表于 2024-10-6 15:59:33 | 显示全部楼层
看来玩这个的也不少,我骨灰级玩家。还少这个版本谁有?
DIGITAL Visual Fortran 5.0
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-6 20:47:29 | 显示全部楼层
michaelx007 发表于 2024-9-30 16:33
楼主能把源程序也发一下吗,我也编译一下试试。

        IMPLICIT REAL*8 (A-H,O-Z)

        COMMON /XN/ XR(2,350),XG(2,600),V(650),FORCE(20),FSMAX(20,60)
        COMMON /XK/ NOD(3,600),NKN(650),NPORE(600),NPOR(600)
        COMMON /XY/ D(4,4,600),B1(6,600),BM(4,6),SK(6,6),DEM(4,4),
     1              DSK(3,6),FR(6),FT(6),SS(4),AREA(600),A1(3,600)
        COMMON /YX/ STRAN(4,600),STRES(4,600),DSRN(4,600),RATIO(600),
     1   DSTS(4,600),EQSTS(600),EQSRN(600),ST(350),PFUNC(600),YP1(600),
     2   DEQSRN(600),DSR(350),THETA0(600),DNSRN(4,350),EQST1(600),
     3   DNSTS(4,350),CT(600)
        COMMON /YN/ NELEM,NPOIN,MP,NSTEP
        COMMON /IB/ ISORN,IND,ILARGE,IEXACT,NX,NY
        COMMON /DT/ THICK,YOUNG,G,G1,ALPH,YP,AN,COEF,POIS
        COMMON /DU/ DU,UINPUT
        COMMON /YZ/ PREX(2,350),ATUSA(600),EVOL(600),ROW,YP0,DEQP
        COMMON /WA/ ALEN,WW,ASRAT
        COMMON /PG/ PREXG(2,600)
        COMMON /AB/ PSTRAN(4,600),DNPSRN(4,350)
        COMMON /DE/ DEN(4,4)
        COMMON /PQ/ PEQSRN(600)
        COMMON /FP/ PFORCE(3000),PSTOKE(3000),PNECK(3000)
        COMMON /FQ/ PFORC1(3000)
        COMMON /CN/ PAI,PAI1,PAI2,AINV3,COMP,COMP1,ANP
        COMMON /AH/ AH(600),AH0(600)
        COMMON /ML/ MF(650),LF(650)
        COMMON /NO/ NON1(650),NON2(650),NON3(650),NON4(650),NONP,NON
     1              ,NONN1(650),NONN2(650),NONN3(650),NONN4(650)
        COMMON /NS/ NSTOP,INTVL,NDATA,NDEFOM
        COMMON /NN/ NPE(600),NPEE(600)
        COMMON /IC/ ICLIM
        COMMON /CH/ CHSTEP,CHECK(20)

        DIMENSION
     1   DSMAX(650,60),DEF(650),DFORC(650),SMAX(650,60),FORC(650),
     2   DATX(4)

        WRITE(6,5)
5      FORMAT(1H ,'PROGRAM-NAME *** SIMPLE GOLDA *** BY MANABU GOTOH',
     1  //1H ,'NUMERICAL ANALY. OF BASIC 2-D OR AXISYM. PROBLEM BY FEM'
     2  //1H ,'***INCREMENTAL ELASTIC-PLASTIC FINITE ELEMENT METHOD***'
     3  //1H ,'NUMERICAL EXAMPLE IS SIMPLE TENSION WITH STICKED EDGE IN
     4  WHICH X & Y OR R & Z-AXES ARE ASSUMED GEOMETRICAL',
     5 /1H ,'SYMMETRY, THEREFORE ONLY A QUARTER PART IS ANALYZED'//)

        CALL CONST(PAI,PAI1,PAI2,AINV3,CC1,CC2)

        CALL INPUT

        IF(ISORN.EQ.1) THICK=1.0D0

        CALL INWRIT(IND,ILARGE,ISORN,ROW)

        NSTEP=0
        IP=1
        IPP=1
        IIP=1
        ICHE=1

        CALL SETINI(PUN,EXTEN,EINV,YPINV,PMAX,AREA0,VOLM0,VOLTOT,NUM
     1              ,NUM1)
        PUNCH=PUN

1000   CONTINUE

        DO 10 I=1,MP
        FORC(I)=0.D0
        DO 20 J=1,NONP
20     SMAX(I,J)=0.D0
10     CONTINUE

        DO 900 L=1,NELEM

        CALL DPMAT(L,ISORN,IND)
        CALL BMAT(L,ISORN,EXTEN,PUN)
        CALL SKMAT(L,ILARGE,ISORN,IEXACT,CC1,CC2)
        DO 30 I=1,3
        M2=2*NOD(I,L)-2
        M=2*(I-1)
        DO 40 K=1,3
        M1=2*NOD(K,L)-2
        N=2*(K-1)
        DO 50 I1=1,2
        J1=M2+I1
        DO 50 K1=1,2

        J2=M1+K1
        J3=J1-J2+NON
        II=K1+N
        IJ=I1+M
        SMAX(J2,J3)=SMAX(J2,J3)+SK(II,IJ)
50     CONTINUE
40     CONTINUE
30     CONTINUE

900    CONTINUE

        DO 80 I=1,NUM
        K=MF(I)
        DO 90 J=1,NUM1
        L=LF(J)
        JJ=L-K+NON
        IF(JJ.GT.NONP) GO TO 80
        IF(JJ.LE.0) GO TO 90
        FORC(K)=FORC(K)-SMAX(K,JJ)*V(L)
90     CONTINUE
80     CONTINUE
        DO 100 I=1,2*NX+2
        DO 100 J=1,NONP
        FSMAX(I,J)=SMAX(I,J)
100    CONTINUE

        DO 110 I=1,NUM
        L=MF(I)
        DFORC(I)=FORC(L)
        MNN=0
        DO 120 J=1,NON
        J1=NON-J+1
        K=L-NON+J1
        IF(K.LE.0) GO TO 120
        IF(NKN(K).EQ.1) GO TO 120
        MNN=MNN+1
        JN=J-MNN
        JJ=J1+JN
        DSMAX(I,JJ)=SMAX(L,J1)
120    CONTINUE
        MNN=0
        DO 130 J=NON+1,NONP
        K=L-NON+J
        IF(K.GT.MP) GO TO 110
        IF(NKN(K).EQ.1) GO TO 130
        MNN=MNN+1
        JN=J-NON-MNN
        JJ=J-JN
        DSMAX(I,JJ)=SMAX(L,J)
130    CONTINUE
110    CONTINUE

        IM=0
        IN=1
        CALL SOLVE(DSMAX,DEF,DFORC,NUM,IN,IM)

        IF(IN.NE.0) GO TO 160
        WRITE(6,170) IM
        STOP
160    CONTINUE
        DO 180 I=1,NUM
180    V(MF(I))=DEF(I)

        CALL STRESS(ISORN,IND,ILARGE,PMIN)

        NSTEP=NSTEP+1

        CALL LOAD(PUN,PUNCH,EXTEN,VNECK,AREA0,VOLM0,VOLTOT,VOLT1,
     1            SPUN,SPPUN,PMAX,UMAX,PMIN)

        NPL=0
        DO 210 L=1,NELEM
        IF(NPORE(L).NE.1) GO TO 210
        NPL=NPL+1
        NPE(NPL)=L
210    CONTINUE

        NPM=0
        DO 220 I=1,NELEM
        IF(NPORE(I).NE.2) GO TO 220
        NPM=NPM+1
        NPEE(NPM)=I
220    CONTINUE

        CALL NODST

        IQQ=NSTEP/NDATA
        IF(IQQ.NE.IPP) GO TO 230
        IPP=IPP+1

        CALL SPWRIT(SPUN,PUNCH,SPPUN,VNECK,EXTEN,VOLTOT,NPL,NPM)

230    CONTINUE

        IQ=NSTEP/INTVL
        IF(IP.NE.IQ) GO TO 240
        IP=IP+1

        !CALL DEWRIT

240    CONTINUE

        IIQ=NSTEP/NDEFOM
        IF(IIQ.NE.IIP) GO TO 250
        IIP=IIP+1

250    CONTINUE

        DU=UINPUT
        DO 260 I=1,NX+1
260    V(2*I)=DU

        IF(PSTOKE(NSTEP).LT.CHECK(ICHE).AND.NSTEP.LT.NSTOP) GO TO 1000

        IF(PSTOKE(NSTEP).LT.CHECK(ICHE)) GO TO 500

        N1=NSTEP-1
        N=NSTEP
        P=PSTOKE(N)
        P1=PSTOKE(N1)
        P=(CHECK(ICHE)-P1)/(P-P1)
        EXTEN=PSTOKE(N1)+P*(PSTOKE(N)-PSTOKE(N1))
        DO 270 I=1,2
        DO 270 J=1,NPOIN
270    PREX(I,J)=PREX(I,J)+P*(XR(I,J)-PREX(I,J))
        DO 280 I=1,2
        DO 280 L=1,NELEM
280    PREXG(I,L)=PREXG(I,L)+P*(XG(I,L)-PREXG(I,L))

        DATX(1)=PFORCE(N1)+P*(PFORCE(N)-PFORCE(N1))
        DATX(2)=PNECK(N1)+P*(PNECK(N)-PNECK(N1))
        DATX(3)=VOLT1+P*(VOLTOT-VOLT1)
        DATX(4)=PFORC1(N1)+P*(PFORC1(N)-PFORC1(N1))

        WRITE(6,290) EXTEN
        WRITE(6,300) (DATX(I),I=1,3)
        WRITE(6,310) DATX(4)


        ICHE=ICHE+1
        IF(ICHE.GT.ICLIM.OR.NSTEP.GE.NSTOP) GO TO 500

        GO TO 1000

500    CONTINUE

        WRITE(6,320) NSTEP
        WRITE(6,330) UMAX,PMAX

70     FORMAT(1H,'USED TIME IN MAKING STIFFNESS MATRIX(MMSEC)= ',I8/)
150    FORMAT(1H,'CHECK TIME1 (MMSEC)=',I8/)
170    FORMAT(1H ,'ZERO U(I,I) IN SOLVE AT I=',I4//)
200    FORMAT(1H, 'VOLVER TIME (MMSEC)=',I8/)
290    FORMAT(//1H ,'VALUES AT EXTENSION-RATIO = ',D15.7//)
300    FORMAT(1H ,'SIGWAVE/SIGY=',D15.7,2X,'VNECK/W= ',D15.7,2X,
     1    'VOL/VOL0= ',D15.7/)
310    FORMAT(1H ,'SIGWAVE/SIGY FROM NODAL FORCE =',D15.7/)     
320    FORMAT(1H  ,'STEP NUMBER AT CALCULATION-STOP = ',2X,I4/)
330    FORMAT(1H ,'U/L AT FORCE-MAX = ',D15.7,5X,'MAXIMUM FORCE = ',
     1   D15.7/)
        STOP
        END

        SUBROUTINE INPUT
        IMPLICIT REAL*8 (A-H,O-Z)
        COMMON /YN/ NELEM,NPOIN,MP,NSTEP
        COMMON /DT/ THICK,YOUNG,G,G1,ALPH,YP,AN,COEF,POIS
        COMMON /DU/ DU,UINPUT
        COMMON /YZ/ PREX(2,350),ATUSA(600),EVOL(600),ROW,YP0,DEQP
        COMMON /WA/ ALEN,WW,ASRAT
        COMMON /IB/ISORN,IND,ILARGE,IEXACT,NX,NY
        COMMON /NS/ NSTOP,INTVL,NDATA,NDEFOM
        COMMON /IC/ ICLIM
        COMMON /CH/ CHSTEP,CHECK(20)

        !READ(5,2) NSTOP
        NSTOP = 2000

        !READ(5,3) ISORN,IND,ILARGE,IEXACT,NX,NY
        ISORN = 0
        IND = 0
        ILARGE = 1        
        IEXACT = 1
        NX = 6
        NY = 24

        !READ(5,4) NELEM,NPOIN
        NELEM = 576
        NPOIN = 319

        !READ(5,5) YOUNG,POIS,COEF,AN,YP0,EPSY
        YOUNG = 0.2D6
        POIS = 0.29D0
        COEF = 0.0D0
        AN = 0.625D-1
        YP0 = 0.4D3
        EPSY = 0.2D-2

        !READ(5,6) ROW
        ROW = 0.0

        !READ(5,7) DEQP,ALPH
        DEQP = 0.2D-2
        ALPH = 0.99999D0        

        !READ(5,8) ALEN,ASRAT,THICK
        ALEN = 0.1875D2
        ASRAT = 3.0
        THICK = 0.1D1


        !READ(5,7) DU,UINPUT
        DU = 0.1D-1
        UINPUT = 0.1D-1


        !READ(5,2) IMP
        IMP = 0

        !READ(5,2) ICLIM
        ICLIM = 10

        !READ(5,6) CHSTEP
        CHSTEP = 0.02

        !READ(5,2) INPRIN
        INPRIN = 0

        !READ(5,2) INTVL
        INTVL = 100

        !READ(5,2) NDATA
        NDATA = 100

        !READ(5,2) NDEFOM
        NDEFOM = 100

        MP=2*NPOIN
        YP=YP0*EPSY**(-AN)
        WW=ALEN/ASRAT
        WRITE(6,10)
        WRITE(6,11) YOUNG,POIS,YP,YP0,COEF,AN,EPSY
        WRITE(6,12) NELEM,NPOIN,MP
        WRITE(6,13) NX,NY
        WRITE(6,14) DEQP,ALPH
        WRITE(6,15) DU,UINPUT
        WRITE(6,16) ALEN,WW,THICK
        WRITE(6,17) IMP

        CALL COORD(IMP,INPRIN)

2      FORMAT(I6)
3      FORMAT(6I4)
4      FORMAT(2I4)
5      FORMAT(6F12.0)
6      FORMAT(F12.0)
7      FORMAT(2F12.0)
8      FORMAT(3F12.0)
10     FORMAT(1H ,'YOUNG=YOUNGS MODU.,YP=PLAS.DOEF.,COEF=OFFSET STRAIN,
     1  AN=N-VALUE AND EPSY=INITIAL PLAST.STRAIN;',/1H ,2X,'YOUNG',10X,
     2   'POIS',11X,'YP',13X,'YP0',12X,'COEF',11X,'AN',13X,'EPSY')
11     FORMAT(1H ,7D15.7)
12     FORMAT(1H ,'NUMBER OF ELEMENTS='1X,I4,5X,'NUMBER OF NODES=',1X,
     1  I4,5X,'TOTAL DEGREE OF FREEDOM=',1X,I4/)
13     FORMAT(1H ,'NX AND NY (DIVISION NUMBER IN X & Y) =  ',2I6/)
14     FORMAT(1H ,'MAXIMU INCREMENT OF EQUI-STRAIN DEQP=',D15.7
     1  ,5X,'LATITUDE PARA. OF YIELDING ALPH = ',D15.7/)
15   FORMAT(1H ,'INITIAL DISPLACEMENT= ',D13.5,5X,'CURRENT DISPLACE-
     1  MENT  INCREMENT UINPUT =',D13.5/)
16     FORMAT(1H ,'SPECIMEN LENGTH & WIDTH IN HALF AND THICKNESS(MM) ='
     1   ,3D13.5//)
17     FORMAT(1H ,'ELEMENT DIVISION PATTERN PARA. IMP=',I8/)
        RETURN
        END

        SUBROUTINE INWRIT(ID,IL,IS,RW)
        IMPLICIT REAL*8 (A-H,O-Z)
        IF(ID.NE.0) GO TO 10
        WRITE(6,20)
        GO TO 30
10     WRITE(6,40) ID
        IF(ID.NE.4) GO TO 50
        WRITE(6,60)
50     CONTINUE
        IF(ID.NE.5) GO TO 30
        WRITE(6,70)
30     CONTINUE
        IF(IL.EQ.1) GO TO 80
        WRITE(6,90)
        GO TO 100
80     WRITE(6,110)
100    CONTINUE
        IF(IS.EQ.1) GO TO 120
        IF(IS.EQ.2) GO TO 130
        WRITE(6,140)
        GO TO 150
120    WRITE(6,160)
        GO TO 150
130    CONTINUE
        WRITE(6,170)
150    CONTINUE
        WRITE(6,180)
        IF(ID.EQ.0) GO TO 190
        WRITE(6,200) RW
190    CONTINUE

20     FORMAT(1H ,'J2-FLOW THEORY'/)
40     FORMAT(1H ,'J2G OR J2N CONST. EQUATION WITH IND=',I4/)
60     FORMAT(1H ,'J2G-CONSTITUTIVE EQUATION IS USED'/)
70     FORMAT(1H ,'NON-NORMALITY CONSTITUTE EQUATION IS USED'/)
90     FORMAT(1H ,'SMALL STRAIN THEORY'/)
110    FORMAT(1H ,'LARGE STRAIN THEORY'/)
140    FORMAT(1H ,'PLANE STRESS STATE'/)
160    FORMAT(1H ,'PLANE STRAIN STATE'/)
170    FORMAT(1H ,'AXI-SYMMETRIC CASE'/)
180    FORMAT(1H ,'SIMPLE TENSION WITH STICKED EDGE AS EXAMPLE'/)
200    FORMAT(1H ,'VERTEX OR NONNORMALITY PARAMETER ROW =',D15.7/)

        RETURN
        END

        SUBROUTINE COORD(IMP,INPRIN)
        IMPLICIT REAL*8 (A-H,O-Z)
        COMMON /XN/ XR(2,350),XG(2,600),V(650),FORCE(20),FSMAX(20,60)
        COMMON /XK/ NOD(3,600),NKN(650),NPORE(600),NPOR(600)
        COMMON /YN/ NELEM,NPOIN,MP,NSTEP
        COMMON /YZ/ PREX(2,350),ATUSA(600),EVOL(600),ROW,YP0,DEQP
        COMMON /WA/ ALEN,WW,ASRAT
        COMMON /PG/ PREXG(2,600)
        COMMON /IB/ ISORN,IND,ILARGE,IEXACT,NX,NY
        COMMON /CN/ PAI,PAI1,PAI2,AINV3,COMP,COMP1,ANP        
        NX1=2*NX+1
        IF(IMP.EQ.2) GO TO 500
        NY1=NY/2
        DX=WW/FLOAT(NX)
        PPP=2.D0/3.D0
        IF(ISORN.NE.0) PPP=23.D0/30.D0
        PPP=1.D0-(1.D0-PPP)*(3.D0/ASRAT)
        DY1=ALEN*PPP/FLOAT(NY1)
        PPP=1.D0/3.D0
        IF(ISORN.NE.0) PPP=7.D0/30.D0
        PPP=PPP*(3.D0/ASRAT)
        DY2=ALEN*PPP/FLOAT(NY1)
        DO 100 I=1,NX+1
        P=DX*FLOAT(I-1)
        IF(I.EQ.1) P=0.D0
        DO 110 J=1,NY+1
        K=I+NX1*(J-1)
        XR(1,K)=P
        IF(I.EQ.NX+1.OR.J.EQ.NY+1) GO TO 110
        K1=I+NX+1+NX1*(J-1)
        XR(1,K1)=P+0.5D0*DX
110    CONTINUE
100    CONTINUE
        DO 120 J=1,NY+1
        IF(J.GT.NY1+1) GO TO 130
        P=DY1*FLOAT(J-1)
        IF(J.EQ.1) P=0.D0
        GO TO 140
130    P=DY1*FLOAT(NY1)+DY2*FLOAT(J-NY1-1)
        IF(J.EQ.NY+1) P=ALEN
140    CONTINUE
        NX2=NX1*(J-1)
        DO 150 I=1,NX+1
        K=I+NX2
        XR(2,K)=ALEN-P
        IF(I.EQ.NX+1.OR.J.EQ.NY+1) GO TO 150
        K1=I+NX+1+NX2
        DY3=DY1*0.5D0
        IF(J.GT.NY1) DY3=DY2*0.5D0
        XR(2,K1)=ALEN-P-DY3
150    CONTINUE
120    CONTINUE
        GO TO 600

500    CONTINUE
        DX=WW/FLOAT(NX)
        DO 160 I=1,NX+1

        P=DX*FLOAT(I-1)
        IF(I.EQ.1) P=0.D0
        IF(I.EQ.NX+1) P=WW
        DO 170 J=1,NY+1
        K=I+NX1*(J-1)
        XR(1,K)=P
170    CONTINUE
160    CONTINUE

        N=6
        C=FLOAT(N)
        CC=LOG(C)
        P=1.D0/FLOAT(NY-1)
        Q=EXP(CC*P)
        Q1=Q**NY
        AY=(Q-1)/(Q1-1)*ALEN
        DO 180 J=1,NY+1
        J1=NPOIN-NX-(J-1)*NX1
        IF(J.NE.1) GO TO 190
        P=0.D0
        GO TO 200
190    CONTINUE
        IF(J.NE.NY+1) GO TO 210
        P=ALEN
        GO TO 200
210    CONTINUE
        AY=AY
        IF(J.NE.2) AY=AY*Q
        P=PP+AY
200    CONTINUE
        DO 220 I=1,NX+1
        I1=J1+I-1
        XR(2,I1)=P
220    CONTINUE
        PP=P
180    CONTINUE
        DO 230 J=1,NY
        J1=NX+2+(2*NX+1)*(J-1)
        DO 230 I=1,NX
        K=J1+I-1
        K1=K-(NX+1)
        K2=K1+1
        K3=K+NX
        K4=K3+1
        XR(1,K)=0.25D0*(XR(1,K1)+XR(1,K2)+XR(1,K3)+XR(1,K4))
        XR(2,K)=0.25D0*(XR(2,K1)+XR(2,K2)+XR(2,K3)+XR(2,K4))
230    CONTINUE

600    CONTINUE
        DO 240 I=1,2
        DO 240 J=1,NPOIN
240    PREX(I,J)=XR(I,J)

        DO 10 I=1,MP
10     NKN(I)=0
        DO 20 I=1,NX+1
        J=2*I
        NKN(J)=1
        NKN(J-1)=1

20     CONTINUE
        DO 30 I=1,NY+1
        J=2*NX1*(I-1)+1
30     NKN(J)=1
        DO 40 I=1,NX+1
        J=2*(NX1*NY+I)
40     NKN(J)=1

        DO 250 I=1,NX
        DO 250 J=1,NY
        J1=(J-1)*4*NX
        K1=J1+I
        K2=J1+I+NX
        K3=J1+I+2*NX
        K4=J1+I+3*NX
        J1=(J-1)*(2*NX+1)
        NOD(1,K1)=J1+I
        NOD(1,K2)=NOD(1,K1)
        NOD(2,K1)=J1+NX+1+I
        NOD(3,K2)=NOD(2,K1)
        NOD(2,K3)=NOD(2,K1)
        NOD(3,K4)=NOD(2,K1)
        NOD(3,K1)=NOD(1,K1)+1
        NOD(1,K3)=NOD(3,K1)
        NOD(2,K2)=J1+2*NX+1+I
        NOD(1,K4)=NOD(2,K2)
        NOD(3,K3)=NOD(2,K2)+1
        NOD(2,K4)=NOD(3,K3)
250    CONTINUE

        DO 260 L=1,NELEM
        DO 270 J=1,2
        SUM=0.D0
        DO 280 I=1,3
280    SUM=SUM+XR(J,NOD(I,L))
        XG(J,L)=SUM*AINV3
        PREXG(J,L)=XG(J,L)
270    CONTINUE
260    CONTINUE

        IF(INPRIN.NE.1) GO TO 400
        WRITE(6,300) ((XR(I,J),I=1,2),J=1,NPOIN)
        WRITE(6,310) ((NOD(I,J),I=1,3),J=1,NELEM)
400    CONTINUE

300    FORMAT(1H ,'INITIAL COORDINATES OF NODES'//(1H ,1P10D13.5))
310    FORMAT(1H ,'NODAL NO. BELONGING TO EACH ELEMENT',//(1H ,30I4))

        RETURN
        END

        SUBROUTINE CONST(A,B,C,D,E,F)
        IMPLICIT REAL*8 (A-H,O-Z)
        A=3.14159265358979D0
        C=A*0.5D0
        D=1.D0/3.D0

        B=A*D
        E=25.D0/48.D0
        F=-27.D0/48.D0
        RETURN
        END

        SUBROUTINE SETINI(PUN,EXTEN,EINV,YPINV,PMAX,AREA0,
     1                    VOLM0,VOLTOT,NUM,NUM1)
        IMPLICIT REAL*8 (A-H,O-Z)

        COMMON /XN/ XR(2,350),XG(2,600),V(650),FORCE(20),FSMAX(20,60)
        COMMON /XY/ D(4,4,600),B1(6,600),BM(4,6),SK(6,6),DEM(4,4),
     1              DSK(3,6),FR(6),FT(6),SS(4),AREA(600),A1(3,600)
        COMMON /YX/ STRAN(4,600),STRES(4,600),DSRN(4,600),RATIO(600),
     1   DSTS(4,600),EQSTS(600),EQSRN(600),ST(350),PFUNC(600),YP1(600),
     2   DEQSRN(600),DSR(350),THETA0(600),DNSRN(4,350),EQST1(600),
     3   DNSTS(4,350),CT(600)
        COMMON /YN/ NELEM,NPOIN,MP,NSTEP
        COMMON /IB/ ISORN,IND,ILARGE,IEXACT,NX,NY
        COMMON /XK/ NOD(3,600),NKN(650),NPORE(600),NPOR(600)
        COMMON /ML/ MF(650),LF(650)
        COMMON /DT/ THICK,YOUNG,G,G1,ALPH,YP,AN,COEF,POIS
        COMMON /DU/ DU,UINPUT
        COMMON /YZ/ PREX(2,350),ATUSA(600),EVOL(600),ROW,YP0,DEQP
        COMMON /WA/ ALEN,WW,ASRAT
        COMMON /PG/ PREXG(2,600)
        COMMON /AB/ PSTRAN(4,600),DNPSRN(4,350)
        COMMON /DE/ DEN(4,4)
        COMMON /PQ/ PEQSRN(600)
        COMMON /CN/ PAI,PAI1,PAI2,AINV3,COMP,COMP1,ANP
        COMMON /AH/ AH(600),AH0(600)
        COMMON /NO/ NON1(650),NON2(650),NON3(650),NON4(650),NONP,NON
     1              ,NONN1(650),NONN2(650),NONN3(650),NONN4(650)
        COMMON /IC/ ICLIM
        COMMON /CH/ CHSTEP,CHECK(20)

        PUN=0.D0
        EXTEN=0.D0
        EINV=1.D0/YOUNG
        COMP=(1.D0-2.D0*POIS)*EINV
        COMP1=1.D0/COMP
        ANP=AN-1.0D0
        YPINV=1.D0/YP0
        PMAX=0.D0
        AREA0=2.D0*WW*THICK
        IF(ISORN.EQ.2) AREA0=PAI*WW*WW
        VOLM0=AREA0*ALEN
        VOLTOT=VOLM0

        CHECK(1)=CHSTEP
        DO 10 I=2,ICLIM
10     CHECK(I)=CHECK(I-1)+CHSTEP

        DO 20 L=1,NELEM
        ATUSA(L)=THICK
        CT(L)=1.D0

        AH(L)=0.D0
        NPORE(L)=0
20     CONTINUE
        DO 30 L=1,NELEM
        PFUNC(L)=1.D0
        DO 30 J=1,3
        A1(J,L)=0.D0
30     CONTINUE

        NUM=0
        NUM1=0
        DO 80 I=1,MP
        IF(NKN(I).EQ.1) GO TO 90
        NUM=NUM+1
        MF(NUM)=I
        GO TO 80
90     CONTINUE
        NUM1=NUM1+1
        LF(NUM1)=I
80     CONTINUE

        DO 100 L=1,NELEM
        THETA0(L)=PAI2
        NPORE(L)=0
        DSRN(4,L)=0.0D0
        PEQSRN(L)=0.D0
        YP1(L)=YP0
        DO 110 I=1,4
110    PSTRAN(I,L)=0.0D0
100    CONTINUE
        DO 120 L=1,NELEM
        EQSRN(L)=0.0D0
        EQSTS(L)=0.0D0
        DO 130 I=1,4
        STRES(I,L)=0.0D0
130    STRAN(I,L)=0.0D0
120    CONTINUE
        DO 140 I=1,2*NX+2
140    FORCE(I)=0.0D0

        DO 150 I=1,MP
150    V(I)=0.0D0
        DO 160 I=1,NX+1
        K=2*I
160    V(K)=DU

        DO 170 I=1,4
        DO 170 J=1,6
170    BM(I,J)=0.0D0

        DO 180 I=1,4
        DO 180 J=1,4
        DEN(I,J)=0.0D0
180    DEM(I,J)=0.0D0

        G=YOUNG*0.5D0/(1.D0+POIS)
        G1=1.D0/G
        DE2=2.D0/(1.D0-2.D0*POIS)
        IF(ISORN.EQ.1) GO TO 190
        IF(ISORN.EQ.2) GO TO 200
        DE1=YOUNG/(1.D0-POIS**2)
        DEM(1,1)=DE1
        DEM(2,2)=DE1
        DEM(1,2)=DE1*POIS
        DEM(2,1)=DEM(1,2)
        DEM(3,3)=G
        GO TO 210
190    CONTINUE
        DE1=G
        DEM(1,1)=(1.D0-POIS)*DE1*DE2
        DEM(2,2)=DEM(1,1)
        DEM(1,2)=POIS*DE1*DE2
        DEM(2,1)=DEM(1,2)
        DEM(3,3)=DE1
210    CONTINUE
        DD=1.D0/(DEM(1,1)*DEM(2,2)-DEM(1,2)**2)
        DEN(1,1)=DEM(2,2)*DD
        DEN(2,2)=DEN(1,1)
        DEN(1,2)=-DEM(1,2)*DD
        DEN(2,1)=DEN(1,2)
        DEN(3,3)=G1
        GO TO 220
200    CONTINUE
        DE1=G*DE2*(1.D0-POIS)
        DE2=G*DE2*POIS
        DE3=G
        DEM(1,1)=DE1
        DEM(1,2)=DE2
        DEM(1,4)=DE2
        DEM(2,2)=DE1
        DEM(2,4)=DE2
        DEM(3,3)=DE3
        DEM(4,4)=DE1
        DE1=EINV
        DE2=-POIS*DE1
        DE3=G1
        DEN(1,1)=DE1
        DEN(1,2)=DE2
        DEN(1,4)=DE2
        DEN(2,2)=DE1
        DEN(2,4)=DE2
        DEN(3,3)=DE3
        DEN(4,4)=DE1
        DO 230 I=2,4,2
        DO 230 J=1,I-1
        DEN(I,J)=DEN(J,I)
230    DEM(I,J)=DEM(J,I)
220    CONTINUE

        DO 240 I=1,MP
        NON1(I)=1
240    NON2(I)=1
        DO 250 L=1,NELEM
        M=NOD(1,L)
        N=M
        M1=1

        N1=1
        DO 260 I=2,3
        IF(M.GE.NOD(I,L)) GO TO 270
        M1=I
        M=NOD(I,L)
270    IF(N.LE.NOD(I,L)) GO TO 260
        N1=I
        N=NOD(I,L)
260    CONTINUE
        DO 280 I=1,3
        IF(I.EQ.M1.OR.I.EQ.N1) GO TO 280
        MM=I
        GO TO 290
280    CONTINUE        
290    CONTINUE
        NM=NOD(MM,L)
        MA=2*(M-N+1)
        MB=MA-1
        MC=2*(NM-N+1)
        MD=MC-1
        IF(NON2(2*M).LT.MA) NON2(2*M)=MA
        NON1(2*M)=NON2(2*M)
        IF(NON2(2*M-1).LT.MB) NON2(2*M-1)=MB
        NON1(2*M-1)=NON2(2*M-1)
        IF(NON2(2*NM).LT.MC) NON2(2*NM)=MC
        NON1(2*NM)=NON2(2*NM)
        IF(NON2(2*NM-1).LT.MD) NON2(2*NM-1)=MD
        NON1(2*NM-1)=NON2(2*NM-1)
        IF(NON2(2*N).LT.2) NON2(2*N)=2
        NON1(2*N)=NON2(2*N)
250    CONTINUE
        NONM1=NON1(1)
        NONM2=NON2(1)
        DO 300 I=1,MP
        IF(NONM1.LT.NON1(I)) NONM1=NON1(I)
        IF(NONM2.LT.NON2(I)) NONM2=NON2(I)
        NON3(I)=NON1(I)
        NON4(I)=NON2(I)
        IF(NON1(I).GE.NON2(I)) GO TO 300
        NON3(I)=NON2(I)
        NON4(I)=NON1(I)
300    CONTINUE
        NON=NONM1
        NONP=NONM1+NONM2-1
        N=0
        DO 310 I=1,MP
        IF(NKN(I).EQ.1) GO TO 310
        N=N+1
        NONN1(N)=NON1(I)
        NONN2(N)=NON2(I)
        NONN3(N)=NON3(I)
        NONN4(N)=NON4(I)
310    CONTINUE

        WRITE(6,320) NON,NONP
320    FORMAT(/1H ,'BAND BREADTH AND ITS DOUBLE - 1',10X,2I8/)

        RETURN
        END

        SUBROUTINE DPMAT(L,IS,ID)
        IMPLICIT REAL*8 (A-H,O-Z)
        COMMON /XN/ XR(2,350),XG(2,600),V(650),FORCE(20),FSMAX(20,60)
        COMMON /XK/ NOD(3,600),NKN(650),NPORE(600),NPOR(600)
        COMMON /XY/ D(4,4,600),B1(6,600),BM(4,6),SK(6,6),DEM(4,4),
     1              DSK(3,6),FR(6),FT(6),SS(4),AREA(600),A1(3,600)
        COMMON /YX/ STRAN(4,600),STRES(4,600),DSRN(4,600),RATIO(600),
     1   DSTS(4,600),EQSTS(600),EQSRN(600),ST(350),PFUNC(600),YP1(600),
     2   DEQSRN(600),DSR(350),THETA0(600),DNSRN(4,350),EQST1(600),
     3   DNSTS(4,350),CT(600)
        COMMON /YN/ NELEM,NPOIN,MP,NSTEP
        COMMON /DT/ THICK,YOUNG,G,G1,ALPH,YP,AN,COEF,POIS
        COMMON /YZ/ PREX(2,350),ATUSA(600),EVOL(600),ROW,YP0,DEQP
        COMMON /WA/ ALEN,WW,ASRAT
        COMMON /CN/ PAI,PAI1,PAI2,AINV3,COMP,COMP1,ANP
        COMMON /AH/ AH(600),AH0(600)

        DIMENSION DE(4,4)

        IF(NPORE(L).EQ.1) GO TO 5
        DO 10 I=1,4
        DO 10 J=1,4
10     D(I,J,L)=DEM(I,J)
        RETURN

5      CONTINUE
        HARD1=AN*YP*(COEF+EQSRN(L))**ANP
        AH0(L)=HARD1*AINV3
        IF(ID.NE.5) GO TO 20
        HNP1=3.D0*EQSRN(L)*(1.D0+ROW)/(EQSTS(L)*(1.D0+ROW*CT(L)))
20     CONTINUE
        DO 30 I=1,4
        DO 30 J=1,4
30     DE(I,J)=DEM(I,J)
        PMG=1.D0
        PSGN=1.D0
        H=G
        POI=POIS
        YOUN=YOUNG
        IF(ID.EQ.5) GO TO 40
        CS0=COS(THETA0(L))
        IF(ID.EQ.0) GO TO 50
        CS=CS0
        CS=1.D0+1.D0/CS
        AH(L)=1.D0/CS
40     CONTINUE
        IF(ID.EQ.5) AH(L)=CT(L)*AH0(L)*HNP1
        IF(ID.GE.2) PMG=1.D0-AH(L)
        IF(ID.EQ.5) GO TO 60
        PMGG=PMG
        IF(ID.EQ.3) PMG=PMG*PMG
        IF(CT(L).LE.0.D0.AND.ID.NE.3) PSGN=0.D0
        PMG=PMG*PSGN
        IF(ID.EQ.4) PMG=1.D0
        H0=CS*HARD1*AINV3
        GG1=G1+PFUNC(L)/H0
60     CONTINUE
        IF(ID.EQ.5) GG1=G1+CT(L)*HNP1

        H=1.D0/GG1
        YOUN=YOUNG*3.D0/(1.D0-2.D0*POIS+YOUNG*GG1)
        POI=(YOUNG*GG1-2.D0+4.D0*POIS)*0.5D0/(1.D0-2.D0*POIS+YOUNG*GG1)
        IF(IS.EQ.1.OR.IS.EQ.2) GO TO 70
        DE1=YOUN/(1.D0-POI**2)
        DE(1,1)=DE1
        DE(2,2)=DE1
        DE(1,2)=DE1*POI
        DE(2,1)=DE(1,2)
        DE(3,3)=H
        GO TO 50
70     CONTINUE
        DE1=2.D0/(1.D0-2.D0*POI)
        DE(1,1)=(1.D0-POI)*H*DE1
        DE(2,2)=DE(1,1)
        DE(1,2)=POI*H*DE1
        DE(2,1)=DE(1,2)
        DE(3,3)=H
        IF(IS.EQ.1) GO TO 50
        DE(1,4)=DE(1,2)
        DE(2,4)=DE(1,2)
        DE(4,1)=DE(1,2)
        DE(4,2)=DE(1,2)
        DE(4,4)=DE(1,1)
50     CONTINUE
        DSM=(STRES(1,L)+STRES(2,L)+STRES(4,L))*AINV3
        DSX=STRES(1,L)-DSM
        DSY=STRES(2,L)-DSM
        DSZ=STRES(4,L)-DSM
        DSXY=STRES(3,L)
        IF(IS.EQ.1.OR.IS.EQ.2) GO TO 80
        SS(1)=DE(1,1)*(DSX+POI*DSY)
        SS(2)=DE(1,1)*(POI*DSX+DSY)
        SS(3)=2.D0*DE(3,3)*DSXY
        P=1.D0
        IF(ID.EQ.4) P=CT(L)/(PMGG*PFUNC(L))
        HARD1=HARD1*4.D0*(AINV3*EQSTS(L))**2*P+(SS(1)*DSX+SS(2)
     1    *DSY+SS(3)*DSXY*2.D0)*PMG
        SS(4)=0.D0
        CC=1.D0/HARD1*PMG
        GO TO 90
80     CONTINUE
        P=1.D0
        IF(ID.EQ.4) P=CT(L)/(PMGG*PFUNC(L))
        CC=9.D0*H*H*PMG/(EQSTS(L)**2*(HARD1*P+3.D0*PMG*H))
        SS(1)=DSX
        SS(2)=DSY
        SS(3)=DSXY
        SS(4)=0.D0
        IF(IS.EQ.2) SS(4)=DSZ
90     CONTINUE
        DO 100 I=1,4
        DO 100 J=1,4
100    D(I,J,L)=DE(I,J)-SS(I)*SS(J)*CC
        RETURN
        END

        SUBROUTINE BMAT(L,IS,EXTEN,PUN)
        IMPLICIT REAL*8 (A-H,O-Z)
        COMMON /XN/ XR(2,350),XG(2,600),V(650),FORCE(20),FSMAX(20,60)
        COMMON /XK/ NOD(3,600),NKN(650),NPORE(600),NPOR(600)
        COMMON /XY/ D(4,4,600),B1(6,600),BM(4,6),SK(6,6),DEM(4,4),
     1              DSK(3,6),FR(6),FT(6),SS(4),AREA(600),A1(3,600)
        COMMON /YN/ NELEM,NPOIN,MP,NSTEP
        COMMON /AA/ AA(3,600)

        II=NOD(1,L)
        IJ=NOD(2,L)
        IK=NOD(3,L)
        IF(NSTEP.NE.0) GO TO 100
        AREAP=XR(1,II)*(XR(2,IJ)-XR(2,IK))+XR(1,IJ)*(XR(2,IK)-XR(2,II))
     1        +XR(1,IK)*(XR(2,II)-XR(2,IJ))
        AREA(L)=AREAP*0.5D0
        IF(AREA(L).GT.0.D0) GO TO 100
        WRITE(6,10) L
        WRITE(6,20) ((XR(I,J),I=1,2),J=1,NPOIN)

        STOP

100    CONTINUE

        AR1=0.5D0/AREA(L)
        B1(1,L)=(XR(1,IK)-XR(1,IJ))*AR1
        B1(2,L)=(XR(2,IJ)-XR(2,IK))*AR1
        B1(3,L)=(XR(1,II)-XR(1,IK))*AR1
        B1(4,L)=(XR(2,IK)-XR(2,II))*AR1
        B1(5,L)=(XR(1,IJ)-XR(1,II))*AR1
        B1(6,L)=(XR(2,II)-XR(2,IJ))*AR1

        IF(IS.NE.2) GO TO 200

        AA(1,L)=(XR(1,IJ)*XR(2,IK)-XR(1,IK)*XR(2,IJ))*AR1
        AA(2,L)=(XR(1,IK)*XR(2,II)-XR(1,II)*XR(2,IK))*AR1
        AA(3,L)=(XR(1,II)*XR(2,IJ)-XR(1,IJ)*XR(2,II))*AR1
        DO 30 I=1,3
30     A1(I,L)=(AA(I,L)+B1(2*I-1,L)*XG(2,L))/XG(1,L)+B1(2*I,L)

200    CONTINUE

10     FORMAT(1H ,'ELEMENT NUMBER OF NEGATIVE AREA= ',2X,I4/)
20     FORMAT(1H1,'JAMMED NODAL COORDINATES'/(1H ,1P10D13.5))

        RETURN
        END

        SUBROUTINE SKMAT(L,IL,IS,IEX,C1,C2)

        IMPLICIT REAL*8 (A-H,O-Z)
        COMMON /XN/ XR(2,350),XG(2,600),V(650),FORCE(20),FSMAX(20,60)
        COMMON /XK/ NOD(3,600),NKN(650),NPORE(600),NPOR(600)
        COMMON /XY/ D(4,4,600),B1(6,600),BM(4,6),SK(6,6),DEM(4,4),
     1              DSK(3,6),FR(6),FT(6),SS(4),AREA(600),A1(3,600)
        COMMON /YX/ STRAN(4,600),STRES(4,600),DSRN(4,600),RATIO(600),
     1   DSTS(4,600),EQSTS(600),EQSRN(600),ST(350),PFUNC(600),YP1(600),
     2   DEQSRN(600),DSR(350),THETA0(600),DNSRN(4,350),EQST1(600),
     3   DNSTS(4,350),CT(600)
        COMMON /YN/ NELEM,NPOIN,MP,NSTEP
        COMMON /YZ/ PREX(2,350),ATUSA(600),EVOL(600),ROW,YP0,DEQP
        COMMON /AA/ AA(3,600)
        DIMENSION RI(3),ZI(3)

        PIL=1.D0
        IF(IL.EQ.0) PIL=0.D0

        IF(NSTEP.NE.0) GO TO 10
        TH=ATUSA(L)
        IF(IS.EQ.2) TH=6.28318530717959D0*XG(1,L)
        VOL=AREA(L)*TH
        GO TO 20

10     VOL=EVOL(L)
20     CONTINUE

        DO 30 I=1,6
30     BM(3,I)=B1(I,L)

        BM(1,1)=B1(2,L)
        BM(1,3)=B1(4,L)
        BM(1,5)=B1(6,L)
        BM(2,2)=B1(1,L)
        BM(2,4)=B1(3,L)
        BM(2,6)=B1(5,L)

        IF(IS.EQ.2) GO TO 40

        DO 50 I=1,3
        DO 50 J=1,6
50     DSK(I,J)=D(I,1,L)*BM(1,J)+D(I,2,L)*BM(2,J)+D(I,3,L)*BM(3,J)
        DO 60 I=1,6
        DO 60 J=1,6
60     SK(I,J)=BM(1,I)*DSK(1,J)+BM(2,I)*DSK(2,J)+BM(3,I)*DSK(3,J)

        GO TO 500

40     CONTINUE
        DO 70 I=1,3
        I2=2*I-1
70     BM(4,I2)=A1(I,L)
        DO 80 I=1,6
        DO 80 J=1,6
        SUM=0.D0
        DO 90 K=1,4
        DO 90 M=1,4
        SUM=SUM+BM(K,I)*D(K,M,L)*BM(M,J)
90     CONTINUE
        SK(I,J)=SUM
80     CONTINUE

        IF(IEX.NE.1) GO TO 500
        VS=1.D0/XG(1,L)
        RI(1)=.2D0*(XR(1,NOD(1,L))+XR(1,NOD(2,L)))+0.6D0*XR(1,NOD(3,L))
        RI(2)=.2D0*(XR(1,NOD(2,L))+XR(1,NOD(3,L)))+0.6D0*XR(1,NOD(1,L))
        RI(3)=.2D0*(XR(1,NOD(3,L))+XR(1,NOD(1,L)))+0.6D0*XR(1,NOD(2,L))
        ZI(1)=.2D0*(XR(2,NOD(1,L))+XR(2,NOD(2,L)))+0.6D0*XR(2,NOD(3,L))
        ZI(2)=.2D0*(XR(2,NOD(2,L))+XR(2,NOD(3,L)))+0.6D0*XR(2,NOD(1,L))
        ZI(3)=.2D0*(XR(2,NOD(3,L))+XR(2,NOD(1,L)))+0.6D0*XR(2,NOD(2,L))
        AI1=0.D0
        AI2=0.D0
        AI3=0.D0
        DO 100 I=1,3
        AI1=AI1+1.D0/RI(I)
        AI2=AI2+ZI(I)/RI(I)
100    AI3=AI3+ZI(I)**2/RI(I)
        AI1=VS*D(4,4,L)*(C1*AI1+(C2-1.D0)*VS)
        AI2=VS*D(4,4,L)*(C1*AI2+(C2-1.D0)*XG(2,L)*VS)
        AI3=VS*D(4,4,L)*(C1*AI3+(C2-1.D0)*XG(2,L)**2*VS)
        SK(1,1)=SK(1,1)+AA(1,L)*AA(1,L)*AI1+(AA(1,L)*B1(1,L)+AA(1,L)
     1            *B1(1,L))*AI2+B1(1,L)*B1(1,L)*AI3
        SK(1,3)=SK(1,3)+AA(1,L)*AA(2,L)*AI1+(AA(1,L)*B1(3,L)+AA(2,L)
     1            *B1(1,L))*AI2+B1(1,L)*B1(3,L)*AI3
        SK(1,5)=SK(1,5)+AA(1,L)*AA(3,L)*AI1+(AA(1,L)*B1(5,L)+AA(3,L)
     1            *B1(1,L))*AI2+B1(1,L)*B1(5,L)*AI3
        SK(3,1)=SK(3,1)+AA(2,L)*AA(1,L)*AI1+(AA(2,L)*B1(1,L)+AA(1,L)
     1            *B1(3,L))*AI2+B1(3,L)*B1(1,L)*AI3
        SK(3,3)=SK(3,3)+AA(2,L)*AA(2,L)*AI1+(AA(2,L)*B1(3,L)+AA(2,L)
     1            *B1(3,L))*AI2+B1(3,L)*B1(3,L)*AI3
        SK(3,5)=SK(3,5)+AA(2,L)*AA(3,L)*AI1+(AA(2,L)*B1(5,L)+AA(3,L)
     1            *B1(3,L))*AI2+B1(3,L)*B1(5,L)*AI3
        SK(5,1)=SK(5,1)+AA(3,L)*AA(1,L)*AI1+(AA(3,L)*B1(1,L)+AA(1,L)
     1            *B1(5,L))*AI2+B1(5,L)*B1(1,L)*AI3
        SK(5,3)=SK(5,3)+AA(3,L)*AA(2,L)*AI1+(AA(3,L)*B1(3,L)+AA(2,L)
     1            *B1(5,L))*AI2+B1(5,L)*B1(3,L)*AI3
        SK(5,5)=SK(5,5)+AA(3,L)*AA(3,L)*AI1+(AA(3,L)*B1(5,L)+AA(3,L)
     1            *B1(5,L))*AI2+B1(5,L)*B1(5,L)*AI3
500    CONTINUE

        IF(NSTEP.EQ.0) GO TO 200
        ST1=STRES(1,L)
        ST2=STRES(2,L)
        ST3=STRES(3,L)
        ST4=ST1+ST2
        ST5=ST1-ST2
        DO 110 I=1,3
        I1=2*I-1
        I2=2*I
        CI=B1(I1,L)
        BI=B1(I2,L)
        DO 110 J=1,3
        J1=2*J-1
        J2=2*J
        CJ=B1(J1,L)
        BJ=B1(J2,L)
        SK(I1,J1)=SK(I1,J1)-(0.5D0*CI*CJ*ST5+BI*BJ*ST1)*PIL
        SK(I1,J2)=SK(I1,J2)-(0.5D0*CI*BJ*ST4+(CI*CJ+BI*BJ)*ST3)*PIL
        SK(I2,J1)=SK(I2,J1)-(0.5D0*BI*CJ*ST4+(CI*CJ+BI*BJ)*ST3)*PIL
        SK(I2,J2)=SK(I2,J2)+(0.5D0*BI*BJ*ST5-CI*CJ*ST2)*PIL
110    CONTINUE

200    CONTINUE
        DO 120 I=1,6
        DO 120 J=1,6
120    SK(I,J)=VOL*SK(I,J)

        RETURN
        END

        SUBROUTINE SOLVE(AA,RR,YY,NN,IN,IM)
        IMPLICIT REAL*8 (A-H,O-Z)

        DIMENSION AA(650,60),RR(650),YY(650)
        DIMENSION UU(650,30),AL(650,30)
        COMMON /NO/ NON1(650),NON2(650),NON3(650),NON4(650),NONP,NON
     1              ,NONN1(650),NONN2(650),NONN3(650),NONN4(650)

        MM=NON
        UU(1,1)=AA(1,MM)
        IF(UU(1,1).NE.0.D0) GO TO 100
        IN=0
        IM=1
        RETURN
100    CONTINUE
        U1=1.D0/UU(1,1)
        DO 110 I=2,MM
        UU(1,I)=AA(1,I+MM-1)
110    AL(1,I)=AA(I,MM-I+1)*U1

        DO 120 I=2,NN
        SUM1=0.D0
        II=I+1
        NI=NONN4(I)-1
        DO 130 K=1,I-1
        IF(K.GT.NI) GO TO 140
        KK=I-K
        I1=K+1
        SUM1=SUM1+UU(KK,I1)*AL(KK,I1)
130    CONTINUE
140    CONTINUE
        UU(I,1)=AA(I,MM)-SUM1
        IF(UU(I,1).NE.0.D0) GO TO 150
        IN=0
        IM=I
        RETURN
150    CONTINUE
        U1=1.D0/UU(I,1)
        DO 160 J=2,MM
        IJ=I+J
        IF(IJ-1.GT.NN) GO TO 120
        NJ=NONN3(IJ-1)-J
        SUM1=0.D0
        SUM2=0.D0
        DO 170 K=1,I-1
        IF(K.GT.NI.OR.K.GT.NJ) GO TO 180
        KK=I-K
        I1=J+K

        I2=1+K
        SUM1=SUM1+UU(KK,I1)*AL(KK,I2)
        SUM2=SUM2+UU(KK,I2)*AL(KK,I1)
170    CONTINUE
180    CONTINUE
        UU(I,J)=AA(I,J+MM-1)-SUM1
        I1=IJ-1
        AL(I,J)=(AA(I1,MM-J+1)-SUM2)*U1
160    CONTINUE
120    CONTINUE

        DO 200 I=2,NN
        SUM1=0.D0
        NI=NONN1(I)-1
        DO 210 J=1,I-1
        IF(J.GT.NI) GO TO 220
        JJ=I-J
        I1=J+1
        SUM1=SUM1+AL(JJ,I1)*YY(JJ)
210    CONTINUE
220    CONTINUE
        YY(I)=YY(I)-SUM1
200    CONTINUE
        RR(NN)=YY(NN)/UU(NN,1)
        DO 230 J=1,NN-1
        SUM2=0.D0
        I=NN-J
        DO 240 I1=2,MM
        K=J+2-I1
        SUM2=SUM2+UU(I,I1)*RR(NN-K+1)
240    CONTINUE
        RR(I)=(YY(I)-SUM2)/UU(I,1)
230    CONTINUE
        RETURN
        END

        SUBROUTINE STRESS(IS,ID,IL,PMIN)
        IMPLICIT REAL*8 (A-H,O-Z)
        COMMON /XN/ XR(2,350),XG(2,600),V(650),FORCE(20),FSMAX(20,60)
        COMMON /XK/ NOD(3,600),NKN(650),NPORE(600),NPOR(600)
        COMMON /XY/ D(4,4,600),B1(6,600),BM(4,6),SK(6,6),DEM(4,4),
     1              DSK(3,6),FR(6),FT(6),SS(4),AREA(600),A1(3,600)
        COMMON /YX/ STRAN(4,600),STRES(4,600),DSRN(4,600),RATIO(600),
     1   DSTS(4,600),EQSTS(600),EQSRN(600),ST(350),PFUNC(600),YP1(600),
     2   DEQSRN(600),DSR(350),THETA0(600),DNSRN(4,350),EQST1(600),
     3   DNSTS(4,350),CT(600)
        COMMON /YN/ NELEM,NPOIN,MP,NSTEP
        COMMON /DT/ THICK,YOUNG,G,G1,ALPH,YP,AN,COEF,POIS
        COMMON /YZ/ PREX(2,350),ATUSA(600),EVOL(600),ROW,YP0,DEQP
        COMMON /WA/ ALEN,WW,ASRAT
        COMMON /AB/ PSTRAN(4,600),DNPSRN(4,350)
        COMMON /DE/ DEN(4,4)
        COMMON /PQ/ PEQSRN(600)
        COMMON /CN/ PAI,PAI1,PAI2,AINV3,COMP,COMP1,ANP

        DIMENSION SU(4),DL(4),DSTS0(4,600),DEQS(600),
     1   DPSRN(4,600),DPEQR(600),RMIN(600),NPORE1(600)  

        PMIN=1.D10
        PIL=1.D0
        IF(IL.EQ.0) PIL=0.D0

        DO 500 L=1,NELEM
        IY=2*NOD(1,L)
        JY=2*NOD(2,L)
        KY=2*NOD(3,L)
        IX=IY-1
        JX=JY-1
        KX=KY-1
        DSRN1=B1(2,L)*V(IX)+B1(4,L)*V(JX)+B1(6,L)*V(KX)
        DSRN2=B1(1,L)*V(IY)+B1(3,L)*V(JY)+B1(5,L)*V(KY)
        DSRN5=B1(1,L)*V(IX)+B1(2,L)*V(IY)+B1(3,L)*V(JX)
        DSRN3=DSRN5+B1(4,L)*V(JY)+B1(5,L)*V(KX)+B1(6,L)*V(KY)
        IF(IS.EQ.2) DSRN4=A1(1,L)*V(IX)+A1(2,L)*V(JX)+A1(3,L)*V(KX)
        DSR1=B1(1,L)*V(IX)+B1(3,L)*V(JX)+B1(5,L)*V(KX)
        DSR2=B1(2,L)*V(IY)+B1(4,L)*V(JY)+B1(6,L)*V(KY)
        DSR1=DSR1-DSR2
        DSTS1=D(1,1,L)*DSRN1+D(1,2,L)*DSRN2+D(1,3,L)*DSRN3
        DSTS2=D(2,1,L)*DSRN1+D(2,2,L)*DSRN2+D(2,3,L)*DSRN3
        DSTS3=D(3,1,L)*DSRN1+D(3,2,L)*DSRN2+D(3,3,L)*DSRN3
        DSTS4=0.D0
        IF(IS.NE.2) GO TO 10
        DSTS1=DSTS1+D(1,4,L)*DSRN4
        DSTS2=DSTS2+D(2,4,L)*DSRN4
        DSTS3=DSTS3+D(3,4,L)*DSRN4
        DSTS4=D(4,1,L)*DSRN1+D(4,2,L)*DSRN2+D(4,3,L)*DSRN3
     1       +D(4,4,L)*DSRN4
10     CONTINUE
        DSTS0(1,L)=DSTS1
        DSTS0(2,L)=DSTS2
        DSTS0(3,L)=DSTS3
        DSTS0(4,L)=DSTS4
        CT(L)=1.D0
        DSM=0.D0
        DO 20 I=1,3
        K=I
        IF(I.EQ.3) K=4
20     DSM=DSM+STRES(K,L)
        DSM=DSM*AINV3
        DO 30 I=1,3
        K=I
        IF(I.EQ.3) K=4
30     DL(K)=STRES(K,L)-DSM
        DL(3)=STRES(3,L)
        DSTS1=DSTS1+STRES(3,L)*DSR1*PIL
        DSTS2=DSTS2-STRES(3,L)*DSR1*PIL
        DSTS3=DSTS3+0.5D0*(STRES(2,L)-STRES(1,L))*DSR1*PIL
        DSRN4=COMP*(DSTS1+DSTS2+DSTS4)-DSRN1-DSRN2
        IF(IS.EQ.1) DSRN4=0.D0
        IF(IS.EQ.2) GO TO 40
        DSTS0(4,L)=(DSRN1+DSRN2)*COMP1-DSTS0(1,L)-DSTS0(2,L)
        DSTS4=DSTS0(4,L)
        IF(IS.EQ.0) DSTS4=0.D0
40     CONTINUE
        IF(NSTEP.EQ.0) GO TO 50
        DSM=(DSTS1+DSTS2+DSTS4)*AINV3
        DST1=DSTS1-DSM

        DST2=DSTS2-DSM
        DST4=DSTS4-DSM
        DST3=DSTS3
        CT(L)=DST1*DL(1)+DST2*DL(2)+DST4*DL(4)+2.D0*DST3*DL(3)
        P=(DST1*DST1+DST2*DST2+DST4*DST4+2.D0*DST3*DST3)*
     1        (DL(1)**2+DL(2)**2+DL(4)**2+2.D0*DL(3)**2)
        CT(L)=CT(L)/SQRT(P)

50     CONTINUE
        DSRN(1,L)=DSRN1
        DSRN(2,L)=DSRN2
        DSRN(3,L)=DSRN3
        DSRN(4,L)=DSRN4
        DSTS(1,L)=DSTS1
        DSTS(2,L)=DSTS2
        DSTS(3,L)=DSTS3
        DSTS(4,L)=DSTS4
        STX=STRES(1,L)+DSTS(1,L)
        STY=STRES(2,L)+DSTS(2,L)
        STZ=STRES(4,L)+DSTS(4,L)
        STXY=STRES(3,L)+DSTS(3,L)
        YY=SQRT(0.5D0*((STX-STY)**2+(STY-STZ)**2+(STZ-STX)**2
     1          +6.D0*STXY*STXY))
        DEQST=YY-EQST1(L)
        DEQS(L)=DEQST
        IF(NPORE(L).EQ.1) GO TO 60
        YY1=YP0*ALPH/YY

        STX=DSTS(1,L)
        STY=DSTS(2,L)
        STZ=DSTS(4,L)
        STXY=DSTS(3,L)
        YA=0.5D0*((STX-STY)**2+(STY-STZ)**2+(STZ-STX)**2+6.D0*STXY*STXY)
        YB=YA-(2.D0*EQST1(L)*DEQST+DEQST*DEQST)
        YPP=YP0
        IF(NPORE(L).EQ.2) YPP=YP1(L)
        YC=(ALPH*YPP)**2-EQST1(L)**2
        YC=YB*YB+4.D0*YA*YC
        IF(YC.GT.0.D0) GO TO 70
        YY1=1.D10
        GO TO 80
70     CONTINUE
        IF(YA.GT.1.D-10) GO TO 90
        YY1=1.D10
        GO TO 80
90     YY1=(YB+SQRT(YC))/(2.D0*YA)
        GO TO 80
60     CONTINUE
        DO 100 I=1,4
        SU(I)=0.D0
        DO 110 J=1,4
110    SU(I)=SU(I)+DEN(I,J)*DSTS0(J,L)
100    CONTINUE
        DPSRN(1,L)=DSRN(1,L)-SU(1)
        DPSRN(2,L)=DSRN(2,L)-SU(2)
        DPSRN(3,L)=DSRN(3,L)-SU(3)
        DPSRN(4,L)=DSRN(4,L)-SU(4)
        PST1=DPSRN(1,L)
        PST2=DPSRN(2,L)
        PST3=DPSRN(3,L)

        PSRD=SQRT(4.D0*AINV3*(PST1**2+PST1*PST2+PST2**2+0.25D0*PST3**2))
        DPEQR(L)=PSRD
        IF(PSRD.GT.1.D-10) GO TO 120
        YY1=1.D10
        GO TO 80
120    YY1=DEQP/PSRD
80     CONTINUE
        RMIN(L)=YY1

500    CONTINUE

        IF(NSTEP.EQ.0) GO TO 300

        DO 130 L=1,NELEM
        NPORE1(L)=NPORE(L)
        PFUNC(L)=1.D0
        IF(NPORE(L).NE.1) GO TO 130
        IF(ID.EQ.0.OR.ID.EQ.5) GO TO 140
        THETA0(L)=PAI2-ROW*PEQSRN(L)**2
        IF(THETA0(L).LT.PAI1) THETA0(L)=PAI1
        CS=COS(THETA0(L))
        CS=CS/(1.D0+CS)
        PFUNC(L)=CS+(1.D0-CS)*CT(L)
        GO TO 150
140    PFUNC(L)=CT(L)
150    CONTINUE
        IF(PFUNC(L).GT.0.D0) GO TO 130
        NPORE(L)=2
        YP1(L)=EQSTS(L)
130    CONTINUE

300    CONTINUE
        DO 160 L=1,NELEM
        IF(NPORE1(L).EQ.2) GO TO 160
        IF(RMIN(L).GE.PMIN) GO TO 160
        IF(RMIN(L).LE.0.D0) GO TO 160
        PMIN=RMIN(L)
        L1=L
160    CONTINUE
        NPORE(L1)=1
        IF(NSTEP.EQ.0) GO TO 170
        IF(PMIN.GT.10.D0) PMIN=10.D0
170    CONTINUE
        DO 180 L=1,NELEM
        IF(NPORE1(L).NE.2) GO TO 180
        IF(RMIN(L).GT.PMIN) GO TO 180
        NPORE(L)=1
180    CONTINUE

        DO 200 L=1,NELEM

        DO 210 I=1,4
        STRES(I,L)=STRES(I,L)+DSTS(I,L)*PMIN
        STRAN(I,L)=STRAN(I,L)+DSRN(I,L)*PMIN
210    CONTINUE
        EQST1(L)=SQRT(0.5D0*((STRES(1,L)-STRES(2,L))**2+(STRES(2,L)-
     1    STRES(4,L))**2+(STRES(4,L)-STRES(1,L))**2+6.0*STRES(3,L)**2))
        DSR1=DSRN(1,L)
        DSR2=DSRN(2,L)
        DSR3=DSRN(3,L)

        DSR4=DSRN(4,L)
        P=AINV3*(DSR1+DSR2+DSR4)
        DSR1=DSR1-P
        DSR2=DSR2-P
        DSR4=DSR4-P
        SS1=(DSR1**2+DSR2**2+DSR4**2+0.5D0*DSR3**2)*AINV3
        SS1=SQRT(2.D0*SS1)
        DEQSRN(L)=SS1*PMIN
        EQSRN(L)=EQSRN(L)+DEQSRN(L)

        IF(NPORE(L).NE.1) GO TO 220

        PSTRAN(1,L)=PSTRAN(1,L)+DPSRN(1,L)*PMIN
        PSTRAN(2,L)=PSTRAN(2,L)+DPSRN(2,L)*PMIN
        PSTRAN(3,L)=PSTRAN(3,L)+DPSRN(3,L)*PMIN
        PSTRAN(4,L)=-(PSTRAN(1,L)+PSTRAN(2,L))
        PEQSRN(L)=PEQSRN(L)+DPEQR(L)*PMIN
        EQSTS(L)=YP*(COEF+EQSRN(L))**AN
        P=EQSTS(L)/EQST1(L)
        IF(P.GE.1.D0) P=1.D0
        EQST1(L)=P*EQST1(L)
        DO 230 I=1,4
230    STRES(I,L)=P*STRES(I,L)

220    CONTINUE

200    CONTINUE

        DO 240 I=1,NPOIN
        J=2*I
        K=J-1
        PREX(1,I)=XR(1,I)
        PREX(2,I)=XR(2,I)
        XR(1,I)=XR(1,I)+V(K)*PMIN
240    XR(2,I)=XR(2,I)+V(J)*PMIN

        IF(NSTEP.NE.0) GO TO 250
        WRITE(6,260) PMIN
250    CONTINUE

260    FORMAT(1H ,'VALUE OF RMIN AT FIRST STEP= ',D15.7/)

        RETURN
        END

        SUBROUTINE LOAD(PUN,PUNCH,EXTEN,VNECK,AREA0,VOLM0,VOLTOT,VOLT1,
     1                  SPUN,SPPUN,PMAX,UMAX,PMIN)
        IMPLICIT REAL*8 (A-H,O-Z)
        COMMON /YN/ NELEM,NPOIN,MP,NSTEP
        COMMON /XN/ XR(2,350),XG(2,600),V(650),FORCE(20),FSMAX(20,60)
        COMMON /XK/ NOD(3,600),NKN(650),NPORE(600),NPOR(600)
        COMMON /XY/ D(4,4,600),B1(6,600),BM(4,6),SK(6,6),DEM(4,4),
     1              DSK(3,6),FR(6),FT(6),SS(4),AREA(600),A1(3,600)
        COMMON /YX/ STRAN(4,600),STRES(4,600),DSRN(4,600),RATIO(600),
     1   DSTS(4,600),EQSTS(600),EQSRN(600),ST(350),PFUNC(600),YP1(600),
     2   DEQSRN(600),DSR(350),THETA0(600),DNSRN(4,350),EQST1(600),
     3   DNSTS(4,350),CT(600)

        COMMON /IB/ ISORN,IND,ILARGE,IEXACT,NX,NY
        COMMON /DT/ THICK,YOUNG,G,G1,ALPH,YP,AN,COEF,POIS
        COMMON /YZ/ PREX(2,350),ATUSA(600),EVOL(600),ROW,YP0,DEQP
        COMMON /WA/ ALEN,WW,ASRAT
        COMMON /PG/ PREXG(2,600)
        COMMON /FP/ PFORCE(3000),PSTOKE(3000),PNECK(3000)
        COMMON /FQ/ PFORC1(3000)
        COMMON /CN/ PAI,PAI1,PAI2,AINV3,COMP,COMP1,ANP
        COMMON /NO/ NON1(650),NON2(650),NON3(650),NON4(650),NONP,NON
     1              ,NONN1(650),NONN2(650),NONN3(650),NONN4(650)
        DIMENSION TH(100)

        DO 10 I=1,2*NX+2
        DO 20 J=1,MP
        JJ=J-I+NON
        IF(JJ.GT.NONP) GO TO 10
        IF(JJ.LE.0) GO TO 20
        FORCE(I)=FORCE(I)+FSMAX(I,JJ)*V(J)*PMIN
20     CONTINUE
10     CONTINUE
        SUM=0.0D0
        DO 30 I=1,NX+1
        K=2*I
30     SUM=SUM+FORCE(K)
        P=2.D0
        IF(ISORN.EQ.2) P=1.D0
        PUN=SUM*P

        DO 40 L=1,NELEM
        PREXG(1,L)=XG(1,L)
        PREXG(2,L)=XG(2,L)
        DO 50 J=1,2
        SUM=0.D0
        DO 60 I=1,3
        N=NOD(I,L)
60     SUM=SUM+XR(J,N)
        XG(J,L)=SUM*AINV3
50     CONTINUE
40     CONTINUE

        DO 70 I=1,NX
        IF(ISORN.EQ.2) GO TO 80
        TH(I)=ATUSA(I)
        GO TO 70
80     TH(I)=PAI*(XR(1,I)+XR(1,I+1))
70     CONTINUE

        SUM=0.0D0
        DX1=XR(1,2)
        DO 90 I=1,NX
90     SUM=SUM+STRES(2,I)*TH(I)*DX1
        P=2.D0
        IF(ISORN.EQ.2) P=1.D0
        PUNCH=SUM*P
        P=1.D0/(YP0*AREA0)
        SPPUN=PUNCH*P
        SPUN=PUN*P
        EXTEN=(XR(2,1)-ALEN)/ALEN
        VNECK=(WW-XR(1,NPOIN))/WW

        PFORCE(NSTEP)=SPPUN
        PFORC1(NSTEP)=SPUN
        PSTOKE(NSTEP)=EXTEN
        PNECK(NSTEP)=VNECK
        IF(NSTEP.EQ.1) GO TO 100
        IF(SPUN.LE.PFORC1(NSTEP-1)) GO TO 100
        IF(PMAX.GT.SPUN) GO TO 100
        PMAX=SPUN
        UMAX=EXTEN
100    CONTINUE

        IF(ISORN.NE.0) GO TO 110
        DO 120 I=1,NELEM
120    ATUSA(I)=THICK*EXP(STRAN(4,I))
110    CONTINUE
        VOLT1=VOLTOT

        SUM=0.D0
        DO 130 I=1,NELEM
        II=NOD(1,I)
        IJ=NOD(2,I)
        IK=NOD(3,I)
        AREAP=XR(1,II)*(XR(2,IJ)-XR(2,IK))+XR(1,IJ)*(XR(2,IK)-XR(2,II))
     1       +XR(1,IK)*(XR(2,II)-XR(2,IJ))
        AREA(I)=AREAP*0.5D0
        IF(ISORN.EQ.2) GO TO 140
        P=ATUSA(I)
        GO TO 150
140    P=2.D0*PAI*XG(1,I)
150    CONTINUE
        EVOL(I)=P*AREA(I)
        SUM=SUM+EVOL(I)
130    CONTINUE

        P=1.D0
        IF(ISORN.NE.2) P=2.D0
        VOLTOT=SUM/VOLM0*P

        RETURN
        END

        SUBROUTINE NODST
        IMPLICIT REAL*8 (A-H,O-Z)
        COMMON /XK/ NOD(3,600),NKN(650),NPORE(600),NPOR(600)
        COMMON /YX/ STRAN(4,600),STRES(4,600),DSRN(4,600),RATIO(600),
     1   DSTS(4,600),EQSTS(600),EQSRN(600),ST(350),PFUNC(600),YP1(600),
     2   DEQSRN(600),DSR(350),THETA0(600),DNSRN(4,350),EQST1(600),
     3   DNSTS(4,350),CT(600)
        COMMON /YN/ NELEM,NPOIN,MP,NSTEP
        COMMON /AB/ PSTRAN(4,600),DNPSRN(4,350)

        DIMENSION SM(4),SM1(4),SSM(4)

        DO 100 I=1,NPOIN
        SUM=0.0D0
        SUM1=0.0D0
        DO 10 IJ=1,4

        SSM(IJ)=0.0D0
        SM(IJ)=0.0D0
10     SM1(IJ)=0.0D0
        NME=0
        DO 20 L=1,NELEM
        P=0.0D0
        IF(NPORE(L).NE.0) P=1.D0
        DO 20 J=1,3
        N=NOD(J,L)
        IF(I.NE.N) GO TO 20
        NME=NME+1
        SUM=SUM+EQST1(L)
        SUM1=SUM1+DEQSRN(L)
        DO 30 IJ=1,4
        SSM(IJ)=SSM(IJ)+PSTRAN(IJ,L)*P
        SM(IJ)=SM(IJ)+STRES(IJ,L)
30     SM1(IJ)=SM1(IJ)+STRAN(IJ,L)
20     CONTINUE
        AME1=1.D0/FLOAT(NME)
        ST(I)=SUM*AME1
        DSR(I)=SUM1*AME1
        DO 40 K=1,3
        DNPSRN(K,I)=SSM(K)*AME1
        DNSTS(K,I)=SM(K)*AME1
40     DNSRN(K,I)=SM1(K)*AME1
        DNPSRN(4,I)=SSM(4)*AME1
        DNSTS(4,I)=SM(4)*AME1
        DNSRN(4,I)=SM1(4)*AME1
100    CONTINUE
        RETURN
        END

        SUBROUTINE SPWRIT(SPUN,PUNCH,SPPUN,VNECK,EXTEN,VOLTOT,NPL,NPM)
        IMPLICIT REAL*8 (A-H,O-Z)
        COMMON /YN/ NELEM,NPOIN,MP,NSTEP
        COMMON /IB/ ISORN,IND,ILARGE,IEXACT,NX,NY
        COMMON /XN/ XR(2,350),XG(2,600),V(650),FORCE(20),FSMAX(20,60)
        COMMON /YX/ STRAN(4,600),STRES(4,600),DSRN(4,600),RATIO(600),
     1   DSTS(4,600),EQSTS(600),EQSRN(600),ST(350),PFUNC(600),YP1(600),
     2   DEQSRN(600),DSR(350),THETA0(600),DNSRN(4,350),EQST1(600),
     3   DNSTS(4,350),CT(600)
        COMMON /NN/ NPE(600),NPEE(600)

        WRITE(6,10) NSTEP,NPL,NPM
        WRITE(6,20) SPUN
        WRITE(6,30) PUNCH,SPPUN,VNECK,EXTEN
        WRITE(6,40) (NPE(I),I=1,NPL)
        WRITE(6,*)
        WRITE(6,50) VOLTOT
        WRITE(6,60) (FORCE(I),I=1,2*NX+2)
        N1=NPOIN-NX
        N2=NPOIN
        WRITE(6,70) (ST(I),I=N1,N2)
        WRITE(6,80)
        WRITE(6,90) (DNSTS(1,I),I=N1,N2)
        WRITE(6,100) (DNSTS(2,I),I=N1,N2)
        WRITE(6,200) (DNSTS(3,I),I=N1,N2)
        IF(ISORN.EQ.0) GO TO 600

        WRITE(6,300) (DNSTS(4,I),I=N1,N2)
600    CONTINUE
        IF(NPM.EQ.0) GO TO 500
        WRITE(6,*)
        WRITE(6,400) (NPEE(I),I=1,NPM)
500    CONTINUE

10     FORMAT(//1H ,'CALCULATION STEP=',2X,I4,5X,'NUMBER OF PLASTIC
     1  ELEMENTS=',2X,I4,5X,'NUMBER OF UNLOADED ELEMENTS=',2X,I4//)
20     FORMAT(1H ,'NORMALIZED TENSILE FORCE FROM NODAL FORCE= ',D15.7/)
30     FORMAT(1H ,'TENSILE FORCE= ',D15.7,2X,'F/(YP0*AREA0)=  ', D15.7,
     1   2X,'V/W= ',D15.7,2X,'U/L= ',D15.7/)
40     FORMAT(1H ,'ELEMENT NUMBERS IN PLASTIC STATE',/(1H ,30I4))
50     FORMAT(1H ,'RELATIVE TOTAL VOLUME= ',D15.7/ /)
60     FORMAT(1H ,'NODAL FORCES ALONG THE CHUCK',/(1H ,8D13.5))
70     FORMAT(1H ,'NOD EQSTRESS',/1H ,7D15.7 /)
80     FORMAT(1H ,'STRESS AT NODES'/)
90     FORMAT(1H ,'STRESSX=',/1H ,7D15.7)
100    FORMAT(1H ,'STRESSY=',/1H ,7D15.7)
200    FORMAT(1H ,'STRESSXY=',/1H ,7D15.7)
300    FORMAT(1H ,'STRESSZ=',/1H, ,7D15.7//)
400    FORMAT(1H ,'ELEMENT NUMBERS OF UNLOADED ELEMENT',/(1H ,30I4))

        RETURN
        END

        SUBROUTINE DEWRIT
        IMPLICIT REAL*8 (A-H,O-Z)
        COMMON /XN/ XR(2,350),XG(2,600),V(650),FORCE(20),FSMAX(20,60)
        COMMON /YN/ NELEM,NPOIN,MP,NSTEP
        COMMON /IB/ ISORN,IND,ILARGE,IEXACT,NX,NY
        COMMON /YX/ STRAN(4,600),STRES(4,600),DSRN(4,600),RATIO(600),
     1   DSTS(4,600),EQSTS(600),EQSRN(600),ST(350),PFUNC(600),YP1(600),
     2   DEQSRN(600),DSR(350),THETA0(600),DNSRN(4,350),EQST1(600),
     3   DNSTS(4,350),CT(600)
        COMMON /AB/ PSTRAN(4,600),DNPSRN(4,350)

        WRITE(6,10) ((XR(I,J),I=1,2),J=1,NPOIN)
        WRITE(6,20) (ST(I),I=1,NPOIN)
        WRITE(6,30) (DSR(I),I=1,NPOIN)

        WRITE(6,80)
        WRITE(6,81) (DNSTS(1,I),I=1,NPOIN)
        WRITE(6,82) (DNSTS(2,I),I=1,NPOIN)
        WRITE(6,83) (DNSTS(3,I),I=1,NPOIN)
        IF(ISORN.EQ.0) GO TO 150
        WRITE(6,84) (DNSTS(4,I),I=1,NPOIN)

150    CONTINUE
        WRITE(6,85)
        WRITE(6,86) (DNSRN(1,I),I=1,NPOIN)
        WRITE(6,87) (DNSRN(2,I),I=1,NPOIN)
        WRITE(6,88) (DNSRN(3,I),I=1,NPOIN)
        IF(ISORN.EQ.1) GO TO 160
        WRITE(6,89) (DNSRN(4,I),I=1,NPOIN)
160    CONTINUE
        WRITE(6,90)
        WRITE(6,91) (DNPSRN(1,I),I=1,NPOIN)

        WRITE(6,92) (DNPSRN(2,I),I=1,NPOIN)
        WRITE(6,93) (DNPSRN(3,I),I=1,NPOIN)
        IF(ISORN.EQ.1) GO TO 170
        WRITE(6,94) (DNPSRN(4,I),I=1,NPOIN)
170    CONTINUE

10     FORMAT(1H ,'NODAL COORDINATES',/(1H ,1P10D13.5))
20     FORMAT(1H ,'NOD EQSTRESS',/(1H ,1P10D13.5))
30     FORMAT(1H ,'NODE DEQSRN',/(1H ,1P10D13.5))
80     FORMAT(1H ,'STRESS AT NODES'/)
81     FORMAT(1H ,'STRESSX=',/(1H ,1P10D13.5))
82     FORMAT(1H ,'STRESSY=',/(1H ,1P10D13.5))
83     FORMAT(1H ,'STRESSXY=',/(1H ,1P10D13.5))
84     FORMAT(1H ,'STRESSZ=',/(1H ,1P10D13.5))
85     FORMAT(1H ,'STRAIN AT NODES'/)
86     FORMAT(1H ,'STRAINX=',/(1H ,1P10D13.5))
87     FORMAT(1H ,'STRAINY=',/(1H ,1P10D13.5))
88     FORMAT(1H ,'STRAINXY=',/(1H ,1P10D13.5))
89     FORMAT(1H ,'STRAINZ=',/(1H ,1P10D13.5))
90     FORMAT(1H ,'NODE PSTRN'/)
91     FORMAT(1H ,'PSTRAINX=',/(1H ,1P10D13.5))
92     FORMAT(1H ,'PSTRAINY=',/(1H ,1P10D13.5))
93     FORMAT(1H ,'PSTRAINXY=',/(1H ,1P10D13.5))
94     FORMAT(1H ,'PSTRAINZ=',/(1H ,1P10D13.5))

        RETURN
        END

回复 支持 反对

使用道具 举报

发表于 2024-10-7 10:23:43 | 显示全部楼层
FORTRAN 5.1 都是20年前的产品了,当今的操作系统很难支持他,编程软件有很多替代的吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-10 17:49:04 | 显示全部楼层
michaelx007 发表于 2024-9-30 16:33
楼主能把源程序也发一下吗,我也编译一下试试。

有没有编译?
回复 支持 反对

使用道具 举报

发表于 2024-10-10 18:36:21 | 显示全部楼层

我用的是GCC家族里的gfortran编译器,没通过,提示有错误
回复 支持 反对

使用道具 举报

发表于 2024-10-10 22:06:13 | 显示全部楼层
本帖最后由 michaelx007 于 2024-10-11 11:05 编辑


这是我算出来的结果,不知道是否正确。

链接: https://pan.baidu.com/s/19CCjyxL_AKgDVggQ1_jGEw 提取码: pmxd 复制这段内容后打开百度网盘手机App,操作更方便哦

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-22 06:10 , Processed in 0.109200 second(s), 9 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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