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