35 SUBROUTINE law70_upd(MAT_PARAM,TITR ,MAT_ID ,NUPARAM ,UPARAM ,
36 . NFUNC ,IFUNC ,NPC ,PLD ,IOUT ,
37 . NFUNCT ,FUNC_ID ,NPROPM ,PM )
47#include "implicit_f.inc"
51 INTEGER ,
INTENT(IN) :: MAT_ID
52 INTEGER ,
INTENT(IN) :: NFUNC
53 INTEGER ,
INTENT(IN) :: NFUNCT
54 INTEGER ,
INTENT(IN) :: NUPARAM
55 INTEGER ,
INTENT(IN) ::
56 INTEGER ,
INTENT(IN) :: NPROPM
57 INTEGER ,
DIMENSION(NFUNC) ,
INTENT(IN) :: IFUNC
58 INTEGER ,
DIMENSION(NFUNCT) ,
INTENT(IN) :: FUNC_ID
59 INTEGER ,
INTENT(IN) :: NPC(*)
61 CHARACTER(LEN=NCHARTITLE) ,
INTENT(IN):: TITR
62 my_real ,
DIMENSION(NPROPM) ,
INTENT(INOUT) :: pm
63 my_real ,
DIMENSION(NUPARAM) ,
INTENT(INOUT) :: uparam
64 TYPE (MATPARAM_STRUCT_) ,
INTENT(INOUT) :: MAT_PARAM
68 INTEGER :: I,J,K,NDIM,NLOAD,NULOAD,,IPT,NPT,LMAX,FUNC_N,
69 . IC1,IC2,IZERO,IERROR,NTABLE,IS_ENCRYPTED,IFLAG0,IFLAG
70INTEGER ,
PARAMETER :: = 1
71 integer ,
PARAMETER :: unload = 2
72 INTEGER ,
PARAMETER :: NPTMAX = 100
73 my_real :: e0,emax,epsmax,stiffmin,stiffmax,stiffini,c1,g,nu,xmax,
74 . s1,s2,t1,t2,x1,x2,y1,y2,deri,yy,eps0,epst
75 INTEGER ,
DIMENSION(NFUNC) :: FUNC,PERM,LEN
76 my_real ,
DIMENSION(NFUNC*2) :: RATE,YFAC
77 my_real ,
DIMENSION(:) ,
ALLOCATABLE :: xf
78 my_real ,
DIMENSION(:,:) ,
ALLOCATABLE :: xi,yi,yf
84 ncurv = int(uparam(1))
85 nload = int(uparam(7))
86 nuload = int(uparam(8))
88 emax = uparam(2*nfunc + 12)
91 is_encrypted = nint(uparam(2*nfunc + 16))
97 mat_param%NTABLE = ntable
98 ALLOCATE (mat_param%TABLE(ntable))
99 mat_param%TABLE(load)%NOTABLE = load
100 IF (ntable == 2) mat_param%TABLE(unload)%NOTABLE = unload
108 rate(i) = uparam(i + 8)
109 yfac(i) = uparam(i + 8 + nfunc)
110 len(i) = (npc(func_n+1) - npc(func_n)) / 2
111 lmax =
max(lmax,len(i))
113 ALLOCATE (xi(lmax,nload))
114 ALLOCATE (yi(lmax,nload))
121 ic2 = npc(func_n+1) - 2
128 t1 = pld(j+1) * yfac(i)
129 t2 = pld(j+3) * yfac(i)
130 IF (s1 < zero .and. s2 < zero) cycle
131 IF (j == ic1 .and. s1 > zero)
THEN
135 ELSE IF (s1 <= zero .and. s2 > zero)
THEN
136 IF (t1 /= zero )
THEN
156 IF (xi(j,i) == zero .and. yi(j,i) /= zero)
THEN
158 ELSE IF (xi(j,i) == zero .and. xi(j,i) /= zero)
THEN
165 IF (len(i) > nptmax)
THEN
166 CALL vw_smooth(len(i),nptmax,xi(1:len(i),i),yi(1:len(i),i))
174 . mat_param%TABLE(load) ,nload ,len ,lmax ,rate ,
188 rate(i+nload) = uparam(k + 8)
189 yfac(i) = uparam(k + 8 + nfunc)
190 len(i) = (npc(func(i)+1) - npc(func(i))) / 2
191 lmax =
max(lmax,len(i))
193 ALLOCATE (xi(lmax,nuload))
194 ALLOCATE (yi(lmax,nuload))
199 ic2 = npc(func_n+1) - 2
207 t1 = pld(j+1) * yfac(i)
208 t2 = pld(j+3) * yfac(i)
209 IF (s1 < zero .and. s2 < zero) cycle
210 IF (j == ic1 .and. s1 > zero)
THEN
214 ELSE IF (s1 <= zero .and. s2 > zero)
THEN
215 IF (t1 /= zero )
THEN
235 IF (xi(j,i) == zero .and. yi(j,i) /= zero)
THEN
237 ELSE IF (xi(j,i) == zero .and. xi(j,i) /= zero)
THEN
244 IF (len(i) > nptmax)
THEN
245 CALL vw_smooth(len(i),nptmax,xi(1:len(i),i),yi(1:len(i),i))
251 . mat_param%TABLE(unload) ,nuload ,len ,lmax ,rate(nload+1) ,
261 CALL table_slope(mat_param%TABLE(load),stiffini,stiffmin,stiffmax,xmax)
263 IF (emax == zero)
THEN
265 uparam(3) = (emax - e0) / epsmax
266 uparam(2*nfunc + 12) = emax
268 CALL ancmsg(msgid=1219, msgtype=msginfo, anmode=aninfo_blind_1,
276 IF (e0 < stiffini)
THEN
278 IF (emax < e0) emax = e0
286 x1 = mat_param%TABLE(load)%X(1)%VALUES(1)
287 ndim = mat_param%TABLE(load)%NDIM
288 npt =
SIZE(mat_param%TABLE(load)%X(1)%VALUES)
292 x2 = mat_param%TABLE(load)%X(1)%VALUES(j)
294 y1 = mat_param%TABLE(load)%Y1D(i)
295 y2 = mat_param%TABLE(load)%Y1D(j)
296 ELSE IF (ndim == 2)
THEN
297 y1 = mat_param%TABLE(load)%Y2D(i,k)
298 y2 = mat_param%TABLE(load)%Y2D(j,k)
300 deri = (y2 - y1) / (x2 - x1)
301 IF (deri >= emax .and. x1 > zero)
THEN
302 eps0 =
min(eps0, x1 )
305 epst =
min(epst,abs(eps0 - y1/emax))
314 uparam(3) = (emax - e0) / epst
316 CALL ancmsg(msgid=864, msgtype=msginfo, anmode=aninfo_blind_1,
321 IF (iflag0 == 1)
THEN
324 uparam(3) = (emax - e0)/epst
325 CALL ancmsg(msgid=865, msgtype=msgwarning, anmode=aninfo_blind_1,
334 DO WHILE (mat_param%TABLE(load)%X(1)%VALUES(k) < epsmax .and. k < len(1)-1)
336 IF(k >= len(1) -1 )
EXIT
338 x1 = mat_param%TABLE(load)%X(1)%VALUES(k-1)
339 x2 = mat_param%TABLE(load)%X(1)%VALUES(k)
342 IF (mat_param%TABLE(load)%NDIM == 1)
THEN
343 y1 = mat_param%TABLE(load)%Y1D(k-1)
344 y2 = mat_param%TABLE(load)%Y1D(k)
345 ELSE IF (mat_param%TABLE(load)%NDIM == 2)
THEN
346 y1 = mat_param%TABLE(load)%Y2D(k-1,1)
347 y2 = mat_param%TABLE(load)%Y2D(k,1)
349 deri = (y2 - y1) / (x2 - x1)
350 uparam(2*nfunc + 15) = y1 + deri * (epsmax - x1)
354 g = half *e0 / (one + nu)
355 c1 = third*e0 / (one - two*nu)
364 IF (is_encrypted == 0)
THEN
367 ndim = mat_param%TABLE(load)%NDIM
369 WRITE(iout,1101) func_id(ifunc(1))
370 DO j=1,
SIZE(mat_param%TABLE(load)%X(1)%VALUES)
371 WRITE(iout,2000) mat_param%TABLE(load)%X(1)%VALUES(j),
372 . mat_param%TABLE(load)%Y1D(j)
376 WRITE(iout,1102) func_id(ifunc(i)),rate(i)
377 DO j=1,
SIZE(mat_param%TABLE(load)%X(1)%VALUES)
378 WRITE(iout,2000) mat_param%TABLE(load)%X(1)%VALUES(j),
379 . mat_param%TABLE(load)%Y2D(j,i)
384 IF (nuload == 1)
THEN
386 WRITE(iout,1101) func_id(ifunc(1+nload))
387 DO j=1,
SIZE(mat_param%TABLE(unload)%X(1)%VALUES)
388 WRITE(iout,2000) mat_param%TABLE(unload)%X(1)%VALUES(j),
389 . mat_param%TABLE(unload)%Y1D(j)
391 ELSE IF (nuload > 1)
THEN
393 ndim = mat_param%TABLE(unload)%NDIM
395 WRITE(iout,1101) func_id(ifunc(1+nload))
396 DO j=1,
SIZE(mat_param%TABLE(unload)%X(1)%VALUES)
397 WRITE(iout,2000) mat_param%TABLE(unload)%X(1)%VALUES(j),
398 . mat_param%TABLE(unload)%Y1D(j)
402 WRITE(iout,1102) func_id(ifunc(i+nload)),rate(i+nload)
403 DO j=1,
SIZE(mat_param%TABLE(unload)%X(1)%VALUES)
404 WRITE(iout,2000) mat_param%TABLE(unload)%X(1)%VALUES(j),
405 . mat_param%TABLE(unload)%Y2D(j,i)
415 1000
FORMAT(/,
'------------------------------------------',/,
416 .
'MATERIAL LAW70 : UPDATE OF INPUT FUNCTIONS',/,
417 .
'------------------------------------------',/)
418 1001
FORMAT(5x,
'LOADING :')
419 1002
FORMAT(5x,
'UNLOADING :')
420 1101
FORMAT(5x,/,
'YIELD STRESS FUNCTION=',i10,
422 1102
FORMAT(5x,/,
'YIELD STRESS FUNCTION=',i10,
423 . 5x,
'STRAIN RATE = ',1pg20.13,/,
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)