37
38
39
40#include "implicit_f.inc"
41
42
43
44#include "param_c.inc"
45#include "scr17_c.inc"
46#include "com04_c.inc"
47#include "com08_c.inc"
48
49
50
51 INTEGER ,INTENT(IN) :: IMAT
52 INTEGER ,INTENT(IN) :: NEL,NUPARAM,NUVAR,
53 . NFUNC,IFUNC(NFUNC),NPF(*),NVARTMP
54 INTEGER ,DIMENSION(NPROPMI,NUMMAT) ,INTENT(IN) :: IPM
55 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: epst,
56 . depsxx,depsxy,depsxz,sigoxx,sigoxy,sigoxz
57 my_real ,
DIMENSION(*) ,
INTENT(IN) :: uparam
59 . tf(*)
60
61
62
63 my_real ,
DIMENSION(NEL) ,
INTENT(OUT) :: signxx,signxy,signxz,etse
64 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: pla,off,epsp
65 INTEGER :: VARTMP(NEL,NVARTMP)
66 my_real ,
DIMENSION(NEL,NUVAR) ,
INTENT(INOUT):: uvar
67 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: sigy
68
69
70
71 INTEGER :: I,IADBUF
73 INTEGER, DIMENSION(NEL) :: ICC,ISRATE,VFLAG,IAD,IPOS,ILEN
74 my_real,
DIMENSION(NEL) :: e,nu,g,g3,yld,yldmax,epmax,epdr,
75 . epsr1,epsr2,ca,cb,cn,cp,asrate,yscale,dfdpla,dpla
76
77 shfact = five_over_6
78 epif = zero
79
80 iadbuf = ipm(7,imat)-1
81 DO i=1,nel
82 e(i) = uparam(iadbuf+1)
83 nu(i) = uparam(iadbuf+2)
84 ca(i) = uparam(iadbuf+3)
85 yldmax(i)= uparam(iadbuf+4)
86 epmax(i) = uparam(iadbuf+5)
87 epsr1(i) = uparam
88 epsr2(i) = uparam(iadbuf+7)
89 cb(i) = uparam(iadbuf+8)
90 cn(i) = uparam(iadbuf+9)
91 icc(i) = nint(uparam(iadbuf+10))
92 epdr(i) = uparam(iadbuf+11)
93 epif =
max(epif,epdr(i))
94 cp(i) = uparam(iadbuf+12)
95 g(i) = uparam(iadbuf+16)
96 g3(i) = uparam(iadbuf+18)
97 israte(i)= nint(uparam(iadbuf+13))
98 asrate(i)= uparam(iadbuf+14)
99 vflag(i) = nint(uparam(iadbuf+23))
100 yscale(i)= uparam(iadbuf+24)
101 IF (vflag(i) == 1) THEN
102 epsp(i) = uvar(i,1)
103 ENDIF
104 dpla(i) = zero
105 ENDDO
106
107
108
109 DO i = 1,nel
110 gs = shfact*g(i)
111 signxx(i) = sigoxx(i) + e(i)*depsxx(i)
112 signxy(i) = sigoxy(i) + gs*depsxy(i)
113 signxz(i) = sigoxz(i) + gs*depsxz(i)
114 etse(i) = one
115 ENDDO
116
117
118
119 IF (nfunc > 0) THEN
120 ipos(1:nel) = vartmp(1:nel,1)
121 iad(1:nel) = npf(ifunc(1)) / 2 + 1
122 ilen(1:nel) = npf(ifunc(1)+1) / 2 - iad(1:nel) - ipos(1:nel)
123 CALL vinter(tf,iad,ipos,ilen,nel,pla,dfdpla,yld)
124 vartmp(1:nel,1) = ipos(1:nel)
125 ENDIF
126
127
128
129 DO i = 1,nel
130 IF (nfunc > 0) THEN
131 yld(i) = yscale(i)*yld(i)
132 ELSE
133 yld(i) = ca(i)
134 ENDIF
135 ENDDO
136
137
138
139 DO i = 1,nel
140 IF (pla(i) > zero) THEN
141 IF (nfunc > 0) THEN
142 yld(i) = yscale(i)*yld(i)
143 ELSE
144 yld(i) = ca(i) + cb(i)*exp(cn(i)*log(pla(i)))
145 ENDIF
146 ENDIF
147 ENDDO
148
149
150
151 IF (epif > zero) THEN
152 DO i = 1,nel
153 IF (epdr(i) > zero) THEN
154 frate = one + (epsp(i)*epdr(i))**cp(i)
155 IF (icc(i)== 1) yldmax(i) = yldmax(i) * frate
156 IF ((nfunc > 0) .AND. (ca(i) /= zero)) THEN
157 IF (pla(i)>zero) THEN
158 yld(i) = yld(i) + (ca(i) + cb(i)*exp(cn(i)*log(pla(i))))*(frate-one)
159 ELSE
160 yld(i) = yld(i) + ca(i)*(frate-one)
161 ENDIF
162 ELSE
163 yld(i) = yld(i) * frate
164 ENDIF
165 ENDIF
166 ENDDO
167 ENDIF
168
169
170
171 DO i = 1,nel
172 yld(i) =
min(yld(i),yldmax(i))
173 sigy(i)= yld(i)
174 svm = signxx(i)**2 + three*(signxy(i)**2 + signxz(i)**2)
175 IF (svm > yld(i)**2) THEN
176 svm = sqrt(svm)
177 r =
min( one, yld(i) / svm)
178 signxx(i) = signxx(i)*r
179 signxy(i) = signxy(i)*r
180 signxz(i) = signxz(i)*r
181 dpla(i) = off(i)*svm*(one - r) / e(i)
182 pla(i) = pla(i) + off(i)*svm*(one - r) / e(i)
183 ENDIF
184 ENDDO
185
186
187
188 DO i=1,nel
189 IF (off(i) < em01) off(i) = zero
190 IF (off(i) < one) off(i) = off(i)*four_over_5
191 ENDDO
192
193
194
195 DO i = 1,nel
196 IF (off(i) == one) THEN
197 dmg = one
198 IF (epst(i) > epsr1(i)) THEN
199 dmg = (epsr2(i) - epst(i)) / (epsr2(i) - epsr1(i))
201 signxx(i) = signxx(i)*dmg
202 signxy(i) = signxy(i)*dmg
203 signxz(i) = signxz(i)*dmg
204 ENDIF
205
206 IF (dmg == zero .or. pla(i) >= epmax(i)) THEN
207 off(i) = four_over_5
208 ENDIF
209 IF (vflag(i) == 1) THEN
211 epsdot = dpla(i)/
max(em20,dt1)
212 epsp(i) =
alpha*epsdot + (one -
alpha)*epsp(i)
213 uvar(i,1) = epsp(i)
214 ENDIF
215
216 ENDIF
217 ENDDO
218
219 RETURN
subroutine vinter(tf, iad, ipos, ilen, nel, x, dydx, y)