⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 a10.for

📁 ADINA84有限元编程学习的好例子
💻 FOR
📖 第 1 页 / 共 4 页
字号:
      PRD=PROP2(2) - PROP1(2)
      ETD=PROP2(4) - PROP1(4)
      YSD=PROP2(3) - PROP1(3)
C
      CD=C2 - C1
      CM=0.5*YMM/(1.0 + PRM)
      EETD=((YMM*YMM*ETD) - (ETM*ETM*YMD))/((YMM - ETM)*(YMM - ETM))
C
      IF(ITYP2D.LT.2) GO TO 40
C
      ECBM=1.0 - PRM*PRM
      ECAM=YMM/ECBM
      ECCM=1.0 + PRM*PRM
C
      COEF1=(ECBM*YMD + 2.0*YMM*PRM*PRD)/(YMM*ECBM*ECBM)
      COEF2=(YMM*PRD*ECCM + YMD*PRM*ECBM)/(YMM*ECBM*ECBM)
C
C
C
C
   40 IF(MODEL.EQ.10) GO TO 45
C
      SXM=SXM - ALFAM(1)
      SYM=SYM - ALFAM(2)
      SXYM=SXYM - ALFAM(3)
      SZM=SZM - ALFAM(4)
C
C     PLANE STRESS **
C
   45 IF(ITYP2D.LT.2) GO TO 50
C
      WP1=0.5*ECAM*((SXM + PRM*SYM)*(DEPS(1) - DPSC(1) - DPST) + (SYM +
     1    PRM*SXM)*(DEPS(2) - DPSC(2) - DPST)) + CM*SXYM*(DEPS(3) -
     2    DPSC(3))
C
      WP2=0.5*COEF1*(SXM*STRSSM(1) + SYM*STRSSM(2) - PRM*(SXM*
     1    STRSSM(2) + SYM*STRSSM(1)))
C
      WP2=WP2 + 0.5*COEF2*(SXM*STRSSM(2) + SYM*STRSSM(1) - PRM*(SXM*
     1    STRSSM(1) + SYM*STRSSM(2))) + (CD/CM)*SXYM*STRSSM(3)
C
      DENMP=(2.0*XCON2*XCON2*YLDM*YLDM*EETM) + 0.5*ECAM*(SXM*SXM +
     1       SYM*SYM + 2.0*PRM*SXM*SYM) + 2.0*CM*SXYM*SXYM
C
      GO TO 60
C
C
   50 WP1=CM*(SXM*(DEPS(1) - DPSC(1) - DPST) + SYM*(DEPS(2) - DPSC(2) -
     1    DPST) + SXYM*(DEPS(3) - DPSC(3)) + SZM*(DEPS(4) - DPSC(4) -
     2    DPST))
C
      WP2=(0.5*CD/CM)*(SXM*STRSSM(1) + SYM*STRSSM(2) + 2.0*SXYM*
     1     STRSSM(3) + SZM*STRSSM(4))
C
      DENMP=(XCON1*YLDM*YLDM)*(CM + EETM*XCON2)
C
   60 WP=WP1 + WP2
C
      IF(MODEL.EQ.11) GO TO 65
C
C
      XLAMDA=(WP - (YLDM*XCON2)*(EPSTRM*EETD + YSD))/DENMP
      WPP=XLAMDA
      GO TO 70
C
C
   65 XLAMDA=(WP - (YLDM*YSD*XCON2))/DENMP
      WPP=XLAMDA
C
C
   70 IF(XLAMDA.GT.0.D0) GO TO 75
      XLAMDA=0.D0
      GO TO 80
C
   75 IF(KEY.EQ.2 .AND. IEQREF.NE.1) XLAMDA=XLAMDA -WP1/DENMP
C
   80 DPSP(1)=XLAMDA*SXM
      DPSP(2)=XLAMDA*SYM
      DPSP(3)=2.0*XLAMDA*SXYM
      DPSP(4)=XLAMDA*SZM
C
      XLAMDA=WPP
C
      IF(KEY.EQ.2 .AND. IEQREF.NE.1 .AND. XLAMDA.GE.0.D0) GO TO 90
