57 1 IXS ,IXQ ,IXC ,IXT ,IXP ,
58 2 IXR ,IXTG ,CEP ,GEO ,
59 3 ITRI1 ,ITRI2 ,INDEX1 ,INDEX2 ,NUM ,
60 4 WD ,IWCONT ,NELEM ,IDDLEVEL,NELEMINT,
61 5 INTER_CAND,PM ,X ,KXX ,IXX ,
62 6 ADSKY ,IGEO ,ISOLNOD,IWCIN2 ,DSDOF ,
63 7 ISOLOFF,ISHEOFF,ITRIOFF,ITRUOFF ,IPOUOFF ,
64 8 IRESOFF,IELEM21,IPM ,IXS10 ,IKINE ,
65 9 CLUSTERS,KXIG3D ,IXIG3D,COST_R2R,BUFMAT,
66 1 TAILLE,POIN_UMP,TAB_UMP,
67 2 POIN_UMP_OLD,TAB_UMP_OLD,CPUTIME_MP_OLD,
68 3 NSNT, NMNT,TABMP_L,IQUAOFF,
70 5 ITAB ,IPART ,IPARTC ,IPARTG ,IPARTS ,
71 6 POIN_PART_SHELL,POIN_PART_TRI,POIN_PART_SOL,
72 7 MID_PID_SHELL,MID_PID_TRI,MID_PID_SOL,T_MONVOL,
73 8 EBCS_TAG_CELL_SPMD,NPBY,LPBY,MAT_PARAM)
89 USE format_mod ,
ONLY : fmw_a_i
93#include
"implicit_f.inc"
100#include "scr12_c.inc"
101#include "param_c.inc"
102#include "units_c.inc"
103#include "scr15_c.inc"
104#include "scr05_c.inc"
105#include "scr17_c.inc"
106#include "scr23_c.inc"
109#include "kincod_c.inc"
114 INTEGER IXS(NIXS,*), IXQ(NIXQ,*), IXC(NIXC,*), IXT(NIXT,*),
115 . IXP(NIXP,*), IXR(NIXR,*), IXTG(NIXTG,*),
116 . CEP(*), ITRI1(*), ITRI2(*), INDEX1(*),INDEX2(*),
117 . NUM(*), NELEM,IDDLEVEL, NELEMINT,
118 . KXX(,NUMELX),IXX(*), ADSKY(0:*),(NPROPGI,NUMGEO),
119 . ISOLNOD(*), IWCONT(5,*), IWCIN2(2,*), (*),
120 . ISOLOFF(*), ISHEOFF(*), ITRIOFF(*), IKINE(*)
127 INTEGER,
DIMENSION(LIPART1,*),
INTENT(IN) :: IPART
128 INTEGER,
DIMENSION(*),
INTENT(IN) :: IPARTC,IPARTG,IPARTS
129 TYPE () ,
DIMENSION(*) :: CLUSTERS
130 my_real GEO(NPROPG,NUMGEO), PM(NPROPM,NUMMAT), X(3,*), COST_R2R,BUFMAT(*)
133 INTEGER,
DIMENSION(NUMMAT_OLD) :: POIN_UMP_OLD
134 INTEGER,
DIMENSION(7,TAILLE_OLD) :: TAB_UMP_OLD
135 INTEGER,
DIMENSION(NUMMAT) :: POIN_UMP
136 INTEGER,
DIMENSION(7,TAILLE) :: TAB_UMP
137 my_real,
DIMENSION(TAILLE_OLD) :: CPUTIME_MP_OLD
138 INTEGER,
DIMENSION(2,NPART),
INTENT(IN) :: ,POIN_PART_TRI
139 INTEGER,
DIMENSION(2,NPART,7),
INTENT(IN) :: POIN_PART_SOL
140 TYPE(MID_PID_TYPE),
DIMENSION(NUMMAT),
INTENT(IN) :: MID_PID_SHELL,MID_PID_TRI
141 TYPE(MID_PID_TYPE),
DIMENSION(NUMMAT,7),
INTENT(IN) :: MID_PID_SOL
142 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
144 INTEGER,
INTENT(IN) :: EBCS_TAG_CELL_SPMD(NUMELQ+NUMELTG+NUMELS)
145 INTEGER,
DIMENSION(NNPBY,*),
INTENT(in) :: NPBY
146 INTEGER,
DIMENSION(*),
INTENT(in) :: LPBY
148 TYPE(matparam_struct_) ,
DIMENSION(NUMMAT),
INTENT(IN) :: MAT_PARAM
153 parameter(ncritmax = 20)
154 INTEGER NSEG, I, J, UTIL, K, NUSE, ELEMD_OLD,
155 . lcne,io_err1,ish1,ish2,ii, nnc, it,
156 . nedges, elk, off,cc1, cc2, numg1, numg2,
157 . ined,l,m,n,newedge,nedges_old,
158 . lenwork,nod1, nod2, mode, nelem0, mm,
159 . work(70000), numl, ierror,
160 . elemd, immnul, neddel, itypint, iwarn1,
161 . maxi, maxj,
max, i1, i2, i3, n1, n2, numg3, numg4,
162 . nelx,addx,mid,pid,jale,mln,nshift,nnode, nn,
163 . options(40),ncond,nflag,iwflg,nodc,icur,ierr1,nec,
164 . inwdcount,iccand,icnod_sms,isolbar, ickin, nk, nki,
165 . icelem, icints, icintm, icint2, icddl, icfsi, icdel, icsol,
166 . icr2r,numel_r2r, cepcluster,
167 . nconnx, curr, prev, next, i1old, i2old, inc, idb_metis,
168 . nelig3d,ncond2,lsms,
169 . offc,offtg,k0,ityp,
170 . nn_l,is,iad,ity,kad,jale_from_mat, jale_from_prop
171 INTEGER,
DIMENSION(:),
ALLOCATABLE :: XADJ, ADJNCY,IWD,IWD2,
172 . IENDT,ITRI,INDEX,DOMCLUSTER,ELEMCLUST,
173 . XADJ_OLD, ADJNCY_OLD, COLORS, ROOTS,
174 . POINTER_NEIGH,CONNECT_WEIGHT,TAGELEM,CNE,
176 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IWKIN
177 INTEGER TAILLE_LOCAL,PREV_NEIGH,C_NEIGH,POINT_DELETE,
178 . ELEMNODES(MAX_NB_NODES_PER_ELT),OFFELEM(10),WGHT
179 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: CONNECTIVITY
180 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NB_NODES_MINI
181 REAL,
DIMENSION(:),
ALLOCATABLE :: RWD,WD_COPY
182 CHARACTER FILNAM*109, KEYA*80, CHLEVEL*1
185 . AVERAGE(NCRITMAX), DEVIATION(), DMIN(NCRITMAX), DMAX(NCRITMAX),
186 . W(NSPMD), WIS(NSPMD),WIM(NSPMD),WI2(NSPMD), WDDL(NSPMD),
187 . WFSI(NSPMD), WCAND(NSPMD), WSOL(NSPMD), WKIN(NSPMD),
188 . wdel(nspmd), wr2r(nspmd), wnod_sms(nspmd)
189 DOUBLE PRECISION :: WS, WD_MAX,WD_MAX0
192 INTEGER METIS_PartGraphKway, METIS_PartGraphRecursive,
195 INTEGER NNO,NNS,NTG,NNI,NTGT,NTGI
197 INTEGER NFVMBAG,NB_FVMBAG_TRIM,DD_FVMBAG_TRY
198 INTEGER FVM_ELEM(NVOLU),AVG,MAX_TRY
199 INTEGER WD_MAX_FACTOR
200 INTEGER NB_ELEM_ALE,MAIN_TARGET
201 CHARACTER (LEN=255) :: STR
202 LOGICAL :: FVM_DOMDEC,DD_UNBALANCED
203 LOGICAL,
DIMENSION(:),
ALLOCATABLE :: TAGGED_ELEM
204 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ISORT,INDEX_SORT
206 INTEGER (kind=8) :: NEDGES_8
207 INTEGER :: CLUSTER_TYP,OFFSET_CLUSTER
208 my_real,
DIMENSION(:,:),
ALLOCATABLE :: COORDS
209 my_real,
DIMENSION(:),
ALLOCATABLE :: min_dist
211 my_real :: xmin(3),xmax(3)
218 INTEGER :: number_of_added_edges
219 INTEGER :: refused_cep0, refused_numg,refused_numg0
220 INTEGER :: switch_tried, switch_done
222 integer,
pointer :: null_int(:)
223 real,
pointer :: null_real(:)
229 INTEGER :: NUMBER_OF_ELEMENT_RBODY,NUMEL
230 INTEGER,
DIMENSION(:),
ALLOCATABLE :: LIST_ELEMENT_RBODY
235 EXTERNAL metis_partgraphkway, metis_partgraphrecursive,
241 ALLOCATE(iwkin(numnod))
242 number_of_added_edges = 0
253 fvm_elem(1:nvolu) = 0
269 adsky(n) = adsky(n) + 1
277 adsky(n) = adsky(n) + 1
285 adsky(n) = adsky(n) + 1
291 adsky(n) = adsky(n) + 1
297 adsky(n) = adsky(n) + 1
303 adsky(n) = adsky(n) + 1
310 adsky(n) = adsky(n) + 1
315 IF(nint(geo(12,ixr(1,i)))==12)
THEN
316 adsky(n) = adsky(n) + 1
323 adsky(n) = adsky(n) + 1
341 addx = kxig3d(4,i)+k-1
349 adsky(i) = adsky(i) + adsky(i-1)
352 lcne = adsky(numnod+1)
353 ALLOCATE(cne(lcne),stat=ierr1)
356 CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,
368 filnam=rootnam(1:rootlen)//
'_0001.rad'
369 OPEN(unit=71,file=filnam(1:rootlen+9),
370 . access=
'SEQUENTIAL',status=
'OLD',iostat=io_err1)
373 filnam=rootnam(1:rootlen)//'d01
'
374 OPEN(UNIT=71,FILE=FILNAM(1:ROOTLEN+3),
375 . ACCESS='sequential
',STATUS='old
',IOSTAT=IO_ERR1)
379 OPEN(UNIT=72,FORM='formatted',status=
'SCRATCH')
381 10
READ(71,
'(A)',
END=20) keya
383 IF(keya(1:12)==
'/DEL/SHELL/1')
THEN
384 30
READ(71,
'(A)',
END=20) keya
385 IF(keya(1:1)==
'#')
GOTO 30
386 IF(keya(1:1)==
'$')
GOTO 30
387 IF(keya(1:1)==
'/')
GOTO 11
392 READ(72,*,
END=20)ISH1,ish2
394 IF(ixc(nixc,i)>=ish1.AND.ixc(nixc,i)<=ish2)
THEN
396 IF(ixc(nixc,i)==j)
THEN
397 wd(i+numels+numelq) = 0.0001
406 ELSEIF(keya(1:12)==
'/DEL/BRICK/1')
THEN
407 60
READ(71,
'(A)',
END=20) keya
408 IF(keya(1:1)==
'#')
GOTO 60
409 IF(keya(1:1)==
'$')
GOTO 60
410 IF(keya(1:1)==
'/')
GOTO 11
419 IF(ixs(nixs,i)==j)
THEN
430 ELSEIF(keya(1:12)==
'/DEL/SH_3N/1')
THEN
431 90
READ(71,
'(A)',
END=20) keya
432 IF(keya(1:1)==
'#')
GOTO 90
433 IF(keya(1:1)==
'$')
GOTO 90
434 IF(keya(1:1)==
'/')
GOTO 11
439 READ(72,*,
END=20)ISH1,ish2
441 IF(ixtg(nixtg,i)>=ish1
442 . .AND.ixtg(nixtg,i)<=ish2)
THEN
444 IF(ixtg(nixtg,i)==j)
THEN
445 wd(i+numels+numelq+numelc+numelt
446 . +numelp+numelr) = 0.0001
464 .
' SPMD IS CHECKING FOR ELEMENT DELETION IN : ',
' '//filnam
472 .
' SPMD IS NOT ABLE TO CHECK FOR ELEMENT DELETION IN'//
473 .
' RADIOSS ENGINE INPUT FILE'
483 IF((isoloff(ii)==1.OR.isoloff(ii)==3).AND.
484 * wd(ii)/=0.0001)
THEN
490 pid = abs(ixs(10,ii))
491 jale_from_mat = nint(pm(72,mid))
492 jale_from_prop = igeo(62,pid)
493 jale =
max(jale_from_mat, jale_from_prop)
494 mln = nint(pm(19,mid))
495 IF(jale==0.AND.(mln==28.OR.mln==68))
THEN
501 IF((iquaoff(ii)==1.OR.iquaoff(ii)==3).AND.
502 * wd(ii+numels)/=0.0001)
THEN
503 wd(ii+numels) = 0.0001
509 IF((isheoff(ii)==1.OR.isheoff(ii)==3).AND.
510 * wd(ii+numels+numelq)/=0.0001)
THEN
511 wd(ii+numels+numelq) = 0.0001
517 IF((itruoff(ii)==3 ).AND.
518 * wd(ii+numels+numelq+numelc)/=0.0001 )
THEN
519 wd(ii+numels+numelq+numelc) = 0.0001
525 IF((ipouoff(ii)==3 ).AND.
526 * wd(ii+numels+numelq+numelc+numelt)/=0.0001 )
THEN
527 wd(ii+numels+numelq+numelc+numelt) = 0.0001
533 IF((iresoff(ii)==3 ).AND.
534 * wd(ii+numels+numelq+numelc+numelt+numelp)/=0.0001 )
THEN
535 wd(ii+numels+numelq+numelc+numelt+numelp) = 0.0001
541 IF(itrioff(ii)==1.AND.wd(ii+numels+numelq+numelc+numelt
542 . +numelp+numelr)/=0.0001)
THEN
543 wd(ii+numels+numelq+numelc+numelt
544 . +numelp+numelr) = 0.0001
552 IF(float(nelem-elemd)/float(nelem)>zep95) elemd = 0
554 IF(iddlevel==0.AND.elemd>elemd_old)
THEN
557 .
' DOMAIN DECOMPOSITION OPTIMIZED FOR ELEMENT DEACTIVATION'//
558 .
' IN /RBODY OPTIONS'
562 IF (iddlevel==1)
THEN
565 .
' --------------------------------------'
567 .
' NEW DOMAIN DECOMPOSITION FOR OPTIMIZATION'
569 .
' --------------------------------------'
571 WRITE(istdo,
'(A)')
' .. DOMAIN DECOMPOSITION'
575 .
' DOMAIN DECOMPOSITION USING MULTILEVEL KWAY'
576 ELSEIF(dectyp==4)
THEN
578 .
' DOMAIN DECOMPOSITION USING MULTILEVEL RSB'
579 ELSEIF(dectyp==5)
THEN
581 .
' DOMAIN DECOMPOSITION USING MULTILEVEL KWAY FOR IMPLICIT AND AMS'
582 ELSEIF(dectyp==4)
THEN
584 .
' DOMAIN DECOMPOSITION USING MULTILEVEL RSB FOR IMPLICIT'
587 .
' ------------------------------------------'
590 .
' DOMAIN DECOMPOSITION OPTIMIZED FOR PARALLEL ARITHMETIC ON'
593 .
' DOMAIN DECOMPOSITION OPTIMIZED FOR PARALLEL ARITHMETIC OFF'
596 IF(iddlevel == 1 .AND. ddnod_sms /= 0)
THEN
598 .
' ADDITIONAL OPTIMIZATION OF DOMAIN DECOMPOSITION FOR AMS (DOMDEC=7)'
604 ALLOCATE(tagelem(nelem))
614 adsky(n) = adsky(n) + 1
621 tagelem(abs(-(numels8+j)))=2
625 cne(adsky(n)) = -(numels8+j)
626 adsky(n) = adsky(n) + 1
641 cne(adsky(n)) = i+off
642 adsky(n) = adsky(n) + 1
653 cne(adsky(n)) = i+off
654 adsky(n) = adsky(n) + 1
666 cne(adsky(n)) = i+off
667 adsky(n) = adsky(n) + 1
678 cne(adsky(n)) = i+off
679 adsky(n) = adsky(n) + 1
690 cne(adsky(n)) = i+off
691 adsky(n) = adsky(n) + 1
693 IF(nint(geo(12,ixr(1,i)))==12)
THEN
695 cne(adsky(n)) = i+off
696 adsky(n) = adsky(n) + 1
707 cne(adsky(n)) = i+off
708 adsky(n) = adsky(n) + 1
724 cne(adsky(n)) = i+off
725 adsky(n) = adsky(n) + 1
736 addx = kxig3d(4,i)+k-1
738 cne(adsky(n)) = i+off
739 adsky(n) = adsky(n) + 1
743 offelem(10)=numelig3d
744 off = off + numelig3d
748 adsky(i) = adsky(i-1)
769 itypint=abs(inter_cand%IXINT(6,i))
772 ELSEIF(itypint == 7 .OR. itypint
THEN
776 ELSEIF(itypint == 24 .OR. itypint == 25)
THEN
791 IF((icints+icintm>100) .AND.
792 + (nelem < icints+icintm .OR.
793 + float(nelem-icints-icintm)/float(nelem)<=zep95))
THEN
799 IF(nsnt+nmnt>100)
THEN
809 IF((icint2>100) .AND.
810 + (nelem < icint2 .OR.
811 + float(nelem-icint2)/float(nelem)<=zep98))
THEN
818 IF((iccand>100) .AND.
819 + (nelem < iccand .OR.
820 + float(nelem-iccand)/float(nelem)<=zep95))
THEN
842 nki=iwl(ikine(i))+irb(ikine(i))+irb2(ikine(i))
843 + +irbm(ikine(i))+irlk(ikine(i))+ijo(ikine
844 + +ikrbe2(ikine(i))+ikrbe3(ikine(i))
849 IF(float(numnod-nk)/float(numnod)>zep95) nk = 0
856 IF(dectyp==5.OR.dectyp==6)
THEN
867 IF(ilag==1.AND.(iale==1.OR.ieuler==1))
THEN
874 jale_from_mat = nint(pm(72,mid))
875 jale_from_prop = igeo(62,pid)
876 jale =
max(jale_from_mat, jale_from_prop)
877 IF(jale==0.AND.mln/=18)
THEN
880 nb_elem_ale = nb_elem_ale + 1
884 IF (nelem - nb_elem_ale < 128 * nspmd)
THEN
889 .
' DOMAIN DECOMPOSITION OPTIMIZED FOR ALE (1)'
890 ELSEIF( nb_elem_ale*2 > nelem )
THEN
894 IF(icddl/=0) icddl = icddl + 1
895 IF(icints/=0) icints = icints + 1
896 IF(icintm/=0) icintm = icintm + 1
897 IF(icint2/=0) icint2 = icint2 + 1
898 IF(ickin/=0) ickin = ickin + 1
899 IF(icnod_sms/=0) icnod_sms = icnod_sms +1
900 IF(icdel/=0) icdel = icdel + 1
901 IF(iccand/=0) iccand = iccand + 1
903 .
' DOMAIN DECOMPOSITION OPTIMIZED FOR ALE (2)'
904 ELSEIF ( nb_elem_ale*4 > nelem)
THEN
908 IF(icddl/=0) icddl = icddl + 1
909 IF(icints/=0) icints = icints + 1
910 IF(icintm/=0) icintm = icintm + 1
911 IF(icint2/=0) icint2 = icint2 + 1
912 IF(ickin/=0) ickin = ickin + 1
913 IF(icnod_sms/=0) icnod_sms = icnod_sms +1
914 IF(icdel/=0) icdel = icdel + 1
915 IF(iccand/=0) iccand = iccand + 1
917 .
' DOMAIN DECOMPOSITION OPTIMIZED FOR FSI (3)'
922 IF(isolbar > 10000 .AND. icfsi == 0 .AND. numelc > numels)
THEN
926 .
' DOMAIN DECOMPOSITION OPTIMIZED FOR BARRIER '
939 IF (tag_elsf(i) /= 0) numel_r2r = numel_r2r+1
942 IF (tag_elcf(i) /= 0) numel_r2r = numel_r2r+1
944 IF (numel_r2r>=nspmd)
THEN
946 .
' DOMAIN DECOMPOSITION OPTIMIZED FOR MULTIDOMAINS '
952 ALLOCATE(rwd(nelem*ncond),stat=ierr1)
954 DO i = 1, ncond*nelem
958 CALL initwg(wd,pm,geo,ixs,ixq,
959 . ixc,ixt,ixp,ixr,ixtg,
960 . kxx,igeo,isolnod,iarch,
961 . numels,numelq,numelc,numelt,numelp,
962 . numelr,numeltg,numelx,ipm,
963 . bufmat,nummat,numgeo,taille,poin_ump,
964 . tab_ump,poin_ump_old,tab_ump_old,cputime_mp_old,
965 . tabmp_l,ipart,ipartc,ipartg,
966 . iparts,npart,poin_part_shell,poin_part_tri,poin_part_sol,
967 . mid_pid_shell,mid_pid_tri,mid_pid_sol,iddlevel,
977 jale_from_mat = nint(pm(72,mid))
978 jale_from_prop = igeo(62,pid)
979 jale =
max(jale_from_mat, jale_from_prop)
980 mln = nint(pm(19,mid))
981 IF (jale/=0) scal = 2.5
982 IF (mln==51) scal = 4.5
984 cost_r2r = cost_r2r + wd(i)
990 IF ((icr2r /= 0))
THEN
991 IF((tag_elsf(i) /= 0))
THEN
992 rwd(ncond*(i-1)+icr2r) = 1
995 IF(icsol /= 0) rwd(ncond*(i-1)+icsol) = 1
996 IF(isolnod(i)==4.OR.isolnod(i)==10)
THEN
1000 fac=one/(adsky(n+1)-adsky(n))
1001 nnc = nnc+adsky(n+1)-adsky(n)
1002 IF(icddl/=0)rwd(ncond*(i-1)+icddl)=rwd(ncond*(i-1)+icddl)
1005 + rwd(ncond*(i-1)+icints)=rwd(ncond*(i-1)+icints)
1008 + rwd(ncond*(i-1)+icintm) = rwd(ncond*(i-1)+icintm)
1011 + rwd(ncond*(i-1)+icint2)=rwd(ncond*(i-1)+icint2)
1012 + +(iwcin2(1,n)+iwcin2(2,n))*fac
1013 IF(ickin/=0)rwd(ncond*(i-1)+ickin)=rwd(ncond*(i
1015 IF(icnod_sms/=0)rwd(ncond*(i-1)+icnod_sms)=rwd(ncond*(i-1)+icnod_sms)
1016 + +
min(dsdof(n),1)*fac
1019 IF(isolnod(i)==10)
THEN
1025 fac=one/
max(adsky(n+1)-adsky(n),1)
1026 nnc = nnc+adsky(n+1)-adsky(n)
1027 IF(icddl/=0)rwd(ncond*(i-1)+icddl)=rwd(ncond*(i-1)+icddl)
1030 + rwd(ncond*(i-1)+icints)=rwd(ncond*(i-1)+icints)
1033 + rwd(ncond*(i-1)+icintm) = rwd(ncond*(i-1)+icintm)
1036 + rwd(ncond*(i-1)+icint2)=rwd(ncond*(i-1)+icint2)
1037 + +(iwcin2(1,n)+iwcin2(2,n))*fac
1038 IF(ickin/=0)rwd(ncond*(i-1)+ickin)=rwd(ncond*(i-1)+ickin)
1040 IF(icnod_sms/=0)rwd(ncond*(i-1)+icnod_sms)=rwd(ncond*(i-1)+icnod_sms)
1041 + +
min(dsdof(n),1)*fac
1053 fac=one/
max(adsky(n+1)-adsky(n),1)
1054 nnc = nnc+adsky(n+1)-adsky(n)
1055 IF(icddl/=0)rwd(ncond*(i-1)+icddl)=rwd(ncond*(i-1)+icddl)
1058 + rwd(ncond*(i-1)+icints)=rwd(ncond*(i-1)+icints)
1061 + rwd(ncond*(i-1)+icintm) = rwd(ncond*(i-1)+icintm)
1064 + rwd(ncond*(i-1)+icint2)=rwd(ncond*(i-1)+icint2)
1065 + +(iwcin2(1,n)+iwcin2(2,n))*fac
1066 IF(ickin/=0)rwd(ncond*(i-1)+ickin)=rwd(ncond*(i-1)+ickin)
1068 IF(icnod_sms/=0)rwd(ncond*(i-1)+icnod_sms)=rwd(ncond*(i-1)+icnod_sms)
1069 + +
min(dsdof(n),1)*fac
1085 IF (icr2r /= 0)
THEN
1086 IF (tag_elcf(i) /= 0)
THEN
1087 rwd(ncond*(i+off-1)+icr2r) = 1
1093 fac=one/(adsky(n+1)-adsky(n))
1094 nnc = nnc+adsky(n+1)-adsky(n)
1095 IF(icddl/=0)rwd(ncond*(i+off-1)+icddl) =
1096 + rwd(ncond*(i+off-1)+icddl) + dsdof(n)*fac
1098 + rwd(ncond*(i+off-1)+icints) = rwd(ncond*(i+off-1)+icints)
1101 + rwd(ncond*(i+off-1)+icintm) = rwd(ncond*(i+off-1)+icintm)
1104 + rwd(ncond*(i+off-1)+icint2) = rwd(ncond*(i+off-1)+icint2)
1105 + + (iwcin2(1,n)+iwcin2(2,n))*fac
1106 IF(ickin/=0)rwd(ncond*(i+off-1)+ickin)=
1107 + rwd(ncond*(i+off-1)+ickin) + iwkin(n)*fac
1108 IF(icnod_sms/=0)rwd(ncond*(i+off-1)+icnod_sms)=rwd(ncond*(i+off-1)+icnod_sms)
1109 + +
min(dsdof(n),1)*fac
1122 fac=one/(adsky(n+1)-adsky(n))
1123 nnc = nnc+adsky(n+1)-adsky(n)
1124 IF(icddl/=0)rwd(ncond*(i+off-1)+icddl) =
1125 + rwd(ncond*(i+off-1)+icddl) + dsdof(n)*fac
1127 + rwd(ncond*(i+off-1)+icints) = rwd(ncond*(i+off-1)+icints)
1130 + rwd(ncond*(i+off-1)+icintm) = rwd(ncond*(i+off-1)+icintm)
1133 + rwd(ncond*(i+off-1)+icint2) = rwd(ncond*(i+off-1)+icint2)
1134 + + (iwcin2(1,n)+iwcin2(2,n))*fac
1135 IF(ickin/=0)rwd(ncond*(i+off-1)+ickin)=
1136 + rwd(ncond*(i+off-1)+ickin) + iwkin(n)*fac
1137 IF(icnod_sms/=0)rwd(ncond*(i+off-1)+icnod_sms)=rwd(ncond*(i+off-1)+icnod_sms)
1138 + +
min(dsdof(n),1)*fac
1151 fac=one/(adsky(n+1)-adsky(n))
1152 nnc = nnc+adsky(n+1)-adsky(n)
1153 IF(icddl/=0)rwd(ncond*(i+off-1)+icddl) =
1154 + rwd(ncond*(i+off-1)+icddl) + dsdof(n)*fac
1156 + rwd(ncond*(i+off-1)+icints) = rwd(ncond*(i+off-1)+icints)
1159 + rwd(ncond*(i+off-1)+icintm) = rwd(ncond*(i+off-1)+icintm)
1162 + rwd(ncond*(i+off-1)+icint2) = rwd(ncond*(i+off-1)+icint2)
1163 + + (iwcin2(1,n)+iwcin2(2,n))*fac
1164 IF(ickin/=0)rwd(ncond*(i+off-1)+ickin)=
1165 + rwd(ncond*(i+off-1)+ickin) + iwkin(n)*fac
1166 IF(icnod_sms/=0)rwd(ncond*(i+off-
1167 + +
min(dsdof(n),1)*fac
1180 fac=one/(adsky(n+1)-adsky(n))
1181 nnc = nnc+adsky(n+1)-adsky(n)
1182 IF(icddl/=0)rwd(ncond*(i+off-1)+icddl) =
1185 + rwd(ncond*(i+off-1)+icints) = rwd(ncond*(i+off-1)+icints)
1188 + rwd(ncond*(i+off-1)+icintm) = rwd(ncond*(i+off-1)+icintm)
1191 + rwd(ncond*(i+off-1)+icint2) = rwd(ncond*(i+off-1)+icint2)
1192 + + (iwcin2(1,n)+iwcin2(2,n))*fac
1193 IF(ickin/=0)rwd(ncond*(i+off-1)+ickin)=
1194 + rwd(ncond*(i+off-1)+ickin) + iwkin(n)*fac
1195 IF(icnod_sms/=0)rwd(ncond
1196 + +
min(dsdof(n),1)*fac
1202 fac=one/(adsky(n+1)-adsky(n))
1203 nnc = nnc+adsky(n+1)-adsky(n)
1205 + rwd(ncond*(i+off-1)+icddl) + dsdof(n)*fac
1207 + rwd(ncond*(i+off-1)+icints) = rwd(ncond*(i+off-1)+icints)
1210 + rwd(ncond*(i+off-1)+icintm) = rwd(ncond*(i+off-1)+icintm)
1213 + rwd(ncond*(i+off-1)+icint2) = rwd(ncond*(i+off-1)+icint2)
1214 + + (iwcin2(1,n)+iwcin2(2,n))*fac
1215 IF(ickin/=0)rwd(ncond*(i+off-1)+ickin)=
1216 + rwd(ncond*(i+off-1)+ickin) + iwkin(n)*fac
1217 IF(icnod_sms/=0)rwd(ncond*(i+off-1)+icnod_sms)=rwd(ncond*(i+off-1)+icnod_sms)
1218 + +
min(dsdof(n),1)*fac
1231 fac=one/(adsky(n+1)-adsky(n))
1232 nnc = nnc+adsky(n+1)-adsky(n)
1233 IF(icddl/=0)rwd(ncond*(i+off-1)+icddl) =
1234 + rwd(ncond*(i+off-1)+icddl) + dsdof(n)*fac
1236 + rwd(ncond*(i+off-1)+icints) = rwd(ncond*(i+off-1)+icints)
1242 + rwd(ncond*(i+off-1)+icint2) = rwd(ncond*(i+off-1)+icint2)
1243 + + (iwcin2(1,n)+iwcin2(2,n))*fac
1244 IF(ickin/=0)rwd(ncond*(i+off-1)+ickin)=
1245 + rwd(ncond*(i+off-1)+ickin) + iwkin(n)*fac
1246 IF(icnod_sms/=0)rwd(ncond*(i+off-1)+icnod_sms)=rwd(ncond*(i+off-1)+icnod_sms)
1247 + +
min(dsdof(n),1)*fac
1263 fac=one/(adsky(n+1)-adsky(n))
1264 nnc = nnc+adsky(n+1)-adsky(n)
1265 IF(icddl/=0)rwd(ncond*(i+off-1)+icddl) =
1266 + rwd(ncond*(i+off-1)+icddl) + dsdof(n)*fac
1268 + rwd(ncond*(i+off-1)+icints) = rwd(ncond*(i+off-1)+icints)
1271 + rwd(ncond*(i+off-1)+icintm) = rwd(ncond*(i+off-1)+icintm)
1274 + rwd(ncond*(i+off-1)+icint2) = rwd(ncond*(i+off-1)+icint2)
1275 + + (iwcin2(1,n)+iwcin2(2,n))*fac
1276 IF(ickin/=0)rwd(ncond*(i+off-1)+ickin)=
1277 + rwd(ncond*(i+off-1)+ickin) + iwkin(n)*fac
1278 IF(icnod_sms/=0)rwd(ncond*(i+off-1)+icnod_sms)=rwd(ncond*(i+off-1)+icnod_sms)
1279 + +
min(dsdof(n),1)*fac
1289 ALLOCATE(iwd(nelem*ncond),stat=ierr1)
1291 DO i = 1, ncond*nelem
1297 . iwd(ncond*(i-1)+icints) = nint(rwd(ncond*(i-1)+icints))
1299 . iwd(ncond*(i-1)+icintm) = nint(rwd(ncond*(i-1)+icintm))
1301 . iwd(ncond*(i-1)+iccand) = nint(rwd(ncond*(i-1)+iccand))
1303 . iwd(ncond*(i-1)+icint2) = nint(rwd(ncond*(i-1)+icint2))
1305 . iwd(ncond*(i-1)+icddl)= nint(rwd(ncond*(i-1)+icddl))
1307 . iwd(ncond*(i-1)+icsol)= nint(rwd(ncond*(i-1)+icsol))
1309 . iwd(ncond*(i-1)+ickin)= nint(rwd(ncond*(i-1)+ickin))
1311 . iwd(ncond*(i-1)+icr2r)= nint(rwd(ncond*(i-1)+icr2r))
1315 . iwd(ncond*(i-1)+icnod_sms) = nint(rwd(ncond*(i-1)+icnod_sms))
1324 DO cc1 = adsky(n), adsky(n+1)-1
1327 DO cc2 = cc1+1, adsky(n+1)-1
1329 IF(numg2 > 0 .AND. numg1 /= numg2)
THEN
1337 IF (iddlevel==1) nedges = nedges+nelemint
1341 IF(nelem < 100 000 000)
THEN
1342 siddconnect = 2*10*nelem
1346 siddconnect = 2 000 000 000
1354 ALLOCATE(iddconnect%PDOM(2,siddconnect),stat=ierr1)
1355 ALLOCATE(iddconnect%IENTRYDOM(2,nelem),stat=ierr1)
1361 IF(edge_filtering == 1 .AND. (numels > nelem / 3 .OR. icfsi > 0 ))
THEN
1362 WRITE(iout,
'(A)')
"** INFO: SIMPLIFIED DOMAIN DECOMPOSITION"
1367 ALLOCATE(connectivity(max_nb_nodes_per_elt,nelem))
1368 ALLOCATE(nb_nodes_mini(nelem))
1369 connectivity(1:max_nb_nodes_per_elt,1:nelem) = 0
1370 nb_nodes_mini(1:nelem) = 3
1372 CALL find_nodes(i ,connectivity(1,i),tagelem,ixs,ixs10,
1373 1 ixq ,ixc ,ixt ,ixp,ixr,
1374 2 ixtg ,kxx ,ixx,kxig3d,
1375 3 ixig3d,geo ,offelem,nb_nodes_mini(i))
1376 CALL sort_descending(connectivity(1,i))
1379 ALLOCATE(connect_weight(nelem))
1380 ALLOCATE(pointer_neigh(nelem))
1387 nelmin = nb_nodes_mini(i)
1388 elemnodes(1:max_nb_nodes_per_elt) = connectivity(1:max_nb_nodes_per_elt,i)
1392 DO k=1,max_nb_nodes_per_elt
1393 IF ( elemnodes(k)/=0 )
THEN
1394 DO l=adsky(elemnodes(k)), adsky(elemnodes(k)+1)-1
1395 IF( cne(l) > 0 .AND. cne(l) > i)
THEN
1396 connect_weight(cne(l)) =
1397 . connect_weight(cne(l)) + 1
1398 IF( connect_weight(cne(l)) == 1 )
THEN
1399 pointer_neigh(cne(l))=prev_neigh
1400 c_neigh = c_neigh + 1
1410 IF(nelmin == 0) nelmin = 3
1411 IF (c_neigh > 0 )
THEN
1413 IF(i /= prev_neigh)
THEN
1414 IF(consider_edge(connectivity,nb_nodes_mini,nelem,i,prev_neigh))
THEN
1419 point_delete=prev_neigh
1420 prev_neigh = pointer_neigh(prev_neigh)
1421 pointer_neigh(point_delete) = 0
1422 connect_weight(point_delete) = 0
1426 DEALLOCATE(connect_weight)
1427 DEALLOCATE(pointer_neigh)
1428 DEALLOCATE(nb_nodes_mini)
1429 DEALLOCATE(connectivity)
1436 DO cc1 = adsky(n), adsky(n+1)-1
1439 DO cc2 = cc1+1, adsky(n+1)-1
1441 IF(numg2 > 0 .AND. numg1 /= numg2)
THEN
1455 nedges = nedges + taille_local
1456 nedges_8 = nedges_8 + taille_local
1462 IF (iddlevel==1)
THEN
1468 IF(ielem21(i)==1)
THEN
1477 .
' ONE OR MORE ELEMENT OF MAIN SIDE OF INTERF. TYPE21',
1478 .
' NEEDS TO BE DEACTIVATED'
1485 IF(nvolu > 0 .AND. iddlevel == 1 .AND. icfsi == 0)
THEN
1487 . wd_max,fvm_elem,fvm_domdec,itab,igrsurf,t_monvol)
1505 n=inter_cand%IXINT(5,i)
1507 numg1=abs(cne(adsky(n)))
1509 itypint=abs(inter_cand%IXINT(6,i))
1511 IF(adsky(n+1)-adsky(n)>0)
THEN
1512 n=inter_cand%IXINT(1,i
1513 n1=inter_cand%IXINT(2,i)
1514 n2=inter_cand%IXINT(3,i)
1515 DO i1 = adsky(n), adsky(n+1)-1
1517 DO i2 = adsky(n1), adsky(n1+1)-1
1519 IF(numg3==numg2)
THEN
1520 DO i3 = adsky(n2), adsky(n2+1)-1
1522 IF(numg4==numg2)
GOTO 100
1528 IF(numg1 /= numg2)
THEN
1542 IF( iwcont(4,n) > 0)
THEN
1543 DO i1 = adsky(n), adsky(n+1)-1
1545 iwd(ncond*(numg2-1)+iccand)=iwd(ncond*(numg2-1)+iccand)+iwcont(4,n)
1553 ALLOCATE(isort(nelemint))
1554 ALLOCATE(index_sort(2*nelemint))
1558 isort(i)=(-inter_cand%IXINT(6,i)) + 100
1560 itypint=abs(inter_cand%IXINT(6,i))
1562 CALL my_orders(0,work,isort,index_sort,nelemint,1)
1569 n=inter_cand%IXINT(5,i)
1573 cep_min = huge(cep_min)
1574 DO i1 = adsky(n), adsky(n+1)-1
1576 IF(cep_min > cep(numg3))
THEN
1578 cep_min = cep(numg1)
1580 IF(cep_min == 0)
EXIT
1584 itypint=abs(inter_cand%IXINT(6,i))
1586 IF(adsky(n+1)-adsky(n)>0)
THEN
1587 n=inter_cand%IXINT(1,i)
1588 n1=inter_cand%IXINT(2,i)
1589 n2=inter_cand%IXINT(3,i)
1591 DO i1 = adsky(n), adsky(n+1)-1
1593 IF(numg2 == numg1)
THEN
1597 DO i2 = adsky(n1), adsky(n1+1)-1
1599 IF(numg3 == numg1)
GOTO 107
1600 IF(numg3==numg2)
THEN
1603 IF(numg4 == numg1)
GOTO 107
1604 IF(numg4==numg2)
GOTO 107
1613 IF(numg1 /= numg2 .AND. (numg1 >0 ) .AND. (numg2 > 0))
THEN
1614 IF(cep(numg1)==0.OR.cep(numg2)==0)
THEN
1615 number_of_added_edges = number_of_added_edges + 1
1620 cep(numg1) = cep(numg1) + 1
1621 cep(numg2) = cep(numg2) + 1
1623 refused_cep0 = refused_cep0 + 1
1626 if(numg1 == numg2) refused_numg = refused_numg + 1
1627 if(numg1<=0 .OR. numg2<=0) refused_numg0 = refused_numg0 + 1
1630 IF(iccand > 0 .AND. numg2 > 0)
THEN
1633 IF(inter_cand%IXINT(6,i)<0)
THEN
1635 iwd(ncond*(numg2-1)+iccand)=iwd(ncond*(numg2-1)+iccand)+5
1637 iwd(ncond*(numg2-1)+iccand)=iwd(ncond*(numg2-1)+iccand)+1
1642 ELSEIF(itypint==11)
THEN
1643 IF(adsky(n+1)-adsky(n)>0)
THEN
1644 n1=inter_cand%IXINT(3,i)
1645 n2=inter_cand%IXINT(4,i)
1646 DO i1 = adsky(n1), adsky(n1+1)-1
1648 IF(numg2 /= numg1)
THEN
1649 DO i2 = adsky(n2), adsky(n2+1)-1
1651 IF(numg3==numg2)
GOTO 111
1656 IF(numg1 /= numg2 .AND.(numg1>0 .AND. numg2 > 0))
THEN
1657 IF(cep(numg1)==0.OR.cep(numg2)==0)
THEN
1659 number_of_added_edges = number_of_added_edges + 1
1663 cep(numg1) = cep(numg1) + 1
1664 cep(numg2) = cep(numg2) + 1
1666 refused_cep0 = refused_cep0 + 1
1669 if(numg1 == numg2) refused_numg = refused_numg + 1
1670 if(numg1<=0 .OR. numg2<=0) refused_numg0 = refused_numg0 + 1
1672 IF(iccand > 0 .AND. numg2 > 0)
THEN
1674 IF(inter_cand%IXINT(6,i)<0)
THEN
1675 iwd(ncond*(numg2-1)+iccand)=iwd(ncond*(numg2-1)+iccand)+1
1677 iwd(ncond*(numg2-1)+iccand)=iwd(ncond*(numg2-1)+iccand)+1
1682 ELSEIF(itypint==24.OR.itypint==25)
THEN
1683 IF(adsky(n+1)-adsky(n)>0)
THEN
1684 n=inter_cand%IXINT(1,i)
1685 n1=inter_cand%IXINT(2,i)
1686 n2=inter_cand%IXINT(3,i)
1687 DO i1 = adsky(n), adsky(n+1)-1
1689 IF(numg2 == numg1)
GOTO 124
1690 IF(numg2 /= numg1)
THEN
1691 DO i2 = adsky(n1), adsky(n1+1)-1
1693 IF(numg3 == numg1)
GOTO 124
1694 IF(numg3==numg2)
THEN
1695 DO i3 = adsky(n2), adsky(n2+1)-1
1697 IF(numg4 == numg1)
GOTO 124
1698 IF(numg4==numg2)
GOTO 124
1705 IF(numg1 /= numg2 .AND. (numg1>0 .AND. numg2 > 0))
THEN
1706 IF(cep(numg1)==0.OR.cep(numg2)==0)
THEN
1707 number_of_added_edges = number_of_added_edges + 1
1711 cep(numg1) = cep(numg1) + 1
1712 cep(numg2) = cep(numg2) + 1
1714 refused_cep0 = refused_cep0 + 1
1717 if(numg1 == numg2) refused_numg = refused_numg + 1
1718 if(numg1<=0 .OR. numg2<=0) refused_numg0 = refused_numg0 + 1
1720 IF(iccand > 0 .AND. numg2 > 0)
THEN
1721 IF(inter_cand%IXINT(6,i)<0)
THEN
1722 iwd(ncond*(numg2-1)+iccand)=iwd(ncond*(numg2-1)+iccand)+5
1724 iwd(ncond*(numg2-1)+iccand)=iwd(ncond*(numg2-1)+iccand)+1
1736 ALLOCATE(colors(nelem+1),stat=ierr1)
1737 ALLOCATE(roots(nelem),stat=ierr1)
1738 CALL plist_bfs(nelem,nconnx,colors,roots)
1741 ALLOCATE(min_dist(nconnx))
1742 ALLOCATE(coords(3,nconnx))
1745 CALL find_nodes(roots(i) ,elemnodes,tagelem,ixs,ixs10,
1746 1 ixq ,ixc ,ixt ,ixp,ixr,
1747 2 ixtg ,kxx ,ixx,kxig3d,
1748 3 ixig3d,geo ,offelem,nelmin)
1750 IF(elemnodes(1) /= 0)
THEN
1751 coords(1:3,i) = x(1:3,elemnodes(1))
1753 coords(1:3,i) = zero
1759 min_dist(1:nconnx) = huge(1.0)
1762 IF(numg1 /= numg2)
THEN
1763 min_dist(j) = (coords(1,i)-coords(1,j))**2
1764 . + (coords(2,i)-coords(2,j))**2
1765 . + (coords(3,i)-coords(3,j))**2
1769 dist = minval(min_dist(1:nconnx))
1773 IF(numg1 /= numg2 .AND. min_dist(j) < 2.0*dist)
THEN
1782 DEALLOCATE(min_dist)
1784 DEALLOCATE(index_sort,isort)
1799 nedges = nedges + taille_local
1800 nedges_8 = nedges_8 + taille_local
1803 nedges_8 = nedges_8 / 2
1806 IF(
ALLOCATED(tagelem))
DEALLOCATE(tagelem)
1820 IF(iddlevel/=0)
THEN
1821 numel = numels+numelq+numelc+numelt+numelp+numelr
1822 . + numeltg+numelx+numsph+numelig3d
1833 number_of_element_rbody = 0
1838 DO ijk = adsky(i),adsky(i+1)-1
1839 number_of_element_rbody = number_of_element_rbody + 1
1844 DO ijk = adsky(m),adsky(m+1)-1
1845 number_of_element_rbody = number_of_element_rbody + 1
1848 ALLOCATE( list_element_rbody(number_of_element_rbody) )
1851 number_of_element_rbody = 0
1856 DO ijk = adsky(i),adsky(i+1)-1
1858 numg2 = abs(cne(cc2))
1859 number_of_element_rbody = number_of_element_rbody + 1
1860 list_element_rbody( number_of_element_rbody ) = numg2
1866 DO ijk = adsky(m),adsky(m+1)-1
1868 numg2 = abs(cne(cc2))
1869 number_of_element_rbody = number_of_element_rbody + 1
1870 list_element_rbody( number_of_element_rbody ) = numg2
1874 IF(number_of_element_rbody>0)
1876 DEALLOCATE( list_element_rbody )
1886 IF (nedges>0 .AND. nspmd > 1)
THEN
1888 ALLOCATE(xadj(nelem+1),stat=ierr1)
1897 nedges = nedges + taille_local
1901 ALLOCATE(adjncy(2*nedges),stat=ierr1)
1906 xadj(i+1) = xadj(i) + taille_local
1907 IF(taille_local>0)
THEN
1912 DEALLOCATE(iddconnect%PDOM)
1913 DEALLOCATE(iddconnect%IENTRYDOM)
1916 IF(
ALLOCATED(colors))
DEALLOCATE(colors)
1917 IF(
ALLOCATED(roots))
DEALLOCATE(roots)
1918 ALLOCATE(colors(nelem+1),stat=ierr1)
1919 ALLOCATE(roots(nelem),stat=ierr1)
1920 CALL dd_bfs(xadj,adjncy,nelem,nedges,nconnx,colors,roots)
1922 WRITE(iout,
'(A,I8)')
1923 .
' NUMBER OF DISCONNECTED COMPONENTS FIXED FOR DOMAIN DECOMP:'
1926 ALLOCATE(xadj_old(nelem+1),stat=ierr1)
1927 ALLOCATE(adjncy_old(2*nedges),stat=ierr1)
1928 xadj_old(1:nelem+1)=xadj(1:nelem+1)
1929 adjncy_old(1:2*nedges)=adjncy(1:2*nedges)
1930 newedge = nedges+nconnx-1
1932 ALLOCATE(adjncy(2*newedge),stat=ierr1)
1938 i1old=xadj_old(curr)
1939 i2old=xadj_old(curr+1)-1
1943 IF(i1old <= 2*nedges)
THEN
1944 DO WHILE ((i1old <= i2old) .AND.
1945 + (adjncy_old(i1old) < prev))
1946 adjncy(i1) = adjncy_old(i1old)
1949 IF(i1old > 2*nedges)
EXIT
1959 IF(i1old <= 2*nedges)
THEN
1960 DO WHILE ((i1old <= i2old) .AND.
1961 + (adjncy_old(i1old) < next))
1962 adjncy(i1) = adjncy_old(i1old)
1965 IF(i1old > 2*nedges)
EXIT
1975 DO WHILE (i1old <= i2old)
1976 adjncy(i1) = adjncy_old(i1old)
1982 DO WHILE (n /= next)
1986 i2old=xadj_old(n+1)-1
1987 DO WHILE (i1old <= i2old)
1988 adjncy(i1) = adjncy_old(i1old)
1995 xadj(next)=xadj(next)+inc
1999 DEALLOCATE(xadj_old,adjncy_old)
2001 CALL dd_bfs(xadj,adjncy,nelem,nedges,nconnx,colors,roots)
2003 WRITE(iout,
'(A,I8)')
2004 .
'** INFO: REMAINING DISCONNECTED COMPONENTS:',nconnx
2007 DEALLOCATE(colors,roots)
2010 WRITE(iout,fmt=fmw_a_i)
2011 .
' ELEMENT NUMBER = ',nelem
2012 WRITE(iout,fmt=fmw_a_i)
' EDGES FOUND = ',nedges
2020 ierror = metis_setdefaultoptions(options)
2054 iwd(ncond*(i-1)+icelem) = nint(wd(i)*100)
2061 pid = abs(ixs(10,i))
2062 jale_from_mat = nint(pm(72,mid))
2063 jale_from_prop = igeo(62,pid)
2064 jale =
max(jale_from_mat, jale_from_prop)
2065 mln = nint(pm(19,mid))
2066 IF(jale==0.AND.mln/=18)
THEN
2067 iwd(ncond*(i-1)+icelem) = nint(wd(i)*100)
2068 iwd(ncond*(i-1)+icfsi) = 0
2070 iwd(ncond*(i-1)+icelem) = 0
2071 iwd(ncond*(i-1)+icfsi) = nint(wd(i)*100)
2075 iwd(ncond*(i-1)+icelem) = nint(wd(i)*100)
2083 IF(wd(i)==0.0001)
THEN
2084 iwd(ncond*(i-1)+icdel) = 1
2086 iwd(ncond*(i-1)+icdel) = 0
2094 IF(ncluster > 0)
THEN
2096 cluster_typ = clusters(i)%TYPE
2098 IF(cluster_typ==2.OR.cluster_typ==3) offset_cluster = numels+numelq+numelc+numelt+numelp
2099 DO j = 2, clusters(i)%NEL
2101 iwd((clusters(i)%ELEM(1)-1) * ncond+k +offset_cluster) =
2102 . iwd((clusters(i)%ELEM(1)-1) * ncond+k +offset_cluster) +
2103 . iwd((clusters(i)%ELEM(j)-1) * ncond+k +offset_cluster)
2104 iwd((clusters(i)%ELEM(j)-1) * ncond+k +offset_cluster) = 0
2118 ws = ws + iwd(ncond*(j-1)+i)
2121 WRITE(iout,
'(A,I4)')
2122 .
' WEIGHT PRECISION DECREASED TO ENABLE CRITERION',i
2124 iwd(ncond*(j-1)+i) = iwd(ncond*(j-1)+i)/10
2132 ubvec(icelem) = 1.02
2133 IF(icints/=0) ubvec(icints) = 1.05
2134 IF(icintm/=0) ubvec(icintm) = 1.05
2135 IF(icint2/=0) ubvec(icint2) = 1.05
2136 IF(icddl/=0) ubvec(icddl) = 1.02
2137 IF(icsol/=0) ubvec(icsol) = 1.05
2138 IF(icfsi/=0) ubvec(icfsi) = 1.02
2139 IF(icdel/=0) ubvec(icdel) = 1.10
2140 IF(iccand/=0) ubvec(iccand) = 1.10
2141 IF(ickin/=0) ubvec(ickin) = 1.10
2142 IF(icr2r/=0) ubvec(icr2r) = 1.30
2143 IF(icnod_sms/=0) ubvec(icnod_sms) = 1.05
2148 IF(dectyp==3.OR.dectyp==5)
THEN
2152 1 nelem,ncond,xadj,adjncy,
2154 3 ubvec,options,nec,cep)
2157 IF(idb_metis == 1)
THEN
2160 WRITE(chlevel,
'(I1)')iddlevel
2162 OPEN(99,file=
"input.graph"//chlevel,form=
'FORMATTED',recl=8192)
2163 write(99,*) nelem,nedges,
"010",ncond
2165 write(99,*)iwd(ncond*(i-1)+1:ncond*(i-1)+ncond),
2166 + adjncy(xadj(i):xadj(i+1)-1)
2167 it = it + xadj(i+1)-xadj(i)
2169 print *,
'writing graph with check:',it,
'/',nedges*2
2172 ELSEIF(dectyp==4.OR.dectyp==6)
THEN
2175 1 nelem,ncond,xadj,adjncy,
2177 3 ubvec,options,nec,cep)
2180 1 wis ,wi2 ,wfsi ,wdel ,wddl ,
2181 2 wcand ,wsol ,wr2r ,wkin ,iwd ,
2182 3 ncond ,icelem ,icints ,icint2 ,iccand ,
2183 4 icddl ,icsol ,icfsi ,icdel ,icr2r ,
2184 5 ickin ,average ,deviation ,dmax ,dmin ,
2185 6 cep ,nelem ,w ,icintm ,wim ,
2186 7 ncritmax ,wnod_sms,icnod_sms)
2189 IF(icfsi > 0 .AND. icfsi < icelem)
THEN
2198 IF( ( main_target == 7 .OR. iddlevel==1) .AND. (dectyp==3 .OR. dectyp==5) )
THEN
2199 IF(dmin(main_target) < average(main_target)*0.90 )
THEN
2201 .
'** INFO: DECOMPOSITION UNBALANCING DETECTED'
2202 WRITE(iout,
'(A,I5,A,2X,I8,2X,I8,2X,I8)')
2203 .
' DOMAINS:',nspmd,
' MIN/MAX/AVERAGE:',
2204 . nint(dmin(main_target)),nint(dmax(main_target)),nint(average(main_target))
2206 WRITE(iout,
'(A)')
' REVERT TO RECURSIVE BISSECTION'
2211 ubvec(icelem) = 1.01
2212 IF(icints/=0) ubvec(icints) = 1.02
2213 IF(icintm/=0) ubvec(icintm) = 1.02
2214 IF(icint2/=0) ubvec(icint2) = 1.02
2215 IF(icddl/=0) ubvec(icddl) = 1.05
2216 IF(icsol/=0) ubvec(icsol) = 1.05
2217 IF(icfsi/=0) ubvec(icfsi) = 1.05
2218 IF(icdel/=0) ubvec(icdel) = 1.05
2219 IF(iccand/=0) ubvec(iccand) = 1.05
2220 IF(ickin/=0) ubvec(ickin) = 1.05
2221 IF(icr2r/=0) ubvec(icr2r) = 1.30
2222 IF(icnod_sms/=0) ubvec(icnod_sms) = 1.0
2224 ubvec(icelem) = 1.001
2225 IF(icints/=0) ubvec(icints) = 1.02
2226 IF(icintm/=0) ubvec(icintm) = 1.02
2227 IF(icint2/=0) ubvec(icint2) = 1.02
2228 IF(icddl/=0) ubvec(icddl) = 1.01
2229 IF(icsol/=0) ubvec(icsol) = 1.03
2230 IF(icfsi/=0) ubvec(icfsi) = 1.01
2231 IF(icdel/=0) ubvec(icdel) = 1.03
2232 IF(iccand/=0) ubvec(iccand) = 1.03
2233 IF(ickin/=0) ubvec(ickin) = 1.03
2234 IF(icr2r/=0) ubvec(icr2r) = 1.30
2235 IF(icnod_sms/=0) ubvec(icnod_sms) = 1.0
2245 ALLOCATE(iwd_copy(ncond*nelem))
2246 ALLOCATE(wd_copy(nelem))
2247 IF((dectyp==4 .OR. dectyp==6) .AND. iddlevel==1 .AND. nelem>10*nspmd )
THEN
2249 IF(icdel /= 0 )
THEN
2250 IF(elemd > 9*nelem/10 .AND. dmin(main_target) < average(main_target)*0.80 )
THEN
2254 wght=iwd(ncond*(i-1)+1)
2255 iwd(ncond*(i-1)+1) = iwd(ncond*(i-1)+icdel)
2256 iwd(ncond*(i-1)+icdel)=wght
2264 wd_copy(1:nelem) = wd(1:nelem)
2265 iwd_copy(1:ncond * nelem) = iwd(1:ncond*nelem)
2267 dd_unbalanced = (dmin(main_target) < average(main_target)*0.80)
2269 dd_unbalanced = dd_unbalanced .OR. (dmax(main_target) > average(main_target)*1.1)
2272 IF(fvm_elem(n) /= 0)
THEN
2273 wd_max0=
max(wd_max0,dble(wd(fvm_elem(n))))
2276 wd_max0 =
min(wd_max,wd_max0)
2280 DO WHILE(dd_unbalanced .AND. ncond2 > 1 )
2283 .
'** INFO: DECOMPOSITION UNBALANCING DETECTED'
2284 WRITE(iout,
'(A,I5,A,2X,I8,2X,I8,2X,I8)')
2285 .
' DOMAINS:',nspmd,
' MIN/MAX/AVERAGE:',
2286 . nint(dmin(main_target)),nint(dmax(main_target)),nint(average(main_target))
2294 IF(fvm_domdec .AND. dd_fvmbag_try <= max_try)
THEN
2295 wd_max = wd_max / (0.1d0 * wd_max_factor)
2297 IF(fvm_elem(n) /= 0)
THEN
2298 IF(wd(fvm_elem(n)) > wd_max)
THEN
2299 wd(fvm_elem(n)) = wd_max
2300 iwd(ncond*(fvm_elem(n)-1)+icelem) = nint(wd_max*100)
2301 nb_fvmbag_trim = nb_fvmbag_trim + 1
2306 IF(nb_fvmbag_trim > 0)
THEN
2309 dd_fvmbag_try = dd_fvmbag_try + 1
2315 max_try = max_try + 1
2317 wd(1:nelem) = wd_copy(1:nelem)
2318 iwd(1:ncond*nelem) = iwd_copy(1:ncond*nelem)
2324 WRITE(iout,
'(A,I5)')
'RETRY KWAY WITH NCOND =',ncond2
2326 ALLOCATE(iwd2(ncond2*nelem))
2329 iwd2( ncond2*(i-1) +j ) = iwd( ncond*(i-1) + j)
2334 1 nelem,ncond2,xadj,adjncy,
2336 3 ubvec,options,nec,cep)
2338 1 wis ,wi2 ,wfsi ,wdel ,wddl ,
2339 2 wcand ,wsol ,wr2r ,wkin ,iwd ,
2340 3 ncond ,icelem ,icints ,icint2 ,iccand ,
2341 4 icddl ,icsol ,icfsi ,icdel ,icr2r ,
2342 5 ickin ,average ,deviation ,dmax ,dmin ,
2343 6 cep ,nelem ,w ,icintm ,wim ,
2344 7 ncritmax ,wnod_sms,icnod_sms)
2347 dd_unbalanced = (dmin(main_target) < average
2349 dd_unbalanced = dd_unbalanced .OR. (dmax(main_target) > average(main_target)*1.1)
2353 IF(dd_unbalanced)
THEN
2356 .
'** INFO: DECOMPOSITION UNBALANCING DETECTED'
2357 WRITE(iout,
'(A,I5,A,2X,I8,2X,I8,2X,I8)')
2358 .
' DOMAINS:',nspmd,
' MIN/MAX/AVERAGE:',
2359 . nint(dmin(main_target)),nint(dmax(main_target)),nint(average(main_target))
2364 1 nelem,ncond2,xadj,adjncy,
2366 3 ubvec,options,nec,cep)
2368 1 wis ,wi2 ,wfsi ,wdel ,wddl ,
2369 2 wcand ,wsol ,wr2r ,wkin ,iwd ,
2370 3 ncond ,icelem ,icints ,icint2 ,iccand ,
2371 4 icddl ,icsol ,icfsi ,icdel ,icr2r ,
2372 5 ickin ,average ,deviation ,dmax ,dmin ,
2373 6 cep ,nelem ,w ,icintm ,wim ,
2374 7 ncritmax ,wnod_sms,icnod_sms)
2379 dd_unbalanced = (dmin(main_target) < average(main_target)*0.80)
2381 dd_unbalanced = dd_unbalanced .OR. (dmax(main_target) > average(main_target)*1.1)
2386 DEALLOCATE(iwd_copy)
2398 IF (ncluster > 0)
THEN
2400 cluster_typ = clusters(i)%TYPE
2402 IF(cluster_typ==2.OR.cluster_typ==3) offset_cluster = numels+numelq+numelc+numelt+numelp
2403 cepcluster=cep( clusters(i)%ELEM(1)+offset_cluster )
2404 DO j = 2,clusters(i)%NEL
2405 cep( clusters(i)%ELEM(j)+offset_cluster ) = cepcluster
2413 IF(nvolu > 0 .AND. iddlevel==1 .AND. fvm_domdec)
THEN
2415 offc = numels+numelq
2416 offtg =numels+numelq+ numelc+numelt+numelp+numelr
2421 ityp = t_monvol(n)%TYPE
2422 nn = t_monvol(n)%NNS
2423! find location of
the first element
2425 IF(ityp == 6 .OR. ityp == 8) nfvmbag = nfvmbag + 1
2427 IF(nn > 0 .AND. (ityp == 6 .OR. ityp == 8))
THEN
2428 cepcluster = cep(fvm_elem(n))
2429 fvmain(nfvmbag) = cepcluster
2435 DEALLOCATE(xadj,adjncy)
2445 IF(ebcs_tag_cell_spmd(i)==1)
THEN
2450 IF(ebcs_tag_cell_spmd(numelq+i)==1)
THEN
2451 cep(numels+numelq+numelc+numelt+numelp+numelr+i)=0
2456 IF(ebcs_tag_cell_spmd(numelq+numeltg+i)==1)
THEN
2462 IF(dectyp==5.OR.dectyp==6)
THEN
2463 IF(ddnod_sms==0)
THEN
2468 ELSEIF(icfsi==0)
THEN
2469 IF(icsol==0.AND.icdel==0)
THEN
2471 ELSEIF(icsol/=0.AND.icdel==0)
THEN
2473 ELSEIF(icsol/=0.AND.icdel/=0)
THEN
2475 ELSEIF(icsol==0.AND.icdel/=0)
THEN
2478 ELSEIF(icfsi/=0)
THEN
2486 IF(dectyp==5.OR.dectyp==6)
THEN
2487 IF(ddnod_sms==0)
THEN
2488 WRITE(iout,
'(I4,8F15.0)')
2489 . i,w(i),wis(i),wim(i),wcand(i),wi2(i),wddl(i)
2491 WRITE(iout,
'(I4,8F15.0)')
2492 . i,w(i),wis(i),wim(i),wcand(i),wi2(i),wddl(i),wnod_sms(i)
2494 ELSEIF(icfsi==0)
THEN
2495 IF(icsol==0.AND.icdel==0)
THEN
2496 WRITE(iout,
'(I4,8F15.0)')
2497 . i,w(i),wis(i),wim(i),wcand(i),wi2(i),wkin(i)
2498 ELSEIF(icsol/=0.AND.icdel==0)
THEN
2499 WRITE(iout,
'(I4,8F15.0)')
2500 . i,w(i),wis(i),wim(i),wcand(i),wi2(i),wsol(i),wkin(i)
2501 ELSEIF(icsol/=0.AND.icdel/=0)
THEN
2502 WRITE(iout,
'(I4,8F15.0)')
2503 . i,w(i),wis(i),wim(i),wcand(i),wi2(i),wsol(i),wdel(i),wkin(i)
2504 ELSEIF(icsol==0.AND.icdel/=0)
THEN
2505 WRITE(iout,
'(I4,8F15.0)')
2506 . i,w(i),wis(i),wim(i),wcand(i),wi2(i),wdel(i),wkin(i)
2508 ELSEIF(icfsi/=0.AND.icdel==0)
THEN
2509 WRITE(iout,
'(I4,8F15.0)')
2510 . i,w(i),wis(i),wim(i),wcand(i),wi2(i),wfsi(i)
2511 ELSEIF(icfsi/=0.AND.icdel/=0)
THEN
2512 WRITE(iout,
'(I4,8F15.0)')
2513 . i,w(i),wis(i),wim(i),wcand(i),wi2(i),wfsi(i),wdel(i)
2518 WRITE(iout,*)
'STATISTICS ON DECOMPOSITION WEIGHTS'
2519 WRITE(iout,*)
'-----------------------------------'
2521 WRITE(iout,
'(A,I8,2X,I8,2X,I8,4X,I8)')
2523 . nint(dmin(1)),nint(dmax(1)),
2524 . nint(average(1)),nint(deviation(1))
2525 IF(icints/=0)
WRITE(iout,
'(A,I8,2X,I8,2X,I8,4X,I8)')
2527 . nint(dmin(2)),nint(dmax(2)),
2528 . nint(average(2)),nint(deviation(2))
2529 IF(icintm/=0)
WRITE(iout,
'(A,I8,2X,I8,2X,I8,4X,I8)')
2531 . nint(dmin(11)),nint(dmax(11)),
2532 . nint(average(11)),nint(deviation(11))
2533 IF(iccand/=0)
WRITE(iout,
'(A,I8,2X,I8,2X,I8,4X,I8)')
2535 . nint(dmin(4)),nint(dmax(4)),
2536 . nint(average(4)),nint(deviation(4))
2537 IF(icint2/=0)
WRITE(iout,
'(A,I8,2X,I8,2X,I8,4X,I8)')
2539 . NINT(DMIN(3)),NINT(DMAX(3)),
2540 . NINT(AVERAGE(3)),NINT(DEVIATION(3))
2541 IF(ICSOL/=0) WRITE(IOUT,'(a,i8,2x,i8,2x,i8,4x,i8)
')
2543 . NINT(DMIN(6)),NINT(DMAX(6)),
2544 . NINT(AVERAGE(6)),NINT(DEVIATION(6))
2545 IF(ICDEL/=0) WRITE(IOUT,'(a,i8,2x,i8,2x,i8,4x,i8)
')
2547 . NINT(DMIN(8)),NINT(DMAX(8)),
2548 . NINT(AVERAGE(8)),NINT(DEVIATION(8))
2549 IF(ICKIN/=0) WRITE(IOUT,'(a,i8,2x,i8,2x,i8,4x,i8)
')
2551 . NINT(DMIN(10)),NINT(DMAX(10)),
2552 . NINT(AVERAGE(10)),NINT(DEVIATION(10))
2554 IF(ISMS==0)THEN ! Implicit
2555 WRITE(IOUT,'(a,i8,2x,i8,2x,i8,4x,i8)
')
2557 . NINT(DMIN(5)),NINT(DMAX(5)),
2558 . NINT(AVERAGE(5)),NINT(DEVIATION(5))
2560 WRITE(IOUT,'(a,i8,2x,i8,2x,i8,4x,i8)
')
2562 . NINT(DMIN(5)),NINT(DMAX(5)),
2563 . NINT(AVERAGE(5)),NINT(DEVIATION(5))
2566 IF(ICFSI/=0) WRITE(IOUT,'(a,i8,2x,i8,2x,i8,4x,i8)
')
2568 . NINT(DMIN(7)),NINT(DMAX(7)),
2569 . NINT(AVERAGE(7)),NINT(DEVIATION(7))
2570 IF(ICR2R/=0) WRITE(IOUT,'(a,i8,2x,i8,2x,i8,4x,i8)
')
2572 . NINT(DMIN(9)),NINT(DMAX(9)),
2573 . NINT(AVERAGE(9)),NINT(DEVIATION(9))
2574 IF(ICNOD_SMS/=0) WRITE(IOUT,'(a,i8,2x,i8,2x,i8,4x,i8)
')
2576 . NINT(DMIN(12)),NINT(DMAX(12)),
2577 . NINT(AVERAGE(12)),NINT(DEVIATION(12))
2581 DEALLOCATE(IDDCONNECT%PDOM)
2582 DEALLOCATE(IDDCONNECT%IENTRYDOM)
2589 1000 FORMAT('#PROC ELEMENT W. SECND NOD W. MAST NOD W. CONT ELT W.',
2590 .
' INT2 W. DOF W.')
2591 1100
FORMAT(
'#PROC ELEMENT W. SECND NOD W. MAST NOD W. CONT ELT W.',
2592 .
' INT2 W. DOF W. AMS CONT ELT W')
2593 2000
FORMAT(
'#PROC ELEMENT W. SECND NOD W. MAST NOD W. CONT ELT W.',
2594 .
' INT2 W. KIN COND W.')
2595 3000
FORMAT(
'#PROC ELEMENT W. SECND NOD W. MAST NOD W. CONT ELT W.',
2596 .
' INT2 W. SOL W. KIN COND W.')
2597 4000
FORMAT(
'#PROC ELEMENT W. SECND NOD W. MAST NOD W. CONT ELT W.',
2598 .
' INT2 W. SOL W. ELT DEL W.',
2600 5000
FORMAT(
'#PROC ELEMENT W. SECND NOD W. MAST NOD W. CONT ELT W.',
2601 .
' INT2 W. ELT DEL W. KIN COND W.')
2602 6000
FORMAT(
'#PROC ELT LAG W. SECND NOD W. MAST NOD W. CONT ELT W.',
2603 .
' INT2 W. ELT ALE W.')
2604 7000
FORMAT(
'#PROC ELT LAG W. SECND NOD W. MAST NOD W. CONT ELT W.',
2605 .
' INT2 W. ELT ALE W. ELT DEL W.')
2606 8000
FORMAT(
' METRIC MINIMUM MAXIMUM AVERAGE',
2607 .
' STANDARD DEVIATION')