43
44
45
46
47
48
49
50
52
53
54
55#include "implicit_f.inc"
56
57
58
59#include "mvsiz_p.inc"
60
61
62
63#include "com01_c.inc"
64#include "param_c.inc"
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122 INTEGER I_ADD,MAXSIZ,I_MEM,ESHIFT,NSN,NSNROLD,
123 . NSN4,NB_N_B,NOINT,I_ADD_MAX,NSNR,NRTM,IGAP,
124 . ADD(2,*),IRECT(4,*),II_STOK,
125 . NSV(*),CAND_N(*),CAND_E(*),CAND_A(*),RENUM(*)
126 INTEGER, INTENT(IN) :: INTHEAT
127 INTEGER, INTENT(IN) :: IDT_THERM
128 INTEGER, INTENT(IN) :: NODADT_THERM
129
131 . x(3,*),xyzm(6,*),stf(*),stfn(*),gap_s(*),gap_m(*),
132 . tzinf,maxbox,minbox,gap,gapmin,gapmax,marge
133
134
135
136 INTEGER NB_NCN,NB_NCN1,NB_ECN,ADDNN,ADDNE,I,J,DIR,NB_NC,NB_EC,
137 . N1,N2,N3,N4,NN,NE,K,L,NCAND_PROV,J_STOK,II,JJ,NIN,
138 . PROV_N(2*MVSIZ),PROV_E(2*MVSIZ),OLDNUM(NSNR),
139
140 . BPE(MAXSIZ/3),PE(MAXSIZ),BPN(NSN+NSNR),PN(NSN+NSNR)
141
143 . dx,dy,dz,dsup,seuil,seuils,seuili, xx1, xx2, xx3, xx4,
144 . xmin,xmax,ymin,
ymax,zmin,zmax, tz, gapsmx, bgapsmx
145
146
147
148
149 xmin = xyzm(1,i_add)
150 ymin = xyzm(2,i_add)
151 zmin = xyzm(3,i_add)
152 xmax = xyzm(4,i_add)
154 zmax = xyzm(6,i_add)
155
156
157
158 nb_ec = 0
159 DO i=1,nrtm
160
161 IF(stf(i)/=zero)THEN
162 nb_ec = nb_ec + 1
163 bpe(nb_ec) = i
164 END IF
165 ENDDO
166
167
168
169
170 nb_nc = 0
171 DO i=1,nsn
172 j=nsv(i)
173 IF(stfn(i)/=zero) THEN
174 IF(x(1,j)>=xmin.AND.x(1,j)<=xmax.AND.
175 . x(2,j)>=ymin.AND.x(2,j)<=
ymax.AND.
176 . x(3,j)>=zmin.AND.x(3,j)<=zmax)THEN
177 nb_nc = nb_nc + 1
178 bpn(nb_nc) = i
179 ENDIF
180 END IF
181 ENDDO
182
183
184
185 DO i = nsn+1, nsn+nsnr
186 nb_nc = nb_nc + 1
187 bpn(nb_nc) = i
188 ENDDO
189
190
191
192 IF(nspmd>1) THEN
193 CALL spmd_oldnumcd(renum,oldnum,nsnr,nsnrold,intheat,idt_therm,nodadt_therm)
194 END IF
195
196 j_stok = 0
197 GOTO 200
198
199 100 CONTINUE
200
201
202
203
204
205
206
207
208
209
210
211
212 dir = 1
213 IF(dy==dsup) THEN
214 dir = 2
215 ELSE IF(dz==dsup) THEN
216 dir = 3
217 ENDIF
218 seuil =(xyzm(dir+3,i_add)+xyzm(dir,i_add))*0.5
219
220
221
222 nb_ncn= 0
223 nb_ncn1= 0
224 addnn= add(1,i_add)
225 IF(igap==0)THEN
226 DO i=1,nb_nc
227 j = bpn(i)
228 IF(j<=nsn) THEN
229 IF(x(dir,nsv(j))<seuil) THEN
230
231 nb_ncn1 = nb_ncn1 + 1
232 addnn = addnn + 1
233 pn(addnn) = j
234 ENDIF
235 ELSE
236 IF(xrem(dir,j-nsn)<seuil) THEN
237
238 nb_ncn1 = nb_ncn1 + 1
239 addnn = addnn + 1
240 pn(addnn) = j
241 ENDIF
242 ENDIF
243 ENDDO
244
245 DO i=1,nb_nc
246 j = bpn(i)
247 IF(j<=nsn) THEN
248 IF(x(dir,nsv(j))>=seuil) THEN
249
250 nb_ncn = nb_ncn + 1
251 bpn(nb_ncn) = j
252 ENDIF
253 ELSE
254 IF(xrem(dir,j-nsn)>=seuil) THEN
255
256 nb_ncn = nb_ncn + 1
257 bpn(nb_ncn) = j
258 ENDIF
259 ENDIF
260 ENDDO
261 ELSE
262 gapsmx = zero
263 DO i=1,nb_nc
264 j = bpn(i)
265 IF(j<=nsn) THEN
266 IF(x(dir,nsv(j))<seuil) THEN
267
268 nb_ncn1 = nb_ncn1 + 1
269 addnn = addnn + 1
270 pn(addnn) = j
271 gapsmx =
max(gapsmx,gap_s(j))
272 ENDIF
273 ELSE
274 IF(xrem(dir,j-nsn)<seuil) THEN
275
276 nb_ncn1 = nb_ncn1 + 1
277 addnn = addnn + 1
278 pn(addnn) = j
279 gapsmx =
max(gapsmx,xrem(9,j-nsn))
280 ENDIF
281 ENDIF
282 ENDDO
283
284 bgapsmx = zero
285 DO i=1,nb_nc
286 j = bpn(i)
287 IF(j<=nsn) THEN
288 IF(x(dir,nsv(j))>=seuil) THEN
289
290 nb_ncn = nb_ncn + 1
291 bpn(nb_ncn) = j
292 bgapsmx =
max(bgapsmx,gap_s(j))
293 ENDIF
294 ELSE
295 IF(xrem(dir,j-nsn)>=seuil) THEN
296
297 nb_ncn = nb_ncn + 1
298 bpn(nb_ncn) = j
299 bgapsmx =
max(bgapsmx,xrem(9,j-nsn))
300 ENDIF
301 ENDIF
302 ENDDO
303 END IF
304
305
306
307 IF(igap==0) THEN
308 nb_ecn= 0
309 addne= add(2,i_add)
310 IF(nb_ncn1==0) THEN
311 DO i=1,nb_ec
312 ne = bpe(i)
313 xx1=x(dir, irect(1,ne))
314 xx2=x(dir, irect(2,ne))
315 xx3=x(dir, irect(3,ne))
316 xx4=x(dir, irect(4,ne))
317 xmax=
max(xx1,xx2,xx3,xx4)+tzinf
318 IF(xmax>=seuil) THEN
319
320 nb_ecn = nb_ecn + 1
321 bpe(nb_ecn) = ne
322 ENDIF
323 ENDDO
324 ELSEIF(nb_ncn==0) THEN
325 DO i=1,nb_ec
326 ne = bpe(i)
327 xx1=x(dir, irect(1,ne))
328 xx2=x(dir, irect(2,ne))
329 xx3=x(dir, irect(3,ne))
330 xx4=x(dir, irect(4,ne))
331 xmin=
min(xx1,xx2,xx3,xx4)-tzinf
332 IF(xmin<seuil) THEN
333
334 addne = addne + 1
335 pe(addne) = ne
336 ENDIF
337 ENDDO
338 ELSE
339 DO i=1,nb_ec
340 ne = bpe(i)
341 xx1=x(dir, irect(1,ne))
342 xx2=x(dir, irect(2,ne))
343 xx3=x(dir, irect(3,ne))
344 xx4=x(dir, irect(4,ne))
345 xmin=
min(xx1,xx2,xx3,xx4)-tzinf
346 IF(xmin<seuil) THEN
347
348 addne = addne + 1
349 pe(addne) = ne
350 ENDIF
351 ENDDO
352 DO i=1,nb_ec
353 ne = bpe(i)
354 xx1=x(dir, irect(1,ne))
355 xx2=x(dir, irect(2,ne))
356 xx3=x(dir, irect(3,ne))
357 xx4=x(dir, irect(4,ne))
358 xmax=
max(xx1,xx2,xx3,xx4)+tzinf
359 IF(xmax>=seuil) THEN
360
361 nb_ecn = nb_ecn + 1
362 bpe(nb_ecn) = ne
363 ENDIF
364 ENDDO
365 ENDIF
366
367 ELSE
368 nb_ecn= 0
369 addne= add(2,i_add)
370 IF(nb_ncn1==0) THEN
371 DO i=1,nb_ec
372 ne = bpe(i)
373 xx1=x(dir, irect(1,ne))
374 xx2=x(dir, irect(2,ne))
375 xx3=x(dir, irect(3,ne))
376 xx4=x(dir, irect(4,ne))
377 xmax=
max(xx1,xx2,xx3,xx4)
378 + +
min(
max(bgapsmx+gap_m(ne),gapmin),gapmax)+marge
379 IF(xmax>=seuil) THEN
380
381 nb_ecn = nb_ecn + 1
382 bpe(nb_ecn) = ne
383 ENDIF
384 ENDDO
385 ELSEIF(nb_ncn==0) THEN
386 DO i=1,nb_ec
387 ne = bpe(i)
388 xx1=x(dir, irect(1,ne))
389 xx2=x(dir, irect(2,ne))
390 xx3=x(dir, irect(3,ne))
391 xx4=x(dir, irect(4,ne))
392 xmin=
min(xx1,xx2,xx3,xx4)
393 - -
min(
max(gapsmx+gap_m(ne),gapmin),gapmax)-marge
394 IF(xmin<seuil) THEN
395
396 addne = addne + 1
397 pe(addne) = ne
398 ENDIF
399 ENDDO
400 ELSE
401 DO i=1,nb_ec
402 ne = bpe(i)
403 xx1=x(dir, irect(1,ne))
404 xx2=x(dir, irect(2,ne))
405 xx3=x(dir, irect(3,ne))
406 xx4=x(dir, irect(4,ne))
407 xmin=
min(xx1,xx2,xx3,xx4)
408 - -
min(
max(gapsmx+gap_m(ne),gapmin),gapmax)-marge
409 IF(xmin<seuil) THEN
410
411 addne = addne + 1
412 pe(addne) = ne
413 ENDIF
414 ENDDO
415 DO i=1,nb_ec
416 ne = bpe(i)
417 xx1=x(dir, irect(1,ne))
418 xx2=x(dir, irect(2,ne))
419 xx3=x(dir, irect(3,ne))
420 xx4=x(dir, irect(4,ne))
421 xmax=
max(xx1,xx2,xx3,xx4)
422 + +
min(
max(bgapsmx+gap_m(ne),gapmin),gapmax)+marge
423 IF(xmax>=seuil) THEN
424
425 nb_ecn = nb_ecn + 1
426 bpe(nb_ecn) = ne
427 ENDIF
428 ENDDO
429 ENDIF
430 ENDIF
431
432
433
434 add(1,i_add+1) = addnn
435 add(2,i_add+1) = addne
436
437
438
439
440
441
442 xyzm(1,i_add+1) = xyzm(1,i_add)
443 xyzm(2,i_add+1) = xyzm(2,i_add)
444 xyzm(3,i_add+1) = xyzm(3,i_add
445 xyzm(4,i_add+1) = xyzm(4,i_add)
446 xyzm(5,i_add+1) = xyzm(5,i_add)
447 xyzm(6,i_add+1) = xyzm(6,i_add)
448 xyzm(dir,i_add+1) = seuil
449 xyzm(dir+3,i_add) = seuil
450
451 nb_nc = nb_ncn
452 nb_ec = nb_ecn
453
454 i_add = i_add + 1
455 IF(i_add+1>=i_add_max) THEN
456 i_mem = 3
457 RETURN
458 ENDIF
459
460 200 CONTINUE
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475 IF(add(2,i_add)+nb_ec>maxsiz) THEN
476
477 i_mem = 1
478 RETURN
479 ENDIF
480
481
482
483 IF(nb_ec/=0.AND.nb_nc/=0) THEN
484
485 dx = xyzm(4,i_add) - xyzm(1,i_add)
486 dy = xyzm(5,i_add) - xyzm(2,i_add)
487 dz = xyzm(6,i_add) - xyzm(3,i_add)
489
490
491
492
493
494 IF(nb_ec+nb_nc<=128) THEN
495 ncand_prov = nb_ec*nb_nc
496 ELSE
497 ncand_prov = 129
498 ENDIF
499 IF(dsup<minbox.OR.nb_nc<=nb_n_b.OR.ncand_prov<=128) THEN
500 ncand_prov = nb_ec*nb_nc
501 DO k=1,ncand_prov,nvsiz
502 IF(igap==0) THEN
503 DO l=k,
min(k-1+nvsiz,ncand_prov)
504 i = 1+(l-1)/nb_nc
505 j = l-(i-1)*nb_nc
506
507 ne = bpe(i)
508 n1=irect(1,ne)
509 n2=irect(2,ne)
510 n3=irect(3,ne)
511 n4=irect(4,ne)
512
513 xx1=x(1, n1)
514 xx2=x(1, n2)
515 xx3=x(1, n3)
516 xx4=x(1, n4)
517 xmax=
max(xx1,xx2,xx3,xx4)+tzinf
518 xmin=
min(xx1,xx2,xx3,xx4)-tzinf
519 xx1=x(2, n1)
520 xx2=x(2, n2)
521 xx3=x(2, n3)
522 xx4=x(2, n4)
523 ymax=
max(xx1,xx2,xx3,xx4)+tzinf
524 ymin=
min(xx1,xx2,xx3,xx4)-tzinf
525 xx1=x(3, n1)
526 xx2=x(3, n2)
527 xx3=x(3, n3)
528 xx4=x(3, n4)
529 zmax=
max(xx1,xx2,xx3,xx4)+tzinf
530 zmin=
min(xx1,xx2,xx3,xx4)-tzinf
531
532 jj = bpn(j)
533 IF(jj<=nsn) THEN
534 nn=nsv(jj)
535 IF(nn/=n1.AND.nn/=n2.AND.nn/=n3.AND.nn/=n4.AND.
536 & x(1,nn)>xmin.AND.x(1,nn)<xmax.AND.
537 & x(2,nn)>ymin.AND.x(2,nn)<
ymax.AND.
538 & x(3,nn)>zmin.AND.x(3,nn)<zmax ) THEN
539 j_stok = j_stok + 1
540 prov_n(j_stok) = jj
541 prov_e(j_stok) = ne
542 ENDIF
543 ELSE
544 ii = jj-nsn
545 IF(xrem(1,ii)>xmin.AND.
546 & xrem(1,ii)<xmax.AND.
547 & xrem(2,ii)>ymin.AND.
548 & xrem(2,ii)<
ymax.AND.
549 & xrem(3,ii)>zmin.AND.
550 & xrem(3,ii)<zmax ) THEN
551 j_stok = j_stok + 1
552 prov_n(j_stok) = jj
553 prov_e(j_stok) = ne
554 ENDIF
555 ENDIF
556 ENDDO
557 ELSE
558 DO l=k,
min(k-1+nvsiz,ncand_prov)
559 i = 1+(l-1)/nb_nc
560 j = l-(i-1)*nb_nc
561
562 ne = bpe(i)
563 n1=irect(1,ne)
564 n2=irect(2,ne)
565 n3=irect(3,ne)
566 n4=irect(4,ne)
567
568 jj = bpn(j)
569 IF(jj<=nsn) THEN
570 tz=
max(
min(gap_s(jj)+gap_m(ne),gapmax),gapmin)+marge
571 xx1=x(1, n1)
572 xx2=x(1, n2)
573 xx3=x(1, n3)
574 xx4=x(1, n4)
575 xmax=
max(xx1,xx2,xx3,xx4)+tz
576 xmin=
min(xx1,xx2,xx3,xx4)-tz
577 xx1=x(2, n1)
578 xx2=x(2, n2)
579 xx3=x(2, n3)
580 xx4=x(2, n4)
582 ymin=
min(xx1,xx2,xx3,xx4)-tz
583 xx1=x(3, n1)
584 xx2=x(3, n2)
585 xx3=x(3, n3)
586 xx4=x(3, n4)
587 zmax=
max(xx1,xx2,xx3,xx4)+tz
588 zmin=
min(xx1,xx2,xx3,xx4)-tz
589 nn=nsv(jj)
590 IF(nn/=n1.AND.nn/=n2.AND.nn/=n3.AND.nn/=n4.AND.
591 & x(1,nn)>xmin.AND.x(1,nn)<xmax.AND.
592 & x(2,nn)>ymin.AND.x(2,nn)<
ymax.AND.
593 & x(3,nn)>zmin.AND.x(3,nn)<zmax ) THEN
594 j_stok = j_stok + 1
595 prov_n(j_stok) = jj
596 prov_e(j_stok) = ne
597 ENDIF
598 ELSE
599 ii = jj-nsn
600 tz=
max(
min(xrem(9,ii)+gap_m(ne),gapmax),gapmin)
601 + +marge
602 xx1=x(1, n1)
603 xx2=x(1, n2)
604 xx3=x(1, n3)
605 xx4=x(1, n4)
606 xmax=
max(xx1,xx2,xx3,xx4)+tz
607 xmin=
min(xx1,xx2,xx3,xx4)-tz
608 xx1=x(2, n1)
609 xx2=x(2, n2)
610 xx3=x(2, n3)
611 xx4=x(2, n4)
613 ymin=
min(xx1,xx2,xx3,xx4)-tz
614 xx1=x(3, n1)
615 xx2=x(3, n2)
616 xx3=x(3, n3)
617 xx4=x(3, n4)
618 zmax=
max(xx1,xx2,xx3,xx4)+tz
619 zmin=
min(xx1,xx2,xx3,xx4)-tz
620 IF(xrem(1,ii)>xmin.AND.
621 & xrem(1,ii)<xmax.AND.
622 & xrem(2,ii)>ymin.AND.
623 & xrem(2,ii)<
ymax.AND.
624 & xrem(3,ii)>zmin.AND.
625 & xrem(3,ii)<zmax ) THEN
626 j_stok = j_stok + 1
627 prov_n(j_stok) = jj
628 prov_e(j_stok) = ne
629 ENDIF
630 ENDIF
631 ENDDO
632 END IF
633 IF(j_stok>=nvsiz) THEN
635 1 nvsiz ,irect ,x ,nsv ,ii_stok,
636 2 cand_n,cand_e,nsn4 ,noint ,marge ,
637 3 i_mem ,prov_n,prov_e ,cand_a,eshift ,
638 4 nsn ,oldnum,nsnrold,igap ,gap ,
639 6 gap_s ,gap_m ,gapmin ,gapmax,nin )
640 IF(i_mem==2)RETURN
641 j_stok = j_stok-nvsiz
642#include "vectorize.inc"
643 DO j=1,j_stok
644 prov_n(j) = prov_n(j+nvsiz)
645 prov_e(j) = prov_e(j+nvsiz)
646 ENDDO
647 ENDIF
648 ENDDO
649 ELSE
650
651 GOTO 100
652
653 ENDIF
654 ENDIF
655
656
657
658
659
660 i_add = i_add - 1
661 IF (i_add/=0) THEN
662
663
664
665
666 CALL i7dstk(nb_nc,nb_ec,add(1,i_add),bpn,pn,bpe,pe)
667
668 GOTO 200
669
670 ENDIF
671
672
673
675 1 j_stok,irect ,x ,nsv ,ii_stok,
676 2 cand_n,cand_e,nsn4 ,noint ,marge ,
677 3 i_mem ,prov_n,prov_e ,cand_a,eshift ,
678 4 nsn ,oldnum,nsnrold,igap ,gap ,
679 6 gap_s ,gap_m ,gapmin ,gapmax,nin )
680
681 RETURN
subroutine i10sto(j_stok, irect, x, nsv, ii_stok, cand_n, cand_e, nsn4, noint, marge, i_mem, prov_n, prov_e, cand_a, eshift, nsn, oldnum, nsnrold, igap, gap, gap_s, gap_m, gapmin, gapmax, nin)
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
subroutine i7dstk(i_add, nb_nc, nb_ec, add, bpn, pn, bpe, pe)