37
38
39
41
42
43
44#include "implicit_f.inc"
45
46
47
48#include "mvsiz_p.inc"
49
50
51
52 INTEGER IRECT(4,*), NSV(*), CAND_E(*), CAND_N(*),
53 . JLT,IDT, NOINT ,NDDIM, NSN, ITY, NIN, IGSTI,
54 . NVOISIN(8,*), KINI(*)
55 INTEGER IXX(MVSIZ,13), NSVG(MVSIZ), ITRIV(4,MVSIZ)
56
58 . x(3,*), stf(*), stfn(*),
59 . ms(*), v(3,*),gaps(mvsiz),gap_s(*)
60
62 . xi(mvsiz), yi(mvsiz), zi(mvsiz), stif(mvsiz),
63 . xx0(mvsiz,17),yy0(mvsiz,17),zz0(mvsiz,17),
64 . vx(mvsiz,17),vy(mvsiz,17),vz(mvsiz,17),
65 . vxi(mvsiz), vyi(mvsiz), vzi(mvsiz), msi(mvsiz),
66 . kmin, kmax
67
68
69
70 INTEGER I ,J ,IL, L, NN, IG,JFT, IX, NI
71
72
73
74 DO i=1,jlt
75 ni = cand_n(i)
76 l = iabs(cand_e(i))
77 IF(ni<=nsn)THEN
78 ig = nsv(ni)
79 nsvg(i) = ig
80
81 xi(i) = x(1,ig)
82 yi(i) = x(2,ig)
83 zi(i) = x(3,ig)
84 vxi(i) = v(1,ig)
85 vyi(i) = v(2,ig)
86 vzi(i) = v(3,ig)
87 msi(i)= ms(ig)
88 gaps(i) = gap_s(ni)
89 ELSE
90 nn = ni - nsn
91 nsvg(i) = -nn
92
93 xi(i) =
xfi(nin)%P(1,nn)
94 yi(i) =
xfi(nin)%P(2,nn)
95 zi(i) =
xfi(nin)%P(3,nn)
96 vxi(i)=
vfi(nin)%P(1,nn)
97 vyi(i)=
vfi(nin)%P(2,nn)
98 vzi(i)=
vfi(nin)%P(3,nn)
99 msi(i)=
msfi(nin)%P(nn)
100 gaps(i) =
gapfi(nin)%P(nn)
101 END IF
102
103 ix=irect(1,l)
104 ixx(i,1)=ix
105 xx0(i,1)=x(1,ix)
106 yy0(i,1)=x(2,ix)
107 zz0(i,1)=x(3,ix)
108 vx(i,1)=v(1,ix)
109 vy(i,1)=v(2,ix)
110 vz(i,1)=v(3,ix)
111
112 ix=irect(2,l)
113 ixx(i,2)=ix
114 xx0(i,2)=x(1,ix)
115 yy0(i,2)=x(2,ix)
116 zz0(i,2)=x(3,ix)
117 vx(i,2)=v(1,ix)
118 vy(i,2)=v(2,ix)
119 vz(i,2)=v(3,ix)
120
121 ix=irect(3,l)
122 ixx(i,3)=ix
123 xx0(i,3)=x(1,ix)
124 yy0(i,3)=x(2,ix)
125 zz0(i,3)=x(3,ix)
126 vx(i,3)=v(1,ix)
127 vy(i,3)=v(2,ix)
128 vz(i,3)=v(3,ix)
129
130 ix=irect(4,l)
131 ixx(i,4)=ix
132 xx0(i,4)=x(1,ix)
133 yy0(i,4)=x(2,ix)
134 zz0(i,4)=x(3,ix)
135 vx(i,4)=v(1,ix)
136 vy(i,4)=v(2,ix)
137 vz(i,4)=v(3,ix)
138
139 IF(ixx(i,3) /= ixx(i,4))THEN
140 xx0(i,5) = fourth*(xx0(i,1)+xx0(i,2)+xx0(i,3)+xx0(i,4))
141 yy0(i,5) = fourth*(yy0(i,1)+yy0(i,2)+yy0(i,3)+yy0(i,4))
142 zz0(i,5) = fourth*(zz0(i,1)+zz0(i,2)+zz0(i,3)+zz0(i,4))
143 vx(i,5) = fourth*(vx(i,1)+vx(i,2)+vx(i,3)+vx(i,4))
144 vy(i,5) = fourth*(vy(i,1)+vy(i,2)+vy(i,3)+vy(i,4))
145 vz(i,5) = fourth*(vz(i,1)+vz(i,2)+vz(i,3)+vz(i,4))
146 ELSE
147 xx0(i,5) = xx0(i,3)
148 yy0(i,5) = yy0(i,3)
149 zz0(i,5) = zz0(i,3)
150 vx(i,5) = vx(i,3)
151 vy(i,5) = vy(i,3)
152 vz(i,5) = vz(i,3)
153 ENDIF
154
155 ix=iabs(nvoisin(1,l))
156 ixx(i,6)=ix
157 IF(ix /= 0)THEN
158 xx0(i,6)=x(1,ix)
159 yy0(i,6)=x(2,ix)
160 zz0(i,6)=x(3,ix)
161 vx(i,6) =v(1,ix)
162 vy(i,6) =v(2,ix)
163 vz(i,6) =v(3,ix)
164 ELSE
165 xx0(i,6)=xx0(i,1)
166 yy0(i,6)=yy0(i,1)
167 zz0(i,6)=zz0(i,1)
168 vx(i,6) =vx(i,1)
169 vy(i,6) =vy(i,1)
170 vz(i,6) =vz(i,1)
171 ENDIF
172
173 IF(nvoisin(2,l)/=0)ix=iabs(nvoisin(2,l))
174 ixx(i,7)=ix
175 IF(ix /= 0)THEN
176 xx0(i,7)=x(1,ix)
177 yy0(i,7)=x(2,ix)
178 zz0(i,7)=x(3,ix)
179 vx(i,7)=v(1,ix)
180 vy(i,7)=v(2,ix)
181 vz(i,7)=v(3,ix)
182 ELSE
183 xx0(i,7)=xx0(i,2)
184 yy0(i,7)=yy0(i,2)
185 zz0(i,7)=zz0(i,2)
186 vx(i,7) =vx(i,2)
187 vy(i,7) =vy(i,2)
188 vz(i,7) =vz(i,2)
189 ENDIF
190
191 IF(nvoisin(1,l)<0)THEN
192 IF(nvoisin(2,l)<0)THEN
193 itriv(1,i)=4
194 ELSE
195 itriv(1,i)=2
196 ENDIF
197 ELSEIF(nvoisin(2,l)<0)THEN
198 itriv(1,i)=3
199 ELSE
200 itriv(1,i)=1
201 ENDIF
202
203 ix=iabs(nvoisin(3,l))
204 ixx(i,8)=ix
205 IF(ix /= 0)THEN
206 xx0(i,8)=x(1,ix)
207 yy0(i,8)=x(2,ix)
208 zz0(i,8)=x(3,ix)
209 vx(i,8)=v(1,ix)
210 vy(i,8)=v(2,ix)
211 vz(i,8)=v(3,ix)
212 ELSE
213 xx0(i,8)=xx0(i,2)
214 yy0(i,8)=yy0(i,2)
215 zz0(i,8)=zz0(i,2)
216 vx(i,8) =vx(i,2)
217 vy(i,8) =vy(i,2)
218 vz(i,8) =vz(i,2)
219 ENDIF
220
221 IF(nvoisin(4,l)/=0)ix=iabs(nvoisin(4,l))
222 ixx(i,9)=ix
223 IF(ix /= 0)THEN
224 xx0(i,9)=x(1,ix)
225 yy0(i,9)=x(2,ix)
226 zz0(i,9)=x(3,ix)
227 vx(i,9)=v(1,ix)
228 vy(i,9)=v(2,ix)
229 vz(i,9)=v(3,ix)
230 ELSE
231 xx0(i,9)=xx0(i,3)
232 yy0(i,9)=yy0(i,3)
233 zz0(i,9)=zz0(i,3)
234 vx(i,9) =vx(i,3)
235 vy(i,9) =vy(i,3)
236 vz(i,9) =vz(i,3)
237 ENDIF
238
239 IF(nvoisin(3,l)<0)THEN
240 IF(nvoisin(4,l)<0)THEN
241 itriv(2,i)=4
242 ELSE
243 itriv(2,i)=2
244 ENDIF
245 ELSEIF(nvoisin(4,l)<0)THEN
246 itriv(2,i)=3
247 ELSE
248 itriv(2,i)=1
249 ENDIF
250
251
252 ix=iabs(nvoisin(5,l))
253 ixx(i,10)=ix
254 IF(ix /= 0)THEN
255 xx0(i,10)=x(1,ix)
256 yy0(i,10)=x(2,ix)
257 zz0(i,10)=x(3,ix)
258 vx(i,10)=v(1,ix)
259 vy(i,10)=v(2,ix)
260 vz(i,10)=v(3,ix)
261 ELSE
262 xx0(i,10)=xx0(i,3)
263 yy0(i,10)=yy0(i,3)
264 zz0(i,10)=zz0(i,3)
265 vx(i,10) =vx(i,3)
266 vy(i,10) =vy(i,3)
267 vz(i,10) =vz(i,3)
268 ENDIF
269
270 IF(nvoisin(6,l)/=0)ix=iabs(nvoisin(6,l))
271 ixx(i,11)=ix
272 IF(ix /= 0)THEN
273 xx0(i,11)=x(1,ix)
274 yy0(i,11)=x(2,ix)
275 zz0(i,11)=x(3,ix)
276 vx(i,11)=v(1,ix)
277 vy(i,11)=v(2,ix)
278 vz(i,11)=v(3,ix)
279 ELSE
280 xx0(i,11)=xx0(i,4)
281 yy0(i,11)=yy0(i,4)
282 zz0(i,11)=zz0(i,4)
283 vx(i,11) =vx(i,4)
284 vy(i,11) =vy(i,4)
285 vz(i,11) =vz(i,4)
286 ENDIF
287
288
289 IF(nvoisin(5,l)<0)THEN
290 IF(nvoisin(6,l)<0)THEN
291 itriv(3,i)=4
292 ELSE
293 itriv(3,i)=2
294 ENDIF
295 ELSEIF(nvoisin(6,l)<0)THEN
296 itriv(3,i)=3
297 ELSE
298 itriv(3,i)=1
299 ENDIF
300
301 ix=iabs(nvoisin(7,l))
302 ixx(i,12)=ix
303 IF(ix /= 0)THEN
304 xx0(i,12)=x(1,ix)
305 yy0(i,12)=x(2,ix)
306 zz0(i,12)=x(3,ix)
307 vx(i,12)=v(1,ix)
308 vy(i,12)=v(2,ix)
309 vz(i,12)=v(3,ix)
310 ELSE
311 xx0(i,12)=xx0(i,4)
312 yy0(i,12)=yy0(i,4)
313 zz0(i,12)=zz0(i,4)
314 vx(i,12) =vx(i,4)
315 vy(i,12) =vy(i,4)
316 vz(i,12) =vz(i,4)
317 ENDIF
318
319 IF(nvoisin(8,l)/=0)ix=iabs(nvoisin(8,l))
320 ixx(i,13)=ix
321 IF(ix /= 0)THEN
322 xx0(i,13)=x(1,ix)
323 yy0(i,13)=x(2,ix)
324 zz0(i,13)=x(3,ix)
325 vx(i,13)=v(1,ix)
326 vy(i,13)=v(2,ix)
327 vz(i,13)=v(3,ix)
328 ELSE
329 xx0(i,13)=xx0(i,1)
330 yy0(i,13)=yy0(i,1)
331 zz0(i,13)=zz0(i,1)
332 vx(i,13) =vx(i,1)
333 vy(i,13) =vy(i,1)
334 vz(i,13) =vz(i,1)
335 ENDIF
336
337 IF(nvoisin(7,l)<0)THEN
338 IF(nvoisin(8,l)<0)THEN
339 itriv(4,i)=4
340 ELSE
341 itriv(4,i)=2
342 ENDIF
343 ELSEIF(nvoisin(8,l)<0)THEN
344 itriv(4,i)=3
345 ELSE
346 itriv(4,i)=1
347 ENDIF
348
349 IF(ixx(i, 6)==ixx(i, 7))THEN
350 xx0(i,14) = xx0(i,6)
351 yy0(i,14) = yy0(i,6)
352 zz0(i,14) = zz0(i,6)
353 vx(i,14) = vx(i,6)
354 vy(i,14) = vy(i,6)
355 vz(i,14) = vz(i,6)
356 ELSE
357 xx0(i,14) = fourth*(xx0(i,2)+xx0(i,1)+xx0(i,6)+xx0(i,7))
358 yy0(i,14) = fourth*(yy0(i,2)+yy0(i,1)+yy0(i,6)+yy0(i,7))
359 zz0(i,14) = fourth*(zz0(i,2)+zz0(i,1)+zz0(i,6)+zz0(i,7))
360 vx(i,14) = fourth*(vx(i,2)+vx(i,1)+vx(i,6)+vx(i,7))
361 vy(i,14) = fourth*(vy(i,2)+vy(i,1)+vy(i,6)+vy(i,7))
362 vz(i,14) = fourth*(vz(i,2)+vz(i,1)+vz(i,6)+vz(i,7))
363 ENDIF
364 IF(ixx(i, 8)==ixx(i, 9))THEN
365 xx0(i,15) = xx0(i,8)
366 yy0(i,15) = yy0(i,8)
367 zz0(i,15) = zz0(i,8)
368 vx(i,15) = vx(i,8)
369 vy(i,15) = vy(i,8)
370 vz(i,15) = vz(i,8)
371 ELSE
372 xx0(i,15) = fourth*(xx0(i,3)+xx0(i,2)+xx0(i,8)+xx0(i,9))
373 yy0(i,15) = fourth*(yy0(i,3)+yy0(i,2)+yy0(i,8)+yy0(i,9))
374 zz0(i,15) = fourth*(zz0(i,3)+zz0(i,2)+zz0(i,8)+zz0(i,9))
375 vx(i,15) = fourth*(vx(i,3)+vx(i,2)+vx(i,8)+vx(i,9))
376 vy(i,15) = fourth*(vy(i,3)+vy(i,2)+vy(i,8)+vy(i,9))
377 vz(i,15) = fourth*(vz(i,3)+vz(i,2)+vz(i,8)+vz(i,9))
378 ENDIF
379 IF(ixx(i,10)==ixx(i,11))THEN
380 xx0(i,16) = xx0(i,10)
381 yy0(i,16) = yy0(i,10)
382 zz0(i,16) = zz0(i,10)
383 vx(i,16) = vx(i,10)
384 vy(i,16) = vy(i,10)
385 vz(i,16) = vz(i,10)
386 ELSE
387 xx0(i,16) = fourth*(xx0(i,4)+xx0(i,3)+xx0(i,10)+xx0(i,11))
388 yy0(i,16) = fourth*(yy0(i,4)+yy0(i,3)+yy0(i,10)+yy0(i,11))
389 zz0(i,16) = fourth*(zz0(i,4)+zz0(i,3)+zz0(i,10)+zz0(i,11))
390 vx(i,16) = fourth*(vx(i,4)+vx(i,3)+vx(i,10)+vx(i,11))
391 vy(i,16) = fourth*(vy(i,4)+vy(i,3)+vy(i,10)+vy(i,11))
392 vz(i,16) = fourth*(vz(i,4)+vz(i,3)+vz(i,10)+vz(i,11))
393 ENDIF
394 IF(ixx(i,12)==ixx(i,13))THEN
395 xx0(i,17) = xx0(i,12)
396 yy0(i,17) = yy0(i,12)
397 zz0(i,17) = zz0(i,12)
398 vx(i,17) = vx(i,12)
399 vy(i,17) = vy(i,12)
400 vz(i,17) = vz(i,12)
401 ELSE
402 xx0(i,17) = fourth*(xx0(i,1)+xx0(i,4)+xx0(i,12)+xx0(i,13))
403 yy0(i,17) = fourth*(yy0(i,1)+yy0(i,4)+yy0(i,12)+yy0(i,13))
404 zz0(i,17) = fourth*(zz0(i,1)+zz0(i,4)+zz0(i,12)+zz0(i,13))
405 vx(i,17) = fourth*(vx(i,1)+vx(i,4)+vx(i,12)+vx(i,13))
406 vy(i,17) = fourth*(vy(i,1)+vy(i,4)+vy(i,12)+vy(i,13))
407 vz(i,17) = fourth*(vz(i,1)+vz(i,4)+vz(i,12)+vz(i,13))
408 ENDIF
409
410 END DO
411 IF(igsti<=1)THEN
412 DO i=1,jlt
413 l = iabs(cand_e(i))
414 ni = cand_n(i)
415 IF(ni<=nsn)THEN
416 stif(i)=stf(l)*abs(stfn(ni))
417 ELSE
418 nn = ni - nsn
419 stif(i)=stf(l)*abs(
stifi(nin)%P(nn))
420 END IF
421 ENDDO
422 ELSEIF(igsti==2)THEN
423 DO i=1,jlt
424 l = iabs(cand_e(i))
425 ni = cand_n(i)
426 IF(ni<=nsn)THEN
427 stif(i)=abs(stfn(ni))
428 ELSE
429 nn = ni - nsn
430 stif(i)=abs(
stifi(nin)%P(nn))
431 END IF
432 stif(i)=half*(stf(l)+stif(i))
433 stif(i)=
max(kmin,
min(stif(i),kmax))
434 ENDDO
435 ELSEIF(igsti==3)THEN
436 DO i=1,jlt
437 l = iabs(cand_e(i))
438 ni = cand_n(i)
439 IF(ni<=nsn)THEN
440 stif(i)=abs(stfn(ni))
441 ELSE
442 nn = ni - nsn
443 stif(i)=abs(
stifi(nin)%P(nn))
444 END IF
445 stif(i)=
max(stf(l),stif(i))
446 stif(i)=
max(kmin,
min(stif(i),kmax))
447 ENDDO
448 ELSEIF(igsti==4.OR.igsti==6)THEN
449 DO i=1,jlt
450 l = iabs(cand_e(i))
451 ni = cand_n(i)
452 IF(ni<=nsn)THEN
453 stif(i)=abs(stfn(ni))
454 ELSE
455 nn = ni - nsn
456 stif(i)=abs(
stifi(nin)%P(nn))
457 END IF
458 stif(i)=
min(stf(l),stif(i))
459 stif(i)=
max(kmin,
min(stif(i),kmax))
460 ENDDO
461 ELSEIF(igsti==5)THEN
462 DO i=1,jlt
463 l = iabs(cand_e(i))
464 ni = cand_n(i)
465 IF(ni<=nsn)THEN
466 stif(i)=abs(stfn(ni))
467 ELSE
468 nn = ni - nsn
469 stif(i)=abs(
stifi(nin)%P(nn))
470 END IF
471 stif(i)=stf(l)*stif(i)/
472 .
max(em30,(stf(l)+stif(i)))
473 stif(i)=
max(kmin,
min(stif(i),kmax))
474 ENDDO
475 ENDIF
476
477 RETURN
type(real_pointer2), dimension(:), allocatable vfi
type(real_pointer), dimension(:), allocatable stifi
type(real_pointer), dimension(:), allocatable gapfi
type(real_pointer), dimension(:), allocatable msfi
type(real_pointer2), dimension(:), allocatable xfi