37
38
39
40#include "implicit_f.inc"
41#include "comlock.inc"
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79#include "sms_c.inc"
80
81
82
83 INTEGER NEL,NUPARAM,NUVAR,MAXFUNC, JSMS
84 INTEGER (*),NPF(*)
86 . time,timestep
88 . uparam(nuparam),off(nel),tf(
89 . epsd(nel),depszz(nel),depsyz(nel),depszx(nel
90 . epszz(nel) ,epsyz(nel) ,epszx(nel) ,
91 . sigozz(nel),sigoyz(nel),sigozx(nel),
92 . stifm(nel),signzz(nel),signyz(nel),signzx(nel),
93 . dmels(*)
94
95
96
97 INTEGER I1,I2,I,J,IEL,IRATE,NRATE,IFILTR,NTRAC
98 INTEGER IFUNN(MAXFUNC),IFUNT(MAXFUNC),JJ(NEL),ELTRAC(NEL),II(NEL)
100 . e,ecomp,g,g3,g12,g23,fcut,dydx1,dydx2,y1,y2,r,dsig,
depla,
101 . svm,sigt,dtb
103 . dsigx(nel),dsigy(nel),dsigz(nel),yfac(maxfunc),rate(maxfunc),
104 . yld(2,nel),hc(2,nel),depst(nel),stf(nel),fac(nel)
105
106
107
109 . finter
110
111
112
113 e = uparam(1)
114 g = uparam(2)
115 g3 = g*three
116 nrate = nint(uparam(3))
117 ifiltr= nint(uparam(4))
118 fcut = uparam(5)
119 ecomp = uparam(6)
120
121 IF (ecomp > 0) THEN
122 eltrac(1:nel) = 0
123 ntrac = 0
124 DO iel=1,nel
125 IF (epszz(iel) > zero) THEN
126 stf(iel) = (e+g) *
area(iel)
127 dsigz(iel) = e*depszz(iel)
128 ntrac = ntrac + 1
129 eltrac(ntrac) = iel
130 ELSE
131 stf(iel) = (ecomp+g) *
area(iel)
132 dsigz(iel) = ecomp*depszz(iel)
133 ENDIF
134 ENDDO
135 DO iel=1,nel
136 dsigy(iel) = g*depsyz(iel)
137 dsigx(iel) = g*depszx(iel)
138 signzz(iel) = sigozz(iel) + dsigz(iel)
139 signyz(iel) = sigoyz(iel) + dsigy(iel)
140 signzx(iel) = sigozx(iel) + dsigx(iel)
141 stifm(iel) = stifm(iel) + stf(iel)*off(iel)
142 ENDDO
143 ELSE
144 ntrac = nel
145 DO iel=1,nel
146 eltrac(iel) = iel
147 stf(iel) = (e+g) *
area(iel)
148 dsigz(iel) = e*depszz(iel)
149 dsigy(iel) = g*depsyz(iel)
150 dsigx(iel) = g*depszx(iel)
151 signzz(iel) = sigozz(iel) + dsigz(iel)
152 signyz(iel) = sigoyz(iel) + dsigy(iel)
153 signzx(iel) = sigozx(iel) + dsigx(iel)
154 stifm(iel) = stifm(iel) + stf(iel)*off(iel)
155 ENDDO
156 ENDIF
157
158 IF (idtmins==2 .AND. jsms/=0) THEN
159 dtb = (dtmins/dtfacs)**2
160 DO iel=1,nel
161
162 dmels(iel) =
max(dmels(iel),half*dtb*stf(iel)*off(iel))
163 ENDDO
164 END IF
165
166 IF (nrate > 0) THEN
167
168 DO irate=1,nrate
169 j = (irate-1)*2
170 ifunn(irate) = ifunc(j+1)
171 ifunt(irate) = ifunc(j+2)
172 yfac(irate) = uparam(7+irate)
173 rate(irate) = uparam(7+irate+nrate)
174 ENDDO
175
176
177
178 IF (nrate > 1) THEN
179
180 DO iel = 1,nel
181 ii(iel) = 1
182 DO j=2,nrate-1
183 IF (epsd(iel) > rate(j)) ii(iel) = j
184 EXIT
185 ENDDO
186 ENDDO
187
188 DO iel = 1,nel
189 i1 = ii(iel)
190 i2 = i1 + 1
191 fac(iel) = (epsd(iel) - rate(i1)) / (rate(i2) - rate(i1))
192 y1 = finter(ifunt(i1),eplast(iel),npf,tf,dydx1)*yfac(i1)
193 y2 = finter(ifunt(i2),eplast(iel),npf,tf,dydx2)*yfac(i2)
196 dydx1 = dydx1*yfac(i1)
197 dydx2 = dydx2*yfac(i2)
198 yld(2,iel) = y1 + fac(iel)*(y2 - y1)
199 hc(2,iel) = dydx1 + fac(iel)*(dydx2-dydx1)
200 ENDDO
201 DO i=1,ntrac
202 iel = eltrac(i)
203 i1 = ii(iel)
204 i2 = i1 + 1
205 y1 = finter(ifunn(i1),eplasn(iel),npf,tf,dydx1)*yfac(i1)
206 y2 = finter(ifunn(i2),eplasn(iel),npf,tf,dydx2)*yfac(i2)
209 dydx1 = dydx1*yfac(i1)
210 dydx2 = dydx2*yfac(i2)
211 yld(1,iel) = y1 + fac(iel)*(y2 - y1)
212 hc(1,iel) = dydx1 + fac(iel)*(dydx2-dydx1)
213 ENDDO
214
215 ELSEIF (nrate == 1) THEN
216
217 DO iel = 1,nel
218 i1 = 1
219 yld(2,iel) =
max(zero,
220 . finter(ifunt(i1),eplast(iel),npf,tf,dydx1)*yfac(i1))
221 hc(2,iel) = dydx1*yfac(i1)
222 ENDDO
223 DO i=1,ntrac
224 iel = eltrac(i)
225 i1 = 1
226 yld(1,iel) =
max(zero,
227 . finter(ifunn(i1),eplasn(iel),npf,tf,dydx1)*yfac(i1))
228 hc(1,iel) = dydx1*yfac(i1)
229 ENDDO
230 ENDIF
231
232
233
234 DO i=1,ntrac
235 iel = eltrac(i)
236 svm = abs(signzz(iel))
237 dsig = svm - yld(1,iel)
238 IF (dsig > zero) THEN
239 depla = dsig /
max((e + hc(1,iel)),em20)
240 r =
min(one, ((yld(1,iel)+
depla*hc(1,iel))/
max(em20,svm)))
241 eplasn(iel) = eplasn(iel) +
depla*off(iel)
242 signzz(iel) = signzz(iel)*r
243 ENDIF
244 ENDDO
245
246
247
248 DO iel=1,nel
249 svm = sqrt(signyz(iel)**2 + signzx(iel)**2)
250 dsig = svm - yld(2,iel)
251 IF (dsig > zero) THEN
252 depla = dsig /
max((g + hc(2,iel)),em20)
253 r =
min(one, ((yld(2,iel)+
depla*hc(2,iel))/
max(em20,svm)))
254 eplast(iel) = eplast(iel) +
depla*off(iel)
255 signyz(iel) = signyz(iel)*r
256 signzx(iel) = signzx(iel)*r
257 ENDIF
258
259 signzz(iel) = signzz(iel)*off(iel)
260 signyz(iel) = signyz(iel)*off(iel)
261 signzx(iel) = signzx(iel)*off(iel)
262 ENDDO
263
264 ENDIF
265
266 RETURN
subroutine depla(v, d, x, vr, dr, xdp, ddp, numnod)
subroutine area(d1, x, x2, y, y2, eint, stif0)