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