44
45
46
49
50
51
52#include "implicit_f.inc"
53#include "comlock.inc"
54
55
56
57#include "mvsiz_p.inc"
58
59
60
61#include "scr07_c.inc"
62#include "scr14_c.inc"
63#include "scr16_c.inc"
64#include "com06_c.inc"
65#include "com08_c.inc"
66#include "parit_c.inc"
67#include "scr18_c.inc"
68
69
70
71 INTEGER IBC, IMAST, IGIMP,LFT, LLT, NFT
72 INTEGER MSR(*), NSV(*), IRTL(*), ICODT(*), ISKY(*)
74 . e(*), stf(*), stfn(*), fsav(*),fskyi(lskyi,nfskyi),fcont(3,*)
75 TYPE(H3D_DATABASE) :: H3D_DATA
76 INTEGER, DIMENSION(MVSIZ), INTENT(IN) :: IX1,IX2,IX3,IX4
77 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: n1,n2,n3
78 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: ans,thk
79 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: h1,h2,h3,h4
80 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: xface,stif
81 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: fni,fxi,fyi,fzi
82 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: fx1,fx2,fx3,fx4
83 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: fy1,fy2,fy3,fy4
84 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: fz1,fz2,fz3,fz4
85
86
87
88 INTEGER I, IL, L, J3, J2, J1, IG,
89 . I3, I2, I1
90 INTEGER NISKYL
92 . dtm
93
94
95
97
98 DO 100 i=lft,llt
99 ans(i)=
min(zero,(ans(i)*xface(i)-thk(i)))
100
101
102
103 xface(i)=cvmgn(xface(i),zero,ans(i))
104 ans(i)=xface(i)*ans(i)
105 100 CONTINUE
106
107 igimp=0
108 DO 110 i=lft,llt
109 igimp=igimp+abs(xface(i))
110 110 CONTINUE
111 IF(igimp==0)RETURN
112
113 DO 140 i=lft,llt
114 il=i+nft
115 l=irtl(il)
116 stif(i)=stf(l)*stfn(il) /
max(em20,(stf(l)+stfn(il)))
117 140 CONTINUE
118
119 DO 150 i=lft,llt
120 fni(i)=ans(i)*stif(i)
121 fxi(i)=n1(i)*fni(i)
122 fyi(i)=n2(i)*fni(i)
123 fzi(i)=n3(i)*fni(i)
124 150 CONTINUE
125
126
127
128 dtm=imast*dt12
129 DO 155 i=lft,llt
130 fsav(1)=fsav(1)+fxi(i)*dtm
131 fsav(2)=fsav(2)+fyi(i)*dtm
132 fsav(3)=fsav(3)+fzi(i)*dtm
133 155 CONTINUE
134
135 DO 160 i=lft,llt
136 fx1(i)=fxi(i)*h1(i)
137 fy1(i)=fyi(i
138 fz1(i)=fzi(i)*h1(i)
139
140 fx2(i)=fxi(i)*h2(i)
141 fy2(i)=fyi(i)*h2(i)
142 fz2(i)=fzi(i)*h2(i)
143
144 fx3(i)=fxi(i)*h3(i)
145 fy3(i)=fyi(i)*h3(i)
146 fz3(i)=fzi(i)*h3(i)
147
148 fx4(i)=fxi(i)*h4(i)
149 fy4(i)=fyi(i)*h4(i)
150 fz4(i)=fzi(i)*h4(i)
151
152 160 CONTINUE
153
154 IF(iparit==0)THEN
155 DO 180 i=lft,llt
156 j3=3*ix1(i)
157 j2=j3-1
158 j1=j2-1
159 e(j1)=e(j1)+fx1(i)
160 e(j2)=e(j2)+fy1(i)
161 e(j3)=e(j3)+fz1(i)
162
163 j3=3*ix2(i)
164 j2=j3-1
165 j1=j2-1
166 e(j1)=e(j1)+fx2(i)
167 e(j2)=e(j2)+fy2(i)
168 e(j3)=e(j3)+fz2(i)
169
170 j3=3*ix3(i)
171 j2=j3-1
172 j1=j2-1
173 e(j1)=e(j1)+fx3(i)
174 e(j2)=e(j2)+fy3(i)
175 e(j3)=e(j3)+fz3(i)
176
177 j3=3*ix4(i)
178 j2=j3-1
179 j1=j2-1
180 e(j1)=e(j1)+fx4(i)
181 e(j2)=e(j2)+fy4(i)
182 e(j3)=e(j3)+fz4(i)
183
184 il=i+nft
185 ig=nsv(il)
186 i3=3*ig
187 i2=i3-1
188 i1=i2-1
189 e(i1)=e(i1)-fxi(i)
190 e(i2)=e(i2)-fyi(i)
191 e(i3)=e(i3)-fzi(i)
192 180 CONTINUE
193
194 ELSE
195
196#include "lockon.inc"
197 niskyl = nisky
198 nisky = nisky + 5 * llt
199#include "lockoff.inc"
200 IF(kdtint==0)THEN
201 DO 190 i=lft,llt
202 niskyl = niskyl + 1
203 fskyi(niskyl,1)=fx1(i)
204 fskyi(niskyl,2)=fy1(i)
205 fskyi(niskyl,3)=fz1(i)
206 fskyi(niskyl,4)=zero
207 isky(niskyl) = ix1(i)
208 niskyl = niskyl + 1
209 fskyi(niskyl,1)=fx2(i)
210 fskyi(niskyl,2)=fy2(i)
211 fskyi(niskyl,3)=fz2(i)
212 fskyi(niskyl,4)=zero
213 isky(niskyl) = ix2(i)
214 niskyl = niskyl + 1
215 fskyi(niskyl,1)=fx3(i)
216 fskyi(niskyl,2)=fy3(i)
217 fskyi(niskyl,3)=fz3(i)
218 fskyi(niskyl,4)=zero
219 isky(niskyl) = ix3(i)
220 niskyl = niskyl + 1
221 fskyi(niskyl,1)=fx4(i)
222 fskyi(niskyl,2)=fy4(i)
223 fskyi(niskyl,3)=fz4(i)
224 fskyi(niskyl,4)=zero
225 isky(niskyl) = ix4(i)
226 niskyl = niskyl + 1
227 fskyi(niskyl,1)=-fxi(i)
228 fskyi(niskyl,2)=-fyi(i)
229 fskyi(niskyl,3)=-fzi(i)
230 fskyi(niskyl,4)=zero
231 il=i+nft
232 isky(niskyl) = nsv(il)
233 190 CONTINUE
234 ELSE
235 DO i=lft,llt
236 niskyl = niskyl + 1
237 fskyi(niskyl,1)=fx1(i)
238 fskyi(niskyl,2)=fy1(i)
239 fskyi(niskyl,3)=fz1(i)
240 fskyi(niskyl,4)=zero
241 fskyi(niskyl,5)=zero
242 isky(niskyl) = ix1(i)
243 niskyl = niskyl + 1
244 fskyi(niskyl,1)=fx2(i)
245 fskyi(niskyl,2)=fy2(i)
246 fskyi(niskyl,3)=fz2(i)
247 fskyi(niskyl,4)=zero
248 fskyi(niskyl,5)=zero
249 isky(niskyl) = ix2(i)
250 niskyl = niskyl + 1
251 fskyi(niskyl,1)=fx3(i)
252 fskyi(niskyl,2)=fy3(i)
253 fskyi(niskyl,3)=fz3(i)
254 fskyi(niskyl,4)=zero
255 fskyi(niskyl,5)=zero
256 isky(niskyl) = ix3(i)
257 niskyl = niskyl + 1
258 fskyi(niskyl,1)=fx4(i)
259 fskyi(niskyl,2)=fy4(i)
260 fskyi(niskyl,3)=fz4(i)
261 fskyi(niskyl,4)=zero
262 fskyi(niskyl,5)=zero
263 isky(niskyl) = ix4(i)
264 niskyl = niskyl + 1
265 fskyi(niskyl,1)=-fxi(i)
266 fskyi(niskyl,2)=-fyi(i)
267 fskyi(niskyl,3)=-fzi(i)
268 fskyi(niskyl,4)=zero
269 fskyi(niskyl,5)=zero
270 il=i+nft
271 isky(niskyl) = nsv(il)
272 ENDDO
273 ENDIF
274 ENDIF
275
276 IF(anim_v(4)+outp_v(4)+h3d_data%N_VECT_CONT>0.AND.
277 . ((tt>=tanim .AND. tt<=tanim_stop).OR.tt>=toutp.OR.(tt>=h3d_data%TH3D.AND.tt<=h3d_data%TH3D_STOP
278 . (manim>=4.AND.manim<=15).OR. h3d_data%MH3D /= 0))THEN
279#include "lockon.inc"
280 DO i=1,llt
281 fcont(1,ix1(i)) =fcont(1,ix1(i)) + fx1(i)
282 fcont(2,ix1(i)) =fcont(2,ix1(i)) + fy1
283 fcont(3,ix1(i)) =fcont(3,ix1(i)) + fz1(i
284 fcont(1,ix2(i)) =fcont(1,ix2(i)) + fx2(i)
285 fcont(2,ix2(i)) =fcont(2,ix2(i)) + fy2(i)
286 fcont(3,ix2(i)) =fcont(3,ix2(i)) + fz2(i)
287 fcont(1,ix3(i)) =fcont(1,ix3(i)) + fx3
288 fcont(2,ix3(i)) =fcont(2,ix3(i)) + fy3(i)
289 fcont(3,ix3(i)) =fcont(3,ix3(i)) + fz3(i)
290 fcont(1,ix4(i)) =fcont(1,ix4(i)) + fx4
291 fcont(2,ix4(i)) =fcont(2,ix4(i)) + fy4(i)
292 fcont(3,ix4(i)) =fcont(3,ix4(i)) + fz4(i)
293 fcont(1,nsv(i+nft))=fcont(1,nsv(i+nft))- fxi(i)
294 fcont(2,nsv(i+nft))=fcont(2,nsv(i+nft))- fyi
295 fcont(3,nsv(i+nft))=fcont(3,nsv(i+nft))- fzi(i)
296 ENDDO
297#include "lockoff.inc"
298 ENDIF
299
300 IF(ibc==0) RETURN
301 DO 200 i=lft,llt
302 IF(ibc==0.OR.xface(i)==zero)GOTO 200
303 il=i+nft
304 ig=nsv(il)
305 CALL ibcoff(ibc,icodt(ig))
306 200 CONTINUE
307
308 RETURN
subroutine ibcoff(ibc, icodt)