42
43
44
49 USE matparam_def_mod
51
52
53
54#include "implicit_f.inc"
55
56
57
58#include "units_c.inc"
59#include "param_c.inc"
60
61
62
63 TYPE (UNIT_TYPE_),INTENT(IN) :: UNITAB
64 INTEGER, INTENT(IN) :: MAT_ID,MAXUPARAM
65 my_real,
DIMENSION(NPROPM) ,
INTENT(INOUT) :: pm
66 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
67 INTEGER, INTENT(INOUT) :: ISRATE
68 INTEGER, INTENT(OUT) :: NUPARAM,NUVAR
69 my_real,
DIMENSION(MAXUPARAM) ,
INTENT(INOUT) :: uparam
70 my_real,
DIMENSION(100),
INTENT(OUT) :: parmat
71 TYPE(SUBMODEL_DATA), DIMENSION(*),INTENT(IN) :: LSUBMODEL
72 TYPE(MLAW_TAG_), INTENT(OUT) :: MTAG
73 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
74
75
76
77 INTEGER ILAW, IRATE, DTYPE, DFLAG, IREG, IDEL
78
80 . rho0,young,nu,g,g2,lam,bulk,fcut,fc,ft,
81 . ah,bh,ch,dh,hp,as,qh0,ecc,m0,wf,wf1,ft1,df
82 . efc,epsi
84 . fc0,epst0,epstmax,deltas,betas,epsc0,epscmax,alphas
85
86 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
87
88 is_encrypted = .false.
89 is_available = .false.
90 ilaw = 124
91
93
94
95
96 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available,lsubmodel,unitab)
97
98 CALL hm_get_floatv(
'MAT_E' ,young ,is_available,lsubmodel,unitab)
99 CALL hm_get_floatv(
'MAT_NU' ,nu ,is_available,lsubmodel,unitab)
100 CALL hm_get_intv (
'IDEL' ,idel ,is_available,lsubmodel)
101 CALL hm_get_intv (
'IRATE' ,irate ,is_available,lsubmodel)
102 CALL hm_get_floatv(
'FCUT' ,fcut ,is_available,lsubmodel,unitab)
103
104 CALL hm_get_floatv(
'MAT_ECC' ,ecc ,is_available,lsubmodel,unitab
105 CALL hm_get_floatv(
'MAT_QH0' ,qh0 ,is_available,lsubmodel,unitab)
106 CALL hm_get_floatv(
'MAT_FT' ,ft ,is_available,lsubmodel,unitab)
107 CALL hm_get_floatv(
'MAT_FC' ,fc ,is_available,lsubmodel,unitab)
108 CALL hm_get_floatv(
'MAT_HP' ,hp ,is_available,lsubmodel,unitab)
109
110 CALL hm_get_floatv(
'MAT_AH' ,ah ,is_available,lsubmodel,unitab)
111 CALL hm_get_floatv(
'MAT_BH' ,bh ,is_available,lsubmodel,unitab)
112 CALL hm_get_floatv(
'MAT_CH' ,ch ,is_available,lsubmodel,unitab)
113 CALL hm_get_floatv(
'MAT_DH' ,dh ,is_available,lsubmodel,unitab)
114
115 CALL hm_get_floatv(
'MAT_AS' ,as ,is_available,lsubmodel,unitab)
116 CALL hm_get_floatv(
'MAT_BS' ,bs ,is_available,lsubmodel,unitab)
117 CALL hm_get_floatv(
'MAT_DF' ,df ,is_available,lsubmodel,unitab)
118 CALL hm_get_intv (
'DFLAG' ,dflag ,is_available,lsubmodel)
119 CALL hm_get_intv ('dtype
' ,DTYPE ,IS_AVAILABLE,LSUBMODEL)
120 CALL HM_GET_INTV ('ireg' ,IREG ,IS_AVAILABLE,LSUBMODEL)
121
122 CALL HM_GET_FLOATV('mat_wf' ,WF ,IS_AVAILABLE,LSUBMODEL,UNITAB)
123 CALL HM_GET_FLOATV('mat_wf1' ,WF1 ,IS_AVAILABLE,LSUBMODEL,UNITAB)
124 CALL HM_GET_FLOATV('mat_ft1' ,FT1 ,IS_AVAILABLE,LSUBMODEL,UNITAB)
125 CALL HM_GET_FLOATV('mat_efc' ,EFC ,IS_AVAILABLE,LSUBMODEL,UNITAB)
126
127
128
129
130 ! Poisson's ratio
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
140 g2 = young / (one + nu)
141 g = half * g2
142 lam = g2 * nu /(one - two
143 bulk = third * young / (one - nu*two)
144
145 IF (wf1 == zero) THEN
146 wf1 = 0.15d0*wf
147 ENDIF
148
149 IF (ft1 == zero) THEN
150 ft1 = 0.3d0*ft
151 ENDIF
152
153 IF (qh0 == zero) THEN
154 qh0 = 0.3d0
155 ENDIF
156
157 IF (ah == zero) THEN
158 ah = 8.0d-2
159 ENDIF
160 IF (bh == zero) THEN
161 bh = 3.0d-3
162 ENDIF
163 IF (ch == zero) THEN
164 ch = 2.0d0
165 ENDIF
166 IF (dh == zero) THEN
167 dh = 1.0d-6
168 ENDIF
169
170 IF (df == zero) THEN
171 df = 0.85d0
172 ENDIF
173
174 IF (efc == zero) THEN
175 efc = 1.0d-4
176 ENDIF
177
178 IF (as == zero) THEN
179 as = 15.0d0
180 ENDIF
181 IF (bs == zero) THEN
182 bs = one
183 ENDIF
184
185 IF (ecc == zero) THEN
186 epsi = ft*((1.16d0*fc)**2 - fc**2)/(1.16d0*fc*(fc**2-ft**2))
187 ecc = (one + epsi)/(two - epsi)
188 ENDIF
189
190 m0 = three*(((fc**2)-(ft**2))/(fc*ft))*(ecc/(ecc + one))
191
192 IF (idel == 0) idel = 1
195
196 IF (dflag == 0) dflag = 1
197 dflag =
min(
max(1,dflag),4)
198
199 IF (dtype == 0) dtype = 2
200 dtype =
min(
max(1,dtype),3)
201
202 IF (ireg == 0) ireg = 2
205
206 fc0 = ten*ep06*unitab%FAC_T_WORK*unitab%FAC_T_WORK*unitab%FAC_L_WORK/unitab%FAC_M_WORK
207
208 epst0 = 30.0d0*em06*unitab%FAC_T_WORK
209 epstmax = one*unitab%FAC_T_WORK
210 deltas = one / (one + eight*(fc/fc0))
211 betas = exp(six*deltas - two)
212
213 epsc0 = 30.0d0*em06*unitab%FAC_T_WORK
214 epscmax = 30.0d0*unitab%FAC_T_WORK
215 alphas = one / (five + nine*(fc/fc0))
216 gammas = exp(6.156d0*alphas - two)
217
218 IF (irate == 0) irate = 1
221 IF (irate > 1) THEN
222 israte = 1
223
224 IF (fcut == zero) THEN
225 fcut = 10000.0d0*unitab%FAC_T_WORK
226 ENDIF
227 ELSE
228 israte = 0
229 fcut = zero
230 ENDIF
231
232
233
234
235
236 nuparam = 36
237
238 nuvar = 16
239
240
241
242 uparam(1) = young
243 uparam(2) = nu
244 uparam(3) = g
245 uparam(4) = g2
246 uparam(5) = lam
247 uparam(6) = bulk
248
249 uparam(7) = ft
250 uparam(8) = fc
251 uparam(9) = ecc
252 uparam(10) = m0
253 uparam(11) = qh0
254 uparam(12) = hp
255 uparam(13) = ah
256 uparam(14) = bh
257 uparam(15) = ch
258 uparam(16) = dh
259
260 uparam(17) = as
261 uparam(18) = bs
262 uparam(19) = df
263 uparam(20) = dflag
264 uparam(21) = dtype
265 uparam(22) = ireg
266 uparam(23) = wf
267 uparam(24) = wf1
268 uparam(25) = ft1
269 uparam(26) = efc
270
271 uparam(27) = irate
272 uparam(28) = epst0
273 uparam(29) = epstmax
274 uparam(30) = deltas
275 uparam(31) = betas
276 uparam(32) = epsc0
277 uparam(33) = epscmax
278 uparam(34) = alphas
279 uparam(35) = gammas
280
281 uparam(36) = idel
282
283
284 parmat(1) = bulk
285 parmat(2) = young
286 parmat(3) = nu
287 parmat(4) = israte
288 parmat(5) = fcut
289
290
291 pm(1) = rho0
292 pm(89) = rho0
293 pm(27) = sqrt((bulk + four_over_3*g)/rho0)
294 pm(100)= bulk
295
296
297 mtag%G_PLA = 1
298 mtag%L_PLA = 1
299 mtag%G_EPSD = 1
300 mtag%L_EPSD = 1
301
302
303
304 matparam%NMOD = 2
305
306
307
308 mtag%G_DMG = 1 + matparam%NMOD
309 mtag%L_DMG = 1 + matparam%NMOD
310
311 ALLOCATE(matparam%MODE(matparam%NMOD))
312 matparam%MODE(1) = "Tension damage"
313 matparam%MODE(2) = "Compression damage"
314
319
320
322
323
324
325
326 WRITE(iout,1000) trim(titr),mat_id,ilaw
327 WRITE(iout,1100)
328 IF (is_encrypted) THEN
329 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
330 ELSE
331 WRITE(iout,1200) rho0
332 WRITE(iout,1300) young,nu
333 WRITE(iout,1400) irate
334 IF (irate > 0) WRITE(iout,1500) fcut
335 WRITE(iout,1600) ecc,qh0,ft,fc,hp
336 WRITE(iout,1700) ah,bh,ch,dh
337 WRITE(iout,1800) as,df,bs
338 WRITE(iout,1900) dflag
339 WRITE(iout,2000) dtype
340 WRITE(iout,2100) ireg
341 WRITE(iout,2200) wf,wf1,ft1,efc
342 WRITE(iout,2300) idel
343 ENDIF
344
345 1000 FORMAT(/
346 & 5x,a,/,
347 & 5x,'MATERIAL NUMBER. . . . . . . . . . . . =',i10/,
348 & 5x,'MATERIAL LAW . . . . . . . . . . . . . =',i10/)
349 1100 FORMAT(
350 & 5x,'-----------------------------------------------------------',/
351 & 5x,' CONCRETE DAMAGE PLASTICITY MODEL 2 ',/,
352 & 5x,'-----------------------------------------------------------',/)
353 1200 FORMAT(
354 & 5x,'INITIAL DENSITY . . . . . . . . . . . . . . . . . . . . . . .=',1pg20.13/)
355 1300 FORMAT(
356 & 5x,'YOUNG (YOUNG MODULUS) . . . . . . . . . . . . . . . . . . . .=',1pg20.13/
357 & 5x,'NU (POISSON RATIO). . . . . . . . . . . . . . . . . . . . . .=',1pg20.13/)
358 1400 FORMAT(
359 & 5x,'STRAIN RATE EFFECT FLAG IRATE . . . . . . . . . . . . . . . .=',i3/
360 & 5x,' 1: NO STRAIN RATE EFFECT (DEFAULT) '/
361 & 5x,' 2: STRAIN RATE EFFECT ACTIVATED '/)
362 1500 FORMAT(
363 & 5x,'STRAIN RATE FILTERING CUTOFF FREQUENCY. . . . . . . . . . . .=',1pg20.13/)
364 1600 FORMAT(
365 & 5x,'ECC (ECCENTRICITY). . . . . . . . . . . . . . . . . . . . . .='
366 & 5x,'QH0 (INITIAL HARDENING) . . . . . . . . . . . . . . . . . . .=',1pg20.13/
367 & 5x,'FT (UNIAXIAL TENSION STRENGTH) . . . . . . . . . . . . . . .=',1pg20.13/
368 & 5x,'FC (UNIAXIAL COMPRESSION STRENGTH) . . . . . . . . . . . . .=',1pg20.13/
369 & 5x,'HP (HARDENING MODULUS) . . . . . . . . . . . . . . . . . . .=',1pg20.13/)
370 1700 FORMAT(
371 & 5x,'AH (HARDENING DUCTILITY PARAM 1) . . . . . . . . . . . . . .=',1pg20.13/
372 & 5x,'BH (HARDENING DUCTILITY PARAM 2) . . . . . . . . . . . . . .=',1pg20.13/
373 & 5x,'CH (HARDENING DUCTILITY PARAM 3) . . . . . . . . . . . . . .=',1pg20.13/
374 & 5x,'DH (HARDENING DUCTILITY PARAM 4) . . . . . . . . . . . . . .=',1pg20.13/)
375 1800 FORMAT(
376 & 5x,'AS (DAMAGE DUCTILITY MEASURE). . . . . . . . . . . . . . . .=',1pg20.13/
377 & 5x,'DF (DILATION CONSTANT) . . . . . . . . . . . . . . . . . . .=',1pg20.13/
378 & 5x,'BS (DAMAGE DUCTILITY PARAMETER). . . . . . . . . . . . . . .=',1pg20.13/)
379 1900 FORMAT(
380 & 5x,'DFLAG (DAMAGE FLAG) . . . . . . . . . . . . . . . . . . . . .=',i3/
381 & 5x,' 1: STANDARD MODEL WITH TWO DAMAGE VARIABLES (DEFAULT) ',/
382 & 5x,' 2: ISOTROPIC MODEL WITH ONE DAMAGE VARIABLE ',/
383 & 5x,' 3: MULTIPLICATIVE MODEL WITH TWO DAMAGE VARIABLES ',/
384 & 5x,' 4: NO DAMAGE EFFECT ',/)
385 2000 FORMAT(
386 & 5x,'DTYPE (TENSION DAMAGE SHAPE) . . . . . . . . . . . . . . . .=',i3/
387 & 5x,' 1: LINEAR SOFTENING ',/
388 & 5x,' 2: BILINEAR SOFTENING (DEFAULT) ',/
389 & 5x,' 3: exponential softening ',/)
390 2100 FORMAT(
391 & 5X,'element length regularization flag. . . . . . . . . . . . . .=',I3/
392 & 5X,' 1: no regularization ',/
393 & 5X,' 2: regularization activated(default) ',/)
394 2200 FORMAT(
395 & 5X,'wf(damage displacement threshold 0) . . . . . . . . . . . .=',1PG20.13/
396 & 5X,'wf1(damage displacement threshold 1) . . . . . . . . . . . .=',1PG20.13/
397 & 5X,'ft1(uniaxial stress threshold 1) . . . . . . . . . . . . . .=',1PG20.13/
398 & 5X,'efc(strain threshold in compression) . . . . . . . . . . . .=',1PG20.13/)
399 2300 FORMAT(
400 & 5X,'element deletion flag. . . . . . .. . . . . . . . . . . . . .=',I3/
401 & 5X,' 1: no element deletion(default) ',/
402 & 5X,' 2: element deletion activated ',/)
403
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)