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