35
36
37
38#include "implicit_f.inc"
39
40
41
42#include "com08_c.inc"
43
44
45
46 INTEGER NOD(*), NBY(*), WEIGHT(*), ICOD(2,*),
47 . NSL, IFLAG
48
50 . af(3,*), am(3,*), x(3,*), rby(*),
51 . stifn(*),stifr(*),
52 . vrrby(3,*),arby(3,*),arrby(3,*),vrby(3,*)
53 DOUBLE PRECISION (6,6)
54
55
56
57 INTEGER M, I, , LCOD, ISK, K
58
60 . vi(3),xg,yg,zg,ii1,ii2,ii3,ii4,ii5,ii6,ii7,ii8,
61 . ii9,wa1,wa2,wa3,det,in,msrby,rx,ry,rz,rb(12),
62 . f1(nsl), f2(nsl), f3(nsl), f4(nsl),
63 . f5(nsl), f6(nsl)
64
65
66 m = nby(1)
67 IF( m < 0) RETURN
68
69 IF (iflag == 1) THEN
70
71
72 xg = rby(2)
73 yg = rby(3)
74 zg = rby(4)
75 DO i=1,nsl
76 n = nod(i)
77 IF (weight(n) == 1) THEN
78 f1(i) = af(1,n)
79 f2(i) = af(2,n)
80 f3(i) = af(3,n)
81 rx = x(1,n) - xg
82 ry = x(2,n) - yg
83 rz = x(3,n) - zg
84 f4(i) = am(1,n) + ry*af(3,n) - rz*af(2,n)
85 f5(i) = am(2,n) + rz*af(1,n) - rx*af(3,n)
86 f6(i) = am(3,n) + rx*af(2,n) - ry*af(1,n)
87 ELSE
88 f1(i) = zero
89 f2(i) = zero
90 f3(i) = zero
91 f4(i) = zero
92 f5(i) = zero
93 f6(i) = zero
94 END IF
95 ENDDO
96
97
98
99 DO k = 1, 6
100 rbf6(1,k) = zero
101 rbf6(2,k) = zero
102 rbf6(3,k) = zero
103 rbf6(4,k) = zero
104 rbf6(5,k) = zero
105 rbf6(6,k) = zero
106 END DO
113
114
115
116 ELSEIF (iflag==2) THEN
117
118
119
120 arby(1,m) = rbf6(1,1)+rbf6(1,2)+rbf6(1,3)+
121 + rbf6(1,4)+rbf6(1,5)+rbf6(1,6)
122 arby(2,m) = rbf6(2,1)+rbf6(2,2)+rbf6(2,3)+
123 + rbf6(2,4)+rbf6(2,5)+rbf6(2,6)
124 arby(3,m) = rbf6(3,1)+rbf6(3,2)+rbf6(3,3)+
125 + rbf6(3,4)+rbf6(3,5)+rbf6(3,6)
126 arrby(1,m) = rbf6(4,1)+rbf6(4,2)+rbf6(4,3)+
127 + rbf6(4,4)+rbf6(4,5)+rbf6(4,6)
128 arrby(2,m) = rbf6(5,1)+rbf6(5,2)+rbf6(5,3)+
129 + rbf6(5,4)+rbf6(5,5)+rbf6(5,6)
130 arrby(3,m) = rbf6(6,1)+rbf6(6,2)+rbf6(6,3)+
131 + rbf6(6,4)+rbf6(6,5)+rbf6(6,6)
132
133 lcod=icod(1,m)
134 rb(1)= rby(5)
135 rb(2)= rby(6)
136 rb(3)= rby(7)
137 rb(4)= rby(8)
138 rb(5)= rby(9)
139 rb(6)= rby(10)
140 rb(7)= rby(11)
141 rb(8)= rby(12)
142 rb(9)= rby(13)
143 rb(10)= rby(14)
144 rb(11)= rby(15)
145 rb(12)= rby(16)
146 in = rby(17)
147 IF(lcod > 0)THEN
148
149 vi(1)=rb(1)*vrrby(1,m) + rb(2)*vrrby(2,m)
150 . + rb(3)*vrrby(3,m)
151 vi(2)=rb(4)*vrrby(1,m) + rb(5)*vrrby(2,m)
152 . + rb(6)*vrrby(3,m)
153 vi(3)=rb(7)*vrrby(1,m) + rb(8)*vrrby(2,m)
154 . + rb(9)*vrrby(3,m)
156
157
158 ii1=rb(10)*rb(1)
159 ii2=rb(10)*rb(2)
160 ii3=rb(10)*rb(3)
161 ii4=rb(11)*rb(4)
162 ii5=rb(11)*rb(5)
163 ii6=rb(11)*rb(6)
164 ii7=rb(12)*rb(7)
165 ii8=rb(12)*rb(8)
166 ii9=rb(12)*rb(9)
167
168 rby(18)=rb(1)*ii1 + rb(4)*ii4 + rb(7)*ii7
169 rby(19)=rb(1)*ii2 + rb(4)*ii5 + rb(7)*ii8
170 rby(20)=rb(1)*ii3 + rb(4)*ii6 + rb(7)*ii9
171 rby(21)=rb(2)*ii1 + rb(5)*ii4 + rb(8)*ii7
172 rby(22)=rb(2)*ii2 + rb(5)*ii5 + rb(8)*ii8
173 rby(23)=rb(2)*ii3 + rb(5)*ii6 + rb(8)*ii9
174 rby(24)=rb(3)*ii1 + rb(6)*ii4 + rb(9)*ii7
175 rby(25)=rb(3)*ii2 + rb(6)*ii5 + rb(9)*ii8
176 rby(26)=rb(3)*ii3 + rb(6)*ii6 + rb(9)*ii9
177
178
179 wa1=rby(18)*vrrby(1,m)+rby(19)*vrrby(2,m)+rby(20)*vrrby(3,m)
180 wa2=rby(21)*vrrby(1,m)+rby(22)*vrrby(2,m)+rby(23)*vrrby(3,m)
181 wa3=rby(24)*vrrby(1,m)+rby(25)*vrrby(2,m)+rby(26)*vrrby(3,m)
182
183 arrby(1,m)=arrby(1,m) + (wa2*vrrby(3,m)-wa3*vrrby(2,m))
184 arrby(2,m)=arrby(2,m) + (wa3*vrrby(1,m)-wa1*vrrby(3,m))
185 arrby(3,m)=arrby(3,m) + (wa1*vrrby(2,m)-wa2*vrrby(1,m))
186
187
188
189
190
191
192
193
194
195
196
197
198 IF(lcod == 1)THEN
199 det=one/(rby(18)*rby(22) - rby(19)*rby(21))
200 wa1=arrby(1,m)
201 wa2=arrby(2,m)
202 arrby(1,m)=( rby(22)*wa1 - rby(21)*wa2)*det
203 arrby(2,m)=(-rby(19)*wa1 + rby(18)*wa2)*det
204 arrby(3,m)= zero
205 vrrby(3,m) = zero
206 ELSEIF(lcod == 2)THEN
207 det=one/(rby(18)*rby(26) - rby(20)*rby(24))
208 wa1=arrby(1,m)
209 wa2=arrby(3,m)
210 arrby(1,m)=( rby(26)*wa1 - rby(24)*wa2)*det
211 arrby(2,m)= zero
212 arrby(3,m)=(-rby(20)*wa1 + rby(18)*wa2)*det
213 vrrby(2,m) = zero
214 ELSEIF(lcod == 3)THEN
215 arrby(1,m)=arrby(1,m)/rby(18)
216 arrby(2,m)=zero
217 arrby(3,m)=zero
218 vrrby(2,m) = zero
219 vrrby(3,m) = zero
220 ELSEIF(lcod == 4)THEN
221 det=one/(rby(22)*rby(26) - rby(23)*rby(25))
222 wa1=arrby(2,m)
223 wa2=arrby(3,m)
224 arrby(1,m)=zero
225 arrby(2,m)=( rby(26)*wa1 - rby(25)*wa2)*det
226 arrby(3,m)=(-rby(23)*wa1 + rby(22)*wa2)*det
227 vrrby(1,m) = zero
228 ELSEIF(lcod == 5)THEN
229 arrby(1,m) =zero
230 arrby(2,m) =arrby(2,m)/rby(22)
231 arrby(3,m) = zero
232 vrrby(1,m) = zero
233 vrrby(3,m) = zero
234 ELSEIF(lcod == 6)THEN
235 arrby(1,m)=zero
236 arrby(2,m)=zero
237 arrby(3,m)=arrby(3,m)/rby(26)
238 vrrby(1,m) = zero
239 vrrby(2,m) = zero
240 ELSEIF(lcod == 7)THEN
241 arrby(1,m) = zero
242 arrby(2,m) = zero
243 arrby(3,m) = zero
244 vrrby(1,m) = zero
245 vrrby(2,m) = zero
246 vrrby(3,m) = zero
247 ENDIF
248
249 ELSE
250
251
252
253
254
255 wa1=arrby(1,m)
256 wa2=arrby(2,m)
257 wa3=arrby(3,m)
258
259 arrby(1,m) = rb(1)*wa1 + rb(2)*wa2 + rb(3)*wa3
260 arrby(2,m) = rb(4)*wa1 + rb(5)*wa2 + rb(6)*wa3
261 arrby(3,m) = rb(7)*wa1 + rb(8)*wa2 + rb(9)*wa3
262
263 vi(1) = rb(1)*vrrby(1,m)+rb(2)*vrrby(2,m)+rb(3)*vrrby(3,m)
264 vi(2) = rb(4)*vrrby(1,m)+rb(5)*vrrby(2,m)+rb(6)*vrrby(3,m)
265 vi(3) = rb(7)*vrrby(1,m)+rb(8)*vrrby(2,m)+rb(9)*vrrby(3,m)
266
268 arrby(1,m) = arrby(1,m)
269 . + ((rb(11)-rb(12))*vi(2)*vi(3))
270 arrby(2,m) = arrby(2,m)
271 . + ((rb(12)-rb(10))*vi(3)*vi(1))
272 arrby(3,m) = arrby(3,m)
273 . + ((rb(10)-rb(11))*vi(1)*vi(2))
274
275
276
277 wa1 = arrby(1,m)*in/rb(10)
278 wa2 = arrby(2,m)*in/rb(11)
279 wa3 = arrby(3,m)*in/rb(12)
280
281 arrby(1,m) = rb(1)*wa1 + rb(4)*wa2 + rb(7)*wa3
282 arrby(2,m) = rb(2)*wa1 + rb(5)*wa2 + rb(8)*wa3
283 arrby(3,m) = rb(3)*wa1 + rb(6)*wa2 + rb(9)*wa3
284
285
286 ii1=rb(10)*rb(1)
287 ii2=rb(10)*rb(2)
288 ii3=rb(10)*rb(3)
289 ii4=rb(11)*rb(4)
290 ii5=rb(11)*rb(5)
291 ii6=rb(11)*rb(6)
292 ii7=rb(12)*rb(7)
293 ii8=rb(12)*rb(8)
294 ii9=rb(12)*rb(9)
295
296 rby(18)=rb(1)*ii1 + rb(4)*ii4 + rb(7)*ii7
297 rby(19)=rb(1)*ii2 + rb(4)*ii5 + rb(7)*ii8
298 rby(20)=rb(1)*ii3 + rb(4)*ii6 + rb(7)*ii9
299 rby(21)=rb(2)*ii1 + rb(5)*ii4 + rb(8)*ii7
300 rby(22)=rb(2)*ii2 + rb(5)*ii5 + rb(8)*ii8
301 rby(23)=rb(2)*ii3 + rb(5)*ii6 + rb(8)*ii9
302 rby(24)=rb(3)*ii1 + rb(6)*ii4 + rb(9)*ii7
303 rby(25)=rb(3)*ii2 + rb(6)*ii5 + rb(9)*ii8
304 rby(26)=rb(3)*ii3 + rb(6)*ii6 + rb(9)*ii9
305 ENDIF
306
307
308 msrby = rby(1)
309 in = rby(17)
310 IF(msrby > 0) THEN
311 arby(1,m) = arby(1,m) / msrby
312 arby(2,m) = arby(2,m) / msrby
313 arby(3,m) = arby(3,m) / msrby
314 ELSE
315 arby(1,m) = zero
316 arby(2,m) = zero
317 arby(3,m) = zero
318 ENDIF
319
320 IF(in > 0) THEN
321 arrby(1,m) = arrby(1,m) / in
322 arrby(2,m) = arrby(2,m) / in
323 arrby(3,m) = arrby(3,m) / in
324 ELSE
325 arrby(1,m) = zero
326 arrby(2,m) = zero
327 arrby(3,m) = zero
328 ENDIF
329
330 lcod = icod(2,m)
331 IF(lcod == 1) THEN
332 arby(3,m) = zero
333 vrby(3,m) = zero
334 ELSEIF(lcod == 2) THEN
335 arby(2,m) = zero
336 vrby(2,m) = zero
337 ELSEIF(lcod == 3) THEN
338 arby(2,m) = zero
339 arby(3,m) = zero
340 vrby(2,m) = zero
341 vrby(3,m) = zero
342 ELSEIF(lcod == 4) THEN
343 arby(1,m) = zero
344 vrby(1,m) = zero
345 ELSEIF(lcod == 5) THEN
346 arby(1,m) = zero
347 arby(3,m) = zero
348 vrby(1,m) = zero
349 vrby(3,m) = zero
350 ELSEIF(lcod == 6) THEN
351 arby(1,m) = zero
352 arby(2,m) = zero
353 vrby(1,m) = zero
354 vrby(2,m) = zero
355 ELSEIF(lcod == 7) THEN
356 arby(1,m) = zero
357 arby(2,m) = zero
358 arby(3,m) = zero
359 vrby(1,m) = zero
360 vrby(2,m) = zero
361 vrby(3,m) = zero
362 ENDIF
363
364 DO i=1,nsl
365 n = nod(i)
366
367 af(1,n)= zero
368 af(2,n)= zero
369 af(3,n)= zero
370
371 am(1,n)= zero
372 am(2,n)= zero
373 am(3,n)= zero
374
375 stifr(n)= em20
376 stifn(n)= em20
377 ENDDO
378 ENDIF
379
380 RETURN
subroutine sum_6_float(jft, jlt, f, f6, n)
subroutine rotbmr(vr, rby, dt)