44
45
46
51 USE matparam_def_mod
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67#include "implicit_f.inc"
68
69
70
71#include "units_c.inc"
72#include "param_c.inc"
73
74
75
76 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
77 INTEGER, INTENT(IN) :: MAT_ID,MAXUPARAM,MAXFUNC
78 my_real,
DIMENSION(NPROPM) ,
INTENT(INOUT) :: pm
79 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
80 INTEGER, INTENT(INOUT) :: ISRATE,IFUNC(MAXFUNC)
81 INTEGER, INTENT(INOUT) :: NUPARAM,NUVAR,NFUNC,NVARTMP
82 my_real,
DIMENSION(MAXUPARAM) ,
INTENT(INOUT) :: uparam
83 my_real,
DIMENSION(100),
INTENT(INOUT) :: parmat
84 TYPE(SUBMODEL_DATA), DIMENSION(*),INTENT(IN) :: LSUBMODEL
85 TYPE(MLAW_TAG_), INTENT(INOUT) :: MTAG
86 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
87
88
89
90 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
91 INTEGER :: ILAW,ICC,ISRAT,Ivflag
92 my_real :: rho0,rhor,e,nu,ca,cb,cn,g,a1,bulk,epsm,sigm,epsr1,epsr2,
93 . epsp_ref,fisokin,cp,cc,asrate,epsgm,yld_scale,yld_scale_unit
94
95 is_encrypted = .false.
96 is_available = .false.
97 ilaw = 44
98
100
101 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
102 CALL hm_get_floatv(
'Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
103
104 CALL hm_get_floatv(
'MAT_E' ,e ,is_available, lsubmodel, unitab)
105 CALL hm_get_floatv(
'MAT_NU' ,nu ,is_available, lsubmodel, unitab)
106
107 CALL hm_get_floatv(
'MAT_SIGY' ,ca ,is_available, lsubmodel, unitab)
108 CALL hm_get_floatv(
'MAT_B' ,cb ,is_available, lsubmodel, unitab)
109 CALL hm_get_floatv(
'MAT_N' ,cn ,is_available, lsubmodel, unitab)
110 CALL hm_get_floatv(
'MAT_HARD' ,fisokin ,is_available, lsubmodel, unitab)
111 CALL hm_get_floatv(
'MAT_SIG' ,sigm ,is_available, lsubmodel, unitab)
112
113 CALL hm_get_floatv(
'MAT_SRC' ,epsp_ref ,is_available, lsubmodel, unitab)
114 CALL hm_get_floatv(
'MAT_SRE' ,cp ,is_available, lsubmodel, unitab)
115 CALL hm_get_intv (
'STRFLAG' ,icc ,is_available, lsubmodel)
116 CALL hm_get_intv (
'Fsmooth' ,israt ,is_available, lsubmodel)
117 CALL hm_get_floatv(
'Fcut' ,asrate ,is_available, lsubmodel, unitab)
118 CALL hm_get_intv (
'Vflag' ,ivflag ,is_available, lsubmodel)
119
120 CALL hm_get_floatv(
'MAT_EPS' ,epsm ,is_available, lsubmodel, unitab)
121 CALL hm_get_floatv(
'MAT_ETA1' ,epsr1 ,is_available, lsubmodel, unitab)
122 CALL hm_get_floatv(
'MAT_ETA2' ,epsr2 ,is_available, lsubmodel, unitab)
123
124 CALL hm_get_intv (
'YLD_FUNC' ,ifunc(1) ,is_available, lsubmodel)
125 CALL hm_get_floatv(
'YLD_SCALE' ,yld_scale,is_available, lsubmodel, unitab)
126
127
128
129 IF (rhor == zero) rhor = rho0
130
131 IF (nu < zero .OR. nu >= half) THEN
133 . msgtype=msgerror,
134 . anmode=aninfo_blind_2,
135 . r1=nu,
136 . i1=mat_id,
137 . c1=titr)
138 ENDIF
139 IF (epsp_ref == zero) THEN
140 cc = zero
141 ELSE
142 cc = one / epsp_ref
143 END IF
144 IF (cc > zero .AND. cp > zero .AND.
145 . israt == 0 .AND. asrate == zero .AND. ivflag /= 1) THEN
147 . msgtype=msgwarning,
148 . anmode=aninfo_blind_1,
149 . i1=mat_id,
150 . c1=titr)
151 ENDIF
152 IF (epsr1 == zero) epsr1 = infinity
153 IF (epsr2 == zero) epsr2 = two*infinity
154 IF (epsm == zero) epsm = infinity
155 IF (sigm == zero) sigm = infinity
156 IF (icc == 0) icc = 1
157 IF (cp == zero) cp = one
158 cp = one / cp
159 IF (ivflag == 0) THEN
160 ivflag = 2
161 ENDIF
162
163
164 IF (ivflag == 1) THEN
165
166 israt = 1
167 israte =
max(israte,israt)
168 asrate = 10000.0d0*unitab%FAC_T_WORK
169 ELSE
170 IF (asrate /= zero) THEN
171
172 israt = 1
173 israte =
max(israte,israt)
174 ELSE
175
176 IF (israt /= 0) THEN
177 israt = 1
178 israte =
max(israte,israt)
179 asrate = 10000.0d0*unitab%FAC_T_WORK
180
181 ELSE
182 israt = 0
183 israte = 0
184 asrate = zero
185 ENDIF
186 ENDIF
187 ENDIF
188
189 IF (cn /= zero .and. cb /= zero) THEN
190 epsgm = ((sigm - ca) / cb)**(one/cn)
191 ELSE
192 epsgm = infinity
193 ENDIF
194 IF (ifunc(1) == 0) THEN
195 yld_scale = zero
196 ELSEIF (yld_scale == zero) THEN
197 CALL hm_get_floatv_dim(
'YLD_SCALE' ,yld_scale_unit ,is_available, lsubmodel, unitab)
198 yld_scale = one * yld_scale_unit
199 ENDIF
200
201 IF (((ifunc(1) > 0).AND.(ca /= zero)).AND.(ivflag /= 1)) THEN
203 . msgtype=msgwarning,
204 . anmode=aninfo_blind_1,
205 . i1=mat_id,
206 . c1=titr)
207 ca = zero
208
209 ENDIF
210
211 bulk = e / three / (one - two*nu)
212 a1 = e / (one-nu*nu)
213 g = e / two / (one + nu)
214
215 nuparam = 24
216 IF (ifunc(1) > 0) THEN
217 nfunc = 1
218 nvartmp = 1
219 ELSE
220 nfunc = 0
221 nvartmp = 0
222 ENDIF
223 nuvar = 1
224
225 uparam(1) = e
226 uparam(2) = nu
227 uparam(3) = ca
228 uparam(4) = sigm
229 uparam(5) = epsm
230 uparam(6) = epsr1
231 uparam(7) = epsr2
232 uparam(8) = cb
233 uparam(9) = cn
234 uparam(10) = icc
235 uparam(11) = cc
236 uparam(12) = cp
237 uparam(13) = israt
238 uparam(14) = asrate
239 uparam(15) = fisokin
240 uparam(16) = g
241 uparam(17) = two*g
242 uparam(18) = three*g
243 uparam(19) = bulk
244 uparam(20) = a1
245 uparam(21) = a1*nu
246 uparam(22) = epsgm
247 uparam(23) = ivflag
248 uparam(24) = yld_scale
249
250 parmat(1) = bulk
251 parmat(2) = e
252 parmat(3) = nu
253 parmat(4) = israte
254 parmat(5) = asrate
255
256 parmat(16) = 2
257 parmat(17) = two*g/(bulk+four_over_3*g)
258
259
260 pm(1) = rhor
261 pm(89) = rho0
262 pm(27) = sqrt(a1/rho0)
263 pm(100)= bulk
264
265
266
267 mtag%G_PLA = 1
268 mtag%L_PLA = 1
269 mtag%L_EPSD = 1
270 mtag%G_EPSD = 1
271 IF (fisokin > zero) THEN
272 mtag%L_SIGB = 3
273 ENDIF
274
278
283
284
286
287 WRITE(iout,1000) trim(titr),mat_id,44
288 WRITE(iout,1100)
289
290 IF (is_encrypted) THEN
291 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
292 ELSE
293 WRITE(iout,1200) rho0
294 WRITE(iout,1300)e,nu,ca,cb,cn,fisokin,sigm,
295 . epsp_ref,cp,icc,israte,asrate,ivflag,epsm,
296 . epsr1,epsr2,ifunc(1),yld_scale
297 ENDIF
298
299 1000 FORMAT(/
300 & 5x,a,/,
301 & 5x,'MATERIAL NUMBER. . . . . . . . . . . . =',i10/,
302 & 5x,'MATERIAL LAW . . . . . . . . . . . . . =',i10/)
303 1100 FORMAT
304 &(5x,'MATERIAL MODEL : ELASTIC-PLASTIC (COWPER-SYMONDS)',/,
305 & 5x,'-------------------------------------------------',/)
306 1200 FORMAT(
307 & 5x,'INITIAL DENSITY . . . . . . . . . . . .=',1pg20.13/)
308 1300 FORMAT(
309 & 5x,'YOUNG MODULUS . . . . . . . . . . . . .=',1pg20.13/
310 & 5x,'POISSON RATIO . . . . . . . . . . . . .=',1pg20.13/
311 & 5x,'YIELD STRESS . . . . . . . . . . . . . =',1pg20.13/
312 & 5x,'HARDENING PARAMETER. . . . . . . . . . =',1pg20.13/
313 & 5x,'HARDENING EXPONENT . . . . . . . . . . =',1pg20.13/
314 & 5x,'ISO-KINEMATIC HARDENNING FACTOR. . . . =',1pg20.13/
315 & 5x,'MAXIMUM STRESS . . . . . . . . . . . . =',1pg20.13/
316 & 5x,'REFERENCE STRAIN RATE CC . . . . . . . =',1pg20.13/
317 & 5x,'STRAIN RATE EXPONENT (1/P) . . . . . . =',1pg20.13/
318 & 5x,'FLAG FOR STRAIN RATE ON SIG-MAX. . . . =',i10/
319 & 5x,'SMOOTH STRAIN RATE OPTION. . . . . . . =',i10/
320 & 5x,'STRAIN RATE CUTTING FREQUENCY. . . . . =',1pg20.13/
321 & 5x,'STRAIN RATE CHOICE FLAG . . . . . . . =',i10/
322 & 5x,' VP=1 EQUIVALENT PLASTIC STRAIN RATE'/
323 & 5x,' VP=2 TOTAL STRAIN RATE (DEFAULT)'/
324 & 5x,' VP=3 DEVIATORIC STRAIN RATE'/
325 & 5x,'FAILURE PLASTIC STRAIN . . . . . . . . =',1pg20.13/
326 & 5x,'TENSION FAILURE STRAIN 1 . . . . . . . =',1pg20.13/
327 & 5x,'TENSION FAILURE STRAIN 2 . . . . . . . =',1pg20.13/
328 & 5x,'YIELD FUNCTION IDENTIFIER . . . . . . =',i10/
329 & 5x,'YIELD FUNCTION SCALE FACTOR . . . . . =',1pg20.13/)
330
331 RETURN
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)