45 . NUVAR ,IFUNC ,MAXFUNC ,NFUNC , PARMAT ,
46 . UNITAB ,MAT_ID ,TITR ,MTAG , LSUBMODEL,
47 . PM ,MATPARAM ,NVARTMP )
51 use simple_checksum_mod
81#include "implicit_f.inc"
90 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
91 my_real,
INTENT(INOUT) :: PM(NPROPM),PARMAT(100),UPARAM(MAXUPARAM)
92 INTEGER,
INTENT(INOUT) :: ISRATE,NFUNC,MAXFUNC,MAXUPARAM,
94 INTEGER,
INTENT(INOUT) :: IFUNC(MAXFUNC)
96 INTEGER,
INTENT(IN) :: MAT_ID
97 CHARACTER(LEN=NCHARTITLE) ,
INTENT(IN) :: TITR
99 TYPE(matparam_struct_) ,
INTENT(INOUT) :: MATPARAM
103 INTEGER NRATEN,J,I,NRATEP,IUNLOAD,ITENS,IETANG,NL,ISORT
104 integer :: i1,i2,sizeh,ierror,ifun
105 my_real E,NU,G,C1,VISC, VISCV,EXPO,HYS,
106 . rho0,rhor,e0,emax,epsmax,fcut,a1
107 INTEGER ,
DIMENSION(MAXFUNC) :: FID,PERM
108 my_real ,
DIMENSION(MAXFUNC) :: rate,yfac,yfac_unit,scale,epsp,rtmp,ytmp
109 double precision :: h1,h2
110 double precision :: chksum
111 double precision :: hasht(3)
112 double precision ,
dimension(:) ,
allocatable :: hash
113 integer ,
dimension(:) ,
allocatable :: perml
114 LOGICAL IS_AVAILABLE,IS_ENCRYPTED
118 is_encrypted = .false.
119 is_available = .false.
122 rate(1:maxfunc) = zero
126 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
127 CALL hm_get_floatv(
'Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
129 CALL hm_get_floatv(
'MAT_E0' ,e0 ,is_available, lsubmodel, unitab)
130 CALL hm_get_floatv(
'MAT_NU' ,nu ,is_available, lsubmodel, unitab)
131 CALL hm_get_floatv(
'E_Max' ,emax ,is_available, lsubmodel, unitab)
132 CALL hm_get_floatv(
'MAT_EPS' ,epsmax ,is_available, lsubmodel, unitab)
133 CALL hm_get_intv(
'Itens' ,itens ,is_available, lsubmodel)
135 CALL hm_get_floatv(
'MAT_asrate',fcut ,is_available, lsubmodel, unitab)
136 CALL hm_get_intv(
'ISRATE' ,israte ,is_available, lsubmodel)
137 CALL hm_get_intv(
'NRATEP' ,nratep ,is_available, lsubmodel)
138 CALL hm_get_intv(
'NRATEN' ,nraten ,is_available, lsubmodel)
139 CALL hm_get_intv(
'MAT_Iflag' ,iunload ,is_available, lsubmodel)
140 CALL hm_get_floatv(
'MAT_SHAPE' ,expo ,is_available, lsubmodel, unitab)
141 CALL hm_get_floatv(
'MAT_HYST' ,hys ,is_available, lsubmodel, unitab)
143 IF(rhor==zero)rhor=rho0
151 CALL ancmsg(msgid=866,msgtype=msgerror,anmode=aninfo_blind,
162 IF (scale(i) == zero) scale(i) = one * yfac_unit(i)
168 allocate (perml(nratep))
169 allocate (hash(nratep))
182 call myqsort_d(nratep,hash,perml,ierror)
194 call ancmsg(msgid=3101, msgtype=msgwarning, anmode=aninfo_blind_1,
195 . i1=mat_id,c1=titr, i2=ifunc(i1))
198 ifunc(ifun) = fid(i2)
199 rate(ifun) = epsp(i2)
200 yfac(ifun) = scale(i2)
220 CALL myqsort(nratep, rtmp, perml, ierr)
229 IF (rate(1) /= zero)
THEN
231CALL ancmsg(msgid=1721, msgtype=msgwarning, anmode=aninfo_blind,
236 if (
allocated(perml))
deallocate (perml)
237 if (
allocated(hash))
deallocate (hash )
241 IF (nraten > 0 )
THEN
248 IF (scale(i) == zero) scale(i) = one * yfac_unit(i)
253 ifunc(nratep+1) = ifunc(1)
254 rate(nratep+1) = rate(1)
255 yfac(nratep+1) = yfac(1)
258 CALL ancmsg(msgid=1226, msgtype=msgwarning, anmode=aninfo_blind_1,
259 . i1=mat_id, c1=titr)
269 IF (epsp(i) == epsp(i+1))
THEN
271 ELSE IF (epsp(i) > epsp(i+1))
THEN
276 CALL ancmsg(msgid=478,msgtype=msgerror,anmode=aninfo_blind,
282 CALL myqsort(nraten, epsp, perm, ierr)
286 ifunc(i + nratep) = fid(j)
287 rate(i + nratep) = epsp(i)
288 yfac(i + nratep) = scale(j)
292 ifunc(i + nratep) = fid(i)
293 rate(i + nratep) = epsp(i)
294 yfac(i + nratep) = scale(i)
298 IF (rtmp(1) /= zero)
THEN
299 rate(1 + nratep) = zero
300 CALL ancmsg(msgid=1721, msgtype=msgwarning, anmode=aninfo_blind,
304 else if (nraten == 1)
then
305 ifunc(nratep+1) = fid(1)
306 rate(nratep+1) = epsp(1)
307 yfac (nratep+1) = scale(1)
311 IF (fcut > zero) israte = 1
312 IF (fcut == zero) fcut = infinity
315 nl = nratep + nraten + 1
319 IF (yfac(nl) == zero) yfac(nl) = one
323 IF(ifunc(i) == 0)
THEN
324 CALL ancmsg(msgid=126, msgtype=msgerror, anmode=aninfo_blind,
333 . msgtype=msgwarning,
334 . anmode=aninfo_blind,
339 IF(epsmax == zero) epsmax = one
342 aa = (emax-e0)/epsmax
345 g = half*e0/(one + nu)
351 uparam(i + 8) = rate(i)
352 uparam(i + 8 + nl) = yfac(i)
355 uparam(2*nl + 9)= iunload
356 IF(expo == zero) expo = one
357 IF(hys == zero) hys = one
358 uparam(2*nl + 10)= expo
359 uparam(2*nl + 11) = hys
360 uparam(2*nl + 12) = emax
361 uparam(2*nl + 13) = itens
362 uparam(2*nl + 14) = 0
364 c1 = e0/three/(one - two*nu)
367 IF (is_encrypted) uparam(16 + 2*nl) = 1
376 parmat(17) = (one-two*nu)/(one-nu)
393 WRITE(iout,1001) trim(titr),mat_id,70
396 WRITE(iout,
'(5X,A,//)')
'CONFIDENTIAL DATA'
399 WRITE(iout,1100)e0,nu,emax,epsmax
400 WRITE(iout,1200)fcut,israte,nratep,nraten,iunload,expo,hys,itens
401 WRITE(iout,1300)(ifunc(j),rate(j),yfac(j),j=1,nratep)
402 WRITE(iout,1400)(ifunc(j+nratep),rate(j+nratep),yfac(j+nratep),
405 WRITE(iout,1500)ifunc(nl),yfac(nl)
411 & 5x,40h
tabulated non linear visco elastic law,/,
415 & 5x,
'MATERIAL NUMBER . . . . . . . . . . . .=',i10/,
416 & 5x,
'MATERIAL LAW. . . . . . . . . . . . . .=',i10/)
418 'INITIAL YOUNG''S MODULUS. . . . . . . .=',1pg20.13/,
419 & 5x,
'POISSON''S RATIO. . . . . . . . . . . .=',1pg20.13/,
420 & 5x,
'MAXIMUM YOUNG''S MODULUS. . . . . . . .=',1pg20.13/,
421 & 5x,
'MAXIMUM STRAIN . . . . .. . . . . . . .=',1pg20.13)
423 & 5x,
'STRAIN RATE COEFFICIENT . . . . . . . .=',1pg20.13/,
424 & 5x,
'FLAG FOR STRAIN RATE . . . .. . .=',i10/,
425 & 5x,
'NUMBER OF LOAD STRESS FUNCTIONS .. .=',i10/,
426 & 5x,
'NUMBER OF UNLOAD STRESS FUNCTIONS .. .=',i10/,
427 & 5x,
'CHOICE OF UNLOADING FORMULATION . . . =',i10/,
428 & 5x,
'SHAPE FACTOR FOR UNLOADING . . . . . .=',1pg20.13/,
429 & 5x,
'HYSTERETIC UNLOADING FACTOR . . . . . =',1pg20.13/,
430 & 5x,
'FLAG FOR TENSION BEHAVIOR . . . . . . ='
433 & 5x,
'LOAD YIELD STRESS FUNCTION NUMBER.. . .=',i10/,
434 & 5x,
'STRAIN RATE . . . . . . . . . . . . . .=',1pg20.13/,
435 & 5x,
'SCALE FACTOR. . . . . . . . . . . . . .=',1pg20.13/)
438 & 5x,
'UNLOAD YIELD STRESS FUNCTION NUMBER.. .=',i10/,
439 & 5x,
'STRAIN RATE . . . . . . . . . . . . . .=',1pg20.13/,
440 & 5x,
'SCALE FACTOR. . . . . . . . . . . . . .=',1pg20.13/)
442 & 5x,
'PRESSURE DEPENDENT YIELD FUNCTION . . .=',i10/
443 & 5x,
'PRESSURE SCALE FACTOR. . . . . . . . . =',1pg20.13)
445 & 5x,
'INITIAL DENSITY . . . . . . . . . . . .=',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)