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