44 . IFUNC ,MAXFUNC ,MFUNC ,PARMAT ,UNITAB ,
45 . ID ,MTAG ,TITR ,LSUBMODEL,PM ,
76#include "implicit_f.inc"
85 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
86 my_real,
DIMENSION(NPROPM) ,
INTENT(INOUT) :: PM
87 my_real,
DIMENSION(100) ,
INTENT(INOUT) :: PARMAT
88 my_real,
DIMENSION(MAXUPARAM) ,
INTENT(INOUT) :: uparam
89 INTEGER,
DIMENSION(MAXFUNC) ,
INTENT(INOUT) :: IFUNC
90 INTEGER,
INTENT(INOUT) :: MFUNC,NUPARAM,NUVAR,NVARTMP,ISRATE
92 INTEGER,
INTENT(IN) :: ID,MAXFUNC,MAXUPARAM
93 CHARACTER(LEN=NCHARTITLE) ,
INTENT(IN) :: TITR
95 TYPE(matparam_struct_) ,
INTENT(INOUT) :: MATPARAM
99 INTEGER :: NBMAT, MAT_ID
100 INTEGER :: I,J,VP,YLDCHECK
101 INTEGER :: RHOFLAG,ICOMP,NRATE1,NRATE,IPFUN,IFUNCE,ISRAT,ISMOOTH,
102 . nbline,nbread,ifail,opte,ilaw,nfunc
103 my_real :: rho0, rhor,e,nu,g,c1,soundsp, epsmax,epsr1,epsr2,epsf,fisokin,fcut,
104 . pscal_unit,pscale,einf,ce ,
105 . yfac(maxfunc),rate(
max(1,maxfunc)),strainrate_unit(maxfunc),yfac_unit(maxfunc)
106 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
110 is_encrypted = .false.
111 is_available = .false.
119 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
120 CALL hm_get_floatv(
'Refer_Rho',rhor ,is_available, lsubmodel, unitab)
123 CALL hm_get_floatv(
'MAT_E' ,e ,is_available, lsubmodel, unitab)
124 CALL hm_get_floatv(
'MAT_NU' ,nu ,is_available, lsubmodel, unitab)
125 CALL hm_get_floatv(
'MAT_EPS' ,epsmax ,is_available, lsubmodel, unitab)
126 CALL hm_get_floatv(
'MAT_EPST1',epsr1 ,is_available, lsubmodel, unitab)
127 CALL hm_get_floatv(
'MAT_EPST2',epsr2 ,is_available, lsubmodel, unitab)
130 CALL hm_get_intv (
'NFUNC' ,nrate ,is_available,lsubmodel)
131 CALL hm_get_intv (
'Fsmooth' ,ismooth ,is_available,lsubmodel)
132 CALL hm_get_floatv(
'MAT_HARD' ,fisokin ,is_available, lsubmodel, unitab)
133 CALL hm_get_floatv(
'Fcut' ,fcut ,is_available, lsubmodel, unitab)
134 CALL hm_get_floatv(
'MAT_Epsilon_F',epsf ,is_available, lsubmodel, unitab)
135 CALL hm_get_intv (
'Vflag' ,vp ,is_available,lsubmodel)
137 CALL hm_get_intv (
'Xr_fun' ,ipfun ,is_available,lsubmodel)
138 CALL hm_get_floatv(
'MAT_FScale' ,pscale ,is_available, lsubmodel, unitab)
139 CALL hm_get_intv (
'Yr_fun' ,ifunce ,is_available,lsubmodel)
140 CALL hm_get_floatv(
'MAT_EFIB' ,einf ,is_available, lsubmodel, unitab)
141 CALL hm_get_floatv(
'MAT_C' ,ce ,is_available, lsubmodel, unitab)
144 IF (nu < zero .OR. nu >= half)
THEN
145 CALL ancmsg(msgid=49,msgtype=msgerror,anmode=aninfo_blind_2,r1=nu,i1=id,c1=titr)
149 CALL ancmsg(msgid=215, msgtype=msgerror, anmode=aninfo,i1=36,i2=id,c1=titr)
150 ELSEIF (nrate <= 0)
THEN
151 CALL ancmsg(msgid=740, msgtype=msgerror, anmode=aninfo,i1=id,c1=titr)
156 ELSEIF (pscale == zero)
THEN
158 CALL hm_get_floatv_dim(
'MAT_FScale' ,pscal_unit ,is_available, lsubmodel, unitab)
159 pscale = one * pscal_unit
170 IF(yfac(j) == zero)
THEN
172 yfac(j)=one * yfac_unit(j)
176 rate(1:maxfunc) = zero
182 IF (rate(i) >= rate(i+1))
THEN
183 CALL ancmsg(msgid=478, msgtype=msgerror, anmode=aninfo_blind_1,i1=id,c1=titr)
188 IF (ifunc(i) == 0)
THEN
189 CALL ancmsg(msgid=126, msgtype=msgerror, anmode=aninfo_blind_1,i1=id,c1=titr,i2=ifunc(i))
202 IF (rate(1) == zero)
THEN
214 IF (fcut == zero .or. vp == 1)
THEN
215 fcut = 10000.0d0*unitab%FAC_T_WORK
218 israte =
max(israte,israt)
220 IF (nu == half) nu = zep499
224 IF (fisokin > one .OR. fisokin < zero)
THEN
225 CALL ancmsg(msgid=912, msgtype=msgerror, anmode=aninfo_blind_1
'36',c2=titr)
228 IF (epsr1 == zero .AND. epsr2 == zero .AND. epsf == zero)
THEN
229 IF (epsmax == zero
THEN
245 IF (epsmax== zero) epsmax= infinity
246 IF (epsr1 == zero) epsr1 = infinity
248 IF (epsf == zero) epsf = three*infinity
250 epsmax =
min(epsmax ,infinity)
251 epsr1 =
min(epsr1 ,infinity)
252 epsr2 =
min(epsr2 ,two*infinity)
253 epsf =
min(epsf ,three*infinity)
255 IF (epsr1 /= zero .AND. epsr2 /= zero)
THEN
256 IF (epsr1 >= epsr2)
THEN
257 CALL ancmsg(msgid=480, msgtype=msgerror, anmode=aninfo_blind_1,i1=id,c1=titr)
262 CALL ancmsg(msgid=276,msgtype=msgerror,anmode=aninfo,i1=36,i2=id,c1=titr)
268 c1= e/three/(one - two*nu)
269 soundsp = sqrt((c1 + four_over_3*g)/rho0)
277 uparam(3)= e/(one - nu*nu)
278 uparam(4)= nu*uparam(3)
282 uparam(6 + j)= rate(j)
285 uparam(nfunc + 6+j)= yfac(j)
287 uparam(2*nfunc + 7) = epsmax
288 uparam(2*nfunc + 8) = epsr1
289 uparam(2*nfunc + 9) = epsr2
290 uparam(2*nfunc + 10)= two*g
291 uparam(2*nfunc + 11)= three*g
292 uparam(2*nfunc + 12)= c1
293 uparam(2*nfunc + 13)= soundsp
294 uparam(2*nfunc + 14)= fisokin
295 uparam(2*nfunc + 15)= epsf
297 uparam(2*nfunc + 16) = 0
299 uparam(2*nfunc + 16) = mfunc
301 uparam(2*nfunc + 17) = pscale
303 uparam(2*nfunc + 18) = sqrt(e/(one - nu*nu)/rho0)
304 uparam(2*nfunc + 19) = nu / (one-nu)
305 uparam(2*nfunc + 20) = three / (one+nu)
306 uparam(2*nfunc + 21) = one / (one-nu)
308 IF (ifunce > 0 ) opte = 1
310 ifunc(mfunc) = ifunce
311 uparam(2*nfunc + 22) = mfunc
312 uparam(2*nfunc + 23) = opte
313 uparam(2*nfunc + 24) = einf
314 uparam(2*nfunc + 25) = ce
315 uparam(2*nfunc + 26) = vp
316 uparam(2*nfunc + 27) = ifail
317 uparam(2*nfunc + 28) = yldcheck
318 uparam(2*nfunc + 29) = ismooth
320 nuparam = 2*nfunc + 29
322 IF (rhor == zero) rhor=rho0
338 parmat(17) = two*g/(c1+four_over_3*g)
350 IF (fisokin /= zero)
THEN
360 CALL INIT_MAT_KEYWORD(MATPARAM,"sph
")
361 CALL INIT_MAT_KEYWORD(MATPARAM,"beam_integrated
")
363 ! Material compatibility with /EOS option
364 CALL INIT_MAT_KEYWORD(MATPARAM,"eos
")
366 WRITE(IOUT,1001) TRIM(TITR),ID,36
368 IF (IS_ENCRYPTED)THEN
369 WRITE(IOUT,'(5X,A,//)')'CONFIDENTIAL DATA'
371 WRITE(IOUT,1002) RHO0
372 WRITE(IOUT,1100) E,NU,EPSMAX,EPSR1,EPSR2,EPSF,FISOKIN,ISMOOTH,FCUT,VP
373 WRITE(IOUT,1200)(IFUNC(J),YFAC(J),RATE(J),J=1,NFUNC)
374 WRITE(IOUT,1300) IPFUN,PSCALE, IFUNCE,EINF,CE
381 & 5X,' TABULATED ELASTIC PLASTIC LAW 36 ',/,
382 & 5X,' -------------------------------- ' ,//)
385 & 5X,'MATERIAL NUMBER . . . . . . . . . . . . . .=',I10/,
386 & 5X,'MATERIAL LAW. . . . . . . . . . . . . . . .=',I10/)
388 & 5X,'INITIAL DENSITY . . . . . . . . . . . . . .=',1PG20.13/)
390 & 5X,'YOUNG MODULUS . . . . . . . . . . . . . . .=',1PG20.13/
391 & 5X,'POISSON RATIO . . . . . . . . . . . . . . .=',1PG20.13/
392 & 5X,'MAXIMUM PLASTIC STRAIN . . . . . . . . . .=',1PG20.13/
393 & 5X,'TENSION FAILURE STRAIN 1 . . . . . . . . .=',1PG20.13/
394 & 5X,'TENSION FAILURE STRAIN 2 . . . . . . . . .=',1PG20.13/
395 & 5X,'MAXIMUM TENSION FAILURE STRAIN . . . . . .=',1PG20.13/
396 & 5X,'ISO-KINEMATIC HARDENING FACTOR. . . . . . .=',1PG20.13/
397 & 5X,'SMOOTH STRAIN RATE OPTION . . . . . . . . .=',I10/
398 & 5X,' 0 -> NO SMOOTHING ',/,
399 & 5X,' 1 -> SMOOTH + LINEAR INTERPOLATION ',/,
400 & 5X,' 2 -> SMOOTH + LOG_N INTERPOLATION ',/
401 & 5X,'STRAIN RATE CUTTING FREQUENCY . . . . . . .=',1PG20.13/
402 & 5X,'PLASTIC STRAIN RATE DEPENDENCY FLAG . . . .=',I10/
403 & 5X,' FLAG_PL = 0 -> TOTAL SR DEPENDENCY ',/,
404 & 5X,' FLAG_PL = 1 -> PLASTIC SR DEPENDENCY ',/,
405 & 5X,'STRAIN RATE INTERPOLATION FLAG. . . . . . .=',I10/)
407 & 5X,'YIELD STRESS FUNCTION NUMBER. . . . . . . .=',I10/
408 & 5X,'YIELD SCALE FACTOR. . . . . . . . . . . . .=',1PG20.13/
409 & 5X,'STRAIN RATE . . . . . . . . . . . . . . . .=',1PG20.13)
411 & 5X,'PRESSURE DEPENDENT YIELD FUNCTION . . . . .=',I10/
412 & 5X,'PRESSURE SCALE FACTOR . . . . . . . . . . .=',1PG20.13/
413 & 5X,'YOUNG MODULUS SCALE FACTOR FUNCTION . . . .=',I10/
414 & 5X,'YOUNG MODULUS EINF. . . . . . . . . . . . .=',1PG20.13/
415 & 5X,'PARAMETER CE. . . . . . . . . . . . . . . .=',1PG20.13)
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)