42
43
44
49 USE matparam_def_mod
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65#include "implicit_f.inc"
66
67
68
69#include "units_c.inc"
70#include "param_c.inc"
71
72
73
74 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
75 INTEGER, INTENT(IN) :: MAT_ID
76 INTEGER, DIMENSION(NPROPMI) ,INTENT(INOUT) :: IPM
77 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
78 my_real,
DIMENSION(NPROPM) ,
INTENT(INOUT) :: pm
79 TYPE(SUBMODEL_DATA), DIMENSION(*),INTENT(IN) :: LSUBMODEL
80 TYPE(MLAW_TAG_), INTENT(INOUT) :: MTAG
81 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
82
83
84
85 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
86 INTEGER :: I,ILAW,IFUNC
87 my_real :: rho0,rhor,e,nu,a0,a1,a2,amx,c1,fac_y,pmin,pext,bunl,xmumx,e0,g,pstar,delta,fscal_unit
88 CHARACTER*64 :: chain
89
90 is_encrypted = .false.
91 is_available = .false.
92 ilaw = 21
93 pstar = -infinity
94!---
96
97 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab
105 CALL hm_get_intv (
'FUN_A1' ,ifunc ,is_available,lsubmodel)
106 CALL hm_get_floatv(
'MAT_BULK' ,c1 ,is_available, lsubmodel, unitab)
107 CALL hm_get_floatv(
'PFscale' ,fac_y ,is_available, lsubmodel, unitab)
108 CALL hm_get_floatv(
'MAT_PC' ,pmin ,is_available, lsubmodel, unitab)
109 CALL hm_get_floatv(
'PEXT' ,pext ,is_available, lsubmodel, unitab)
110 CALL hm_get_floatv(
'MAT_K_UNLOAD' ,bunl ,is_available, lsubmodel, unitab)
111 CALL hm_get_floatv(
'MAT_SIG' ,xmumx ,is_available, lsubmodel, unitab)
113
114 IF (rhor==zero) rhor=rho0
115 pm(1) = rhor
116 pm(89)= rho0
117
118 e0=zero
119 IF(pmin==zero) pmin =-infinity
120
121 IF(bunl==zero) bunl = c1
122 IF(amx==zero) amx = ep20
123 IF(xmumx == zero)xmumx=ep20
124
125 IF(a1 < zero .AND. a2 == zero)THEN
126 chain='INVERTED YIELD SURFACE. CHECK A1 SIGN. '
127 CALL ancmsg(msgid=829, msgtype=msgwarning, anmode=aninfo, i1=21, i2=mat_id, c1=
'WARNING', c2=titr, c3=chain)
128 ENDIF
129
130 IF(a2 < zero)THEN
131 chain='UNTYPICAL YIELD SURFACE. CHECK A2 SIGN. '
132 CALL ancmsg(msgid=829, msgtype=msgwarning, anmode=aninfo, i1=21, i2
'WARNING', c2=titr, c3=chain)
133 ENDIF
134
135 IF(c1<=zero) THEN
136 chain='TENSILE BULK MODULUS IS LOWER OR EQUAL TO 0. '
137 CALL ancmsg(msgid=829, msgtype=msgerror, anmode=aninfo, i1=21, i2=mat_id, c1
'ERROR', c2=titr, c3=chain)
138 END IF
139
140 IF(bunl==zero) THEN
141 chain='UNLOADING BULK MODULUS HAS NO USER VALUE. IT IS SET TO C1'
142 bunl = c1
143 CALL ancmsg(msgid=829, msgtype=msgwarning, anmode=aninfo, i1
'WARNING', c2=titr, c3=chain)
144 ENDIF
145
146 IF(a2==zero.AND.a1/=zero)THEN
147 pstar=-a0/a1
148 ELSEIF(a2/=zero)THEN
149 delta = a1*a1-four*a0*a2
150
151 IF(delta >= zero)THEN
152 delta=sqrt(delta)
153 pstar = (-a1+delta)/two/a2
154 ELSE
155
156 pstar = -infinity
157 chain='YIELD SURFACE HAS NO ROOT. '
158 CALL ancmsg(msgid=829, msgtype=msgwarning, anmode=aninfo, i1=21, i2=mat_id, c1=
'WARNING', c2=titr, c3=chain)
159 ENDIF
160 ELSE
161
162 ENDIF
163
164 IF (fac_y == zero) fac_y = one*fscal_unit
165 g=e/(two*(one + nu))
166
167 pm(20)=e
168 pm(21)=nu
169 pm(22)=g
170 pm(23)=e0
171 pm(31)=zero
172 pm(32)=c1
173 pm(33)=zero
174 pm(34)=zero
175 pm(35)=bunl
176 pm(36)=xmumx
177 pm(37)=pmin
178 pm(38)=a0
179 pm(39)=a1
180 pm(40)=a2
181 pm(41)=amx
182 pm(42)=fac_y
183 pm(43)=pext
184 pm(44)=pstar
185 ipm(11)=ifunc
186
187
188 ipm(252)= 2
189 pm(105) = two*g/(c1+four_over_3*g)
190
191 WRITE(iout,1100) trim(titr),mat_id,21
192 WRITE(iout,1000)
193 IF (is_encrypted) THEN
194 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
195 ELSE
196 WRITE(iout,1200) rho0,rhor
197 WRITE(iout,1300)e,nu,g
198 WRITE(iout,1400)a0,a1,a2,amx
199 WRITE(iout,1500)ifunc,fac_y,c1,bunl,xmumx,pmin,pext,pstar
200 ENDIF
201
202
203
204 mtag%G_PLA = 1
205 mtag%G_EPSQ = 1
206 mtag%G_MU = 1
207
208 mtag%L_PLA = 1
209 mtag%L_EPSQ = 1
210 mtag%L_MU = 1
211
212
214
215
217
218
220
221
224
225
226 RETURN
227
228 1000 FORMAT(
229 & 5x,40h soil & concrete ,/,
230 & 5x,40h --------------- ,//)
231 1100 FORMAT(/
232 & 5x,a,/,
233 & 5x,'MATERIAL NUMBER . . . . . . . . . . . .=',i10/,
234 & 5x,'MATERIAL LAW. . . . . . . . . . . . . .=',i10/)
235 1200 FORMAT(
236 & 5x,'INITIAL DENSITY . . . . . . . . . . . .=',1pg20.13/,
237 & 5x,'REFERENCE DENSITY . . . . . . . . . .=',1pg20.13/)
238 1300 FORMAT(
239 & 5x,40hyoung'S MODULUS . . . . . . . . . . . .=,E12.4/,
240 & 5X,40HPOISSON's ratio . . . . . . . . . . . .=,e12.4/,
241 & 5x,40hshear modulus . . . . . . . . . . . . .=,e12.4//)
242 1400 FORMAT(
243 & 5x,40hyield coefficient a0. . . . . . . . . .=,e12.4/,
244 & 5x,40hyield coefficient a1. . . . . . . . . .=,e12.4/,
245 & 5x,40hyield coefficient a2. . . . . . . . . .=,e12.4/,
246 & 5x,40ha-
max . . . . . . . . . . . . . . . . .=,e12.4//)
247 1500 FORMAT(
248 & 5x,40hpressure FUNCTION number. . . . . . . .=,i8/,
249 & 5x,40hpressure FUNCTION scale factor. . . . .=,e12.4/,
250 & 5x,40htensile bulk. . . . . . . . . . . . . .=,e12.4/,
251 & 5x,40hunloading bulk. . . . . . . . . . . . .=,e12.4/,
252 & 5x,40hmax volumic compression . . . . . . . .=,e12.4/,
253 & 5x,40hfracture pressure . . . . . . . . . . .=,e12.4/,
254 & 5x,40hexternal pressure . . . . . . . . . . .=,e12.4/,
255 & 5x,40hyield surface pressure root
256
257 RETURN
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_floatv_dim(name, dim_fac, 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)