OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat51.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!|| hm_read_mat51 ../starter/source/materials/mat/mat051/hm_read_mat51.F
25!||--- called by ------------------------------------------------------
26!|| hm_read_mat ../starter/source/materials/mat/hm_read_mat.F90
27!||--- calls -----------------------------------------------------
28!|| ancmsg ../starter/source/output/message/message.F
29!|| hm_get_float_array_index ../starter/source/devtools/hm_reader/hm_get_float_array_index.F
30!|| hm_get_float_array_index_dim ../starter/source/devtools/hm_reader/hm_get_float_array_index_dim.F
31!|| hm_get_floatv ../starter/source/devtools/hm_reader/hm_get_floatv.F
32!|| hm_get_floatv_dim ../starter/source/devtools/hm_reader/hm_get_floatv_dim.F
33!|| hm_get_int_array_index ../starter/source/devtools/hm_reader/hm_get_int_array_index.F
34!|| hm_get_intv ../starter/source/devtools/hm_reader/hm_get_intv.F
35!|| hm_option_is_encrypted ../starter/source/devtools/hm_reader/hm_option_is_encrypted.F
36!|| hm_read_mat51_iform11 ../starter/source/materials/mat/mat051/hm_read_mat51_iform11.F
37!|| ie_bound ../starter/source/materials/mat/mat051/ie_bound.F
38!|| init_mat_keyword ../starter/source/materials/mat/init_mat_keyword.F
39!|| lecm51__check_initial_state ../starter/source/materials/mat/mat051/lecm51__check_initial_state.F
40!|| mat51_associate_eos ../starter/source/materials/mat/mat051/mat51_associate_eos.F90
41!||--- uses -----------------------------------------------------
42!|| elbuftag_mod ../starter/share/modules1/elbuftag_mod.F
43!|| mat51_associate_eos_mod ../starter/source/materials/mat/mat051/mat51_associate_eos.F90
44!|| message_mod ../starter/share/message_module/message_mod.F
45!|| submodel_mod ../starter/share/modules1/submodel_mod.F
46!||====================================================================
47 SUBROUTINE hm_read_mat51(UPARAM ,MAXUPARAM,NUPARAM ,ISRATE , IMATVIS ,
48 . NUVAR ,IFUNC ,MAXFUNC ,NFUNC , PARMAT ,
49 . UNITAB ,MAT_UID ,TITR ,MTAG , LSUBMODEL,
50 . PM ,MAT_PARAM ,MAT_IID ,IPM , NVARTMP ,
51 . NUMMAT)
52C-----------------------------------------------
53C D e s c r i p t i o n
54C-----------------------------------------------
55C Read MATERIAL LAW 51
56C
57C DUMMY ARGUMENTS DESCRIPTION:
58C ===================
59C
60C NAME DESCRIPTION
61C
62C PM MATERIAL ARRAY(REAL)
63C ISRATE FLAG FOR STRAIN RATE FILTERING
64C IMATVIS FLAG FOR VISCOSITY
65C UNITAB UNITS ARRAY
66C MAT_UID MATERIAL ID(INTEGER)
67C TITR MATERIAL TITLE
68C LSUBMODEL SUBMODEL STRUCTURE
69C UPARAM MATERIAL BUFFER
70C PARMAT ADDITIONAL PARAMETER FOR MATERIALS
71C
72C-----------------------------------------------
73C M o d u l e s
74C-----------------------------------------------
75 USE unitab_mod
76 USE elbuftag_mod
77 USE message_mod
78 USE submodel_mod
79 USE matparam_def_mod
81 USE ale_mod
83 USE multimat_param_mod , ONLY : m51_n0phas, m51_nvphas
84 USE mat51_associate_eos_mod , ONLY : mat51_associate_eos
85C-----------------------------------------------
86C I m p l i c i t T y p e s
87C-----------------------------------------------
88#include "implicit_f.inc"
89C-----------------------------------------------
90C C o m m o n B l o c k s
91C-----------------------------------------------
92#include "units_c.inc"
93#include "com01_c.inc"
94#include "param_c.inc"
95#include "scr03_c.inc"
96C-----------------------------------------------
97C D u m m y A r g u m e n t s
98C-----------------------------------------------
99 TYPE (UNIT_TYPE_),INTENT(IN) :: UNITAB
100 my_real, INTENT(INOUT) :: PM(NPROPM),PARMAT(100),UPARAM(MAXUPARAM)
101 INTEGER,INTENT(INOUT) :: IPM(NPROPMI)
102 INTEGER, INTENT(INOUT) :: ISRATE,IFUNC(MAXFUNC),NFUNC,MAXFUNC,MAXUPARAM,NUPARAM, NUVAR,IMATVIS
103 TYPE(mlaw_tag_),INTENT(INOUT) :: MTAG
104 INTEGER,INTENT(IN) :: MAT_UID !user id
105 INTEGER,INTENT(IN) :: MAT_IID !internal id
106 INTEGER,INTENT(IN) :: NUMMAT !total number of material laws in input fiile
107 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
108 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(NSUBMOD)
109 TYPE(matparam_struct_), TARGET ,INTENT(INOUT), DIMENSION(NUMMAT) :: MAT_PARAM
110 INTEGER,INTENT(INOUT) :: NVARTMP
111C-----------------------------------------------
112C L o c a l V a r i a b l e s
113C-----------------------------------------------
114 !---Global parameters
115 my_real vis,visv,pext,pmin
116 INTEGER MIP,NBMAT,IFLAG_BAK,IDX
117 !---EOS parameters
118 my_real :: RHO0, RHOR, DPDMU(4)
119 my_real :: av(4), rho0_(4),c0(4),c1(4), e0(4),pmin_(4),t0(4),c2(4),c3(4),c4(4),c5(4), gg(4)
120 my_real :: b1,b2,r1,r2,w,vdet,pcj,vcj, p0_glob
121 !---constitutive model
122 !------ Johnson-Cook
123 my_real :: y(4),bb(4),n(4),cc(4),epdr(4),cm(4),tmelt(4),thetl(4),plamx(4),sigmx(4),sph(4), xka(4),xkb(4)
124 !------ units
125 my_real :: fac_unit_time, fac_unit_sph
126 !------ Drucker-PRager
127 my_real :: nu(4),a0(4),a1(4),a2(4),amx(4),bunl(4),mumx(4),pstar(4),det,delta
128 !---NRF
129 my_real :: p0(4),ssp(4),lc(4),tcarp,tcar,abcs
130 !---INLET/OUTLET
131 INTEGER :: IOPT,IAV(4),IRHO(4),IE(4)
132 INTEGER :: I,IFLG,IERROR
133 INTEGER :: NITER
134 INTEGER :: IEXP, N_LC, IPLA_, IPLA(4), IBFRAC
135 INTEGER :: IVEL, IMID
136 INTEGER :: tMID(4)
137 !---temporary working arrays
138 my_real :: tav(4)
139 my_real :: einf(4),pfar,pini(4)
140 my_real :: ie_bound, ratio, sumvf,vel
141 !--- Messages/Output
142 CHARACTER*128 :: chain,chain1
143 CHARACTER*32 :: CAV(4),CRHO0(34),CE0(4),CPM(4),CC0(4),CSSP(4)
144 CHARACTER*32 :: CPEXT,CTCARP,CTCAR
145 !---booleans
146 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED, IFLG6_SUBMAT_DEFINED(4)
147 !
148 type(matparam_struct_) , pointer :: matparam
149C-----------------------------------------------
150C S o u r c e L i n e s
151C-----------------------------------------------
152 is_encrypted = .false.
153 is_available = .false.
154 israte=0
155 imatvis=0
156 matparam => mat_param(mat_iid)
157 !----------------!
158 mtag%L_SSP = 1
159 mtag%L_SIGV = 1
160 mtag%L_EINS = 1
161 mtag%G_EINS = 1
162 mtag%L_EINT = 1
163 mtag%G_EINT = 1
164 mtag%G_TEMP = 1
165 mtag%L_TEMP = 1
166 mtag%L_VK = 1
167 mtag%G_TB = 1
168 mtag%L_TB = 1
169 nuparam = 280
170 nfunc = 10
171 uparam(1:nuparam) = zero
172 ifunc(1:nfunc) = 0
173 p0(:) = zero
174 IF (alemuscl_param%IALEMUSCl > 0) alemuscl_param%I_LAW = 51 ! Communicate LAW to ALEMUSCL_MOD
175 iflg6_submat_defined(1:4)=.true.
176 !----------------!
177 niter = 10
178 n_lc = 0
179 iopt = 0
180 nuvar = (m51_n0phas + 4*m51_nvphas)
181 pext = zero
182 pfar = zero
183 vis = zero
184 visv = zero
185 fac_unit_sph = one
186 fac_unit_time = one
187 !----------------!
188 av(1:4) = zero
189 rho0_(1:4) = zero
190 e0(1:4) = zero
191 pmin_(1:4) = zero
192 gg(1:4) = zero
193 c0(1:4) = zero
194 c1(1:4) = zero
195 c2(1:4) = zero
196 c3(1:4) = zero
197 c4(1:4) = zero
198 c5(1:4) = zero
199 !----------------!
200 ssp(1:4) = zero
201 lc(1:4) = zero
202 tcarp = zero
203 tcar = zero
204 abcs = 0
205 iav(1:4) = 0
206 irho(1:4) = 0
207 ie(1:4) = 0
208 ivel = 0
209 vel = zero
210 iopt = 0
211 ratio = zero
212 !----------------!
213 y(1:4) = zero
214 bb(1:4) = zero
215 n(1:4) = zero
216 cc(1:4) = zero
217 epdr(1:4) = zero
218 cm(1:4) = zero
219 tmelt(1:4) = zero
220 thetl(1:4) = zero
221 plamx(1:4) = zero
222 sigmx(1:4) = zero
223 sph(1:4) = zero
224 t0(1:4) = zero
225 !----------------!
226 b1 = zero
227 b2 = zero
228 r1 = zero
229 r2 = zero
230 w = zero
231 vdet = zero
232 pcj = zero
233 vcj = zero
234 iexp = 0
235 ibfrac = 0
236 !----------------!
237 xka(1:4) = zero
238 xkb(1:4) = zero
239 a0(1:4) = zero
240 a1(1:4) = zero
241 a2(1:4) = zero
242 amx(1:4) = zero
243 bunl(1:4) = zero
244 mumx(1:4) = zero
245 pstar(1:4)=-infinity
246 nu(1:4) = zero
247 einf(1:4) =-infinity
248 !====================================================================!
249 ! IFLG == ALL (0,1,2,3,4,5,10,11,12) !
250 ! 0,1,3,10,11 : obsolete !
251 ! 2,4,5 : material boundary (going to be replaced with /EBCS/INLET !
252 ! 12 (new default since 2023.0) !
253 !====================================================================!
254 CALL hm_option_is_encrypted(is_encrypted)
255 !line-1
256 CALL hm_get_floatv('MAT_RHO' ,rho0, is_available, lsubmodel, unitab)
257 CALL hm_get_floatv('Refer_Rho' ,rhor, is_available, lsubmodel, unitab)
258 !line-2
259 ipla_ = 0 !Plasticity Flag > 0 means that at least one plastic submaterial.
260 ipla(1:4) = 0 !1:JCOOK, 2:DPRAG
261 CALL hm_get_intv ('MAT_Iflag' ,iflg ,is_available, lsubmodel)
262 iflag_bak=iflg
263 IF(invers_src >= 2023 .AND. iflg == 0)THEN
264 iflg = 12 !IForm 0,1,10,11 are obsolete input type since 2023.0
265 ! 2023.0 : IFLG=12 is the new default input type
266 ENDIF
267 IF(iflg == 11)THEN
268 CALL hm_get_intv ('Mach1', ipla(1), is_available, lsubmodel)
269 CALL hm_get_intv ('Mach2', ipla(2), is_available, lsubmodel)
270 CALL hm_get_intv ('Mach3', ipla(3), is_available, lsubmodel)
271 ENDIF
272 IF(iflg /= 11)THEN
273 ipla(1:4)=0
274 ENDIF
275 DO i=1,3
276 IF(ipla(i) < 0 .OR. ipla(i) > 2)ipla(i)=0
277 ENDDO
278 CALL hm_get_intv('NIP',nbmat,is_available,lsubmodel)
279 !----------------!
280 tav(1:4) = zero
281 tmid(1:4)= 0
282 matparam%multimat%old_data_format = 1
283 SELECT CASE(iflg)
284 !============================!
285 ! IFLG == 0 !
286 !============================!
287 CASE(0)
288 !necessarily INVERS_SRC < 2023 : otherwise default leads to IFLG=12
289 !line-3
290 CALL hm_get_floatv('PEXT' , pext , is_available, lsubmodel, unitab)
291 CALL hm_get_floatv('MAT_NU' , vis , is_available, lsubmodel, unitab)
292 CALL hm_get_floatv('MAT_Lamda', visv , is_available, lsubmodel, unitab)
293 DO i=1,3
294 CALL hm_get_float_array_index('MAT_ALPHA_Iflg0_phas' , av(i) ,i ,is_available, lsubmodel, unitab)
295 CALL hm_get_float_array_index('MAT_RHO_Iflg0_phas' , rho0_(i) ,i ,is_available, lsubmodel, unitab)
296 CALL hm_get_float_array_index('MAT_E_Iflg0_phas' , e0(i) ,i ,is_available, lsubmodel, unitab)
297 CALL hm_get_float_array_index('MAT_P_Iflg0_phas' , pmin_(i) ,i ,is_available, lsubmodel, unitab)
298 CALL hm_get_float_array_index('MAT_C0_Iflg0_phas' , c0(i) ,i ,is_available, lsubmodel, unitab)
299 CALL hm_get_float_array_index('MAT_C1_Iflg0_phas' , c1(i) ,i ,is_available, lsubmodel, unitab)
300 CALL hm_get_float_array_index('MAT_C2_Iflg0_phas' , c2(i) ,i ,is_available, lsubmodel, unitab)
301 CALL hm_get_float_array_index('MAT_C3_Iflg0_phas' , c3(i) ,i ,is_available, lsubmodel, unitab)
302 CALL hm_get_float_array_index('MAT_C4_Iflg0_phas' , c4(i) ,i ,is_available, lsubmodel, unitab)
303 CALL hm_get_float_array_index('MAT_C5_Iflg0_phas' , c5(i) ,i ,is_available, lsubmodel, unitab)
304 CALL hm_get_float_array_index('MAT_G_Iflg0_phas' , gg(i) ,i ,is_available, lsubmodel, unitab)
305 ENDDO
306 CALL hm_get_float_array_index_dim('MAT_P_Iflg0_phas' ,fac_unit_sph ,1 ,is_available, lsubmodel, unitab)
307 IF(gg(1)+gg(2)+gg(3)==zero)THEN
308 ipla_=0
309 ELSE
310 ipla_=1
311 IF(gg(1)>zero)ipla(1)=1
312 IF(gg(2)>zero)ipla(2)=1
313 IF(gg(3)>zero)ipla(3)=1
314 ENDIF
315 !============================!
316 ! IFLG == 1 !
317 !============================!
318 CASE(1)
319 iflg = 0
320 !obsolete law51-formulation
321 IF(invers_src>=2023)THEN
322 chain1='INPUT TYPE IFORM=1 IS OBSOLETE SINCE 2023 VERSION : IFORM=12 MUST BE USED'
323 CALL ancmsg(msgid=75, msgtype=msgerror, anmode=aninfo, i1=mat_uid,c1=titr,c2=chain1)
324 RETURN
325 ENDIF
326 !line-3
327 CALL hm_get_floatv('PEXT' , pext , is_available, lsubmodel, unitab)
328 CALL hm_get_floatv('MAT_NU' , vis , is_available, lsubmodel, unitab)
329 CALL hm_get_floatv('MAT_Lamda', visv , is_available, lsubmodel, unitab)
330 DO i=1,3
331 CALL hm_get_float_array_index('MAT_ALPHA_Iflg1_phas' ,av(i) ,i ,is_available, lsubmodel, unitab)
332 CALL hm_get_float_array_index('MAT_RHO_Iflg1_phas' ,rho0_(i) ,i ,is_available, lsubmodel, unitab)
333 CALL hm_get_float_array_index('MAT_E_Iflg1_phas' ,e0(i) ,i ,is_available, lsubmodel, unitab)
334 CALL hm_get_float_array_index('MAT_P_Iflg1_phas' ,pmin_(i) ,i ,is_available, lsubmodel, unitab)
335 CALL hm_get_float_array_index('MAT_C0_Iflg1_phas' ,c0(i) ,i ,is_available, lsubmodel, unitab)
336 CALL hm_get_float_array_index('MAT_C1_Iflg1_phas' ,c1(i) ,i ,is_available, lsubmodel, unitab)
337 CALL hm_get_float_array_index('MAT_C2_Iflg1_phas' ,c2(i) ,i ,is_available, lsubmodel, unitab)
338 CALL hm_get_float_array_index('MAT_C3_Iflg1_phas' ,c3(i) ,i ,is_available, lsubmodel, unitab)
339 CALL hm_get_float_array_index('MAT_C4_Iflg1_phas' ,c4(i) ,i ,is_available, lsubmodel, unitab)
340 CALL hm_get_float_array_index('MAT_C5_Iflg1_phas' ,c5(i) ,i ,is_available, lsubmodel, unitab)
341 CALL hm_get_float_array_index('MLAW51_G1' ,gg(i) ,i ,is_available, lsubmodel, unitab)
342 CALL hm_get_float_array_index('Sigma_Y1' ,y(i) ,i ,is_available, lsubmodel, unitab)
343 CALL hm_get_float_array_index('BB1' ,bb(i) ,i ,is_available, lsubmodel, unitab)
344 CALL hm_get_float_array_index('LAW51_N1' ,n(i) ,i ,is_available, lsubmodel, unitab)
345 CALL hm_get_float_array_index('CC1' ,cc(i) ,i ,is_available, lsubmodel, unitab)
346 CALL hm_get_float_array_index('e01' ,epdr(i) ,i ,is_available, lsubmodel, unitab)
347 CALL hm_get_float_array_index('CM1' ,cm(i) ,i ,is_available, lsubmodel, unitab)
348 CALL hm_get_float_array_index('T10' ,t0(i) ,i ,is_available, lsubmodel, unitab)
349 CALL hm_get_float_array_index('T_melt1' ,tmelt(i) ,i ,is_available, lsubmodel, unitab)
350 CALL hm_get_float_array_index('T_limit1' ,thetl(i) ,i ,is_available, lsubmodel, unitab)
351 CALL hm_get_float_array_index('Rhocv' ,sph(i) ,i ,is_available, lsubmodel, unitab)
352 CALL hm_get_float_array_index('E_max1' ,plamx(i) ,i ,is_available, lsubmodel, unitab)
353 CALL hm_get_float_array_index('sigma_max1' ,sigmx(i) ,i ,is_available, lsubmodel, unitab)
354 CALL hm_get_float_array_index('K_A1' ,xka(i) ,i ,is_available, lsubmodel, unitab)
355 CALL hm_get_float_array_index('K_B1' ,xkb(i) ,i ,is_available, lsubmodel, unitab)
356 ENDDO
357 CALL hm_get_float_array_index_dim('Rhocv' ,fac_unit_sph ,1 ,is_available, lsubmodel, unitab)
358 IF(gg(1)+gg(2)+gg(3)==zero)THEN
359 ipla_=0
360 ELSE
361 ipla_=1
362 IF(gg(1)>zero)ipla(1)=1
363 IF(gg(2)>zero)ipla(2)=1
364 IF(gg(3)>zero)ipla(3)=1
365 ENDIF
366 !============================!
367 ! IFLG == 2 !
368 !============================!
369 CASE(2)
370 ale%GLOBAL%IS_BOUNDARY_MATERIAL = .true.
371 CALL hm_get_floatv('SCALE' ,abcs ,is_available, lsubmodel, unitab)
372 CALL hm_get_floatv('PEXT' ,pext ,is_available, lsubmodel, unitab)
373 CALL hm_get_floatv('VEL_in' ,vel ,is_available, lsubmodel, unitab)
374 CALL hm_get_intv ('Fct_ID_vel' ,ivel ,is_available, lsubmodel)
375 DO i=1,3
376 CALL hm_get_float_array_index('MAT_ALPHA_Iflg2_phas' ,av(i) ,i ,is_available, lsubmodel, unitab)
377 CALL hm_get_float_array_index('MAT_RHO_Iflg2_phas' ,rho0_(i),i ,is_available, lsubmodel, unitab)
378 CALL hm_get_float_array_index('MAT_E_Iflg2_phas' ,e0(i) ,i ,is_available, lsubmodel, unitab)
379 CALL hm_get_int_array_index ('ABG_N1' ,iav(i) ,i ,is_available, lsubmodel)
380 CALL hm_get_int_array_index ('ABG_N2' ,irho(i) ,i ,is_available, lsubmodel)
381 CALL hm_get_int_array_index ('ABG_N3' ,ie(i) ,i ,is_available, lsubmodel)
382 CALL hm_get_float_array_index('MAT_C1_Iflg2_phas' ,c1(i) ,i ,is_available, lsubmodel, unitab)
383 CALL hm_get_float_array_index('MAT_C2_Iflg2_phas' ,c2(i) ,i ,is_available, lsubmodel, unitab)
384 CALL hm_get_float_array_index('MAT_C3_Iflg2_phas' ,c3(i) ,i ,is_available, lsubmodel, unitab)
385 CALL hm_get_float_array_index('MAT_C4_Iflg2_phas' ,c4(i) ,i ,is_available, lsubmodel, unitab)
386 CALL hm_get_float_array_index('mat_c5_iflg2_phas' ,C5(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
387 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_p_iflg2_phas' ,PMIN_(I),I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
388 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_c0_iflg2_phas' ,C0(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
389 ENDDO
390 CALL HM_GET_FLOAT_ARRAY_INDEX_DIM('mat_p_iflg2_phas' ,FAC_UNIT_SPH ,1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
391 CALL HM_GET_FLOATV_DIM('scale' ,FAC_UNIT_TIME ,IS_AVAILABLE, LSUBMODEL, UNITAB)
392 !============================!
393 ! IFLG == 3 !
394 !============================!
395 CASE(3)
396 !OBSOLETE use IFLG=6 instead
397 ALE%GLOBAL%IS_BOUNDARY_MATERIAL=.TRUE.
398 IF(INVERS_SRC>=2023)THEN
399 chain1='input TYPE iform=3 is obsolete since 2023 version : iform=6 must be used'
400 CALL ANCMSG(MSGID=75, MSGTYPE=MSGERROR, ANMODE=ANINFO, I1=MAT_UID,C1=TITR,C2=chain1)
401 RETURN
402 ENDIF
403 DO I=1,3
404 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_alpha_iflg3_phas' ,AV(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
405 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_rho_iflg3_phas' ,RHO0_(I),I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
406 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_e_iflg3_phas' ,E0(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
407 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_p_iflg3_phas' ,PMIN_(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
408 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_c0_iflg3_phas' ,C0(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
409 ENDDO
410 CALL HM_GET_FLOAT_ARRAY_INDEX_DIM('mat_p_iflg3_phas' ,FAC_UNIT_SPH ,1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
411 !============================!
412 ! IFLG == 4 !
413 !============================!
414 CASE(4)
415 ALE%GLOBAL%IS_BOUNDARY_MATERIAL = .TRUE.
416 CALL HM_GET_FLOATV('scale' ,ABCS ,IS_AVAILABLE, LSUBMODEL, UNITAB)
417 CALL HM_GET_FLOATV('pext' ,PEXT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
418 DO I=1,3
419 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_alpha_iflg2_phas' ,AV(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
420 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_rho_iflg2_phas' ,RHO0_(I),I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
421 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_e_iflg2_phas' ,E0(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
422 CALL HM_GET_INT_ARRAY_INDEX ('abg_n1' ,IAV(I) ,I ,IS_AVAILABLE, LSUBMODEL)
423 CALL HM_GET_INT_ARRAY_INDEX ('abg_n2' ,IRHO(I) ,I ,IS_AVAILABLE, LSUBMODEL)
424 CALL HM_GET_INT_ARRAY_INDEX ('abg_n3' ,IE(I) ,I ,IS_AVAILABLE, LSUBMODEL)
425 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_c0_iflg2_phas' ,C0(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
426 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_c1_iflg2_phas' ,C1(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
427 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_c4_iflg2_phas' ,C4(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
428 C5(I)=C4(I) ! no need to enter C5 (=C4) since 14.0
429 ENDDO
430 CALL HM_GET_FLOAT_ARRAY_INDEX_DIM('mat_c0_iflg2_phas' ,FAC_UNIT_SPH ,1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
431 CALL HM_GET_FLOATV_DIM('scale' ,FAC_UNIT_TIME ,IS_AVAILABLE, LSUBMODEL, UNITAB)
432 !============================!
433 ! IFLG == 5 !
434 !============================!
435 CASE(5)
436 ALE%GLOBAL%IS_BOUNDARY_MATERIAL = .TRUE.
437 CALL HM_GET_FLOATV('scale' ,ABCS ,IS_AVAILABLE, LSUBMODEL, UNITAB)
438 CALL HM_GET_FLOATV('pext' ,PEXT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
439 DO I=1,3
440 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_alpha_iflg2_phas' ,AV(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
441 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_rho_iflg2_phas' ,RHO0_(I),I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
442 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_e_iflg2_phas' ,E0(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
443 CALL HM_GET_INT_ARRAY_INDEX ('abg_n1' ,IAV(I) ,I ,IS_AVAILABLE, LSUBMODEL)
444 CALL HM_GET_INT_ARRAY_INDEX ('abg_n2' ,IRHO(I) ,I ,IS_AVAILABLE, LSUBMODEL)
445 CALL HM_GET_INT_ARRAY_INDEX ('abg_n3' ,IE(I) ,I ,IS_AVAILABLE, LSUBMODEL)
446 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_c0_iflg2_phas' ,C0(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
447 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_c1_iflg2_phas' ,C1(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
448 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_p_iflg2_phas' ,PMIN_(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
449 ENDDO
450 CALL HM_GET_FLOAT_ARRAY_INDEX_DIM('mat_p_iflg2_phas' ,FAC_UNIT_SPH ,1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
451 CALL HM_GET_FLOATV_DIM('scale' ,FAC_UNIT_TIME ,IS_AVAILABLE, LSUBMODEL, UNITAB)
452 !============================!
453 ! IFLG == 6 !
454 !============================!
455 CASE(6)
456 ALE%GLOBAL%IS_BOUNDARY_MATERIAL = .TRUE.
457 M51_IFLG6 = 1
458 IERROR = 0
459 CALL HM_GET_FLOATV('pext' ,PEXT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
460 CALL HM_GET_FLOATV('mat_tcp' ,TCARP ,IS_AVAILABLE, LSUBMODEL, UNITAB)
461 CALL HM_GET_FLOATV('mat_tcalpha' ,TCAR ,IS_AVAILABLE, LSUBMODEL, UNITAB)
462 DO I=1,3
463 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_alpha_iflg0_phas' ,AV(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
464 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_rho_iflg0_phas' ,RHO0_(I),I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
465 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_e_iflg0_phas' ,E0(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
466 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_p_iflg0_phas' ,PMIN_(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
467 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_p0_iflg0_phas' ,C0(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
468 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_ssp0_iflg0_phas' ,SSP(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
469.AND..AND..AND..AND..AND. IF(AV(I)==ZERO RHO0_(I)==ZERO E0(I)==ZERO PMIN_(I)==ZERO C0(I)==ZERO SSP(I)==ZERO )THEN
470 IFLG6_SUBMAT_DEFINED(I)=.FALSE.
471 ENDIF
472 ENDDO
473 CALL HM_GET_FLOAT_ARRAY_INDEX_DIM('mat_p0_iflg0_phas' ,FAC_UNIT_SPH ,1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
474 IF(TCAR == ZERO)TCAR=INFINITY
475 CPEXT (1:32) = ' auto ' ;
476 IF (PEXT /= ZERO) WRITE(CPEXT ,FMT='(e12.4)')PEXT
477 CTCARP(1:32) = ' auto ' ;
478 IF (TCARP /= ZERO) WRITE(CTCARP ,FMT='(e12.4)')TCARP
479 CTCAR (1:32) = ' auto ' ;
480 IF (TCAR /= ZERO) WRITE(CTCAR ,FMT='(e12.4)')TCAR
481 DO I=1,3
482 CAV (I)= ' auto ' ;IF (AV(I) /= ZERO) WRITE(CAV(I) ,FMT='(e12.4)')AV(I)
483 CRHO0(I)= ' auto ' ;IF (RHO0_(I)/= ZERO) WRITE(CRHO0(I) ,FMT='(e12.4)')RHO0_(I)
484 CE0 (I)= ' auto ' ;IF (E0(I) /= ZERO) WRITE(CE0(I) ,FMT='(e12.4)')E0(I)
485 CPM (I)= ' auto ' ;IF (PMIN_(I) /= ZERO) WRITE(CPM(I) ,FMT='(e12.4)')PMIN_(I)
486 CC0 (I)= ' auto ' ;IF (C0(I) /= ZERO) WRITE(CC0(I) ,FMT='(e12.4)')C0(I)
487 CSSP (I)= ' auto ' ;IF (SSP(I) /= ZERO) WRITE(CSSP(I) ,FMT='(e12.4)')SSP(I)
488 ENDDO
489
490 !============================!
491 ! IFLG == 10 !
492 !============================!
493 CASE(10)
494 IFLG=1
495 IEXP=1
496 !obsolete law51-formulation
497 IF(INVERS_SRC>=2023)THEN
498 chain1='input TYPE iform=10 is obsolete since 2023 version : iform=12 must be used'
499 CALL ANCMSG(MSGID=75, MSGTYPE=MSGERROR, ANMODE=ANINFO, I1=MAT_UID,C1=TITR,C2=chain1)
500 RETURN
501 ENDIF
502 CALL HM_GET_FLOATV('pext' ,PEXT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
503 CALL HM_GET_FLOATV('mat_nu' ,VIS ,IS_AVAILABLE, LSUBMODEL, UNITAB)
504 CALL HM_GET_FLOATV('mat_lamda' ,VISV ,IS_AVAILABLE, LSUBMODEL, UNITAB)
505 DO I=1,3
506 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_alpha_iflg10_phas' ,AV(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
507 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_rho_iflg10_phas' ,RHO0_(I),I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
508 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_e_iflg10_phas' ,E0(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
509 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_p_iflg10_phas' ,PMIN_(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
510 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_c0_iflg10_phas' ,C0(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
511 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_c1_iflg10_phas' ,C1(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
512 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_c2_iflg10_phas' ,C2(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
513 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_c3_iflg10_phas' ,C3(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
514 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_c4_iflg10_phas' ,C4(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
515 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_c5_iflg10_phas' ,C5(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
516 CALL HM_GET_FLOAT_ARRAY_INDEX('mlaw51_g10' ,GG(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
517 CALL HM_GET_FLOAT_ARRAY_INDEX('sigma_y10' ,Y(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
518 CALL HM_GET_FLOAT_ARRAY_INDEX('bb10' ,BB(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
519 CALL HM_GET_FLOAT_ARRAY_INDEX('law51_n10' ,N(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
520 CALL HM_GET_FLOAT_ARRAY_INDEX('cc10' ,CC(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
521 CALL HM_GET_FLOAT_ARRAY_INDEX('e010' ,EPDR(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
522 CALL HM_GET_FLOAT_ARRAY_INDEX('cm10' ,CM(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
523 CALL HM_GET_FLOAT_ARRAY_INDEX('t10_10' ,T0(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
524 CALL HM_GET_FLOAT_ARRAY_INDEX('t_melt10' ,TMELT(I),I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
525 CALL HM_GET_FLOAT_ARRAY_INDEX('t_limit10' ,THETL(I),I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
526 CALL HM_GET_FLOAT_ARRAY_INDEX('rhocv10' ,SPH(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
527 CALL HM_GET_FLOAT_ARRAY_INDEX('e_max10' ,PLAMX(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
528 CALL HM_GET_FLOAT_ARRAY_INDEX('sigma_max10' ,SIGMX(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
529 CALL HM_GET_FLOAT_ARRAY_INDEX('k_a1' ,XKA(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
530 CALL HM_GET_FLOAT_ARRAY_INDEX('k_b1' ,XKB(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
531 ENDDO
532 CALL HM_GET_FLOAT_ARRAY_INDEX_DIM('rhocv10' ,FAC_UNIT_SPH ,1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
533 !High Explosive
534 CALL HM_GET_FLOATV('mlaw51_alpha' ,AV(4) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
535 CALL HM_GET_FLOATV('mlaw51_rho' ,RHO0_(4) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
536 CALL HM_GET_FLOATV('mlaw51_e0' ,E0(4) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
537 CALL HM_GET_FLOATV('mlaw51_pmin' ,PMIN_(4) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
538 CALL HM_GET_FLOATV('mlaw51_c0' ,C0(4) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
539 CALL HM_GET_FLOATV('mlaw51_b1' ,B1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
540 CALL HM_GET_FLOATV('mlaw51_b2' ,B2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
541 CALL HM_GET_FLOATV('mlaw51_r1' ,R1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
542 CALL HM_GET_FLOATV('mlaw51_r2' ,R2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
543 CALL HM_GET_FLOATV('mlaw51_w' ,W ,IS_AVAILABLE, LSUBMODEL, UNITAB)
544 CALL HM_GET_FLOATV('mlaw51_d' ,VDET ,IS_AVAILABLE, LSUBMODEL, UNITAB)
545 CALL HM_GET_FLOATV('mlaw51_pcj' ,PCJ ,IS_AVAILABLE, LSUBMODEL, UNITAB)
546 CALL HM_GET_FLOATV('mlaw51_c14' ,C1(4) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
547 CALL HM_GET_INTV('mat_ibfrac' ,IBFRAC ,IS_AVAILABLE, LSUBMODEL)
548 IF(GG(1)+GG(2)+GG(3)==ZERO)THEN
549 IPLA_=0
550 ELSE
551 IPLA_=1
552 IF(GG(1)>ZERO)IPLA(1)=1
553 IF(GG(2)>ZERO)IPLA(2)=1
554 IF(GG(3)>ZERO)IPLA(3)=1
555 ENDIF
556 !============================!
557 ! IFLG == 11 !
558 !============================!
559 CASE(11)
560 IFLG=1
561 IEXP=1
562 !obsolete law51-formulation
563 IF(INVERS_SRC>=2023)THEN
564 chain1='input TYPE iform=11 is obsolete since 2023 version : iform=12 must be used'
565 CALL ANCMSG(MSGID=75, MSGTYPE=MSGERROR, ANMODE=ANINFO, I1=MAT_UID,C1=TITR,C2=chain1)
566 RETURN
567 ENDIF
568 CALL HM_READ_MAT51_IFORM11(
569 . AV , RHO0_ ,E0 , PMIN_ , C0 ,
570 . C1 , C2 ,C3 , C4 , C5 ,
571 . IPLA , GG ,Y , BB , N ,
572 . CC , EPDR ,CM , T0 , TMELT ,
573 . THETL , SPH ,PLAMX , SIGMX , XKA ,
574 . XKB , NU ,A0 , A1 , A2 ,
575 . AMX ,
576 . B1 , B2 ,R1 , R2, W,
577 . VDET , PCJ ,IBFRAC , PEXT, VIS,
578 . VISV , LSUBMODEL, UNITAB)
579 CALL HM_GET_FLOAT_ARRAY_INDEX_DIM('damp1' ,FAC_UNIT_SPH ,1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
580 !Shear Modulus for DPRAG input
581.AND. IF(GG(1)==ZEROIPLA(1)==2)GG(1)=Y(1)/TWO/(ONE+NU(1))
582.AND. IF(GG(2)==ZEROIPLA(2)==2)GG(2)=Y(2)/TWO/(ONE+NU(2))
583.AND. IF(GG(3)==ZEROIPLA(3)==2)GG(3)=Y(3)/TWO/(ONE+NU(3))
584 !Plasticity flags
585 IPLA_=0
586 IF(GG(1)+GG(2)+GG(3) /= ZERO)THEN
587 IPLA_=1
588 IF(GG(1)==ZERO)IPLA(1)=0
589 IF(GG(2)==ZERO)IPLA(2)=0
590 IF(GG(3)==ZERO)IPLA(3)=0
591 ENDIF
592 !============================!
593 ! IFLG == 12 !
594 !============================!
595 CASE(12)
596 MATPARAM%multimat%old_data_format = 0
597 IFLG = 12
598 IEXP = 1
599 NBMAT = 0
600 tAV(1:4) = ZERO
601 tMID(1:4)= 0
602 NVARTMP = 6 ! granular plastic model 3*2
603 CALL HM_GET_FLOATV('mat_nu' ,VIS ,IS_AVAILABLE, LSUBMODEL, UNITAB)
604 CALL HM_GET_FLOATV('mat_lamda' ,VISV ,IS_AVAILABLE, LSUBMODEL, UNITAB)
605 CALL HM_GET_INTV ('mip' ,MIP ,IS_AVAILABLE, LSUBMODEL)
606 IMID = 0
607 SUMVF = ZERO
608 DO I=1,MIP
609 CALL HM_GET_INT_ARRAY_INDEX ('materialids' ,tMID(I) ,I,IS_AVAILABLE, LSUBMODEL)
610 CALL HM_GET_FLOAT_ARRAY_INDEX('mat_alpha_iflg12_phas' ,tAV(I) ,I,IS_AVAILABLE, LSUBMODEL, UNITAB)
611 ENDDO
612 UPARAM(09:12) = tMID(1:4)
613 UPARAM(13:16) = tAV(1:4)
614 AV(1:4) = tAV(1:4)
615 IF(MIP==0)THEN
616 chain1='submaterial DATA not found '
617 CALL ANCMSG(MSGID=99,MSGTYPE=MSGERROR,ANMODE=ANINFO,I1=MAT_UID,C1=TITR,C2=chain1)
618 RETURN
619 ENDIF
620 DO I=1,MIP
621 IF(tMID(I) <= 0)THEN
622 chain(1:10)=' '
623 write(chain(1:10),'(i10)')tMID(I)
624 chain1='incorrect material identifier '//chain(1:10)
625 CALL ANCMSG(MSGID=99,MSGTYPE=MSGERROR,ANMODE=ANINFO,I1=MAT_UID,C1=TITR,C2=chain1)
626 tMID(I)=0
627 RETURN
628 ENDIF
629 ENDDO
630 DO I=1,MIP
631.OR. IF(tAV(I)<ZERO tAV(I)>ONE)THEN
632 chain(1:20)=' '
633 write(chain(1:20),'(e20.14)')tAV(I)
634 chain1='volume fraction must be between 0.0 and 1.0 , READ VALUE is '// chain(1:20)
635 CALL ANCMSG(MSGID=99,MSGTYPE=MSGERROR,ANMODE=ANINFO,I1=MAT_UID,C1=TITR,C2=chain1)
636 RETURN
637 ENDIF
638 ENDDO
639 SUMVF = SUM(tAV(1:4))
640 IF(SUMVF>ONE)THEN
641 chain(1:20)=' '
642 write(chain(1:20),'(f20.8)')SUMVF
643 chain1='sum of volume fraction must be equal to 1.0, current sum is '// chain(1:20)
644 CALL ANCMSG(MSGID=99,MSGTYPE=MSGERROR,ANMODE=ANINFO,I1=MAT_UID,C1=TITR,C2=chain1)
645 RETURN
646 ENDIF
647 !============================!
648 ! IFLG == NOT VALID !
649 !============================!
650 CASE DEFAULT
651 !not correct iform value
652 chain1='incorrect iform VALUE '
653 CALL ANCMSG(MSGID=99,MSGTYPE=MSGERROR,ANMODE=ANINFO_BLIND_1,I1=MAT_UID,C1=TITR,C2=chain1)
654 RETURN
655 END SELECT
656 !============================!
657 ! PLASTICITY DEFAULT !
658 !============================!
659 IF(RATIO<=ZERO)THEN
660 RATIO = 0.25D00 !ONE is for previous formulation (permitted large volume change)
661 ENDIF
662 IF(IPLA_>0)THEN
663 MTAG%G_EPSD = 1
664 MTAG%L_EPSD = 1
665 MTAG%G_PLA = 1
666 MTAG%L_PLA = 1
667.OR..OR. IF(IPLA(1) == 2 IPLA(2) == 2 IPLA(3) == 2)THEN
668 MTAG%G_EPSQ = 1
669 MTAG%L_EPSQ = 1
670 ENDIF
671 ENDIF
672 IF(IEXP>0)THEN
673 MTAG%G_BFRAC = 1
674 MTAG%L_BFRAC = 1
675 ENDIF
676 IF(IFLG == 12)THEN
677 MTAG%G_EPSD = 1
678 MTAG%L_EPSD = 1
679 MTAG%G_PLA = 1
680 MTAG%L_PLA = 1
681 MTAG%G_EPSQ = 1
682 MTAG%L_EPSQ = 1
683 MTAG%G_BFRAC = 1
684 MTAG%L_BFRAC = 1
685 ENDIF
686 DO I=1,3
687 IF(IPLA(I) == 2)THEN
688.AND. IF(A2(I)==ZEROA1(I)/=ZERO)THEN !(A21=A11=ZERO => error message)
689 PSTAR(I)=-A0(I)/A1(I)
690 ELSEIF(A2(I)/=ZERO)THEN
691 DELTA = A1(I)*A1(I)-FOUR*A0(I)*A2(I)
692 !If intersection with the axis
693 IF(DELTA >= ZERO)THEN
694 DELTA=SQRT(DELTA)
695 PSTAR(I) = (-A1(I)+DELTA)/TWO/A2(I)
696
697 ELSE
698 ! PSTAR(I) = -A1(I)/TWO/A2(I) !no let user do what he wants
699 PSTAR(I) = -INFINITY
700 chain='submat-0 : yield surface has no root. '
701 write(chain(8:8),'(i1.1)')I
702 CALL ANCMSG(MSGID=829,MSGTYPE=MSGWARNING,ANMODE=ANINFO,I1=51,I2=MAT_UID,C1='warning',C2=TITR,C3=chain)
703 ENDIF
704 ELSE
705 !do nothing let user do what he wants
706 ENDIF
707 ENDIF
708 ENDDO
709C |============================!
710C | DEFAULT FLAGS !
711C !============================!
712 IF(IOPT < 0)IOPT=0 !check possible values otherwise set to debaut one.
713 !IF(IOPT >= 4)IOPT=0 ! does not exist
714 IF (N_LC <= 0)THEN
715 IF(IOPT==1)THEN
716 N_LC=100
717 ELSE
718 N_LC=1000
719 ENDIF
720 ENDIF
721 IF(ABCS==ZERO) ABCS= ONE*FAC_UNIT_TIME
722 PMIN = -PEXT
723 DO I=1,4
724 ! RhoCp
725 IF(SPH(I) == ZERO) SPH(I) = ONE * FAC_UNIT_SPH
726 !JCook exponent
727 IF(N(I) == ZERO) N(I) = ONE
728 !Initial Temperature
729 IF(T0(I) == ZERO) T0(I) = THREE100
730 !MAximum plastic Strain
731 IF(PLAMX(I) == ZERO) PLAMX(I) = INFINITY
732 !Maximum Stress
733 IF(SIGMX(I) == ZERO) SIGMX(I) = INFINITY
734 !Melting Temperature
735 IF(TMELT(I) == ZERO) TMELT(I) = INFINITY
736 !Limit Temperature
737 IF(THETL(I) == ZERO) THETL(I) = INFINITY
738 !Thermal condictivity
739 IF(XKA(I) == ZERO) XKA(I) = EM20
740 !Johnson-Cook parameters
741 IF(EPDR(I) == ZERO) EPDR(I) = ONE
742 !Drucker-Prager maximum values
743 IF(AMX(I) == ZERO) AMX(I) = INFINITY
744 !Drucker-Prager Poisson's coefficient
745 IF(nu(i) == zero) nu(i) = zep2
746 ENDDO
747 !Drucker-Prager \B5max1, \B5max2, \B5max3
748 DO i=1,3
749 IF(mumx(i) == zero .AND. bunl(i) /= zero)THEN
750 IF(c3(i) == zero)THEN
751 IF(c2(i) == zero)THEN
752 mumx(i)=infinity
753 ELSE
754 mumx(i)=(bunl(i)-c1(i))/(two*c2(i))
755 ENDIF
756 ELSE
757 det=sqrt(c2(i)**2 + three*c3(i)*(bunl(i)-c1(i)))
758 mumx(i)=(det-c2(i))/(three*c3(i))
759 ENDIF
760 ENDIF
761 ENDDO
762 !Drucker-Prager unload modulus
763 DO i=1,3
764 IF(bunl(i) == zero) bunl(i) = c1(i)
765 ENDDO
766 !Minimum Pressure (GGi must be calculated whatever is yield criteria)
767 IF(iflg <= 1.OR.iflg == 11)THEN
768 DO i=1,3
769 IF (pmin_(i) == zero) THEN
770 IF(gg(i) == zero)THEN
771 pmin_(i) = -pext
772 ELSE
773 pmin_(i) = -infinity
774 ENDIF
775 ENDIF
776 ENDDO
777 IF (pmin_(4) == zero) THEN
778 pmin_(4) = -infinity
779 ENDIF
780 ENDIF
781 !EXPLOSIVE C14
782 IF(rho0_(4) > zero)THEN
783 IF(c1(4) <= zero)THEN
784 chain1='BULK MODULUS C14 MUST BE PROVIDED FOR UNREACTED EXPLOSIVE'
785 CALL ancmsg(msgid=99,msgtype=msgerror,anmode=aninfo,i1=mat_uid,c1=titr,c2=chain1)
786 RETURN
787 ENDIF
788 IF(vdet <= zero)THEN
789 chain1='DETONATION VELOCITY MUST BE INPUT FOR EXPLOSIVE SUBMATERIAL'
790 CALL ancmsg(msgid=99,msgtype=msgerror,anmode=aninfo,i1=mat_uid,c1=titr,c2=chain1)
791 RETURN
792 ENDIF
793 ENDIF
794 !============================!
795 ! CHECKING INITIAL STATE !
796 ! *INITIAL PRESSURE !
797 ! *DENSITIES !
798 ! *VOLUMETRIC FRACTION !
799 !============================!
800 !Check is done only for multimaterial law (iflg=0|1), inlet/outlet are skipped.
801 IF (iflg /= 12) THEN
803 . av, rho0_, c0, c1, c2, c3, c4, c5,
804 . e0, pm, rho0, rhor, iexp, pext, iflg,
805 . a1, a2, ipla,
806 . mat_uid ,titr,
807 . ssp(1),ssp(2),ssp(3),ssp(4),
808 . lc(1), lc(2), lc(3), lc(4),
809 . pini)
810 !Inferior Boundary for Energy. It ensure EOS stability.
811 !Inf(Eint), def=-INFINITY
812 !If P0=Pext+C0 >0 then de/d>0 then extremum in expansion and can be calculated (if exists) without C2 and C3
813 !otherwise C2 and C3 are non zero and extremum calculation is complicated.
814 ! It is approximated with C2=C3=0 which is inferior thanks to C2, C3 sign.
815 DO i=1,3
816 einf(i)=ie_bound(pext,pmin_(i),c0(i),c1(i),c2(i),c3(i),c4(i),c5(i),e0(i))
817 ENDDO
818 einf(4)=zero
819 END IF
820 !sound speed initialization loi51
821 IF(iflg == 0 .OR. iflg == 1)THEN
822 DO i=1,3
823 p0(i) = c0(i)+c4(i)*e0(i)
824 dpdmu(i) = (c1(i)+c5(i)*e0(i)) + c4(i)*(pext+p0(i))
825 IF(rho0_(i) /= zero) ssp(i) = sqrt( (dpdmu(i) + two_third*gg(i)) / rho0_(i) ) !warning GG = 2*G => TWO_THIRD*GG = FOUR_OVER_3*G
826 ENDDO
827 p0(4) = c0(4)
828 ssp(4) = vdet
829 ENDIF
830
831 !filling data structure for EMBEDDED EoS (OLD FORMAT)
832 ! this way we can use the generic datastructure %MULTIMAT%pEOS%EOS(submat_id) to retrieve EoS parameters
833 IF(matparam%multimat%old_data_format == 1)THEN
834 CALL matparam%multimat%EOS_CONSTRUCT !allocate 4 EoS with NUPARAM=6 etc...
835 DO i=1,3
836 matparam%multimat%eos(i)%PSH = +pext
837 matparam%multimat%eos(i)%E0 = e0(i)
838 matparam%multimat%eos(i)%PMIN = pmin_(i)
839 matparam%multimat%eos(i)%UPARAM(1) = (c0(i)+pext)-pext
840 matparam%multimat%eos(i)%UPARAM(2) = c1(i)
841 matparam%multimat%eos(i)%UPARAM(3) = c2(i)
842 matparam%multimat%eos(i)%UPARAM(4) = c3(i)
843 matparam%multimat%eos(i)%UPARAM(5) = c4(i)
844 matparam%multimat%eos(i)%UPARAM(6) = c5(i)
845 matparam%multimat%eos(i)%UPARAM(7) = zero
846 ENDDO
847 CALL mat51_associate_eos(mat_param,nummat,mat_iid)
848 ENDIF
849
850 !============================!
851 ! Output through UPARAM(*) !
852 !============================!
853 uparam(1) = vis
854 uparam(2) = two*vis
855 uparam(3) = (visv-uparam(2))*third
856 uparam(4) = av(1)
857 uparam(5) = av(2)
858 uparam(6) = av(3)
859 uparam(46) = av(4)
860 uparam(7) = pfar
861 uparam(8) = pext
862 uparam(55) = iexp
863 uparam(31) = iflg
864 uparam(73) = niter
865 uparam(74) = ratio
866 uparam(76) = iflg
867 IF (iflg /= 12) THEN
868 uparam(9) = rho0_(1)
869 uparam(10) = rho0_(2)
870 uparam(11) = rho0_(3)
871 uparam(47) = rho0_(4)
872 uparam(12) = c1(1)
873 uparam(13) = c1(2)
874 uparam(14) = c1(3)
875 uparam(15) = c2(1)
876 uparam(16) = c2(2)
877 uparam(17) = c2(3)
878 uparam(18) = c3(1)
879 uparam(20) = c3(2)
880 uparam(21) = c3(3)
881 uparam(22) = c4(1)
882 uparam(23) = c4(2)
883 uparam(24) = c4(3)
884 uparam(25) = c5(1)
885 uparam(26) = c5(2)
886 uparam(27) = c5(3)
887 uparam(28) = two*gg(1)
888 uparam(29) = two*gg(2)
889 uparam(30) = two*gg(3)
890 uparam(31) = iflg
891 uparam(32) = e0(1)
892 uparam(33) = e0(2)
893 uparam(34) = e0(3)
894 uparam(35) = c0(1)
895 uparam(36) = c0(2)
896 uparam(37) = c0(3)
897 uparam(38) = abcs
898 uparam(39) = pmin_(1)
899 uparam(40) = pmin_(2)
900 uparam(41) = pmin_(3)
901 uparam(42) = vdet
902 uparam(43) = pcj
903 IF(pcj > em20)THEN
904 uparam(44) = rho0_(4) * vdet**2 / pcj
905 ELSE
906 uparam(44) = infinity
907 END IF
908 vcj = one - one/uparam(44)
909 IF(rho0_(4)==zero) uparam(47) = em20 !RHO0_(4)
910 uparam(48) = e0(4)
911 uparam(49) = c0(4)
912 uparam(50) = c1(4)
913 uparam(45) = b1
914 uparam(51) = b2
915 uparam(52) = r1
916 uparam(53) = r2
917 uparam(54) = w
918 uparam(55) = iexp
919 uparam(56) = pmin_(4)
920 uparam(57) = c0(1)+c4(1)*e0(1)
921 uparam(58) = c0(2)+c4(2)*e0(2)
922 uparam(59) = c0(3)+c4(3)*e0(3)
923 uparam(60) = c0(4)
924 uparam(61) = iopt
925 uparam(62) = one/n_lc
926 uparam(63) = ipla_
927 uparam(64) = ipla(1)
928 uparam(65) = ipla(2)
929 uparam(66) = ipla(3)
930 uparam(67) = ipla(4)
931 uparam(68) = ibfrac
932 uparam(69) = rho0_(1) * av(1) + rho0_(2) * av(2) + rho0_(3) * av(3) + rho0_(4) * av(4)
933 uparam(70) = tcarp
934 uparam(71) = tcar
935 uparam(72) = infinity !P0_NRF
936 uparam(75) = vel
937 uparam(81) = zero !visc1
938 uparam(82) = zero !visc2
939 uparam(83) = zero !visc3
940 uparam(84) = zero !visc4
941 idx=100
942 DO i=1,3
943 uparam(idx+01) = gg(i)
944 uparam(idx+02) = y(i)
945 uparam(idx+03) = bb(i)
946 uparam(idx+04) = n(i)
947 uparam(idx+05) = cc(i)
948 uparam(idx+06) = epdr(i)
949 uparam(idx+07) = cm(i)
950 uparam(idx+08) = tmelt(i)
951 uparam(idx+09) = thetl(i)
952 uparam(idx+10) = plamx(i)
953 uparam(idx+11) = sigmx(i)
954 uparam(idx+12) = sph(i)
955 uparam(idx+13) = t0(i)
956 uparam(idx+14) = xka(i)
957 uparam(idx+15) = xkb(i)
958 uparam(idx+16) = a0(i)
959 uparam(idx+17) = a1(i)
960 uparam(idx+18) = a2(i)
961 uparam(idx+19) = amx(i)
962 uparam(idx+20) = mumx(i)
963 uparam(idx+21) = bunl(i)
964 uparam(idx+22) = nu(i)
965 uparam(idx+23) = pstar(i)
966 uparam(idx+24) = ssp(i)
967 uparam(idx+25) = lc(i)
968 uparam(idx+26) = rho0_(i)*ssp(i)*ssp(i)
969 idx=idx+50
970 ENDDO
971 !I=4
972 uparam(258) = tmelt(4)
973 uparam(259) = thetl(4)
974 uparam(262) = sph(4)
975 uparam(263) = t0(4)
976 uparam(264) = xka(4)
977 uparam(265) = xkb(4)
978 uparam(273) = ssp(4)
979 uparam(274) = lc(4)
980 uparam(275) = rho0_(4)*ssp(4)*ssp(4)
981 uparam(276) = zero
982 !bijective application (in case of new input -iform=12- you must retrieve phase order in legacy buffer)
983 ! jwl is necessarily submat id 4 in legacy buffer, but not necessarily in user input (iform=12)
984 uparam(277) = 1
985 uparam(278) = 2
986 uparam(279) = 3
987 uparam(280) = 4
988 !functions
989 ifunc(01) = iav(1)
990 ifunc(02) = irho(1)
991 ifunc(03) = ie(1)
992 ifunc(04) = iav(2)
993 ifunc(05) = irho(2)
994 ifunc(06) = ie(2)
995 ifunc(07) = iav(3)
996 ifunc(08) = irho(3)
997 ifunc(09) = ie(3)
998 ifunc(10) = ivel
999 ENDIF
1000 pm(38) = uparam(42) !VDET
1001 parmat(1) = max(c1(1), c1(2), c1(3), c1(4))
1002 pm(27) = maxval(ssp(1:4))
1003
1004 ! Multimaterial data
1005 matparam%multimat%nb = 4
1006 IF(.NOT.ALLOCATED(matparam%multimat%vfrac))ALLOCATE(matparam%multimat%vfrac(4))
1007 IF(.NOT.ALLOCATED(matparam%multimat%mid)) ALLOCATE(matparam%multimat%mid(4))
1008 matparam%multimat%vfrac(1:4) = tav(1:4)
1009 matparam%multimat%mid(1:4) = tmid(1:4)
1010 ipm(20+1:20+4) = tmid(1:4)
1011
1012 !============================!
1013 ! Starter Listing File !
1014 !============================!
1015 WRITE(iout,997) trim(titr),mat_uid,51
1016 WRITE(iout,998)
1017 IF(is_encrypted)THEN
1018 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
1019 ELSE
1020 IF(iflg /= 12)THEN
1021 WRITE(iout, 900)rho0,rhor
1022 WRITE(iout,5002)iflag_bak
1023 WRITE(iout,5001)pext,vis,visv,av(1),av(2),av(3),av(4)
1024 ENDIF
1025 !============================!
1026 ! IFLG == 0,1,10,11 !
1027 !============================!
1028 IF(iflg <= 1)THEN
1029 p0_glob = p0(1)*av(1)+p0(2)*av(2)+p0(3)*av(3)+p0(4)*av(4)
1030 DO i=1,3
1031 WRITE(iout,5005)i
1032 WRITE(iout,5010)
1033 WRITE(iout,5011)c0(i),c1(i),c2(i),c3(i),c4(i),c5(i),e0(i),rho0_(i),pmin_(i),p0_glob
1034 IF(y(i) == zero)ipla(i)=0
1035 SELECT CASE(ipla(i))
1036 CASE(0)
1037 IF(gg(i)>zero)THEN
1038 WRITE(iout,5015)
1039 WRITE(iout,5016)gg(i)
1040 ENDIF
1041 CASE(1)
1042 WRITE(iout,5020)
1043 WRITE(iout,5021)y(i),bb(i),n(i),cc(i),epdr(i),cm(i),t0(i),tmelt(i),thetl(i),sph(i),plamx(i),sigmx(i),xka(i),xkb(i)
1044 CASE(2)
1045 WRITE(iout,5025)
1046 WRITE(iout,5026)a0(i),a1(i),a2(i),amx(i),y(i),nu(i),t0(i),tmelt(i),thetl(i),sph(i),plamx(i),sigmx(i),xka(i),xkb(i)
1047 END SELECT
1048 ENDDO
1049 i=4
1050 WRITE(iout,5005)i
1051 WRITE(iout,5030)
1052 WRITE(iout,5031)rho0_(4),e0(4),pmin_(4),c0(4),c1(4),b1,b2,r1,r2,w,vdet,pcj,vcj,ibfrac
1053 !============================!
1054 ! IFLG == 2 !
1055 !============================!
1056 ELSEIF(iflg == 2)THEN
1057 WRITE(iout,1200)abcs,vel,ivel,
1058 & av(1),rho0_(1),e0(1),iav(1),irho(1),ie(1),pmin_(1),c0(1),c1(1),c2(1),c3(1),c4(1),c5(1),
1059 & av(2),rho0_(2),e0(2),iav(2),irho(2),ie(2),pmin_(2),c0(2),c1(2),c2(2),c3(2),c4(2),c5(2),
1060 & av(3),rho0_(3),e0(3),iav(3),irho(3),ie(3),pmin_(3),c0(3),c1(3),c2(3),c3(3),c4(3),c5(3)
1061
1062 !============================!
1063 ! IFLG == 3 !
1064 !============================!
1065 ELSEIF(iflg == 3)THEN
1066 IF(iopt == 1)THEN
1067 WRITE(iout,1299)iopt
1068 ELSE
1069 WRITE(iout,1298)
1070 ENDIF
1071 WRITE(iout,1300)av(1),rho0_(1),e0(1),c0(1),
1072 & av(2),rho0_(2),e0(2),c0(2),
1073 & av(3),rho0_(3),e0(3),c0(3)
1074
1075 !============================!
1076 ! IFLG == 4 !
1077 !============================!
1078 ELSEIF(iflg == 4)THEN
1079 WRITE(iout,1400)abcs,
1080 & av(1),rho0_(1),e0(1),iav(1),irho(1),ie(1),pmin_(1),c0(1),c1(1),c4(1),
1081 & av(2),rho0_(2),e0(2),iav(2),irho(2),ie(2),pmin_(2),c0(2),c1(2),c4(2),
1082 & av(3),rho0_(3),e0(3),iav(3),irho(3),ie(3),pmin_(3),c0(3),c1(3),c4(3)
1083
1084 !============================!
1085 ! IFLG == 5 !
1086 !============================!
1087 ELSEIF(iflg == 5)THEN
1088 WRITE(iout,1500)abcs,
1089 & av(1),rho0_(1),e0(1),iav(1),irho(1),ie(1),pmin_(1),c0(1),c1(1),
1090 & av(2),rho0_(2),e0(2),iav(2),irho(2),ie(2),pmin_(2),c0(2),c1(2),
1091 & av(3),rho0_(3),e0(3),iav(3),irho(3),ie(3),pmin_(3),c0(3),c1(3)
1092 !============================!
1093 ! IFLG == 6 !
1094 !============================!
1095 ELSEIF(iflg == 6)THEN
1096 WRITE(iout,1700)cpext,ctcarp,ctcar
1097 IF(iflg6_submat_defined(1) .OR. iflg6_submat_defined(2) .OR. iflg6_submat_defined(3))
1098 & WRITE(iout,1701)cav(1) ,crho0(1),ce0(1) ,cpm(1) ,cc0(1) ,cssp(1),
1099 & cav(2) ,crho0(2),ce0(2) ,cpm(2) ,cc0(2) ,cssp(2),
1100 & cav(3) ,crho0(3),ce0(3) ,cpm(3) ,cc0(3) ,cssp(3)
1101 !============================!
1102 ! IFLG == 12 !
1103 !============================!
1104 ELSEIF(iflg == 12)THEN
1105 WRITE(iout,5002)12
1106 WRITE(iout,4003)vis,visv
1107 WRITE(iout,4004)
1108 DO i=1,mip
1109 WRITE(iout,4001)i,tmid(i)
1110 ENDDO
1111 WRITE(iout,4004)
1112 DO i=1,mip
1113 WRITE(iout,4002)i,tav(i)
1114 ENDDO
1115 ENDIF
1116 !============================!
1117 IF(niter /= 10)THEN
1118 WRITE(iout,901)niter
1119 ENDIF
1120 ENDIF
1121
1122 pm(38)=vdet
1123 IF(iflg==12)rho0=one
1124 IF(rhor==zero)rhor=rho0
1125 pm(1) =rhor
1126 pm(89)=rho0
1127 pm(91)=maxval(rho0_(1:4))
1128
1129 ! MATPARAM keywords
1130
1131 ! Material compatibility with /EOS option
1132 CALL init_mat_keyword(matparam,"EOS")
1133
1134 ! EOS/Thermo keyword for pressure treatment in elements
1135 CALL init_mat_keyword(matparam,"HYDRO_EOS")
1136
1137 ! Properties compatibility
1138 CALL init_mat_keyword(matparam,"SOLID_ISOTROPIC")
1139
1140 RETURN
1141
1142C======================================================================|
1143 900 FORMAT(
1144 & 5x,'INITIAL DENSITY . . . . . . . . . . . .=',1pg20.13/,
1145 & 5x,'REFERENCE DENSITY . . . . . . . . . . .=',1pg20.13/)
1146 901 FORMAT(
1147 & 5x,'NUMBER OF ITERATION . . . . . . . . . .=',i10/)
1148 997 FORMAT(
1149 & 5x,a,/,
1150 & 5x,'MATERIAL NUMBER . . . . . . . . . . . .=',i10/,
1151 & 5x,'MATERIAL LAW. . . . . . . . . . . . . .=',i10/)
1152 998 FORMAT(
1153 & 5x,' /MAT/LAW51 (MULTIMAT)',/,
1154 & 5x,' ---------------------',/)
1155 1200 FORMAT(
1156 & 5x,'INLET CONDITION------------------------',/
1157 & 5x,'Abcissa scale factor. . . . . . . . . .=',e12.4/
1158 & 5x,'Velocity Scale Factor . . . . . . . . .=',e12.4/
1159 & 5x,'Velocity Function ID. . . . . . . . . .=',i10/
1160 & 5x,'SUBMAT-1 VOLUME RATIO. . . . . . . . . .=',e12.4/
1161 & 5x,'SUBMAT-1 reference DENSITY . . . . . . .=',e12.4/
1162 & 5x,'SUBMAT-1 E0 initial ENERGY/unit volume .=',e12.4/
1163 & 5x,'SUBMAT-1 Volume ratio FUNCTION ID . . . =',i10/
1164 & 5x,'SUBMAT-1 Density FUNCTION ID . . . . . .=',i10/
1165 & 5x,'SUBMAT-1 Energy FUNCTION ID. . . . . . .=',i10/
1166 & 5x,'SUBMAT-1 Minimum PRESSURE. . . . . . . .=',e12.4/
1167 & 5x,'SUBMAT-1 CO initial PRESSURE . . . . . .=',e12.4/
1168 & 5x,' P =C0 +C1 mu +C2 mu^2 +C3 mu^3 + (C4 + C5mu)Eint/Vo '/
1169 & 5x,'SUBMAT-1 C1. . . . . . . . . . . . . . .=',e12.4/
1170 & 5x,'SUBMAT-1 C2. . . . . . . . . . . . . . .=',e12.4/
1171 & 5x,'SUBMAT-1 C3. . . . . . . . . . . . . . .=',e12.4/
1172 & 5x,'SUBMAT-1 C4. . . . . . . . . . . . . . .=',e12.4/
1173 & 5x,'SUBMAT-1 C5. . . . . . . . . . . . . . .=',e12.4/
1174 & 5x,'SUBMAT-2 VOLUME RATIO. . . . . . . . . .=',e12.4/
1175 & 5x,'SUBMAT-2 reference DENSITY . . . . . . .=',e12.4/
1176 & 5x,'SUBMAT-2 E0 initial ENERGY/unit volume .=',e12.4/
1177 & 5x,'SUBMAT-2 Volume ratio FUNCTION ID . . . =',i10/
1178 & 5x,'SUBMAT-2 Density FUNCTION ID . . . . . .=',i10/
1179 & 5x,'SUBMAT-2 Energy FUNCTION ID. . . . . . .=',i10/
1180 & 5x,'SUBMAT-2 Minimum PRESSURE. . . . . . . .=',e12.4/
1181 & 5x,'SUBMAT-2 CO initial PRESSURE . . . . . .=',e12.4/
1182 & 5x,'SUBMAT-2 C1. . . . . . . . . . . . . . .=',e12.4/
1183 & 5x,'SUBMAT-2 C2. . . . . . . . . . . . . . .=',e12.4/
1184 & 5x,'SUBMAT-2 C3. . . . . . . . . . . . . . .=',e12.4/
1185 & 5x,'SUBMAT-2 C4. . . . . . . . . . . . . . .=',e12.4/
1186 & 5x,'SUBMAT-2 C5. . . . . . . . . . . . . . .=',e12.4/
1187 & 5x,'SUBMAT-3 VOLUME RATIO. . . . . . . . . .=',e12.4/
1188 & 5x,'SUBMAT-3 reference DENSITY . . . . . . .=',e12.4/
1189 & 5x,'SUBMAT-3 E0 initial ENERGY/unit volume .=',e12.4/
1190 & 5x,'SUBMAT-3 Volume ratio FUNCTION ID . . . =',i10/
1191 & 5x,'SUBMAT-3 Density FUNCTION ID . . . . . .=',i10/
1192 & 5x,'SUBMAT-3 Energy FUNCTION ID. . . . . . .=',i10/
1193 & 5x,'SUBMAT-3 Minimum PRESSURE. . . . . . . .=',e12.4/
1194 & 5x,'SUBMAT-3 CO initial PRESSURE . . . . . .=',e12.4/
1195 & 5x,'SUBMAT-3 C1. . . . . . . . . . . . . . .=',e12.4/
1196 & 5x,'SUBMAT-3 C2. . . . . . . . . . . . . . .=',e12.4/
1197 & 5x,'SUBMAT-3 C3. . . . . . . . . . . . . . .=',e12.4/
1198 & 5x,'SUBMAT-3 C4. . . . . . . . . . . . . . .=',e12.4/
1199 & 5x,'SUBMAT-3 C5. . . . . . . . . . . . . . .=',e12.4//)
1200 1298 FORMAT(
1201 & 5x,'OUTLET CONDITION-----------------------')
1202 1299 FORMAT(
1203 & 5x,'OUTLET CONDITION-----------------------',/
1204 & 5x,'IOPT FLAG . . . . . . . . . . . . . . .=',i10)
1205 1300 FORMAT(
1206 & 5x,'SUBMAT-1 VOLUME RATIO. . . . . . . . . .=',e12.4/
1207 & 5x,'SUBMAT-1 reference DENSITY . . . . . . .=',e12.4/
1208 & 5x,'SUBMAT-1 E0 initial ENERGY/unit volume .=',e12.4/
1209 & 5x,'SUBMAT-1 PO initial PRESSURE . . . . . .=',e12.4/
1210 & 5x,'SUBMAT-2 VOLUME RATIO. . . . . . . . . .=',e12.4/
1211 & 5x,'SUBMAT-2 reference DENSITY . . . . . . .=',e12.4/
1212 & 5x,'SUBMAT-2 E0 initial ENERGY/unit volume .=',e12.4/
1213 & 5x,'SUBMAT-2 PO initial PRESSURE . . . . . .=',e12.4/
1214 & 5x,'SUBMAT-3 VOLUME RATIO. . . . . . . . . .=',e12.4/
1215 & 5x,'SUBMAT-3 reference DENSITY . . . . . . .=',e12.4/
1216 & 5x,'SUBMAT-3 E0 initial ENERGY/unit volume .=',e12.4/
1217 & 5x,'SUBMAT-3 PO initial PRESSURE . . . . . .=',e12.4//)
1218 1400 FORMAT(
1219 & 5x,'INLET STAGNATION PRESSURE (Perfect Gas)',/
1220 & 5x,'Abcissa scale factor. . . . . . . . . .=',e12.4/
1221 & 5x,'submat-1 volume ratio. . . . . . . . . .=',E12.4/
1222 & 5X,'submat-1 reference density . . . . . . .=',E12.4/
1223 & 5X,'submat-1 e0 initial energy/unit volume .=',E12.4/
1224 & 5X,'submat-1 volume ratio FUNCTION id . . . =',I10/
1225 & 5X,'submat-1 density function id . . . . . .=',I10/
1226 & 5X,'submat-1 energy function id. . . . . . .=',I10/
1227 & 5X,'submat-1 minimum pressure. . . . . . . .=',E12.4/
1228 & 5X,' p =c0 +c1 mu +c2 mu^2 +c3 mu^3 + (C4 + C5mu)eint/vo '/
1229 & 5X,'submat-1 co initial pressure . . . . . .=',E12.4/
1230 & 5X,'submat-1 c1. . . . . . . . . . . . . . .=',E12.4/
1231 & 5X,'submat-1 c4 (gamma-1). . . . . . . . . .=',E12.4/
1232 & 5X,'submat-2 volume ratio. . . . . . . . . .=',E12.4/
1233 & 5X,'submat-2 reference density . . . . . . .=',E12.4/
1234 & 5X,'submat-2 e0 initial energy/unit volume .=',E12.4/
1235 & 5X,'submat-2 volume ratio function id . . . =',I10/
1236 & 5X,'submat-2 density function id . . . . . .=',I10/
1237 & 5X,'submat-2 energy function id. . . . . . .=',I10/
1238 & 5X,'submat-2 minimum pressure. . . . . . . .=',E12.4/
1239 & 5X,'submat-2 co initial pressure . . . . . .=',E12.4/
1240 & 5X,'submat-2 c1. . . . . . . . . . . . . . .=',E12.4/
1241 & 5X,'submat-2 c4 (gamma-1). . . . . . . . . .=',E12.4/
1242 & 5X,'submat-3 volume ratio. . . . . . . . . .=',E12.4/
1243 & 5X,'submat-3 reference density . . . . . . .=',E12.4/
1244 & 5X,'submat-3 e0 initial energy/unit volume .=',E12.4/
1245 & 5X,'submat-3 volume ratio function id . . . =',I10/
1246 & 5X,'submat-3 density function id . . . . . .=',I10/
1247 & 5X,'submat-3 energy function id. . . . . . .=',I10/
1248 & 5X,'submat-3 minimum pressure. . . . . . . .=',E12.4/
1249 & 5X,'submat-3 co initial pressure . . . . . .=',E12.4/
1250 & 5X,'submat-3 c1. . . . . . . . . . . . . . .=',E12.4/
1251 & 5X,'submat-3 c4 (gamma-1). . . . . . . . . .=',E12.4//)
1252 1500 FORMAT(
1253 & 5X,'inlet stagnation pressure (Liquid) ----',/
1254 & 5X,'abcissa scale factor. . . . . . . . . .=',E12.4/
1255 & 5X,'submat-1 volume ratio. . . . . . . . . .=',E12.4/
1256 & 5X,'submat-1 reference density . . . . . . .=',E12.4/
1257 & 5X,'submat-1 e0 initial energy/unit volume .=',E12.4/
1258 & 5X,'submat-1 volume ratio function id . . . =',I10/
1259 & 5X,'submat-1 density function id . . . . . .=',I10/
1260 & 5X,'submat-1 energy function id. . . . . . .=',I10/
1261 & 5X,'submat-1 minimum pressure. . . . . . . .=',E12.4/
1262 & 5X,' p =c0 +c1 mu +c2 mu^2 +c3 mu^3 + (C4 + C5mu)eint/vo '/
1263 & 5X,'submat-1 co initial pressure . . . . . .=',E12.4/
1264 & 5X,'submat-1 c1 (bulk modulus) . . . . . . .=',E12.4/
1265 & 5X,'submat-2 volume ratio. . . . . . . . . .=',E12.4/
1266 & 5X,'submat-2 reference density . . . . . . .=',E12.4/
1267 & 5X,'submat-2 e0 initial energy/unit volume .=',E12.4/
1268 & 5X,'submat-2 volume ratio function id . . . =',I10/
1269 & 5X,'submat-2 density function id . . . . . .=',I10/
1270 & 5X,'submat-2 energy function id. . . . . . .=',I10/
1271 & 5X,'submat-2 minimum pressure. . . . . . . .=',E12.4/
1272 & 5X,'submat-2 co initial pressure . . . . . .=',E12.4/
1273 & 5X,'submat-2 c1 (bulk modulus) . . . . . . .=',E12.4/
1274 & 5X,'submat-3 volume ratio. . . . . . . . . .=',E12.4/
1275 & 5X,'submat-3 reference density . . . . . . .=',E12.4/
1276 & 5X,'submat-3 e0 initial energy/unit volume .=',E12.4/
1277 & 5X,'submat-3 volume ratio function id . . . =',I10/
1278 & 5X,'submat-3 density function id . . . . . .=',I10/
1279 & 5X,'submat-3 energy function id. . . . . . .=',I10/
1280 & 5X,'submat-3 minimum pressure. . . . . . . .=',E12.4/
1281 & 5X,'submat-3 co initial pressure . . . . . .=',E12.4/
1282 & 5X,'submat-3 c1 (bulk modulus) . . . . . . .=',E12.4//)
1283 1700 FORMAT(
1284 & 5X,'non reflecting frontier ----------------',/
1285 & 5X,'external pressure . . . . . . . . . . .=',a /
1286 & 5x,'CHARACTERISTIC TIME FOR PRES RELAXATION =',a /
1287 & 5x,'CHARACTERISTIC TIME FOR VFRAC RELAXATION=',a //)
1288 1701 FORMAT(
1289 & 5x,'submat-1 av10 volume fraction. . . . . .=',A /
1290 & 5X,'submat-1 rho10 reference density . . . .=',A /
1291 & 5X,'submat-1 e01 volumetric energy . . . . .=',A /
1292 & 5X,'submat-1 pm1 cut off pressure. . . . . .=',A /
1293 & 5X,'submat-1 p01 initial pressure. . . . . .=',A /
1294 & 5X,'submat-1 ssp1 sound speed. . . . . . . .=',A /
1295 & 5X,'submat-2 av20 volume fraction. . . . . .=',A /
1296 & 5X,'submat-2 rho20 reference density . . . .=',A /
1297 & 5X,'submat-2 e02 volumetric energy . . . . .=',A /
1298 & 5X,'submat-2 pm2 cut off pressure. . . . . .=',A /
1299 & 5X,'submat-2 p02 initial pressure. . . . . .=',A /
1300 & 5X,'submat-2 ssp2 sound speed. . . . . . . .=',A /
1301 & 5X,'submat-3 av30 volume fraction. . . . . .=',A /
1302 & 5X,'submat-3 rho30 reference density . . . .=',A /
1303 & 5X,'submat-3 e03 volumetric energy . . . . .=',A /
1304 & 5X,'submat-3 pm3 cut off pressure. . . . . .=',A /
1305 & 5X,'submat-3 p03 initial pressure. . . . . .=',A /
1306 & 5X,'submat-3 ssp3 sound speed. . . . . . . .=',A //)
1307 4001 FORMAT(
1308 & 5X,'submaterial-',I1,' id = ',I10)
1309 4002 FORMAT(
1310 & 5X,'submaterial-',I1,' volume fraction = ',F12.10)
1311 4003 FORMAT(
1312 & 5X,'shear kinematic viscosity. . . . . . . =',E12.4/
1313 & 5X,'spherical kinematic viscosity. . . . . =',E12.4)
1314 4004 FORMAT(
1315 & 5X,'____________________________________________________')
1316 5001 FORMAT(
1317 & 5X,'EXTERNAL pressure. . . . . . . . . . . =',E12.4/
1318 & 5X,'shear kinematic viscosity. . . . . . . =',E12.4/
1319 & 5X,'spherical kinematic viscosity. . . . . =',E12.4/
1320 & 5X,'____________________________________________________',/
1321 & 5X,'volume fraction - submat-1 . . . . . . =',F12.10/
1322 & 5X,'volume fraction - submat-2 . . . . . . =',F12.10/
1323 & 5X,'volume fraction - submat-3 . . . . . . =',F12.10/
1324 & 5X,'volume fraction - submat-4 . . . . . . =',F12.10)
1325 5002 FORMAT(
1326 & 5X,'formulation flag . . . . . . . . . . . = ',I2)
1327 5005 FORMAT(
1328 & 5X,'__________________________',/,
1329 & 5X,'+s u b m a t e r i a l - ',I1)
1330 5010 FORMAT(
1331 & 5X,'|',/,
1332 & 5X,'+----polynomial eos',/,
1333 & 5X,'| --------------')
1334 5011 FORMAT(
1335 & 5X,'| c0 . . . . . . . . . . . . . . . .=',1PG20.13/,
1336 & 5X,'| c1. . . . . . . . . . . . . . . . =',1PG20.13/,
1337 & 5X,'| c2. . . . . . . . . . . . . . . . =',1PG20.13/,
1338 & 5X,'| c3. . . . . . . . . . . . . . . . =',1PG20.13/,
1339 & 5X,'| c4. . . . . . . . . . . . . . . . =',1PG20.13/,
1340 & 5X,'| c5. . . . . . . . . . . . . . . . =',1PG20.13/,
1341 & 5X,'| e0. . . . . . . . . . . . . . . . =',1PG20.13/,
1342 & 5X,'| rho0. . . . . . . . . . . . . . . =',1PG20.13/,
1343 & 5X,'| pmin. . . . . . . . . . . . . . . =',1PG20.13/,
1344 & 5X,'| initial pressure(computed) . . . =',1PG20.13)
1345 5015 FORMAT(
1346 & 5X,'|',/,
1347 & 5X,'+----elastic solid',/,
1348 & 5X,'| -------------')
1349 5016 FORMAT(
1350 & 5X,'| g shear modulus . . . . . . . . . =',E12.4)
1351 5020 FORMAT(
1352 & 5X,'|',/,
1353 & 5X,'+----johnson-cook yield criteria',/,
1354 & 5X,'| ---------------------------')
1355 5021 FORMAT(
1356 & 5X,'| g shear modulus. . . . . . . =',E12.4/
1357 & 5X,'| a yield stress . . . . . . . =',E12.4/
1358 & 5X,'| b yield factor . . . . . . . =',E12.4/
1359 & 5X,'| n yield exponent . . . . . . =',E12.4/
1360 & 5X,'| c strain rate factor . . . . =',E12.4/
1361 & 5X,'| eps0 reference strain rate. . . =',E12.4/
1362 & 5X,'| m thermal exponent . . . . . =',E12.4/
1363 & 5X,'| t0 initial temperature. . . . =',E12.4/
1364 & 5X,'| tmelt melting temperature. . . . =',E12.4/
1365 & 5X,'| tlim temperature limit. . . . . =',E12.4/
1366 & 5X,'| rho.cp specific heat(rho0 cv). . =',E12.4/
1367 & 5X,'| maximum plastic strain. . . . . . =',e12.4/
1368 & 5x,'| MAXIMUM STRESS. . . . . . . . . . =',e12.4/
1369 & 5x,'| KA . . . . . . . . . . . . . . . =',e12.4/
1370 & 5x,'| KB . . . . . . . . . . . . . . . =',e12.4)
1371 5025 FORMAT(
1372 & 5x,'|',/,
1373 & 5x,'+----DRUCKER-PRAGER YIELD CRITERIA ',/,
1374 & 5x,'| ----------------------------- ')
1375 5026 FORMAT(
1376 & 5x,'| A0 YIELD COEFFICIENT 1. . . . =',e12.4/
1377 & 5x,'| A1 YIELD COEFFICIENT 2. . . . =',e12.4/
1378 & 5x,'| A2 YIELD COEFFICIENT 3. . . . =',e12.4/
1379 & 5x,'| A-MAX MAXIMUM YIELD VALUE. . . . =',e12.4/
1380 & 5x,'| E YOUNG MODULUS. . . . . . . =',e12.4/
1381 & 5x,'| NU YOUNG MODULUS. . . . . . . =',e12.4/
1382 & 5x,'| T0 INITIAL TEMPERATURE. . . . =',e12.4/
1383 & 5x,'| TMELT MELTING TEMPERATURE. . . . =',e12.4/
1384 & 5x,'| TLIM TEMPERATURE LIMIT. . . . . =',e12.4/
1385 & 5x,'| RHO.CP SPECIFIC HEAT (rho0 Cv). . =',e12.4/
1386 & 5x,'| MAXIMUM PLASTIC STRAIN. . . . . . =',e12.4/
1387 & 5x,'| MAXIMUM STRESS. . . . . . . . . . =',e12.4/
1388 & 5x,'| KA . . . . . . . . . . . . . . . =',e12.4/
1389 & 5x,'| KB . . . . . . . . . . . . . . . =',e12.4)
1390 5030 FORMAT(
1391 & 5x,'|',/,
1392 & 5x,'+----JWL EoS',/,
1393 & 5x,'| -------')
1394 5031 FORMAT(
1395 & 5x,'| RHO0 INITIAL DENSITY . . . . . . .=',e12.4/
1396 & 5x,'| E0 INITIAL ENERGY/UNIT VOLUME . =',e12.4/
1397 & 5x,'| PMIN MINIMUM PRESSURE. . . . . . .=',e12.4/
1398 & 5x,'| C0 INITIAL PRESSURE . . . . . . =',e12.4/
1399 & 5x,'| C1 UNREACTED BULK MODULUS . . . =',e12.4/
1400 & 5x,'| A . . . . . . . . . . . . . . . . =',e12.4/
1401 & 5x,'| B . . . . . . . . . . . . . . . . =',e12.4/
1402 & 5x,'| R1. . . . . . . . . . . . . . . . =',e12.4/
1403 & 5x,'| R2. . . . . . . . . . . . . . . . =',e12.4/
1404 & 5x,'| W . . . . . . . . . . . . . . . . =',e12.4/
1405 & 5x,'| VDET DETONATION VELOCITY. . . . . =',e12.4/
1406 & 5x,'| PCJ PRESSURE AT C-J STATE . . . .=',e12.4/
1407 & 5x,'| VCJ VOLUME AT C-J STATE . . . . .=',e12.4/
1408 & 5x,'| FLAG FOR BURN FRACTION METHOD . . =',i10)
1409 END
1410C======================================================================|
subroutine hm_get_float_array_index(name, rval, index, is_available, lsubmodel, unitab)
subroutine hm_get_float_array_index_dim(name, dim_fac, index, is_available, lsubmodel, unitab)
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_int_array_index(name, ival, index, is_available, lsubmodel)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_is_encrypted(is_encrypted)
subroutine hm_read_mat51(uparam, maxuparam, nuparam, israte, imatvis, nuvar, ifunc, maxfunc, nfunc, parmat, unitab, mat_uid, titr, mtag, lsubmodel, pm, mat_param, mat_iid, ipm, nvartmp, nummat)
function ie_bound(pext, pm, c0, c1, c2, c3, c4, c5, e0)
Definition ie_bound.F:30
subroutine init_mat_keyword(matparam, keyword)
subroutine lecm51__check_initial_state(av, r0, c0, c1, c2, c3, c4, c5, e0, pm, rho0, rhor, iexp, pext, iflg, a1, a2, pla, id, titr, ssp1, ssp2, ssp3, ssp4, lc1, lc2, lc3, lc4, p0a)
#define max(a, b)
Definition macros.h:21
initmumps id
type(ale_) ale
Definition ale_mod.F:253
type(alemuscl_param_) alemuscl_param
integer, parameter nchartitle
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