41
42
43
48 USE matparam_def_mod
50
51
52
53#include "implicit_f.inc"
54
55
56
57#include "units_c.inc"
58#include "param_c.inc"
59
60
61
62 my_real,
DIMENSION(MAXUPARAM) ,
INTENT(INOUT) :: uparam
63 INTEGER, INTENT(IN) :: MAT_ID,MAXUPARAM,
64 INTEGER, INTENT(INOUT) :: NUPARAM,NUVAR,IFUNC(MAXFUNC),NFUNC
65 TYPE (UNIT_TYPE_),INTENT(IN) :: UNITAB
66 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
67 my_real,
DIMENSION(100),
INTENT(INOUT) :: parmat
68 TYPE(SUBMODEL_DATA), DIMENSION(*),INTENT(IN) :: LSUBMODEL
69 TYPE(MLAW_TAG_), INTENT(INOUT) :: MTAG
70 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
71 my_real,
DIMENSION(NPROPM) ,
INTENT(INOUT) :: pm
72
73
74
75 INTEGER ,ILAW
77 . young,nu,nnu,nnu1,bulk,lam,g,g2,a1,a2,c1,fcut,asrate,cdr,
78 . qvoce,bvoce,jcc,epsp0,mtemp,tref,eta,cp,dpis,dpad,
79 . yld0,hp,kdr,tini,rho0
80
81 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
82
83 is_encrypted = .false.
84 is_available = .false.
85 ilaw = 104
86
88
89
90 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
91
92 CALL hm_get_floatv(
'MAT_E' ,young ,is_available, lsubmodel, unitab)
93 CALL hm_get_floatv(
'MAT_NU' ,nu ,is_available, lsubmodel, unitab)
94 CALL hm_get_intv ('mat104_ires
' ,FLAGNICE ,IS_AVAILABLE, LSUBMODEL)
95
96 CALL HM_GET_FLOATV('sigma_r' ,YLD0 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
97 CALL HM_GET_FLOATV('mat104_h' ,HP ,IS_AVAILABLE, LSUBMODEL, UNITAB)
98 CALL HM_GET_FLOATV('mat_pr' ,QVOCE ,IS_AVAILABLE, LSUBMODEL, UNITAB)
99 CALL HM_GET_FLOATV('mat104_bv' ,BVOCE ,IS_AVAILABLE, LSUBMODEL, UNITAB)
100 CALL HM_GET_FLOATV('mat104_cdr' ,CDR ,IS_AVAILABLE, LSUBMODEL, UNITAB)
101
102 CALL HM_GET_FLOATV('mat104_cjc' ,JCC ,IS_AVAILABLE, LSUBMODEL, UNITAB)
103 CALL HM_GET_FLOATV('mat104_eps0' ,EPSP0 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
104 CALL HM_GET_FLOATV('mat104_fcut' ,FCUT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
105
106 CALL HM_GET_FLOATV('mat104_tss' ,MTEMP ,IS_AVAILABLE, LSUBMODEL, UNITAB)
107 CALL HM_GET_FLOATV('mat104_tref' ,TREF ,IS_AVAILABLE, LSUBMODEL, UNITAB)
108 CALL HM_GET_FLOATV('t_initial' ,TINI ,IS_AVAILABLE, LSUBMODEL, UNITAB)
109
110 CALL HM_GET_FLOATV('mat_eta' ,ETA ,IS_AVAILABLE, LSUBMODEL, UNITAB)
111 CALL HM_GET_FLOATV('mat_spheat' ,CP ,IS_AVAILABLE, LSUBMODEL, UNITAB)
112 CALL HM_GET_FLOATV('mat104_epsiso',DPIS ,IS_AVAILABLE, LSUBMODEL, UNITAB)
113 CALL HM_GET_FLOATV('mat104_epsad' ,DPAD ,IS_AVAILABLE, LSUBMODEL, UNITAB)
114
115 ! Default values
116 IF (YLD0 == ZERO) YLD0 = INFINITY
117 ! Cutting frequency
118 IF (FCUT == ZERO) THEN
119 FCUT = 10000.0D0*UNITAB%FAC_T_WORK
120 ENDIF
121 ASRATE = TWO*PI*FCUT
122 ! If the inviscid plastic strain-rate is zero, no Johnson-Cook model
123 IF(EPSP0 == ZERO) THEN
124 EPSP0 = ONE
125 JCC = ZERO
126 ! Info message
127 CALL ANCMSG(MSGID=1654,MSGTYPE=MSGINFO,
128 . ANMODE=ANINFO_BLIND_1,I1=MAT_ID,C1=TITR)
129 ENDIF
130 ! Self - heating
131 IF (DPIS == ZERO) DPIS = INFINITY
132 IF (DPAD == ZERO) DPAD = TWO*INFINITY
133 IF (DPIS > DPAD) THEN
134 ! Error message
135 CALL ANCMSG(MSGID=1655,MSGTYPE=MSGERROR,
136 . ANMODE=ANINFO_BLIND_1,I1=MAT_ID,C1=TITR)
137 ENDIF
138 ! Nice return mapping by default
139 IF (FLAGNICE == 0) FLAGNICE = 1
140 IF (FLAGNICE > 2) THEN
141 CALL ANCMSG(MSGID=1731,MSGTYPE=MSGWARNING,
142 . ANMODE=ANINFO_BLIND_1,I1=MAT_ID,C1=TITR,
143 . I2=FLAGNICE)
144 ENDIF
145
146
147
148 ! Elastic parameters
149 G2 = YOUNG / (ONE + NU)
150 G = HALF * G2
151 LAM = G2 * NU /(ONE - TWO*NU)
152 BULK = THIRD * YOUNG / (ONE - NU*TWO)
153 NNU = NU / (ONE - NU)
154 NNU1 = ONE - NNU
155 A1 = YOUNG / (ONE - NU*NU)
156 A2 = A1 * NU
157 C1 = YOUNG / THREE/(ONE - TWO*NU)
158
159 ! Checking value of Drucker coeff to ensure the yield surface convexity
160 IF (CDR > 2.25D0) THEN
161 CDR = 2.25D0
162 ! Warning message
163 CALL ANCMSG(MSGID=1651,MSGTYPE=MSGWARNING,
164 . ANMODE=ANINFO_BLIND_1,I1=MAT_ID,C1=TITR)
165 ELSEIF (CDR < -TWENTY7/EIGHT) THEN
166 CDR = -TWENTY7/EIGHT
167 ! Warning message
168 CALL ANCMSG(MSGID=1652,MSGTYPE=MSGWARNING,
169 . ANMODE=ANINFO_BLIND_1,I1=MAT_ID,C1=TITR)
170 ENDIF
171
172 ! Value of the constant of Drucker criterion
173 KDR = (ONE/TWENTY7) - CDR*(FOUR/TWENTY7/TWENTY7)
174 KDR = KDR**(ONE/SIX)
175 KDR = ONE/KDR
176
177 ! Storing parameters
178 UPARAM(1) = YOUNG ! Young modulus
179 UPARAM(2) = BULK ! Bulk modulus
180 UPARAM(3) = G ! Shear modulus
181 UPARAM(4) = G2 ! 2*Shear modulus
182 UPARAM(5) = LAM ! Lambda (Hook)
183 UPARAM(6) = NU ! Poisson ratio
184 UPARAM(7) = NNU
185 UPARAM(8) = NNU1
186 UPARAM(9) = A1
187 UPARAM(10) = A2
188 UPARAM(11) = FLAGNICE ! Choice of the return mapping algorithm
189 UPARAM(12) = CDR ! Drucker coefficient
190 UPARAM(13) = KDR ! Drucker K coefficient
191 UPARAM(14) = TINI ! Initial temperature
192 UPARAM(15) = HP ! Linear hardening parameter
193 UPARAM(16) = YLD0 ! Initial yield stress
194 UPARAM(17) = QVOCE ! Voce parameter
195 UPARAM(18) = BVOCE ! Voce parameter
196 UPARAM(19) = ONE ! ALPHA ! Swift / Voce interpolation coef
197 UPARAM(20) = JCC ! Johnson-Cook parameter
198 UPARAM(21) = EPSP0 ! Johnson-Cook inviscid limit strain-rate
199 UPARAM(22) = MTEMP ! Thermal softening
200 UPARAM(23) = TREF ! Reference temperature
201 UPARAM(24) = ETA ! Taylor-Quinney coefficient
202 UPARAM(25) = CP ! Thermal mass capacity
203 UPARAM(26) = DPIS ! Isothermal plastic strain-rate
204 UPARAM(27) = DPAD ! Adiabatic plastic strain-rate
205 UPARAM(28) = ASRATE ! Plastic strain-rate filtering period
206 UPARAM(29) = ZERO ! Free
207
208
209
210 UPARAM(30) = ZERO ! Gurson switch flag: default = 0 => no damage model
211 ! = 1 => local damage model
212 ! = 2 => non local micromorph damage model
213 ! = 3 => non local Peerling damage model
214 UPARAM(31) = ZERO ! reserved for Gurson
215 UPARAM(32) = ZERO ! reserved for Gurson
216 UPARAM(33) = ZERO ! reserved for Gurson
217 UPARAM(34) = ZERO ! reserved for Gurson
218 UPARAM(35) = ZERO ! reserved for Gurson
219 UPARAM(36) = ZERO ! reserved for Gurson
220 UPARAM(37) = ZERO ! reserved for Gurson
221 UPARAM(38) = ZERO ! reserved for Gurson
222 UPARAM(39) = ZERO ! reserved for Gurson
223 UPARAM(40) = ZERO ! reserved for Gurson
224
225 NFUNC = 0
226 NUPARAM = 40
227 IF (FLAGNICE == 1) THEN
228 NUVAR = 2
229 ELSE
230 NUVAR = 1
231 ENDIF
232 MTAG%G_PLA = 1
233 MTAG%L_PLA = 1
234 MTAG%G_TEMP = 1
235 MTAG%L_TEMP = 1
236 MTAG%G_EPSD = 1
237 MTAG%L_EPSD = 1
238 MTAG%G_SEQ = 1
239 MTAG%L_SEQ = 1
240
241 ! activate heat source calculation in material
242 MATPARAM%HEAT_FLAG = 1
243!
244 CALL INIT_MAT_KEYWORD(MATPARAM ,"ELASTO_PLASTIC")
245 CALL INIT_MAT_KEYWORD(MATPARAM ,"INCREMENTAL" )
246 CALL INIT_MAT_KEYWORD(MATPARAM ,"LARGE_STRAIN" )
247 CALL INIT_MAT_KEYWORD(MATPARAM ,"HOOK")
248 ! Properties compatibility
249 CALL INIT_MAT_KEYWORD(MATPARAM,"SOLID_ISOTROPIC")
250 CALL INIT_MAT_KEYWORD(MATPARAM,"SHELL_ISOTROPIC")
251
252 PARMAT(1) = C1
253 PARMAT(2) = YOUNG
254 PARMAT(3) = NU
255 PARMAT(4) = ZERO ! ISRATE
256 PARMAT(5) = ZERO ! FCUT
257
258 PARMAT(16) = 2
259 PARMAT(17) = (ONE - TWO*NU)/(ONE - NU)
260
261 ! PM table
262 PM(1) = RHO0
263 PM(89) = RHO0
264
265 WRITE(IOUT,900) TRIM(TITR),MAT_ID,ILAW
266 WRITE(IOUT,1000)
267 IF (IS_ENCRYPTED) THEN
268 WRITE(IOUT,'(5x,a,//)')'confidential data'
269 ELSE
270 WRITE(IOUT,1050) RHO0
271 WRITE(IOUT,1100) YOUNG,NU ,CDR ,QVOCE,BVOCE,
272 . YLD0, HP ,JCC ,EPSP0,FCUT,
273 . MTEMP,TREF ,TINI,ETA ,CP, DPIS,DPAD,
274 . FLAGNICE
275 ENDIF
276
277 RETURN
278
279 900 FORMAT(/
280 & 5X,A,/,
281 & 5X,'material number. . . . . . . . . . . . =',I10/,
282 & 5X,'material law . . . . . . . . . . . . . =',I10/)
283 1000 FORMAT
284 &(5X,'material model : drucker - voce - johnson-cook ',/,
285 & 5X,'-------------------------------------------------',/)
286 1050 FORMAT(
287 & 5X,'initial density . . . . . . . . . . . . . . .=',1PG20.13/)
288 1100 FORMAT(
289 & 5X,'young modulus . . . . . . . . . . . . . . . .=',1PG20.13/
290 & 5X,'poisson ratio . . . . . . . . . . . . . . . .=',1PG20.13/
291 & 5X,'drucker coefficient c . . . . . . . . . . . .=',1PG20.13/
292 & 5X,'yield voce PARAMETER q. . . . . . . . . . . .=',1PG20.13/
293 & 5X,'yield voce PARAMETER b . . . . . . . . . . .=',1PG20.13/
294!
295 & 5X,'initial yield stress yld0 . . . . . . . . . .=',1PG20.13/
296 & 5X,'linear hardening PARAMETER. . . . . . . . . .=',1PG20.13/
297 & 5X,'j-c strain rate coefficient c . . . . . . . .=',1PG20.13/
298 & 5X,'j-c reference strain rate . . . . . . . . . .=',1PG20.13/
299 & 5X,'plastic strain rate cutoff frequency. . . . .=',1PG20.13/
300!
301 & 5X,'thermal softening slope . . . . . . . . . . .=',1PG20.13/
302 & 5X,'reference temperature . . . . . . . . . . . .=',1PG20.13/
303 & 5X,'initial temperature . . . . . . . . . . . . .=',1PG20.13/
304 & 5X,'taylor-quinney coef . . . . . . . . . . . . .=',1PG20.13/
305 & 5X,'specific heat . . . . . . . . . . . . . . . .=',1PG20.13/
306!
307 & 5X,'isothermal plastic strain rate. . . . . . . .=',1PG20.13/
308 & 5X,'adiabatic plastic strain rate . . . . . . . .=',1PG20.13/
309!
310 & 5X,'RETURN mapping algorithm flag . . . . . . . .=',I3/
311 & 5X,' ires=1 nice explicit(default)'/
312 & 5X,' ires=2 newton-iteration implicit(cutting plane)'/)
313
314 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