C
      SXM=SXT
      SYM=SYT
      SXYM=SXYT
      SZM=SXT
C
      RETURN
C
C
   90 YLD1=YLDM
C
      SX1=SXM
      SY1=SYM
      SXY1=SXYM
      SZ1=SZM
C
      YIELD=YLD1*YLD1/(3.0*C2)
      GAMA1=1.0/(YIELD*(1.0 + EETM/(3.0*CM)))
C
      GAMA=GAMA1*SX1
      CEP(1,1)=A2 - GAMA*SX1
      CEP(1,2)=B2 - GAMA*SY1
      CEP(1,3)=   - GAMA*SXY1
      CEP(1,4)=B2 - GAMA*SZ1
C
      GAMA=GAMA1*SY1
      CEP(2,1)=CEP(1,2)
      CEP(2,2)=A2 - GAMA*SY1
      CEP(2,3)=   - GAMA*SXY1
      CEP(2,4)=B2 - GAMA*SZ1
C
      GAMA=GAMA1*SXY1
      CEP(3,1)=CEP(1,3)
      CEP(3,2)=CEP(2,3)
      CEP(3,3)=C2 - GAMA*SXY1
      CEP(3,4)=   - GAMA*SZ1
C
      GAMA=GAMA1*SZ1
      CEP(4,1)=CEP(1,4)
      CEP(4,2)=CEP(2,4)
      CEP(4,3)=CEP(3,4)
      CEP(4,4)=A2 - GAMA*SZ1
C
      IF(ITYP2D.LT.2) RETURN
C
C
      DO 100 I=1,3
      FAC=CEP(I,4)/CEP(4,4)
      DO 100 J=I,3
      CEP(I,J)=CEP(I,J) - CEP(4,J)*FAC
  100 CEP(J,I)=CEP(I,J)
C
      RETURN
C
      END
      SUBROUTINE EMAT2(TMP,PROP,PROPI,XA1,XB1,C1,D1,E1,F1,KKK)
C
C
C
C
C
      IMPLICIT DOUBLE PRECISION ( A-H,O-Z )
C***END:DPR***
      COMMON /EL/ IND,ICOUNT,NPAR(20),NUMEG,NEGL,NEGNL,IMASS,IDAMP,ISTAT
     1           ,NDOF,KLIN,IEIG,IMASSN,IDAMPN
      COMMON /MATMOD/ STRESS(4),STRAIN(4),C(4,4),IPT,NEL,IPS,ISVE
C
      DIMENSION PROP(16,*),PROPI(*)
C
      EQUIVALENCE (NPAR(5),ITYP2D)
C
C
C
C
C
      CALL MTITP2(PROP,TMP,PROPI)
      YM=PROPI(1)
      PR=PROPI(2)
C
C
      A2=YM/(1.0 + PR)
      C1=A2*0.5
      A2=A2/(1.0 - 2.0*PR)
      B2=A2*PR
      A2=A2 - B2
      A1=A2
      B1=B2
      XA1=A1
      XB1=B1
      D1=PR/(PR - 1.0)
      E1=1.0/YM
      F1=-PR*E1
C
      IF(ITYP2D.LT.2) GO TO 30
C
C        PLANE STRESS **
C
   20 A1=YM/(1.0 - PR*PR)
      B1=PR*A1
C
C
   30 IF(KKK.EQ.1) RETURN
C
      DO 40 I=1,4
      DO 40 J=1,4
   40 C(I,J)=0.D0
C
      C(1,1)=A1
      C(1,2)=B1
      C(2,1)=B1
      C(2,2)=A1
      C(3,3)=C1
C
      IF(ITYP2D.GE.2) RETURN
C
      C(1,4)=B1
      C(2,4)=B1
      C(4,1)=B1
      C(4,2)=B1
      C(4,4)=A1
C
      RETURN
C
      END
      SUBROUTINE MTITP2(PROP,TMP,PROPI)
C
C
C
C
C        YOUNGS MODULUS
      IMPLICIT DOUBLE PRECISION ( A-H,O-Z )
