44
45
46
51 USE matparam_def_mod
53
54
55
56#include "implicit_f.inc"
57
58
59
60#include "units_c.inc"
61#include "param_c.inc"
62
63
64
65 TYPE (UNIT_TYPE_),INTENT(IN) :: UNITAB
66 INTEGER, INTENT(IN) :: MAT_ID,MAXUPARAM,MAXFUNC
67 my_real,
DIMENSION(NPROPM) ,
INTENT(INOUT) :: pm
68 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
69 INTEGER, INTENT(INOUT) :: ISRATE,IFUNC(MAXFUNC)
70 INTEGER, INTENT(INOUT) :: NUPARAM,NUVAR,NFUNC
71 my_real,
DIMENSION(MAXUPARAM) ,
INTENT(INOUT) :: uparam
72 my_real,
DIMENSION(100),
INTENT(INOUT) :: parmat
73 TYPE(SUBMODEL_DATA), DIMENSION(*),INTENT(IN) :: LSUBMODEL
74 TYPE(MLAW_TAG_), INTENT(INOUT) :: MTAG
75 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
76
77
78
79 INTEGER I,J,K,ILAW,Ires,Ivisc,Ifail,Fct_SIG0,
80 . Fct_YOUN,Fct_TANG,Fct_FAIL
81
83 . rho0,young,nu,a,g,g2,lam,bulk,nnu,nnu1,fcut,dtmin,
84 . xscale_sig0,yscale_sig0,xscale_youn,yscale_youn,
85 . xscale_tang,xscale_fail,yscale_fail,
86 . xscale_unit,yscale_unit,a11,a12,tang
87
88 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
89
90 is_encrypted = .false.
91 is_available = .false.
92 ilaw = 121
93
95
96
97
98 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available,lsubmodel,unitab)
99
100 CALL hm_get_floatv(
'MAT_E' ,young ,is_available,lsubmodel,unitab)
101 CALL hm_get_floatv(
'MAT_NU' ,nu ,is_available,lsubmodel,unitab)
102 CALL hm_get_intv (
'MAT_Ires' ,ires ,is_available,lsubmodel)
103 CALL hm_get_intv (
'MAT_Ivisc' ,ivisc ,is_available,lsubmodel)
104 CALL hm_get_floatv(
'Fcut' ,fcut ,is_available,lsubmodel,unitab)
105 CALL hm_get_floatv(
'TDEL' ,dtmin ,is_available,lsubmodel,unitab)
106
107 CALL hm_get_intv (
'Fct_SIG0' ,fct_sig0 ,is_available,lsubmodel)
108 CALL hm_get_floatv(
'Xscale_SIG0',xscale_sig0,is_available,lsubmodel,unitab)
109 IF ((fct_sig0 /= 0).AND.(xscale_sig0 == zero)) THEN
111 xscale_sig0 = one * xscale_unit
112 ENDIF
113 CALL hm_get_floatv(
'Yscale_SIG0',yscale_sig0,is_available,lsubmodel,unitab)
114 IF ((fct_sig0 /= 0).AND.(yscale_sig0 == zero)) THEN
116 yscale_sig0 = one * yscale_unit
117 ENDIF
118
119 CALL hm_get_intv (
'Fct_YOUN' ,fct_youn ,is_available,lsubmodel)
120 CALL hm_get_floatv(
'Xscale_YOUN',xscale_youn,is_available,lsubmodel,unitab)
121 IF ((fct_youn /= 0).AND.(xscale_youn == zero)) THEN
123 xscale_youn = one * xscale_unit
124 ENDIF
125 CALL hm_get_floatv(
'Yscale_YOUN',yscale_youn,is_available,lsubmodel,unitab)
126 IF ((fct_youn /= 0).AND.(yscale_youn == zero)) THEN
128 yscale_youn = one * yscale_unit
129 ENDIF
130
131 CALL hm_get_intv (
'Fct_TANG' ,fct_tang ,is_available,lsubmodel)
132 CALL hm_get_floatv(
'Xscale_TANG',xscale_tang,is_available,lsubmodel,unitab)
133 IF ((fct_tang /= 0).AND.(xscale_tang == zero)) THEN
135 xscale_tang = one * xscale_unit
136 ENDIF
137 CALL hm_get_floatv(
'MAT_TANG' ,tang ,is_available,lsubmodel,unitab)
138 IF ((fct_tang /= 0).AND.(tang == zero)) THEN
140 tang = one * yscale_unit
141 ENDIF
142
143 CALL hm_get_intv (
'Fct_FAIL' ,fct_fail ,is_available,lsubmodel)
144 CALL hm_get_intv (
'MAT_Ifail' ,ifail ,is_available,lsubmodel)
145 CALL hm_get_floatv(
'Xscale_FAIL',xscale_fail,is_available,lsubmodel,unitab)
146 IF ((fct_fail /= 0).AND.(xscale_fail == zero)) THEN
148 xscale_fail = one * xscale_unit
149 ENDIF
150 CALL hm_get_floatv(
'Yscale_FAIL',yscale_fail,is_available,lsubmodel,unitab)
151 IF ((fct_fail /= 0).AND.(yscale_fail == zero)) THEN
153 yscale_fail = one * yscale_unit
154 ENDIF
155
156
157
158
159
160 g2 = young / (one + nu)
161 g = half * g2
162 lam = g2 * nu /(one - two*nu)
163 bulk = third * young / (one - nu*two)
164 nnu = nu / (one - nu)
165 nnu1 = one - nnu
166 a11 = young / (one - nu*nu)
167 a12 = a11 * nu
168
169 IF ((ires == 0).OR.(ires > 2)) ires = 2
170
171 ivisc =
min(
max(ivisc,0),1)
172
173 ifail =
min(
max(ifail,0),3)
174
175 IF ((fct_sig0 == 0).AND.(yscale_sig0 == zero)) THEN
177 . msgtype=msgerror,
178 . anmode=aninfo_blind_2,
179 . i1=mat_id,
180 . c1=titr)
181 ENDIF
182
183 IF ((ivisc == 1).AND.(fct_youn > 0)) THEN
185 . msgtype=msgwarning,
186 . anmode=aninfo_blind_2,
187 . i1=mat_id,
188 . c1=titr,
189 . i2=fct_youn)
190 ivisc = 0
191 ENDIF
192
193 IF (nu < zero .OR. nu >= half) THEN
195 . msgtype=msgerror,
196 . anmode=aninfo_blind_2,
197 . r1=nu,
198 . i1=mat_id,
199 . c1=titr)
200 ENDIF
201
202 IF (fcut == zero) THEN
203 fcut = 10000.0d0*unitab%FAC_T_WORK
204 ENDIF
205
206 IF (dtmin == zero) dtmin = -infinity
207
208
209
210
211
212 nuparam = 23
213
214 nfunc = 4
215
216 IF (ires == 1) THEN
217 IF (ivisc == 0) THEN
218 nuvar = 1
219 ELSE
220 nuvar = 3
221 ENDIF
222 ELSE
223 nuvar = 0
224 ENDIF
225
226
227 uparam(1) = young
228 uparam(2) = bulk
229 uparam(3) = g
230 uparam(4) = g2
231 uparam(5) = lam
232 uparam(6) = nu ! poisson ratio
233 uparam(7) = nnu
234 uparam(8) = nnu1
235 uparam(9) = a11
236 uparam(10) = a12
237 uparam(11) = ires
238 uparam(12) = ivisc
239 uparam(13) = ifail
240 uparam(14) = fcut
241 uparam(15) = dtmin
242 uparam(16) = xscale_sig0
243 uparam(17) = yscale_sig0
244 uparam(18) = xscale_youn
245 uparam(19) = yscale_youn
246 uparam(20) = xscale_tang
247 uparam(21) = tang
248 uparam(22) = xscale_fail
249 uparam(23) = yscale_fail
250
251
252 ifunc(1) = fct_sig0
253 ifunc(2) = fct_youn
254 ifunc(3) = fct_tang
255 ifunc(4) = fct_fail
256
257
258 parmat(1) = bulk
259 parmat(2) = young
260 parmat(3) = nu
261 parmat(4) = zero
262 parmat(5) = zero
263 israte = 0
264
265
266 pm(1) = rho0
267 pm(89) = rho0
268 pm(27) = sqrt((bulk + four_over_3*g)/rho0)
269 pm(100)= bulk
270
271
272 mtag%G_PLA = 1
273 mtag%L_PLA = 1
274 mtag%L_EPSD = 1
275 mtag%G_EPSD = 1
276
281
282
286
287
288
289
290 WRITE(iout,1000) trim(titr),mat_id,ilaw
291 WRITE(iout,1100)
292 IF (is_encrypted) THEN
293 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
294 ELSE
295 WRITE(iout,1200) rho0
296 WRITE(iout,1300) young,nu
297 WRITE(iout,1350) ires
298 WRITE(iout,1360) ivisc
299 WRITE(iout,1370) ifail
300 IF (ivisc == 0) THEN
301 WRITE(iout,1380) fcut
302 ENDIF
303 IF (fct_sig0 > 0) THEN
304 WRITE(iout,1400) fct_sig0,xscale_sig0,yscale_sig0
305 ELSE
306 WRITE(iout,1450) yscale_sig0
307 ENDIF
308 IF (fct_youn > 0) THEN
309 WRITE(iout,1500) fct_youn,xscale_youn,yscale_youn
310 ENDIF
311 IF (fct_tang > 0) THEN
312 WRITE(iout,1600) fct_tang,xscale_tang,tang
313 ELSE
314 WRITE(iout,1650) tang
315 ENDIF
316 IF (fct_fail > 0) THEN
317 WRITE(iout,1700) fct_fail,xscale_fail,yscale_fail
318 ENDIF
319 IF (dtmin > zero) THEN
320 WRITE(iout,1800) dtmin
321 ENDIF
322 ENDIF
323
324 1000 FORMAT(/
325 & 5x,a,/,
326 & 5x,'MATERIAL NUMBER. . . . . . . . . . . . =',i10/,
327 & 5x,'MATERIAL LAW . . . . . . . . . . . . . =',i10/)
328 1100 FORMAT
329 &(5x,'MATERIAL MODEL : RATE DEPENDENT PLASTICITY',/,
330 & 5x,'------------------------------------------',/)
331 1200 FORMAT(
332 & 5x,'INITIAL DENSITY . . . . . . . . . . . .=',1pg20.13/)
333 1300 FORMAT(
334 & 5x,'YOUNG MODULUS . . . . . . . . . . . . .=',1pg20.13/
335 & 5x,'POISSON RATIO . . . . . . . . . . . . .=',1pg20.13/)
336 1350 FORMAT(
337 & 5x,'RETURN MAPPING ALGORITHM FLAG . . . . .=',i3/
338 & 5x,' IRES=1 NICE EXPLICIT'/
339 & 5x,' IRES=2 NEWTON-ITERATION IMPLICIT (CUTTING PLANE)'/)
340 1360 FORMAT(
341 & 5x,'VISCOSITY FORMULATION FLAG. . . . . . .=',i3/
342 & 5x,' IVISC=0 SCALED YIELD STRESS FORMULATION'/
343 & 5x,' IVISC=1 FULL VISCOPLASTIC FORMULATION'/)
344 1370 FORMAT(
345 & 5x,'FAILURE CRITERION FLAG . . . . . . . .=',i3/
346 & 5x,' IFAIL=0 MAXIMUM VON MISES STRESS'/
347 & 5x,' IFAIL=1 MAXIMUM PLASTIC STRAIN'/
348 & 5x,' IFAIL=2 MAX. PRINC STRESS + ABSOLUTE VALUE OF MIN. PRINC. STRESS'/
349 & 5x,' IFAIL=3 MAXIMUM PRINCIPAL STRESS'/)
350 1380 FORMAT(
351 & 5x,'STRAIN-RATE FILTERING CUTOFF FREQUENCY.=',1pg20.13/)
352 1400 FORMAT(
353 & 5x,'INITIAL YIELD STRESS FUNCTION ID. . . .=',i10/
354 & 5x,'STRAIN-RATE SCALE FACTOR. . . . . . . .=',1pg20.13/
355 & 5x,'YIELD STRESS SCALE FACTOR . . . . . . .=',1pg20.13/)
356 1450 FORMAT(
357 & 5x,'CONSTANT INITIAL YIELD STRESS . . . . .=',1pg20.13/)
358 1500 FORMAT(
359 & 5x,'YOUNG MODULUS FUNCTION ID . . . . . . .=',i10/
360 & 5x,'STRAIN-RATE SCALE FACTOR. . . . . . . .=',1pg20.13/
361 & 5x,'YOUNG MODULUS SCALE FACTOR . . . . . .=',1pg20.13/)
362 1600 FORMAT(
363 & 5x,'TANGENT MODULUS FUNCTION ID . . . . . .=',i10/
364 & 5x,'STRAIN-RATE SCALE FACTOR. . . . . . . .=',1pg20.13/
365 & 5x,'TANGENT MODULUS SCALE FACTOR . . . . .=',1pg20.13/)
366 1650 FORMAT(
367 & 5x,'CONSTANT TANGENT MODULUS . . . . . . .=',1pg20.13/)
368 1700 FORMAT(
369 & 5x,'FAILURE CRITERION STRESS FUNCTION ID .=',i10/
370 & 5x,'STRAIN-RATE SCALE FACTOR. . . . . . . .=',1pg20.13/
371 & 5x,'ORDINATE SCALE FACTOR . . . . . . . . .=',1pg20.13/)
372 1800 FORMAT(
373 & 5x,'MINIMUM TIMESTEP FOR ELEMENT DELETION .=',1pg20.13/)
374
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_floatv_dim(name, dim_fac, 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)