35 1 ADD ,NSN ,RENUM ,NSNR ,ISZNSNR ,
36 2 IRECT ,XA ,STF ,STFA ,XYZM ,
37 3 I_ADD ,NSV ,MAXSIZ ,II_STOK ,CAND_N ,
38 4 CAND_E,MULNSN ,NOINT ,TZINF ,MAXBOX ,
39 5 MINBOX,I_MEM ,NB_N_B ,I_ADD_MAX,ESHIFT ,
40 6 INACTI,IFQ ,CAND_A ,CAND_P ,IFPEN ,
41 7 NRTM ,NSNROLD,IGAP ,GAP ,GAP_S ,
42 6 GAP_M ,GAPMIN ,GAPMAX ,MARGE ,CURV_MAX ,
43 7 NIN ,GAP_SH ,NBINFLG,MBINFLG ,ISYM ,
44 8 INTHEAT,IDT_THERM,NODADT_THERM)
52#include "implicit_f.inc"
59 PARAMETER (NVECSZ = mvsiz)
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(*),
127 INTEGER,
INTENT(IN) :: INTHEAT
128 INTEGER,
INTENT(IN) :: IDT_THERM
129 INTEGER,
INTENT(IN) :: NODADT_THERM
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(*)
138 INTEGER NB_NCN,NB_NCN1,NB_ECN,ADDNN,ADDNE,I,J,DIR,NB_NC,NB_EC,
139 . n1,n2,n3,n4,nn,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),
143 . bpe(maxsiz/3),pe(maxsiz),bpn(nsn+nsnr),pn(nsn+nsnr),
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
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
193 DO i = nsn+1, nsn+nsnr
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)
227 splus = xyzm(dir+3,i_add)
228 seuil =(smoins+splus)*half
245 nb_ncn1 = nb_ncn1 + 1
248 smoins =
max(smoins,xx)
253 splus =
min(splus,xx)
266 nb_ncn1 = nb_ncn1 + 1
269 gapsmx =
max(gapsmx,gap_s(j))
270 smoins =
max(smoins,xx)
275 bgapsmx =
max(bgapsmx,gap_s(j))
276 splus =
min(splus,xx)
282 nb_ncn1 = nb_ncn1 + 1
285 gapsmx =
max(gapsmx,xrem(13,j-nsn))
286 smoins =
max(smoins,xx)
291 bgapsmx =
max(bgapsmx,xrem(13,j-nsn))
292 splus =
min(splus,xx)
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
318 ELSEIF(nb_ncn==0)
THEN
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
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
345 xmax=
max(xx1,xx2,xx3,xx4)+tzinf+curv_max(ne)
346 IF(xmax >= splus)
THEN
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
374 ELSEIF(nb_ncn==0)
THEN
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
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
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
420 add(1,i_add+1) = addnn
421 add(2,i_add+1) = addne
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
441 IF(i_add+1>=i_add_max)
THEN
458 IF(add(2,i_add)+nb_ec>maxsiz)
THEN
466 IF(nb_ec/=0.AND.nb_nc/=0)
THEN
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)
480 IF(nb_ec+nb_nc<=nvecsz)
THEN
481 ncand_prov = nb_ec*nb_nc
483 ncand_prov = nvecsz+1
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
491 DO l=k,
min(k-1+nvsiz,ncand_prov)
503 xmax=
max(xx1,xx2,xx3,xx4)+tzinf+curv_max(ne)
504 xmin=
min(xx1,xx2,xx3,xx4)-tzinf-curv_max(ne)
509 ymax=
max(xx1,xx2,xx3,xx4)+tzinf+curv_max(ne)
510 ymin=
min(xx1,xx2,xx3,xx4)-tzinf-curv_max(ne)
515 zmax=
max(xx1,xx2,xx3,xx4)+tzinf+curv_max(ne)
516 zmin=
min(xx1,xx2,xx3,xx4)-tzinf-curv_max(ne)
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
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
544 DO l=k,
min(k-1+nvsiz,ncand_prov)
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
572 zmax=
max(zz1,zz2,zz3,zz4)+tz
573 zmin=
min(zz1,zz2,zz3,zz4)-tz
575 IF(nn/=n1.AND.nn/=n2.AND.nn/=n3.AND.nn
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
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
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 )
617 j_stok = j_stok-nvsiz
618#include "vectorize.inc"
620 prov_n(j) = prov_n(j+nvsiz)
621 prov_e(j) = prov_e(j+nvsiz)
642 CALL i7dstk(nb_nc,nb_ec,add(1,i_add),bpn,pn,bpe,pe)
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)
674 2 IXLINS,IXLINM,NLINMA,NLINSR,
675 3 XYZM ,I_ADD ,MAXSIZ,II_STOKE ,CAND_S,
676 4 CAND_M,NSN4 ,NOINT ,TZINF ,MAXBOX,
677 5 MINBOX,I_MEM ,NB_N_B,I_ADD_MAX,ESHIFT,
678 6 ADDCM ,CHAINE,NLINSA ,ITAB ,NB_OLD,
679 7 STFS ,STFM ,IAUTO ,NIN )
687#include "implicit_f.inc"
692#include "mvsiz_p.inc"
696#include "param_c.inc"
754 INTEGER NLINMA,NLINSR,I_ADD,MAXSIZ,I_MEM,ESHIFT,NLINSA,
755 . NSN4,NB_N_B,NOINT,I_ADD_MAX,IAUTO ,NIN,
756 . ADD(2,*),IXLINS(2,*),IXLINM(2,*),
757 . CAND_S(*),CAND_M(*),ADDCM(*),CHAINE(2,*),ITAB(*),
758 . NB_OLD(2,*),NLG(*),II_STOKE
761 . XA(3,*),XYZM(6,*),STFS(*),STFM(*),
762 . TZINF,MAXBOX,MINBOX
766 INTEGER NB_NCN,NB_NCN1,NB_ECN,ADDNN,ADDNE,I,J,DIR,NN1,NN2,
767 . N1,N2,N3,N4,NN,NE,K_STOK,K,L,NCAND_PROV,J_STOK,NI,
768 . ISTOP,NB_ECN1,PROV_S(2*MVSIZ),PROV_M(2*MVSIZ),
769 . NB_NC_OLD, NB_EC_OLD, NB_NC, NB_EC,JJ,KK,
772 . bpe(nlinma+100),pe(maxsiz),bpn(nlinsa+nlinsr+100),
776 . dx,dy,dz,dsup,seuil,seuils,seuili, xx1, xx2, xx3, xx4,
777 . xmin, xmax,ymin,
ymax,zmin, zmax, xx,yy,zz,
778 . xmins,ymins,zmins,xmaxs,ymaxs,zmaxs,
779 . yy1,yy2,zz1,zz2,dmx,dmy,dmz,
780 . xy1,xy2,xz1,xz2,ximin,ximax,xjmin,xjmax,xkmin,xkmax,
781 . timin,timax,tjmin,tjmax,tkmin,tkmax,tsmin,tsmax,
782 . txmin, txmax,tymin, tymax,tzmin, tzmax
804 IF(stfm(i)/=zero)
THEN
816 IF(stfs(i)/=zero)
THEN
819 xmins =
min(xa(1,n1),xa(1,n2))
820 ymins =
min(xa(2,n1),xa(2,n2))
821 zmins =
min(xa(3,n1),xa(3,n2))
822 xmaxs =
max(xa(1,n1),xa(1,n2))
823 ymaxs =
max(xa(2,n1),xa(2,n2))
824 zmaxs =
max(xa(3,n1),xa(3,n2))
825 IF(xmaxs>=xmin.AND.xmins<=xmax.AND.
826 . ymaxs>=ymin.AND.ymins<=
ymax.AND.
827 . zmaxs>=zmin.AND.zmins<=zmax)
THEN
836 DO i = nlinsa+1, nlinsa+nlinsr
852 dx = xyzm(4,i_add) - xyzm(1,i_add)
853 dy = xyzm(5,i_add) - xyzm(2,i_add)
854 dz = xyzm(6,i_add) - xyzm(3,i_add)
881 xx1=xa(1, ixlinm(1,ne))
882 xx2=xa(1, ixlinm(2,ne))
883 xmin=
min(xmin,xx1,xx2)
884 xmax=
max(xmax,xx1,xx2)
886 yy1=xa(2, ixlinm(1,ne))
887 yy2=xa(2, ixlinm(2,ne))
888 ymin=
min(ymin,yy1,yy2)
891 zz1=xa(3, ixlinm(1,ne))
892 zz2=xa(3, ixlinm(2,ne))
893 zmin=
min(zmin,zz1,zz2)
894 zmax=
max(zmax,zz1,zz2)
944 xmin =
max(xmin - tzinf , xyzm(1,i_add))
947 xmax =
min(xmax + tzinf , xyzm(4,i_add
962 dsup =
max(dmx,dmy,dmz)
968 seuil = (ymin+
ymax)*0.5
981 ELSE IF(dmz==dsup)
THEN
985 seuil = (zmin+zmax)*0.5
1002 seuil = (xmin+xmax)*0.5
1017 tsmin = seuil - tzinf
1018 tsmax = seuil + tzinf
1042 xx1=xa(dir,ixlins(1,nn))
1043 xx2=xa(dir,ixlins(2,nn))
1044 xy1=xa(jj, ixlins(1,nn))
1045 xy2=xa(jj, ixlins(2,nn))
1046 xz1=xa(kk, ixlins(1,nn))
1047 xz2=xa(kk, ixlins(2,nn))
1060 IF(i11insid(xx1,xx2,xy1,xy2,xz1,xz2,
1061 . ximin,seuil,xjmin,xjmax,xkmin,xkmax))
THEN
1063 nb_ncn1 = nb_ncn1 + 1
1068 IF(xmax>=seuil.AND.xmin<=ximax)
THEN
1069 IF(i11insid(xx1,xx2,xy1,xy2,xz1,xz2,
1070 . seuil,ximax,xjmin,xjmax,xkmin,xkmax))
THEN
1109 xx1=xa(dir, ixlinm(1,ne))
1110 xx2=xa(dir, ixlinm(2,ne))
1111 IF(
max(xx1,xx2)>=tsmin)
THEN
1112 xy1=xa(jj, ixlinm(1,ne))
1113 xy2=xa(jj, ixlinm(2,ne))
1114 xz1=xa(kk, ixlinm(1,ne))
1115 xz2=xa(kk, ixlinm(2,ne))
1116 IF(i11insid(xx1,xx2,xy1,xy2,xz1,xz2,
1117 . tsmin,timax,tjmin,tjmax,tkmin,tkmax))
THEN
1124 ELSEIF(nb_ncn==0)
THEN
1127 xx1=xa(dir, ixlinm(1,ne))
1128 xx2=xa(dir, ixlinm(2,ne))
1129 IF(
min(xx1,xx2)<tsmax)
THEN
1130 xy1=xa(jj, ixlinm(1,ne))
1131 xy2=xa(jj, ixlinm(2,ne))
1132 xz1=xa(kk, ixlinm(1,ne))
1133 xz2=xa(kk, ixlinm(2,ne))
1134 IF(i11insid(xx1,xx2,xy1,xy2,xz1,xz2,
1135 . timin,tsmax,tjmin,tjmax,tkmin,tkmax))
THEN
1138 nb_ecn1= nb_ecn1 + 1
1146 xx1=xa(dir, ixlinm(1,ne))
1147 xx2=xa(dir, ixlinm(2,ne))
1148 xy1=xa(jj, ixlinm(1,ne))
1149 xy2=xa(jj, ixlinm(2,ne))
1150 xz1=xa(kk, ixlinm(1,ne))
1151 xz2=xa(kk, ixlinm(2,ne))
1152 IF(
min(xx1,xx2)<tsmax)
THEN
1153 IF(i11insid(xx1,xx2,xy1,xy2,xz1,xz2,
1154 . timin,tsmax,tjmin,tjmax,tkmin,tkmax))
THEN
1157 nb_ecn1= nb_ecn1 + 1
1161 IF(
max(xx1,xx2)>=tsmin)
THEN
1162 IF(i11insid(xx1,xx2,xy1,xy2,xz1,xz2,
1163 . tsmin,timax,tjmin,tjmax,tkmin,tkmax))
THEN
1174 add(1,i_add+1) = addnn
1175 add(2,i_add+1) = addne
1182 xyzm(1,i_add+1) = xyzm(1,i_add)
1183 xyzm(2,i_add+1) = xyzm(2,i_add)
1184 xyzm(3,i_add+1) = xyzm(3,i_add)
1185 xyzm(4,i_add+1) = xyzm(4,i_add)
1186 xyzm(5,i_add+1) = xyzm(5,i_add)
1187 xyzm(6,i_add+1) = xyzm(6,i_add)
1188 xyzm(dir ,i_add) = ximin
1189 xyzm(dir+3,i_add) = seuil
1190 xyzm(dir ,i_add+1) = seuil
1191 xyzm(dir+3,i_add+1) = ximax
1193 nb_old(1,i_add)=nb_nc
1194 nb_old(2,i_add)=nb_ec
1195 nb_old(1,i_add+1)=nb_nc
1196 nb_old(2,i_add+1)=nb_ec
1202 IF(i_add+1>=i_add_max)
THEN
1220 IF(add(1,i_add)+nb_nc>maxsiz)
THEN
1225 IF(add(2,i_add)+nb_ec>maxsiz)
THEN
1233 IF(nb_ec/=0.AND.nb_nc/=0)
THEN
1235 dx = xyzm(4,i_add) - xyzm(1,i_add)
1236 dy = xyzm(5,i_add) - xyzm(2,i_add)
1237 dz = xyzm(6,i_add) - xyzm(3,i_add)
1244 IF(nb_ec+nb_nc<=128)
THEN
1245 ncand_prov = nb_ec*nb_nc
1250 nb_nc_old = nb_old(1,i_add)
1251 nb_ec_old = nb_old(2,i_add)
1254 . nb_nc<=nb_n_b.OR.nb_ec<=nb_n_b.OR.
1255 . ncand_prov<=128.OR.(nb_ec==nb_ec_old
1256 . .AND.nb_nc==nb_nc_old))
THEN
1258 ncand_prov = nb_ec*nb_nc
1259 DO k=1,ncand_prov,nvsiz
1260 DO l=k,
min(k-1+nvsiz,ncand_prov)
1270 IF(iauto==0 .OR. itab(nlg(n1))>itab(nlg(nn1)) )
THEN
1271 IF(nn1/=n1.AND.nn1/=n2.AND.
1272 . nn2/=n1.AND.nn2/=n2)
THEN
1281 nn1 = nint(xrem(9,ni))
1282 nn2 = nint(xrem(17,ni))
1289 IF(iauto==0 .OR. n1>nn1 )
THEN
1290 IF(nn1/=n1.AND.nn1/=n2.AND.
1291 . nn2/=n1.AND.nn2/=n2)
THEN
1299 IF(j_stok>=nvsiz)
THEN
1301 1 nvsiz,ixlins,ixlinm,xa ,ii_stoke,
1302 2 cand_s,cand_m,nsn4 ,noint ,tzinf ,
1303 3 i_mem ,prov_s,prov_m,eshift,addcm ,
1304 4 chaine,nlinsa ,nin )
1306 j_stok = j_stok-nvsiz
1307#include "vectorize.inc"
1309 prov_s(j) = prov_s(j+nvsiz)
1310 prov_m(j) = prov_m(j+nvsiz)
1331 CALL i7dstk(nb_nc,nb_ec,add(1,i_add),bpn,pn,bpe,pe)
1340 1 j_stok,ixlins,ixlinm,xa ,ii_stoke,
1341 2 cand_s,cand_m,nsn4 ,noint ,tzinf ,
1342 3 i_mem ,prov_s,prov_m,eshift,addcm ,
1343 4 chaine,nlinsa ,nin )