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
52 use element_mod ,
only : nixs,nixq,nixtg
56#include "implicit_f.inc"
71 INTEGER,
INTENT(IN) :: SNPC, STF
72 TYPE(INIMAP1D_STRUCT),
TARGET,
DIMENSION(NINIMAP1D),
INTENT(INOUT) :: INIMAP1D
73 TYPE(ELBUF_STRUCT_),
DIMENSION(NGROUP),
INTENT(INOUT),
TARGET :: ELBUF_TAB
74 INTEGER,
INTENT(IN) :: IPART(LIPART1, *), NPC(*)
75 INTEGER,
INTENT(IN) :: IPARTS(*), IPARTQ(*),IPM(NPROPMI, *),IPARG(NPARG, NGROUP),
76 . ixs(nixs, numels), ixq(nixq, numelq), ixtg(nixtg, numeltg),npts
77 my_real,
INTENT(IN) :: xgrid(3, *), pm(npropm, nummat), bufmat(*)
78 my_real,
INTENT(IN),
TARGET :: pld(2, npts/2)
79 my_real,
INTENT(INOUT) :: vel(3, *)
80 TYPE(multi_fvm_struct),
INTENT(INOUT) :: MULTI_FVM
81 TYPE(matparam_struct_) ,
DIMENSION(NUMMAT),
INTENT(IN) :: MAT_PARAM
83 TYPE (GROUP_) ,
DIMENSION(NGRBRIC) :: IGRBRIC
84 TYPE (GROUP_) ,
DIMENSION(NGRQUAD) :: IGRQUAD
85 TYPE (GROUP_) ,
DIMENSION(NGRSH3N) :: IGRSH3N
89 my_real,
TARGET :: pld_inv(npts/2,2)
90 INTEGER :: JJ, KK, IAD, NELEM, NG, NFT, NEL, IFIRST, ILAST, IAD1, IAD2, IMID, FUNC,
91 . FUNC1, FUNC2, MATID, MLW
93 INTEGER :: II, IFUNC, NPT, FIRST, LAST, ICOOR, INODE, NODEID, IND, SHIFT,
94 . node1, node2, node3, node4, node5, node6, node7, node8,
96 my_real :: x0, y0, z0, radius, xc, yc, zc, value1, value2, nx, ny, nz,
VALUE,
97 . xnode, ynode, znode, rad1, rad2, x1, y1, z1, xp, yp, zp
98 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ELEM_LIST
99 INTEGER :: LOCAL_ELEM_LIST(MVSIZ)
100 my_real,
DIMENSION(:, :),
ALLOCATABLE :: pres, eint
102 TYPE(g_bufel_),
POINTER :: GBUF
103 INTEGER :: NBNODE, NODELIST(8), ITY, ISOLNOD,
104 . grbricid,grquadid,grsh3nid, nbmat, nbmat_target, imat, kphase, nuvar, iadbuf, npar, iform,
105 . m51_submat_id(4),tag_mat(nummat)
106 my_real,
POINTER,
DIMENSION(:) :: ptrx, ptry
108 TYPE pseudo_pointer_array
109 my_real,
POINTER,
DIMENSION(:) :: temp
111 TYPE (PSEUDO_POINTER_ARRAY) :: SUBMAT(21)
113 CHARACTER*2 :: Str1, Str2
114 my_real :: vfrac(mvsiz,21),densfrac
116 TYPE(buf_eos_),
POINTER :: EBUF
119 INTEGER :: NVARTMP_EOS
126 pld_inv(kk,1)=pld(1,kk)
127 pld_inv(kk,2)=pld(2,kk)
131 ALLOCATE(elem_list(numels))
132 elem_list(1:numels)=0
134 ALLOCATE(elem_list(numelq + numeltg))
135 elem_list(1:numelq+numeltg)=0
145 IF(.NOT.inimap1d(kk)%CORRECTLY_READ)cycle
146 nbmat = inimap1d(kk)%NBMAT
148 ALLOCATE(pres(mvsiz, nbmat), eint(mvsiz, nbmat))
151 IF (inimap1d(kk)%GRBRICID /= 0)
THEN
152 grbricid = inimap1d(kk)%GRBRICID
153 ELSEIF (inimap1d(kk)%GRQUADID /= 0)
THEN
154 grquadid = inimap1d(kk)%GRQUADID
155 ELSEIF (inimap1d(kk)%GRSH3NID /= 0)
THEN
156 grsh3nid = inimap1d(kk)%GRSH3NID
158 x0 = xgrid(1, inimap1d(kk)%NODEID1)
159 y0 = xgrid(2, inimap1d(kk)%NODEID1)
160 z0 = xgrid(3, inimap1d(kk)%NODEID1)
161 IF (inimap1d(kk)%NODEID2 > 0)
THEN
162 x1 = xgrid(1, inimap1d(kk)%NODEID2)
163 y1 = xgrid(2, inimap1d(kk)%NODEID2)
164 z1 = xgrid(3, inimap1d(kk)%NODEID2)
166 IF (grbricid > 0)
THEN
167 nelem = igrbric(grbricid)%NENTITY
169 elem_list(ii) = igrbric(grbricid)%ENTITY(ii)
171 ELSEIF (grquadid > 0)
THEN
172 nelem = igrquad(grquadid)%NENTITY
174 elem_list(ii) = igrquad(grquadid)%ENTITY(ii)
176 ELSEIF (grsh3nid > 0)
THEN
177 nelem = igrsh3n(grsh3nid)%NENTITY
179 elem_list(ii) = igrsh3n(grsh3nid)%ENTITY(ii)
190 CASE (3, 4, 6, 49, 51, 151)
197 matid = ixs(1, nft + 1)
198 ELSE IF (ity == 2)
THEN
199 matid = ixq(1, nft + 1)
200 ELSE IF (ity == 7)
THEN
201 matid = ixtg(1, nft + 1)
203 cycle ! not compatible elem
type (beam, truss, spring, shell ...)
205 m51_submat_id(1:4) = 0
207 iform = ipm(62, matid)
208 IF(iform>=2.AND.iform<=6)cycle
209 m51_submat_id(1:4) = ipm(51:54, matid)
210 jj = minloc(m51_submat_id,1)
212 IF(m51_submat_id(jj)==0)nbmat_target=
max(1,jj-1)
213 ELSEIF (mlw == 151)
THEN
214 nbmat_target = multi_fvm%NBMAT
219 nuvar = ipm(8, matid)
220 iadbuf = ipm(7, matid)
221 isolnod = iparg(28, ng)
222 gbuf => elbuf_tab(ng)%GBUF
226 DO WHILE(elem_list(ifirst + shift) < 1 + nft .AND. ifirst + shift <= nelem)
229 IF (shift > nelem)
THEN
232 ifirst = ifirst + shift
237 DO WHILE(elem_list(ilast + shift) <= nel + nft .AND. ilast + shift < nelem)
239 IF( shift >= nel)
EXIT
242 IF (ilast + shift < nelem)
THEN
244 ilast = ilast + shift
250 IF(ifirst>0 .AND. ifirst<=ilast )
THEN
252 CASE (3, 4, 6, 49, 51, 151)
259 iform = ipm(62, matid)
260 IF (iform /= 12 .AND. inimap1d(kk)%FORMULATION == 1)
THEN
261 CALL ancmsg(msgid = 1732, msgtype=msgerror, anmode=aninfo,i1 = ipm(1, matid), i2 = inimap1d(kk)%ID)
267 IF(tag_mat(matid)==0)
THEN
268 IF(nbmat /= nbmat_target)
THEN
269 WRITE(str1,
'(i2)')nbmat
270 WRITE(str2,'(i2)
')NBMAT_TARGET
271 CALL ANCMSG(MSGID = 2048, MSGTYPE=MSGERROR, ANMODE=ANINFO,
273 . C2="NUMBER OF SUBMATERIAL(S) FROM TARGET MATERIAL LAW:"//Str1,
274 . C3=" IS DIFFERENT FROM SUBMATERIAL(S) NUMBER IN TARGET DOMAIN:"//Str2,
276 . I1 = IPM(1, MATID),
277 . I2 = INIMAP1D(KK)%ID)
278 TAG_MAT(MATID) = 1 !display this error material once per material law. Not for each cell using this material law.
279 NBMAT=MIN(NBMAT,NBMAT_TARGET) !in order to finish starter without memory corruption
283 DO II = IFIRST, ILAST
284 ELEMID = ELEM_LIST(II)
285.OR.
IF (ELEMID < 1 + NFT ELEMID > NEL + NFT) THEN
287.AND.
IF (ITY == 1 ISOLNOD == 8) THEN
289 NODE1 = IXS(2, ELEMID)
290 NODE2 = IXS(3, ELEMID)
291 NODE3 = IXS(4, ELEMID)
292 NODE4 = IXS(5, ELEMID)
293 NODE5 = IXS(6, ELEMID)
294 NODE6 = IXS(7, ELEMID)
295 NODE7 = IXS(8, ELEMID)
296 NODE8 = IXS(9, ELEMID)
297 XC = ONE_OVER_8 * (XGRID(1, NODE1) + XGRID(1, NODE2) + XGRID(1, NODE3) + XGRID(1, NODE4)
298 . + XGRID(1, NODE5) + XGRID(1, NODE6) + XGRID(1, NODE7) + XGRID(1, NODE8))
299 YC = ONE_OVER_8 * (XGRID(2, NODE1) + XGRID(2, NODE2) + XGRID(2, NODE3) + XGRID(2, NODE4)
300 . + XGRID(2, NODE5) + XGRID(2, NODE6) + XGRID(2, NODE7) + XGRID(2, NODE8))
301 ZC = ONE_OVER_8 * (XGRID(3, NODE1) + XGRID(3, NODE2) + XGRID(3, NODE3) + XGRID(3, NODE4)
302 . + XGRID(3, NODE5) + XGRID(3, NODE6) + XGRID(3, NODE7) + XGRID(3, NODE8))
312.AND.
ELSEIF (ITY == 1 ISOLNOD == 4) THEN
314 NODE1 = IXS(2, ELEMID)
315 NODE2 = IXS(4, ELEMID)
316 NODE3 = IXS(7, ELEMID)
317 NODE4 = IXS(6, ELEMID)
318 XC = FOURTH * (XGRID(1, NODE1) + XGRID(1, NODE2) + XGRID(1, NODE3) + XGRID(1, NODE4))
319 YC = FOURTH * (XGRID(2, NODE1) + XGRID(2, NODE2) + XGRID(2, NODE3) + XGRID(2, NODE4))
320 ZC = FOURTH * (XGRID(3, NODE1) + XGRID(3, NODE2) + XGRID(3, NODE3) + XGRID(3, NODE4))
326 ELSEIF (ITY == 2) THEN
328 NODE1 = IXQ(2, ELEMID)
329 NODE2 = IXQ(3, ELEMID)
330 NODE3 = IXQ(4, ELEMID)
331 NODE4 = IXQ(5, ELEMID)
332 XC = FOURTH * (XGRID(1, NODE1) + XGRID(1, NODE2) + XGRID(1, NODE3) + XGRID(1, NODE4))
333 YC = FOURTH * (XGRID(2, NODE1) + XGRID(2, NODE2) + XGRID(2, NODE3) + XGRID(2, NODE4))
334 ZC = FOURTH * (XGRID(3, NODE1) + XGRID(3, NODE2) + XGRID(3, NODE3) + XGRID(3, NODE4))
340 ELSEIF (ITY == 7) THEN
342 NODE1 = IXTG(2, ELEMID)
343 NODE2 = IXTG(3, ELEMID)
344 NODE3 = IXTG(4, ELEMID)
345 XC = THIRD * (XGRID(1, NODE1) + XGRID(1, NODE2) + XGRID(1, NODE3))
346 YC = THIRD * (XGRID(2, NODE1) + XGRID(2, NODE2) + XGRID(2, NODE3))
347 ZC = THIRD * (XGRID(3, NODE1) + XGRID(3, NODE2) + XGRID(3, NODE3))
353 IF (INIMAP1D(KK)%PROJ == 3) THEN
355 RADIUS = SQRT((XC - X0) * (XC - X0) + (YC - Y0) * (YC - Y0) + (ZC - Z0) * (ZC - Z0))
356 ELSEIF (INIMAP1D(KK)%PROJ == 1) THEN
358 RADIUS = (XC - X0) * INIMAP1D(KK)%NX +
359 . (YC - Y0) * INIMAP1D(KK)%NY +
360 . (ZC - Z0) * INIMAP1D(KK)%NZ
363 TT = (XC - X0) * (X1 - X0) + (YC - Y0) * (Y1 - Y0) + (ZC - Z0) * (Z1 - Z0)
364 TT = TT / ((X1 - X0) * (X1 - X0) +
365 . (Y1 - Y0) * (Y1 - Y0) +
366 . (Z1 - Z0) * (Z1 - Z0))
367 XP = X0 + TT * (X1 - X0)
368 YP = Y0 + TT * (Y1 - Y0)
369 ZP = Z0 + TT * (Z1 - Z0)
370 RADIUS = SQRT((XC - XP) * (XC - XP) + (YC - YP) * (YC - YP) + (ZC - ZP) * (ZC - ZP))
375 IFUNC = INIMAP1D(KK)%FUNC_ALPHA(IMAT)
378 !--function_IDIDENTIFIFIE
379 NPT = (NPC(IFUNC + 1) - NPC(IFUNC)) / 2
380 FIRST = 1 + (NPC(IFUNC) - 1) / 2
381 PTRx => PLD_INV(1:NPTS/2,1) !NPTS : 2*nb of all function points NPT:for current function
382 PTRy => PLD_INV(1:NPTS/2,2)
385 NPT = INIMAP1D(KK)%NUM_CENTROIDS
387 PTRx => INIMAP1D(KK)%X(1:NPT)
388 PTRy => INIMAP1D(KK)%SUBMAT(IMAT)%VFRAC(1:NPT)
391 DO WHILE (PTRx(FIRST + SHIFT) < RADIUS )
399 KPHASE = M51_N0PHAS + (M51_SUBMAT_ID(IMAT) - 1) * M51_NVPHAS
400 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (1 + KPHASE - 1)) = RES
401 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (23 + KPHASE - 1)) = RES
403 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%VOL(ELEMID - NFT) = RES * GBUF%VOL(ELEMID - NFT)
405 ELSEIF (SHIFT < NPT) THEN
408 VALUE1 = PTRy(IND - 1)
410 RES = (VALUE1 + (VALUE2 - VALUE1) / (RAD2 - RAD1) * (RADIUS - RAD1))
412 KPHASE = M51_N0PHAS + (M51_SUBMAT_ID(IMAT) - 1) * M51_NVPHAS
413 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (1 + KPHASE - 1)) = RES
414 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (23 + KPHASE - 1)) = RES
416 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%VOL(ELEMID - NFT) = RES * GBUF%VOL(ELEMID - NFT)
419 RES = PTRy(FIRST + NPT - 1)
421 KPHASE = M51_N0PHAS + (M51_SUBMAT_ID(IMAT) - 1) * M51_NVPHAS
422 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (1 + KPHASE - 1)) = RES
423 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (23 + KPHASE - 1)) = RES
425 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%VOL(ELEMID - NFT) = RES * GBUF%VOL(ELEMID - NFT)
431 KPHASE = M51_N0PHAS + (M51_SUBMAT_ID(IMAT) - 1) * M51_NVPHAS
432 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (1 + KPHASE - 1)) = RES
433 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (23 + KPHASE - 1)) = RES
435 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%VOL(ELEMID - NFT) = RES * GBUF%VOL(ELEMID - NFT)
438 VFRAC(ELEMID-NFT,IMAT) = RES
440 IFUNC = INIMAP1D(KK)%FUNC_RHO(IMAT)
443 !--function_IDIDENTIFIFIE
444 NPT = (NPC(IFUNC + 1) - NPC(IFUNC)) / 2
445 FIRST = 1 + (NPC(IFUNC) - 1) / 2
446 PTRx => PLD_INV(1:NPTS/2,1) !NPTS : 2*nb of all function points NPT:for current function
447 PTRy => PLD_INV(1:NPTS/2,2)
450 NPT = INIMAP1D(KK)%NUM_CENTROIDS
452 PTRx => INIMAP1D(KK)%X(1:NPT)
453 PTRy => INIMAP1D(KK)%SUBMAT(IMAT)%RHO(1:NPT)
456 DO WHILE (PTRx(FIRST + SHIFT) < RADIUS )
458 IF( SHIFT >= NPT)EXIT
462 RES = PTRy(FIRST) * INIMAP1D(KK)%FAC_RHO(IMAT)
464 KPHASE = M51_N0PHAS + (M51_SUBMAT_ID(IMAT) - 1) * M51_NVPHAS
465 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (9 + KPHASE - 1)) = RES
466 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (12 + KPHASE - 1)) = RES
467 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (20 + KPHASE - 1)) = RES
469 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%RHO(ELEMID - NFT) = RES
471 ELSEIF (SHIFT < NPT) THEN
474 VALUE1 = PTRy(IND - 1)
476 RES = (VALUE1 + (VALUE2 - VALUE1) / (RAD2 - RAD1) * (RADIUS - RAD1)) * INIMAP1D(KK)%FAC_RHO(IMAT)
478 KPHASE = M51_N0PHAS + (M51_SUBMAT_ID(IMAT) - 1) * M51_NVPHAS
479 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (9 + KPHASE - 1)) = RES
480 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (12 + KPHASE - 1)) = RES
481 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (20 + KPHASE - 1)) = RES
483 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%RHO(ELEMID - NFT) = RES
486 RES = PTRy(FIRST + NPT - 1) * INIMAP1D(KK)%FAC_RHO(IMAT)
488 KPHASE = M51_N0PHAS + (M51_SUBMAT_ID(IMAT) - 1) * M51_NVPHAS
489 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (9 + KPHASE - 1)) = RES
490 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (12 + KPHASE - 1)) = RES
491 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (20 + KPHASE - 1)) = RES
493 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%RHO(ELEMID - NFT) = RES
497 RES = INIMAP1D(KK)%FAC_RHO(IMAT)
499 KPHASE = M51_N0PHAS + (M51_SUBMAT_ID(IMAT) - 1) * M51_NVPHAS
500 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (9 + KPHASE - 1)) = RES
501 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (12 + KPHASE - 1)) = RES
502 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (20 + KPHASE - 1)) = RES
504 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%RHO(ELEMID - NFT) = RES
508 IF (INIMAP1D(KK)%FORMULATION == 2) THEN
510 !not managed when reading from file (FORMULATION=1)
511 IFUNC = INIMAP1D(KK)%FUNC_ENER(IMAT)
513 NPT = (NPC(IFUNC + 1) - NPC(IFUNC)) / 2
514 FIRST = 1 + (NPC(IFUNC) - 1) / 2
516 DO WHILE (PTRx(FIRST + SHIFT) < RADIUS)
518 IF( SHIFT >= NPT)EXIT
522 RES = PTRy(FIRST) * INIMAP1D(KK)%FAC_PRES_ENER(IMAT)
524 KPHASE = M51_N0PHAS + (M51_SUBMAT_ID(IMAT) - 1) * M51_NVPHAS
525 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (8 + KPHASE - 1)) = RES
526 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (21 + KPHASE - 1)) = RES
528 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%EINT(ELEMID - NFT) = RES
530 ELSEIF (SHIFT < NPT) THEN
533 VALUE1 = PTRy(IND - 1)
535 RES = (VALUE1 + (VALUE2 - VALUE1) / (RAD2 - RAD1) * (RADIUS - RAD1)) * INIMAP1D(KK)%FAC_PRES_ENER(IMAT)
537 KPHASE = M51_N0PHAS + (M51_SUBMAT_ID(IMAT) - 1) * M51_NVPHAS
538 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (8 + KPHASE - 1)) = RES
539 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (21 + KPHASE - 1)) = RES
541 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%EINT(ELEMID - NFT) = RES
544 RES = PTRy(FIRST + NPT - 1) * INIMAP1D(KK)%FAC_PRES_ENER(IMAT)
546 KPHASE = M51_N0PHAS + (M51_SUBMAT_ID(IMAT) - 1) * M51_NVPHAS
547 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (8 + KPHASE - 1)) = RES
548 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (21 + KPHASE - 1)) = RES
550 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%EINT(ELEMID - NFT) = RES
554 RES = INIMAP1D(KK)%FAC_PRES_ENER(IMAT)
556 KPHASE = M51_N0PHAS + (M51_SUBMAT_ID(IMAT) - 1) * M51_NVPHAS
557 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (8 + KPHASE - 1)) = RES
558 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (21 + KPHASE - 1)) = RES
560 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%EINT(ELEMID - NFT) = RES
563 EINT(ELEMID-NFT,IMAT) = RES
564 ELSE IF (INIMAP1D(KK)%FORMULATION == 1) THEN
566 IFUNC = INIMAP1D(KK)%FUNC_PRES(IMAT)
569 !--function_IDIDENTIFIFIE
570 NPT = (NPC(IFUNC + 1) - NPC(IFUNC)) / 2
571 FIRST = 1 + (NPC(IFUNC) - 1) / 2
572 PTRx => PLD_INV(1:NPTS/2,1) !NPTS : 2*nb of all function points NPT:for current function
573 PTRy => PLD_INV(1:NPTS/2,2)
576 NPT = INIMAP1D(KK)%NUM_CENTROIDS
578 PTRx => INIMAP1D(KK)%X(1:NPT)
579 PTRy => INIMAP1D(KK)%SUBMAT(IMAT)%PRES(1:NPT)
582 DO WHILE (PTRx(FIRST + SHIFT) < RADIUS)
584 IF( SHIFT >= NPT)EXIT
588 PRES(ELEMID - NFT, IMAT) = PTRy(FIRST) * INIMAP1D(KK)%FAC_PRES_ENER(IMAT)
589 ELSEIF (SHIFT < NPT) THEN
592 VALUE1 = PTRy(IND - 1)
594 PRES(ELEMID - NFT, IMAT) = (VALUE1 + (VALUE2 - VALUE1) / (RAD2 - RAD1) * (RADIUS - RAD1)) *
595 . * INIMAP1D(KK)%FAC_PRES_ENER(IMAT)
597 VALUE1 = PTRy(FIRST + NPT - 1)
598 PRES(ELEMID - NFT, IMAT) = VALUE1 * INIMAP1D(KK)%FAC_PRES_ENER(IMAT)
601 PRES(ELEMID - NFT, IMAT) = INIMAP1D(KK)%FAC_PRES_ENER(IMAT)
605 IF(MULTI_FVM%IS_USED)THEN
606 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%SIG(NEL*(1-1)+ELEMID-NFT)=-PRES(ELEMID - NFT, IMAT)
607 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%SIG(NEL*(2-1)+ELEMID-NFT)=-PRES(ELEMID - NFT, IMAT)
608 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%SIG(NEL*(3-1)+ELEMID-NFT)=-PRES(ELEMID - NFT, IMAT)
609 ELBUF_TAB(NG)%GBUF%SIG(NEL*(1-1)+ELEMID-NFT)=-PRES(ELEMID - NFT, IMAT) !same pressure for all phases
610 ELBUF_TAB(NG)%GBUF%SIG(NEL*(2-1)+ELEMID-NFT)=-PRES(ELEMID - NFT, IMAT)
611 ELBUF_TAB(NG)%GBUF%SIG(NEL*(3-1)+ELEMID-NFT)=-PRES(ELEMID - NFT, IMAT)
613 ELBUF_TAB(NG)%GBUF%SIG(NEL*(1-1)+ELEMID-NFT)=-PRES(ELEMID - NFT, 1)
614 ELBUF_TAB(NG)%GBUF%SIG(NEL*(2-1)+ELEMID-NFT)=-PRES(ELEMID - NFT, 1)
615 ELBUF_TAB(NG)%GBUF%SIG(NEL*(3-1)+ELEMID-NFT)=-PRES(ELEMID - NFT, 1)
617 KPHASE = M51_N0PHAS + (M51_SUBMAT_ID(IMAT) - 1) * M51_NVPHAS
618 !ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (2 + KPHASE - 1)) = -PRES(ELEMID - NFT, 1)
619 !ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (3 + KPHASE - 1)) = -PRES(ELEMID - NFT, 1)
620 !ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (4 + KPHASE - 1)) = -PRES(ELEMID - NFT, 1)
621 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (18+ KPHASE - 1)) = PRES(ELEMID - NFT, 1)
630 IF(ELBUF_TAB(NG)%GBUF%G_TB > 0)ELBUF_TAB(NG)%GBUF%TB(ELEMID - NFT) = 1E20
632 KPHASE = M51_N0PHAS - 1
633 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (KPHASE - 1)) = ONE
634 IF(ELBUF_TAB(NG)%GBUF%G_BFRAC > 0)ELBUF_TAB(NG)%GBUF%BFRAC(ELEMID - NFT) = ONE
635 KPHASE = M51_N0PHAS + (4 - 1) * M51_NVPHAS ! JWL is submat 4
636 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(1 + NEL * (15 + KPHASE - 1)) = 1E20
639 IF(ELBUF_TAB(NG)%BUFLY(IMAT)%L_BFRAC > 0)ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%BFRAC(ELEMID - NFT)=ONE
641 IF(ELBUF_TAB(NG)%GBUF%G_BFRAC > 0)ELBUF_TAB(NG)%GBUF%BFRAC(ELEMID - NFT) = ONE
645.NOT..AND.
IF ( MULTI_FVM%IS_USED ALEFVM_Param%IEnabled == 0) THEN
649 NODEID = IXS(NODELIST(INODE), ELEMID)
650 ELSEIF (ITY == 2) THEN
651 NODEID = IXQ(NODELIST(INODE), ELEMID)
652 ELSEIF (ITY == 7) THEN
653 NODEID = IXTG(NODELIST(INODE), ELEMID)
655 IF (INIMAP1D(KK)%TAGNODE(NODEID) == 0) THEN
657 XNODE = XGRID(1, NODEID)
658 YNODE = XGRID(2, NODEID)
659 ZNODE = XGRID(3, NODEID)
660 IF (INIMAP1D(KK)%PROJ == 3) THEN
662 RADIUS = SQRT((XNODE - X0) * (XNODE - X0) +
663 . (YNODE - Y0) * (YNODE - Y0) +
664 . (ZNODE - Z0) * (ZNODE - Z0))
665 ELSE IF (INIMAP1D(KK)%PROJ == 1) THEN
667 RADIUS = (XNODE - X0) * INIMAP1D(KK)%NX +
668 . (YNODE - Y0) * INIMAP1D(KK)%NY +
669 . (ZNODE - Z0) * INIMAP1D(KK)%NZ
672 TT = (XNODE - X0) * (X1 - X0) +
673 . (YNODE - Y0) * (Y1 - Y0) +
674 . (ZNODE - Z0) * (Z1 - Z0)
675 TT = TT / ((X1 - X0) * (X1 - X0) +
676 . (Y1 - Y0) * (Y1 - Y0) +
677 . (Z1 - Z0) * (Z1 - Z0))
678 XP = X0 + TT * (X1 - X0)
679 YP = Y0 + TT * (Y1 - Y0)
680 ZP = Z0 + TT * (Z1 - Z0)
681 RADIUS = SQRT((XNODE - XP) * (XNODE - XP) +
682 . (YNODE - YP) * (YNODE - YP) +
683 . (ZNODE - ZP) * (ZNODE - ZP))
685 IF (ABS(RADIUS) < EM10
686.AND.
. INIMAP1D(KK)%PROJ /= 1) THEN
687 VEL(1:3, NODEID) = ZERO
689 IF (INIMAP1D(KK)%PROJ == 3) THEN
691 NX = (XNODE - X0) / RADIUS
692 NY = (YNODE - Y0) / RADIUS
693 NZ = (ZNODE - Z0) / RADIUS
694 ELSE IF (INIMAP1D(KK)%PROJ == 1) THEN
701 NX = (XNODE - XP) / RADIUS
702 NY = (YNODE - YP) / RADIUS
703 NZ = (ZNODE - ZP) / RADIUS
705 IFUNC = INIMAP1D(KK)%FUNC_VEL
708 !--function_IDIDENTIFIFIE
709 NPT = (NPC(IFUNC + 1) - NPC(IFUNC)) / 2
710 FIRST = 1 + (NPC(IFUNC) - 1) / 2
711 PTRx => PLD_INV(1:NPTS/2,1) !NPTS : 2*nb of all function points NPT:for current function
712 PTRy => PLD_INV(1:NPTS/2,2)
715 NPT = INIMAP1D(KK)%NUM_NODE_VEL
717 PTRx => INIMAP1D(KK)%X_VEL(1:NPT)
718 PTRy => INIMAP1D(KK)%VEL(1:NPT)
721 DO WHILE (PTRx(FIRST + SHIFT) < RADIUS )
723 IF( SHIFT >= NPT)EXIT
728 ELSEIF (SHIFT < NPT) THEN
731 VALUE1 = PTRy(IND - 1)
733 VALUE = VALUE1 + (VALUE2 - VALUE1) / (RAD2 - RAD1) * (RADIUS - RAD1)
735 VALUE1 = PTRy(FIRST + NPT - 1)
738 VALUE = VALUE * INIMAP1D(KK)%FAC_VEL
742 VEL(1, NODEID) = VALUE * NX
743 VEL(2, NODEID) = VALUE * NY
744 VEL(3, NODEID) = VALUE * NZ
746 INIMAP1D(KK)%TAGNODE(NODEID) = 1
752 IFUNC = INIMAP1D(KK)%FUNC_VEL
755 !--function_IDIDENTIFIFIE
756 NPT = (NPC(IFUNC + 1) - NPC(IFUNC)) / 2
757 FIRST = 1 + (NPC(IFUNC) - 1) / 2
758 PTRx => PLD_INV(1:NPTS/2,1) !NPTS : 2*nb of all function points NPT:for current function
759 PTRy => PLD_INV(1:NPTS/2,2)
762 NPT = INIMAP1D(KK)%NUM_NODE_VEL
764 PTRx => INIMAP1D(KK)%X_VEL(1:NPT)
765 PTRy => INIMAP1D(KK)%VEL(1:NPT)
768 DO WHILE (PTRx(FIRST + SHIFT) < RADIUS )
770 IF( SHIFT >= NPT)EXIT
776 ELSEIF (SHIFT < NPT) THEN
779 VALUE1 = PTRy(IND - 1)
781 VALUE = VALUE1 + (VALUE2 - VALUE1) / (RAD2 - RAD1) * (RADIUS - RAD1)
783 VALUE1 = PTRy(FIRST + NPT - 1)
789 IF (INIMAP1D(KK)%PROJ == 3) THEN
791 IF (ABS(RADIUS) > EM10) THEN
792 NX = (XC - X0) / RADIUS
793 NY = (YC - Y0) / RADIUS
794 NZ = (ZC - Z0) / RADIUS
796 ELSE IF (INIMAP1D(KK)%PROJ == 1) THEN
803 IF (ABS(RADIUS) > EM10) THEN
804 NX = (XC - XP) / RADIUS
805 NY = (YC - YP) / RADIUS
806 NZ = (ZC - ZP) / RADIUS
809 VALUE = VALUE * INIMAP1D(KK)%FAC_VEL
813 IF (MULTI_FVM%IS_USED) THEN
814 MULTI_FVM%VEL(1, ELEMID) = VALUE * NX
815 MULTI_FVM%VEL(2, ELEMID) = VALUE * NY
816 MULTI_FVM%VEL(3, ELEMID) = VALUE * NZ
817 ELSE IF (ALEFVM_Param%IEnabled > 0) THEN
818 GBUF%MOM(ELEMID - NFT + 0 * NEL) = VALUE * NX * GBUF%RHO(ELEMID - NFT)
819 GBUF%MOM(ELEMID - NFT + 1 * NEL) = VALUE * NY * GBUF%RHO(ELEMID - NFT)
820 GBUF%MOM(ELEMID - NFT + 2 * NEL) = VALUE * NZ * GBUF%RHO(ELEMID - NFT)
823 ENDDO ! II = IFIRST, ILAST
825 IF (INIMAP1D(KK)%FORMULATION == 2) THEN
826 DO II = IFIRST, ILAST
827 ELEMID = ELEM_LIST(II)
828 GBUF%EINT(ELEMID - NFT) = GBUF%EINT(ELEMID - NFT) * GBUF%RHO(ELEMID - NFT)
829 GBUF%TEMP(ELEMID - NFT) = 300*(GBUF%RHO(ELEMID - NFT) )**0.4
832.AND.
IF (MLW /= 51 MLW /= 151) THEN
833 SUBMAT(1)%TEMP(1:NEL) => ELBUF_TAB(NG)%GBUF%TEMP(1:NEL)
834 ELSE IF (MLW == 151) THEN
836 SUBMAT(IMAT)%TEMP(1:NEL) => ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%TEMP(1:NEL)
840 KPHASE = M51_N0PHAS + (M51_SUBMAT_ID(IMAT) - 1) * M51_NVPHAS
841 SUBMAT(IMAT)%TEMP(1:NEL) => ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(1+NEL*(16+KPHASE-1) : NEL*(16+KPHASE ))
845 ELSE IF (INIMAP1D(KK)%FORMULATION == 1) THEN
847.AND.
IF (MLW /= 151 MLW /= 51) THEN
849 MATID = IXS(1, 1 + NFT)
850 ELSEIF (ITY == 2) THEN
851 MATID = IXQ(1, 1 + NFT)
852 ELSEIF (ITY == 7) THEN
853 MATID = IXTG(1, 1 + NFT)
855 NVARTMP_EOS = ELBUF_TAB(NG)%BUFLY(1)%NVARTMP_EOS
856 SUBMAT(1)%TEMP(1:NEL) => ELBUF_TAB(NG)%GBUF%TEMP(1:NEL)
857 EBUF => ELBUF_TAB(NG)%BUFLY(1)%EOS(1,1,1)
858 NVAREOS = ELBUF_TAB(NG)%BUFLY(1)%NVAR_EOS
859 CALL MULTI_SOLVE_EINT(MATID, NFT, NEL, PRES(:, 1), GBUF%EINT, GBUF%RHO, IFIRST, ILAST, ELEM_LIST,
860 . IPM, PM, BUFMAT, MLW, SUBMAT(1)%TEMP,SNPC,STF,NPC,PLD, EBUF%VAR, NVAREOS,
861 . MAT_PARAM(MATID),NVARTMP_EOS,EBUF%VARTMP,NUMMAT,NPROPMI,NPROPM)
862 ELSE IF (MLW == 151) THEN
865 GMID = IXS(1, 1 + NFT)
866 MATID = MAT_PARAM(GMID)%MULTIMAT%MID(IMAT)
867 ELSEIF (ITY == 2) THEN
868 GMID = IXQ(1, 1 + NFT)
869 MATID = MAT_PARAM(GMID)%MULTIMAT%MID(IMAT)
870 ELSEIF (ITY == 7) THEN
871 GMID = IXTG(1, 1 + NFT)
872 MATID = MAT_PARAM(GMID)%MULTIMAT%MID(IMAT)
874 NVARTMP_EOS = ELBUF_TAB(NG)%BUFLY(IMAT)%NVARTMP_EOS
875 SUBMAT(IMAT)%TEMP(1:NEL) => ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%TEMP(1:NEL)
876 EBUF => ELBUF_TAB(NG)%BUFLY(IMAT)%EOS(1,1,1)
877 NVAREOS = ELBUF_TAB(NG)%BUFLY(IMAT)%NVAR_EOS
878 CALL MULTI_SOLVE_EINT(MATID, NFT, NEL, PRES(:, IMAT), ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%EINT,
879 . ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%RHO, IFIRST, ILAST, ELEM_LIST,
880 . IPM, PM, BUFMAT, MLW,SUBMAT(IMAT)%TEMP,SNPC,STF,NPC,PLD,EBUF%VAR,NVAREOS,
881 . MAT_PARAM(MATID),NVARTMP_EOS,EBUF%VARTMP,NUMMAT,NPROPMI,NPROPM)
886 GMID = IXS(1, 1 + NFT)
887 MATID = MAT_PARAM(GMID)%MULTIMAT%MID(IMAT)
888 ELSEIF (ITY == 2) THEN
889 GMID = IXQ(1, 1 + NFT)
890 MATID = MAT_PARAM(GMID)%MULTIMAT%MID(IMAT)
891 ELSEIF (ITY == 7) THEN
892 GMID = IXTG(1, 1 + NFT)
893 MATID = MAT_PARAM(GMID)%MULTIMAT%MID(IMAT)
895 NVARTMP_EOS = ELBUF_TAB(NG)%BUFLY(1)%NVARTMP_EOS
896 KPHASE = M51_N0PHAS + (M51_SUBMAT_ID(IMAT) - 1) * M51_NVPHAS
897 SUBMAT(IMAT)%TEMP(1:NEL) => ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(1+NEL*(16+KPHASE-1) : NEL*(16+KPHASE ))
898 EBUF => ELBUF_TAB(NG)%BUFLY(1)%EOS(1,1,1)
899 NVAREOS = ELBUF_TAB(NG)%BUFLY(1)%NVAR_EOS
900 CALL MULTI_SOLVE_EINT(MATID, NFT, NEL, PRES(:, IMAT), EINT(:, IMAT),
901 . ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(1 + NEL * (9 + KPHASE - 1):NEL + NEL * (9 + KPHASE - 1)),
902 . IFIRST, ILAST, ELEM_LIST,
903 . IPM, PM, BUFMAT, MLW, SUBMAT(IMAT)%TEMP,SNPC,STF,NPC,PLD,EBUF%VAR,NVAREOS,
904 . MAT_PARAM(MATID),NVARTMP_EOS,EBUF%VARTMP,NUMMAT,NPROPMI,NPROPM)
905 DO II = IFIRST, ILAST
906 ELEMID = ELEM_LIST(II)
907 RES = EINT(ELEMID - NFT, IMAT)
908 KPHASE = M51_N0PHAS + (M51_SUBMAT_ID(IMAT) - 1) * M51_NVPHAS
909 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (8 + KPHASE - 1)) = RES
910 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(ELEMID - NFT + NEL * (21 + KPHASE - 1)) = RES
918 ELBUF_TAB(NG)%GBUF%TEMP(II) = ZERO
920 DENSFRAC = ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%RHO(II) / ELBUF_TAB(NG)%GBUF%RHO(II)
921 ELBUF_TAB(NG)%GBUF%TEMP(II) = ELBUF_TAB(NG)%GBUF%TEMP(II) + VFRAC(II,IMAT)*DENSFRAC * SUBMAT(IMAT)%TEMP(II)
927 ELBUF_TAB(NG)%GBUF%TEMP(II) = ZERO
929 KPHASE = M51_N0PHAS + (M51_SUBMAT_ID(IMAT) - 1) * M51_NVPHAS
930 DENSFRAC = ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(II + NEL * (12 + KPHASE - 1)) / ELBUF_TAB(NG)%GBUF%RHO(II)
931 ELBUF_TAB(NG)%GBUF%TEMP(II) = ELBUF_TAB(NG)%GBUF%TEMP(II) + VFRAC(II,IMAT)*DENSFRAC * SUBMAT(IMAT)%TEMP(II)
933 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(1:NEL)= ELBUF_TAB(NG)%GBUF%TEMP(1:NEL) !global temperature law51 buffer
938 ENDDO ! NG = 1, NGROUP
939 DEALLOCATE(PRES, EINT)
944 DEALLOCATE(ELEM_LIST)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)