C***END:DPR***
      COMMON /SOLPM2/ TREF,XINTP,XCON1,XCON2,XPARM1,XPARM2,TOLIL,TOLPC,
     1               TOL1,TOL2,TOL3,TOL4,TOL5,TOL6,TCHK,CRPCON(8),DTMN,
     2               SUBDD,RNGL,RNGU,DTT,TOL7,
     3               KCRP,NITE,NALG,IINTP,NPTS,ITCHK,IST,ISR
      COMMON /MATMOD/ STRESS(4),STRAIN(4),C(4,4),IPT,NEL,IPS,ISVE
C
      DIMENSION PROP(16,*),PROPI(*)
C
C
C
C
C
    5 IF(TMP.GE.RNGL) GO TO 10
      write(66,3001)
      STOP
C
   10 L=0
      DO 20 K=2,NPTS
      L=L + 1
      DUM=PROP(K,1)
      IF(K.EQ.NPTS) DUM=RNGU
      IF(TMP.GT.DUM) GO TO 20
      GO TO 25
   20 CONTINUE
      write(66,3001)
      STOP
C
   25 XRATIO=(TMP - PROP(L,1))/(PROP(L + 1,1) - PROP(L,1))
C
C
      IF(XRATIO.GT.1.D0) XRATIO=1.D0
      IF(XRATIO.LT.0.D0) XRATIO=0.D0
C
C
C
C
      DO 30 M=2,6
   30 PROPI(M - 1)=PROP(L,M) + XRATIO*(PROP(L + 1,M) - PROP(L,M))
C
      RETURN
C
 3001 FORMAT(//,92H    ERROR   TEMPERATURE OUTSIDE RANGE OF MATERIAL PRO
     1PERTY TEMPERATURES  (SUBROUTINE MTITP2))
C
      END
      SUBROUTINE CREEP2(DDT,DEPSC,TEMPD,EPSC,ORIG,NORG,STRESS,GAMA,
     1                  STRNR,PTIME2,EST,SX,SY,SXY,SZ,F,R,G,FP,INDEX,
     2                  ECSTR)
C
C
C
C     CYCLIC CREEP
C
      IMPLICIT DOUBLE PRECISION ( A-H,O-Z )
C***END:DPR***
      COMMON /EL/ IND,ICOUNT,NPAR(20),NUMEG,NEGL,NEGNL,IMASS,IDAMP,ISTAT
     1,NDOF,KLIN,IEIG,IMASSN,IDAMPN
      COMMON /VAR/ NG,MODEX,IUPDT,KSTEP,ITEMAX,IEQREF,ITE,KPRI,
     1             IREF,IEQUIT,IPRI,KPLOTN,KPLOTE
      COMMON /ADINAI/ OPVAR(7),TSTART,IRINT,ISTOTE
      COMMON /SOLPM2/ TREF,XINTP,XCON1,XCON2,XPARM1,XPARM2,TOLIL,TOLPC,
     1               TOL1,TOL2,TOL3,TOL4,TOL5,TOL6,TCHK,CRPCON(8),DTMN,
     2               SUBDD,RNGL,RNGU,DTT,TOL7,
     3               KCRP,NITE,NALG,IINTP,NPTS,ITCHK,IST,ISR
C
      DIMENSION DEPSC(4),ORIG(4,*),EPSC(*),STRESS(*)
C
C
C
      IMAX=50
      ETOL1=5.D-3
      ETOL4=5.D-6
      ETOL5=1.D-20
C
C
   10 CALL CYCRP2(ECSTR,EPSC,ORIG,NORG,STRESS,INDEX)
      IF(EST.LE.TOL5) RETURN
C
      IF (KCRP.GE.2) GO TO 20
C
C
      CALL CRPLW2 (EST,ECSTR,STRN,STRNR,DDT,TEMPD,F,R,G,FP)
      GO TO 60
C
C
C
C
C
   20 PTIME1=FLOAT(KSTEP)*DTT + TSTART
      IF (KCRP.EQ.3) PTIME1=PTIME1 + 0.5*DDT
      IF (ECSTR.LE.ETOL5 .AND. KCRP.EQ.3) PTIME1=1.D-10
      PTIME2=PTIME1
