42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
66 USE matparam_def_mod
68 USE constant_mod ,
ONLY : pi, hundred80, four, zero, infinity, nine, one, six, three, two
69 USE precision_mod , ONLY : wp
70
71
72
73
74 IMPLICIT NONE
75
76
77
78#include "units_c.inc"
79#include "param_c.inc"
80
81
82
83 TYPE (UNIT_TYPE_),INTENT(IN) :: UNITAB
84 REAL(KIND=wp), DIMENSION(NPROPM),INTENT(INOUT) :: pm
85 REAL(KIND=wp), DIMENSION(100),INTENT(INOUT) :: parmat
86 REAL(KIND=wp), DIMENSION(MAXUPARAM) ,INTENT(INOUT) :: uparam
87 INTEGER, DIMENSION(NPROPMI),INTENT(INOUT) :: IPM
88 INTEGER, INTENT(INOUT) :: ISRATE,NFUNC,MAXUPARAM,NUPARAM,NUVAR
89 TYPE(MLAW_TAG_),INTENT(INOUT) :: MTAG
90 INTEGER,INTENT(IN) :: MAT_ID
91 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
92 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(NSUBMOD)
93 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
94
95
96
97 REAL(KIND=wp) :: e,nu,c,pstar,amax,g, delta,stifint,pmin,phi_deg
98 REAL(KIND=wp) :: a0,a1,a2,rho0,rhor
99 INTEGER :: IFORM
100 REAL(KIND=wp) :: phi,k,
alpha
101 LOGICAL :: IS_ENCRYPTED,IS_AVAILABLE
102 CHARACTER*64 :: CHAIN
103
104
105
106 is_encrypted = .false.
107 is_available = .false.
108 k = 0.0d0
109
111
112 CALL hm_get_intv (
'IFORM',iform ,is_available, lsubmodel)
113
114 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
115
116 CALL hm_get_floatv(
'MAT_E' ,e ,is_available, lsubmodel, unitab)
117 CALL hm_get_floatv(
'MAT_NU' ,nu ,is_available, lsubmodel, unitab)
118
119 CALL hm_get_floatv(
'MAT102_C' ,c ,is_available, lsubmodel, unitab)
120 CALL hm_get_floatv(
'MAT102_PHI' ,phi ,is_available, lsubmodel, unitab)
121 CALL hm_get_floatv(
'MAT102_AMAX' ,amax ,is_available, lsubmodel, unitab)
122
123 CALL hm_get_floatv(
'MAT102_PMIN' ,pmin ,is_available, lsubmodel, unitab)
124
125
126
127
128
129
130
131
132 phi_deg = phi
133 phi = phi*pi/hundred80
134
135
136
137 IF(iform<=0 .OR. iform>=4)iform=2
138
139
140
141 g=e/two/(one+nu)
142 SELECT CASE(iform)
143 CASE(1)
144 k = six*c*cos(phi)/sqrt(three)/(three-sin(phi))
145 alpha = two*sin(phi)/sqrt(three)/(three-sin(phi))
146 CASE(2)
147 k = six*c*cos(phi)/sqrt(three)/(three+sin(phi))
148 alpha = two*sin(phi)/sqrt(three)/(three+sin(phi))
149 CASE(3)
150 k = three*c*cos(phi)/sqrt(nine+three*sin(phi)*sin(phi))
151 alpha = sin(phi)/sqrt(nine+three*sin(phi)*sin(phi))
152 END SELECT
153 a0 = k*k
156
157 IF(e<=zero)THEN
158 chain='YOUNG MODULUS MUST BE DEFINED '
159 CALL ancmsg(msgid=829, msgtype=msgerror, anmode=aninfo, i1=10, i2=mat_id, c1=
'ERROR', c2=titr, c3=chain)
160 ENDIF
161
162 IF(nu<=zero)THEN
163 chain='POISSON RATIO MUST BE DEFINED '
164 CALL ancmsg(msgid=829, msgtype=msgerror, anmode=aninfo, i1=10, i2=mat_id, c1=
'ERROR', c2=titr, c3=chain)
165 ENDIF
166
167 pstar = -infinity
168 IF(a2==zero .AND. a1/=zero)THEN
169 pstar=-a0/a1
170 ELSEIF(a2/=zero)THEN
171 delta = a1*a1-four*a0*a2
172
173 IF(delta >= zero)THEN
174 delta=sqrt(delta)
175 pstar = (-a1+delta)/two/a2
176
177 ELSE
178 pstar = -a1/two/a2
179
180
181 ENDIF
182 ELSE
183
184 pstar = -infinity
185 ENDIF
186
187 IF(amax==zero) amax = infinity
188 IF(pmin==zero) pmin =-infinity
189
190 rhor=rho0
191 pm(1) = rhor
192 pm(89)= rho0
193 pm(37)= pmin
194
195 israte=0
196
197
198
199
200 nuparam = 11
201 uparam(1) = c
202 uparam(2) = phi
203 uparam(3) = pstar
204 uparam(4) = a0
205 uparam(5) = a1
206 uparam(6) = a2
207 uparam(7) = amax
208 uparam(8) = g
209 uparam(9) = iform
210 uparam(10)= e
211 uparam(11)= nu
212 nuvar = 0
213 nfunc = 0
214 stifint = e
215 parmat(1) = stifint/three
216 parmat(2) = stifint
217 parmat(3) = nu
218
219 mtag%G_PLA = 1
220 mtag%L_PLA = 1
221
222
223 matparam%IEOS = 18
224 ipm(4) = 18
225 pm(32) = e / three/(one - two*nu)
226
227
229
230
232
233
235
236
239
240
241
242 WRITE(iout,1001) trim(titr),mat_id,102
243 WRITE(iout,1000)
244 IF(is_encrypted)THEN
245 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
246 ELSE
247 WRITE(iout,1002)rho0,rhor
248 WRITE(iout,1100)e,nu,c,phi_deg,pmin
249 WRITE(iout,1200)iform
250 SELECT CASE(iform)
251 CASE(1)
252 WRITE(iout,1201)
253 CASE(2)
254 WRITE(iout,1202)
255 CASE(3)
256 WRITE(iout,1203)
257 CASE(4)
258 WRITE(iout,1204)
259 END SELECT
260 WRITE(iout,1300)a0,a1,a2,amax,pstar
261 ENDIF
262
263 1000 FORMAT(
264 & 5x,' EXTENDED DRUCKER-PRAGER MATERIAL (DPRAG2) ',/,
265 & 5x,' ----------------------------------------- ')
266 1001 FORMAT(/
267 & 5x,a,/,
268 & 5x,'MATERIAL NUMBER . . . . . . . . . . . .=',i10/,
269 & 5x,'MATERIAL LAW. . . . . . . . . . . . . .=',i10/)
270 1002 FORMAT(
271 & 5x,'INITIAL DENSITY . . . . . . . . . . . .=',1pg20.13/,
272 & 5x,'REFERENCE DENSITY . . . . . . . . . . .=',1pg20.13/)
273 1100 FORMAT(
274 & 5x,'YOUNG MODULUS . . . . . . . . . . . . .=',1pg20.13/
275 & 5x,'POISSON RATIO . . . . . . . . . . . . .=',1pg20.13/
276 & 5x,'COHESION. . . . . . . . . . . . . . . .=',1pg20.13/
277 & 5x,'ANGLE OF INTERNAL FRICTION. . . . . . .=',1pg20.13/
278 & 5x,'MINIMUM PRESSURE. . . . . . . . . . . .=',1pg20.13)
279 1200 FORMAT(
280 & 5x,'DRUCKER-PRAGER MATERIAL CRITERION DEFINED FROM MOHR-COULOMB PARAMETERS',/,
281 & 5x,'FORMULATION FLAG. . . . . . . . . . . .=',i10)
282 1201 FORMAT(
283 & 5x,'-> CIRCUMBSCRIBED CRITERIA')
284 1202 FORMAT(
285 & 5x,'-> MIDDLE CRITERIA')
286 1203 FORMAT(
287 & 5x,'-> INSCRIBED CRITERIA')
288 1204 FORMAT(
289 & 5x,'-> ORIGINAL MOHR-COULOMB CRITERIA')
290 1300 FORMAT(
291 & 5x,'PARAMETERS USED TO DEFINE CRITERIA',/,
292 & 5x,'A0. . . . . . . . . . . . . . . . . . .=',1pg20.13/
293 & 5x,'A1. . . . . . . . . . . . . . . . . . .=',1pg20.13/
294 & 5x,'A2. . . . . . . . . . . . . . . . . . .=',1pg20.13/
295 & 5x,'AMAX. . . . . . . . . . . . . . . . . .=',1pg20.13/
296 & 5x,'YIELD FUNCTION PRESSURE ROOT. . . . . .=',1pg20.13//)
297
298 RETURN
subroutine hm_get_floatv(name, rval, 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
integer, parameter ncharkey
integer, parameter ncharfield
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)