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
99 USE elbufdef_mod
100 USE multi_fvm_mod
102
103
104
105#include "implicit_f.inc"
106
107
108
109#include "vect01_c.inc"
110#include "com01_c.inc"
111#include "task_c.inc"
112#include "param_c.inc"
113
114
115
116 INTEGER,INTENT(IN) :: NUMELQ, NUMMAT, NUMNOD ,SITHBUF, NUMELTG
117 INTEGER,INTENT(IN) :: IPARG(NPARG,NGROUP),ITHBUF(SITHBUF),IXQ(NIXQ,NUMELQ),IPM(NPROPMI,NUMMAT),IXTG(NIXTG,NUMELTG)
118 INTEGER, INTENT(IN) :: NTHGRP2
119 INTEGER, INTENT(IN) :: ITHERM
120 INTEGER, DIMENSION(NITHGR,*), INTENT(IN) :: ITHGRP
121 my_real,
INTENT(IN) :: pm(npropm,nummat)
123 my_real,
INTENT(IN) :: x(3,numnod), v(3,numnod), w(3,numnod)
124 TYPE (elbuf_struct_), DIMENSION(NGROUP), TARGET :: elbuf_tab
125 TYPE(MULTI_FVM_STRUCT), INTENT(IN) :: MULTI_FVM
126
127
128
129 INTEGER II, KRK, LL, I, J, K, L ,N, IH, IP, NG, MTE, NUVAR,
130 . NC1, NC2, NC3, NC4, NEL, MTN1,KK(6),IJ,NPTR,NPTS,
131 . IR,IS,JJ(6),NITER,IADB,NN,IADV,NVAR,ITYP,IJK,IS_ALE
133 . sy , sz, ty , tz, suma,
134 . y1,y2,y3,y4,z1,z2,z3,z4,
135 . r11,r12,r13,r21,r22,r23,r31,r32,r33,
136 . g22,g23,g32,g33,
137 . t22,t23,t32,t33,
138 . s1,s2,s3,s4,
139 . t1,t2,t3,t4,cs,ct,evar(6),gama(6),
140 . tmp(3,4),vel(3),ssp,bfrac,rho0
141 my_real,
dimension(:),
allocatable :: wwa
142 TYPE(L_BUFEL_) ,POINTER :: LBUF,LBUF1,LBUF2
143 TYPE(G_BUFEL_) ,POINTER :: GBUF
144 TYPE(BUF_MAT_) ,POINTER :: MBUF
145
146
147
148 ALLOCATE(wwa(239555))
149 ijk = 0
150 DO niter=1,nthgrp2
151 ityp=ithgrp(2,niter)
152 nn =ithgrp(4,niter)
153 iadb =ithgrp(5,niter)
154 nvar=ithgrp(6,niter)
155 iadv=ithgrp(7,niter)
156 ii=0
157 IF(ityp==2.OR.ityp==117)THEN
158
159 nuvar = 0
160 ii=0
161 ih=iadb
162 IF(ityp == 117) ityp = 7
163
164
165
166 DO WHILE((ithbuf(ih+nn)
167 ih = ih + 1
168 ENDDO
169
170 IF (ih>=iadb+nn) GOTO 666
171
172
173 DO ng=1,ngroup
174 ity=iparg(5,ng)
175 is_ale = iparg(7,ng)
176
177
178 IF (ity == ityp) THEN
179 gbuf => elbuf_tab(ng)%GBUF
180 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
181 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
182
183 nptr = elbuf_tab(ng)%NPTR
184 npts = elbuf_tab(ng)%NPTS
185
187 2 mte ,nel ,nft ,iad ,ity ,
188 3 npt ,jale ,ismstr ,jeul ,jtur ,
189 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
190 5 nvaux ,jpor ,jcvt ,jclose ,jplasol ,
191 6 irep ,iint ,igtyp ,israt ,isrot ,
192 7 icsen ,isorth ,isorthg ,ifailure,jsms )
193
194 IF(mte /= 13) THEN
195
196 DO i=1,nel
197 n=i+nft
198 k=ithbuf(ih)
199 ip=ithbuf(ih+nn)
200
201 DO ij=1,6
202 kk(ij) = nel*(ij-1)
203 ENDDO
204
205 evar(1:6) = zero
206
207 IF (k==n)THEN
208 ih=ih+1
209
210
211 ii = ((ih-1) - iadb)*nvar
212 DO WHILE((ithbuf(ih+nn)/=ispmd).AND.(ih<iadb+nn))
213 ih = ih + 1
214 ENDDO
215
216 IF (ih > iadb+nn) GOTO 666
217
218 DO l=1,1000
219 wwa(l)=zero
220 ENDDO
221 wwa(1) = gbuf%OFF(i)
222 wwa(8) = gbuf%EINT(i)
223 wwa(9) = gbuf%RHO(i)
224 wwa(10)= gbuf%QVIS(i)
225 wwa(11)= gbuf%VOL(i)
226 IF (isorth == 0) THEN
227 gama(1)=one
228 gama(2)=zero
229 gama(3)=zero
230 gama(4)=zero
231 gama(5)=one
232 gama(6)=zero
233 ELSE
234 gama(1)=gbuf%GAMA(kk(1) + i)
235 gama(2)=gbuf%GAMA(kk(2) + i)
236 gama(3)=gbuf%GAMA(kk(3) + i)
237 gama(4)=gbuf%GAMA(kk(4) + i)
238 gama(5)=gbuf%GAMA(kk(5) + i)
239 gama(6)=gbuf%GAMA(kk(6) + i)
240 END IF
241
242
243
244 vel(1:3)=zero
245 wwa(239547) = zero
246 wwa(239548) = zero
247 wwa(239549) = zero
248 wwa(239551) = zero
249 wwa(239551) = zero
250 IF(is_ale /= 0)THEN
251
252 IF(ity == 2)THEN
253 tmp(1,1:4)=v(1,ixq(2:5,n))-w
254 tmp(2,1:4)=v(2,ixq(2:5,n))-w(2,ixq(2:5,n))
255 tmp(3,1:4)=v(3,ixq(2:5,n))-w(3,ixq(2:5,n))
256 vel(1) = sum(tmp(1,1:4))*fourth
257 vel(2) = sum(tmp(2,1:4))*fourth
258 vel(3) = sum(tmp(3,1:4))*fourth
259 ELSEIF(ity == 7)THEN
260 tmp(1,1:3)=v(1,ixtg(2:4,n))-w(1,ixtg(2:4,n))
261 tmp(2,1:3)=v(2,ixtg(2:4,n))-w(2,ixtg(2:4,n))
262 tmp(3,1:3)=v(3,ixtg(2:4,n))-w(3,ixtg(2:4,n))
263 vel(1) = sum(tmp(1,1:3))*third
264 vel(2) = sum(tmp(2,1:3))*third
265 vel(3) = sum(tmp(3,1:3))*third
266 ENDIF
267 ELSE
268
269 IF(ity == 2)THEN
270 tmp(1,1:4)=v(1,ixq(2:5,n))
271 tmp(2,1:4)=v(2,ixq(2:5,n))
272 tmp(3,1:4)=v(3,ixq(2:5,n))
273 vel(1) = sum(tmp(1,1:4))*fourth
274 vel(2) = sum(tmp(2,1:4))*fourth
275 vel(3) = sum(tmp(3,1:4))*fourth
276 ELSE
277 tmp(1,1:3)=v(1,ixtg(2:4,n))
278 tmp(2,1:3)=v(2,ixtg(2:4,n))
279 tmp(3,1:3)=v(3,ixtg(2:4,n))
280 vel(1) = sum(tmp(1,1:3))*third
281 vel(2) = sum(tmp(2,1:3))*third
282 vel(3) = sum(tmp(3,1:3))*third
283 ENDIF
284 ENDIF
285
286 wwa(239547) = vel(1)
287 wwa(239548) = vel(2)
288 wwa(239549) = vel(3)
289
290 IF(elbuf_tab(ng)%BUFLY(1)%L_SSP /= 0)THEN
291 wwa(239550)= lbuf%SSP(i)
292 wwa(239551)= sqrt(vel(1)*vel(1)+vel(2)*vel(2)+vel(3)*vel(3))/lbuf%SSP(i)
293 ENDIF
294
295 IF(elbuf_tab(ng)%GBUF%G_BFRAC /= 0)THEN
296 wwa(31) = gbuf%BFRAC(i)
297 ENDIF
298
299
300
301
302 DO j=1,6
303 evar(j)=gbuf%SIG(kk(j)+i)
304 ENDDO
305 IF (jcvt <= 0) THEN
306 DO j=1,6
307 wwa(2+j-1)=evar(j)
308 ENDDO
309 IF(ity == 2)
CALL qrota3(x,ixq(1,n),jcvt,evar,gama,isorth)
310 DO j=1,6
311 wwa(35+j-1)=evar(j)
312 ENDDO
313 ELSE
314 DO j=1,6
315 wwa(35+j-1)=evar(j)
316 ENDDO
317 IF(ity == 2)
CALL qrota3(x,ixq(1,n),jcvt,evar,gama,isorth)
318 DO j=1,6
319 wwa(2+j-1)=evar(j)
320 ENDDO
321 ENDIF
322
323 IF (mte==2)THEN
324 wwa(12)=gbuf%PLA(i)
325 ELSEIF(mte==3) THEN
326 wwa(12)=gbuf%PLA(i)
327 wwa(13)=gbuf%TEMP(i)
328 ELSEIF (mte==4) THEN
329 wwa(12)=gbuf%PLA(i)
330 wwa(13)=gbuf%TEMP(i)
331 wwa(14)=gbuf%EPSD(i)
332 ELSEIF (mte==5) THEN
333 wwa(31)=gbuf%BFRAC(i)
334 wwa(13)=gbuf%TEMP(i)
335 ELSEIF (mte==6) THEN
336 wwa(13)=gbuf%TEMP(i)
337 wwa(26)=lbuf%RK(i)
338 wwa(27)=lbuf%RE(i)
339 ELSEIF (mte==7.OR.mte==8.OR.mte==9) THEN
340 wwa(12)=zero
341 wwa(13)=zero
342 wwa(14)=zero
343 ELSEIF (mte==10) THEN
344 wwa(12)=lbuf%EPSQ(i)
345 wwa(30)=lbuf%PLA(i)
346 ELSEIF (mte==11) THEN
347 wwa(13)=lbuf%TEMP(i)
348 wwa(26)=lbuf%RK(i)
349 wwa(27)=lbuf%RE(i)
350 ELSEIF (mte==14) THEN
351 wwa(32)=lbuf%PLA(i)
352 wwa(33)=lbuf%SIGF(i)
353 wwa(28)=lbuf%EPSF(i)
354 wwa(15)=lbuf%DAM(kk(1)+i)
355 wwa(16)=lbuf%DAM(kk(2)+i)
356 wwa(17)=lbuf%DAM(kk(3)+i)
357 wwa(18)=lbuf%DAM(kk(4)+i)
358 wwa(34)=lbuf%DAM(kk(5)+i)
359 ELSEIF (mte==16) THEN
360 wwa(12)=lbuf%PLA(i)
361 wwa(13)=lbuf%TEMP(i)
362 wwa(14)=lbuf%XST(i)
363 ELSEIF (mte==17) THEN
364 IF (itherm > 0) wwa(13)=lbuf%TEMP(i)
365 wwa(26)=lbuf%RK(i)
366 wwa(27)=lbuf%RE(i)
367 ELSEIF (mte==18) THEN
368 wwa(13)=lbuf%TEMP(i)
369 ELSEIF (mte==20) THEN
370 lbuf1 => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
371 lbuf2 => elbuf_tab(ng)%BUFLY(2)%LBUF(1,1,1)
372 IF(gbuf%G_PLA>0) wwa(12)=gbuf%PLA(i)
373 IF(gbuf%G_TEMP>0)wwa(13)=gbuf%TEMP(i)
374
375
376 DO j = 1,6
377 wwa(1624 + j) = lbuf1%SIG(kk(j)+i)
378 ENDDO
379 wwa(1624 + 7 ) = lbuf1%EINT(i)
380 wwa(1624 + 8 ) = lbuf1%RHO(i)
381 wwa(1624 + 9 ) = lbuf1%VOL(i)
382 IF(elbuf_tab(ng)%BUFLY(1)%L_TEMP>0)
383 . wwa(1624 +11 )=lbuf1%TEMP(i)
384
385
386 DO j = 1,6
387 wwa(1635 + j) = lbuf2%SIG(kk(j)+i)
388 ENDDO
389 wwa(1635 + 7 ) = lbuf2%EINT(i)
390 wwa(1635 + 8 ) = lbuf2%RHO(i)
391 wwa(1635 + 9 ) = lbuf2%VOL(i)
392 IF(elbuf_tab(ng)%BUFLY(2)%L_TEMP>0)
393 . wwa(1635 +11 )=lbuf2%TEMP(i)
394 ELSEIF (mte==21) THEN
395 wwa(12)=lbuf%EPSQ(i)
396 wwa(30)=gbuf%PLA(i)
397 ELSEIF (mte==22.OR.mte==23) THEN
398 wwa(12)=lbuf%PLA(i)
399 ELSEIF (mte==24) THEN
400 wwa(19)=lbuf%DAM(kk(1)+i)+lbuf%DAM(kk(2)+i)+lbuf%DAM(kk(3)+i)
401 wwa(20)=lbuf%SIGA(kk(1)+i)
402 wwa(21)=lbuf%SIGA(kk(2)+i)
403 wwa(22)=lbuf%SIGA(kk(3)+i)
404 wwa(23)=lbuf%CRAK(kk(1)+i)+lbuf%CRAK(kk(2)+i)+lbuf%CRAK(kk(3)+i)
405 wwa(24)=lbuf%DSUM(i)
406 wwa(25)=lbuf%VK(i)
407 ELSEIF (mte==26) THEN
408 wwa(12)=lbuf%PLA(i)
409 wwa(13)=lbuf%TEMP(i)
410 wwa(14)
411 ELSEIF (mte==32.OR.mte==43) THEN
412 wwa(12)=zero
413 wwa(13)=zero
414 wwa(14)=zero
415 ELSEIF (mte==46.OR.mte==47) THEN
416 wwa(12)=mbuf%VAR(i)
417 wwa(13)=mbuf%VAR(i+nel)
418
419 ELSEIF (mte==49) THEN
420 wwa(12)=lbuf%PLA(i)
421 wwa(13)=lbuf%TEMP(i)
422 wwa(14)=lbuf%EPSD(i)
423 ELSEIF (mte>=29.AND.mte/=67) THEN
424
425 nuvar = elbuf_tab(ng)%BUFLY(1)%NVAR_MAT
426 IF (nuvar > 0) wwa(12)=mbuf%VAR(i)
427 IF (nuvar > 1) wwa(13)=mbuf%VAR(i+nel)
428 IF (nuvar > 2) wwa(14)=mbuf%VAR(i+nel*2)
429 ELSEIF (mte==67) THEN
430
431 wwa(12)=zero
432 wwa(13)=mbuf%VAR(i)
433 wwa(14)=zero
434 ENDIF
435 IF (mte >= 29) THEN
436 IF(ity == 2) THEN
437 nuvar =ipm(8,ixq(1,nft+1))
438 ELSEIF(ity == 7) THEN
439 nuvar =ipm(8,ixtg(1,nft+1))
440 ENDIF
441 DO j=1,nuvar
442 wwa(136+j)=mbuf%VAR((j-1)*nel+i)
443 ENDDO
444 ENDIF
445
446
447
448
449
450
451
452
453 evar(1:6)=zero
454 IF (elbuf_tab(ng)%BUFLY(1)%L_STRA > 0) THEN
455 DO is=1,npts
456 DO ir=1,nptr
457 lbuf1 => elbuf_tab(ng)%BUFLY(1)%LBUF(ir,is,1)
458 evar(1) = evar(1) + lbuf1%STRA(kk(1) + i)/npt
459 evar(2) = evar(2) + lbuf1%STRA(kk(2) + i)/npt
460 evar(4) = evar(4) + lbuf1%STRA(kk(4) + i)*half/npt
461 ENDDO
462 ENDDO
463 ENDIF
464
465 IF (jcvt == 0) THEN
466
467 DO j=1,6
468 wwa(1619+j-1)=evar(j)
469 ENDDO
470 IF(ity == 2)
CALL qrota3(x,ixq(1,n),jcvt,evar,gama,isorth)
471
472 DO j=1,6
473 wwa(239030+j-1)=evar(j)
474 ENDDO
475 ELSE
476
477 DO j=1,6
478 wwa(239030+j-1)=evar(j)
479 ENDDO
480 IF(ity == 2)
CALL qrota3(x,ixq(1,n),jcvt,evar,gama,isorth)
481
482 DO j=1,6
483 wwa(1619+j-1)=evar(j)
484 ENDDO
485 ENDIF
486
487 IF (elbuf_tab(ng)%BUFLY(1)%L_STRA > 0) THEN
488 DO is=1,npts
489 DO ir=1,nptr
490 lbuf1 => elbuf_tab(ng)%BUFLY(1)%LBUF(ir,is,1)
491 evar(1:6)=zero
492 evar(1) = lbuf1%STRA(kk(1) + i)
493 evar(2) = lbuf1%STRA(kk(2) + i)
494 evar(4) = lbuf1%STRA(kk(4) + i)
495 IF (jcvt == 0) THEN
496 DO j=1,6
497 wwa(239030+30+(is-1)*6+(ir-1)*18+j) = evar(j)
498 ENDDO
499 ELSE
500 IF(ity == 2)
CALL qrota3(x,ixq(1,n),jcvt,evar,gama,isorth)
501 DO j=1,6
502 wwa(239030+30+(is-1)*6+(ir-1)*18+j) = evar(j)
503 ENDDO
504 ENDIF
505 ENDDO
506 ENDDO
507 ENDIF
508
509
510 IF (mte==151) THEN
511
512 IF(ALLOCATED(multi_fvm%BFRAC))THEN
513 bfrac = zero
514 DO ir=1,multi_fvm%NBMAT
515 bfrac =
max(bfrac, multi_fvm%BFRAC(ir,n))
516 ENDDO
517 wwa(31)=bfrac
518 ENDIF
519
520 wwa(239547)= multi_fvm%VEL(1, n)
521 wwa(239548)= multi_fvm%VEL(2, n)
522 wwa(239549)= multi_fvm%VEL(3, n)
523
524 wwa(239550)= multi_fvm%SOUND_SPEED(n)
525
526 wwa(239551)= sqrt(multi_fvm%VEL(1, n)*multi_fvm%VEL(1, n)+
527 . multi_fvm%VEL(2, n)*multi_fvm%VEL(2, n)+
528 . multi_fvm%VEL(3, n)*multi_fvm%VEL(3, n)) /
529 . multi_fvm%SOUND_SPEED(n)
530
532
533 wwa(239550)= lbuf%SSP(i)
534 IF(elbuf_tab(ng)%BUFLY(1)%L_SSP /= 0)THEN
535 jj(1) = nel*(1-1)
536 jj(2) = nel*(2-1)
537 jj(3) = nel*(3-1)
538 vel(1) = gbuf%MOM(jj(1) + i) / gbuf%RHO(i)
539 vel(2) = gbuf%MOM(jj(2) + i) / gbuf%RHO(i)
540 vel(3) = gbuf%MOM(jj(3) + i) / gbuf%RHO(i)
541 wwa(239547)= vel(1)
542 wwa(239548)= vel(2)
543 wwa(239549)= vel(3)
544 wwa(239551)= sqrt(vel(1)*vel(1)+vel(2)*vel(2)+vel(3)*vel(3))/lbuf%SSP(i)
545 ENDIF
546
547 ENDIF
548
549
550 IF(numeltg > 0)THEN
551 rho0 = pm(01,ixtg(1,1+nft))
552 ELSE
553 rho0 = pm(01,ixq(1,1+nft))
554 ENDIF
555 IF(rho0 > zero)THEN
556 wwa(239555) = gbuf%RHO(i) / rho0 - one
557 ELSE
558 wwa(239555) = zero
559 ENDIF
560
561 DO l=iadv,iadv+nvar-1
562 k=ithbuf(l)
563 ijk=ijk + 1
564 wa(ijk)=wwa(k)
565 ENDDO
566 ijk=ijk + 1
567 wa(ijk)=ii
568 ENDIF
569 ENDDO
570
571 ENDIF
572 ENDIF
573 ENDDO
574
575 ENDIF
576 666 continue
577 ENDDO
578 DEALLOCATE(wwa)
579
580 RETURN
type(alefvm_param_), target alefvm_param
subroutine initbuf(iparg, ng, mtn, llt, nft, iad, ity, npt, jale, ismstr, jeul, jtur, jthe, jlag, jmult, jhbe, jivf, mid, jpor, jcvt, jclose, jpla, irep, iint, igtyp, israt, isrot, icsen, isorth, isorthg, ifailure, jsms)
subroutine qrota3(x, ixq, kcvt, tens, gama, isorth)