41
42
43
48 USE matparam_def_mod
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69#include "implicit_f.inc"
70
71
72
73#include "units_c.inc"
74#include "param_c.inc"
75
76
77
78 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
79 INTEGER, INTENT(IN) :: MAT_ID
80 my_real,
DIMENSION(NPROPM) ,
INTENT(INOUT) :: pm
81 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
82 INTEGER, INTENT(INOUT) :: ISRATE
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 INTEGER :: ILAW,ICC
91 my_real :: rho0,rhor,young,nu,ca,cb,cn,mu,sigm,cc,eps0,g,c1,
92 . e1mn2,en1n2,sdsp,epst1,epsm1,epst2,epsm2,
93 . dmax1,dmax2,epsf1,epsf2,fcut
94 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
95
96 is_encrypted = .false.
97 is_available = .false.
98 ilaw = 27
99
100
102
103
104 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
105 CALL hm_get_floatv(
'Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
106
107 CALL hm_get_floatv(
'MAT_E' ,young ,is_available, lsubmodel, unitab)
108 CALL hm_get_floatv(
'MAT_NU' ,nu ,is_available, lsubmodel, unitab)
109
110 CALL hm_get_floatv(
'MAT_SIGY' ,ca ,is_available, lsubmodel, unitab)
111 CALL hm_get_floatv(
'MAT_BETA' ,cb ,is_available, lsubmodel, unitab)
112 CALL hm_get_floatv(
'MAT_HARD' ,cn ,is_available, lsubmodel, unitab)
113 CALL hm_get_floatv(
'MAT_SIG' ,sigm ,is_available, lsubmodel, unitab)
114
115 CALL hm_get_floatv(
'MAT_SRC' ,cc ,is_available, lsubmodel, unitab)
116 CALL hm_get_floatv(
'MAT_SRP' ,eps0 ,is_available, lsubmodel, unitab)
117 CALL hm_get_intv (
'STRFLAG' ,icc ,is_available,lsubmodel)
118 CALL hm_get_intv (
'Fsmooth' ,israte ,is_available,lsubmodel)
119 CALL hm_get_floatv(
'Fcut' ,fcut ,is_available, lsubmodel, unitab)
120
121 CALL hm_get_floatv(
'MAT_EPST1' ,epst1 ,is_available, lsubmodel, unitab)
122 CALL hm_get_floatv(
'MAT_EPSM1' ,epsm1 ,is_available, lsubmodel, unitab)
123 CALL hm_get_floatv(
'MAT_DAMAGE' ,dmax1 ,is_available, lsubmodel, unitab)
124 CALL hm_get_floatv(
'MAT_EPSF1' ,epsf1 ,is_available, lsubmodel, unitab)
125
126 CALL hm_get_floatv(
'MAT_EPST2' ,epst2 ,is_available, lsubmodel, unitab)
127 CALL hm_get_floatv(
'MAT_EPSM2' ,epsm2 ,is_available, lsubmodel, unitab)
128 CALL hm_get_floatv(
'MAT_DAMAGE2',dmax2 ,is_available, lsubmodel, unitab)
129 CALL hm_get_floatv(
'MAT_EPSF2' ,epsf2 ,is_available, lsubmodel, unitab)
130
131 IF (israte == 0 .AND. fcut /= zero) israte = 1
132 IF (fcut == zero) fcut = ep20
133 IF (nu >= half) nu = zep499
134 IF (icc == 0) icc = 1
135 IF (ca == zero) ca = ep20
136 IF (cn == zero) cn = one
137 IF (sigm == zero) sigm = ep20
138 IF (cc == zero) eps0 = one
139 IF (epst1 == zero) epst1 = ep20
140 IF (epsm1 == zero) epsm1 = onep1*ep20
141 IF (dmax1 == zero) dmax1 = zep999
142 IF (epst2 == zero) epst2 = ep20
143 IF (epsm2 == zero) epsm2 = onep1*ep20
144 IF (dmax2 == zero) dmax2 = zep999
145 IF (epsf1 == zero) epsf1 = onep2*ep20
146 IF (epsf2 == zero) epsf2 = onep2*ep20
147
148 g = half*young/(one + nu)
149 c1 = young/(three*(one - two*nu))
150 e1mn2 = young/(one-nu**2)
151 en1n2 = nu*e1mn2
152 sdsp = sqrt(young/
max(rho0,em20))
153 mu = pm(17)
154 IF (mu == zero) mu = fiveem2
155
156 parmat(1) = c1
157 parmat(2) = young
158 parmat(3) = nu
159 parmat(4) = israte
160 parmat(5) = fcut
161
162 pm(1) = rhor
163 pm(89) = rho0
164 pm(100)= c1
165
166 pm(9) = fcut*two*pi
167 pm(17) = mu
168 pm(20) = young
169 pm(21) = nu
170 pm(22) = g
171 pm(23) = zero
172 pm(24) = e1mn2
173 pm(25) = en1n2
174 pm(26) = five_over_6
175 pm(27) = sdsp
176 pm(28) = one/young
177 pm(29) = -nu*pm(28)
178 pm(30) = one/g
179 pm(31) = zero
180 pm(32) = c1
181 pm(38) = ca
182 pm(39) = cb
183 pm(40) = cn
184 pm(41) = ep20
185 pm(42) = sigm
186 pm(43) = cc
187 pm(44) = eps0
188 pm(49) = icc
189 pm(52) = onep414*mu*pm(1)*sdsp
190 pm(60) = epst1
191 pm(61) = epst2
192 pm(62) = epsm1
193 pm(63) = epsm2
194 pm(64) = dmax1
195 pm(65) = dmax2
196 pm(66) = epsf1
197 pm(67) = epsf2
198
199
200
201 mtag%G_GAMA = 6
202 mtag%G_PLA = 1
203
204 mtag%L_GAMA = 6
205 mtag%L_PLA = 1
206 mtag%L_DAM = 2
207 mtag%L_CRAK = 2
208 mtag%L_STRA = 6
209
210
212
213
215
216
217
218
219 WRITE(iout,1000) trim(titr),mat_id,27
220 WRITE(iout,1100)
221 IF (is_encrypted) THEN
222 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
223 ELSE
224 WRITE(iout,1200) rho0
225 WRITE(iout,1300) young,nu,g
226 WRITE(iout,1400) ca,cb,cn,sigm
227 WRITE(iout,1600) cc,eps0,icc,israte,fcut
228 WRITE(iout,1700) epst1,epsm1,dmax1,epsf1
229 WRITE(iout,1800) epst2,epsm2,dmax2,epsf2
230 ENDIF
231
232
233
234 IF (cn > one) THEN
236 . msgtype=msgerror,
237 . anmode=aninfo,
238 . i1=27,
239 . i2=mat_id,
240 . c1=titr)
241
242 ENDIF
243 IF (eps0 <= zero) THEN
245 . msgtype=msgerror,
246 . anmode=aninfo,
247 . i1=mat_id,
248 . c1=titr)
249 ENDIF
250 IF (epsm1 <= epst1) THEN
252 . msgtype=msgerror,
253 . anmode=aninfo,
254 . i1=mat_id,
255 . c1=titr)
256 ENDIF
257 IF (epsm2 <= epst2) THEN
259 . msgtype=msgerror,
260 . anmode=aninfo,
261 . i1=mat_id,
262 . c1=titr)
263 ENDIF
264 IF (dmax1 >= one .OR. dmax1 < zero) THEN
266 . msgtype=msgerror,
267 . anmode=aninfo,
268 . i1=mat_id,
269 . c1=titr)
270 ENDIF
271 IF (dmax2 >= one .OR. dmax2 < zero) THEN
273 . msgtype=msgerror,
274 . anmode=aninfo,
275 . i1=mat_id,
276 . c1=titr)
277 ENDIF
278
279 RETURN
280
281 1000 FORMAT(/
282 & 5x,a,/,
283 & 5x,'MATERIAL NUMBER. . . . . . . . . . . . =',i10/,
284 & 5x,'MATERIAL LAW . . . . . . . . . . . . . =',i10/)
285 1100 FORMAT(
286 & 5x,' ELASTIC PLASTIC BRITTLE MATERIAL '/,
287 & 5x,' -------------------------------- '//)
288 1200 FORMAT(
289 & 5x,'INITIAL DENSITY . . . . . . . . . . . .=',1pg20.13/)
290 1300 FORMAT(
291 & 5x,'YOUNG MODULUS . . . . . . . . . . . .=',1pg20.13/,
292 & 5x,'POISSON RATIO . . . . . . . . . . . . .=',1pg20.13/,
293 & 5x,'SHEAR MODULUS . . . . . . . . . . . . .=',1pg20.13//)
294 1400 FORMAT(
295 & 5x,'YIELD COEFFICIENT CA. . . . . . . . . .=',1pg20.13/,
296 & 5x,'YIELD COEFFICIENT CB. . . . . . . . . .=',1pg20.13/,
297 & 5x,'YIELD COEFFICIENT CN. . . . . . . . . .=',1pg20.13/,
298 & 5x,'SIG-MAX . . . . . . . . . . . . . . . .=',1pg20.13//)
299 1600 FORMAT(
300 & 5x,'STRAIN RATE COEFFICIENT CC. . . . . . .=',1pg20.13/,
301 & 5x,'REFERENCE STRAIN RATE . . . . . . . . .=',1pg20.13/,
302 & 5x,'FLAG FOR STRAIN RATE ON SIG-MAX . . . .=',i10//,
303 & 5x,'SMOOTH STRAIN RATE OPTION . . . . . . .=',i10/,
304 & 5x,'STRAIN RATE CUTTING FREQUENCY . . . . .=',1pg20.13/)
305 1700 FORMAT(
306 & 5x,'TENSILE FAILURE STRAIN DIR-1. . . . . .=',1pg20.13/,
307 & 5x,'MAXIMUM TENSILE STRAIN DIR-1. . . . . .=',1pg20.13/,
308 & 5x,'MAXIMUM DAMAGE DIR-1. . . . . . . . . .=',1pg20.13/,
309 & 5x,'ELEMENT RUPTURE TENSILE STRAIN DIR-1. .=',1pg20.13/)
310 1800 FORMAT(
311 & 5x,'TENSILE FAILURE STRAIN DIR-2. . . . . .=',1pg20.13/,
312 & 5x,'MAXIMUM TENSILE STRAIN DIR-2. . . . . .=',1pg20.13/,
313 & 5x,'MAXIMUM DAMAGE DIR-2. . . . . . . . . .=',1pg20.13/,
314 & 5x,'ELEMENT RUPTURE TENSILE STRAIN DIR-2. .=',1pg20.13//)
315
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)