38
39
40
41
42
43#include "implicit_f.inc"
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63#include "mvsiz_p.inc"
64#include "scr17_c.inc"
65#include "units_c.inc"
66#include "comlock.inc"
67#include "param_c.inc"
68#include "impl1_c.inc"
69
70
71
72
73 INTEGER NEL, NUPARAM, NUVAR,NGL(NEL)
74 my_real time,timestep,uparam(*),
75 . signxx(nel),signyy(nel),signzz(nel),
76 . signxy(nel),signyz(nel),signzx(nel),
77 . dpla(nel),pla(nel)
78
79
80
81
82
83
84
85
86 my_real uvar(nel,nuvar), off(nel),dfmax(nel),tdele(nel)
87
88
89
90 INTEGER I,J,,IDEV,IFLAG,INDX(MVSIZ),IADBUF,NINDX,
91 . NINDEX,INDEX(MVSIZ),IFAIL,JJ,IMOY
93 . c1,c2,c3,c4,cm,
94 . cn,p,epsf,svm,j3,eta,xi,sxx,syy,szz,delta,
95 . xi_old, eta_old,pla_old,epsf_old
96
97 c1 = uparam(1)
98 c2 = uparam(2)
99 c3 = uparam(3)
100 c4 = uparam(4)
101 cm = uparam(5)
102 cn = uparam(6)
103 iflag = int(uparam(8))
104 imoy = int( uparam(9))
105
106 idel=0
107 idev=0
108 IF(iflag==1)THEN
109 idel=1
110 ELSEIF(iflag==2)THEN
111 idev =1
112 END IF
113
114 IF(idel==1)THEN
115 DO i=1,nel
116 IF(off(i)<0.1) off(i)=0.0
117 IF(off(i)<1.0) off(i)=off(i)*0.8
118 END DO
119 END IF
120
121 IF(idel==1)THEN
122 nindx=0
123 DO i=1,nel
124 IF(iflag==1.AND.off(i)==1.AND.dpla(i)/=zero)THEN
125 p = third*(signxx(i) + signyy(i) + signzz(i))
126 sxx = signxx(i) - p
127 syy = signyy(i) - p
128 szz = signzz(i) - p
129
130 svm =half*(sxx**2 + syy**2 + szz**2)
131 . +signxy(i)**2 + signzx(i)**2 + signyz(i)**2
132 svm=sqrt(three*svm)
133
134 j3 = sxx*syy*szz + two*signxy(i)*signzx(i)*signyz(i)
135 . - syy*signzx(i)**2 - sxx*signyz(i)**2
136 . - szz*signxy(i)**2
137 eta = p /
max(em20,svm)
138 xi = half*(twenty + seven)*j3/
max(em20,svm**3)
139
140 IF(imoy==1)THEN
141 uvar(i,1) = uvar(i,1) + eta*dpla(i)
142 uvar(i,2) = uvar(i,2) + xi*dpla(i)
143 eta = uvar(i,1)/
max(em20,pla(i))
144 xi = uvar(i,2)/
max(em20,pla(i))
145 ENDIF
146
147 epsf = (c1*exp(-c2*eta))**cn
148 . - (c3*exp(-c4*eta))**cn
149 epsf = epsf *
max(zero,(one - xi**cm))**(one/cm)
150 epsf = ((c1*exp(-c2*eta))**cn - epsf)**(one/cn)
151 IF(epsf>zero)
152 . dfmax(i) = dfmax(i) + dpla(i)*(one/epsf)
153 IF(dfmax(i)>=one.AND.off(i)==one) THEN
154 off(i)=four_over_5
155 nindx=nindx+1
156 indx(nindx)=i
157 tdele(i) = time
158 ENDIF
159 ENDIF
160 ENDDO
161 IF(nindx>0.AND.imconv==1)THEN
162 DO j=1,nindx
163#include "lockon.inc"
164 WRITE(iout, 1000) ngl(indx(j))
165 WRITE(istdo,1100) ngl(indx(j)),time
166#include "lockoff.inc"
167 END DO
168 END IF
169 ENDIF
170
171 IF(idev==1)THEN
172 nindx=0
173 nindex = 0
174 DO i=1,nel
175 IF(iflag==2.AND.off(i)==one)THEN
176 IF(dfmax(i)<one)THEN
177 p = third*(signxx(i) + signyy(i) + signzz(i))
178 sxx = signxx(i) - p
179 syy = signyy(i) - p
180 szz = signzz(i) - p
181
182 svm =half*(sxx**2 + syy**2 + szz**2)
183 . +signxy(i)**2 + signzx(i)**2 + signyz(i)**2
184 svm=sqrt(three*svm)
185
186 j3 = sxx*syy*szz + two*signxy(i)*signzx(i)*signyz(i)
187 . - syy*signzx(i)**2 - sxx*signyz(i)**2
188 . - szz*signxy(i)**2
189 eta = p /
max(em20,svm)
190 xi = half*(twenty + seven)*j3/
max(em20,svm**3)
191
192 IF(imoy==1)THEN
193 uvar(i,1) = uvar(i,1) + eta*dpla(i)
194 uvar(i,2) = uvar(i,2) + xi*dpla(i)
195 eta = uvar(i,1)/
max(em20,pla(i))
196 xi = uvar(i,2)/
max(em20,pla(i))
197 ENDIF
198
199 epsf = (c1*exp(-c2*eta))**cn
200 . - (c3*exp(-c4*eta))**cn
201 epsf = epsf *
max(zero,(one - xi*
202 epsf = ((c1*exp(-c2*eta))**cn - epsf)**(one/cn)
203 IF(epsf>zero) dfmax(i) = dfmax(i) + dpla(i)/epsf
204 IF(dfmax(i)>=one.AND.off(i)==one) THEN
205 nindx=nindx+1
206 indx(nindx)=i
207 signxx(i) = p
208 signyy(i) = p
209 signzz(i) = p
210 signxy(i) = zero
211 signyz(i) = zero
212 signzx(i) = zero
213 ENDIF
214
215 ELSE
216 p = third*(signxx(i) + signyy(i) + signzz(i))
217 signxx(i) = p
218 signyy(i) = p
219 signzz(i) = p
220 signxy(i) = zero
221 signyz(i) = zero
222 signzx(i) = zero
223 ENDIF
224 ENDIF
225 ENDDO
226 IF(nindx>0.AND.imconv==1)THEN
227 DO j=1,nindx
228 i = indx(j)
229#include "lockon.inc"
230 WRITE(iout, 2000) ngl(i)
231 WRITE(istdo,2100) ngl(i),time
232#include "lockoff.inc"
233 END DO
234 END IF
235 ENDIF
236
237 DO i=1,nel
238 dfmax(i)=
min(one,dfmax(i))
239 ENDDO
240
241 1000 FORMAT(1x,'DELETE SOLID ELEMENT NUMBER ',i10)
242 1100 FORMAT(1x,'DELETE SOLID ELEMENT NUMBER ',i10,
243 . ' AT TIME :',1pe20.13)
244
245 2000 FORMAT(1x,' DEVIATORIC STRESS WILL BE VANISHED',i10)
246 2100 FORMAT(1x,' DEVIATORIC STRESS WILL BE VANISHED',i10,
247 . ' AT TIME :',1pe20.13)
248 RETURN