41
42
43
47 USE matparam_def_mod
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64#include "implicit_f.inc"
65
66
67
68#include "scr03_c.inc"
69#include "units_c.inc"
70#include "param_c.inc"
71
72
73
74 INTEGER, INTENT(INOUT) :: MAT_ID
75 INTEGER, INTENT(INOUT) :: ISRATE
76 INTEGER, DIMENSION(NPROPMI) ,INTENT(INOUT) :: IPM
77 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
78 my_real,
DIMENSION(NPROPM) ,
INTENT(INOUT) :: pm
79 TYPE(UNIT_TYPE_) ,INTENT(IN) :: UNITAB
80 TYPE(SUBMODEL_DATA), DIMENSION(NSUBMOD),INTENT(IN) :: LSUBMODEL
81 TYPE(MLAW_TAG_), INTENT(INOUT) :: MTAG
82 TYPE(MATPARAM_STRUCT_),INTENT(INOUT) :: MAT_PARAM
83
84
85
86 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED,IS_EOS, EOS_EMBEDDED
87 INTEGER COUNT, IEOS
89 . young, anu, ca, cb, cn, epsm, sigm, bulk,
90 . pmin, cc, eps0, cm, tmelt, tmax, cs, t0, sph,
91 . g,
92 .
93 .
94 . c0,c1,c2,c3,c4,c5,e0,psh,rho0,rhor
95
96
97
98 count = 0
99 is_eos=.false.
100 ieos = 0
101 eos_embedded=.false.
102 bulk=zero
103 israte = 0
104 is_encrypted = .false.
105 is_available = .false.
106
108
109 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
110 CALL hm_get_floatv(
'Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
111
112 CALL hm_get_floatv(
'MAT_E' ,young ,is_available, lsubmodel, unitab)
113 CALL hm_get_floatv(
'MAT_NU' ,anu ,is_available, lsubmodel, unitab)
114
115 CALL hm_get_floatv(
'MAT_SIGY' ,ca ,is_available, lsubmodel, unitab)
116 CALL hm_get_floatv(
'MAT_BETA' ,cb ,is_available, lsubmodel, unitab)
117 CALL hm_get_floatv(
'MAT_HARD' ,cn ,is_available, lsubmodel, unitab)
118 CALL hm_get_floatv(
'MAT_EPS' ,epsm ,is_available, lsubmodel, unitab)
119 CALL hm_get_floatv(
'MAT_SIG' ,sigm ,is_available, lsubmodel, unitab)
120
121 CALL hm_get_floatv(
'MAT_PC' ,pmin ,is_available, lsubmodel, unitab)
122
123 CALL hm_get_floatv(
'MAT_SRC' ,cc ,is_available, lsubmodel, unitab)
124 CALL hm_get_floatv(
'MAT_SRP' ,eps0 ,is_available, lsubmodel, unitab)
125 CALL hm_get_floatv(
'MAT_M' ,cm ,is_available, lsubmodel, unitab
126 CALL hm_get_floatv(
'MAT_TMELT' ,tmelt ,is_available, lsubmodel, unitab)
127 CALL hm_get_floatv(
'MAT_TMAX' ,tmax ,is_available, lsubmodel, unitab)
128
129 CALL hm_get_floatv(
'MAT_SPHEAT' ,cs ,is_available, lsubmodel, unitab)
130 CALL hm_get_floatv(
'MAT_T0' ,t0 ,is_available, lsubmodel, unitab)
131
132 CALL hm_get_intv (
'Line_count' ,count ,is_available, lsubmodel)
133
134 IF(invers_init>=2018)THEN
135 eos_embedded=.false.
136 ELSEIF(invers_init>=110)THEN
137 IF(count==3)eos_embedded=.true.
138 ELSE
139 eos_embedded=.true.
140 ENDIF
141
142
143
144
145
146 IF(eos_embedded)THEN
147 IF(invers_init>=140) THEN
149 . msgtype=msgerror,
150 . anmode=aninfo,
151 . i1 = mat_id,
152 . c1 = titr)
153 RETURN
154 ENDIF
155 CALL hm_get_floatv(
'MAT_C0' ,c0 ,is_available, lsubmodel, unitab)
156 CALL hm_get_floatv('mat_c1
' ,C1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
157 CALL HM_GET_FLOATV('mat_c2' ,C2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
158 CALL HM_GET_FLOATV('mat_c3' ,C3 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
159 CALL HM_GET_FLOATV('mat_c4' ,C4 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
160 CALL HM_GET_FLOATV('mat_c5' ,C5 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
161 CALL HM_GET_FLOATV('mat_e0' ,E0 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
162 CALL HM_GET_FLOATV('mat_psh' ,PSH ,IS_AVAILABLE, LSUBMODEL, UNITAB)
163 ! allocate EoS data structure
164 MAT_PARAM%IEOS = 1
165 MAT_PARAM%EOS%NUPARAM = 7
166 MAT_PARAM%EOS%NIPARAM = 0
167 MAT_PARAM%EOS%NFUNC = 0
168 MAT_PARAM%EOS%NTABLE = 0
169 CALL MAT_PARAM%EOS%CONSTRUCT() !allocations
170 MAT_PARAM%EOS%UPARAM(1) = C0-PSH
171 MAT_PARAM%EOS%UPARAM(2) = C1
172 MAT_PARAM%EOS%UPARAM(3) = C2
173 MAT_PARAM%EOS%UPARAM(4) = C3
174 MAT_PARAM%EOS%UPARAM(5) = C4
175 MAT_PARAM%EOS%UPARAM(6) = C5
176 MAT_PARAM%EOS%UPARAM(7) = ZERO
177 MAT_PARAM%EOS%PSH = PSH
178 MAT_PARAM%EOS%E0 = E0
179 BULK = C1
180 PM(23)= E0
181 PM(31)= C0-PSH
182 PM(32)=C1 !legacy value
183 !!PM(32)= C1+C4*ABS(E0) !bulk modulus
184 PM(88)= PSH
185 IEOS = 1 ! Polynomial EOS
186 ELSE
187 IEOS = 18 ! Linear EOS is used by default
188 ENDIF
189!
190 CALL INIT_MAT_KEYWORD(MAT_PARAM,"ELASTO_PLASTIC")
191 CALL INIT_MAT_KEYWORD(MAT_PARAM,"INCREMENTAL")
192 CALL INIT_MAT_KEYWORD(MAT_PARAM,"LARGE_STRAIN")
193 MAT_PARAM%IEOS = IEOS
194 IPM(4) = IEOS ! keep this temporarily for output and fluid sections
195
196 IF (PMIN==ZERO) PMIN=-EP20
197 IF (RHOR==ZERO) RHOR=RHO0
198 PM(1) = RHOR
199 PM(89)= RHO0
200
201
202.AND. IF(CS == ZEROTMELT == ZERO)THEN
203 CALL ANCMSG(MSGID=593,
204 . MSGTYPE=MSGWARNING,
205 . ANMODE=ANINFO_BLIND_1,
206 . I1=MAT_ID,
207 . C1=TITR)
208 CS=EP20
209 ELSEIF(CS == ZERO)THEN
210 CALL ANCMSG(MSGID=594,
211 . MSGTYPE=MSGERROR,
212 . ANMODE=ANINFO_BLIND_1,
213 . I1=MAT_ID,
214 . C1=TITR)
215 END IF
216 SPH=CS
217 IF(PMIN == ZERO) PMIN =-EP20
218.OR. IF(CN == ZEROCN == ONE) CN = ONEP0001
219 IF(EPSM == ZERO) EPSM = EP20
220 IF(SIGM == ZERO) SIGM = EP20
221 IF(CC == ZERO) EPS0 = ONE
222 IF(CM == ZERO) CM = ONE
223 IF(TMELT == ZERO)TMELT = EP20
224 IF(TMAX == ZERO) TMAX = EP20
225 IF(T0<=ZERO) T0 = THREE100
226 G=YOUNG/(TWO*(ONE + ANU))
227.NOT. IF(EOS_EMBEDDED)BULK=YOUNG/(THREE*(ONE - TWO*ANU))
228
229 PM(20)=YOUNG
230 PM(21)=ANU
231 PM(22)=G
232 PM(32)=BULK
233 PM(37)=PMIN
234 PM(38)=CA
235 PM(39)=CB
236 PM(40)=CN
237 PM(41)=EPSM
238 PM(42)=SIGM
239 PM(43)=CC
240 PM(44)=EPS0
241 PM(45)=CM
242 PM(46)=TMELT
243 PM(47)=TMAX
244 PM(48)=CS
245 PM(69)=SPH
246 PM(79)=T0
247 PM(80)=TMELT
248
249
250 IPM(252)= 2
251 PM(105) = (ONE -TWO*ANU)/(ONE - ANU) ! TWO*G/(BULK + FOUR_OVER_3*G)
252
253 !sizes for element buffer
254 MTAG%G_PLA = 1
255 MTAG%G_TEMP = 1
256 MTAG%G_EPSD = 1
257 !
258 MTAG%L_PLA = 1
259 MTAG%L_TEMP = 1
260 MTAG%L_EPSD = 1
261
262 ! Material compatibility with /EOS option
263 CALL INIT_MAT_KEYWORD(MAT_PARAM,"EOS")
264
265 ! EOS/Thermo keyword for pressure treatment in elements
266 CALL INIT_MAT_KEYWORD(MAT_PARAM,"HYDRO_EOS")
267
268 ! Properties compatibility
269 CALL INIT_MAT_KEYWORD(MAT_PARAM,"SOLID_ISOTROPIC")
270 CALL INIT_MAT_KEYWORD(MAT_PARAM,"SPH")
271!
272 ! activate heat source calculation in material for /heat/mat
273
274 MAT_PARAM%HEAT_FLAG = 1
275
276
277 WRITE(IOUT,2001) TITR,MAT_ID,4
278 WRITE(IOUT,1000)
279
280 IF(IS_ENCRYPTED)THEN
281 WRITE(IOUT,'(5x,a,//)')'confidential data'
282 ELSE
283 WRITE(IOUT,2002)RHO0,RHOR
284 WRITE(IOUT,1300)YOUNG,ANU,G,BULK
285 WRITE(IOUT,1400)CA,CB,CN,EPSM,SIGM
286 WRITE(IOUT,1500)PMIN
287 WRITE(IOUT,1600)CC,EPS0,CM,TMELT,TMAX,CS,T0
288 ENDIF
289
290 !--------------------------------------------------!
291 ! OLD FORMAT 100 (OBSOLETE) !
292 !--------------------------------------------------!
293 IF(EOS_EMBEDDED)THEN !
294 WRITE(IOUT,2000) !
295 IF(IS_ENCRYPTED)THEN !
296 WRITE(IOUT,'(5x,a,//)')'confidential data' !
297 ELSE !
298 WRITE(IOUT,2500)C0,C1,C2,C3,C4,C5,E0,PM(1),PSH !
299 ENDIF !
300 ENDIF !
301 !--------------------------------------------------!
302
303 IF(EPS0 == ZERO) THEN
304 CALL ANCMSG(MSGID=298,MSGTYPE=MSGERROR,ANMODE=ANINFO,I1=4,I2=MAT_ID,C1=TITR)
305 ENDIF
306 RETURN
307 1000 FORMAT(
308 & 5X,' johnson cook law ',/,
309 & 5X,' ---------------- ',//)
310 1300 FORMAT(
311 & 5X,'young',1H','S MODULUS . . . . . . . . . . . .=',1pg20.13/,
312 & 5x,'POISSON',1h','s ratio . . . . . . . . . . . .=',1PG20.13/,
313 & 5X,'shear modulus . . . . . . . . . . . . .=',1PG20.13/,
314 & 5X,'bulk modulus . . . . . . . . . . . . .=',1PG20.13//)
315 1400 FORMAT(
316 & 5X,'yield coefficient ca. . . . . . . . . .=',1PG20.13/,
317 & 5X,'yield coefficient cb. . . . . . . . . .=',1PG20.13/,
318 & 5X,'yield coefficient cn. . . . . . . . . .=',1PG20.13/,
319 & 5X,'eps-
max . . . . . . . . . . . . . . . .=
',1PG20.13/,
320 & 5X,'sig-
max . . . . . . . . . . . . . . . .=
',1PG20.13//)
321 1500 FORMAT(
322 & 5X,'pressure cutoff . . . . . . . . . . . .=',1PG20.13/)
323 1600 FORMAT(
324 & 5X,'strain rate coefficient cc. . . . . . .=',1PG20.13/,
325 & 5X,'reference strain rate . . . . . . . . .=',1PG20.13/,
326 & 5X,'temperature exponent. . . . . . . . . .=',1PG20.13/,
327 & 5X,'melting temperature degree k. . . . . .=',1PG20.13/,
328 & 5X,'theta-
max . . . . . . . . . . . . . . .=
',1PG20.13/,
329 & 5X,'specific heat . . . . . . . . . . . . .=',1PG20.13/,
330 & 5X,'room temperature . . . . . . . . . . . =',1PG20.13//)
331 2000 FORMAT(
332 & 5X,' polynomial eos ',/,
333 & 5X,' -------------- ',/,
334 & 5X,' input 100 is obsolete ',/,
335 & 5X,' it can be erased by /eos card ',/)
336 2001 FORMAT(/
337 & 5X,A,/,
338 & 5X,' material number . . . . . . . . . . . .=',I10/,
339 & 5X,' material law. . . . . . . . . . . . . .=',I10/)
340 2002 FORMAT(
341 & 5X,' initial density . . . . . . . . . . . .=',1PG20.13/,
342 & 5X,' reference density . . . . . . . . . . .=',1PG20.13/)
343 2500 FORMAT(
344 & 5X,'c0. . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
345 & 5X,'c1. . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
346 & 5X,'c2. . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
347 & 5X,'c3. . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
348 & 5X,'c4. . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
349 & 5X,'c5. . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
350 & 5X,'initial internal energy per unit volume .=',1PG20.13/,
351 & 5X,'reference density . . . . . . . . . . . .=',1PG20.13/,
352 & 5X,'pressure shift. . . . . . . . . . . . . .=',1PG20.13//)
353 RETURN
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_is_encrypted(is_encrypted)
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)