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

📄 a04b.for

📁 ADINA84有限元编程学习的好例子
💻 FOR
📖 第 1 页 / 共 5 页
字号:
      DO 100 LY=1,3
      S=XG(LY,3)
      WT=WGT(LX,3)*WGT(LY,3)
C
C
C
      CALL FUNCT2 (R,S,H,P,NOD5,XJ,DET,XX,NEL,IINTP)
C
C
      IF (ITYP2D.EQ.0) GO TO 40
      IF (ITYP2D.GT.0) XBAR=THIC
      GO TO 60
   40 XBAR=0.D0
      DO 50 K=1,IEL
   50 XBAR=XBAR + H(K)*XX(1,K)
C
   60 FAC=WT*XBAR*DET*DE
C
C     CONSISTENT MASS
C
      NDPN=2
      IF(ITYP2D.EQ.3)NDPN=3
      IF (IMASS.LT.2) GO TO 320
      DO 200 I = 1,IEL
      D(2*I-1) = H(I)
  200 D(2*I) = H(I)
      KL=1
      ND1=2*IEL
      NDPN2=NDPN-2
      NDPN1=NDPN-1
      DO 300 I=1,ND1,2
      DO 301 J=I,ND1,2
      CM(KL)=CM(KL) + D(I)*D(J)*FAC
  301 KL=KL + NDPN
  300 KL=KL+(ND-(I+((I-1)/2)*NDPN2))*NDPN1-NDPN2
      GO TO 100
C
C     LUMPED MASS
C
  320 FACM=FAC/IEL
      DO 325 I=1,ND,NDPN
  325 XM(I)=XM(I) + FACM
C
  100 CONTINUE
C
      IF (IMASS.EQ.1) GO TO 335
      IF(NDPN.EQ.3)GO TO 410
C
      KL=1
      DO 401 I=1,ND,2
      KS=KL + ND - I + 1
      DO 400 J=I,ND,2
      CM(KS)=CM(KL)
      KS=KS + 2
  400 KL=KL + 2
  401 KL=KL + ND - I
C
      RETURN
C
C
C
  410 KL=1
      DO 451 I=1,ND,3
      KS1=KL+ND-I+1
      KS2=KS1+ND-I
      DO 450 J=I,ND,3
      CM(KS1)=CM(KL)
      CM(KS2)=CM(KL)
      KL=KL+3
      KS1=KS1+3
      KS2=KS2+3
  450 CONTINUE
      KL=KL+2*(ND-I)-1
  451 CONTINUE
C
      RETURN
C
C
C
C
C
  335 DO 340 I=1,ND,NDPN
  340 XM(I+1)=XM(I)
      IF (NDPN.LT.3) RETURN
      DO 350 I=1,ND,3
  350 XM(I+2)=XM(I)
C
      RETURN
C
C
      END
      SUBROUTINE DERIQ (NEL,XX,B,DET,R,S,X1BAR,NOD5)
C
C
C
C
C***ADD:DPR***
      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 /TODIM/ BET,THIC,DE,IEL,NND5,ISOCOR
      DIMENSION     XX(2,*),B(4,*),NOD5(*)
      DIMENSION H(9),P(2,9),XJ(2,2),XJI(2,2)
C
      EQUIVALENCE (NPAR(5),ITYP2D)
C
C
C
      IINTP=0
      CALL FUNCT2 (R,S,H,P,NOD5,XJ,DET,XX,NEL,IINTP)
C
C
C
      DUM = 1.0/DET
      XJI(1,1) = XJ(2,2)* DUM
      XJI(1,2) =-XJ(1,2)* DUM
      XJI(2,1) =-XJ(2,1)* DUM
      XJI(2,2) = XJ(1,1)* DUM
C
C
      DO 130 K=1,IEL
      K2=K*2
      B(1,K2-1) = 0.D0
      B(1,K2  ) = 0.D0
      B(2,K2-1) = 0.D0
      B(2,K2  ) = 0.D0
      DO 120 I=1,2
      B(1,K2-1) = B(1,K2-1) + XJI(1,I) * P(I,K)
  120 B(2,K2  ) = B(2,K2  ) + XJI(2,I) * P(I,K)
      B(3,K2  ) = B(1,K2-1)
  130 B(3,K2-1) = B(2,K2  )
