44
45
46
48
49
50
51#include "implicit_f.inc"
52#include "comlock.inc"
53
54
55
56#include "mvsiz_p.inc"
57
58
59
60 INTEGER, INTENT(IN) :: NEL
61 INTEGER NGL(*),IR,IS,IT
62
64 . r,s,t,w,
65 . dnidr(20),dnids(20),dnidt(20),dxdr(*),dydr(*),dzdr(*),
66 . dxds(*),dyds(*),dzds(*),dxdt(*),dydt(*),dzdt(*),
67 . drdx(mvsiz), dsdx(mvsiz), dtdx(mvsiz),
68 . drdy(mvsiz), dsdy(mvsiz), dtdy(mvsiz),
69 . drdz(mvsiz), dsdz(mvsiz), dtdz(mvsiz),
70 . xx(mvsiz,20),yy(mvsiz,20),zz(mvsiz,20),
71 . px(mvsiz,20),py(mvsiz,20),pz(mvsiz,20),
72 . vol(*),off(*),deltax(*),volg(mvsiz) ,
73 . kxx(mvsiz,20),ni(20),ul(mvsiz,20)
74 double precision
75 . voldp(mvsiz),detdp
76
77
78
79
80
81
82 INTEGER I,N, ICOR
84 . d, aa, bb, det(mvsiz)
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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
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 DO i=1,nel
256
257 dxdr(i) = dnidr(1)*xx(i,1) + dnidr(2)*xx(i,2) + dnidr(3)*xx(i,3)
258 + + dnidr(4)*xx(i,4) + dnidr(5)*xx(i,5) + dnidr(6)*xx(i,6)
259 + + dnidr(7)*xx(i,7) + dnidr(8)*xx(i,8)
260 + + dnidr(9)*xx(i,9) + dnidr(10)*xx(i,10) + dnidr(11)*xx(i,11)
261 + + dnidr(12)*xx(i,12) + dnidr(13)*xx(i,13) + dnidr(14)*xx(i,14)
262 + + dnidr(15)*xx(i,15) + dnidr(16)*xx(i,16) + dnidr(17)*xx(i,17)
263 + + dnidr(18)*xx(i,18) + dnidr(19)*xx(i,19) + dnidr(20)*xx(i,20)
264
265 dxds(i) = dnids(1)*xx(i,1) + dnids(2)*xx(i,2) + dnids
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) + dnids(10)*xx(i,10) + dnids(11)*xx(i,11)
269 + + dnids(12)*xx(i,12) + dnids(13)*xx(i,13) + dnids(14)*xx(i,14)
270 + + dnids(15)*xx(i,15) + dnids(16)*xx(i,16) + dnids(17)*xx(i,17)
271 + + dnids(18)*xx(i,18) + dnids(19)*xx(i,19) + dnids(20)*xx(i,20)
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) + dnidt(11)*xx(i,11)
277 + + dnidt(12)*xx(i,12) + dnidt(13)*xx(i,13) + dnidt(14)*xx(i,14)
278 + + dnidt(15)*xx(i,15) + dnidt(16)*xx(i,16) + dnidt(17)*xx(i,17)
279 + + dnidt(18)*xx(i,18) + dnidt(19)*xx(i,19) + dnidt(20)*xx(i,20)
280
281
282
283 dydr(i) = dnidr(1)*yy(i,1) + dnidr(2)*yy(i,2) + dnidr(3)*yy(i,3)
284 + + dnidr(4)*yy(i,4) + dnidr(5)*yy(i,5) + dnidr(6
285 + + dnidr(7)*yy(i,7) + dnidr(8)*yy(i,8)
286 + + dnidr(9)*yy(i,9) + dnidr(10)*yy(i,10) + dnidr(11)*yy(i,11)
287 + + dnidr(12)*yy(i,12) + dnidr(13)*yy(i,13) + dnidr(14)*yy(i,14)
288 + + dnidr(15)*yy(i,15) + dnidr(16)*yy(i,16) + dnidr(17)*yy(i,17)
289 + + dnidr(18)*yy(i,18) + dnidr(19)*yy(i,19) + dnidr(20)*yy(i,20)
290
291 dyds(i) = dnids(1)*yy(i,1) + dnids(2)*yy(i,2) + dnids(3)*yy(i,3)
292 + + dnids(4)*yy(i,4) + dnids(5)*yy(i,5) + dnids
293 + + dnids(7)*yy(i,7) + dnids(8)*yy(i,8)
294 + + dnids(9)*yy(i,9) + dnids(10)*yy(i,10) + dnids
295 + + dnids(12)*yy(i,12) + dnids(13)*yy(i,13) + dnids(14)*yy(i,14)
296 + + dnids(15)*yy(i,15) + dnids(16)*yy(i,16) + dnids(17)*yy(i
297 + + dnids(18)*yy(i,18) + dnids(19)*yy(i,19) + dnids(20)*yy(i,20)
298
299 dydt(i) = dnidt(1)*yy(i,1) + dnidt(2)*yy(i,2) + dnidt(3)*yy(i,3)
300 + + dnidt(4)*yy(i,4) + dnidt(5)*yy(i,5) + dnidt(6)*yy(i,6)
301 + + dnidt(7)*yy(i,7) + dnidt(8)*yy(i,8)
302 + + dnidt(9)*yy(i,9) + dnidt(10)*yy(i,10) + dnidt(11)*yy(i,11)
303 + + dnidt(12)*yy(i,12) + dnidt(13)*yy(i,13) + dnidt(14)*yy(i,14)
304 + + dnidt(15)*yy(i,15) + dnidt(16)*yy(i,16) + dnidt(17)*yy(i,17)
305 + + dnidt(18)*yy(i,18) + dnidt(19)*yy(i,19) + dnidt(20)*yy(i,20)
306
307
308
309 dzdr(i) = dnidr(1)*zz(i,1) + dnidr(2)*zz(i,2) + dnidr(
310 + + dnidr(4)*zz(i,4) + dnidr(5)*zz(i,5) + dnidr(6)*zz(i,6)
311 + + dnidr(7)*zz(i,7) + dnidr(8)*zz(i,8)
312 + + dnidr(9)*zz(i,9) + dnidr(10)*zz(i,10) + dnidr(11)*zz(i,11)
313 + + dnidr(12)*zz(i,12) + dnidr(13)*zz(i,13) + dnidr(14)*zz(i,14)
314 + + dnidr(15)*zz(i,15) + dnidr(16)*zz(i,16) + dnidr(17)*zz(i,17)
315 + + dnidr(18)*zz(i,18) + dnidr(19)*zz(i,19) + dnidr(20)*zz(i,20)
316
317 dzds(i) = dnids(1)*zz(i,1) + dnids(2)*zz(i,2) + dnids(3)*zz(i,3)
318 + + dnids(4)*zz(i,4) + dnids(5)*zz(i,5) + dnids(6)*zz(i,6)
319 + + dnids(7)*zz(i,7) + dnids(8)*zz(i,8)
320 + + dnids(9)*zz(i,9) + dnids(10)*zz(i,10) + dnids(11)*zz(i,11)
321 + + dnids(12)*zz(i,12) + dnids(13)*zz(i,13) + dnids(14)*zz(i,14)
322 + + dnids(15)*zz(i,15) + dnids(16)*zz(i,16) + dnids(17)*zz(i,17)
323 + + dnids(18)*zz(i,18) + dnids(19)*zz(i,19) + dnids(20)*zz(i,20)
324
325 dzdt(i) = dnidt(1)*zz(i,1) + dnidt(2)*zz(i,2) + dnidt(3)*zz(i,3)
326 + + dnidt(4)*zz(i,4) + dnidt(5)*zz(i,5) + dnidt(6)*zz(i
327 + + dnidt(7)*zz(i,7) + dnidt(8)*zz(i,8)
328 + + dnidt(9)*zz(i,9) + dnidt(10)*zz(i,10) + dnidt(11)*zz(i,11)
329 + + dnidt(12)*zz(i,12) + dnidt(13)*zz(i,13) + dnidt(14)*zz(i,14)
330 + + dnidt(15)*zz(i,15) + dnidt(16)*zz(i,16) + dnidt(17)*zz(i,17)
331 + + dnidt(18)*zz(i,18) + dnidt(19)*zz(i,19) + dnidt(20)*zz(i,20)
332
333
334
335
336
337
338
339
340
341
342 drdx(i)=dyds(i)*dzdt(i)-dzds(i)*dydt(i)
343 drdy(i)=dzds(i)*dxdt(i)-dxds(i)*dzdt(i)
344 drdz(i)=dxds(i)*dydt(i)-dyds(i)*dxdt(i)
345
346 dsdz(i)=dxdt(i)*dydr(i)-dydt(i)*dxdr(i)
347 dsdy(i)=dzdt(i)*dxdr(i)-dxdt(i)*dzdr(i)
348 dsdx(i)=dydt(i)*dzdr(i)-dzdt(i)*dydr(i)
349
350 dtdx(i)=dydr(i)*dzds(i)-dzdr(i)*dyds(i)
351 dtdy(i)=dzdr(i)*dxds(i)-dxdr(i)*dzds(i)
352 dtdz(i)=dxdr(i)*dyds(i)-dydr(i)*dxds(i)
353
354 detdp = dxdr(i) * drdx(i)
355 . + dydr(i) * drdy(i)
356 . + dzdr(i) * drdz(i)
357 det(i) = detdp
358 voldp(i) = w * detdp
359 vol(i) = voldp(i)
360
361 ENDDO
362
363
364
365
366
367
368 icor=0
369 DO i=1,nel
370 IF(off(i)==zero)THEN
371 vol(i)=one
372 voldp(i) = one
373 ELSEIF(vol(i)<=zero)THEN
374 icor=1
375 ENDIF
376 ENDDO
377 IF(icor/=0)THEN
378 DO i=1,nel
379 IF(vol(i)<=zero)THEN
380 CALL ancmsg(msgid=171,anmode=aninfo,
381 . i1=ngl(i),i2=ir,i3=is,i4=it)
383 ENDIF
384 ENDDO
385 ENDIF
386
387 DO i=1,nel
388
389
390
391
392 d = one/det(i)
393 drdx(i)=d*drdx(i)
394 dsdx(i)=d*dsdx(i)
395 dtdx(i)=d*dtdx(i)
396
397 drdy(i)=d*drdy(i)
398 dsdy(i)=d*dsdy(i)
399 dtdy(i)=d*dtdy(i)
400
401 drdz(i)=d*drdz(i)
402 dsdz(i)=d*dsdz(i)
403 dtdz(i)=d*dtdz(i)
404
405
406
407
408
409 px(i,1) = dnidr(1)*drdx(i) + dnids(1)*dsdx(i) + dnidt(1)*dtdx(i)
410 px(i,2) = dnidr(2)*drdx(i) + dnids(2)*dsdx(i) + dnidt(2)*dtdx(i)
411 px(i,3) = dnidr(3)*drdx(i) + dnids(3)*dsdx(i) + dnidt
412 px(i,4) = dnidr(4)*drdx(i) + dnids(4)*dsdx(i) + dnidt(4)*dtdx(i)
413 px(i,5) = dnidr(5)*drdx(i) + dnids(5)*dsdx(i) + dnidt(5)*dtdx(i)
414 px(i,6) = dnidr(6)*drdx(i) + dnids(6)*dsdx(i) + dnidt(6)*dtdx(i)
415 px(i,7) = dnidr(7)*drdx(i) + dnids(7)*dsdx(i) + dnidt(7)*dtdx(i)
416 px(i,8) = dnidr(8)*drdx(i) + dnids(8)*dsdx(i) + dnidt(8)*dtdx(i)
417 px(i,9) = dnidr(9)*drdx(i) + dnids(9)*dsdx(i) + dnidt(9)*dtdx(i)
418 px(i,10)= dnidr(10)*drdx(i)+ dnids(10)*dsdx(i)+dnidt(10)*dtdx(i)
419 px(i,11)= dnidr(11)*drdx(i)+ dnids(11)*dsdx(i)+dnidt(11)*dtdx(i)
420 px(i,12)= dnidr(12)*drdx(i)+ dnids(12)*dsdx(i)+dnidt(12)*dtdx(i)
421 px(i,13)= dnidr(13)*drdx(i)+ dnids(13)*dsdx(i)+dnidt(13)*dtdx(i)
422 px(i,14)= dnidr(14)*drdx(i)+ dnids(14)*dsdx(i)+dnidt(14)*dtdx(i)
423 px(i,15)= dnidr(15)*drdx(i)+ dnids(15)*dsdx(i)+dnidt(15)*dtdx(i)
424 px(i,16)= dnidr(16)*drdx(i)+ dnids(16)*dsdx(i)+dnidt(16)*dtdx(i)
425 px(i,17)= dnidr(17)*drdx(i)+ dnids(17)*dsdx(i)+dnidt(17)*dtdx(i)
426 px(i,18)= dnidr(18)*drdx(i)+ dnids(18)*dsdx(i)+dnidt(18)*dtdx(i)
427 px(i,19)= dnidr(19)*drdx(i)+ dnids(19)*dsdx(i)+dnidt(19)*dtdx(i)
428 px(i,20)= dnidr(20)*drdx(i)+ dnids(20)*dsdx(i)+dnidt(20)*dtdx(i)
429
430 py(i,1) = dnidr(1)*drdy(i) + dnids(1)*dsdy(i) + dnidt(1)*dtdy(i)
431 pz(i,1) = dnidr(1)*drdz(i) + dnids(1)*dsdz(i) + dnidt(1)*dtdz(i)
432 py(i,2) = dnidr(2)*drdy(i) + dnids(2)*dsdy(i) + dnidt(2)*dtdy(i)
433 py(i,3) = dnidr(3)*drdy(i) + dnids(3)*dsdy(i) + dnidt(3)*dtdy(i)
434 py(i,4) = dnidr(4)*drdy(i) + dnids(4)*dsdy(i) + dnidt(4)*dtdy(i)
435 py(i,5) = dnidr(5)*drdy(i) + dnids(5)*dsdy(i) + dnidt(5)*dtdy(i)
436 py(i,6) = dnidr(6)*drdy(i) + dnids(6)*dsdy(i) + dnidt(6)*dtdy(i)
437 py(i,7) = dnidr(7)*drdy(i) + dnids(7)*dsdy(i) + dnidt(7)*dtdy(i)
438 py(i,8) = dnidr(8)*drdy(i) + dnids(8)*dsdy(i) + dnidt(8)*dtdy(i)
439 py(i,9) = dnidr(9)*drdy(i) + dnids(9)*dsdy(i) + dnidt(9)*dtdy(i)
440 py(i,10)= dnidr(10)*drdy(i)+ dnids(10)*dsdy(i)+dnidt(10)*dtdy(i)
441 py(i,11)= dnidr(11)*drdy(i)+ dnids(11)*dsdy(i)+dnidt(11)*dtdy(i)
442 py(i,12)= dnidr(12)*drdy(i)+ dnids(12)*dsdy(i)+dnidt(12)*dtdy(i)
443 py(i,13)= dnidr(13)*drdy(i)+ dnids(13)*dsdy(i)+dnidt(13)*dtdy(i)
444 py(i,14)= dnidr(14)*drdy(i)+ dnids(14)*dsdy(i)+dnidt(14)*dtdy(i)
445 py(i,15)= dnidr(15)*drdy(i)+ dnids(15)*dsdy(i)+dnidt(15)*dtdy(i)
446 py(i,16)= dnidr(16)*drdy(i)+ dnids(16)*dsdy(i)+dnidt(16)*dtdy(i)
447 py(i,17)= dnidr(17)*drdy(i)+ dnids(17)*dsdy(i)+dnidt(17)*dtdy(i)
448 py(i,18)= dnidr(18)*drdy(i)+ dnids(18)*dsdy(i)+dnidt(18)*dtdy(i)
449 py(i,19)= dnidr(19)*drdy(i)+ dnids(19)*dsdy(i)+dnidt(19)*dtdy(i)
450 py(i,20)= dnidr(20)*drdy(i)+ dnids(20)*dsdy(i)+dnidt(20)*dtdy(i)
451
452 pz(i,1) = dnidr(1)*drdz(i) + dnids(1)*dsdz(i) + dnidt(1)*dtdz(i)
453 pz(i,2) = dnidr(2)*drdz(i) + dnids(2)*dsdz(i) + dnidt(2)*dtdz(i)
454 pz(i,3) = dnidr(3)*drdz(i) + dnids(3)*dsdz(i) + dnidt(3)*dtdz(i)
455 pz(i,4) = dnidr(4)*drdz(i) + dnids(4)*dsdz(i) +
456 pz(i,5) = dnidr(5)*drdz(i) + dnids(5)*dsdz(i) + dnidt(5)*dtdz(i)
457 pz(i,6) = dnidr(6)*drdz(i) + dnids(6)*dsdz(i) + dnidt(6)*dtdz(i)
458 pz(i,7) = dnidr(7)*drdz(i) + dnids(7)*dsdz(i) + dnidt(7)*dtdz(i)
459 pz(i,8) = dnidr(8)*drdz(i) + dnids(8)*dsdz(i) + dnidt(8)*dtdz(i)
460 pz(i,9) = dnidr(9)*drdz(i) + dnids(9)*dsdz(i) + dnidt(9)*dtdz(i)
461 pz(i,10)= dnidr(10)*drdz(i)+ dnids(10)*dsdz(i)+dnidt(10)*dtdz(i)
462 pz(i,11)= dnidr(11)*drdz(i)+ dnids(11)*dsdz(i)+dnidt(11)*dtdz(i)
463 pz(i,12)= dnidr(12)*drdz(i)+ dnids(12)*dsdz(i)+dnidt(12)*dtdz(i)
464 pz(i,13)= dnidr(13)*drdz(i)+ dnids(13)*dsdz(i)+dnidt(13)*dtdz(i)
465 pz(i,14)= dnidr(14)*drdz(i)+ dnids(14)*dsdz(i)+dnidt(14)*dtdz(i)
466 pz(i,15)= dnidr(15)*drdz(i)+ dnids(15)*dsdz(i)+dnidt(15)*dtdz(i)
467 pz(i,16)= dnidr(16)*drdz(i)+ dnids(16)*dsdz(i)+dnidt(16)*dtdz(i)
468 pz(i,17)= dnidr(17)*drdz(i)+ dnids(17)*dsdz(i)+dnidt(17)*dtdz(i)
469 pz(i,18)= dnidr(18)*drdz(i)+ dnids(18)*dsdz(i)+dnidt(18)*dtdz(i)
470 pz(i,19)= dnidr(19)*drdz(i)+ dnids(19)*dsdz(i)+dnidt(19)*dtdz(i)
471 pz(i,20)= dnidr(20)*drdz(i)+ dnids(20)*dsdz(i)+dnidt(20)*dtdz(i)
472
473 ENDDO
474
475
476
477 DO n=1,20
478 DO i=1,nel
479 kxx(i,n) = vol(i)*
480 . (px(i,n)*px(i,n) + py(i,n)*py(i,n) + pz(i,n)*pz(i,n))
481 ul(i,n) = ul(i,n) + kxx(i,n)
482 ENDDO
483 ENDDO
484 DO i=1,nel
485 volg(i) =volg(i) + vol(i)
486 ENDDO
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501 2000 FORMAT(/' ZERO OR NEGATIVE VOLUME : DELETE 3D-ELEMENT NB',i10/)
502
503 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)