40 . LSUBMODEL ,MTAG ,UNITAB ,IPM ,PM ,
41 . MAT_ID ,TITR ,EOS_TAG ,ISRATE ,MATPARAM)
51 USE reader_old_mod ,
ONLY : irec
66#include
"implicit_f.inc"
76 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
77 INTEGER,
INTENT(IN) :: MAT_ID
78 INTEGER,
INTENT(INOUT) :: ISRATE
79 INTEGER,
DIMENSION(NPROPMI) ,
INTENT(INOUT) :: IPM
80 CHARACTER(LEN=NCHARTITLE) ,
INTENT(IN) :: TITR
81 my_real,
DIMENSION(NPROPM) ,
INTENT(INOUT) :: pm
82 TYPE(
submodel_data),
DIMENSION(NSUBMOD),
INTENT(IN) :: LSUBMODEL
84 TYPE(
eos_tag_) ,
TARGET,
DIMENSION(0:MAXEOS) ,
INTENT(INOUT) :: EOS_TAG
85 TYPE(matparam_struct_),
INTENT(INOUT) :: MATPARAM
89 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
90 INTEGER :: I,IFUNC,COUNT,ID,IFORM,IEOS
91 my_real :: rho0,rhor,e,nu,a0,a1,a2,amx,c0,c1,c2,c3,fac_y
92 my_real :: pmin,pext,xmumx,bunl,e0,g,pstar,psh,delta,det,young,anu
93 CHARACTER*64 :: chain,chain2
108 is_encrypted = .false.
109 is_available = .false.
113 CALL hm_get_intv (
'Line_count' ,count ,is_available,lsubmodel)
117 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
118 CALL hm_get_floatv(
'Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
119 CALL hm_get_floatv(
'MAT_E' ,young ,is_available, lsubmodel, unitab)
120 CALL hm_get_floatv(
'MAT_NU' ,anu ,is_available, lsubmodel, unitab)
121 CALL hm_get_floatv(
'MAT_A0' ,a0 ,is_available, lsubmodel, unitab)
122 CALL hm_get_floatv(
'MAT_A1' ,a1 ,is_available, lsubmodel, unitab)
123 CALL hm_get_floatv(
'MAT_A2' ,a2 ,is_available, lsubmodel, unitab)
124 CALL hm_get_floatv(
'MAT_AMAX' ,amx ,is_available, lsubmodel, unitab)
125 CALL hm_get_floatv(
'EOS_COM_C0' ,c0 ,is_available, lsubmodel, unitab)
126 CALL hm_get_floatv(
'EOS_COM_C1' ,c1 ,is_available, lsubmodel, unitab)
128 CALL hm_get_floatv(
'EOS_COM_C3' ,c3 ,is_available, lsubmodel, unitab)
129 CALL hm_get_floatv(
'EOS_COM_B' ,bunl ,is_available, lsubmodel, unitab)
130 CALL hm_get_floatv('eos_com_mue_max
' ,XMUMX ,IS_AVAILABLE, LSUBMODEL, UNITAB)
132 CALL HM_GET_FLOATV('mat_pc
' ,PMIN ,IS_AVAILABLE, LSUBMODEL, UNITAB)
133 CALL HM_GET_FLOATV('pext
' ,PEXT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
136 IF (RHOR == ZERO) RHOR=RHO0
141 IFORM= 1 !old format (embedded EoS : C0,C1,C2, ... parameters)
143 EOS_TAG(IEOS)%L_MU = 1
146 IFORM=2 !new format (Eos defined from /EOS option)
147 IEOS = 18 ! linear EOS is used by default
152 IPM(4) = IEOS ! keep this temporarily for output and fluid sections
156 IF(C1 == ZERO)C1=THIRD*YOUNG/(ONE-TWO*ANU) !bulk modulus
158 IF(YOUNG <= ZERO)THEN
159 chain='young modulus must be defined
'
161 CALL ANCMSG(MSGID=829, MSGTYPE=MSGERROR, ANMODE=ANINFO, I1=10, I2=MAT_ID, C1='error
', C2=TITR, C3=chain, C4=chain2)
165 chain='poisson ratio must be defined
'
167 CALL ANCMSG(MSGID=829,MSGTYPE=MSGERROR,ANMODE=ANINFO,I1=10,I2=MAT_ID,C1='error
',C2=TITR,C3=chain,C4=chain2)
170.AND.
IF(A1 < ZERO A2 == ZERO)THEN
171 chain ='inverted yield surface because a1 is negative.
'
172 chain2='check a0,a1,a2 yield parameters
'
173 CALL ANCMSG(MSGID=829,MSGTYPE=MSGWARNING,ANMODE=ANINFO,I1=10,I2=MAT_ID,C1='warning
',C2=TITR,C3=chain,C4=chain2)
177 chain ='unexpected yield surface : a2 is negative
'
178 chain2='check a0,a1,a2 yield parameters
'
179 CALL ANCMSG(MSGID=829,MSGTYPE=MSGWARNING,ANMODE=ANINFO,I1=10,I2=MAT_ID,C1='warning
',C2=TITR,C3=chain,C4=chain2)
181.AND.
IF(IFORM == 1 C1 <= ZERO) THEN
182 chain='tensile bulk modulus c1 is lower or equal to 0.
'
184 CALL ANCMSG(MSGID=829,MSGTYPE=MSGERROR,ANMODE=ANINFO,I1=10,I2=MAT_ID,C1='error
',C2=TITR,C3=chain,C4=chain2)
187.AND.
IF(A2==ZEROA1/=ZERO)THEN !(A2=A1=ZERO => error message)
189 ELSEIF(A2 /= ZERO)THEN
190 DELTA = A1*A1-FOUR*A0*A2
191 !Si intersection avec l'axe
192 IF(delta >= zero)
THEN
194 pstar = (-a1+delta)/two/a2
198 chain =
'YIELD SURFACE J2(P)=A0+A1.P+A2.P^2 HAS NO INTERSECTION WITH '
199 chain2=
'PRESSURE AXIS. ASSUMING SURFACE CLOSURE AT P= '
200 WRITE(chain2(46:59),fmt=(
'(E13.6)')) pstar
201 CALL ancmsg( msgid=829,msgtype=msgwarning,anmode=aninfo,i1=10,i2=mat_id,c1=
'WARNING',c2=titr,c3=chain,c4=chain2)
207 IF(amx == zero) amx = ep20
208 IF(pmin == zero) pmin =-infinity
214 IF(xmumx == zero.AND.bunl /= zero)
THEN
215 chain=
'MISSING MUMAX VALUE IS AUTOMATICALLY ESTIMATED FROM BUNL VALUE. '
217 CALL ancmsg(msgid=829,msgtype=msgwarning,anmode=aninfo,i1=10,i2=mat_id,c1=
'WARNING',c2=titr,c3=chain,c4=chain2)
222 xmumx=(bunl-c1)/(two*c2)
225 det=sqrt(c2**2 + three*c3*(bunl-c1))
226 xmumx=(det-c2)/(three*c3)
230 IF(xmumx /= zero.AND.bunl == zero)
THEN
231 chain=
'MISSING BUNL VALUE IS AUTOMATICALLY ESTIMATED FROM MUMAX '
233 CALL ancmsg(msgid=829,msgtype=msgwarning,anmode=aninfo,i1=10,i2=mat_id,c1=
'WARNING',c2=titr,c3=chain,c4=chain2)
238 bunl = c1 + two*c2*xmumx
241 bunl = c1 + two*c2*xmumx + three*c3*c3*xmumx**two
244 IF(bunl == zero) bunl = c1
247 g=young/(two*(one + anu))
275 pm(105) = two*g/(c1+four_over_3*g)
292 matparam%eos%nuparam = 3
293 matparam%eos%niparam = 1
294 matparam%eos%nfunc = 0
295 matparam%eos%ntable = 0
296 call matparam%eos%construct()
297 matparam%eos%uparam(1) = xmumx
298 matparam%eos%uparam(2) = zero
299 matparam%eos%uparam(3) = bunl
300 matparam%eos%iparam(1) = iform
316 WRITE(iout,1100) trim(titr),mat_id,10
319 WRITE(iout,
'(5X,A,//)')
'CONFIDENTIAL DATA'
321 WRITE(iout,1200)rho0,rhor
322 WRITE(iout,1300)young,anu,g
323 WRITE(iout,1400)a0,a1,a2,amx
325 WRITE(iout,1500)c0,c1,c2,c3,bunl,xmumx,pmin,pstar
327 WRITE(iout,1501)bunl,xmumx,pmin,pstar
333 & 5x,40h drucker-prager(law10) ,/,
334 & 5x,40h ---------------------- ,//)
337 & 5x,
'MATERIAL NUMBER . . . . . . . . . . . .=',i10/,
338 & 5x,
'MATERIAL LAW. . . . . . . . . . . . . .=',i10/)
340 & 5x,
'INITIAL DENSITY . . . . . . . . . . . .=',1pg20.13/,
341 & 5x,
'REFERENCE DENSITY . . . . . . . . . . .=',1pg20.13/)
343 & 5x,40hyoung
'S MODULUS . . . . . . . . . . . .=,E12.4/,
344 & 5X,40HPOISSON's ratio . . . . . . . . . . . .=,e12.4/,
345 & 5x,40hshear modulus . . . . . . . . . . . . .=,e12.4//)
347 & 5x,40hyield coefficient a0. . . . . . . . . .=,e12.4/,
348 & 5x,40hyield coefficient a1. . . . . . . . . .=,e12.4/,
349 & 5x,40hyield coefficient a2. . . . . . . . . .=,e12.4/,
350 & 5x,40ha-
max . . . . . . . . . . . . . . . . .=,e12.4//)
352 & 5x,40hc0. . . . . . . . . . . . . . . . . . .=,e12.4/,
353 & 5x,40hc1. . . . . . . . . . . . . . . . . . .=,e12.4/,
354 & 5x,40hc2. . . . . . . . . . . . . . . . . . .=,e12.4/,
355 & 5x,40hc3. . . . . . . . . . . . . . . . . . .=,e12.4/,
356 & 5x,40hunloading bulk. . . . . . . . . . . . .=,e12.4/,
357 & 5x,40hmax volumic compression . . . . . . . .=,e12.4/,
358 & 5x,40hfracture pressure . . . . . . . . . . .=,e12.4/,
359 & 5x,40hyield surface pressure root . . . . . .=,e12.4//)
361 & 5x,40hunloading bulk. . . . . . . . . . . . .=,e12.4/,
362 & 5x,40hmax volumic compression . . . . . . . .=,e12.4/,
363 & 5x,40hfracture pressure . . . . . . . . . . .=,e12.4/,
364 & 5x,40hyield surface pressure root . . . . . .=,e12.4//)
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)