File: termss.f

package info (click to toggle)
nastran 0.1.95-2
  • links: PTS, VCS
  • area: non-free
  • in suites: bookworm, bullseye, sid
  • size: 122,540 kB
  • sloc: fortran: 284,409; sh: 771; makefile: 324
file content (150 lines) | stat: -rw-r--r-- 4,271 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
      SUBROUTINE TERMSS (NNODE,GPTH,EPNORM,EGPDT,IORDER,MMN,BTERMS)
C
C     SINGLE PRECISION ROUTINE TO CALCULATE B-MATRIX TERMS
C     FOR ELEMENTS  QUAD4, QUAD8 AND TRIA6.
C
C     THE INPUT FLAG LETS THE SUBROUTINE SWITCH BETWEEN QUAD4,
C     QUAD8 AND TRIA6 VERSIONS
C
C     ELEMENT TYPE FLAG (LTYPFL) = 1  FOR QUAD4,
C                                = 2  FOR TRIA6 (NOT AVAILABLE),
C                                = 3  FOR QUAD8 (NOT AVAILABLE).
C
C     THE OUTPUT CONSISTS OF THE DETERMINANT OF THE JACOBIAN
C     (DETJ), SHAPE FUNCTIONS AND THEIR DERIVATIVES. THE OUTPUT
C     PARAMETER, BADJAC, IS AN INTERNAL LOGICAL FLAG TO THE CALLING
C     ROUTINE INDICATING THAT THE JACOBIAN IS NOT CORRECT.
C     PART OF THE INPUT IS PASSED TO THIS SUBROUTINE THROUGH THE
C     INTERNAL COMMON BLOCK  /COMJAC/.
C
      LOGICAL          BADJAC
      INTEGER          MMN(1),LTYPFL,IORDER(1),INDEX(3,3)
      REAL             EGPDT(4,1),EPNORM(4,1)
      REAL             XI,ETA,ZETA,DETJ,SHP(8),JACOB(3,3),DSHPX(8),
     1                 DSHPE(8),DSHP(16),TSHP(8),TDSHP(16),BTERMS(1),
     2                 DUM,TEMP,EPS,TIE(9),TJ(3,3),VN(3),CJAC,GPTH(1),
     3                 TH,GRIDC(3,8)
      COMMON /COMJAC/  XI,ETA,ZETA,DETJ,BADJAC,LTYPFL
      COMMON /CJACOB/  CJAC(19)
      EQUIVALENCE      (DSHPX(1),DSHP(1)), (DSHPE(1),DSHP(9) )
      EQUIVALENCE      (VN(1)   ,CJAC(8)), (TIE(1)  ,CJAC(11))
      EQUIVALENCE      (TH      ,CJAC(1))
C
      EPS = 1.0E-15
      BADJAC = .FALSE.
C
      GO TO (10,30,20), LTYPFL
C
C     QUAD4 VERSION
C
   10 NGP = 4
      CALL Q4SHPS (XI,ETA,SHP,DSHP)
      GO TO 40
C
C     QUAD8 VERSION
C
   20 NGP = 8
      GO TO 40
C
C     TRIA6 VERSION
C
   30 NGP = 6
C
   40 DO 50 I = 1,NGP
      TSHP (I  ) = SHP(I)
      TDSHP(I  ) = DSHP(I)
   50 TDSHP(I+8) = DSHP(I+NGP)
      DO 60 I = 1,NGP
      IO = IORDER(I)
      SHP (I  ) = TSHP(IO)
      DSHP(I  ) = TDSHP(IO)
   60 DSHP(I+8) = TDSHP(IO+8)
C
      TH = 0.0
      DO 70 I = 1,NNODE
      TH = TH + GPTH(I)*SHP(I)
      DO 70 J = 1,3
      J1 = J + 1
      GRIDC(J,I) = EGPDT(J1,I) + ZETA*GPTH(I)*EPNORM(J1,I)*0.5
   70 CONTINUE
C
      DO 80 I = 1,2
      II = (I-1)*8
      DO 80 J = 1,3
      TJ(I,J) = 0.0
      DO 80 K = 1,NNODE
      TJ(I,J) = TJ(I,J) + DSHP(K+II)*GRIDC(J,K)
   80 CONTINUE
C
      DO 90 I = 1,3
      TJ(3,I) = 0.0
      DO 90 J = 1,NNODE
   90 TJ(3,I) = TJ(3,I) + 0.5*GPTH(J)*SHP(J)*EPNORM(I+1,J)
C
      DO 100 I = 1,3
      DO 100 J = 1,3
      IF (ABS(TJ(I,J)) .LT. EPS) TJ(I,J) = 0.0
  100 CONTINUE
C
C     SET UP THE TRANSFORMATION FROM THIS INTEGRATION POINT C.S.
C     TO THE ELEMENT C.S.  TIE
C
      VN(1) = TJ(1,2)*TJ(2,3) - TJ(2,2)*TJ(1,3)
      VN(2) = TJ(2,1)*TJ(1,3) - TJ(1,1)*TJ(2,3)
      VN(3) = TJ(1,1)*TJ(2,2) - TJ(2,1)*TJ(1,2)
C
      TEMP = SQRT(VN(1)*VN(1) + VN(2)*VN(2) + VN(3)*VN(3))
C
      TIE(7) = VN(1)/TEMP
      TIE(8) = VN(2)/TEMP
      TIE(9) = VN(3)/TEMP
C
      TEMP = SQRT(TIE(8)*TIE(8) + TIE(9)*TIE(9))
C
      TIE(1) = TIE(9)/TEMP
      TIE(2) = 0.0
      TIE(3) =-TIE(7)/TEMP
C
      TIE(4) = TIE(8)*TIE(3)
      TIE(5) = TEMP
      TIE(6) =-TIE(1)*TIE(8)
C
      CALL INVERS (3,TJ,3,DUM,0,DETJ,ISING,INDEX)
C
C
C     NOTE - THE INVERSE OF JACOBIAN HAS BEEN STORED IN TJ
C            UPON RETURN FROM INVERS.
C
      IF (ISING.EQ.1 .AND. DETJ.GT.0.0) GO TO 110
      BADJAC = .TRUE.
      GO TO 150
C
  110 CONTINUE
C
      DO 120 I = 1,3
      II = (I-1)*3
      DO 120 J = 1,3
      JACOB(I,J) = 0.0
      DO 120 K = 1,3
      IK = II + K
  120 JACOB(I,J) = JACOB(I,J) + TIE(IK)*TJ(K,J)
C
C     MULTIPLY THE INVERSE OF THE JACOBIAN BY THE TRANSPOSE
C     OF THE ARRAY CONTAINING DERIVATIVES OF THE SHAPE FUNCTIONS
C     TO GET THE TERMS USED IN THE ASSEMBLY OF THE B MATRIX.
C     NOTE THAT THE LAST ROW CONTAINS THE SHAPE FUNCTION VALUES.
C
      NODE3 = NNODE*3
      DO 130 I = 1,NNODE
  130 BTERMS(NODE3+I) = SHP(I)*JACOB(3,3)
C
      DO 140 I = 1,3
      II = (I-1)*NNODE
      DO 140 J = 1,NNODE
      IJ = II + J
      BTERMS(IJ) = 0.0
      DO 140 K = 1,2
      IK = (K-1)*8
  140 BTERMS(IJ) = BTERMS(IJ) + JACOB(I,K)*DSHP(IK+J)
  150 RETURN
      END