43
44
45
50 USE matparam_def_mod
52
53
54
55#include "implicit_f.inc"
56
57
58
59#include "com04_c.inc"
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,MAXTABL
67 my_real,
DIMENSION(NPROPM) ,
INTENT(INOUT) :: pm
68 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
69 INTEGER, INTENT(INOUT) :: ISRATE,ITABLE(MAXTABL)
70 INTEGER, INTENT(INOUT) :: NUPARAM,,NTABL,NVARTMP
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, Ivflag
80
81
83 . rho0,young,nu,
alpha,gamma,epsd,
alpha2,beta,sigp,cfail,pfail,
84 . g,g2,lam,bulk,nnu,nnu1,rhof0,sigp_c0,sigp_c1,sigp_n,alpha2_c0,
85 . alpha2_c1,alpha2_n,gamma_c0,gamma_c1,gamma_n,beta_c0,beta_c1,beta_n
86
87 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
88
89 is_encrypted = .false.
90 is_available = .false.
91 ilaw = 115
92
94
95
96
97 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
98
99 CALL hm_get_floatv(
'MAT_E' ,young ,is_available, lsubmodel, unitab)
100 CALL hm_get_floatv(
'MAT_NU' ,nu ,is_available, lsubmodel, unitab)
101 CALL hm_get_intv (
'MAT_IRES' ,ires ,is_available, lsubmodel)
102 CALL hm_get_intv (
'MAT_ISTAT' ,istat ,is_available, lsubmodel)
103
104
105 IF (istat == 0) THEN
106
108 CALL hm_get_floatv(
'MAT_CFAIL' ,cfail ,is_available, lsubmodel, unitab)
109 CALL hm_get_floatv(
'MAT_PFAIL' ,pfail ,is_available, lsubmodel, unitab)
110
111 CALL hm_get_floatv(
'MAT_SIGP' ,sigp ,is_available, lsubmodel, unitab)
112 CALL hm_get_floatv(
'MAT_GAMMA' ,gamma ,is_available, lsubmodel, unitab)
113 CALL hm_get_floatv(
'MAT_EPSD' ,epsd ,is_available, lsubmodel, unitab)
115 CALL hm_get_floatv(
'MAT_BETA' ,beta ,is_available, lsubmodel, unitab)
116
117
118 ELSE
119
121 CALL hm_get_floatv(
'MAT_CFAIL' ,cfail ,is_available, lsubmodel, unitab)
123 CALL hm_get_floatv(
'MAT_RHOF0' ,rhof0 ,is_available, lsubmodel, unitab)
124
126 CALL hm_get_floatv(
'MAT_SIGP_C1' ,sigp_c1 ,is_available, lsubmodel, unitab)
127 CALL hm_get_floatv(
'MAT_SIGP_N' ,sigp_n ,is_available, lsubmodel, unitab)
128
129 CALL hm_get_floatv(
'MAT_ALPHA2_C0' ,alpha2_c0 ,is_available, lsubmodel, unitab)
130 CALL hm_get_floatv(
'MAT_ALPHA2_C1' ,alpha2_c1 ,is_available, lsubmodel, unitab)
131 CALL hm_get_floatv(
'MAT_ALPHA2_N' ,alpha2_n ,is_available, lsubmodel, unitab)
132
133 CALL hm_get_floatv(
'MAT_GAMMA_C0' ,gamma_c0 ,is_available, lsubmodel, unitab)
134 CALL hm_get_floatv(
'MAT_GAMMA_C1' ,gamma_c1 ,is_available, lsubmodel, unitab)
135 CALL hm_get_floatv(
'MAT_GAMMA_N' ,gamma_n ,is_available, lsubmodel, unitab)
136
137 CALL hm_get_floatv(
'MAT_BETA_C0' ,beta_c0 ,is_available, lsubmodel, unitab)
138 CALL hm_get_floatv(
'MAT_BETA_C1' ,beta_c1 ,is_available, lsubmodel, unitab)
139 CALL hm_get_floatv(
'MAT_BETA_N' ,beta_n ,is_available, lsubmodel, unitab)
140
141 ENDIF
142
143
144
145
146
147 IF ((ires == 0).OR.(ires > 2)) ires = 2
148
149 IF (nu < zero .OR. nu >= half) THEN
151 . msgtype=msgerror,
152 . anmode=aninfo_blind_2,
153 . r1=nu,
154 . i1=mat_id,
155 . c1=titr)
156 ENDIF
157
158 g2 = young / (one + nu)
159 g = half * g2
160 lam = g2 * nu /(one - two*nu)
161 bulk = third * young / (one - nu*two)
162 nnu = nu / (one - nu)
163 nnu1 = one - nnu
164
165 IF (istat == 0) THEN
166
167 IF (sigp == zero) sigp = infinity
168 IF (sigp < zero) THEN
170 . msgtype=msgerror,
171 . anmode=aninfo_blind_2,
172 . r1=sigp,
173 . i1=mat_id,
174 . c1=titr)
175 ENDIF
176
177 IF (epsd == zero) epsd = infinity
178 IF (epsd < zero) THEN
180 . msgtype=msgerror,
181 . anmode=aninfo_blind_2,
182 . r1=epsd,
183 . i1=mat_id,
184 . c1=titr)
185 ENDIF
186
187 IF (beta == zero) beta = one
188 ENDIF
189
190 IF ((
alpha < zero).OR.(
alpha > sqrt(4.5d0)))
THEN
192 . msgtype=msgerror,
193 . anmode=aninfo_blind_2,
195 . i1=mat_id,
196 . c1=titr)
197 ENDIF
198
199 IF (cfail < zero) THEN
201 . msgtype=msgerror,
202 . anmode=aninfo_blind_2,
203 . r1=cfail,
204 . i1=mat_id,
205 . c1=titr)
206 ENDIF
207
208 IF (pfail < zero) THEN
210 . msgtype=msgerror,
211 . anmode=aninfo_blind_2,
212 . r1=pfail,
213 . i1=mat_id,
214 . c1=titr)
215 ENDIF
216
217 IF (istat == 1) THEN
218
219 IF (nperturb == 0) THEN
221 . msgtype=msgwarning,
222 . anmode=aninfo_blind_2,
223 . i1=mat_id,
224 . c1=titr)
225 ENDIF
226 ENDIF
227
228
229
230
231
232 IF (istat == 0) THEN
233 nuparam = 20
234 ELSE
235 nuparam = 28
236 ENDIF
237
238 ntabl = 0
239 nvartmp = 0
240
241 IF (ires == 1) THEN
242 IF (cfail > zero) THEN
243 nuvar = 2
244 ELSE
245 nuvar = 1
246 ENDIF
247 ELSE
248 IF (cfail > zero) THEN
249 nuvar = 1
250 ELSE
251 nuvar = 0
252 ENDIF
253 ENDIF
254
255
256 uparam(1) = young
257 uparam(2) = bulk
258 uparam(3) = g
259 uparam(4) = g2
260 uparam(5) = lam
261 uparam(6) = nu
262 uparam(7) = nnu
263 uparam(8) = nnu1
264 uparam(11) = ires
265 uparam(12) = istat
267 uparam(14) = cfail
268 uparam(15) = pfail
269 IF (istat == 0) THEN
270 uparam(16) = gamma
271 uparam(17) = epsd
273 uparam(19) = beta
274 uparam(20) = sigp
275 ELSE
276 uparam(16) = rhof0
277 uparam(17) = sigp_c0
278 uparam(18) = sigp_c1
279 uparam(19) = sigp_n
280 uparam(20) = alpha2_c0
281 uparam(21) = alpha2_c1
282 uparam(22) = alpha2_n
283 uparam(23) = gamma_c0
284 uparam(24) = gamma_c1
285 uparam(25) = gamma_n
286 uparam(26) = beta_c0
287 uparam(27) = beta_c1
288 uparam(28) = beta_n
289 ENDIF
290
291
292 parmat(1) = bulk
293 parmat(2) = young
294 parmat(3) = nu
295 parmat(4) = zero
296 parmat(5) = zero
297 israte = 0
298
299
300 pm(1) = rho0
301 pm(89) = rho0
302 pm(27) = sqrt((bulk + four_over_3*g)/rho0)
303 pm(100)= bulk
304
305
306 mtag%G_PLA = 1
307 mtag%L_PLA = 1
308 mtag%L_SEQ = 1
309 mtag%G_SEQ = 1
310 mtag%L_RHO = 2
311 mtag%G_RHO = 2
312
317
318
320
321
322
323
324 WRITE(iout,1000) trim(titr),mat_id,ilaw
325 WRITE(iout,1100)
326 IF (is_encrypted) THEN
327 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
328 ELSE
329 WRITE(iout,1200) rho0
330 WRITE(iout,1300) young,nu
331 WRITE(iout,1350) ires
332 WRITE(iout,1375) istat
333 IF (istat == 0) THEN
334 WRITE(iout,1400)
alpha,gamma,epsd,
alpha2,beta,sigp,cfail,pfail
335 ELSE
336 WRITE(iout,1450)
alpha,rhof0,sigp_c0,sigp_c1,sigp_n,alpha2_c0,
337 . alpha2_c1,alpha2_n,gamma_c0,gamma_c1,gamma_n,
338 . beta_c0,beta_c1,beta_n,cfail,pfail
339 ENDIF
340 ENDIF
341
342 1000 FORMAT(/
343 & 5x,a,/,
344 & 5x,'MATERIAL NUMBER. . . . . . . . . . . . =',i10/,
345 & 5x,'MATERIAL LAW . . . . . . . . . . . . . =',i10/)
346 1100 FORMAT
347 &(5x,'MATERIAL MODEL : DESHPANDE AND FLECK FOAM',/,
348 & 5x,'-----------------------------------------',/)
349 1200 FORMAT(
350 & 5x,'INITIAL DENSITY . . . . . . . . . . . .=',1pg20.13/)
351 1300 FORMAT(
352 & 5x,'YOUNG MODULUS . . . . . . . . . . . . .=',1pg20.13/
353 & 5x,'POISSON RATIO . . . . . . . . . . . . .=',1pg20.13/)
354 1350 FORMAT(
355 & 5x,'RETURN MAPPING ALGORITHM FLAG . . . . .=',i3/
356 & 5x,' IRES=1 NICE EXPLICIT'/
357 & 5x,' IRES=2 NEWTON-ITERATION IMPLICIT (CUTTING PLANE)'/)
358 1375 FORMAT(
359 & 5x,'STATISTICAL VARIATION FLAG . . . . . .=',i3/)
360 1400 FORMAT(
361 & 5x,'YIELD SURFACE SHAPE PARAMETER ALPHA . .=',1pg20.13/
362 & 5x,'LINEAR HARDENING MODULUS GAMMA . . . .=',1pg20.13/
363 & 5x,'DENSIFICATION STRAIN EPSD . . . . . . .=',1pg20.13/
364 & 5x,'NON-LINEAR HARDENING MODULUS ALPHA2 . .=',1pg20.13/
365 & 5x,'NON-LINEAR HARDENING EXPONENT BETA . .=',1pg20.13/
366 & 5x,'INITIAL YIELD STRESS SIGP . . . . . . .=',1pg20.13/
367 & 5x,'TENSILE VOLUMETRIC STRAIN AT FAILURE .=',1pg20.13/
368 & 5x,'MAX. PRINCIPAL STRESS AT FAILURE . . .=',1pg20.13/)
369 1450 FORMAT(
370 & 5x,'YIELD SURFACE SHAPE PARAMETER ALPHA . .=',1pg20.13/
371 & 5x,'DENSITY OF BASE MATERIAL . . . . . . .=',1pg20.13/
372 & 5x,'INITIAL YIELD STRESS PARAM. SIGP_C0 . .=',1pg20.13/
373 & 5x,'INITIAL YIELD STRESS PARAM. SIGP_C1 . .=',1pg20.13/
374 & 5x,'INITIAL YIELD STRESS EXPO. SIGP_N . .=',1pg20.13/
375 & 5x,'NON-LINEAR HARDENING PARAM. ALPHA2_C0 .=',1pg20.13/
376 & 5x,'NON-LINEAR HARDENING PARAM. ALPHA2_C1 .=',1pg20.13/
377 & 5x,'NON-LINEAR HARDENING EXPO. ALPHA2_N .=',1pg20.13/
378 & 5x,'LINEAR HARDENING PARAM. GAMMA_C0 . . .=',1pg20.13/
379 & 5x,'LINEAR HARDENING PARAM. GAMMA_C1 . . .=',1pg20.13/
380 & 5x,'LINEAR HARDENING PARAM. GAMMA_N . . . .=',1pg20.13/
381 & 5x,'NON-LINEAR HARDENING EXPO. BETA_C0 . .=',1pg20.13/
382 & 5x,'NON-LINEAR HARDENING EXPO. BETA_C1 . .=',1pg20.13/
383 & 5x,'NON-LINEAR HARDENING EXPO. BETA_N . .=',1pg20.13/
384 & 5x,'TENSILE VOLUMETRIC STRAIN AT FAILURE .=',1pg20.13/
385 & 5x,'MAX. PRINCIPAL STRESS AT FAILURE . . .=',1pg20.13/)
386
387 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)