@@ -148,9 +148,7 @@ IFMACRO(!privateCreateMat)
148148 n2o.resize(0);
149149 else
150150 neighbors = trunc(globalName, suppSmooth > 0.001 && suppSmooth < 0.999, new2old = n2o);
151- int[int] partOverlap(n2o.n);
152- for[i, value : n2o] partOverlap[i] = part[][value];
153- Unique(partOverlap, intersection[0], remove = constant);
151+ Unique(part[], intersection[0], remove = constant);
154152 if(s > 1 && level <= 1) {
155153 globalName = trunc(globalName, suppSmooth > 0.001, split = s);
156154 supp = abs(part - constant) < 0.1;
@@ -1164,20 +1162,21 @@ IFMACRO(!privateDmesh#CartesianPartitioning)
11641162 if(userPartitioning.n != PhGlobalPrivate.ndof || labPeriodic.n > 0) {
11651163 timerPartition = mpiWtime();
11661164 meshN ThGlobalPeriodic;
1165+ int[int] n2oPeriodic;
11671166 if(labPeriodic.n > 0) {
11681167 VhGlobalPrivate marker;
1169- for(int i = 0; i < labPeriodic.n; ++i) {
1170- varf vMarker(uPrivate, vPrivate) = on(labPeriodic[i], uPrivate = 1.0);
1171- marker[] += vMarker(0, VhGlobalPrivate, tgv = -1);
1172- }
1168+ varf vMarker(uPrivate, vPrivate) = on(labPeriodic, uPrivate = 1.0);
1169+ marker[] = vMarker(0, VhGlobalPrivate, tgv = -1);
11731170 PhGlobalPrivate partPeriodic = marker > 0.1;
11741171 while(1) {
11751172 AddLayers(ThGlobal, partPeriodic[], 1 + overlap, marker[]);
11761173 partPeriodic = marker > 0.001;
1177- ThGlobalPeriodic = trunc(ThGlobal, partPeriodic < 0.999);
1178- if(ThGlobal.nt / real(ThGlobalPeriodic.nt) > mpisize / real(mpisize - 1))
1174+ ThGlobalPeriodic = trunc(ThGlobal, partPeriodic < 0.999, new2old = n2oPeriodic );
1175+ if(ThGlobal.nt / real(ThGlobalPeriodic.nt) > mpiSize(comm) / real(mpiSize(comm) - 1))
11791176 break;
11801177 }
1178+ if(mpiRank(comm) == 0 && verbosity > 0)
1179+ cout.scientific << " --- part of the global mesh with periodic BC has " << ThGlobal.nt - ThGlobalPeriodic.nt << " elements, rest of the global mesh has " << ThGlobalPeriodic.nt << " elements" << endl;
11811180 }
11821181 if(mpiRank(comm) == 0) {
11831182 if(verbosity > 0)
@@ -1191,7 +1190,7 @@ IFMACRO(!privateDmesh#CartesianPartitioning)
11911190 }
11921191 else
11931192 partPeriodic[] = 1.0;
1194- partGlobal = partPeriodic;
1193+ partGlobal[](n2oPeriodic) = partPeriodic[] ;
11951194 }
11961195 else {
11971196 partitionerSeq(partGlobal[], ThGlobal, mpiSize(comm));
@@ -1206,7 +1205,7 @@ IFMACRO(!privateDmesh#CartesianPartitioning)
12061205 }
12071206 else
12081207 partPeriodic[] = 1.0;
1209- partGlobal = partPeriodic;
1208+ partGlobal[](n2oPeriodic) = partPeriodic[] ;
12101209 }
12111210 else
12121211 partitionerPar(partGlobal[], ThGlobal, comm, mpiSize(comm));
0 commit comments