C
      KOUNT=1
   25 CALL CRPLW2 (EST,ECSTR,STRN,STRNR,PTIME2,TEMPD,F,R,G,FP)
C
      IMOD=0
      FUNCT=STRN-ECSTR
      DELTA=FUNCT/STRNR
      IF (ECSTR.LE.ETOL5 .AND. KCRP.EQ.3)  GO TO 60
      IF(ECSTR.EQ.0.D0) DELTA=PTIME2
C
C
      IF((PTIME2 - DELTA).GE.0.D0) GO TO 30
      DELTA=0.5*PTIME2
      IMOD=1
C
   30 IF(KOUNT.GT.1) GO TO 40
      PTIME2=PTIME1 - DELTA
      DNORM1=ABS(DELTA)
      KOUNT=KOUNT + 1
      GO TO 25
C
C
   40 DNORM2=ABS(DELTA)
      IF(IMOD.EQ.1) GO TO 50
      IF(DNORM2.LE.DNORM1) GO TO 45
C
C     TOLERANCE BAND **
C
      XTOL=ETOL4*PTIME1
      IF(PTIME1.LE.ETOL5) XTOL=ETOL5
      IF(DNORM2.LE.XTOL.AND.DNORM1.LE.XTOL) GO TO 60
      GO TO 50
C
   45 XTOL=ETOL1*PTIME1
      IF(PTIME1.LE.ETOL5) XTOL=ETOL5
      IF(DNORM1.LE.XTOL) GO TO 60
C
C     NO CONVERGENCE *
C
   50 KOUNT=KOUNT + 1
      IF(KOUNT.LE.IMAX) GO TO 55
      write(66,2000)
      STOP
C
   55 PTIME1=PTIME2
      PTIME2=PTIME2 - DELTA
      DNORM1=DNORM2
      GO TO 25
C
C
   60 GAMA=1.5*STRNR/EST
      C1=GAMA*DDT
C
  100 DEPSC(1)=C1*SX
      DEPSC(2)=C1*SY
      DEPSC(3)=C1*2.0*SXY
      DEPSC(4)=C1*SZ
C
      RETURN
C
 2000 FORMAT(//,69H    ERROR   NEWTON ITERATION FAILED TO CONVERGE   (SU
     1BROUTINE CREEP2))
C
      END
      SUBROUTINE CYCRP2(ECSTR,EPSC,ORIG,NORG,STRESS,INDEX)
C
C
C
C
C
      IMPLICIT DOUBLE PRECISION ( A-H,O-Z )
C***END:DPR***
C
      DIMENSION STRESS(*),EPSC(*),ORIG(4,*)
C
C
C
      IF(INDEX.GT.1) GO TO 50
C
C
C
      CALL EFCSTR(EPSD,ORIG,ORIG,2)
C
C
      DUM=0.D0
      DO 15 I=1,4
   15 DUM=DUM+(EPSC(I)-ORIG(I,NORG))*STRESS(I)
      IF(DUM.GE.0.D0) GO TO 50
C
C
      CALL EFCSTR(ECSTR,EPSC,ORIG,NORG)
C
C     NEW VALUES **
C
      IF(ECSTR.GT.EPSD) GO TO 40
C
C
      IF(NORG.EQ.2) GO TO 18
   17 NN=2
      GO TO 19
   18 NN=1
   19 DUM=0.D0
C
      DO 20 I=1,4
   20 DUM=DUM+(EPSC(I)-ORIG(I,NN))*STRESS(I)
      IF(DUM.GE.0.D0) GO TO 25
C
C
      CALL EFCSTR(TECSTR,EPSC,ORIG,NN)
      IF(ECSTR.GE.TECSTR) RETURN
C
C
   25 IF(NORG.EQ.2) GO TO 35
   30 NORG=2
      GO TO 50
   35 NORG=1
      GO TO 50
C
C
   40 IF(NORG.EQ.2) GO TO 42
   41 NORG=2
      GO TO 45
   42 NORG=1
C
   45 DO 48 I=1,4
   48 ORIG(I,NORG)=EPSC(I)
C
C
   50 CALL EFCSTR(ECSTR,EPSC,ORIG,NORG)
