OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
ini_inimap1d.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| ini_inimap1d ../starter/source/initial_conditions/inimap/ini_inimap1d.F
25!||--- called by ------------------------------------------------------
26!|| initia ../starter/source/elements/initia/initia.F
27!||--- calls -----------------------------------------------------
28!|| ancmsg ../starter/source/output/message/message.F
29!|| multi_solve_eint ../starter/source/initial_conditions/inimap/multi_solve_eint.F90
30!||--- uses -----------------------------------------------------
31!|| inimap1d_mod ../starter/share/modules1/inimap1d_mod.f
32!|| message_mod ../starter/share/message_module/message_mod.F
33!|| multi_solve_eint_mod ../starter/source/initial_conditions/inimap/multi_solve_eint.F90
34!||====================================================================
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)
40C-----------------------------------------------
41C M o d u l e s
42C-----------------------------------------------
43 USE elbufdef_mod
44 USE inimap1d_mod
45 USE multi_fvm_mod
46 USE groupdef_mod
47 USE message_mod
48 USE alefvm_mod , only:alefvm_param
49 USE matparam_def_mod
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
53C-----------------------------------------------
54C I m p l i c i t T y p e s
55C-----------------------------------------------
56#include "implicit_f.inc"
57C-----------------------------------------------
58C C o m m o n B l o c k s
59C-----------------------------------------------
60#include "param_c.inc"
61#include "scr17_c.inc"
62! NGROUP
63#include "com01_c.inc"
64! NFUNCT
65#include "com04_c.inc"
66! MVSIZ
67#include "mvsiz_p.inc"
68C-----------------------------------------------
69C D u m m y A r g u m e n t s
70C-----------------------------------------------
71 INTEGER,INTENT(IN) :: SNPC, STF !< array sizes
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
82C-----------------------------------------------
83 TYPE (GROUP_) , DIMENSION(NGRBRIC) :: IGRBRIC
84 TYPE (GROUP_) , DIMENSION(NGRQUAD) :: IGRQUAD
85 TYPE (GROUP_) , DIMENSION(NGRSH3N) :: IGRSH3N
86C-----------------------------------------------
87C L o c a l V a r i a b l e s
88C-----------------------------------------------
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
92 LOGICAL :: CONT
93 INTEGER :: II, IFUNC, NPT, FIRST, LAST, ICOOR, INODE, NODEID, IND, SHIFT,
94 . node1, node2, node3, node4, node5, node6, node7, node8,
95 . elemid
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
101 my_real :: tt, res, rho
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
107
108 TYPE pseudo_pointer_array
109 my_real, POINTER, DIMENSION(:) :: temp
110 END TYPE
111 TYPE (PSEUDO_POINTER_ARRAY) :: SUBMAT(21)
112
113 CHARACTER*2 :: Str1, Str2
114 my_real :: vfrac(mvsiz,21),densfrac
115
116 TYPE(buf_eos_), POINTER :: EBUF
117 INTEGER NVAREOS
118 INTEGER GMID !< global material identifier (multimaterial law)
119 INTEGER :: NVARTMP_EOS
120
121C-----------------------------------------------
122C S o u r c e L i n e s
123C-----------------------------------------------
124
125 DO kk=1,npts/2
126 pld_inv(kk,1)=pld(1,kk)
127 pld_inv(kk,2)=pld(2,kk)
128 ENDDO
129
130 IF (n2d == 0) THEN
131 ALLOCATE(elem_list(numels))
132 elem_list(1:numels)=0
133 ELSE
134 ALLOCATE(elem_list(numelq + numeltg))
135 elem_list(1:numelq+numeltg)=0
136 ENDIF
137
138 tag_mat(1:nummat)=0
139
140 grbricid = 0
141 grquadid = 0
142 grsh3nid = 0
143
144 DO kk = 1, ninimap1d
145 IF(.NOT.inimap1d(kk)%CORRECTLY_READ)cycle
146 nbmat = inimap1d(kk)%NBMAT
147 IF(nbmat==0)cycle !something went wrong with reader
148 ALLOCATE(pres(mvsiz, nbmat), eint(mvsiz, nbmat))
149 pres(:,:)=zero
150 eint(:,:)=zero
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
157 ENDIF
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)
165 ENDIF
166 IF (grbricid > 0) THEN
167 nelem = igrbric(grbricid)%NENTITY
168 DO ii = 1, nelem
169 elem_list(ii) = igrbric(grbricid)%ENTITY(ii)
170 ENDDO
171 ELSEIF (grquadid > 0) THEN
172 nelem = igrquad(grquadid)%NENTITY
173 DO ii = 1, nelem
174 elem_list(ii) = igrquad(grquadid)%ENTITY(ii)
175 ENDDO
176 ELSEIF (grsh3nid > 0) THEN
177 nelem = igrsh3n(grsh3nid)%NENTITY
178 DO ii = 1, nelem
179 elem_list(ii) = igrsh3n(grsh3nid)%ENTITY(ii)
180 ENDDO
181 ENDIF
182C If NSPMD != 1 the ids are not ordered
183 CALL quicksort_i(elem_list(1:nelem), 1, nelem)
184 DO ng = 1, ngroup
185 mlw = iparg(1, ng)
186 nel = iparg(2, ng)
187 nft = iparg(3, ng)
188 ity = iparg(5, ng)
189 SELECT CASE(mlw)
190 CASE (3, 4, 6, 49, 51, 151)
191 CONTINUE
192 CASE DEFAULT
193 cycle
194 END SELECT
195 matid=0
196 IF (ity == 1) THEN
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)
202 ELSE
203 cycle ! not compatible elem type (beam, truss, spring, shell ...)
204 ENDIF
205 m51_submat_id(1:4) = 0
206 IF (mlw == 51) THEN
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)
211 nbmat_target = 4
212 IF(m51_submat_id(jj)==0)nbmat_target=max(1,jj-1)
213 ELSEIF (mlw == 151)THEN
214 nbmat_target = multi_fvm%NBMAT
215 ELSE
216 nbmat_target = 1
217 ENDIF
218c
219 nuvar = ipm(8, matid)
220 iadbuf = ipm(7, matid)
221 isolnod = iparg(28, ng)
222 gbuf => elbuf_tab(ng)%GBUF
223C Find first index of elem_list such as corresponding elem lies in the group
224 ifirst = 1
225 shift = 0
226 DO WHILE(elem_list(ifirst + shift) < 1 + nft .AND. ifirst + shift <= nelem)
227 shift = shift + 1
228 ENDDO
229 IF (shift > nelem) THEN
230 cycle
231 ELSE
232 ifirst = ifirst + shift
233 ENDIF
234
235 ilast = ifirst
236 shift = 0
237 DO WHILE(elem_list(ilast + shift) <= nel + nft .AND. ilast + shift < nelem)
238 shift = shift + 1
239 IF( shift >= nel)EXIT
240 ENDDO
241C IFIRST + SHIFT is the first element which ID is greater than NFT + NEL
242 IF (ilast + shift < nelem) THEN
243 shift = shift - 1
244 ilast = ilast + shift
245 ELSE
246 ilast = nelem
247 ENDIF
248
249 !IF some elements are targeted in this current group NG, check material law
250 IF(ifirst>0 .AND. ifirst<=ilast )THEN
251 SELECT CASE(mlw)
252 CASE (3, 4, 6, 49, 51, 151)
253 CONTINUE
254 CASE DEFAULT
255 !WRITE(IOUT, '(A, I10)') "**WARNING : /INIMAP1D OPTION NOT COMPATIBLE WITH MATERIAL LAW", MLW
256 cycle
257 END SELECT
258 IF (mlw == 51) THEN
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)
262 ENDIF
263 ENDIF
264 ENDIF
265
266C Check submaterial consistency
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,
272 . C1="INIMAP1D",
273 . C2="NUMBER OF SUBMATERIAL(S) FROM TARGET MATERIAL LAW:"//Str1,
274 . C3=" IS DIFFERENT FROM SUBMATERIAL(S) NUMBER IN TARGET DOMAIN:"//Str2,
275 . C4="INIMAP1D",
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
280 ENDIF
281 ENDIF
282
283 DO II = IFIRST, ILAST
284 ELEMID = ELEM_LIST(II)
285.OR. IF (ELEMID < 1 + NFT ELEMID > NEL + NFT) THEN
286 ENDIF
287.AND. IF (ITY == 1 ISOLNOD == 8) THEN
288C HEXA
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))
303 NBNODE = 8
304 NODELIST(1) = 2
305 NODELIST(2) = 3
306 NODELIST(3) = 4
307 NODELIST(4) = 5
308 NODELIST(5) = 6
309 NODELIST(6) = 7
310 NODELIST(7) = 8
311 NODELIST(8) = 9
312.AND. ELSEIF (ITY == 1 ISOLNOD == 4) THEN
313C TETRA
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))
321 NBNODE = 4
322 NODELIST(1) = 2
323 NODELIST(2) = 4
324 NODELIST(3) = 7
325 NODELIST(4) = 6
326 ELSEIF (ITY == 2) THEN
327C QUAD
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))
335 NBNODE = 4
336 NODELIST(1) = 2
337 NODELIST(2) = 3
338 NODELIST(3) = 4
339 NODELIST(4) = 5
340 ELSEIF (ITY == 7) THEN
341C TRIANGLES
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))
348 NBNODE = 3
349 NODELIST(1) = 2
350 NODELIST(2) = 3
351 NODELIST(3) = 4
352 ENDIF
353 IF (INIMAP1D(KK)%PROJ == 3) THEN
354C SPHERICAL
355 RADIUS = SQRT((XC - X0) * (XC - X0) + (YC - Y0) * (YC - Y0) + (ZC - Z0) * (ZC - Z0))
356 ELSEIF (INIMAP1D(KK)%PROJ == 1) THEN
357C PLANAR
358 RADIUS = (XC - X0) * INIMAP1D(KK)%NX +
359 . (YC - Y0) * INIMAP1D(KK)%NY +
360 . (ZC - Z0) * INIMAP1D(KK)%NZ
361 ELSE
362C CYLINDRICAL PROJ
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))
371 ENDIF
372
373 DO IMAT = 1, NBMAT
374C Alpha
375 IFUNC = INIMAP1D(KK)%FUNC_ALPHA(IMAT)
376 IF (IFUNC /= 0) THEN
377 IF(IFUNC>0)THEN
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)
383 ELSE
384 !--data from file
385 NPT = INIMAP1D(KK)%NUM_CENTROIDS
386 FIRST = 1
387 PTRx => INIMAP1D(KK)%X(1:NPT)
388 PTRy => INIMAP1D(KK)%SUBMAT(IMAT)%VFRAC(1:NPT)
389 ENDIF
390 SHIFT = 0
391 DO WHILE (PTRx(FIRST + SHIFT) < RADIUS )
392 SHIFT = SHIFT + 1
393 IF(SHIFT >= NPT)EXIT
394 ENDDO
395 IND = FIRST + SHIFT
396 IF (SHIFT == 0) THEN
397 RES = PTRy(FIRST)
398 IF (MLW == 51) THEN
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
402 ELSE
403 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%VOL(ELEMID - NFT) = RES * GBUF%VOL(ELEMID - NFT)
404 ENDIF
405 ELSEIF (SHIFT < NPT) THEN
406 RAD1 = PTRx(IND - 1)
407 RAD2 = PTRx(IND)
408 VALUE1 = PTRy(IND - 1)
409 VALUE2 = PTRy(IND)
410 RES = (VALUE1 + (VALUE2 - VALUE1) / (RAD2 - RAD1) * (RADIUS - RAD1))
411 IF (MLW == 51) THEN
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
415 ELSE
416 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%VOL(ELEMID - NFT) = RES * GBUF%VOL(ELEMID - NFT)
417 ENDIF
418 ELSE
419 RES = PTRy(FIRST + NPT - 1)
420 IF (MLW == 51) THEN
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
424 ELSE
425 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%VOL(ELEMID - NFT) = RES * GBUF%VOL(ELEMID - NFT)
426 ENDIF
427 ENDIF
428 ELSE
429 RES = ONE
430 IF (MLW == 51) THEN
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
434 ELSE
435 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%VOL(ELEMID - NFT) = RES * GBUF%VOL(ELEMID - NFT)
436 ENDIF
437 ENDIF
438 VFRAC(ELEMID-NFT,IMAT) = RES
439C RHO
440 IFUNC = INIMAP1D(KK)%FUNC_RHO(IMAT)
441 IF(IFUNC /= 0)THEN
442 IF(IFUNC > 0)THEN
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)
448 ELSE
449 !--data from file
450 NPT = INIMAP1D(KK)%NUM_CENTROIDS
451 FIRST = 1
452 PTRx => INIMAP1D(KK)%X(1:NPT)
453 PTRy => INIMAP1D(KK)%SUBMAT(IMAT)%RHO(1:NPT)
454 ENDIF
455 SHIFT = 0
456 DO WHILE (PTRx(FIRST + SHIFT) < RADIUS )
457 SHIFT = SHIFT + 1
458 IF( SHIFT >= NPT)EXIT
459 ENDDO
460 IND = FIRST + SHIFT
461 IF (SHIFT == 0) THEN
462 RES = PTRy(FIRST) * INIMAP1D(KK)%FAC_RHO(IMAT)
463 IF (MLW == 51) THEN
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
468 ELSE
469 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%RHO(ELEMID - NFT) = RES
470 ENDIF
471 ELSEIF (SHIFT < NPT) THEN
472 RAD1 = PTRx(IND - 1)
473 RAD2 = PTRx(IND)
474 VALUE1 = PTRy(IND - 1)
475 VALUE2 = PTRy(IND)
476 RES = (VALUE1 + (VALUE2 - VALUE1) / (RAD2 - RAD1) * (RADIUS - RAD1)) * INIMAP1D(KK)%FAC_RHO(IMAT)
477 IF (MLW == 51) THEN
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
482 ELSE
483 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%RHO(ELEMID - NFT) = RES
484 ENDIF
485 ELSE
486 RES = PTRy(FIRST + NPT - 1) * INIMAP1D(KK)%FAC_RHO(IMAT)
487 IF (MLW == 51) THEN
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
492 ELSE
493 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%RHO(ELEMID - NFT) = RES
494 ENDIF
495 ENDIF
496 ELSE
497 RES = INIMAP1D(KK)%FAC_RHO(IMAT)
498 IF (MLW == 51) THEN
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
503 ELSE
504 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%RHO(ELEMID - NFT) = RES
505 ENDIF
506 ENDIF
507
508 IF (INIMAP1D(KK)%FORMULATION == 2) THEN
509C EINT
510 !not managed when reading from file (FORMULATION=1)
511 IFUNC = INIMAP1D(KK)%FUNC_ENER(IMAT)
512 IF (IFUNC > 0) THEN
513 NPT = (NPC(IFUNC + 1) - NPC(IFUNC)) / 2
514 FIRST = 1 + (NPC(IFUNC) - 1) / 2
515 SHIFT = 0
516 DO WHILE (PTRx(FIRST + SHIFT) < RADIUS)
517 SHIFT = SHIFT + 1
518 IF( SHIFT >= NPT)EXIT
519 ENDDO
520 IND = FIRST + SHIFT
521 IF (SHIFT == 0) THEN
522 RES = PTRy(FIRST) * INIMAP1D(KK)%FAC_PRES_ENER(IMAT)
523 IF (MLW == 51) THEN
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
527 ELSE
528 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%EINT(ELEMID - NFT) = RES
529 ENDIF
530 ELSEIF (SHIFT < NPT) THEN
531 RAD1 = PTRx(IND - 1)
532 RAD2 = PTRx(IND)
533 VALUE1 = PTRy(IND - 1)
534 VALUE2 = PTRy(IND)
535 RES = (VALUE1 + (VALUE2 - VALUE1) / (RAD2 - RAD1) * (RADIUS - RAD1)) * INIMAP1D(KK)%FAC_PRES_ENER(IMAT)
536 IF (MLW == 51) THEN
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
540 ELSE
541 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%EINT(ELEMID - NFT) = RES
542 ENDIF
543 ELSE
544 RES = PTRy(FIRST + NPT - 1) * INIMAP1D(KK)%FAC_PRES_ENER(IMAT)
545 IF (MLW == 51) THEN
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
549 ELSE
550 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%EINT(ELEMID - NFT) = RES
551 ENDIF
552 ENDIF
553 ELSE
554 RES = INIMAP1D(KK)%FAC_PRES_ENER(IMAT)
555 IF (MLW == 51) THEN
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
559 ELSE
560 ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%EINT(ELEMID - NFT) = RES
561 ENDIF
562 ENDIF
563 EINT(ELEMID-NFT,IMAT) = RES
564 ELSE IF (INIMAP1D(KK)%FORMULATION == 1) THEN
565C PRES
566 IFUNC = INIMAP1D(KK)%FUNC_PRES(IMAT)
567 IF(IFUNC /= 0)THEN
568 IF(IFUNC > 0)THEN
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)
574 ELSE
575 !--data from file
576 NPT = INIMAP1D(KK)%NUM_CENTROIDS
577 FIRST = 1
578 PTRx => INIMAP1D(KK)%X(1:NPT)
579 PTRy => INIMAP1D(KK)%SUBMAT(IMAT)%PRES(1:NPT)
580 ENDIF
581 SHIFT = 0
582 DO WHILE (PTRx(FIRST + SHIFT) < RADIUS)
583 SHIFT = SHIFT + 1
584 IF( SHIFT >= NPT)EXIT
585 ENDDO
586 IND = FIRST + SHIFT
587 IF (SHIFT == 0) THEN
588 PRES(ELEMID - NFT, IMAT) = PTRy(FIRST) * INIMAP1D(KK)%FAC_PRES_ENER(IMAT)
589 ELSEIF (SHIFT < NPT) THEN
590 RAD1 = PTRx(IND - 1)
591 RAD2 = PTRx(IND)
592 VALUE1 = PTRy(IND - 1)
593 VALUE2 = PTRy(IND)
594 PRES(ELEMID - NFT, IMAT) = (VALUE1 + (VALUE2 - VALUE1) / (RAD2 - RAD1) * (RADIUS - RAD1)) *
595 . * INIMAP1D(KK)%FAC_PRES_ENER(IMAT)
596 ELSE
597 VALUE1 = PTRy(FIRST + NPT - 1)
598 PRES(ELEMID - NFT, IMAT) = VALUE1 * INIMAP1D(KK)%FAC_PRES_ENER(IMAT)
599 ENDIF
600 ELSE
601 PRES(ELEMID - NFT, IMAT) = INIMAP1D(KK)%FAC_PRES_ENER(IMAT)
602 ENDIF
603
604
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)
612 ELSE
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)
616 IF(MLW==51)THEN
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)
622 ENDIF
623 ENDIF
624
625 ENDIF
626
627 ENDDO
628
629C Burn Fraction / Detonation Times
630 IF(ELBUF_TAB(NG)%GBUF%G_TB > 0)ELBUF_TAB(NG)%GBUF%TB(ELEMID - NFT) = 1E20
631 IF (MLW == 51) THEN
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
637 ELSE
638 DO IMAT=1,NBMAT
639 IF(ELBUF_TAB(NG)%BUFLY(IMAT)%L_BFRAC > 0)ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%BFRAC(ELEMID - NFT)=ONE
640 ENDDO
641 IF(ELBUF_TAB(NG)%GBUF%G_BFRAC > 0)ELBUF_TAB(NG)%GBUF%BFRAC(ELEMID - NFT) = ONE
642 ENDIF
643
644
645.NOT..AND. IF ( MULTI_FVM%IS_USED ALEFVM_Param%IEnabled == 0) THEN
646C VEL
647 DO INODE = 1, NBNODE
648 IF (ITY == 1) 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)
654 ENDIF
655 IF (INIMAP1D(KK)%TAGNODE(NODEID) == 0) THEN
656
657 XNODE = XGRID(1, NODEID)
658 YNODE = XGRID(2, NODEID)
659 ZNODE = XGRID(3, NODEID)
660 IF (INIMAP1D(KK)%PROJ == 3) THEN
661C SPHERICAL PROJ
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
666C PLANAR PROJ
667 RADIUS = (XNODE - X0) * INIMAP1D(KK)%NX +
668 . (YNODE - Y0) * INIMAP1D(KK)%NY +
669 . (ZNODE - Z0) * INIMAP1D(KK)%NZ
670 ELSE
671C CYLINDRICAL PROJ
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))
684 ENDIF
685 IF (ABS(RADIUS) < EM10
686.AND. . INIMAP1D(KK)%PROJ /= 1) THEN
687 VEL(1:3, NODEID) = ZERO
688 ELSE
689 IF (INIMAP1D(KK)%PROJ == 3) THEN
690C SPHERICAL
691 NX = (XNODE - X0) / RADIUS
692 NY = (YNODE - Y0) / RADIUS
693 NZ = (ZNODE - Z0) / RADIUS
694 ELSE IF (INIMAP1D(KK)%PROJ == 1) THEN
695C PLANAR
696 NX = INIMAP1D(KK)%NX
697 NY = INIMAP1D(KK)%NY
698 NZ = INIMAP1D(KK)%NZ
699 ELSE
700C CYLINDRICAL
701 NX = (XNODE - XP) / RADIUS
702 NY = (YNODE - YP) / RADIUS
703 NZ = (ZNODE - ZP) / RADIUS
704 ENDIF
705 IFUNC = INIMAP1D(KK)%FUNC_VEL
706 IF(IFUNC /= 0)THEN
707 IF(IFUNC > 0)THEN
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)
713 ELSE
714 !--data from file
715 NPT = INIMAP1D(KK)%NUM_NODE_VEL
716 FIRST = 1
717 PTRx => INIMAP1D(KK)%X_VEL(1:NPT)
718 PTRy => INIMAP1D(KK)%VEL(1:NPT)
719 ENDIF
720 SHIFT = 0
721 DO WHILE (PTRx(FIRST + SHIFT) < RADIUS )
722 SHIFT = SHIFT + 1
723 IF( SHIFT >= NPT)EXIT
724 ENDDO
725 IND = FIRST + SHIFT
726 IF (SHIFT == 0) THEN
727 VALUE = PTRy(FIRST)
728 ELSEIF (SHIFT < NPT) THEN
729 RAD1 = PTRx(IND - 1)
730 RAD2 = PTRx(IND)
731 VALUE1 = PTRy(IND - 1)
732 VALUE2 = PTRy(IND)
733 VALUE = VALUE1 + (VALUE2 - VALUE1) / (RAD2 - RAD1) * (RADIUS - RAD1)
734 ELSE
735 VALUE1 = PTRy(FIRST + NPT - 1)
736 VALUE = VALUE1
737 ENDIF
738 VALUE = VALUE * INIMAP1D(KK)%FAC_VEL
739 ELSE
740 VALUE = ZERO
741 ENDIF
742 VEL(1, NODEID) = VALUE * NX
743 VEL(2, NODEID) = VALUE * NY
744 VEL(3, NODEID) = VALUE * NZ
745 ENDIF
746 INIMAP1D(KK)%TAGNODE(NODEID) = 1
747 ENDIF
748 ENDDO ! INODE
749 ELSE
750
751C Initialize cell centred velocities
752 IFUNC = INIMAP1D(KK)%FUNC_VEL
753 IF(IFUNC /= 0)THEN
754 IF(IFUNC > 0)THEN
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)
760 ELSE
761 !--data from file
762 NPT = INIMAP1D(KK)%NUM_NODE_VEL
763 FIRST = 1
764 PTRx => INIMAP1D(KK)%X_VEL(1:NPT)
765 PTRy => INIMAP1D(KK)%VEL(1:NPT)
766 ENDIF
767 SHIFT = 0
768 DO WHILE (PTRx(FIRST + SHIFT) < RADIUS )
769 SHIFT = SHIFT + 1
770 IF( SHIFT >= NPT)EXIT
771 ENDDO
772 IND = FIRST + SHIFT
773
774 IF (SHIFT == 0) THEN
775 VALUE = PTRy(FIRST)
776 ELSEIF (SHIFT < NPT) THEN
777 RAD1 = PTRx(IND - 1)
778 RAD2 = PTRx(IND)
779 VALUE1 = PTRy(IND - 1)
780 VALUE2 = PTRy(IND)
781 VALUE = VALUE1 + (VALUE2 - VALUE1) / (RAD2 - RAD1) * (RADIUS - RAD1)
782 ELSE
783 VALUE1 = PTRy(FIRST + NPT - 1)
784 VALUE = VALUE1
785 ENDIF
786 NX = ZERO
787 NY = ZERO
788 NZ = ZERO
789 IF (INIMAP1D(KK)%PROJ == 3) THEN
790C SPHERICAL
791 IF (ABS(RADIUS) > EM10) THEN
792 NX = (XC - X0) / RADIUS
793 NY = (YC - Y0) / RADIUS
794 NZ = (ZC - Z0) / RADIUS
795 ENDIF
796 ELSE IF (INIMAP1D(KK)%PROJ == 1) THEN
797C PLANAR
798 NX = INIMAP1D(KK)%NX
799 NY = INIMAP1D(KK)%NY
800 NZ = INIMAP1D(KK)%NZ
801 ELSE
802C CYLINDRICAL
803 IF (ABS(RADIUS) > EM10) THEN
804 NX = (XC - XP) / RADIUS
805 NY = (YC - YP) / RADIUS
806 NZ = (ZC - ZP) / RADIUS
807 ENDIF
808 ENDIF
809 VALUE = VALUE * INIMAP1D(KK)%FAC_VEL
810 ELSE
811 VALUE = ZERO
812 ENDIF
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)
821 ENDIF
822 ENDIF ! MULTI_FVM
823 ENDDO ! II = IFIRST, ILAST
824
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
830 ENDDO
831
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
835 DO IMAT=1,NBMAT
836 SUBMAT(IMAT)%TEMP(1:NEL) => ELBUF_TAB(NG)%BUFLY(IMAT)%LBUF(1,1,1)%TEMP(1:NEL)
837 ENDDO
838 ELSE
839 DO IMAT=1,NBMAT
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 ))
842 ENDDO
843 ENDIF
844
845 ELSE IF (INIMAP1D(KK)%FORMULATION == 1) THEN
846C Compute EINT from pressure
847.AND. IF (MLW /= 151 MLW /= 51) THEN
848 IF (ITY == 1) 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)
854 ENDIF
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
863 DO IMAT = 1, NBMAT
864 IF (ITY == 1) 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)
873 ENDIF
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)
882 ENDDO
883 ELSE
884 DO IMAT = 1, NBMAT
885 IF (ITY == 1) THEN
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)
894 ENDIF
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
911 ENDDO
912 ENDDO
913 ENDIF
914
915 IF(MLW == 151)THEN
916 IF(NBMAT > 1)THEN
917 DO II = 1,NEL
918 ELBUF_TAB(NG)%GBUF%TEMP(II) = ZERO
919 DO IMAT=1,NBMAT
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)
922 ENDDO
923 ENDDO
924 ENDIF
925 ELSEIF(MLW==51)THEN
926 DO II = 1,NEL
927 ELBUF_TAB(NG)%GBUF%TEMP(II) = ZERO
928 DO IMAT=1,NBMAT
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)
932 ENDDO
933 ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)%VAR(1:NEL)= ELBUF_TAB(NG)%GBUF%TEMP(1:NEL) !global temperature law51 buffer
934 ENDDO
935 ENDIF
936
937 ENDIF
938 ENDDO ! NG = 1, NGROUP
939 DEALLOCATE(PRES, EINT)
940 ENDDO
941C ===================
942C Memory deallocation
943C ===================
944 DEALLOCATE(ELEM_LIST)
945
946 END SUBROUTINE INI_INIMAP1D
947
#define my_real
Definition cppsort.cpp:32
subroutine ini_inimap1d(inimap1d, elbuf_tab, ipart, iparg, iparts, ipartq, xgrid, vel, ixs, ixq, ixtg, pm, ipm, bufmat, multi_fvm, pld, npc, igrbric, igrquad, igrsh3n, npts, mat_param, snpc, stf)
#define max(a, b)
Definition macros.h:21
type(alefvm_param_), target alefvm_param
Definition alefvm_mod.F:121
recursive subroutine quicksort_i(a, first, last)
Definition quicksort.F:92
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)
Definition message.F:895
program starter
Definition starter.F:39