43
44
45
47
48
49
50#include "implicit_f.inc"
51#include "comlock.inc"
52
53
54
55#include "mvsiz_p.inc"
56
57
58
59 INTEGER, INTENT(IN) :: NEL
60 INTEGER NGL(*),IR,IS,IT
61
63 . r,s,t,w,
64 . dnidr(16),dnids(16),dnidt(16),dxdr(*),dydr(*),dzdr(*),
65 . dxds(*),dyds(*),dzds(*),dxdt(*),dydt(*),dzdt(*),
66 . drdx(mvsiz), dsdx(mvsiz), dtdx(mvsiz),
67 . drdy(mvsiz), dsdy(mvsiz), dtdy(mvsiz),
68 . drdz(mvsiz), dsdz(mvsiz), dtdz(mvsiz),
69 . xx(mvsiz,16),yy(mvsiz,16),zz
70 . px(mvsiz,16),py(mvsiz,16),pz(mvsiz,16),
71 . vol(*),off(*),deltax(*),volg(mvsiz) ,
72 . kxx(mvsiz,16),ni(16),ul(mvsiz,16)
73 DOUBLE PRECISION
74 . VOLDP(*)
75
76
77
78
79
80
81 INTEGER I,N,ICOR
83 . d, aa, bb, det(mvsiz),r9 ,r13 ,s9 ,s10 ,s11 ,s12 ,t10 ,t14
84 DOUBLE PRECISION
85 . DETDP
86
87C
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
126C
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169C
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256 DO i=1,nel
257
258 dxdr(i) = dnidr(1)*xx(i,1) + dnidr(2)*xx(i,2) + dnidr(3)*xx(i,3)
259 + + dnidr(4)*xx(i,4) + dnidr(5)*xx(i,5) + dnidr(6)*xx(i,6)
260 + + dnidr(7)*xx(i,7) + dnidr(8)*xx(i,8)
261 + + dnidr(9)*(xx(i,9) - xx(i,11)) + dnidr(10)*xx(i,10)
262 + + dnidr(12)*xx(i,12) + dnidr(13)*(xx(i,13) - xx(i,15))
263 + + dnidr(14)*xx(i,14) + dnidr(16)*xx(i,16)
264
265 dxds(i) = dnids(1)*xx(i,1) + dnids(2)*xx(i,2) + dnids(3)*xx(i,3)
266 + + dnids(4)*xx(i,4) + dnids(5)*xx(i,5) + dnids(6)*xx(i,6)
267 + + dnids(7)*xx(i,7) + dnids(8)*xx(i,8)
268 + + dnids(9)* (xx(i,9) - xx(i,13))
269 + + dnids(10)*(xx(i,10) - xx(i,14))
270 + + dnids(11)*(xx(i,11) - xx(i,15))
271 + + dnids(12)*(xx(i,12) - xx(i,16))
272
273 dxdt(i) = dnidt(1)*xx(i,1) + dnidt(2)*xx(i,2) + dnidt(3)*xx(i,3)
274 + + dnidt(4)*xx(i,4) + dnidt(5)*xx(i,5) + dnidt(6)*xx(i,6)
275 + + dnidt(7)*xx(i,7) + dnidt(8)*xx(i,8)
276 + + dnidt(9)*xx(i,9) + dnidt(10)*(xx(i,10) - xx(i,12))
277 + + dnidt(11)*xx(i,11) + dnidt(13)*xx(i,13)
278 + + dnidt(14)*(xx(i,14) - xx(i,16)) + dnidt(15)*xx(i,15)
279
280
281
282 dydr(i) = dnidr(1)*yy(i,1) + dnidr(2)*yy(i,2) + dnidr(3)*yy(i,3)
283 + + dnidr(4)*yy(i,4) + dnidr(5)*yy(i,5) + dnidr(6)*yy(i,6)
284 + + dnidr(7)*yy(i,7) + dnidr(8)*yy(i,8)
285 + + dnidr(9)*(yy(i,9) - yy(i,11)) + dnidr(10)*yy(i,10)
286 + + dnidr(12)*yy(i,12) + dnidr(13)*(yy(i,13) - yy(i,15))
287 + + dnidr(14)*yy(i,14) + dnidr(16)*yy(i,16)
288
289 dyds(i) = dnids(1)*yy(i,1) + dnids(2)*yy(i,2) + dnids(3)*yy(i,3)
290 + + dnids(4)*yy(i,4) + dnids(5)*yy(i,5) + dnids(6)*yy(i,6)
291 + + dnids(7)*yy(i,7) + dnids(8)*yy(i,8)
292 + + dnids(9)* (yy(i,9) - yy(i,13))
293 + + dnids(10)*(yy(i,10) - yy(i,14))
294 + + dnids(11)*(yy(i,11) - yy(i,15))
295 + + dnids(12)*(yy(i,12) - yy(i,16))
296
297 dydt(i) = dnidt(1)*yy(i,1) + dnidt(2)*yy(i,2) + dnidt(3)*yy(i,3)
298 + + dnidt(4)*yy(i,4) + dnidt(5)*yy(i,5) + dnidt(6)*yy(i,6)
299 + + dnidt(7)*yy(i,7) + dnidt(8)*yy(i,8)
300 + + dnidt(9)*yy(i,9) + dnidt(10)*(yy(i,10) - yy(i,12))
301 + + dnidt(11)*yy(i,11) + dnidt(13)*yy(i,13)
302 + + dnidt(14)*(yy(i,14) - yy(i,16)) + dnidt(15)*yy(i,15)
303
304
305
306 dzdr(i) = dnidr(1)*zz(i,1) + dnidr(2)*zz(i,2) + dnidr(3)*zz(i,3)
307 + + dnidr(4)*zz(i,4) + dnidr(5)*zz(i,5) + dnidr(6)*zz(i,6)
308 + + dnidr(7)*zz(i,7) + dnidr(8)*zz(i,8)
309 + + dnidr(9)*(zz(i,9) - zz(i,11)) + dnidr(10)*zz(i,10)
310 + + dnidr(12)*zz(i,12) + dnidr(13)*(zz(i,13) - zz(i,15))
311 + + dnidr(14)*zz(i,14) + dnidr(16)*zz(i,16)
312
313 dzds(i) = dnids(1)*zz(i,1) + dnids(2)*zz(i,2) + dnids(3)*zz(i,3)
314 + + dnids(4)*zz(i,4) + dnids(5)*zz(i,5) + dnids
315 + + dnids(7)*zz(i,7) + dnids(8)*zz(i,8)
316 + + dnids(9)* (zz(i,9) - zz(i,13))
317 + + dnids(10)*(zz(i,10) - zz(i,14))
318 + + dnids(11)*(zz(i,11) - zz(i,15))
319 + + dnids(12)*(zz(i,12) - zz(i,16))
320
321 dzdt(i) = dnidt(1)*zz(i,1) + dnidt(2)*zz(i,2) + dnidt(3)*zz(i,3)
322 + + dnidt(4)*zz(i,4) + dnidt(5)*zz(i,5) + dnidt(6)*zz(i,6)
323 + + dnidt(7)*zz(i,7) + dnidt(8)*zz(i,8)
324 + + dnidt(9)*zz(i,9) + dnidt(10)*(zz(i,10) - zz(i,12))
325 + + dnidt(11)*zz(i,11) + dnidt(13)*zz(i,13)
326 + + dnidt(14)*(zz(i,14) - zz(i,16)) + dnidt(15)*zz(i,15)
327
328
329
330
331
332
333
334
335
336
337 drdx(i)=dyds(i)*dzdt(i)-dzds(i)*dydt(i)
338 drdy(i)=dzds(i)*dxdt(i)-dxds(i)*dzdt(i)
339 drdz(i)=dxds(i)*dydt(i)-dyds(i)*dxdt(i)
340
341 dsdz(i)=dxdt(i)*dydr(i)-dydt(i)*dxdr(i)
342 dsdy(i)=dzdt(i)*dxdr(i)-dxdt(i)*dzdr(i)
343 dsdx(i)=dydt(i)*dzdr(i)-dzdt(i)*dydr(i)
344
345 dtdx(i)=dydr(i)*dzds(i)-dzdr(i)*dyds(i)
346 dtdy(i)=dzdr(i)*dxds(i)-dxdr(i)*dzds(i)
347 dtdz(i)=dxdr(i)*dyds(i)-dydr(i)*dxds(i)
348
349 detdp = dxdr(i) * drdx(i)
350 . + dydr(i) * drdy(i)
351 . + dzdr(i) * drdz(i)
352 det(i) = detdp
353 voldp(i) = w * detdp
354 vol(i) = voldp(i)
355
356 ENDDO
357
358
359
360
361
362
363 icor=0
364 DO i=1,nel
365 IF(off(i)==zero)THEN
366 vol(i)=1.
367 voldp(i) = one
368 ELSEIF(vol(i)<=zero)THEN
369 icor=1
370 ENDIF
371 ENDDO
372 IF(icor/=0)THEN
373 DO i=1,nel
374 IF(vol(i)<=zero)THEN
375 CALL ancmsg(msgid=170,anmode=aninfo,
376 . i1=ngl(i),i2=ir,i3=is,i4=it)
378 ENDIF
379 ENDDO
380 ENDIF
381
382 DO i=1,nel
383
384
385
386
387 d = one/det(i)
388 drdx(i)=d*drdx(i)
389 dsdx(i)=d*dsdx(i)
390 dtdx(i)=d*dtdx(i)
391
392 drdy(i)=d*drdy(i)
393 dsdy(i)=d*dsdy(i)
394 dtdy(i)=d*dtdy(i)
395
396 drdz(i)=d*drdz(i)
397 dsdz(i)=d*dsdz(i)
398 dtdz(i)=d*dtdz(i)
399
400
401
402
403
404 px(i,1) = dnidr(1)*drdx(i) + dnids(1)*dsdx(i) + dnidt(1)*dtdx(i)
405 px(i,2) = dnidr(2)*drdx(i) + dnids(2)*dsdx(i) + dnidt(2)*dtdx(i)
406 px(i,3) = dnidr(3)*drdx(i) + dnids(3)*dsdx(i) + dnidt(3)*dtdx(i)
407 px(i,4) = dnidr(4)*drdx(i) + dnids(4)*dsdx(i) + dnidt(4)*dtdx(i)
408 px(i,5) = dnidr(5)*drdx(i) + dnids(5)*dsdx(i) + dnidt(5)*dtdx(i)
409 px(i,6) = dnidr(6)*drdx(i) + dnids(6)*dsdx(i) + dnidt(6)*dtdx(i)
410 px(i,7) = dnidr(7)*drdx(i) + dnids(7)*dsdx(i) + dnidt(7)*dtdx(i)
411 px(i,8) = dnidr(8)*drdx(i) + dnids(8)*dsdx(i) + dnidt(8)*dtdx(i)
412 r9 = dnidr(9) *drdx(i)
413 r13 = dnidr(13)*drdx(i)
414 s9 = dnids(9) *dsdx(i)
415 s10 = dnids(10)*dsdx(i)
416 s11 = dnids(11)*dsdx(i)
417 s12 = dnids(12)*dsdx(i)
418 t10 = dnidt(10)*dtdx(i)
419 t14 = dnidt(14)*dtdx(i)
420 px(i,9) = r9 + s9 + dnidt(9)*dtdx(i)
421 px(i,10)= dnidr(10)*drdx(i)+ s10 + t10
422 px(i,11)=-r9 + s11 + dnidt(11)*dtdx(i)
423 px(i,12)= dnidr(12)*drdx(i)+ s12 - t10
424 px(i,13)= r13 - s9 + dnidt(13)*dtdx(i)
425 px(i,14)= dnidr(14)*drdx(i)- s10 + t14
426 px(i,15)=-r13 - s11 + dnidt(15)*dtdx(i)
427 px(i,16)= dnidr(16)*drdx(i)- s12 - t14
428
429 py(i,1) = dnidr(1)*drdy(i) + dnids(1)*dsdy(i) + dnidt(1)*dtdy(i)
430 pz(i,1) = dnidr(1)*drdz(i) + dnids(1)*dsdz(i) + dnidt(1)*dtdz(i)
431 py(i,2) = dnidr(2)*drdy(i) + dnids(2)*dsdy(i) + dnidt(2)*dtdy(i)
432 py(i,3) = dnidr(3)*drdy(i) + dnids(3)*dsdy(i) + dnidt(3)*dtdy(i)
433 py(i,4) = dnidr(4)*drdy(i) + dnids(4)*dsdy(i) + dnidt(4)*dtdy(i)
434 py(i,5) = dnidr(5)*drdy(i) + dnids(5)*dsdy(i) + dnidt(5)*dtdy(i)
435 py(i,6) = dnidr(6)*drdy(i) + dnids(6)*dsdy(i) + dnidt(6)*dtdy(i)
436 py(i,7) = dnidr(7)*drdy(i) + dnids(7)*dsdy(i) + dnidt(7)*dtdy(i)
437 py(i,8) = dnidr(8)*drdy(i) + dnids(8)*dsdy(i) + dnidt(8)*dtdy(i)
438 r9 = dnidr(9) *drdy(i)
439 r13 = dnidr(13)*drdy(i)
440 s9 = dnids(9) *dsdy(i)
441 s10 = dnids(10)*dsdy(i)
442 s11 = dnids(11)*dsdy(i)
443 s12 = dnids(12)*dsdy(i)
444 t10 = dnidt(10)*dtdy(i)
445 t14 = dnidt(14)*dtdy(i)
446 py(i,9) = r9 + s9 + dnidt(9)*dtdy(i)
447 py(i,10)= dnidr(10)*drdy(i)+ s10 + t10
448 py(i,11)=-r9 + s11 + dnidt(11)*dtdy(i)
449 py(i,12)= dnidr(12)*drdy(i)+ s12 - t10
450 py(i,13)= r13 - s9 + dnidt(13)*dtdy(i)
451 py(i,14)= dnidr(14)*drdy(i)- s10 + t14
452 py(i,15)=-r13 - s11 + dnidt(15)*dtdy(i)
453 py(i,16)= dnidr(16)*drdy(i)- s12 - t14
454
455 pz(i,1) = dnidr(1)*drdz(i) + dnids(1)*dsdz(i) + dnidt(1)*dtdz(i)
456 pz(i,2) = dnidr(2)*drdz(i) + dnids(2)*dsdz(i) + dnidt(2)*dtdz(i)
457 pz(i,3) = dnidr(3)*drdz(i) + dnids(3)*dsdz(i) + dnidt(3)*dtdz(i)
458 pz(i,4) = dnidr(4)*drdz(i) + dnids(4)*dsdz(i) + dnidt(4)*dtdz(i)
459 pz(i,5) = dnidr(5)*drdz(i) + dnids(5)*dsdz(i) + dnidt(5)*dtdz(i)
460 pz(i,6) = dnidr(6)*drdz(i) + dnids(6)*dsdz(i) + dnidt(6)*dtdz
461
462 pz(i,8) = dnidr(8)*drdz(i) + dnids(8)*dsdz(i
463 r9 = dnidr(9) *drdz(i)
464 r13 = dnidr(13)*drdz(i)
465 s9 = dnids(9) *dsdz(i)
466 s10 = dnids(10)*dsdz(i)
467 s11 = dnids(11)*dsdz(i)
468 s12 = dnids(12)*dsdz(i)
469 t10 = dnidt(10)*dtdz(i)
470 t14 = dnidt(14)*dtdz(i)
471 pz(i,9) = r9 + s9 + dnidt(9)*dtdz(i)
472 pz(i,10)= dnidr(10)*drdz(i)+ s10 + t10
473 pz(i,11)=-r9 + s11 + dnidt(11)*dtdz(i)
474 pz(i,12)= dnidr(12)*drdz(i)+ s12 - t10
475 pz(i,13)= r13 - s9 + dnidt(13)*dtdz(i)
476 pz(i,14)= dnidr(14)*drdz(i)- s10 + t14
477 pz(i,15)=-r13 - s11 + dnidt(15)*dtdz(i)
478 pz(i,16)= dnidr(16)*drdz(i)- s12 - t14
479
480 ENDDO
481
482
483
484 DO n=1,16
485 DO i=1,nel
486 kxx(i,n) = vol(i)*
487 . (px(i,n)*px(i,n) + py(i,n)*py(i,n) + pz(i,n)*pz(i,n))
488 ul(i,n) = ul(i,n) + kxx(i,n)
489 ENDDO
490 ENDDO
491 DO i=1,nel
492 volg(i) =volg(i) + vol(i)
493 ENDDO
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508 2000 FORMAT(/' ZERO OR NEGATIVE VOLUME : DELETE 3D-ELEMENT NB',i10/)
509
510 RETURN
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)