C
C
      IF (ITYP2D.GT.0) RETURN
C
C
      X1BAR = 0.D0
      DO 50 K=1,IEL
   50 X1BAR = X1BAR + H(K)* XX(1,K)
C
C
      IF(X1BAR.GT.0.1D-7) GO TO 150
C
C
      ND=2*IEL
      DO 140 K=1,ND
  140 B(4,K)=B(1,K)
      RETURN
C
C     NON-ZERO RADIUS
C
  150 DUM = 1.0/X1BAR
      DO 160 K=1,IEL
      K2=K*2
      B(4,K2  ) = 0.D0
  160 B(4,K2-1) = H(K) * DUM
C
      RETURN
C
C
      END
      SUBROUTINE FUNCT2 (R,S,H,P,NOD5,XJ,DET,XX,NEL,IINTP)
C
C
C .                                                                   .
C .   P R O G R A M                                                   .
C .                                                                   .
      IMPLICIT DOUBLE PRECISION ( A-H,O-Z )
C***END:DPR***
      COMMON /VAR/   NG,MODEX,IUPDT,KSTEP,ITEMAX,IEQREF,ITE,KPRI,IREF,
     1               IEQUIT,IPRI,KPLOTN,KPLOTE
      COMMON /EL/ IND,ICOUNT,NPAR(20),NUMEG,NEGL,NEGNL,IMASS,IDAMP,
     1            ISTAT,NDOF,KLIN,IEIG,IMASSN,IDAMPN
      COMMON /TODIM/ BET,THIC,DE,IEL,NND5,ISOCOR
      DIMENSION H(*),P(2,*),NOD5(*),IPERM(4),XJ(2,2),XX(2,*)
C
      EQUIVALENCE (NPAR(8),IDEGEN)
C
      DATA IPERM/2,3,4,1/
C
      RP = 1.0 + R
      SP = 1.0 + S
      RM = 1.0 - R
      SM = 1.0 - S
      R2 = 1.0 - R*R
      S2 = 1.0 - S*S
C
C
C
C     4-NODE ELEMENT
C
      H(1) = 0.25* RP* SP
      H(2) = 0.25* RM* SP
      H(3) = 0.25* RM* SM
      H(4) = 0.25* RP* SM
      P(1,1)=0.25*SP
      P(1,2)=-P(1,1)
      P(1,3)=-0.25*SM
      P(1,4)=-P(1,3)
      P(2,1)=0.25*RP
      P(2,2)=0.25*RM
      P(2,3)=-P(2,2)
      P(2,4)=-P(2,1)
C
      IF (IEL.EQ.4) GO TO 80
C
C
      I=0
    2 I=I + 1
      IF (I.GT.NND5) GO TO 40
      NN=NOD5(I) - 4
      GO TO (5,6,7,8,9),NN
C
    5 H(5) = 0.50* R2* SP
      P(1,5)=-R*SP
      P(2,5)=0.50*R2
      GO TO 2
    6 H(6) = 0.50* RM* S2
      P(1,6)=-0.50*S2
      P(2,6)=-RM*S
      GO TO 2
    7 H(7) = 0.50* R2* SM
      P(1,7)=-R*SM
      P(2,7)=-0.50*R2
      GO TO 2
    8 H(8) = 0.50* RP* S2
      P(1,8)=0.50*S2
      P(2,8)=-RP*S
      GO TO 2
    9 H(9)=R2*S2
      P(1,9)=-2.*R*S2
      P(2,9)=-2.*S*R2
