33
34
35
39
40
41
42#include "implicit_f.inc"
43
44
45
46#include "param_c.inc"
47
48
49
50 CHARACTER(LEN=NCHARTITLE) :: TITR
51 INTEGER MAT_ID,IOUT,NUPARAM
52 my_real,
DIMENSION(NUPARAM),
INTENT(INOUT) :: uparam
54 my_real,
DIMENSION(:),
INTENT(INOUT) :: pm(npropm)
55
56
57
58 INTEGER NDATA,,K,INDX,ITER,NORDRE,J,NPRONY
60 . lam_min,lam_max,strain_min,strain_max,
61 . d11,d22,d12,lam1,lam2,lam3,lam12,invd1,invd2,a1,a2,a3,d33,d13,d23,
62 . aa,b,bb,dt2,dt3,t2,t3,invd3,rv,bulk,gs,nug,young
63 my_real ,
DIMENSION(:),
ALLOCATABLE :: stress,stretch,mu,al,beta,
64 . muoveral,albeta,mubeta,nu
65 INTEGER , DIMENSION(:), ALLOCATABLE :: ITAB_ON_A,INDEX
66
67
68
69
70
71 lam_min =em03
72 lam_max =four
73 ndata = nint((lam_max-lam_min)/em03)
74
75 nordre = nint(uparam(2))
76 nprony = nint(uparam(3))
77 ALLOCATE ( mu(nordre),al(nordre),beta(nordre),
78 . muoveral(nordre),albeta(nordre),mubeta(nordre),nu(nordre) )
79 DO j= 1,nordre
80 mu(j) = uparam(6 + j)/gama_inf
81 al(j) = uparam(6 + nordre + j)
82 beta(j) = uparam(2*nordre + 2*nprony + 7 + j)
83 muoveral(j) = two*mu(j)/al(j)
84 albeta(j) = al(j)*beta(j)
85 mubeta(j) = mu(j)*beta(j)
86 nu(j) = one*beta(j)/(one + two*beta(j))
87 ENDDO
88 gs = zero
89 bulk = zero
90 IF(gama_inf /= one) THEN
91 DO j= 1,nordre
92 uparam(6 + j) = mu(j)
93 gs = gs + mu(j)
94 bulk = bulk + two*mu(j)*(third + beta(j))
95 ENDDO
96 nug = half*(three*bulk - two*gs)/(three*bulk+ gs)
97 uparam(1) = nug
98 uparam(5) = bulk
99
100 gs = gs*two
101 young = gs*(one + nug)
102 pm(20) = young
103 pm(21) = nug
104 pm(22) = gs
105 pm(24) = young/(one - nug**2)
106 pm(32) = bulk
107 pm(100) = bulk
108
109 pm(105) = gs/(bulk + two_third*gs)
110 ENDIF
111
112 ALLOCATE (stretch(ndata))
113 ALLOCATE (stress(ndata))
114 ALLOCATE (itab_on_a(ndata))
115 ALLOCATE (index(ndata))
116 stretch(1)=lam_min
117 itab_on_a = 0
118 DO k= 2,ndata
119 stretch(k)=stretch(k-1) + em03
120 ENDDO
121 stress=zero
122
123 IF(gama_inf /= one ) THEN
124 WRITE(iout,1000) mat_id
125 WRITE(iout,1100) nug,gs*half,bulk,nordre
126 WRITE(iout,1200) (mu(j),al(j),nu(j),j=1,nordre)
127 ENDIF
128 WRITE(iout,2000)mat_id
129
130
131 indx =0
132 DO i = 1, ndata
133 d11= zero
134 d22= zero
135 d33 = zero
136 d12 = zero
137 d13 = zero
138 d23 = zero
139 lam1 =stretch(i)
140 lam2 = lam1
141 lam3 = lam2
142 DO iter = 1,20
143 rv = lam1*lam2*lam3
144 t2= zero
145 dt2 = zero
146 DO j=1,nordre
147 aa = exp(al(j)*log(lam2))
148 bb = exp(-albeta(j)*log(rv))
149 t2 = t2 + muoveral(j)*(aa - bb)
150 dt2 = dt2 + two*mu(j)*aa + two*mubeta(j)*bb
151 dt2 = dt2 /lam2
152 ENDDO
153 IF(dt2 /= zero) lam2 = lam2 - t2/dt2
154 lam2 =
max(em03, lam2)
155 lam3 = lam2
156 ENDDO
157 rv= lam1*lam2*lam3
158 a1 = zero
159 a2 = zero
160 a3 = zero
161 b = zero
162 DO j=1,nordre
163 a1 = a1 + two*mu(j)*exp(al(j)*log(lam1))
164 a2 = a2 + two*mu(j)*exp(al(j)*log(lam2))
165 b = b + two*mubeta(j)*exp(-albeta(j)*log(rv))
166 ENDDO
167 d11 = a1 + b
168 d22 = a2 + b
169 d33 = d22
170
171 aa = b**2
172 invd1 = d11 + d22 + d33
173 invd2 = d11*d22 + d22*d33 + d11*d33 - three*aa
174 invd3 = d11*d22*d33 + two*aa*b - two*d22*aa - d11*aa
175 IF (invd1 > zero .AND. invd2 > zero .AND. invd3 > zero) THEN
176 indx = indx +1
177 itab_on_a(indx) = 1
178 index(indx) = i
179 ENDIF
180 ENDDO
181 IF(indx > 0 .AND. indx < ndata) THEN
182 WRITE(iout,2010)
183 i = index(1) - 1
184 IF(i > 1 .AND. i < ndata) THEN
185 strain_min = stretch(i) - one
186 WRITE(iout,2100)strain_min
187 ENDIF
188 i = index(indx) + 1
189 IF(i < ndata)THEN
190 strain_max = stretch(i) - one
191 WRITE(iout,2200)strain_max
192 ENDIF
193 ENDIF
194
195 indx =0
196 DO i = 1, ndata
197 d11 = zero
198 d22 = zero
199 d33 = zero
200 d12 = zero
201 d13 = zero
202 d23 = zero
203 lam1 = stretch(i)
204 lam2 = lam1
205 lam3 = lam1
206
207 DO iter = 1,20
208 rv = lam1*lam2*lam3
209 t3 = zero
210 dt3 = zero
211 DO j=1,nordre
212 aa = exp(al(j)*log(lam3))
213 bb = exp(-albeta(j)*log(rv))
214 t3 = t3 + muoveral(j)*(aa - bb)
215 dt3 = dt3 + two*mu(j)* aa + two*mubeta(j)*bb
216 dt3 = dt3 /lam3
217 ENDDO
218 IF(dt3 /= zero) lam3 = lam3 - t3/dt3
219 lam3 =
max(em03, lam3)
220 ENDDO
221 rv= lam1*lam2*lam3
222 a1 = zero
223 a2 = zero
224 a3 = zero
225 b = zero
226 DO j=1,nordre
227 a1 = a1 + two*mu(j)*exp(al(j)*log(lam1))
228 a3 = a3 + two*mu(j)*exp(al(j)*log(lam3))
229 b = b + two*mubeta(j)*exp(-albeta(j)*log(rv))
230 ENDDO
231 d11 = a1 + b
232 d22 = d11
233 d33 = a3 + b
234
235 aa = b**2
236 invd1 = d11 + d22 + d33
237 invd2 = d11*d22 + d22*d33 + d11*d33 - three*aa
238 invd3 = d11*d22*d33 + two*aa*b - two*d22*aa - d11*aa
239 IF (invd1 > zero .AND. invd2 > zero .AND. invd3 > zero) THEN
240 indx = indx +1
241 itab_on_a(indx) = 1
242 index(indx) = i
243 ENDIF
244 ENDDO
245 IF(indx > 0 .AND. indx < ndata) THEN
246 WRITE(iout,2020)
247 i = index(1) - 1
248 IF(i > 1 .AND. i < ndata) THEN
249 strain_min = stretch(i) - one
250 WRITE(iout,2100)strain_min
251 ENDIF
252 i = index(indx) + 1
253 IF(i < ndata)THEN
254 strain_max = stretch(i) - one
255 WRITE(iout,2200)strain_max
256 ENDIF
257 ENDIF
258
259 indx =0
260 DO i = 1, ndata
261 d11 = zero
262 d22 = zero
263 d33 = zero
264 d12 = zero
265 d13 = zero
266 d23 = zero
267 lam1 = stretch(i)
268 lam2 = one
269 lam3 = lam1
270
271 DO iter = 1,20
272 rv = lam1*lam2*lam3
273 t3 = zero
274 dt3 = zero
275 DO j=1,nordre
276 aa = exp(al(j)*log(lam3))
277 bb = exp(-albeta(j)*log(rv))
278 t3 = t3 + muoveral(j)*(aa - bb )
279 dt3 = dt3 + two*mu(j)* aa + two*mubeta(j)*bb
280 dt3 = dt3 /lam3
281 ENDDO
282 IF(dt3 /= zero) lam3 = lam3 - t3/dt3
283 lam3 =
max(em03, lam3)
284 ENDDO
285 rv= lam1*lam2*lam3
286 a1 = zero
287 a2 = zero
288 a3 = zero
289 b = zero
290 DO j=1,nordre
291 a1 = a1 + two*mu(j)*exp(al(j)*log(lam1))
292 a2 = a2 + two*mu(j)*exp(al(j)*log(lam2))
293 a3 = a3 + two*mu(j)*exp(al(j)*log(lam3))
294 b = b + two*mubeta(j)*exp(-albeta(j)*log(rv))
295 ENDDO
296 d11 = a1 + b
297 d22 = a2 + b
298 d33 = a3 + b
299
300 aa = b**2
301 invd1 = d11 + d22 + d33
302 invd2 = d11*d22 + d22*d33 + d11*d33 - three*aa
303 invd3 = d11*d22*d33 + two*aa*b - two*d22*aa - d11*aa
304 IF (invd1 > zero .AND. invd2 > zero .AND. invd3 > zero) THEN
305 indx = indx +1
306 itab_on_a(indx) = 1
307 index(indx) = i
308 ENDIF
309 ENDDO
310
311 IF(indx > 0 .AND. indx < ndata) THEN
312 WRITE(iout,2030)
313 i = index(1) - 1
314 IF(i > 1 .AND. i < ndata) THEN
315 strain_min = stretch(i) - one
316 WRITE(iout,2100)strain_min
317 ENDIF
318 i = index(indx) + 1
319 IF(i < ndata)THEN
320 strain_max = stretch(i) - one
321 WRITE(iout,2200)strain_max
322 ENDIF
323 ENDIF
324
325 DEALLOCATE (stretch)
326 DEALLOCATE (stress)
327 DEALLOCATE (itab_on_a)
328 DEALLOCATE (index)
329 DEALLOCATE ( mu,al,beta, muoveral,albeta,mubeta)
330 RETURN
331 1000 FORMAT
332 & (//5x, 'MODIFIED MATERIAL RIGIDITY ' ,/,
333 & 5x, ' ---------------------------', /,
334 & 5x, 'MATERIAL LAW = LAW62 ',/,
335 & 5x, 'MATERIAL NUMBER =',i10,//)
336 1100 FORMAT
337 &(5x,'EQUIVALENT POISSON RATIO . . . . . . .=',e12.4/
338 &,5x,'INITIAL SHEAR MODULUS . . . . . . . . .=',e12.4/
339 & 5x,'INITIAL BULK MODULUS. . .. . . . . . .=',e12.4//
340 &,5x,'ORDER OF STRAIN ENERGY. . . . . . . . .=',i8)
341 1200 FORMAT(
342 & 7x,'MATERIAL PARAMETER (MU). . . . . . . . =',e12.4/
343 & 7x,'MATERIAL PARAMETER (ALPHA) . . . . . . =',e12.4/
344 & 7x,'MATERIAL PARAMETER (NU) . . . . . . . =',e12.4/)
345 2000 FORMAT
346 & (//5x, 'CHECK THE DRUCKER PRAGER STABILITY CONDITIONS ' ,/,
347 & 5x, ' -----------------------------------------------', /,
348 & 5x, 'MATERIAL LAW = LAW62 ',/,
349 & 5x, 'MATERIAL NUMBER =',i10,//)
350 2010 FORMAT(
351 & 7x,'TEST TYPE = UNIXIAL ')
352 2020 FORMAT(//,
353 & 7x,'TEST TYPE = BIAXIAL ')
354 2030 FORMAT(//,
355 & 7x,'TEST TYPE = PLANAR (SHEAR)')
356 2100 FORMAT(
357 & 8x,'COMPRESSION: UNSTABLE AT A NOMINAL STRAIN LESS THAN ',1pg20.13)
358 2200 FORMAT(
359 & 8x,'TENSION: UNSTABLE AT A NOMINAL STRAIN LARGER THAN ',1pg20.13)
360
integer, parameter nchartitle