43
44
45
46#include "implicit_f.inc"
47#include "comlock.inc"
48
49
50
51#include "mvsiz_p.inc"
52#include "param_c.inc"
53
54
55
56 INTEGER, INTENT(IN) :: NEL
57 INTEGER, INTENT(IN) :: IFORMDT
58 INTEGER MXT(*)
59 DOUBLE PRECISION
60 . X1(*), X2(*), X3(*), X4(*),
61 . Y1(*), Y2(*), Y3(*), Y4(*),
62 . Z1(*), Z2(*), Z3(*), Z4(*),VOLDP(*)
63 my_real
64 . OFF(*),DET(*),DELTAX(*),
65 . PX1(*), PX2(*), PX3(*), PX4(*),
66 . PY1(*), PY2(*), PY3(*), PY4(*),
67 . PZ1(*), PZ2(*), PZ3(*), PZ4(*),
68 . RX(*), RY(*), RZ(*), SX(*), SY(*), SZ(*),TX(*), TY(*), TZ(*),
69 . PM(NPROPM,*)
70
71
72
73#include "scr17_c.inc"
74
75
76
77 INTEGER NGL(*), I
78 DOUBLE PRECISION
79 . X41, Y41, Z41, X42, Y42, Z42, X43, Y43, Z43,B1DP,C1DP,D1DP
80 my_real
81 . B1(MVSIZ), B2(MVSIZ), B3(MVSIZ), B4(MVSIZ),
82 . C1(MVSIZ), C2(MVSIZ), C3(MVSIZ), C4(MVSIZ),
83 . D1(MVSIZ), D2(MVSIZ), D3(MVSIZ), D4(MVSIZ),
84 . A1, A2, A3, A4, D, AREAMX2,
85 . PXX, PYY, PZZ, PXY, PYZ, PXZ, GFAC, AA, BB, P, LD
86
87
88 DO I=1,NEL
89 X43 = X4(I) - X3(I)
90 Y43 = Y4(I) - Y3(I)
91 Z43 = Z4(I) - Z3(I)
92 X41 = X4(I) - X1(I)
93 Y41 = Y4(I) - Y1(I)
94 Z41 = Z4(I) - Z1(I)
95 X42 = X4(I) - X2(I)
96 Y42 = Y4(I) - Y2(I)
97 Z42 = Z4(I) - Z2(I)
98
99 RX(I) = -X41
100 RY(I) = -Y41
101 RZ(I) = -Z41
102 SX(I) = -X42
103 SY(I) = -Y42
104 SZ(I) = -Z42
105
106 TX(I) = -X43
107 TY(I) = -Y43
108 TZ(I) = -Z43
109
110 B1DP = Y43*Z42 - Y42*Z43
111 B1(I) = B1DP
112 B2(I) = Y41*Z43 - Y43*Z41
113 B3(I) = Y42*Z41 - Y41*Z42
114 B4(I) = -(B1(I) + B2(I) + B3(I))
115
116 C1DP = Z43*X42 - Z42*X43
117 C1(I) = C1DP
118 C2(I) = Z41*X43 - Z43*X41
119 C3(I) = Z42*X41 - Z41*X42
120 C4(I) = -(C1(I) + C2(I) + C3(I))
121
122 D1DP = X43*Y42 - X42*Y43
123 D1(I) = D1DP
124 D2(I) = X41*Y43 - X43*Y41
125 D3(I) = X42*Y41 - X41*Y42
126 D4(I) = -(D1(I) + D2(I) + D3(I))
127
128 VOLDP(I) = (X41*B1DP + Y41*C1DP + Z41*D1DP)*ONE_OVER_6
129 DET(I) = VOLDP(I)
130
131 ENDDO
132
133 CALL SCHKJAB3(
134 1 OFF, DET, NGL, NEL)
135
136 DO I=1,NEL
137 D = ONE/DET(I)/SIX
138 PX1(I)=-B1(I)*D
139 PY1(I)=-C1(I)*D
140 PZ1(I)=-D1(I)*D
141 PX2(I)=-B2(I)*D
142 PY2(I)=-C2(I)*D
143 PZ2(I)=-D2(I)*D
144 PX3(I)=-B3(I)*D
145 PY3(I)=-C3(I)*D
146 PZ3(I)=-D3(I)*D
147 PX4(I)=-B4(I)*D
148 PY4(I)=-C4(I)*D
149 PZ4(I)=-D4(I)*D
150 END DO
151
152 IF(IDT1SOL==0)THEN
153
154 DO I=1,NEL
155 D = MAX(PX1(I)*PX1(I)+PY1(I)*PY1(I)+PZ1(I)*PZ1(I),
156 . PX2(I)*PX2(I)+PY2(I)*PY2(I)+PZ2(I)*PZ2(I),
157 . PX3(I)*PX3(I)+PY3(I)*PY3(I)+PZ3(I)*PZ3(I),
158 . PX4(I)*PX4(I)+PY4(I)*PY4(I)+PZ4(I)*PZ4(I))
159 DELTAX(I) = ONE / SQRT(D)
160 END DO
161
162
163 ELSEIF(IFORMDT==1)THEN
164
165 GFAC=PM(105,MXT(1))
166 LD =TWO*SQRT(MAX(ONE-GFAC,ZERO))+ONE
167 DO I=1,NEL
168 PXX=PX1(I)*PX1(I)+PX2(I)*PX2(I)+PX3(I)*PX3(I)+PX4(I)*PX4(I)
169 PYY=PY1(I)*PY1(I)+PY2(I)*PY2(I)+PY3(I)*PY3(I)+PY4(I)*PY4(I)
170 PZZ=PZ1(I)*PZ1(I)+PZ2(I)*PZ2(I)+PZ3(I)*PZ3(I)+PZ4(I)*PZ4(I)
171 PXY=PX1(I)*PY1(I)+PX2(I)*PY2(I)+PX3(I)*PY3(I)+PX4(I)*PY4(I)
172 PXZ=PX1(I)*PZ1(I)+PX2(I)*PZ2(I)+PX3(I)*PZ3(I)+PX4(I)*PZ4(I)
173 PYZ=PY1(I)*PZ1(I)+PY2(I)*PZ2(I)+PY3(I)*PZ3(I)+PY4(I)*PZ4(I)
174
175 AA = -(PXX+PYY+PZZ)
176 BB = (PXX*PYY+PXX*PZZ+PYY*PZZ-PXY**2-PXZ**2-PYZ**2)
177 P = BB-THIRD*AA*AA
178 D=TWO*SQRT(THIRD*MAX(-P,ZERO))-THIRD*AA
179
180 D=LD*D
181
182 DELTAX(I) = ONE / SQRT(D)
183 END DO
184
185 ELSEIF(IFORMDT==2)THEN
186
187 GFAC=PM(105,MXT(1))
188 DO I=1,NEL
189 PXX=PX1(I)*PX1(I)+PX2(I)*PX2(I)+PX3(I)*PX3(I)+PX4(I)*PX4(I)
190 PYY=PY1(I)*PY1(I)+PY2(I)*PY2(I)+PY3(I)*PY3(I)+PY4(I)*PY4(I)
191 PZZ=PZ1(I)*PZ1(I)+PZ2(I)*PZ2(I)+PZ3(I)*PZ3(I)+PZ4(I)*PZ4(I)
192 PXY=PX1(I)*PY1(I)+PX2(I)*PY2(I)+PX3(I)*PY3(I)+PX4(I)*PY4(I)
193 PXZ=PX1(I)*PZ1(I)+PX2(I)*PZ2(I)+PX3(I)*PZ3(I)+PX4(I)*PZ4(I)
194 PYZ=PY1(I)*PZ1(I)+PY2(I)*PZ2(I)+PY3(I)*PZ3(I)+PY4(I)*PZ4(I)
195
196 AA = -(PXX+PYY+PZZ)
197 BB = GFAC*(PXX*PYY+PXX*PZZ+PYY*PZZ-PXY**2-PXZ**2-PYZ**2)
198 P = BB-THIRD*AA*AA
199 D = TWO*SQRT(THIRD*MAX(-P,ZERO))-THIRD*AA
200
201 DELTAX(I) = ONE / SQRT(D)
202 END DO
203
204 END IF
205
206 RETURN
207
208 1000 FORMAT(/' ZERO OR NEGATIVE VOLUME : 3D-ELEMENT NB',I10/)
209 2000 FORMAT(/' ZERO OR NEGATIVE VOLUME : DELETE 3D-ELEMENT NB',I10/)