C
C
   40 IH=0
   41 IH=IH + 1
      IF (IH.GT.NND5) GO TO 50
      IN=NOD5(IH)
      IF (IN.EQ.9) GO TO 46
      I1=IN - 4
      I2=IPERM(I1)
      H(I1)=H(I1) - 0.5*H(IN)
      H(I2)=H(I2) - 0.5*H(IN)
      H(IH + 4)=H(IN)
      DO 45 J=1,2
      P(J,I1)=P(J,I1) - 0.5*P(J,IN)
      P(J,I2)=P(J,I2) - 0.5*P(J,IN)
   45 P(J,IH + 4)=P(J,IN)
      GO TO 41
   46 DO 47 I=1,4
      H(I)=H(I) - 0.25*H(9)
      P(1,I)=P(1,I) - 0.25*P(1,9)
   47 P(2,I)=P(2,I) - 0.25*P(2,9)
      N51=NND5 - 1
      IH=0
   48 IH=IH + 1
      IF (IH.GT.N51) GO TO 49
      IN=NOD5(IH)
      I1=IN - 4
      I2=IPERM(I1)
      H(IH+4)=H(IH+4) - 0.5*H(9)
      H(I1  )=H(I1  ) + 0.25*H(9)
      H(I2  )=H(I2  ) + 0.25*H(9)
      DO 52 J=1,2
      P(J,IH+4)=P(J,IH+4) - 0.50*P(J,9)
      P(J,I1  )=P(J,I1  ) + 0.25*P(J,9)
   52 P(J,I2  )=P(J,I2  ) + 0.25*P(J,9)
      GO TO 48
   49 H(NND5+4)=H(9)
      P(1,NND5+4)=P(1,9)
      P(2,NND5+4)=P(2,9)
C
C
   50 IF (IDEGEN.LE.0) GO TO 80
      IF (ISOCOR.LE.0) GO TO 80
C
      DH2D=R2*S2
      H(2)=H(2) + 0.125*DH2D
      H(3)=H(3) + 0.125*DH2D
      H(6)=H(6) - 0.25*DH2D
C
      P(1,2)=P(1,2) - 0.25*R*S2
      P(2,2)=P(2,2) - 0.25*S*R2
      P(1,3)=P(1,3) - 0.25*R*S2
      P(2,3)=P(2,3) - 0.25*S*R2
      P(1,6)=P(1,6) + 0.5*R*S2
      P(2,6)=P(2,6) + 0.5*S*R2
C
C
   80 IF (IINTP.GT.0) RETURN
      DO 100 I=1,2
      DO 100 J=1,2
      DUM = 0.D0
      DO 90 K=1,IEL
   90 DUM = DUM + P(I,K)* XX(J,K)
  100 XJ(I,J) = DUM
C
C
      DET = XJ(1,1)* XJ(2,2) - XJ(2,1)* XJ(1,2)
      CALL DETCH (NG,NEL,DET,1)
      RETURN
C
      END
      SUBROUTINE MAXMIN (STRESS,P1,P2,AG)
C***ADD:DPR***
      IMPLICIT DOUBLE PRECISION ( A-H,O-Z )
C***END:DPR***
C
      DIMENSION STRESS(*)
C
C
      CC = (STRESS(1)+STRESS(2)) * 0.5
      BB = (STRESS(1)-STRESS(2)) * 0.5
      CR =  SQRT(BB**2 + STRESS(3)**2)
      P1 =  CC+CR
      P2 =  CC-CR
      AG=4.5D1
      IF(ABS(BB).LT.0.1D-7) RETURN
C
      AG =  28.648* ATAN2(STRESS(3),BB)
C
      RETURN
C
      END
      SUBROUTINE STSTL (NEL,XX,PROP,C)
C
C
C
C
C***ADD:DPR***
      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 /TODIM/ BET,THIC,DE,IEL,NND5,ISOCOR
C
      DIMENSION XX(2,*),PROP(*),C(4,*),D(4,4),T(4,4)
C
      EQUIVALENCE (NPAR(5),ITYP2D),(NPAR(15),MODEL)
C
C
      GO TO (1,2), MODEL
C
C
C
C
    1 YM=PROP(1)
      PV=PROP(2)
      C1=YM/(1+PV)
      B1=C1*PV/(1.-2.*PV)
      A1=B1+C1
      C(1,1)=A1
      C(1,2)=B1
      C(1,3)=0.D0
      C(2,1)=B1
      C(2,2)=A1
      C(2,3)=0.D0
      C(3,1)=0.D0
      C(3,2)=0.D0
      C(3,3)=C1/2.
C
      IF (ITYP2D.EQ.1) RETURN
C
      C(1,4)=B1
      C(2,4)=B1
      C(3,4)=0.D0
      C(4,1)=B1
      C(4,2)=B1
      C(4,3)=0.D0
      C(4,4)=A1
