37 SUBROUTINE thquad(ELBUF_TAB,NTHGRP2 , ITHGRP ,
42 . NUMELQ ,NUMMAT ,NUMNOD ,SITHBUF, NUMELTG)
103 use element_mod ,
only : nixq,nixtg
107#include "implicit_f.inc"
111#include "vect01_c.inc"
112#include "com01_c.inc"
114#include "param_c.inc"
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
131 INTEGER II, I, J, K, L ,N, IH, IP, NG, MTE, ,
132 . nel,kk(6),ij,nptr,npts,
133 . ir,is,jj(6),niter,iadb,nn,iadv,
nvar,ityp,ijk,is_ale
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
150 ALLOCATE(wwa(239555))
155 iadb =ithgrp(5,niter)
159 IF(ityp==2.OR.ityp==117)
THEN
164 IF(ityp == 117) ityp = 7
168 DO WHILE((ithbuf(ih+nn)/=ispmd).AND.(ih<iadb+nn))
172 IF (ih>=iadb+nn)
GOTO 666
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)
185 nptr = elbuf_tab(ng)%NPTR
186 npts = elbuf_tab(ng)%NPTS
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 )
213 ii = ((ih-1) - iadb)*
nvar
214 DO WHILE((ithbuf(ih+nn)/=ispmd).AND.(ih<iadb+nn))
218 IF (ih > iadb+nn)
GOTO 666
224 wwa(8) = gbuf%EINT(i)
226 wwa(10)= gbuf%QVIS(i)
228 IF (isorth == 0)
THEN
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)
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
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
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
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
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)
297 IF(elbuf_tab(ng)%GBUF%G_BFRAC /= 0)
THEN
298 wwa(31) = gbuf%BFRAC(i)
305 evar(j)=gbuf%SIG(kk(j)+i)
311 IF(ity == 2)
CALL qrota3(x,ixq(1,n),jcvt,evar,gama,isorth)
319 IF(ity == 2)
CALL qrota3(x,ixq(1,n),jcvt,evar,gama,isorth)
335 wwa(31)=gbuf%BFRAC(i)
341 ELSEIF (mte==7.OR.mte==8.OR.mte==9)
THEN
345 ELSEIF (mte==10)
THEN
348 ELSEIF (mte==11)
THEN
352 ELSEIF (mte==14)
THEN
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)
361 ELSEIF (mte==16)
THEN
365 ELSEIF (mte==17)
THEN
366 IF (itherm > 0) wwa(13)=lbuf%TEMP(i)
369 ELSEIF (mte==18)
THEN
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)
379 wwa(1624 + j) = lbuf1%SIG(kk(j)+i)
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)
389 wwa(1635 + j) = lbuf2%SIG(kk(j)+i)
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
399 ELSEIF (mte==22.OR.mte==23)
THEN
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)
409 ELSEIF (mte==26)
THEN
413 ELSEIF (mte==32.OR.mte==43)
THEN
417 ELSEIF (mte==46.OR.mte==47)
THEN
419 wwa(13)=mbuf%VAR(i+nel)
421 ELSEIF (mte==49)
THEN
425 ELSEIF (mte>=29.AND.mte/=67)
THEN
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
439 nuvar =ipm(8,ixq(1,nft+1))
440 ELSEIF(ity == 7)
THEN
441 nuvar =ipm(8,ixtg(1,nft+1))
444 wwa(136+j)=mbuf%VAR((j-1)*nel+i)
456 IF (elbuf_tab(ng)%BUFLY(1)%L_STRA > 0)
THEN
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
470 wwa(1619+j-1)=evar(j)
472 IF(ity == 2)
CALL qrota3(x,ixq(1,n),jcvt,evar,gama,isorth)
475 wwa(239030+j-1)=evar(j)
480 wwa(239030+j-1)=evar(j)
482 IF(ity == 2)
CALL qrota3(x,ixq(1,n),jcvt,evar,gama,isorth)
485 wwa(1619+j-1)=evar(j)
489 IF (elbuf_tab(ng)%BUFLY(1)%L_STRA > 0)
THEN
492 lbuf1 => elbuf_tab(ng)%BUFLY(1)%LBUF(ir,is,1)
494 evar(1) = lbuf1%STRA(kk(1) + i)
495 evar(2) = lbuf1%STRA(kk(2) + i)
496 evar(4) = lbuf1%STRA(kk(4) + i)
499 wwa(239030+30+(is-1)*6+(ir-1)*18+j) = evar
502 IF(ity == 2)
CALL qrota3(x,ixq(1,n),jcvt,evar,gama,isorth)
504 wwa(239030+30+(is-1)*6+(ir-1)*18+j) = evar(j)
514 IF(
ALLOCATED(multi_fvm%BFRAC))
THEN
516 DO ir=1,multi_fvm%NBMAT
517 bfrac =
max(bfrac, multi_fvm%BFRAC(ir,n))
522 wwa(239547)= multi_fvm%VEL(1, n)
523 wwa(239548)= multi_fvm%VEL(2, n)
524 wwa(239549)= multi_fvm%VEL(3, n)
526 wwa(239550)= multi_fvm%SOUND_SPEED(n)
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)
535 wwa(239550)= lbuf%SSP(i)
536 IF(elbuf_tab(ng)%BUFLY(1)%L_SSP /= 0)
THEN
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)
546 wwa(239551)= sqrt(vel(1)*vel(1)+vel(2)*vel(2)+vel(3)*vel(3))/lbuf%SSP(i)
553 rho0 = pm(01,ixtg(1,1+nft))
555 rho0 = pm(01,ixq(1,1+nft))
558 wwa(239555) = gbuf%RHO(i) / rho0 - one
563 DO l=iadv,iadv+
nvar-1