Skip to content

Commit c943efa

Browse files
committed
Minor optimization for periodic BC
1 parent 97b73dc commit c943efa

1 file changed

Lines changed: 10 additions & 11 deletions

File tree

idp/macro_ddm.idp

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)