35 SUBROUTINE ini_inimap1d(INIMAP1D ,ELBUF_TAB ,IPART ,IPARG ,IPARTS ,
36 . IPARTQ ,XGRID ,VEL ,IXS ,IXQ ,
37 . IXTG ,PM ,IPM ,BUFMAT ,MULTI_FVM,
38 . PLD ,NPC ,IGRBRIC,IGRQUAD ,IGRSH3N ,
39 . NPTS ,MAT_PARAM ,SNPC ,STF)
50 USE multimat_param_mod ,
ONLY : m51_n0phas, m51_nvphas
51 USE multi_solve_eint_mod ,
ONLY : multi_solve_eint
55#include
"implicit_f.inc"
70 INTEGER,
INTENT(IN) :: SNPC, STF
71 TYPE(INIMAP1D_STRUCT),
TARGET,
DIMENSION(NINIMAP1D),
INTENT(INOUT) :: INIMAP1D
72 TYPE(ELBUF_STRUCT_),
DIMENSION(NGROUP),
INTENT(INOUT),
TARGET :: ELBUF_TAB
73 INTEGER,
INTENT(IN) :: IPART(LIPART1, *), NPC(*)
74 INTEGER,
INTENT(IN) :: IPARTS(*), IPARTQ(*),IPM(NPROPMI, *),IPARG(NPARG, NGROUP),
75 . ixs(nixs, numels), ixq(nixq, numelq), ixtg(nixtg, numeltg),npts
76 my_real,
INTENT(IN) :: xgrid(3, *), pm(npropm, nummat), bufmat(*)
77 my_real,
INTENT(IN),
TARGET :: pld(2, npts/2)
78 my_real,
INTENT(INOUT) :: vel(3, *)
79 TYPE(multi_fvm_struct),
INTENT(INOUT) :: MULTI_FVM
80 TYPE(matparam_struct_) ,
DIMENSION(NUMMAT),
INTENT(IN) :: MAT_PARAM
82 TYPE (GROUP_) ,
DIMENSION(NGRBRIC) :: IGRBRIC
83 TYPE (GROUP_) ,
DIMENSION(NGRQUAD) :: IGRQUAD
84 TYPE (GROUP_) ,
DIMENSION(NGRSH3N) :: IGRSH3N
88 my_real,
TARGET :: pld_inv(npts/2,2)
89 INTEGER :: JJ, KK, IAD, NELEM, , NFT, NEL, IFIRST, ILAST, IAD1, IAD2, IMID, FUNC,
90 . FUNC1, FUNC2, MATID, MLW
92 INTEGER :: II, IFUNC, NPT, FIRST, LAST, ICOOR, INODE, NODEID, IND, SHIFT,
93 . node1, node2, node3, node4, node5, node6, node7, node8,
95 my_real :: x0, y0, z0, radius, xc, yc, zc, value1, value2, nx, ny, nz,
VALUE,
96 . xnode, ynode, znode, rad1, rad2, x1, y1, z1, xp, yp, zp
97 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ELEM_LIST
98 INTEGER :: LOCAL_ELEM_LIST(MVSIZ)
99 my_real,
DIMENSION(:, :),
ALLOCATABLE :: pres, eint
101 TYPE(g_bufel_),
POINTER :: GBUF
102 INTEGER :: NBNODE, NODELIST(8), ITY, ISOLNOD,
103 . grbricid,grquadid,grsh3nid, nbmat, nbmat_target, imat, kphase, nuvar, iadbuf, npar, iform,
104 . m51_submat_id(4),tag_mat(nummat)
105 my_real,
POINTER,
DIMENSION(:) :: ptrx, ptry
107 TYPE pseudo_pointer_array
108 my_real,
POINTER,
DIMENSION(:) :: temp
110 TYPE (PSEUDO_POINTER_ARRAY) :: SUBMAT(21)
112 CHARACTER*2 :: Str1, Str2
113 my_real :: vfrac(mvsiz,21),densfrac
115 TYPE(buf_eos_),
POINTER :: EBUF
118 INTEGER :: NVARTMP_EOS
125 pld_inv(kk,1)=pld(1,kk)
126 pld_inv(kk,2)=pld(2,kk)
130 ALLOCATE(elem_list(numels))
131 elem_list(1:numels)=0
133 ALLOCATE(elem_list(numelq + numeltg))
134 elem_list(1:numelq+numeltg)=0
144 IF(.NOT.inimap1d(kk)%CORRECTLY_READ)cycle
145 nbmat = inimap1d(kk)%NBMAT
147 ALLOCATE(pres(mvsiz, nbmat), eint(mvsiz, nbmat))
148 IF (inimap1d(kk)%GRBRICID /= 0)
THEN
149 grbricid = inimap1d(kk)%GRBRICID
150 ELSEIF (inimap1d(kk)%GRQUADID /= 0)
THEN
151 grquadid = inimap1d(kk)%GRQUADID
152 ELSEIF (inimap1d(kk)%GRSH3NID /= 0)
THEN
153 grsh3nid = inimap1d(kk)%GRSH3NID
155 x0 = xgrid(1, inimap1d(kk)%NODEID1)
156 y0 = xgrid(2, inimap1d(kk)%NODEID1)
157 z0 = xgrid(3, inimap1d(kk)%NODEID1)
158 IF (inimap1d(kk)%NODEID2 > 0)
THEN
159 x1 = xgrid(1, inimap1d(kk)%NODEID2)
160 y1 = xgrid(2, inimap1d(kk)%NODEID2)
161 z1 = xgrid(3, inimap1d(kk)%NODEID2)
163 IF (grbricid > 0)
THEN
164 nelem = igrbric(grbricid)%NENTITY
166 elem_list(ii) = igrbric(grbricid)%ENTITY(ii)
168 ELSEIF (grquadid > 0)
THEN
169 nelem = igrquad(grquadid)%NENTITY
171 elem_list(ii) = igrquad(grquadid)%ENTITY(ii)
173 ELSEIF (grsh3nid > 0)
THEN
174 nelem = igrsh3n(grsh3nid)%NENTITY
176 elem_list(ii) = igrsh3n(grsh3nid)%ENTITY(ii)
187 CASE (3, 4, 6, 49, 51, 151)
194 matid = ixs(1, nft + 1)
195 ELSE IF (ity == 2)
THEN
196 matid = ixq(1, nft + 1)
197 ELSE IF (ity == 7)
THEN
198 matid = ixtg(1, nft + 1)
202 m51_submat_id(1:4) = 0
204 iform = ipm(62, matid
205 IF(iform>=2.AND.iform<=6)cycle
206 m51_submat_id(1:4) = ipm(51:54, matid)
207 jj = minloc(m51_submat_id,1)
209 IF(m51_submat_id(jj)==0)nbmat_target=
max(1,jj-1)
210 ELSEIF (mlw == 151)
THEN
211 nbmat_target = multi_fvm%NBMAT
216 nuvar = ipm(8, matid)
217 iadbuf = ipm(7, matid)
218 isolnod = iparg(28, ng)
219 gbuf => elbuf_tab(ng)%GBUF
223 DO WHILE(elem_list(ifirst + shift) < 1 + nft .AND. ifirst + shift <= nelem)
226 IF (shift > nelem)
THEN
229 ifirst = ifirst + shift
234 DO WHILE(elem_list(ilast + shift) <= nel + nft .AND. ilast + shift < nelem)
236 IF( shift >= nel)
EXIT
239 IF (ilast + shift < nelem)
THEN
241 ilast = ilast + shift
247 IF(ifirst>0 .AND. ifirst<=ilast )
THEN
249 CASE (3, 4, 6, 49, 51, 151)
256 iform = ipm(62, matid)
257 IF (iform /= 12 .AND. inimap1d(kk)%FORMULATION == 1)
THEN
258 CALL ancmsg(msgid = 1732, msgtype=msgerror, anmode=aninfo,i1 = ipm(1, matid), i2 = inimap1d(kk)%ID)
264 IF(tag_mat(matid)==0)
THEN
265 IF(nbmat /= nbmat_target)
THEN
266 WRITE(str1,
'(i2)')nbmat
267 WRITE'(i2)')nbmat_target
268 CALL ancmsg(msgid = 2048, msgtype=msgerror, anmode=aninfo,
270 . c2=
"NUMBER OF SUBMATERIAL(S) FROM TARGET MATERIAL LAW:"
271 . c3=
" IS DIFFERENT FROM SUBMATERIAL(S) NUMBER IN TARGET DOMAIN:"//str2
273 . i1 = ipm(1, matid),
274 . i2 = inimap1d(kk)%ID)
276 nbmat=
min(nbmat,nbmat_target)
280 DO ii = ifirst, ilast
281 elemid = elem_list(ii)
282 IF (elemid < 1 + nft .OR. elemid > nel + nft)
THEN
284 IF (ity == 1 .AND. isolnod == 8)
THEN
286 node1 = ixs(2, elemid)
287 node2 = ixs(3, elemid)
288 node3 = ixs(4, elemid)
289 node4 = ixs(5, elemid)
290 node5 = ixs(6, elemid)
291 node6 = ixs(7, elemid)
292 node7 = ixs(8, elemid)
293 node8 = ixs(9, elemid)
294 xc = one_over_8 * (xgrid(1, node1) + xgrid(1, node2) + xgrid(1, node3) + xgrid(1, node4)
295 . + xgrid(1, node5) + xgrid(1, node6) + xgrid(1, node7) + xgrid(1, node8))
296 yc = one_over_8 * (xgrid(2, node1) + xgrid(2, node2) + xgrid(2, node3) + xgrid(2, node4)
297 . + xgrid(2, node5) + xgrid(2, node6) + xgrid(2, node7) + xgrid(2, node8))
298 zc = one_over_8 * (xgrid(3, node1) + xgrid(3, node2) + xgrid(3, node3) + xgrid(3, node4)
299 . + xgrid(3, node5) + xgrid(3, node6) + xgrid(3, node7) + xgrid(3, node8))
309 ELSEIF (ity == 1 .AND. isolnod == 4)
THEN
311 node1 = ixs(2, elemid)
312 node2 = ixs(4, elemid)
313 node3 = ixs(7, elemid)
314 node4 = ixs(6, elemid)
315 xc = fourth * (xgrid(1, node1) + xgrid(1, node2) + xgrid(1, node3) + xgrid(1, node4))
316 yc = fourth * (xgrid(2, node1) + xgrid(2, node2) + xgrid(2, node3) + xgrid(2, node4))
317 zc = fourth * (xgrid(3, node1) + xgrid(3, node2) + xgrid(3, node3) + xgrid(3, node4))
323 ELSEIF (ity == 2)
THEN
325 node1 = ixq(2, elemid)
326 node2 = ixq(3, elemid)
327 node3 = ixq(4, elemid)
328 node4 = ixq(5, elemid)
329 xc = fourth * (xgrid(1, node1) + xgrid(1, node2) + xgrid(1, node3) + xgrid(1, node4))
330 yc = fourth * (xgrid(2, node1) + xgrid(2, node2) + xgrid(2, node3) + xgrid(2, node4))
331 zc = fourth * (xgrid(3, node1) + xgrid(3, node2) + xgrid(3, node3) + xgrid(3, node4))
337 ELSEIF (ity == 7)
THEN
339 node1 = ixtg(2, elemid)
340 node2 = ixtg(3, elemid)
341 node3 = ixtg(4, elemid)
342 xc = third * (xgrid(1, node1) + xgrid(1, node2) + xgrid(1, node3))
344 zc = third * (xgrid(3, node1) + xgrid(3, node2) + xgrid(3, node3))
350 IF (inimap1d(kk)%PROJ == 3)
THEN
352 radius = sqrt((xc - x0) * (xc - x0) + (yc - y0) * (yc - y0) + (zc - z0) * (zc - z0))
353 ELSEIF (inimap1d(kk)%PROJ == 1)
THEN
355 radius = (xc - x0) * inimap1d(kk)%NX +
356 . (yc - y0) * inimap1d(kk)%NY +
357 . (zc - z0) * inimap1d(kk)%NZ
360 tt = (xc - x0) * (x1 - x0) + (yc - y0) * (y1 - y0) + (zc - z0) * (z1 - z0)
361 tt = tt / ((x1 - x0) * (x1 - x0) +
362 . (y1 - y0) * (y1 - y0) +
363 . (z1 - z0) * (z1 - z0))
364 xp = x0 + tt * (x1 - x0)
365 yp = y0 + tt * (y1 - y0)
366 zp = z0 + tt * (z1 - z0)
367 radius = sqrt((xc - xp) * (xc - xp) + (yc - yp) * (yc - yp) + (zc - zp) * (zc - zp))
377 first = 1 + (npc(ifunc
378 ptrx => pld_inv(1:npts/2,1)
379 ptry => pld_inv(1:npts/2,2)
382 npt = inimap1d(kk)%NUM_CENTROIDS
384 ptrx => inimap1d(kk)%X(1:npt)
385 ptry => inimap1d(kk)%SUBMAT(imat)%VFRAC(1:npt)
388 DO WHILE (ptrx(first + shift) < radius )
396 kphase = m51_n0phas + (m51_submat_id(imat) - 1) * m51_nvphas
397 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (1 + kphase - 1)) = res
398 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (23 + kphase - 1)) = res
400 elbuf_tab(ng)%BUFLY(imat)%LBUF(1,1,1)%VOL(elemid - nft) = res * gbuf%VOL(elemid - nft)
402 ELSEIF (shift < npt)
THEN
405 value1 = ptry(ind - 1)
407 res = (value1 + (value2 - value1) / (rad2 - rad1) * (radius - rad1))
409 kphase = m51_n0phas + (m51_submat_id(imat) - 1) * m51_nvphas
410 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (1 + kphase - 1)) = res
411 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (23 + kphase - 1))
413 elbuf_tab(ng)%BUFLY(imat)%LBUF(1,1,1)%VOL(elemid - nft) = res * gbuf%VOL(elemid - nft)
416 res = ptry(first + npt - 1)
418 kphase = m51_n0phas + (m51_submat_id(imat) - 1) * m51_nvphas
419 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (1 + kphase - 1)) = res
420 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (23 + kphase - 1)) = res
422 elbuf_tab(ng)%BUFLY(imat)%LBUF(1,1,1)%VOL(elemid - nft) = res * gbuf%VOL(elemid - nft)
428 kphase = m51_n0phas + (m51_submat_id(imat) - 1) * m51_nvphas
429 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (1 + kphase - 1)) = res
430 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (23 + kphase - 1)) = res
432 elbuf_tab(ng)%BUFLY(imat)%LBUF(1,1,1)%VOL(elemid - nft) = res * gbuf%VOL(elemid - nft)
435 vfrac(elemid-nft,imat) = res
437 ifunc = inimap1d(kk)%FUNC_RHO(imat)
442 first = 1 + (npc(ifunc) - 1) / 2
443 ptrx => pld_inv(1:npts/2,1)
444 ptry => pld_inv(1:npts/2,2)
447 npt = inimap1d(kk)%NUM_CENTROIDS
449 ptrx => inimap1d(kk)%X(1:npt)
450 ptry => inimap1d(kk)%SUBMAT(imat)%RHO(1:npt)
453 DO WHILE (ptrx(first + shift) < radius )
455 IF( shift >= npt)
EXIT
459 res = ptry(first) * inimap1d(kk)%FAC_RHO(imat)
461 kphase = m51_n0phas + (m51_submat_id(imat) - 1) * m51_nvphas
462 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (9 + kphase - 1)) = res
463 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (12 + kphase - 1)) = res
464 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel *
466 elbuf_tab(ng)%BUFLY(imat)%LBUF(1,1,1)%RHO(elemid - nft) = res
468 ELSEIF (shift < npt)
THEN
471 value1 = ptry(ind - 1)
473 res = (value1 + (value2 - value1) / (rad2 - rad1) * (radius - rad1)) * inimap1d(kk)%FAC_RHO(imat)
475 kphase = m51_n0phas + (m51_submat_id(imat) - 1) * m51_nvphas
476 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (9 + kphase - 1)) = res
477 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (12 + kphase - 1)) = res
478 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (20 + kphase - 1)) = res
480 elbuf_tab(ng)%BUFLY(imat)%LBUF(1,1,1)%RHO(elemid - nft) = res
483 res = ptry(first + npt - 1) * inimap1d(kk)%FAC_RHO(imat)
485 kphase = m51_n0phas + (m51_submat_id(imat) - 1) * m51_nvphas
486 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (9 + kphase - 1)) = res
487 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (12 + kphase - 1)) = res
488 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (20 + kphase - 1)) = res
490 elbuf_tab(ng)%BUFLY(imat)%LBUF(1,1,1)%RHO(elemid - nft) = res
494 res = inimap1d(kk)%FAC_RHO(imat)
496 kphase = m51_n0phas + (m51_submat_id(imat) - 1) * m51_nvphas
497 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1
498 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (12 + kphase - 1)) = res
499 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (20 + kphase - 1)) = res
501 elbuf_tab(ng)%BUFLY(imat
505 IF (inimap1d(kk)%FORMULATION == 2)
THEN
508 ifunc = inimap1d(kk)%FUNC_ENER(imat)
510 npt = (npc(ifunc + 1) - npc(ifunc)) / 2
511 first = 1 + (npc(ifunc) - 1) / 2
513 DO WHILE (ptrx(first + shift) < radius)
515 IF( shift >= npt)
EXIT
519 res = ptry(first) * inimap1d(kk)%FAC_PRES_ENER(imat)
521 kphase = m51_n0phas + (m51_submat_id(imat) - 1) * m51_nvphas
522 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (8 + kphase - 1)) = res
523 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (21 + kphase - 1)) = res
525 elbuf_tab(ng)%BUFLY(imat)%LBUF(1,1,1)%EINT(elemid - nft) = res
527 ELSEIF (shift < npt)
THEN
530 value1 = ptry(ind - 1)
532 res = (value1 + (value2 - value1) / (rad2 - rad1) * (radius - rad1)) * inimap1d(kk)%FAC_PRES_ENER(imat)
534 kphase = m51_n0phas + (m51_submat_id(imat) - 1) * m51_nvphas
535 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (8 + kphase - 1)) = res
536 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (21 + kphase - 1)) = res
538 elbuf_tab(ng)%BUFLY(imat)%LBUF(1,1,1)%EINT(elemid - nft) = res
541 res = ptry(first + npt - 1) * inimap1d(kk)%FAC_PRES_ENER(imat)
544 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (8 + kphase - 1)) = res
545 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (21 + kphase - 1)) = res
547 elbuf_tab(ng)%BUFLY(imat)%LBUF(1,1,1)%EINT(elemid - nft) = res
551 res = inimap1d(kk)%FAC_PRES_ENER(imat)
553 kphase = m51_n0phas + (m51_submat_id(imat) - 1) * m51_nvphas
554 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (8 + kphase - 1)) = res
555 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (21 + kphase - 1)) = res
557 elbuf_tab(ng)%BUFLY(imat)%LBUF(1,1,1)%EINT(elemid - nft) = res
560 eint(elemid-nft,imat) = res
561 ELSE IF (inimap1d(kk)%FORMULATION == 1)
THEN
563 ifunc = inimap1d(kk)%FUNC_PRES(imat)
567 npt = (npc(ifunc + 1) - npc(ifunc)) / 2
568 first = 1 + (npc(ifunc) - 1) / 2
569 ptrx => pld_inv(1:npts/2,1)
575 ptrx => inimap1d(kk)%X(1:npt)
576 ptry => inimap1d(kk)%SUBMAT(imat)%PRES(1:npt)
579 DO WHILE (ptrx(first + shift) < radius)
581 IF( shift >= npt)
EXIT
585 pres(elemid - nft, imat) = ptry(first) * inimap1d(kk)%FAC_PRES_ENER(imat)
586 ELSEIF (shift < npt)
THEN
589 value1 = ptry(ind - 1)
591 pres(elemid - nft, imat) = (value1 + (value2 - value1) / (rad2 - rad1) * (radius - rad1)) *
592 . * inimap1d(kk)%FAC_PRES_ENER(imat)
594 value1 = ptry(first + npt - 1)
595 pres(elemid - nft, imat) = value1 * inimap1d(kk)%FAC_PRES_ENER(imat)
598 pres(elemid - nft, imat) = inimap1d(kk)%FAC_PRES_ENER(imat)
602 IF(multi_fvm%IS_USED)
THEN
603 elbuf_tab(ng)%BUFLY(imat)%LBUF(1,1,1)%SIG(nel*(1-1)+elemid-nft)=-pres(elemid - nft, imat)
604 elbuf_tab(ng)%BUFLY(imat)%LBUF(1,1,1)%SIG(nel*(2-1)+elemid-nft)=-pres(elemid - nft, imat)
605 elbuf_tab(ng)%BUFLY(imat)%LBUF(1,1,1)%SIG(nel*(3-1)+elemid-nft)=-pres(elemid - nft, imat)
606 elbuf_tab(ng)%GBUF%SIG(nel*(1-1)+elemid-nft)=-pres(elemid - nft, imat)
607 elbuf_tab(ng)%GBUF%SIG(nel*(2-1)+elemid-nft)=-pres(elemid - nft, imat)
608 elbuf_tab(ng)%GBUF%SIG(nel*(3-1)+elemid-nft)=-pres(elemid - nft, imat)
610 elbuf_tab(ng)%GBUF%SIG(nel*(1-1)+elemid-nft)=-pres(elemid - nft, 1)
611 elbuf_tab(ng)%GBUF%SIG(nel*(2-1)+elemid-nft)=-pres(elemid - nft, 1)
612 elbuf_tab(ng)%GBUF%SIG(nel*(3-1)+elemid-nft)=-pres(elemid - nft, 1)
614 kphase = m51_n0phas + (m51_submat_id(imat) - 1
617 !elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (4 + kphase - 1)) = -pres(elemid
618 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (18+ kphase - 1)) = pres(elemid - nft, 1)
627 IF(elbuf_tab(ng)%GBUF%G_TB > 0)elbuf_tab(ng)%GBUF%TB(elemid - nft) = 1e20
629 kphase = m51_n0phas - 1
630 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (kphase - 1)) = one
631 IF(elbuf_tab(ng)%GBUF%G_BFRAC > 0)elbuf_tab(ng)%GBUF%BFRAC(elemid
632 kphase = m51_n0phas + (4 - 1) * m51_nvphas
633 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(1 + nel * (15 + kphase - 1)) = 1e20
636 IF(elbuf_tab(ng)%BUFLY(imat)%L_BFRAC > 0)elbuf_tab(ng)%BUFLY(imat)%LBUF(1,1,1)%BFRAC(elemid - nft)=one
638 IF(elbuf_tab(ng)%GBUF%G_BFRAC > 0)elbuf_tab(ng)%GBUF%BFRAC(elemid - nft) = one
642 IF (.NOT. multi_fvm%IS_USED .AND.
alefvm_param%IEnabled == 0)
THEN
646 nodeid = ixs(nodelist(inode), elemid)
647 ELSEIF (ity == 2)
THEN
648 nodeid = ixq(nodelist(inode), elemid)
649 ELSEIF (ity == 7)
THEN
650 nodeid = ixtg(nodelist(inode), elemid)
652 IF (inimap1d(kk)%TAGNODE(nodeid) == 0)
THEN
654 xnode = xgrid(1, nodeid)
655 ynode = xgrid(2, nodeid)
657 IF (inimap1d(kk)%PROJ == 3)
THEN
659 radius = sqrt((xnode - x0) * (xnode - x0) +
660 . (ynode - y0) * (ynode - y0) +
662 ELSE IF (inimap1d(kk)%PROJ == 1)
THEN
664 radius = (xnode - x0) * inimap1d(kk)%NX +
665 . (ynode - y0) * inimap1d(kk)%NY +
666 . (znode - z0) * inimap1d(kk)%NZ
669 tt = (xnode - x0) * (x1 - x0) +
670 . (ynode - y0) * (y1 - y0) +
671 . (znode - z0) * (z1 - z0)
672 tt = tt / ((x1 - x0) * (x1 - x0) +
673 . (y1 - y0) * (y1 - y0) +
674 . (z1 - z0) * (z1 - z0))
675 xp = x0 + tt * (x1 - x0)
676 yp = y0 + tt * (y1 - y0)
677 zp = z0 + tt * (z1 - z0)
678 radius = sqrt((xnode - xp) * (xnode - xp) +
679 . (ynode - yp) * (ynode - yp) +
680 . (znode - zp) * (znode - zp))
682 IF (abs(radius) < em10
683 . .AND. inimap1d(kk)%PROJ /= 1)
THEN
684 vel(1:3, nodeid) = zero
686 IF (inimap1d(kk)%PROJ == 3)
THEN
688 nx = (xnode - x0) / radius
689 ny = (ynode - y0) / radius
690 nz = (znode - z0) / radius
691 ELSE IF (inimap1d(kk)%PROJ == 1)
THEN
698 nx = (xnode - xp) / radius
699 ny = (ynode - yp) / radius
700 nz = (znode - zp) / radius
702 ifunc = inimap1d(kk)%FUNC_VEL
706 npt = (npc(ifunc + 1) - npc(ifunc)) / 2
707 first = 1 + (npc(ifunc) - 1) / 2
708 ptrx => pld_inv(1:npts/2,1)
709 ptry => pld_inv(1:npts
712 npt = inimap1d(kk)%NUM_NODE_VEL
714 ptrx => inimap1d(kk)%X_VEL(1:npt)
715 ptry => inimap1d(kk)%VEL(1:npt)
718 DO WHILE (ptrx(first + shift) < radius )
725 ELSEIF (shift < npt)
THEN
728 value1 = ptry(ind - 1)
730 VALUE = value1 + (value2 - value1) / (rad2 - rad1) * (radius - rad1)
732 value1 = ptry(first + npt - 1)
735 VALUE =
VALUE * inimap1d(kk)%FAC_VEL
739 vel(1, nodeid) =
VALUE * nx
740 vel(2, nodeid) =
VALUE * ny
743 inimap1d(kk)%TAGNODE(nodeid) = 1
749 ifunc = inimap1d(kk)%FUNC_VEL
753 npt = (npc(ifunc + 1) - npc(ifunc)) / 2
754 first = 1 + (npc(ifunc) - 1) / 2
755 ptrx => pld_inv(1:npts/2,1) !npts : 2*nb of all
function points npt:
for current function
756 ptry => pld_inv(1:npts/2,2)
761 ptrx => inimap1d(kk)%X_VEL(1:npt)
762 ptry => inimap1d(kk)%VEL(1:npt)
765 DO WHILE (ptrx(first + shift) < radius )
767 IF( shift >= npt)
EXIT
773 ELSEIF (shift < npt)
THEN
776 value1 = ptry(ind - 1)
778 VALUE = value1 + (value2 - value1) / (rad2 - rad1
780 value1 = ptry(first + npt - 1)
786 IF (inimap1d(kk)%PROJ == 3)
THEN
788 IF (abs(radius) > em10)
THEN
789 nx = (xc - x0) / radius
790 ny = (yc - y0) / radius
791 nz = (zc - z0) / radius
793 ELSE IF (inimap1d(kk)%PROJ == 1)
THEN
800 IF (abs(radius) > em10)
THEN
801 nx = (xc - xp) / radius
802 ny = (yc - yp) / radius
803 nz = (zc - zp) / radius
806 VALUE =
VALUE * inimap1d(kk)%FAC_VEL
810 IF (multi_fvm%IS_USED)
THEN
811 multi_fvm%VEL(1, elemid) =
VALUE * nx
812 multi_fvm%VEL(2, elemid) =
VALUE * ny
813 multi_fvm%VEL(3, elemid) =
VALUE * nz
815 gbuf%MOM(elemid - nft + 0 * nel) =
VALUE * nx * gbuf%RHO(elemid - nft)
816 gbuf%MOM(elemid - nft + 1 * nel) =
VALUE * ny * gbuf%RHO(elemid - nft)
817 gbuf%MOM(elemid - nft + 2 * nel) =
VALUE * nz * gbuf%RHO(elemid - nft)
822 IF (inimap1d(kk)%FORMULATION == 2)
THEN
823 DO ii = ifirst, ilast
824 elemid = elem_list(ii)
825 gbuf%EINT(elemid - nft) = gbuf%EINT(elemid - nft) * gbuf%RHO(elemid - nft)
826 gbuf%TEMP(elemid - nft) = 300*(gbuf%RHO(elemid - nft) )**0.4
829 IF (mlw /= 51 .AND. mlw /= 151)
THEN
830 submat(1)%TEMP(1:nel) => elbuf_tab(ng)%GBUF%TEMP(1:nel)
831 ELSE IF (mlw == 151)
THEN
833 submat(imat)%TEMP(1:nel) => elbuf_tab(ng)%BUFLY(imat)%LBUF(1,1,1)%TEMP(1:nel)
837 kphase = m51_n0phas + (m51_submat_id(imat) - 1) * m51_nvphas
838 submat(imat)%TEMP(1:nel) => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(1+nel*(16+kphase-1) : nel*(16+kphase ))
842 ELSE IF (inimap1d(kk)%FORMULATION == 1)
THEN
844 IF (mlw /= 151 .AND. mlw /= 51)
THEN
846 matid = ixs(1, 1 + nft)
847 ELSEIF (ity == 2)
THEN
848 matid = ixq(1, 1 + nft)
849 ELSEIF (ity == 7)
THEN
850 matid = ixtg(1, 1 + nft)
852 nvartmp_eos = elbuf_tab(ng)%BUFLY(1)%NVARTMP_EOS
853 submat(1)%TEMP(1:nel) => elbuf_tab(ng)%GBUF%TEMP(1:nel)
854 ebuf => elbuf_tab(ng)%BUFLY(1)%EOS(1,1,1)
855 nvareos = elbuf_tab(ng)%BUFLY(1)%NVAR_EOS
856 CALL multi_solve_eint(matid, nft, nel, pres(:, 1), gbuf%EINT, gbuf%RHO, ifirst, ilast, elem_list,
857 . ipm, pm, bufmat, mlw, submat(1)%TEMP,snpc,stf,npc,pld, ebuf%VAR, nvareos,
858 . mat_param(matid),nvartmp_eos,ebuf%VARTMP,nummat,npropmi,npropm)
859 ELSE IF (mlw == 151)
THEN
862 gmid = ixs(1, 1 + nft)
863 matid = mat_param(gmid)%MULTIMAT%MID(imat)
864 ELSEIF (ity == 2)
THEN
865 gmid = ixq(1, 1 + nft)
866 matid = mat_param(gmid)%MULTIMAT%MID(imat)
867 ELSEIF (ity == 7)
THEN
868 gmid = ixtg(1, 1 + nft)
869 matid = mat_param(gmid)%MULTIMAT%MID(imat)
871 nvartmp_eos = elbuf_tab(ng)%BUFLY(imat)%NVARTMP_EOS
872 submat(imat)%TEMP(1:nel) => elbuf_tab(ng)%BUFLY(imat)%LBUF(1,1,1)%TEMP(1:nel)
873 ebuf => elbuf_tab(ng)%BUFLY(imat)%EOS(1,1,1)
874 nvareos = elbuf_tab(ng)%BUFLY(imat)%NVAR_EOS
875 CALL multi_solve_eint(matid, nft, nel, pres(:, imat), elbuf_tab(ng)%BUFLY(imat)%LBUF(1,1,1)%EINT,
876 . elbuf_tab(ng)%BUFLY(imat)%LBUF(1,1,1)%RHO, ifirst, ilast, elem_list,
877 . ipm, pm, bufmat, mlw,submat(imat)%TEMP,snpc,stf,npc,pld,ebuf%VAR,nvareos,
878 . mat_param(matid),nvartmp_eos,ebuf%VARTMP,nummat,npropmi,npropm)
883 gmid = ixs(1, 1 + nft)
884 matid = mat_param(gmid)%MULTIMAT%MID(imat)
885 ELSEIF (ity == 2)
THEN
886 gmid = ixq(1, 1 + nft)
887 matid = mat_param(gmid)%MULTIMAT%MID(imat)
888 ELSEIF (ity == 7)
THEN
889 gmid = ixtg(1, 1 + nft)
890 matid = mat_param(gmid)%MULTIMAT%MID(imat)
892 nvartmp_eos = elbuf_tab
893 kphase = m51_n0phas + (m51_submat_id(imat) - 1) * m51_nvphas
894 submat(imat)%TEMP(1:nel) => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(1+nel*(16+kphase-1) : nel*(16+kphase ))
895 ebuf => elbuf_tab(ng)%BUFLY(1)%EOS(1,1,1)
896 nvareos = elbuf_tab(ng)%BUFLY(1)%NVAR_EOS
897 CALL multi_solve_eint(matid, nft, nel, pres(:, imat), eint(:, imat),
898 . elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(1 + nel * (9 + kphase - 1):nel + nel * (9 + kphase - 1)),
899 . ifirst, ilast, elem_list,
900 . ipm, pm, bufmat, mlw, submat(imat)%TEMP,snpc,stf,npc,pld,ebuf%VAR,nvareos,
901 . mat_param(matid),nvartmp_eos,ebuf%VARTMP,nummat,npropmi,npropm)
902 DO ii = ifirst, ilast
903 elemid = elem_list(ii)
904 res = eint(elemid - nft, imat)
905 kphase = m51_n0phas + (m51_submat_id(imat) - 1) * m51_nvphas
906 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (8 + kphase - 1)) = res
907 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(elemid - nft + nel * (21 + kphase - 1)) = res
915 elbuf_tab(ng)%GBUF%TEMP(ii) = zero
917 densfrac = elbuf_tab(ng)%BUFLY(imat)%LBUF(1,1,1)%RHO(ii) / elbuf_tab(ng)%GBUF%RHO(ii)
918 elbuf_tab(ng)%GBUF%TEMP(ii) = elbuf_tab(ng)%GBUF%TEMP(ii) + vfrac(ii,imat)*densfrac * submat(imat)%TEMP(ii)
924 elbuf_tab(ng)%GBUF%TEMP(ii) = zero
926 kphase = m51_n0phas + (m51_submat_id(imat) - 1) * m51_nvphas
927 densfrac = elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(ii + nel * (12 + kphase - 1)) / elbuf_tab(ng)%GBUF%RHO(ii)
928 elbuf_tab(ng)%GBUF%TEMP(ii) = elbuf_tab(ng)%GBUF%TEMP(ii) + vfrac(ii,imat)*densfrac * submat(imat)%TEMP(ii)
930 elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(1:nel)= elbuf_tab(ng)%GBUF%TEMP(1:nel)
936 DEALLOCATE(pres, eint)
941 DEALLOCATE(elem_list)
subroutine initia(iparg, elbuf, ms, in, v, x, ixs, ixq, ixc, ixt, ixp, ixr, detonators, geo, pm, rby, npby, lpby, npc, npts, pld, veul, ale_connectivity, skew, fill, ipart, itab, sensors, skvol, ixtg, thk, nloc_dmg, group_param_tab, glob_therm, igrnod, igrsurf, bufsf, vr, bufmat, xlas, las, dtelem, mss, msq, msc, mst, msp, msr, mstg, ptg, inc, nod2eltg, knod2eltg, inp, inr, intg, index, itri, kxx, ixx, xelemwa, iwa, nod2elq, knod2elq, nod2els, knod2els, kxsp, ixsp, nod2sp, ispcond, icode, iskew, iskn, ispsym, xframe, isptag, spbuf, mssx, nsigi, npbyl, lpbyl, rbyl, msnf, mssf, nsigsh, igeo, ipm, nsigs, nsigsph, vns, vnsx, stc, stt, stp, str, sttg, stur, bns, bnsx, volnod, bvolnod, etnod, nshnod, stifint, fxbdep, fxbvit, fxbacc, fxbipm, fxbrpm, fxbelm, fxbsig, fxbmod, ins, ptshel, ptsh3n, ptsol, ptquad, wma, ptsph, fxbnod, mbufel, mdepl, fxani, numel, nsigrs, sh4tree, sh3tree, mcp, temp, imerge2, iadmerge2, slnrbm, nslnrbm, rmstifn, rmstifr, ms_layer, zi_layer, itag, itagel, mcpc, mcptg, xrefc, xreftg, xrefs, mssa, msrt, irbe2, lrbe2, inivol, kvol, nbsubmat, ixs10, ixs16, ixs20, totaddmas, ipmas, stifn, msz2, itagn, sitage, itage, ixr_kj, elbuf_tab, nom_opt, ptr_nopt_rbe2, ptr_nopt_adm, ptr_nopt_fun, sol2sph, irst, sh3trim, xfem_tab, kxig3d, ixig3d, msig3d, knot, nctrlmax, wige, stack, rnoise, drape, sh4ang, sh3ang, geo_stack, igeo_stack, stifintr, strc, strp, strr, strtg, perturb, itagnd, nativ_sms, iloadp, facload, ptspri, nsigbeam, ptbeam, nsigtruss, pttruss, multi_fvm, sigi, sigsh, sigsp, sigsph, sigrs, sigbeam, sigtruss, strsglob, straglob, orthoglob, isigsh, iyldini, ksigsh3, fail_ini, iusolyld, iuser, iddlevel, inimap1d, inimap2d, func2d, fvm_inivel, tagprt_sms, igrbric, igrquad, igrsh4n, igrsh3n, igrpart, totmas, knotlocpc, knotlocel, vnige, bnige, fxbglm, fxbcpm, fxbcps, fxblm, fxbfls, fxbdls, fxb_matrix, fxb_matrix_add, fxb_last_adress, ptr_nopt_fxb, r_skew, knod2el1d, nod2el1d, ebcs_tab, rby_iniaxis, alea, knod2elc, nod2elc, dr, slrbody, drapeg, ipari, intbuf_tab, interfaces, mat_param, npreload_a, preload_a, fail_fractal, fail_brokmann, defaults, ndamp_freq_range, dampr, ibeam_vector, rbeam_vector, ikine)