Skip to content

Commit

Permalink
Merge branch 'Exawind:master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
djglaze authored Feb 21, 2024
2 parents 8c328bc + 3f6fe1d commit c479e49
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 7 deletions.
8 changes: 7 additions & 1 deletion include/overset/TiogaBlock.h
Original file line number Diff line number Diff line change
Expand Up @@ -178,8 +178,14 @@ class TiogaBlock

/** Update iblanks after connectivity updates
*/
void update_iblanks(
void update_iblanks();
/** Update fringe and hole node vectors
*/
void update_fringe_and_hole_nodes(
std::vector<stk::mesh::Entity>&, std::vector<stk::mesh::Entity>&);
/** Update the Tioga view of iblanks prior to donor-to-receptor interpolation
*/
void update_tioga_iblanks();

/** Update element iblanks after connectivity updates
*/
Expand Down
44 changes: 41 additions & 3 deletions src/overset/TiogaBlock.C
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,27 @@ TiogaBlock::update_connectivity()
}

void
TiogaBlock::update_iblanks(
TiogaBlock::update_iblanks()
{
ScalarIntFieldType* ibf =
meta_.get_field<ScalarIntFieldType>(stk::topology::NODE_RANK, "iblank");

stk::mesh::Selector mesh_selector = get_node_selector(blkParts_);
const stk::mesh::BucketVector& mbkts =
bulk_.get_buckets(stk::topology::NODE_RANK, mesh_selector);

auto& ibnode = bdata_.iblank_.h_view;
int ip = 0;
for (auto b : mbkts) {
int* ib = stk::mesh::field_data(*ibf, *b);
for (size_t in = 0; in < b->size(); in++) {
ib[in] = ibnode(ip++);
}
}
}

void
TiogaBlock::update_fringe_and_hole_nodes(
std::vector<stk::mesh::Entity>& holeNodes,
std::vector<stk::mesh::Entity>& fringeNodes)
{
Expand All @@ -240,8 +260,6 @@ TiogaBlock::update_iblanks(
for (auto b : mbkts) {
int* ib = stk::mesh::field_data(*ibf, *b);
for (size_t in = 0; in < b->size(); in++) {
ib[in] = ibnode(ip++);

if (ib[in] == 0) {
holeNodes.push_back((*b)[in]);
} else if (ib[in] == -1) {
Expand All @@ -251,6 +269,26 @@ TiogaBlock::update_iblanks(
}
}

void
TiogaBlock::update_tioga_iblanks()
{
ScalarIntFieldType* ibf =
meta_.get_field<ScalarIntFieldType>(stk::topology::NODE_RANK, "iblank");

stk::mesh::Selector mesh_selector = get_node_selector(blkParts_);
const stk::mesh::BucketVector& mbkts =
bulk_.get_buckets(stk::topology::NODE_RANK, mesh_selector);

auto& ibnode = bdata_.iblank_.h_view;
int ip = 0;
for (auto b : mbkts) {
int* ib = stk::mesh::field_data(*ibf, *b);
for (size_t in = 0; in < b->size(); in++) {
ibnode(ip++) = ib[in];
}
}
}

void
TiogaBlock::update_iblank_cell()
{
Expand Down
15 changes: 12 additions & 3 deletions src/overset/TiogaSTKIface.C
Original file line number Diff line number Diff line change
Expand Up @@ -164,8 +164,7 @@ TiogaSTKIface::post_connectivity_work(const bool isDecoupled)
{
for (auto& tb : blocks_) {
// Update IBLANK information at nodes and elements
tb->update_iblanks(
oversetManager_.holeNodes_, oversetManager_.fringeNodes_);
tb->update_iblanks();
tb->update_iblank_cell();

// For each block determine donor elements that needs to be ghosted to other
Expand All @@ -178,7 +177,17 @@ TiogaSTKIface::post_connectivity_work(const bool isDecoupled)
sierra::nalu::ScalarIntFieldType* ibf =
meta_.get_field<int>(stk::topology::NODE_RANK, "iblank");
std::vector<const stk::mesh::FieldBase*> pvec{ibf};
stk::mesh::copy_owned_to_shared(bulk_, pvec);
stk::mesh::parallel_min(bulk_, {ibf});

for (auto& tb : blocks_) {
// Call update_iblanks again to assign holeNodes and fringeNodes vectors
// after iblanks on shared nodes are corrected
tb->update_fringe_and_hole_nodes(
oversetManager_.holeNodes_, oversetManager_.fringeNodes_);
// Return the corrected iblank field to Tioga prior to donor-to-receptor
// interpolation
tb->update_tioga_iblanks();
}

post_connectivity_sync();

Expand Down

0 comments on commit c479e49

Please sign in to comment.