C
      RETURN
C
      END
      SUBROUTINE CRPLW2 (STRESS,ECSTR,STRAIN,STRNR,TIME,TEMPD,F,R,G,FP)
C
C
C
C
C
      IMPLICIT DOUBLE PRECISION ( A-H,O-Z )
C***END:DPR***
      COMMON /SOLPM2/ TREF,XINTP,XCON1,XCON2,XPARM1,XPARM2,TOLIL,TOLPC,
     1               TOL1,TOL2,TOL3,TOL4,TOL5,TOL6,TCHK,CRPCON(8),DTMN,
     2               SUBDD,RNGL,RNGU,DTT,TOL7,
     3               KCRP,NITE,NALG,IINTP,NPTS,ITCHK,IST,ISR
C
C
C
      A0=CRPCON(1)
      A1=CRPCON(2)
      A2=CRPCON(3)
      A3=CRPCON(4)
      A4=CRPCON(5)
      A5=CRPCON(6)
      A6=CRPCON(7)
      A7=CRPCON(8)
C
      IF (KCRP - 2) 10,50,60
C
C
   10 IF (A2.GE.1.D0) GO TO 20
C
      RTTOL=2.D1
      EX1=1./(1.-A2)
      EX2=A1*EX1
      EX3=A2*EX1
      EX4=-RTTOL*EX3
C
C
      ECMIN=(A0**EX1)*(STRESS**EX2)*(A2**EX3)*(10.0**EX4)
      IF(ECSTR.LE.ECMIN) GO TO 40
C
   20 IF (ECSTR.EQ.0.D0) GO TO 40
      EX5=1.0/A2
      EX6=A1*EX5
      EX7=(A2-1.)/A2
      EX8=ECSTR**EX7
C
   30 STRNR=(A0**EX5)*(STRESS**EX6)*A2*EX8
C
      RETURN
C
   40 STRAIN=A0*(STRESS**A1)*(TIME**A2)
      STRNR=STRAIN/TIME
C
      RETURN
C
C
   50 F=A0*EXP(A1*STRESS)
      R=A2*((STRESS/A3)**A4)
      G=A5*EXP(A6*STRESS)
      STRAIN=F*(1.-EXP(-R*TIME)) + (G*TIME)
      STRNR=F*R*EXP(-R*TIME) + G
C
      RETURN
C
C
   60 F=A0*STRESS**A1
      R=TIME**A2 + A3*TIME**A4 + A5*TIME**A6
      G=EXP(-A7/(TEMPD + 273.16))
C
      STRAIN=F*R*G
C
      A2M1=A2 - 1.
      A4M1=A4 - 1.
      A6M1=A6 - 1.
      A34 =A3*A4
      A56 =A5*A6
C
      FP=A2*TIME**A2M1 + A34*TIME**A4M1 + A56*TIME**A6M1
C
      STRNR=F*FP*G
C
      RETURN
C
      END
      SUBROUTINE EFCSTR(ECSTR,EPSC,ORIG,NORG)
C
C
C
C     CURRENT ORIGIN
C
      IMPLICIT DOUBLE PRECISION ( A-H,O-Z )
C***END:DPR***
      COMMON /SOLPM2/ TREF,XINTP,XCON1,XCON2,XPARM1,XPARM2,TOLIL,TOLPC,
     1               TOL1,TOL2,TOL3,TOL4,TOL5,TOL6,TCHK,CRPCON(8),DTMN,
     1               SUBDD,RNGL,RNGU,DTT,TOL7,
     3               KCRP,NITE,NALG,IINTP,NPTS,ITCHK,IST,ISR
C
      DIMENSION DEPSC(4),EPSC(*),ORIG(4,*)
C
C
C
      DO 10 I=1,4
   10 DEPSC(I)=EPSC(I)-ORIG(I,NORG)
C
      ECSTR=SQRT(XCON1*(DEPSC(1)*DEPSC(1) + DEPSC(2)*DEPSC(2) +
     1           DEPSC(4)*DEPSC(4)) + XCON2*(DEPSC(3)*DEPSC(3)))
C
      RETURN
C
C*FILE END
      END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -