Skip to content

Commit 52b0bf2

Browse files
authored
Merge pull request #3309 from boutproject/parallel-regions
valid regions for parallel slices
2 parents 568c70a + 7dd7664 commit 52b0bf2

4 files changed

Lines changed: 17 additions & 10 deletions

File tree

include/bout/field3d.hxx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,7 @@ public:
331331
const Region<Ind3D>& getValidRegionWithDefault(const std::string& region_name) const;
332332
void setRegion(const std::string& region_name) override;
333333
void resetRegion() override { regionID.reset(); };
334+
void resetRegionParallel();
334335
void setRegion(size_t id) override { regionID = id; };
335336
void setRegion(std::optional<size_t> id) override { regionID = id; };
336337
std::optional<size_t> getRegionID() const override { return regionID; };

src/field/field3d.cxx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ void Field3D::splitParallelSlices() {
145145
yup_fields.emplace_back(fieldmesh);
146146
ydown_fields.emplace_back(fieldmesh);
147147
}
148+
resetRegionParallel();
148149
}
149150

150151
void Field3D::clearParallelSlices() {
@@ -841,6 +842,15 @@ void Field3D::setRegion(const std::string& region_name) {
841842
regionID = fieldmesh->getRegionID(region_name);
842843
}
843844

845+
void Field3D::resetRegionParallel() {
846+
if (isFci()) {
847+
for (int i = 0; i < fieldmesh->ystart; ++i) {
848+
yup_fields[i].setRegion(fmt::format("RGN_YPAR_{:+d}", i + 1));
849+
ydown_fields[i].setRegion(fmt::format("RGN_YPAR_{:+d}", -i - 1));
850+
}
851+
}
852+
}
853+
844854
Field3D& Field3D::enableTracking(const std::string& name,
845855
std::weak_ptr<Options> _tracking) {
846856
tracking = std::move(_tracking);

src/mesh/mesh.cxx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -679,6 +679,12 @@ void Mesh::createDefaultRegions() {
679679
+ getRegion3D("RGN_YGUARDS") + getRegion3D("RGN_ZGUARDS"))
680680
.unique());
681681

682+
for (int offset_ = -ystart; offset_ <= ystart; ++offset_) {
683+
const auto region = fmt::format("RGN_YPAR_{:+d}", offset_);
684+
addRegion3D(region, Region<Ind3D>(xstart, xend, ystart + offset_, yend + offset_, 0,
685+
LocalNz - 1, LocalNy, LocalNz));
686+
}
687+
682688
//2D regions
683689
addRegion2D("RGN_ALL", Region<Ind2D>(0, LocalNx - 1, 0, LocalNy - 1, 0, 0, LocalNy, 1,
684690
maxregionblocksize));

src/mesh/parallel/fci.cxx

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -261,16 +261,6 @@ FCIMap::FCIMap(Mesh& mesh, [[maybe_unused]] const Coordinates::FieldMetric& dy,
261261
region_no_boundary = region_no_boundary.mask(to_remove);
262262

263263
interp->setRegion(region_no_boundary);
264-
265-
const auto region = fmt::format("RGN_YPAR_{:+d}", offset_);
266-
if (not map_mesh->hasRegion3D(region)) {
267-
// The valid region for this slice
268-
map_mesh->addRegion3D(region, Region<Ind3D>(map_mesh->xstart, map_mesh->xend,
269-
map_mesh->ystart + offset_,
270-
map_mesh->yend + offset_, 0,
271-
map_mesh->LocalNz - 1, map_mesh->LocalNy,
272-
map_mesh->LocalNz));
273-
}
274264
}
275265

276266
Field3D FCIMap::integrate(Field3D& f) const {

0 commit comments

Comments
 (0)