C
      IF (ITYP2D.LT.2) RETURN
C
C
      GO TO 95
C
C
C
C
    2 IF (PROP(3).EQ.0.D0) GO TO 1
      PI=4.D0*ATAN(1.D0)
C
C
      DX = XX(1,2) - XX(1,1)
      DY = XX(2,2) - XX(2,1)
      XL = DX**2 + DY**2
      IF(XL.GT.0.1D-7) GO TO 102
      write(66,2000) NEL
      STOP
  102 XL = SQRT(XL)
      SA = ABS(DY/XL)
      CA = SQRT(1.-SA*SA)
      AL = ATAN2(SA,CA)
      IF(DX.GE.0.D0 .AND. DY.GE.0.D0) P12 =         AL
      IF(DX.LT.0.D0 .AND. DY.GE.0.D0) P12 = PI    - AL
      IF(DX.LT.0.D0 .AND. DY.LT.0.D0) P12 = PI    + AL
      IF(DX.GE.0.D0 .AND. DY.LT.0.D0) P12 = PI*2.0- AL
C
C
      PI2=PI*2.
      IF(ABS(P12).GT.PI2) STOP
      GAM=P12 + BET * PI / 180.0
      IF (GAM.GE.PI2) GAM=GAM-PI2
C
C
      IF(ABS(GAM).LT.0.1D-7) GO TO 202
      SG = SIN(GAM)
      CG = COS(GAM)
      T(1,1) =  CG**2
      T(1,2) =  SG**2
      T(1,3) =  CG* SG
      T(1,4) =  0.D0
      T(2,1) =  T(1,2)
      T(2,2) =  T(1,1)
      T(2,3) = -T(1,3)
      T(2,4) =  0.D0
      T(3,1) =  T(2,3)* 2.0
      T(3,2) = -T(3,1)
      T(3,3) =  T(1,1)- T(1,2)
      T(3,4) =  0.D0
      T(4,1) =  0.D0
      T(4,2) =  0.D0
      T(4,3) =  0.D0
      T(4,4) =  1.D0
  202 CONTINUE
C
C
      DUM = PROP(1)* PROP(2)* PROP(3)* PROP(7)
      IF (DUM.GT.0.1D-7) GO TO 25
      write(66,2010)
      STOP
   25 C(1,1) = 1.0/PROP(1)
      C(2,2) = 1.0/PROP(2)
      C(3,3) = 1.0/PROP(7)
      C(4,4) = 1.0/PROP(3)
      C(1,2) =-PROP(4)* C(2,2)
      C(1,4) =-PROP(5)* C(4,4)
      C(2,4) =-PROP(6)* C(4,4)
      C(1,3) = 0.D0
      C(2,3) = 0.D0
      C(3,4) = 0.D0
      DO 30 I=1,4
      DO 30 J=I,4
   30 C(J,I) = C(I,J)
C
C
      CALL POSINV (C,4,4)
C
C
      IF (ABS(GAM).LT.0.1D-7) GO TO 90
C
C
      DO 60 IR=1,4
      DO 60 IC=1,4
      D(IR,IC) = 0.D0
      DO 50 IN=1,4
   50 D(IR,IC) = D(IR,IC) + T(IN,IR)* C(IN,IC)
   60 CONTINUE
C
C
      DO 80 IR=1,4
      DO 80 IC=IR,4
      C(IR,IC) = 0.D0
      DO 70 IN=1,4
   70 C(IR,IC) = C(IR,IC) + D(IR,IN)* T(IN,IC)
   80 C(IC,IR)=C(IR,IC)
C
   90 IF (ITYP2D.LT.2) RETURN
C
C
   95 DO 110 I=1,3
      A=C(I,4)/C(4,4)
      DO 110 J=I,3
      C(I,J)=C(I,J) - C(4,J)*A
  110 C(J,I)=C(I,J)
      RETURN
C
C
C
 2000 FORMAT(10H0*** ERROR,/
     +       43H ZERO LENGTH BETWEEN NODES 1-2 IN ELEMENT (,I4,1H)  )

⌨️ 快捷键说明

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