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)
120 INTEGER I_ADD,MAXSIZ,I_MEM,,NSN,ISZNSNR,NRTM,NSNROLD,
121 . MULNSN,NB_N_B,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(*),
125 INTEGER,
INTENT(IN) :: INTHEAT
126 INTEGER,
INTENT(IN) :: IDT_THERM
127 INTEGER,
INTENT(IN) :: NODADT_THERM
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(*)
136 INTEGER NB_NCN,NB_NCN1,NB_ECN,ADDNN,,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),
141 . bpe(maxsiz/3),pe(maxsiz),bpn(nsn+nsnr),pn(nsn+nsnr),
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,
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
191 DO i = nsn+1, nsn+nsnr
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)
221 ELSE IF(dz==dsup)
THEN
224 smoins = xyzm(dir,i_add)
225 splus = xyzm(dir+3,i_add)
226 seuil =(smoins+splus)*half
243 nb_ncn1 = nb_ncn1 + 1
246 smoins =
max(smoins,xx)
251 splus =
min(splus,xx)
264 nb_ncn1 = nb_ncn1 + 1
267 gapsmx =
max(gapsmx,gap_s(j))
268 smoins =
max(smoins,xx)
273 bgapsmx =
max(bgapsmx,gap_s(j))
274 splus =
min(splus,xx)
280 nb_ncn1 = nb_ncn1 + 1
283 gapsmx =
max(gapsmx,xrem(13,j-nsn))
284 smoins =
max(smoins,xx)
289 bgapsmx =
max(bgapsmx,xrem(13,j-nsn))
290 splus =
min(splus,xx)
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
316 ELSEIF(nb_ncn==0)
THEN
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
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
344 IF(xmax >= splus)
THEN
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
372 ELSEIF(nb_ncn==0)
THEN
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
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
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
418 add(1,i_add+1) = addnn
419 add(2,i_add+1) = addne
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
439 IF(i_add+1>=i_add_max)
THEN
455 IF(add(2,i_add)+nb_ec>maxsiz)
THEN
463 IF(nb_ec/=0.AND.nb_nc/=0)
THEN
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)
477 IF(nb_ec+nb_nc<=nvecsz)
THEN
478 ncand_prov = nb_ec*nb_nc
480 ncand_prov = nvecsz+1
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
488 DO l=k,
min(k-1+nvsiz,ncand_prov)
500 xmax=
max(xx1,xx2,xx3,xx4)+tzinf+curv_max(ne)
501 xmin=
min(xx1,xx2,xx3,xx4)-tzinf-curv_max(ne)
506 ymax=
max(xx1,xx2,xx3,xx4)+tzinf+curv_max(ne)
507 ymin=
min(xx1,xx2,xx3,xx4)-tzinf-curv_max(ne)
512 zmax=
max(xx1,xx2,xx3,xx4)+tzinf+curv_max(ne)
513 zmin=
min(xx1,xx2,xx3,xx4)-tzinf-curv_max(ne)
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
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
541 DO l=k,
min(k-1+nvsiz,ncand_prov)
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
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
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
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 )
614 j_stok = j_stok-nvsiz
615#include
"vectorize.inc"
617 prov_n(j) = prov_n(j+nvsiz)
618 prov_e(j) = prov_e(j+nvsiz)
639 CALL i7dstk(nb_nc,nb_ec,add(1,i_add),bpn,pn,bpe,pe)
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)
671 2 IXLINS,IXLINM,NLINMA,NLINSR,
672 3 XYZM ,I_ADD ,MAXSIZ,II_STOKE ,CAND_S,
673 4 CAND_M,NSN4 ,NOINT ,TZINF ,MAXBOX,
674 5 MINBOX,I_MEM ,NB_N_B,I_ADD_MAX,ESHIFT,
675 6 ADDCM ,CHAINE,NLINSA ,ITAB ,NB_OLD,
676 7 STFS ,STFM ,IAUTO ,NIN )
684#include "implicit_f.inc"
689#include "mvsiz_p.inc"
693#include "param_c.inc"
749 INTEGER NLINMA,NLINSR,I_ADD,MAXSIZ,I_MEM,ESHIFT,NLINSA,
750 . NSN4,NB_N_B,NOINT,I_ADD_MAX,IAUTO ,NIN,
751 . ADD(2,*),IXLINS(2,*),IXLINM(2,*),
752 . CAND_S(*),CAND_M(*),ADDCM(*),CHAINE(2,*),ITAB(*),
753 . NB_OLD(2,*),NLG(*),II_STOKE
756 . XA(3,*),XYZM(6,*),STFS(*),STFM(*),
757 . TZINF,MAXBOX,MINBOX
761 INTEGER NB_NCN,NB_NCN1,NB_ECN,ADDNN,ADDNE,I,J,DIR,NN1,NN2,
762 . N1,N2,NN,NE,K,L,NCAND_PROV,J_STOK,NI,
763 . ISTOP,NB_ECN1,PROV_S(2*MVSIZ),PROV_M(2*MVSIZ),
764 . NB_NC_OLD, NB_EC_OLD, NB_NC, NB_EC,JJ,KK,
767 . bpe(nlinma+100),pe(maxsiz),bpn(nlinsa+nlinsr+100),
771 . dx,dy,dz,dsup,seuil, xx1, xx2,
772 . xmin, xmax,ymin,
ymax,zmin, zmax,
773 . xmins,ymins,zmins,xmaxs,ymaxs,zmaxs,
774 . yy1,yy2,zz1,zz2,dmx,dmy,dmz,
775 . xy1,xy2,xz1,xz2,ximin,ximax,xjmin,xjmax,xkmin,xkmax,
776 . timin,timax,tjmin,tjmax,tkmin,tkmax,tsmin,tsmax,
777 . txmin, txmax,tymin, tymax,tzmin, tzmax
799 IF(stfm(i)/=zero)
THEN
811 IF(stfs(i)/=zero)
THEN
814 xmins =
min(xa(1,n1),xa(1,n2))
815 ymins =
min(xa(2,n1),xa(2,n2))
816 zmins =
min(xa(3,n1),xa(3,n2))
817 xmaxs =
max(xa(1,n1),xa(1,n2))
818 ymaxs =
max(xa(2,n1),xa(2,n2))
819 zmaxs =
max(xa(3,n1),xa(3,n2))
820 IF(xmaxs>=xmin.AND.xmins<=xmax.AND.
821 . ymaxs>=ymin.AND.ymins<=
ymax.AND.
822 . zmaxs>=zmin.AND.zmins<=zmax)
THEN
831 DO i = nlinsa+1, nlinsa+nlinsr
847 dx = xyzm(4,i_add) - xyzm(1,i_add)
848 dy = xyzm(5,i_add) - xyzm(2,i_add)
849 dz = xyzm(6,i_add) - xyzm(3,i_add)
876 xx1=xa(1, ixlinm(1,ne))
877 xx2=xa(1, ixlinm(2,ne))
878 xmin=
min(xmin,xx1,xx2)
879 xmax=
max(xmax,xx1,xx2)
881 yy1=xa(2, ixlinm(1,ne))
882 yy2=xa(2, ixlinm(2,ne))
883 ymin=
min(ymin,yy1,yy2)
886 zz1=xa(3, ixlinm(1,ne))
887 zz2=xa(3, ixlinm(2,ne))
888 zmin=
min(zmin,zz1,zz2)
889 zmax=
max(zmax,zz1,zz2)
940 ymin =
max(ymin - tzinf , xyzm(2,i_add))
941 zmin =
max(zmin - tzinf , xyzm(3,i_add))
942 xmax =
min(xmax + tzinf , xyzm(4,i_add))
944 zmax =
min(zmax + tzinf , xyzm(6,i_add))
957 dsup =
max(dmx,dmy,dmz)
963 seuil = (ymin+
ymax)*0.5
976 ELSE IF(dmz==dsup)
THEN
980 seuil = (zmin+zmax)*0.5
997 seuil = (xmin+xmax)*0.5
1012 tsmin = seuil - tzinf
1013 tsmax = seuil + tzinf
1037 xx1=xa(dir,ixlins(1,nn))
1038 xx2=xa(dir,ixlins(2,nn))
1039 xy1=xa(jj, ixlins(1,nn))
1040 xy2=xa(jj, ixlins(2,nn))
1041 xz1=xa(kk, ixlins(1,nn))
1042 xz2=xa(kk, ixlins(2,nn))
1054 IF(xmin<seuil.AND.xmax>=ximin)
THEN
1055 IF(i11insid(xx1,xx2,xy1,xy2,xz1,xz2,
1056 . ximin,seuil,xjmin,xjmax,xkmin,xkmax))
THEN
1058 nb_ncn1 = nb_ncn1 + 1
1063 IF(xmax>=seuil.AND.xmin<=ximax)
THEN
1064 IF(i11insid(xx1,xx2,xy1,xy2,xz1,xz2,
1065 . seuil,ximax,xjmin,xjmax,xkmin,xkmax))
THEN
1104 xx1=xa(dir, ixlinm(1,ne))
1105 xx2=xa(dir, ixlinm(2,ne))
1106 IF(
max(xx1,xx2)>=tsmin)
THEN
1107 xy1=xa(jj, ixlinm(1,ne))
1108 xy2=xa(jj, ixlinm(2,ne))
1109 xz1=xa(kk, ixlinm(1,ne))
1110 xz2=xa(kk, ixlinm(2,ne))
1111 IF(i11insid(xx1,xx2,xy1,xy2,xz1,xz2,
1112 . tsmin,timax,tjmin,tjmax,tkmin,tkmax))
THEN
1119 ELSEIF(nb_ncn==0)
THEN
1122 xx1=xa(dir, ixlinm(1,ne))
1123 xx2=xa(dir, ixlinm(2,ne))
1124 IF(
min(xx1,xx2)<tsmax)
THEN
1125 xy1=xa(jj, ixlinm(1,ne))
1126 xy2=xa(jj, ixlinm(2,ne))
1127 xz1=xa(kk, ixlinm(1,ne))
1129 IF(i11insid(xx1,xx2,xy1,xy2,xz1,xz2,
1130 . timin,tsmax,tjmin,tjmax,tkmin,tkmax))
THEN
1133 nb_ecn1= nb_ecn1 + 1
1141 xx1=xa(dir, ixlinm(1,ne))
1142 xx2=xa(dir, ixlinm(2,ne))
1143 xy1=xa(jj, ixlinm(1,ne))
1144 xy2=xa(jj, ixlinm(2,ne))
1145 xz1=xa(kk, ixlinm(1,ne))
1146 xz2=xa(kk, ixlinm(2,ne))
1147 IF(
min(xx1,xx2)<tsmax)
THEN
1148 IF(i11insid(xx1,xx2,xy1,xy2,xz1,xz2,
1149 . timin,tsmax,tjmin,tjmax,tkmin,tkmax))
THEN
1152 nb_ecn1= nb_ecn1 + 1
1156 IF(
max(xx1,xx2)>=tsmin)
THEN
1157 IF(i11insid(xx1,xx2,xy1,xy2,xz1,xz2,
1158 . tsmin,timax,tjmin,tjmax,tkmin,tkmax))
THEN
1169 add(1,i_add+1) = addnn
1170 add(2,i_add+1) = addne
1177 xyzm(1,i_add+1) = xyzm(1,i_add)
1178 xyzm(2,i_add+1) = xyzm(2,i_add)
1179 xyzm(3,i_add+1) = xyzm(3,i_add)
1180 xyzm(4,i_add+1) = xyzm(4,i_add)
1181 xyzm(5,i_add+1) = xyzm(5,i_add)
1182 xyzm(6,i_add+1) = xyzm(6,i_add)
1183 xyzm(dir ,i_add) = ximin
1184 xyzm(dir+3,i_add) = seuil
1185 xyzm(dir ,i_add+1) = seuil
1186 xyzm(dir+3,i_add+1) = ximax
1188 nb_old(1,i_add)=nb_nc
1189 nb_old(2,i_add)=nb_ec
1190 nb_old(1,i_add+1)=nb_nc
1191 nb_old(2,i_add+1)=nb_ec
1197 IF(i_add+1>=i_add_max)
THEN
1214 IF(add(1,i_add)+nb_nc>maxsiz)
THEN
1219 IF(add(2,i_add)+nb_ec>maxsiz)
THEN
1227 IF(nb_ec/=0.AND.nb_nc/=0)
THEN
1229 dx = xyzm(4,i_add) - xyzm(1,i_add)
1230 dy = xyzm(5,i_add) - xyzm(2,i_add)
1231 dz = xyzm(6,i_add) - xyzm(3,i_add)
1238 IF(nb_ec+nb_nc<=128)
THEN
1239 ncand_prov = nb_ec*nb_nc
1244 nb_nc_old = nb_old(1,i_add)
1245 nb_ec_old = nb_old(2,i_add)
1248 . nb_nc<=nb_n_b.OR.nb_ec<=nb_n_b.OR.
1249 . ncand_prov<=128.OR.(nb_ec==nb_ec_old
1250 . .AND.nb_nc==nb_nc_old))
THEN
1252 ncand_prov = nb_ec*nb_nc
1253 DO k=1,ncand_prov,nvsiz
1254 DO l=k,
min(k-1+nvsiz,ncand_prov)
1264 IF(iauto==0 .OR. itab(nlg(n1))>itab(nlg(nn1)) )
THEN
1265 IF(nn1/=n1.AND.nn1/=n2.AND.
1266 . nn2/=n1.AND.nn2/=n2)
THEN
1275 nn1 = nint(xrem(9,ni))
1276 nn2 = nint(xrem(17,ni))
1283 IF(iauto==0 .OR. n1>nn1 )
THEN
1284 IF(nn1/=n1.AND.nn1/=n2.AND.
1285 . nn2/=n1.AND.nn2/=n2)
THEN
1293 IF(j_stok>=nvsiz)
THEN
1295 1 nvsiz,ixlins,ixlinm,xa ,ii_stoke,
1296 2 cand_s,cand_m,nsn4 ,noint ,tzinf ,
1297 3 i_mem ,prov_s,prov_m,eshift,addcm ,
1298 4 chaine,nlinsa ,nin )
1300 j_stok = j_stok-nvsiz
1301#include "vectorize.inc"
1303 prov_s(j) = prov_s(j+nvsiz)
1304 prov_m(j) = prov_m(j+nvsiz)
1334 1 j_stok,ixlins,ixlinm,xa ,ii_stoke,
1335 2 cand_s,cand_m,nsn4 ,noint ,tzinf ,
1336 3 i_mem ,prov_s,prov_m,eshift,addcm ,
1337 4 chaine,nlinsa ,nin )
subroutine i20tri(add, nsn, renum, nsnr, isznsnr, irect, xa, stf, stfa, xyzm, i_add, nsv, maxsiz, ii_stok, cand_n, cand_e, mulnsn, noint, tzinf, maxbox, minbox, i_mem, nb_n_b, i_add_max, eshift, inacti, ifq, cand_a, cand_p, ifpen, nrtm, nsnrold, igap, gap, gap_s, gap_m, gapmin, gapmax, marge, curv_max, nin, gap_sh, nbinflg, mbinflg, isym, intheat, idt_therm, nodadt_therm)