42 SUBROUTINE dfunc0(ELBUF_TAB, FUNC ,IFUNC ,IPARG ,
43 2 MASS , PM ,EL2FA ,NBF ,
44 3 NBPART , IADG ,SPBUF ,IPART ,
45 4 IPARTSP , ALE_CONNECTIVITY ,IPM ,
47 6 NERCVOIS , NESDVOIS ,LERCVOIS ,LESDVOIS,
48 7 BUFMAT , MULTI_FVM ,KXSP ,DEFAULT_OUTPUT,
60 USE matparam_def_mod ,
ONLY : matparam_struct_
61 USE multimat_param_mod ,
ONLY
65#include "implicit_f.inc"
69#include "vect01_c.inc"
82 my_real func(*), mass(*) ,pm(npropm,nummat),spbuf(nspbuf,*),x(3,numnod),v(3,numnod), w(*)
84 INTEGER IPARG(NPARG,NGROUP),EL2FA(*),IFUNC,NBF,
85 . NBPART,IADG(NSPMD,*),IPART(,*),IPARTSP(*),
86 . NERCVOIS(*),NESDVOIS(*),LERCVOIS(*),LESDVOIS(*),IPM(NPROPMI,)
87 INTEGER,
INTENT(IN) :: ITHERM
88 INTEGER,
INTENT(IN) :: KXSP(NISP,NUMSPH),DEFAULT_OUTPUT
89 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP),
TARGET :: ELBUF_TAB
90 TYPE(multi_fvm_struct),
INTENT(IN) :: MULTI_FVM
91 TYPE(),
INTENT(IN) :: ALE_CONNECTIVITY
92 TYPE (MATPARAM_STRUCT_) ,
DIMENSION(NUMMAT) ,
INTENT(IN) :: MAT_PARAM
96 my_real evar(mvsiz), p, vonm2, vonm, s1, s2, s3,
VALUE
97 INTEGER I,II(6),N,NN,NN1,NG,NEL,,MT,MLW,IALEL,IPRT,IUS,BUF,NUVAR,IR,NFAIL,IALEFVM_FLG,IEOS,NVAREOS
99 REAL,
DIMENSION(:),
ALLOCATABLE :: WA
100 TYPE(G_BUFEL_) ,
POINTER :: GBUF
101 TYPE(L_BUFEL_) ,
POINTER :: LBUF, LBUF1,LBUF2
102 TYPE(BUF_MAT_) ,
POINTER :: MBUF
103 TYPE(buf_eos_) ,
POINTER :: EBUF
104 my_real,
DIMENSION(:),
POINTER :: dfmax
105 my_real,
DIMENSION(:) ,
POINTER :: uparam
106 INTEGER MID,IMAT,NUPARAM,IPOS,IADBUF,ISUBMAT,IU(4),ILAY
117 CALL my_alloc(wa,nbf)
148 IF (default_output == 1)
THEN
151 func(el2fa(nn1+n)) = spbuf(1,n)
153 ELSEIF (default_output == 2)
THEN
156 func(el2fa(nn1+n)) = kxsp(4,n)
160 gbuf => elbuf_tab(ng)%GBUF
161 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
162 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
163 jturb = iparg(12,ng)*(iparg(7,ng)+iparg(11,ng))
164 nuvar = elbuf_tab(ng)%BUFLY(1)%NVAR_MAT
166 IF (ifunc == 1 .AND. gbuf%G_PLA > 0)
THEN
169 IF (el2fa(nn1+n)/=0)
THEN
170 func(el2fa(nn1+n)) = gbuf%PLA(i)
174 ELSEIF (ifunc == 2)
THEN
177 func(el2fa(nn1+n)) = gbuf%RHO(i)
179 ELSEIF (ifunc == 3)
THEN
182 ialel=iparg(7,ng)+iparg(11,ng)
186 VALUE = gbuf%EINT(i)/
max(em30,pm(89,mt))
188 VALUE = gbuf%EINT(i)/
max(em30,gbuf%RHO(i))
190 func(el2fa(nn1+n)) =
VALUE
193 ELSEIF (ifunc == 4 .AND. gbuf%G_TEMP > 0)
THEN
196 IF (el2fa(nn1+n)/=0) func(el2fa(nn1+n)) = gbuf%TEMP
199 ELSEIF(ifunc == 6 .OR. ifunc == 7)
THEN
202 IF(el2fa(nn1+n)/=0)
THEN
203 p = - (gbuf%SIG(ii(1) + i)
204 . + gbuf%SIG(ii(2) + i)
205 . + gbuf%SIG(ii(3) + i) ) * third
208 s1=gbuf%SIG(ii(1) + i) + p
209 s2=gbuf%SIG(ii(2) + i) + p
210 s3=gbuf%SIG(ii(3) + i) + p
211 vonm2= three*(gbuf%SIG(ii(4) + i)**2 +
212 . gbuf%SIG(ii(5) + i)**2 +
213 . gbuf%SIG(ii(6) + i)**2 +
214 . half*(s1*s1+s2*s2+s3*s3) )
222 ELSEIF(ifunc == 8 .AND. jturb/=0)
THEN
225 nn = el2fa(nn1 + i + nft)
227 func(nn) = gbuf%RK(i)
231 ELSEIF(ifunc == 9)
THEN
235 nn = el2fa(nn1 + i + nft)
237 IF(mlw == 6.AND.jturb/=0)
THEN
240 VALUE = pm(81,mt)*gbuf%RK(i)**2 /
max(em15,gbuf%RE(i))
248 ELSEIF(ifunc == 10)
THEN
251 nn = el2fa(nn1 + i + nft
253 IF(mlw == 6 .OR. mlw == 17)
THEN
255 ELSEIF(mlw == 46 .OR.
THEN
256 VALUE = mbuf%VAR(nel+i)
264 ELSEIF((ifunc == 11.OR.ifunc == 12.OR.ifunc == 13)
265 . .AND.mlw == 24)
THEN
269 func(el2fa(nn1+n)) = lbuf%DAM(ii(ifunc-10) + i)
272 ELSEIF(ifunc>=14.AND.ifunc<=19)
THEN
275 IF(el2fa(nn1+n)/=0)
THEN
276 func(el2fa(nn1+n)) = gbuf%SIG(ii(ifunc-13) + i)
280 ELSEIF(ifunc>=20.AND.ifunc<=24)
THEN
284 IF(el2fa(nn1+n)/=0)
THEN
285 IF ( (ius + 1) < nuvar)
THEN
286 VALUE = mbuf%VAR(i+ius*nel)
290 func(el2fa(nn1+n)) =
VALUE
294 ELSEIF(ifunc == 25)
THEN
297 IF(el2fa(nn1+n)/=0)
THEN
300 func(el2fa(nn1+n)) =
VALUE
304 ELSEIF(ifunc == 3890)
THEN
306 nfail = elbuf_tab(ng)%BUFLY(1)%NFAIL
309 . elbuf_tab(ng)%BUFLY(1)%FAIL(1,1,1)%FLOC(ir)%DAMMX
312 func(el2fa(nn1+n)) = dfmax(i)
316 ELSEIF (ifunc == 4893)
THEN
319 func(el2fa(nn1+n)) = ispmd
322 ELSEIF (ifunc == 4895)
THEN
324 IF (gbuf%G_SEQ > 0)
THEN
327 IF (el2fa(nn1+n) /= 0)
THEN
328 func(el2fa(nn1+n)) = gbuf%SEQ(i)
334 IF (el2fa(nn1+n) /= 0)
THEN
335 p = -(gbuf%SIG(ii(1) + i)
336 . + gbuf%SIG(ii(2) + i)
337 . + gbuf%SIG(ii(3) + i)) * third
338 s1=gbuf%SIG(ii(1) + i) + p
339 s2=gbuf%SIG(ii(2) + i) + p
340 s3=gbuf%SIG(ii(3) + i) + p
341 vonm2= three*(gbuf%SIG(ii(4) + i)**2 +
342 . gbuf%SIG(ii(5) + i)**2 +
343 . gbuf%SIG(ii(6) + i)**2 +
344 . half*(s1*s1+s2*s2+s3*s3))
346 func(el2fa(nn1+n)) = vonm
351 ELSEIF(ifunc == 4930 )
THEN
352 IF(gbuf%G_TB > 0)
THEN
355 IF(el2fa(nn1+n)/=0)
THEN
356 func(el2fa(nn1+n)) = -gbuf%TB(i)
361 ELSEIF(ifunc == 4937 )
THEN
365 IF(el2fa(nn1+n)/=0)
THEN
366 func(el2fa(nn1+n)) = gbuf%DT(i)
371 ELSEIF(ifunc>=4938 .AND. ifunc<=4944)
THEN
372 IF(gbuf%G_MOM>0 )
THEN
377 func(el2fa(nn1+n)) = gbuf%MOM( ii((ifunc-4937) + i ) )
380 ELSEIF(ifunc==4941)
THEN
384 func(el2fa(nn1+n)) = sqrt( gbuf%MOM(ii(1) + i)+gbuf%MOM(ii(1) + i)
388 ELSEIF(ifunc==4942)
THEN
391 IF(el2fa(nn1+n)/=0)
THEN
392 func(el2fa(nn1+n)) = sqrt( gbuf%MOM(ii(2) + i)+gbuf%MOM(ii(2) + i)
393 + +gbuf%MOM(ii(3) + i)+gbuf%MOM(ii(3) + i) )
396 ELSEIF(ifunc==4943)
THEN
399 IF(el2fa(nn1+n)/=0)
THEN
400 func(el2fa(nn1+n)) = sqrt( gbuf%MOM(ii(1) + i)+gbuf%MOM(ii(1) + i)
401 + +gbuf%MOM(ii(3) + i)+gbuf%MOM(ii(3) + i) )
404 ELSEIF(ifunc==4944)
THEN
407 IF(el2fa(nn1+n)/=0)
THEN
408 func(el2fa(nn1+n)) = sqrt( gbuf%MOM(ii(1) + i)+gbuf%MOM
409 + +gbuf%MOM(ii(2) + i)+gbuf%MOM(ii(2) + i)
410 + +gbuf%MOM(ii(3) + i)+gbuf%MOM(ii(3) + i) )
416 ELSEIF(ifunc>=4945 .AND. ifunc<=4951)
THEN
417 IF(gbuf%G_MOM>0 )
THEN
418 IF(ifunc>=4945.AND.ifunc<=4947)
THEN
421 IF(el2fa(nn1+n)/=0)
THEN
422 func(el2fa(nn1+n)) = gbuf%MOM( ii(ifunc-4944) + i ) / gbuf%RHO(i)
425 ELSEIF(ifunc==4948)
THEN
428 IF(el2fa(nn1+n)/=0)
THEN
429 func(el2fa(nn1+n)) = sqrt( gbuf%MOM(ii(1) + i)+gbuf%MOM(ii(1) + i)
430 + +gbuf%MOM(ii(2) + i)+gbuf%MOM(ii(2) + i) ) / gbuf%RHO(i)
433 ELSEIF(ifunc==4949)
THEN
436 IF(el2fa(nn1+n)/=0)
THEN
437 func(el2fa(nn1+n)) = sqrt( gbuf%MOM(ii(2) + i)+gbuf%MOM(ii(2) + i)
438 + +gbuf%MOM(ii(3) + i)+gbuf%MOM(ii(3) + i) ) / gbuf%RHO(i)
441 ELSEIF(ifunc==4950)
THEN
444 IF(el2fa(nn1+n)/=0)
THEN
445 func(el2fa(nn1+n)) = sqrt( gbuf%MOM(ii(1) + i)+gbuf%MOM(ii(1) + i)
446 + +gbuf%MOM(ii(3) + i)+gbuf%MOM(ii(3) + i) ) / gbuf%RHO(i)
449 ELSEIF(ifunc==4951)
THEN
452 IF(el2fa(nn1+n)/=0)
THEN
453 func(el2fa(nn1+n)) = sqrt( gbuf%MOM(ii(1) + i)+gbuf%MOM(ii(1) + i)
454 + +gbuf%MOM(ii(2) + i)+gbuf%MOM(ii(2) + i)
462 ELSEIF (ifunc>=4952 .AND. ifunc<=4958)
THEN
464 IF(ialefvm_flg >= 2)
THEN
465 IF(ifunc>=4952 .AND. ifunc<=4954)
THEN
468 IF(el2fa(nn1+ n)/=0)
THEN
472 ELSEIF(ifunc==4955)
THEN
475 IF(el2fa(nn1+ n)/=0)
THEN
480 ELSEIF(ifunc==4956)
THEN
483 IF(el2fa(nn1+ n)/=0)
THEN
488 ELSEIF(ifunc==4957)
THEN
491 IF(el2fa(nn1+ n)/=0)
THEN
496 ELSEIF(ifunc==4958)
THEN
499 IF(el2fa(nn1+ n)/=0)
THEN
510 ELSEIF(ifunc == 4959)
THEN
511 IF(gbuf%G_ISMS>0)
THEN
514 IF(el2fa(nn1+n)/=0)
THEN
515 func(el2fa(nn1+n)) = gbuf%ISMS(i)
520 ELSEIF(ifunc == 4965)
THEN
521 IF (gbuf%G_OFF > 0)
THEN
524 IF(gbuf%OFF(i) > one)
THEN
525 func(el2fa(nn1+n)) = gbuf%OFF(i) - one
526 ELSEIF((gbuf%OFF(i) >= zero .AND. gbuf%OFF(i) <= one))
THEN
527 func(el2fa(nn1+n)) = gbuf%OFF(i)
529 func(el2fa(nn1+n)) = -one
534 ELSEIF(ifunc == 5172)
THEN
541 ebuf => elbuf_tab(ng)%BUFLY(1)%EOS(1,1,1)
542 nvareos = elbuf_tab(ng)%BUFLY(1)%NVAR_EOS
544 evar(i) = ebuf%VAR(i)
547 func(el2fa(nn1+nft+1:nn1+nft+nel)) = evar(1:nel)
550 ELSEIF(ifunc == 5173)
THEN
554 IF(pm(89,mt) > zero)
THEN
556 evar(i) = gbuf%RHO(i) / pm(89,mt) - one
559 func(el2fa(nn1+nft+1:nn1+nft+nel)) = evar(1:nel)
561 ELSEIF(ifunc >= 5173+1 .AND. ifunc <= 5173+21)
THEN
563 func(el2fa(nn1+nft+1:nn1+nft+nel)) = evar(1:nel)
569 IF(el2fa(nn1+n)/=0)
THEN
570 func(el2fa(nn1+n)) = zero
602 IF(
ALLOCATED(wa_l))
DEALLOCATE(wa_l)
603 IF(
ALLOCATED(wa))
DEALLOCATE(wa)