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 :: COUNT,IFORM,IEOS
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)
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
143 eos_tag(ieos)%L_MU = 1
146 matparam%EOS%NUPARAM = 7
147 matparam%EOS%NIPARAM = 1
148 matparam%EOS%NFUNC = 0
149 matparam%EOS%NTABLE = 0
150 CALL matparam%EOS%CONSTRUCT()
151 matparam%EOS%uparam(1) = xmumx
152 matparam%EOS%uparam(2) = zero
153 matparam%EOS%uparam(3) = bunl
154 matparam%EOS%uparam(4) = c0
155 matparam%EOS%uparam(5) = c1
156 matparam%EOS%uparam(6) = c2
157 matparam%EOS%uparam(7) = c3
158 matparam%EOS%iparam(1) = 1
159 matparam%EOS%psh = psh
171 IF(c1 == zero)c1=third*young/(one-two*anu)
173 IF(young <= zero)
THEN
174 chain=
'YOUNG MODULUS MUST BE DEFINED '
176 CALL ancmsg(msgid=829, msgtype=msgerror, anmode=aninfo, i1=10, i2=mat_id, c1=
'ERROR', c2=titr, c3=chain, c4=chain2)
180 chain=
'POISSON RATIO MUST BE DEFINED '
182 CALL ancmsg(msgid=829,msgtype=msgerror,anmode=aninfo,i1=10,i2=mat_id,c1=
'ERROR',c2=titr
185 IF(a1 < zero .AND. a2 == zero)
THEN
186 chain =
'INVERTED YIELD SURFACE BECAUSE A1 IS NEGATIVE. '
187 chain2=
'CHECK A0,A1,A2 YIELD PARAMETERS '
188 CALL ancmsg(msgid=829,msgtype=msgwarning,anmode=aninfo,i1=10,i2=mat_id,c1=
'WARNING',c2=titr,c3=chain
192 chain =
'UNEXPECTED YIELD SURFACE : A2 IS NEGATIVE '
193 chain2=
'CHECK A0,A1,A2 YIELD PARAMETERS '
194 CALL ancmsg(msgid=829,msgtype=msgwarning,anmode=aninfo,i1=10,i2=mat_id,c1=
'WARNING',c2=titr,c3=chain,c4=chain2)
196 IF(iform == 1 .AND. c1 <= zero)
THEN
197 chain=
'TENSILE BULK MODULUS C1 IS LOWER OR EQUAL TO 0. '
199 CALL ancmsg(msgid=829,msgtype=msgerror,anmode=aninfo,i1=10,i2=mat_id,c1=
'ERROR',c2=titr,c3=chain,c4=chain2
202 IF(a2==zero.AND.a1/=zero)
THEN
204 ELSEIF(a2 /= zero)
THEN
205 delta = a1*a1-four*a0*a2
207 IF(delta >= zero)
THEN
209 pstar = (-a1+delta)/two/a2
213 chain =
'YIELD SURFACE J2(P)=A0+A1.P+A2.P^2 HAS NO INTERSECTION WITH '
214 chain2='pressure axis. assuming surface closure at p=
'
215 WRITE(chain2(46:59),FMT=('(e13.6)
')) PSTAR
216 CALL ANCMSG( MSGID=829,MSGTYPE=MSGWARNING,ANMODE=ANINFO,I1=10,I2=MAT_ID,C1='warning
',C2=TITR,C3=chain,C4=chain2)
219 !do nothing let user do what he wants
222 IF(AMX == ZERO) AMX = EP20
223 IF(PMIN == ZERO) PMIN =-INFINITY
224 !-----------------------------------------------------------------------------!
225 ! THESE FOLLOWING CHECKS ARE RELEVANT ONLY IN CASE OF EMBEDDED COMPACTION EOS !
226 !-----------------------------------------------------------------------------!
229.AND.
IF(XMUMX == ZEROBUNL /= ZERO)THEN
230 chain= 'missing mumax
VALUE is automatically estimated from bunl
VALUE.
'
232 CALL ANCMSG(MSGID=829,MSGTYPE=MSGWARNING,ANMODE=ANINFO,I1=10,I2=MAT_ID,C1='warning
',C2=TITR,C3=chain,C4=chain2)
237 XMUMX=(BUNL-C1)/(TWO*C2)
240 DET=SQRT(C2**2 + THREE*C3*(BUNL-C1))
241 XMUMX=(DET-C2)/(THREE*C3)
245.AND.
IF(XMUMX /= ZEROBUNL == ZERO)THEN
246 chain= 'missing bunl
VALUE is automatically estimated from mumax
'
248 CALL ANCMSG(MSGID=829,MSGTYPE=MSGWARNING,ANMODE=ANINFO,I1=10,I2=MAT_ID,C1='warning
',C2=TITR,C3=chain,C4=chain2)
253 BUNL = C1 + TWO*C2*XMUMX
256 BUNL = C1 + TWO*C2*XMUMX + THREE*C3*C3*XMUMX**TWO
259 IF(BUNL == ZERO) BUNL = C1
262 G=YOUNG/(TWO*(ONE + ANU))
264 !--- STORAGE OF MATERIAL PARAMETERS IN MATERIAL BUFFER ---!
290 PM(105) = TWO*G/(C1+FOUR_OVER_3*G) ! =(1-2*Nu)/(1-Nu)
292 !Formulation for solid elements time step computation.
299 MTAG%G_MU = 1 !unloading history (volumetric plastic strain)
301 MTAG%L_PLA = 1 ! /TH(VPLA)
302 MTAG%L_EPSQ = 1 ! /TH(EPSP)
303 MTAG%L_MU = 1 ! unloading history (volumetric plastic strain)
305 ! Material compatibility with /EOS option
306 CALL INIT_MAT_KEYWORD(MATPARAM,"EOS")
308 ! EOS/Thermo keyword for pressure treatment in elements
309 CALL INIT_MAT_KEYWORD(MATPARAM,"HYDRO_EOS")
311 CALL INIT_MAT_KEYWORD(MATPARAM,"ELASTO_PLASTIC")
313 ! Properties compatibility
314 CALL INIT_MAT_KEYWORD(MATPARAM,"SOLID_ISOTROPIC")
315 CALL INIT_MAT_KEYWORD(MATPARAM,"SPH")
317 !--- OUTPUT IN STARTER LISTING FILE ---!
318 WRITE(IOUT,1100) TRIM(TITR),MAT_ID,10
321 WRITE(IOUT,'(5x,a,//)
')'confidential data
'
323 WRITE(IOUT,1200)RHO0,RHOR
324 WRITE(IOUT,1300)YOUNG,ANU,G
325 WRITE(IOUT,1400)A0,A1,A2,AMX
327 WRITE(IOUT,1500)C0,C1,C2,C3,BUNL,XMUMX,PMIN,PSTAR
329 WRITE(IOUT,1501)BUNL,XMUMX,PMIN,PSTAR
335 & 5X,40H DRUCKER-PRAGER (LAW10) ,/,
336 & 5X,40H ---------------------- ,//)
339 & 5X,'material number . . . . . . . . . . . .=
',I10/,
340 & 5X,'material law. . . . . . . . . . . . . .=
',I10/)
342 & 5X,'initial density . . . . . . . . . . . .=
',1PG20.13/,
343 & 5X,'reference density . . . . . . . . . . .=
',1PG20.13/)
345 & 5X,40HYOUNG's modulus . . . . . . . . . . . .=,e12.4/,
346 & 5x,40hpoisson
'S RATIO . . . . . . . . . . . .=,E12.4/,
347 & 5X,40HSHEAR MODULUS . . . . . . . . . . . . .=,E12.4//)
349 & 5X,40HYIELD COEFFICIENT A0. . . . . . . . . .=,E12.4/,
350 & 5X,40HYIELD COEFFICIENT A1. . . . . . . . . .=,E12.4/,
351 & 5X,40HYIELD COEFFICIENT A2. . . . . . . . . .=,E12.4/,
352 & 5X,40HA-MAX . . . . . . . . . . . . . . . . .=,E12.4//)
354 & 5X,40HC0. . . . . . . . . . . . . . . . . . .=,E12.4/,
355 & 5X,40HC1. . . . . . . . . . . . . . . . . . .=,E12.4/,
356 & 5X,40HC2. . . . . . . . . . . . . . . . . . .=,E12.4/,
357 & 5X,40HC3. . . . . . . . . . . . . . . . . . .=,E12.4/,
358 & 5X,40HUNLOADING BULK. . . . . . . . . . . . .=,E12.4/,
359 & 5X,40HMAX VOLUMIC COMPRESSION . . . . . . . .=,E12.4/,
360 & 5X,40HFRACTURE PRESSURE . . . . . . . . . . .=,E12.4/,
361 & 5X,40HYIELD SURFACE PRESSURE ROOT . . . . . .=,E12.4//)
363 & 5X,40HUNLOADING BULK. . . . . . . . . . . . .=,E12.4/,
364 & 5X,40HMAX VOLUMIC COMPRESSION . . . . . . . .=,E12.4/,
365 & 5X,40HFRACTURE PRESSURE . . . . . . . . . . .=,E12.4/,
366 & 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)