32
33
34
35#include "implicit_f.inc"
36
37
38
39 INTEGER ISKWN(LISKN,*), NSKWP(*),ISKWP(*)
40 INTEGER, DIMENSION(NUMSKW), INTENT(IN) :: ISKWP_L,ISKWP_L_SEND
41 INTEGER, DIMENSION(NSPMD), INTENT(IN) :: RECVCOUNT
42 INTEGER, INTENT(IN) :: NUMSKW_L,NUMSKW_L_SEND
43
45 . skew(lskew,*), x(3,*)
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75#include "com01_c.inc"
76#include "com04_c.inc"
77#include "task_c.inc"
78#include "param_c.inc"
79
80
81
82 INTEGER N, N1, N2, N3, K, I, J, LOC_PROC,IMOV,IDIR,NN
83
85 . p(12), pp1, pp3, pp2
86
87
88
89
90
91
92
93
94
95
96
97 loc_proc = ispmd+1
98 DO nn=1,numskw_l
99 n = iskwp_l(nn)
100
101
102
103
104 n1=iskwn(1,n+1)
105 n2=iskwn(2,n+1)
106 n3=iskwn(3,n+1)
107 imov=iskwn(5,n+1)
108 idir=iskwn(6,n+1)
109
110
111
112 IF (n1+n2+n3/=0) THEN
113
114 IF(imov == 1)THEN
115 IF(n2d==0)THEN
116
117
118
119 IF (idir == 1)THEN
120 p(1)=x(1,n2)-x(1,n1)
121 p(2)=x(2,n2)-x(2,n1)
122 p(3)=x(3,n2)-x(3,n1)
123 ELSEIF (idir == 2)THEN
124 p(4)=x(1,n2)-x(1,n1)
125 p(5)=x(2,n2)-x(2,n1)
126 p(6)=x(3,n2)-x(3,n1)
127 ELSEIF (idir == 3)THEN
128 p(7)=x(1,n2)-x(1,n1)
129 p(8)=x(2,n2)-x(2,n1)
130 p(9)=x(3,n2)-x(3,n1)
131 ENDIF
132
133
134
135 IF (idir == 1)THEN
136 p(4)=x(1,n3)-x(1,n1)
137 p(5)=x(2,n3)-x(2,n1)
138 p(6)=x(3,n3)-x(3,n1)
139 ELSEIF (idir == 2)THEN
140 p(7)=x(1,n3)-x(1,n1)
141 p(8)=x(2,n3)-x(2,n1)
142 p(9)=x(3,n3)-x(3,n1)
143 ELSEIF (idir == 3)THEN
144 p(1)=x(1,n3)-x(1,n1)
145 p(2)=x(2,n3)-x(2,n1)
146 p(3)=x(3,n3)-x(3,n1)
147 ENDIF
148 ELSE
149 p(1)=one
150 p(2)=zero
151 p(3)=zero
152 p(4)=x(1,n2)-x(1,n1)
153 p(5)=x(2,n2)-x(2,n1)
154 p(6)=x(3,n2)-x(3,n1)
155 ENDIF
156
157
158
159
160
161
162
163
164 IF (idir == 1) THEN
165 pp1=sqrt(p(1)*p(1)+p(2)*p(2)+p(3)*p(3))
166 IF(pp1==zero)THEN
167 p(1)=one
168 p(2)=zero
169 p(3)=zero
170 pp1 =one
171 ENDIF
172 ELSE IF (idir == 2)THEN
173 pp2=sqrt(p(4)*p(4)+p(5)*p(5)+p(6)*p(6))
174 IF(pp2==zero)THEN
175 p(4)=zero
176 p(5)=one
177 p(6)=zero
178 pp2 =one
179 ENDIF
180 ELSE IF (idir == 3)THEN
181 pp3=sqrt(p(7)*p(7)+p(8)*p(8)+p(9)*p(9))
182 IF(pp3==zero)THEN
183 p(7)=zero
184 p(8)=zero
185 p(9)=one
186 pp3 =one
187 ENDIF
188 ENDIF
189
190
191
192 IF (idir == 1)THEN
193 p(7)=p(2)*p(6)-p(3)*p(5)
194 p(8)=p(3)*p(4)-p(1)*p(6)
195 p(9)=p(1)*p(5)-p(2)*p(4)
196 pp3=sqrt(p(7)*p(7)+p(8)*p(8)+p(9)*p(9))
197 ELSEIF (idir == 2)THEN
198 p(1)=p(5)*p(9)-p(6)*p(8)
199 p(2)=p(6)*p(7)-p(4)*p(9)
200 p(3)=p(4)*p(8)-p(5)*p(7)
201 pp1=sqrt(p(1)*p(1)+p(2)*p(2)+p(3)*p(3))
202 ELSEIF (idir == 3)THEN
203 p(4)=p(8)*p(3)-p(9)*p(2)
204 p(5)=p(9)*p(1)-p(7)*p(3)
205 p(6)=p(7)*p(2)-p(8)*p(1)
206 pp2=sqrt(p(4)*p(4)+p(5)*p(5)+p(6)*p(6))
207 ENDIF
208
209
210
211
212
213
214
215
216 IF (idir == 1) THEN
217 IF(pp3==zero)THEN
218 IF(p(1)==zero)THEN
219 p(4)=pp1
220 p(5)=p(2)
221 ELSE
222 p(4)=p(1)
223 p(5)=abs(p(2))+pp1
224 ENDIF
225 p(6)=p(3)
226 p(7)=p(2)*p(6)-p(3)*p(5)
227 p(8)=p(3)*p(4)-p(1)*p(6)
228 p(9)=p(1)*p(5)-p(2)*p(4)
229 pp3=sqrt(p(7)*p(7)+p(8)*p(8)+p(9)*p(9))
230 ENDIF
231 ELSEIF (idir == 2) THEN
232 IF(pp1==zero)THEN
233 IF(p(4)==zero)THEN
234 p(7)=pp2
235
236 ELSE
237 p(7)=p(4)
238 p(8)=abs(p(5))+pp2
239 ENDIF
240 p(9)=p(6)
241 p(1)=p(5)*p(9)-p(6)*p(8)
242 p(2)=p(6)*p(7)-p(4)*p(9)
243 p(3)=p(4)*p(8)-p(5)*p(7)
244 pp1=sqrt(p(1)*p(1)+p(2)*p(2)+p(3)*p(3))
245 ENDIF
246 ELSEIF (idir == 3) THEN
247 IF(pp2==zero)THEN
248 IF(p(7)==zero)THEN
249 p(1)=pp3
250 p(2)=p(8)
251 ELSE
252 p(1)=p(7)
253 p(2)=abs(p(8))+pp3
254 ENDIF
255 p(3)=p(9)
256 p(4)=p(8)*p(3)-p(9)*p(2)
257 p(5)=p(9)*p(1)-p(7)*p(3)
258 p(6)=p(7)*p(2)-p(8)*p(1)
259 pp2=sqrt(p(4)*p(4)+p(5)*p(5)+p(6)*p(6))
260 ENDIF
261 ENDIF
262
263
264
265 IF (idir == 1) THEN
266 p(4)=p(8)*p(3)-p(9)*p(2)
267 p(5)=p(9)*p(1)-p(7)*p(3)
268 p(6)=p(7)*p(2)-p(8)*p(1)
269 pp2=sqrt(p(4)*p(4)+p(5)*p(5)+p(6)*p(6))
270 ELSEIF (idir == 2) THEN
271 p(7)=p(2)*p(6)-p(3)*p(5)
272 p(8)=p(3)*p(4)-p(1)*p(6)
273 p(9)=p(1)*p(5)-p(2)*p(4)
274 pp3=sqrt(p(7)*p(7)+p(8)*p(8)+p(9)*p(9))
275 ELSEIF (idir == 3) THEN
276 p(1)=p(5)*p(9)-p(6)*p(8)
277 p(2)=p(6)*p(7)-p(4)*p(9)
278 p(3)=p(4)*p(8)-p(5)*p(7)
279 pp1=sqrt(p(1)*p(1)+p(2)*p(2)+p(3)*p(3))
280 ENDIF
281
282 ELSEIF(imov == 2)THEN
283
284
285
286 p(1)=x(1,n3)-x(1,n1)
287 p(2)=x(2,n3)-x(2,n1)
288 p(3)=x(3,n3)-x(3,n1)
289
290
291
292 p(7)=x(1,n2)-x(1,n1)
293 p(8)=x(2,n2)-x(2,n1)
294 p(9)=x(3,n2)-x(3,n1)
295
296
297
298
299 pp3=sqrt(p(7)*p(7)+p(8)*p(8)+p(9)*p(9))
300 IF(pp3==zero)THEN
301 p(7)=zero
302 p(8)=zero
303 p(9)=one
304 pp3 =one
305 ENDIF
306
307
308
309 p(4)=p(8)*p(3)-p(9)*p(2)
310 p(5)=p(9)*p(1)-p(7)*p(3)
311 p(6)=p(7)*p(2)-p(8)*p(1)
312 pp2=sqrt(p(4)*p(4)+p(5)*p(5)+p(6)*p(6))
313
314
315
316
317 IF(pp2==zero)THEN
318 IF(p(7)==zero)THEN
319 p(1)=pp3
320 p(2)=p(8)
321 ELSE
322 p(1)=p(7)
323 p(2)=abs(p(8))+pp3
324 ENDIF
325 p(3)=p(9)
326 p(4)=p(8)*p(3)-p(9)*p(2)
327 p(5)=p(9)*p(1)-p(7)*p(3)
328 p(6)=p(7)*p(2)-p(8)*p(1)
329 pp2=sqrt(p(4)*p(4)+p(5)*p(5)+p(6)*p(6))
330 ENDIF
331
332
333
334 p(1)=p(5)*p(9)-p(6)*p(8)
335 p(2)=p(6)*p(7)-p(4)*p(9)
336 p(3)=p(4)*p(8)-p(5)*p(7)
337 pp1=sqrt(p(1)*p(1)+p(2)*p(2)+p(3)*p(3))
338
339 END IF
340
341
342
343 p(1)=p(1)/pp1
344 p(2)=p(2)/pp1
345 p(3)=p(3)/pp1
346 p(4)=p(4)/pp2
347 p(5)=p(5)/pp2
348 p(6)=p(6)/pp2
349 p(7)=p(7)/pp3
350 p(8)=p(8)/pp3
351 p(9)=p(9)/pp3
352
353
354
355 p(10) = x(1,n1)
356 p(11) = x(2,n1)
357 p(12) = x(3,n1)
358
359 DO k=1,12
360 skew(k,n+1)=p(k)
361 END DO
362
363
364 ENDIF
365 END DO
366
367 IF(nspmd > 1) THEN
368 CALL spmd_sd_skw(skew,iskwp_l_send,numskw_l_send,recvcount)
369 END IF
370
371 RETURN
subroutine spmd_sd_skw(skew, iskwp_l_send, numskw_l_send, recvcount)