77
78
79
80
81#include "implicit_f.inc"
82#include "comlock.inc"
83
84
85
86#include "mvsiz_p.inc"
87
88
89
90#include "com08_c.inc"
91#include "impl1_c.inc"
92#include "scr05_c.inc"
93
94
95
96 INTEGER, INTENT(IN) :: NEL
97 INTEGER, INTENT(IN) :: ISMSTR
98 INTEGER, INTENT(IN) :: JCVT
99 INTEGER ICP,ICR,ICS,ICT,NGL(*),IDEG(*)
100
102 . vx1(*), vx2(*), vx3(*), vx4(*), vx5(*), vx6(*), vx7(*), vx8(*),
103 . vy1(*), vy2(*), vy3(*), vy4(*), vy5(*), vy6(*), vy7(*), vy8(*),
104 . vz1(*), vz2(*), vz3(*), vz4(*), vz5(*), vz6(*), vz7(*), vz8(*),
105 . pxc1(*), pxc2(*), pxc3(*), pxc4(*),
106 . pyc1(*), pyc2(*), pyc3(*), pyc4(*),
107 . pzc1(*), pzc2(*), pzc3(*), pzc4(*),
108 . px1(*), px2(*), px3(*), px4(*),
109 . px5(*), px6(*), px7(*), px8(*),
110 . py1(*), py2(*), py3(*), py4(*),
111 . py5(*), py6(*), py7(*), py8(*),
112 . pz1(*), pz2(*), pz3(*), pz4(*),
113 . pz5(*), pz6(*), pz7(*), pz8(*),
114 . pxy1(*),pxy2(*),pxy3(*),pxy4(*),
115 . pxy5(*),pxy6(*),pxy7(*),pxy8(*),
116 . pyx1(*),pyx2(*),pyx3(*),pyx4(*),
117 . pyx5(*),pyx6(*),pyx7(*),pyx8(*),
118 . pxz1(*),pxz2(*),pxz3(*),pxz4(*),
119 . pxz5(*),pxz6(*),pxz7(*),pxz8
120 . pzx1(*),pzx2(*),pzx3(*),pzx4(*),
121 . pzx5(*),pzx6(*),pzx7(*),pzx8(*),
122 . pyz1(*),pyz2(*),pyz3(*),pyz4(*),
123 . pyz5(*),pyz6(*),pyz7(*),pyz8(*),
124 . pzy1(*),pzy2(*),pzy3(*),pzy4(*),
125 . pzy5(*),pzy6(*),pzy7(*),pzy8(*),
126 . bxy1(*),bxy2(*),bxy3(*),bxy4(*),
127 . bxy5(*),bxy6(*),bxy7(*),bxy8(*),
128 . byx1(*),byx2(*),byx3(*),byx4(*),
129 . byx5(*),byx6(*),byx7(*),byx8(*),
130 . bxz1(*),bxz2(*),bxz3(*),bxz4(*),
131 . bxz5(*),bxz6(*),bxz7(*),bxz8(*),
132 . bzx1(*),bzx2(*),bzx3(*),bzx4(*),
133 . bzx5(*),bzx6(*),bzx7(*),bzx8(*),
134 . byz1(*),byz2(*),byz3(*),byz4(*),
135 . byz5(*),byz6(*),byz7(*),byz8(*),
136 . bzy1(*),bzy2(*),bzy3(*),bzy4(*),
137 . bzy5(*),bzy6(*),bzy7(*),bzy8(*),
138 . dxx(*), dxy(*), dxz(*),
139 . dyx(*), dyy(*), dyz(*),
140 . dzx(*), dzy(*), dzz(*), d4(*), d5(*), d6(*),
141 . wxx(*), wyy(*), wzz(*), offs(*),dsv(*),
142 . volo(*),off(*),eint(*),dsr(*),dss(*),dst(*),dti
143 DOUBLE PRECISION
144 . VOL0DP(MVSIZ)
145
146
147
148 INTEGER I, ICOR
149
151 . dvc(mvsiz),dvca(mvsiz),dt1d2,tol,dt1d
152 DOUBLE PRECISION
153 . DVP,DV,DV1
154
155
156 tol = one-em20
157 dxx(1:nel) =px1(1:nel)*vx1(1:nel)+px2(1:nel)*vx2(1:nel)+px3(1:nel)*vx3(1:nel)+px4(1:nel
158 . +px5(1:nel)*vx5(1:nel)+px6(1:nel)*vx6(1:nel)+px7(1:nel)*vx7(1:nel)+px8(1:nel)*vx8(1:nel)
159 dyy(1:nel) =py1(1:nel)*vy1
160 . +py5(1:nel)*vy5(1:nel)+py6(1:nel)*vy6(1:nel)+py7(1:nel)*vy7
161 dzz(1:nel) =pz1(1:nel)*vz1(1:nel)+pz2(1:nel)*vz2(1:nel)+pz3(1:nel
162 . +pz5(1:nel)*vz5(1:nel)+pz6(1:nel)*vz6(1:nel)+pz7(1:nel)*vz7(1:nel)+pz8(1:nel)*vz8(1:nel)
163 dxy(1:nel) =pxy1(1:nel)*vx1(1:nel)+pxy2(1:nel)*vx2(1:nel)
164 + +pxy3(1:nel)*vx3(1:nel)+pxy4(1:nel)*vx4(1:nel)
165 + +pxy5(1:nel)*vx5(1:nel)+pxy6(1:nel)*vx6(1:nel)
166 + +pxy7(1:nel)*vx7(1:nel)+pxy8(1:nel)*vx8(1:nel)
167 dxz(1:nel) =pxz1(1:nel)*vx1(1:nel)+pxz2(1:nel)*vx2(1:nel)
168 + +pxz3(1:nel)*vx3(1:nel)+pxz4(1:nel)*vx4(1:nel)
169 + +pxz5(1:nel)*vx5(1:nel)+pxz6(1:nel)*vx6(1:nel)
170 + +pxz7(1:nel)*vx7(1:nel)+pxz8(1:nel)*vx8(1:nel)
171 dyx(1:nel) =pyx1(1:nel)*vy1(1:nel)+pyx2(1:nel)*vy2(1:nel)
172 + +pyx3(1:nel)*vy3(1:nel)+pyx4(1:nel)*vy4(1:nel)
173 + +pyx5(1:nel)*vy5(1:nel)+pyx6(1:nel)*vy6(1:nel)
174 + +pyx7(1:nel)*vy7(1:nel)+pyx8(1:nel)*vy8(1:nel)
175 dyz(1:nel) =pyz1(1:nel)*vy1(1:nel)+pyz2(1:nel)*vy2(1:nel)
176 + +pyz3(1:nel)*vy3(1:nel)+pyz4(1:nel)*vy4(1:nel)
177 + +pyz5(1:nel)*vy5(1:nel)+pyz6(1:nel)*vy6(1:nel)
178 + +pyz7(1:nel)*vy7(1:nel)+pyz8(1:nel)*vy8(1:nel)
179 dzx(1:nel) =pzx1(1:nel)*vz1(1:nel)+pzx2(1:nel)*vz2(1:nel)
180 + +pzx3(1:nel)*vz3(1:nel)+pzx4(1:nel)*vz4(1:nel)
181 + +pzx5(1:nel)*vz5(1:nel)+pzx6(1:nel)*vz6(1:nel)
182 + +pzx7(1:nel)*vz7(1:nel)+pzx8(1:nel)*vz8(1:nel
183 dzy(1:nel) =pzy1(1:nel)*vz1(1:nel)+pzy2(1:nel)*vz2(1:nel)
184 + +pzy3(1:nel)*vz3(1:nel)+pzy4(1:nel)*vz4(1:nel)
185 + +pzy5(1:nel)*vz5(1:nel)+pzy6(1:nel)*vz6(1:nel)
186 + +pzy7(1:nel)*vz7(1:nel)+pzy8(1:nel)*vz8(1:nel)
187 dvc(1:nel) =(dxx(1:nel)+dyy(1:nel)+dzz(1:nel))*dt1
188
189 IF (icp ==1) THEN
190 dvca(1:nel)=pxc1(1:nel)*(vx1(1:nel)-vx7(1:nel))+pxc2(1:nel)*(vx2(1:nel)-vx8(1:nel))
191 . +pxc3(1:nel)*(vx3(1:nel)-vx5(1:nel))+pxc4(1:nel)*(vx4
192 . +pyc1(1:nel)*(vy1(1:nel)-vy7(1:nel))+pyc2(1:nel)*(vy2
193 . +pyc3(1:nel)*(vy3(1:nel)-vy5(1:nel))+pyc4(1:nel)*(vy4(1:nel)-vy6(1:nel))
194 . +pzc1(1:nel)*(vz1(1:nel)-vz7(1:nel))+pzc2(1:nel)*(vz2(1:nel)-vz8(1:nel))
195 . +pzc3(1:nel)*(vz3(1:nel)-vz5(1:nel))+pzc4(1:nel
196 dvca(1:nel)=dvca(1:nel)*dt1
197 ELSE
198 dyy(1:nel) =dyy(1:nel)+bxy1(1:nel)*vx1(1:nel)+bxy2(1:nel)*vx2(1:nel)
199 + +bxy3(1:nel)*vx3(1:nel)+bxy4(1:nel)*vx4(1:nel)
200 + +bxy5(1:nel)*vx5(1:nel)+bxy6(1:nel)*vx6(1:nel)
201 + +bxy7(1:nel)*vx7(1:nel)+bxy8(1:nel)*vx8(1:nel)
202 dzz(1:nel) =dzz(1:nel)+bxz1(1:nel)*vx1(1:nel)+bxz2(1:nel)*vx2(1:nel)
203 + +bxz3(1:nel)*vx3(1:nel)+bxz4(1:nel)*vx4(1:nel)
204 + +bxz5(1:nel)*vx5(1:nel)+bxz6(1:nel)*vx6(1:nel)
205 + +bxz7(1:nel)*vx7(1:nel)+bxz8(1:nel)*vx8(1:nel)
206 dxx(1:nel) =dxx(1:nel)+byx1(1:nel)*vy1(1:nel)+byx2
207 + +byx3(1:nel)*vy3(1:nel)+byx4(1:nel)*vy4(1:nel)
208 + +byx5(1:nel)*vy5(1:nel)+byx6(1:nel)*vy6(1:nel)
209 + +byx7(1:nel)*vy7(1:nel)+byx8(1:nel)*vy8(1:nel)
210 dzz(1:nel) =dzz(1:nel)+byz1(1:nel)*vy1(1:nel)+byz2(1:nel)*vy2(1:nel)
211 + +byz3(1:nel)*vy3(1:nel)+byz4(1:nel)*vy4(1:nel)
212 + +byz5(1:nel)*vy5(1:nel)+byz6(1:nel)*vy6(1:nel)
213 + +byz7(1:nel)*vy7(1:nel)+byz8(1:nel)*vy8(1:nel)
214 dxx(1:nel) =dxx(1:nel)+bzx1(1:nel)*vz1(1:nel)+bzx2(1:nel)*vz2(1:nel)
215 + +bzx3(1:nel)*vz3(1:nel)+bzx4(1:nel)*vz4(1:nel)
216 + +bzx5(1:nel)*vz5(1:nel)+bzx6(1:nel)*vz6(1:nel)
217 + +bzx7(1:nel)*vz7(1:nel)+bzx8(1:nel)*vz8(1:nel)
218 dyy(1:nel) =dyy(1:nel)+bzy1(1:nel)*vz1(1:nel)+bzy2(1:nel)*vz2(1:nel)
219 + +bzy3(1:nel)*vz3(1:nel)+bzy4(1:nel)*vz4(1:nel)
220 + +bzy5(1:nel)*vz5(1:nel)+bzy6(1:nel)*vz6(1:nel)
221 + +bzy7(1:nel)*vz7(1:nel)+bzy8(1:nel)*vz8(1:nel)
222 dvca(1:nel) =(dxx(1:nel)+dyy(1:nel)+dzz(1:nel))*dt1
223 ENDIF
224
225
226 IF (icr==1) THEN
227 DO i=1,nel
228 dxx(i)= dxx(i)-dsr(i)*dti
229 IF(ismdisp==0.AND.offs(i)/=two)dvca(i)= dvca(i)-dsr(i)
230 ENDDO
231 ENDIF
232
233 IF (ics==1) THEN
234 DO i=1,nel
235 dyy(i)= dyy(i)-dss(i)*dti
236 IF(ismdisp==0.AND.offs(i)/=two)dvca(i)= dvca(i)-dss(i)
237 ENDDO
238 ENDIF
239
240 IF (ict==1) THEN
241 DO i=1,nel
242 dzz(i)= dzz(i)-dst(i)*dti
243 IF(ismdisp==0.AND.offs(i)/=two)dvca(i)= dvca(i)-dst(i)
244 ENDDO
245 ENDIF
246
247 DO i=1,nel
248 dvp=dvca(i)-dvc(i)
249 dv =dvp*off(i)
250 IF(ideg(i)>10) dv = zero
251 dsv(i) = dv
252 ENDDO
253 IF (ismdisp>0.AND.(icr+ics+ict)==0.AND.icp/=1) THEN
254 DO i=1,nel
255 dsv(i) = zero
256 ENDDO
257 ELSEIF (ismstr==10.AND.icp==1) THEN
258 DO i=1,nel
259 dsv(i) = zero
260 ENDDO
261 ELSEIF (ismstr==12.AND.icp==1) THEN
262 DO i=1,nel
263 IF(offs(i)<=one) dsv(i) = zero
264 ENDDO
265 ELSEIF ((icr+ics+ict)>0 ) THEN
266 DO i=1,nel
267 IF(offs(i)==two.OR.ismstr==11) THEN
268 IF (icp==1) THEN
269 dsv(i) =dvca(i)-(dxx(i)+dyy(i)+dzz(i))*dt1
270 ELSE
271 dsv(i) = zero
272 END IF
273 END IF
274 ENDDO
275 END IF
276 DO i=1,nel
277 IF(offs(i)==two.OR.ismstr==11) cycle
278 dv=dsv(i)
279 IF (abs(dv)>tol.AND.off(i)/=zero) THEN
280 dv =zero
281
282
283
284
285
286
287
288
289
290 ELSEIF(abs(dv)>tol)THEN
291 dv =zero
292 ENDIF
293 IF(ismdisp==0) THEN
294 dv1 = one-dv
295 volo(i) = volo(i)*dv1
296 IF (iresp==1) vol0dp(i) = vol0dp(i)*dv1
297 eint(i) = eint(i)/dv1
298 ENDIF
299 ENDDO
300
301 dt1d2=half*dt1
302 IF (iscau>0 )dt1d2=dt1
303 dt1d=two*dt1d2
304 IF (jcvt/=0) THEN
305 IF (ismdisp>0.AND.iscau==0) THEN
306 d4(1:nel) = dxy(1:nel)+dyx(1:nel)
307 d5(1:nel) = dyz(1:nel)+dzy(1:nel)
308 d6(1:nel) = dxz(1:nel)+dzx(1:nel)
309 wxx(1:nel)=zero
310 wyy(1:nel)=zero
311 wzz(1:nel)=zero
312 ELSE
313 d4(1:nel) = dxy(1:nel)+dyx(1:nel)
314 . -dt1d*(dxx(1:nel)*dxy(1:nel)+dyx(1:nel)*dyy(1:nel)+dzx(1:nel)*dzy(1:nel))
315 d5(1:nel) = dyz(1:nel)+dzy(1:nel)
316 . -dt1d*(dyy(1:nel)*dyz(1:nel)+dzy(1:nel)*dzz(1:nel)+dxy(1:nel)*dxz(1:nel))
317 d6(1:nel) = dxz(1:nel)+dzx(1:nel)
318 . -dt1d*(dzz(1:nel)*dzx(1:nel)+dxz(1:nel)*dxx(1:nel)+dyz(1:nel)*dyx(1:nel))
319 dxx(1:nel) = dxx(1:nel)
320 . -dt1d2*(dxx(1:nel)*dxx(1:nel)+dyx(1:nel)*dyx(1:nel)+dzx(1:nel)*dzx(1:nel))
321 dyy(1:nel) = dyy(1:nel)
322 . -dt1d2*(dyy(1:nel)*dyy(1:nel)+dzy(1:nel)*dzy(1:nel)+dxy(1:nel)*dxy(1:nel))
323 dzz(1:nel) = dzz(1:nel)
324 . -dt1d2*(dzz(1:nel)*dzz(1:nel)+dxz(1:nel)*dxz(1:nel)+dyz(1:nel)*dyz(1:nel))
325 wxx(1:nel)=zero
326 wyy(1:nel)=zero
327 wzz(1:nel)=zero
328 ENDIF
329 ELSE
330 d4(1:nel)=dxy(1:nel)+dyx(1:nel)
331 d5(1:nel)=dyz(1:nel)+dzy(1:nel)
332 d6(1:nel)=dxz(1:nel)+dzx(1:nel)
333 wzz(1:nel)=dt1d2*(dyx(1:nel)-dxy(1:nel))
334 wyy(1:nel)=dt1d2*(dxz(1:nel)-dzx(1:nel))
335 wxx(1:nel)=dt1d2*(dzy(1:nel)-dyz(1:nel))
336 ENDIF
337
338 2000 FORMAT(/' ZERO OR NEGATIVE SUB-VOLUME : DELETE 3D-ELEMENT NB',
339 . i8/)
340 RETURN