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,MAXFUNC
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 FLAGNICE,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
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
99 CALL hm_get_floatv(
'MAT104_Bv' ,bvoce ,is_available, lsubmodel, unitab
101
102 CALL hm_get_floatv(
'MAT104_Cjc' ,jcc ,is_available, lsubmodel
104 CALL hm_get_floatv(
'MAT104_Fcut' ,fcut ,is_available, lsubmodel
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
116 IF (yld0 == zero) yld0 = infinity
117
118 IF (fcut == zero) THEN
119 fcut = 10000.0d0*unitab%FAC_T_WORK
120 ENDIF
121 asrate = two*pi*fcut
122
123 IF(epsp0 == zero) THEN
124 epsp0 = one
125 jcc = zero
126
127 CALL ancmsg(msgid=1654,msgtype=msginfo,
128 . anmode=aninfo_blind_1,i1=mat_id,c1=titr)
129 ENDIF
130
131 IF (dpis == zero) dpis = infinity
132 IF (dpad == zero) dpad = two*infinity
133 IF (dpis > dpad) THEN
134
135 CALL ancmsg(msgid=1655,msgtype=msgerror,
136 . anmode=aninfo_blind_1,i1=mat_id,c1=titr)
137 ENDIF
138
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
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
160 IF (cdr > 2.25d0) THEN
161 cdr = 2.25d0
162
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
168 CALL ancmsg(msgid=1652,msgtype=msgwarning,
169 . anmode=aninfo_blind_1,i1=mat_id,c1=titr)
170 ENDIF
171
172
173 kdr = (one/twenty7) - cdr*(four/twenty7/twenty7)
174 kdr = kdr**(one/six)
175 kdr = one/kdr
176
177
178 uparam(1) = young
179 uparam(2) = bulk
180 uparam(3) = g
181 uparam(4) = g2
182 uparam(5) = lam
183 uparam(6) = nu
184 uparam(7) = nnu
185 uparam(8) = nnu1
186 uparam(9) = a1
187 uparam(10) = a2
188 uparam(11) = flagnice
189 uparam(12) = cdr
190 uparam(13) = kdr
191 uparam(14) = tini
192 uparam(15) = hp
193 uparam(16) = yld0
194 uparam(17) = qvoce
195 uparam(18) = bvoce
196 uparam(19) = one
197 uparam(20) = jcc
198 uparam(21) = epsp0
199 uparam(22) = mtemp
200 uparam(23) = tref
201 uparam(24) = eta
202 uparam(25) = cp
203 uparam(26) = dpis
204 uparam(27) = dpad
205 uparam(28) = asrate
206 uparam(29) = zero
207
208
209
210 uparam(30) = zero
211
212
213
214 uparam(31) = zero
215 uparam(32) = zero
216 uparam(33) = zero
217 uparam(34) = zero
218 uparam(35) = zero
219 uparam(36) = zero
220 uparam(37) = zero
221 uparam(38) = zero
222 uparam(39) = zero
223 uparam(40) = zero
224
225 nfunc = 0
226 nuparam = 40
227 IF (flagnice == 1) THEN
228 nuvar = 1
229 ELSE
230 nuvar = 0
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
242 matparam%HEAT_FLAG = 1
243
248
251
252 parmat(1) = c1
253 parmat(2) = young
254 parmat(3) = nu
255 parmat(4) = zero
256 parmat(5) = zero
257
258 parmat(16) = 2
259 parmat(17) = (one - two*nu)/(one - nu)
260
261
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
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)
subroutine init_mat_keyword(matparam, keyword)
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)