43
44
45
46#include "implicit_f.inc"
47#include "comlock.inc"
48
49
50
51#include "mvsiz_p.inc"
52
53
54
55#include "param_c.inc"
56#include "scr17_c.inc"
57
58
59
60 INTEGER, INTENT(IN) :: JLAG
61 INTEGER, INTENT(IN) :: ISMSTR
62 INTEGER, INTENT(IN) :: IFORMDT
63 INTEGER NEL, MXT(MVSIZ)
64 double precision
65 . x1(*), x2(*), x3
66 . y1(*), y2(*), y3(*), y4(*),
67 . z1(*), z2(*), z3(*), z4(*), sav(nel,9),voldp(nel)
68
70 . off(*), det(*), deltax(*), pm(npropm,*),
71 . px1(*), px2(*), px3(*), px4(*),
72 . py1(*), py2(*), py3(*), py4(*),
73 . pz1(*), pz2(*), pz3(*), pz4(*),offg(*),
74 . rx(*), ry(*), rz(*), sx(*), sy(*), sz(*),tx(*), ty(*), tz(*)
75
76
77
78 INTEGER NGL(*), I,J
79 INTEGER NNEGA,INDEX(MVSIZ)
80 double precision
81 . x41, y41, z41, x42, y42, z42, x43, y43, z43,b1dp,c1dp,d1dp
83 . a1, a2, a3, a4, d, areamx2,
84 . b1(mvsiz), b2(mvsiz), b3(mvsiz), b4(mvsiz),
85 . c1(mvsiz), c2(mvsiz), c3(mvsiz), c4(mvsiz),
86 . d1(mvsiz), d2(mvsiz), d3(mvsiz), d4(mvsiz),
87 . pxx, pyy, pzz, pxy, pyz, pxz, gfac, aa, bb, p, ld
88
89
90 DO i=1,nel
91 x43 = x4(i) - x3(i)
92 y43 = y4(i) - y3(i)
93 z43 = z4(i) - z3(i)
94 x41 = x4(i) - x1(i)
95 y41 = y4(i) - y1(i)
96 z41 = z4(i) - z1(i)
97 x42 = x4(i) - x2(i)
98 y42 = y4(i) - y2(i)
99 z42 = z4(i) - z2(i)
100
101 rx(i) = -x41
102 ry(i) = -y41
103 rz(i) = -z41
104 sx(i) = -x42
105 sy(i) = -y42
106 sz(i) = -z42
107
108 tx(i) = -x43
109 ty(i) = -y43
110 tz(i) = -z43
111
112 b1dp = y43*z42 - y42*z43
113 b1(i) = b1dp
114 b2(i) = y41*z43 - y43*z41
115 b3(i) = y42*z41 - y41*z42
116 b4(i) = -(b1(i) + b2(i) + b3(i))
117
118 c1dp = z43*x42 - z42*x43
119 c1(i) = c1dp
120 c2(i) = z41*x43 - z43*x41
121 c3(i) = z42*x41 - z41*x42
122 c4(i) = -(c1(i) + c2(i) + c3(i))
123
124 d1dp = x43*y42 - x42*y43
125 d1(i) = d1dp
126 d2(i) = x41*y43 - x43*y41
127 d3(i) = x42*y41 - x41*y42
128 d4(i) = -(d1(i) + d2(i) + d3(i))
129
130 voldp(i) = (x41*b1dp + y41*c1dp + z41*d1dp)*one_over_6
131 det(i) = voldp(i)
132
133 ENDDO
134
135
137 1 off, det, ngl, offg,
138 2 nnega, index, nel,
139 3 jlag)
140 IF (nnega>0) THEN
141 IF (ismstr==10.OR.ismstr==12) THEN
142#include "vectorize.inc"
143 DO j=1,nnega
144 i = index(j)
145 x1(i)=sav(i,1)
146 y1(i)=sav(i,4)
147 z1(i)=sav(i,7)
148 x2(i)=sav(i,2)
149 y2(i)=sav(i,5)
150 z2(i)=sav(i,8)
151 x3(i)=sav(i,3)
152 y3(i)=sav(i,6)
153 z3(i)=sav(i,9)
154 x4(i)=zero
155 y4(i)=zero
156 z4(i)=zero
157 ENDDO
158 ELSE
159#include "vectorize.inc"
160 DO j=1,nnega
161 i = index(j)
162 x1(i)=sav(i,1)
163 y1(i)=sav(i,2)
164 z1(i)=sav(i,3)
165 x2(i)=sav(i,4)
166 y2(i)=sav(i,5)
167 z2(i)=sav(i,6)
168 x3(i)=sav(i,7)
169 y3(i)=sav(i,8)
170 z3(i)=sav(i,9)
171 x4(i)=zero
172 y4(i)=zero
173 z4(i)=zero
174 ENDDO
175 END IF
176#include "vectorize.inc"
177 DO j=1,nnega
178 i = index(j)
179 x43 = x4(i) - x3(i)
180 y43 = y4(i) - y3(i)
181 z43 = z4(i) - z3(i)
182 x41 = x4(i) - x1(i)
183 y41 = y4(i) - y1(i)
184 z41 = z4(i) - z1(i)
185 x42 = x4(i) - x2(i)
186 y42 = y4(i) - y2(i)
187 z42 = z4(i) - z2(i)
188
189 rx(i) = -x41
190 ry(i) = -y41
191 rz(i) = -z41
192 sx(i) = -x42
193 sy(i) = -y42
194 sz(i) = -z42
195 tx(i) = -x43
196 ty(i) = -y43
197 tz(i) = -z43
198
199
200 b1dp = y43*z42 - y42*z43
201 b1(i) = b1dp
202 b2(i) = y41*z43 - y43*z41
203 b3(i) = y42*z41 - y41*z42
204 b4(i) = -(b1(i) + b2(i) + b3(i))
205
206 c1dp = z43*x42 - z42*x43
207 c1(i) = c1dp
208 c2(i) = z41*x43 - z43*x41
209 c3(i) = z42*x41 - z41*x42
210 c4(i) = -(c1(i) + c2(i) + c3(i))
211
212 d1dp = x43*y42 - x42*y43
213 d1(i) = d1dp
214 d2(i) = x41*y43 - x43*y41
215 d3(i) = x42*y41 - x41*y42
216 d4(i) = -(d1(i) + d2(i) + d3(i))
217
218 voldp(i) = (x41*b1dp + y41*c1dp + z41*d1dp)*one_over_6
219 det(i) = voldp(i)
220 offg(i) = two
221 ENDDO
222 END IF
223
224 DO i=1,nel
225 d = one/det(i)/six
226 px1(i)=-b1(i)*d
227 py1(i)=-c1(i)*d
228 pz1(i)=-d1(i)*d
229 px2(i)=-b2(i)*d
230 py2(i)=-c2(i)*d
231 pz2(i)=-d2(i)*d
232 px3(i)=-b3(i)*d
233 py3(i)=-c3(i)*d
234 pz3(i)=-d3(i)*d
235 px4(i)=-b4(i)*d
236 py4(i)=-c4(i)*d
237 pz4(i)=-d4(i)*d
238 END DO
239
240 IF(idt1sol==0)THEN
241
242 DO i=1,nel
243 d =
max(px1(i)*px1(i)+py1(i)*py1(i)+pz1(i)*pz1(i),
244 . px2(i)*px2(i)+py2(i)*py2(i)+pz2(i)*pz2(i),
245 . px3(i)*px3(i)+py3(i)*py3(i)+pz3(i)*pz3(i),
246 . px4(i)*px4(i)+py4(i)*py4(i)+pz4(i)*pz4(i))
247 deltax(i) = one / sqrt(d)
248 END DO
249
250 ELSEIF(iformdt==0)THEN
251 DO i=1,nel
252 d = px1(i)*px1(i)+py1(i)*py1(i)+pz1(i)*pz1(i)
253 . + px2(i)*px2(i)+py2(i)*py2(i)+pz2(i)*pz2(i)
254 . + px3(i)*px3(i)+py3(i)*py3(i)+pz3(i)*pz3(i)
255 . + px4(i)*px4(i)+py4(i)*py4(i)+pz4(i)*pz4(i)
256 deltax(i) = one / sqrt(d)
257 END DO
258
259 ELSEIF(iformdt==1)THEN
260
261 gfac=pm(105,mxt(1))
262 ld =two*sqrt(
max(one-gfac,zero))+one
263 DO i=1,nel
264 pxx=px1(i)*px1(i)+px2(i)*px2(i)+px3(i)*px3(i)+px4(i)*px4(i)
265 pyy=py1(i)*py1(i)+py2(i)*py2(i)+py3(i)*py3(i)+py4(i)*py4(i)
266 pzz=pz1(i)*pz1(i)+pz2(i)*pz2(i)+pz3(i)*pz3(i)+pz4(i)*pz4(i)
267 pxy=px1(i)*py1(i)+px2(i)*py2(i)+px3(i)*py3(i)+px4(i)*py4(i)
268 pxz=px1(i)*pz1(i)+px2(i)*pz2(i)+px3(i)*pz3(i)+px4(i)*pz4(i)
269 pyz=py1(i)*pz1(i)+py2(i)*pz2(i)+py3(i)*pz3(i)+py4(i)*pz4(i)
270
271 aa = -(pxx+pyy+pzz)
272 bb = (pxx*pyy+pxx*pzz+pyy*pzz-pxy**2-pxz**2-pyz**2)
273 p = bb-third*aa*aa
274 d = two*sqrt(third*
max(-p,zero))-third*aa
275
276 d=ld*d
277
278 deltax(i) = one / sqrt(d)
279 END DO
280
281 ELSEIF(iformdt==2)THEN
282
283 gfac=pm(105,mxt(1))
284 DO i=1,nel
285 pxx=px1(i)*px1(i)+px2(i)*px2(i)+px3(i)*px3(i)+px4(i)*px4(i)
286 pyy=py1(i)*py1(i)+py2(i)*py2(i)+py3(i)*py3(i)+py4(i)*py4(i)
287 pzz=pz1(i)*pz1(i)+pz2(i)*pz2(i)+pz3(i)*pz3(i)+pz4(i)*pz4(i)
288 pxy=px1(i)*py1(i)+px2(i)*py2(i)+px3(i)*py3(i)+px4(i)*py4(i)
289 pxz=px1(i)*pz1(i)+px2(i)*pz2(i)+px3(i)*pz3(i)+px4(i)*pz4(i)
290 pyz=py1(i)*pz1(i)+py2(i)*pz2(i)+py3(i)*pz3(i)+py4(i)*pz4(i)
291
292 aa = -(pxx+pyy+pzz)
293 bb = gfac*(pxx*pyy+pxx*pzz+pyy*pzz-pxy**2-pxz**2-pyz**2)
294 p = bb-third*aa*aa
295 d = two*sqrt(third*
max(-p,zero))-third*aa
296
297 deltax(i) = one / sqrt(d)
298 END DO
299
300 END IF
301
302 RETURN
303
304 1000 FORMAT(/' ZERO OR NEGATIVE VOLUME : 3D-ELEMENT NB',i10/)
305 2000 FORMAT(/' ZERO OR NEGATIVE VOLUME : DELETE 3D-ELEMENT NB',i10/)
subroutine schkjabt3(off, det, ngl, offg, nnega, index, nel, ismstr, jlag)