From 188b61ca1e598f25d08951199f2e6977b2d3a7b3 Mon Sep 17 00:00:00 2001 From: psakievich Date: Mon, 28 Aug 2023 22:24:09 -0400 Subject: [PATCH] Revert "Revert "Part pointer to part vector. issue #1183 (#1187)"" This reverts commit 41f3936b75c0d6596d090cdd6fc213d1d3429f35. --- include/AMSAlgDriver.h | 2 +- include/EquationSystem.h | 14 ++-- include/EquationSystems.h | 8 +-- include/LowMachEquationSystem.h | 24 +++---- include/VolumeOfFluidEquationSystem.h | 8 +-- include/WallDistEquationSystem.h | 7 +- include/utils/StkHelpers.h | 14 ---- src/AMSAlgDriver.C | 5 +- src/EquationSystems.C | 87 ++++++++++++------------- src/LowMachEquationSystem.C | 40 +++++++----- src/MatrixFreeHeatCondEquationSystem.C | 89 +++++++++++++------------- src/MatrixFreeLowMachEquationSystem.C | 73 ++++++++++++++------- src/VolumeOfFluidEquationSystem.C | 8 ++- src/WallDistEquationSystem.C | 11 ++-- src/utils/StkHelpers.C | 27 -------- 15 files changed, 209 insertions(+), 208 deletions(-) diff --git a/include/AMSAlgDriver.h b/include/AMSAlgDriver.h index fbb576184..14442e642 100644 --- a/include/AMSAlgDriver.h +++ b/include/AMSAlgDriver.h @@ -35,7 +35,7 @@ class AMSAlgDriver AMSAlgDriver(Realm& realm); virtual ~AMSAlgDriver() = default; virtual void register_nodal_fields(const stk::mesh::PartVector& part_vec); - virtual void register_edge_fields(stk::mesh::Part* part); + virtual void register_edge_fields(const stk::mesh::PartVector& part_vec); void register_interior_algorithm(stk::mesh::Part* part); void execute(); void initial_work(); diff --git a/include/EquationSystem.h b/include/EquationSystem.h index 33a1eb396..cbcb83fe9 100644 --- a/include/EquationSystem.h +++ b/include/EquationSystem.h @@ -69,12 +69,16 @@ class EquationSystem virtual void populate_derived_quantities() {} // base class with desired default no-op - virtual void register_nodal_fields(const stk::mesh::PartVector& /* part */) {} - - virtual void register_edge_fields(stk::mesh::Part* /* part */) {} - + virtual void + register_nodal_fields(const stk::mesh::PartVector& /* part_vec */) + { + } + virtual void register_edge_fields(const stk::mesh::PartVector& /* part_vec */) + { + } virtual void register_element_fields( - stk::mesh::Part* /* part */, const stk::topology& /* theTopo */) + const stk::mesh::PartVector& /* part_vec */, + const stk::topology& /* theTopo */) { } diff --git a/include/EquationSystems.h b/include/EquationSystems.h index 7a715e9d5..e8fe1805a 100644 --- a/include/EquationSystems.h +++ b/include/EquationSystems.h @@ -72,11 +72,9 @@ class EquationSystems size_t size() { return equationSystemVector_.size(); } EquationSystem* operator[](int i) { return equationSystemVector_[i]; } - void register_nodal_fields(const std::vector targetNames); - - void register_edge_fields(const std::vector targetNames); - - void register_element_fields(const std::vector targetNames); + void register_nodal_fields(const std::vector& targetNames); + void register_edge_fields(const std::vector& targetNames); + void register_element_fields(const std::vector& targetNames); void register_interior_algorithm(const std::vector targetNames); diff --git a/include/LowMachEquationSystem.h b/include/LowMachEquationSystem.h index 3b555eb1c..8f0282120 100644 --- a/include/LowMachEquationSystem.h +++ b/include/LowMachEquationSystem.h @@ -62,11 +62,11 @@ class LowMachEquationSystem : public EquationSystem virtual void register_nodal_fields(const stk::mesh::PartVector& part_vec) override; - - virtual void register_edge_fields(stk::mesh::Part* part) override; - + virtual void + register_edge_fields(const stk::mesh::PartVector& part_vec) override; virtual void register_element_fields( - stk::mesh::Part* part, const stk::topology& theTopo) override; + const stk::mesh::PartVector& part_vec, + const stk::topology& theTopo) override; virtual void register_open_bc( stk::mesh::Part* part, @@ -124,11 +124,11 @@ class MomentumEquationSystem : public EquationSystem virtual void register_nodal_fields(const stk::mesh::PartVector& part_vec) override; - - virtual void register_edge_fields(stk::mesh::Part* part) override; - + virtual void + register_edge_fields(const stk::mesh::PartVector& part_vec) override; virtual void register_element_fields( - stk::mesh::Part* part, const stk::topology& theTopo) override; + const stk::mesh::PartVector& part_vec, + const stk::topology& theTopo) override; virtual void register_interior_algorithm(stk::mesh::Part* part) override; @@ -241,11 +241,11 @@ class ContinuityEquationSystem : public EquationSystem virtual void register_nodal_fields(const stk::mesh::PartVector& part_vec) override; - - virtual void register_edge_fields(stk::mesh::Part* part) override; - + virtual void + register_edge_fields(const stk::mesh::PartVector& part_vec) override; virtual void register_element_fields( - stk::mesh::Part* part, const stk::topology& theTopo) override; + const stk::mesh::PartVector& part_vec, + const stk::topology& theTopo) override; virtual void register_interior_algorithm(stk::mesh::Part* part) override; diff --git a/include/VolumeOfFluidEquationSystem.h b/include/VolumeOfFluidEquationSystem.h index b9f4564b3..ad8e9d2a7 100644 --- a/include/VolumeOfFluidEquationSystem.h +++ b/include/VolumeOfFluidEquationSystem.h @@ -45,11 +45,9 @@ class VolumeOfFluidEquationSystem : public EquationSystem virtual ~VolumeOfFluidEquationSystem(); virtual void register_nodal_fields(const stk::mesh::PartVector& part_vec); - - virtual void register_edge_fields(stk::mesh::Part* part); - - virtual void - register_element_fields(stk::mesh::Part* part, const stk::topology& theTopo); + virtual void register_edge_fields(const stk::mesh::PartVector& part_vec); + virtual void register_element_fields( + const stk::mesh::PartVector& part_vec, const stk::topology& theTopo); virtual void register_interior_algorithm(stk::mesh::Part* part); diff --git a/include/WallDistEquationSystem.h b/include/WallDistEquationSystem.h index 4ae5a0388..a8d7ae0a6 100644 --- a/include/WallDistEquationSystem.h +++ b/include/WallDistEquationSystem.h @@ -34,10 +34,9 @@ class WallDistEquationSystem : public EquationSystem void initial_work(); virtual void register_nodal_fields(const stk::mesh::PartVector& part_vec); - - void register_edge_fields(stk::mesh::Part*); - - void register_element_fields(stk::mesh::Part*, const stk::topology&); + virtual void register_edge_fields(const stk::mesh::PartVector& part_vec); + virtual void register_element_fields( + const stk::mesh::PartVector& part_vec, const stk::topology& theTopo); void register_interior_algorithm(stk::mesh::Part*); diff --git a/include/utils/StkHelpers.h b/include/utils/StkHelpers.h index 4ce8ce55c..e200d70ea 100644 --- a/include/utils/StkHelpers.h +++ b/include/utils/StkHelpers.h @@ -99,20 +99,6 @@ get_node_field( *meta.get_field(stk::topology::NODE_RANK, name)->field_state(state)); } -void register_scalar_nodal_field_on_part( - stk::mesh::MetaData& meta, - std::string name, - const stk::mesh::Selector& selector, - int num_states, - double ic = 0); - -void register_vector_nodal_field_on_part( - stk::mesh::MetaData& meta, - std::string name, - const stk::mesh::Selector& selector, - int num_states, - std::array x = {{0, 0, 0}}); - } // namespace nalu } // namespace sierra diff --git a/src/AMSAlgDriver.C b/src/AMSAlgDriver.C index e395dc564..f407d11a5 100644 --- a/src/AMSAlgDriver.C +++ b/src/AMSAlgDriver.C @@ -126,14 +126,15 @@ AMSAlgDriver::register_nodal_fields(const stk::mesh::PartVector& part_vec) } void -AMSAlgDriver::register_edge_fields(stk::mesh::Part* part) +AMSAlgDriver::register_edge_fields(const stk::mesh::PartVector& part_vec) { + stk::mesh::Selector selector = stk::mesh::selectUnion(part_vec); stk::mesh::MetaData& meta = realm_.meta_data(); NaluEnv::self().naluOutputP0() << "Edge Mdot average added in AMS " << std::endl; avgMdot_ = &(meta.declare_field( stk::topology::EDGE_RANK, "average_mass_flow_rate")); - stk::mesh::put_field_on_mesh(*avgMdot_, *part, nullptr); + stk::mesh::put_field_on_mesh(*avgMdot_, selector, nullptr); realm_.augment_restart_variable_list("average_mass_flow_rate"); } diff --git a/src/EquationSystems.C b/src/EquationSystems.C index ceb34b63c..231eaffe9 100644 --- a/src/EquationSystems.C +++ b/src/EquationSystems.C @@ -247,15 +247,13 @@ EquationSystems::parent() return &realm_; } -//-------------------------------------------------------------------------- -//-------- register_nodal_fields ------------------------------------------- -//-------------------------------------------------------------------------- -void -EquationSystems::register_nodal_fields( - const std::vector targetNames) +namespace { +stk::mesh::PartVector +create_part_vec( + stk::mesh::MetaData& meta_data, + const std::vector& targetNames, + const bool element_rank = false) { - stk::mesh::MetaData& meta_data = realm_.meta_data(); - stk::mesh::PartVector part_vec; part_vec.reserve(targetNames.size()); for (const auto& part_name : targetNames) { @@ -266,7 +264,26 @@ EquationSystems::register_nodal_fields( throw std::runtime_error( "Sorry, no part name found by the name " + part_name); } + if (element_rank) { + if (stk::topology::ELEMENT_RANK != part_vec.back()->primary_entity_rank()) + throw std::runtime_error( + "Sorry, parts need to be elements.. " + part_name); + } } + + return part_vec; +} +} // namespace +//-------------------------------------------------------------------------- +//-------- register_nodal_fields ------------------------------------------- +//-------------------------------------------------------------------------- +void +EquationSystems::register_nodal_fields( + const std::vector& targetNames) +{ + stk::mesh::MetaData& meta_data = realm_.meta_data(); + const stk::mesh::PartVector part_vec = + create_part_vec(meta_data, targetNames); realm_.register_nodal_fields(part_vec); EquationSystemVector::iterator ii; for (ii = equationSystemVector_.begin(); ii != equationSystemVector_.end(); @@ -279,23 +296,15 @@ EquationSystems::register_nodal_fields( //-------------------------------------------------------------------------- void EquationSystems::register_edge_fields( - const std::vector targetNames) + const std::vector& targetNames) { stk::mesh::MetaData& meta_data = realm_.meta_data(); - - for (size_t itarget = 0; itarget < targetNames.size(); ++itarget) { - stk::mesh::Part* targetPart = meta_data.get_part(targetNames[itarget]); - if (NULL == targetPart) { - throw std::runtime_error( - "Sorry, no part name found by the name " + targetNames[itarget]); - } else { - // found the part; no need to subset - EquationSystemVector::iterator ii; - for (ii = equationSystemVector_.begin(); - ii != equationSystemVector_.end(); ++ii) - (*ii)->register_edge_fields(targetPart); - } - } + const stk::mesh::PartVector part_vec = + create_part_vec(meta_data, targetNames); + EquationSystemVector::iterator ii; + for (ii = equationSystemVector_.begin(); ii != equationSystemVector_.end(); + ++ii) + (*ii)->register_edge_fields(part_vec); } //-------------------------------------------------------------------------- @@ -303,32 +312,24 @@ EquationSystems::register_edge_fields( //-------------------------------------------------------------------------- void EquationSystems::register_element_fields( - const std::vector targetNames) + const std::vector& targetNames) { stk::mesh::MetaData& meta_data = realm_.meta_data(); ScalarFieldType& elemVolume = meta_data.declare_field( stk::topology::ELEMENT_RANK, "element_volume"); - for (size_t itarget = 0; itarget < targetNames.size(); ++itarget) { - stk::mesh::Part* targetPart = meta_data.get_part(targetNames[itarget]); - if (NULL == targetPart) { - throw std::runtime_error( - "Sorry, no part name found by the name " + targetNames[itarget]); - } else { - // found the part; no need to subset - const stk::topology the_topo = targetPart->topology(); - if (stk::topology::ELEMENT_RANK != targetPart->primary_entity_rank()) { - throw std::runtime_error( - "Sorry, parts need to be elements.. " + targetNames[itarget]); - } - EquationSystemVector::iterator ii; - for (ii = equationSystemVector_.begin(); - ii != equationSystemVector_.end(); ++ii) - (*ii)->register_element_fields(targetPart, the_topo); - - stk::mesh::put_field_on_mesh(elemVolume, *targetPart, 1, nullptr); - } + const stk::mesh::PartVector part_vec = + create_part_vec(meta_data, targetNames, true); + for (auto targetPart : part_vec) { + const stk::mesh::PartVector part(1, targetPart); + const stk::topology the_topo = targetPart->topology(); + EquationSystemVector::iterator ii; + for (ii = equationSystemVector_.begin(); ii != equationSystemVector_.end(); + ++ii) + (*ii)->register_element_fields(part, the_topo); } + stk::mesh::Selector selector = stk::mesh::selectUnion(part_vec); + stk::mesh::put_field_on_mesh(elemVolume, selector, 1, nullptr); } //-------------------------------------------------------------------------- diff --git a/src/LowMachEquationSystem.C b/src/LowMachEquationSystem.C index 9bc9f0769..75e5ca98e 100644 --- a/src/LowMachEquationSystem.C +++ b/src/LowMachEquationSystem.C @@ -355,9 +355,10 @@ LowMachEquationSystem::register_nodal_fields( //-------------------------------------------------------------------------- void LowMachEquationSystem::register_element_fields( - stk::mesh::Part* part, const stk::topology& theTopo) + const stk::mesh::PartVector& part_vec, const stk::topology& theTopo) { stk::mesh::MetaData& meta_data = realm_.meta_data(); + stk::mesh::Selector selector = stk::mesh::selectUnion(part_vec); // register mdot for element-based scheme... if (elementContinuityEqs_) { @@ -369,7 +370,7 @@ LowMachEquationSystem::register_element_fields( GenericFieldType* massFlowRate = &(meta_data.declare_field( stk::topology::ELEMENT_RANK, "mass_flow_rate_scs")); - stk::mesh::put_field_on_mesh(*massFlowRate, *part, numScsIp, nullptr); + stk::mesh::put_field_on_mesh(*massFlowRate, selector, numScsIp, nullptr); } // register the intersected elemental field if (realm_.query_for_overset()) { @@ -378,31 +379,32 @@ LowMachEquationSystem::register_element_fields( &(meta_data.declare_field( stk::topology::ELEMENT_RANK, "intersected_element")); stk::mesh::put_field_on_mesh( - *intersectedElement, *part, sizeOfElemField, nullptr); + *intersectedElement, selector, sizeOfElemField, nullptr); } // provide mean element Peclet and Courant fields; always... GenericFieldType* elemReynolds = &(meta_data.declare_field( stk::topology::ELEMENT_RANK, "element_reynolds")); - stk::mesh::put_field_on_mesh(*elemReynolds, *part, 1, nullptr); + stk::mesh::put_field_on_mesh(*elemReynolds, selector, 1, nullptr); GenericFieldType* elemCourant = &(meta_data.declare_field( stk::topology::ELEMENT_RANK, "element_courant")); - stk::mesh::put_field_on_mesh(*elemCourant, *part, 1, nullptr); + stk::mesh::put_field_on_mesh(*elemCourant, selector, 1, nullptr); } //-------------------------------------------------------------------------- //-------- register_edge_fields ------------------------------------------- //-------------------------------------------------------------------------- void -LowMachEquationSystem::register_edge_fields(stk::mesh::Part* part) +LowMachEquationSystem::register_edge_fields( + const stk::mesh::PartVector& part_vec) { - + stk::mesh::Selector selector = stk::mesh::selectUnion(part_vec); if (realm_.realmUsesEdges_) { stk::mesh::MetaData& meta_data = realm_.meta_data(); const int nDim = meta_data.spatial_dimension(); edgeAreaVec_ = &(meta_data.declare_field( stk::topology::EDGE_RANK, "edge_area_vector")); - stk::mesh::put_field_on_mesh(*edgeAreaVec_, *part, nDim, nullptr); + stk::mesh::put_field_on_mesh(*edgeAreaVec_, selector, nDim, nullptr); } } @@ -1238,7 +1240,8 @@ MomentumEquationSystem::register_nodal_fields( //-------------------------------------------------------------------------- void MomentumEquationSystem::register_element_fields( - stk::mesh::Part* /* part */, const stk::topology& /* theTopo */) + const stk::mesh::PartVector& /* part_vec */, + const stk::topology& /* theTopo */) { } @@ -1246,18 +1249,20 @@ MomentumEquationSystem::register_element_fields( //-------- register_edge_fields ------------------------------------------- //-------------------------------------------------------------------------- void -MomentumEquationSystem::register_edge_fields(stk::mesh::Part* part) +MomentumEquationSystem::register_edge_fields( + const stk::mesh::PartVector& part_vec) { + stk::mesh::Selector selector = stk::mesh::selectUnion(part_vec); ScalarFieldType* pecletFactor = &(realm_.meta_data().declare_field( stk::topology::EDGE_RANK, "peclet_factor")); - stk::mesh::put_field_on_mesh(*pecletFactor, *part, nullptr); + stk::mesh::put_field_on_mesh(*pecletFactor, selector, nullptr); ScalarFieldType* pecletNumber = &(realm_.meta_data().declare_field( stk::topology::EDGE_RANK, "peclet_number")); - stk::mesh::put_field_on_mesh(*pecletNumber, *part, nullptr); + stk::mesh::put_field_on_mesh(*pecletNumber, selector, nullptr); if (realm_.solutionOptions_->turbulenceModel_ == TurbulenceModel::SST_AMS) - AMSAlgDriver_->register_edge_fields(part); + AMSAlgDriver_->register_edge_fields(part_vec); } //-------------------------------------------------------------------------- @@ -2857,7 +2862,8 @@ ContinuityEquationSystem::register_nodal_fields( //-------------------------------------------------------------------------- void ContinuityEquationSystem::register_element_fields( - stk::mesh::Part* /* part */, const stk::topology& /* theTopo */) + const stk::mesh::PartVector& /* part_vec */, + const stk::topology& /* theTopo */) { // nothing as of yet } @@ -2866,12 +2872,14 @@ ContinuityEquationSystem::register_element_fields( //-------- register_edge_fields ------------------------------------------- //-------------------------------------------------------------------------- void -ContinuityEquationSystem::register_edge_fields(stk::mesh::Part* part) +ContinuityEquationSystem::register_edge_fields( + const stk::mesh::PartVector& part_vec) { + stk::mesh::Selector selector = stk::mesh::selectUnion(part_vec); stk::mesh::MetaData& meta_data = realm_.meta_data(); massFlowRate_ = &(meta_data.declare_field( stk::topology::EDGE_RANK, "mass_flow_rate")); - stk::mesh::put_field_on_mesh(*massFlowRate_, *part, nullptr); + stk::mesh::put_field_on_mesh(*massFlowRate_, selector, nullptr); } //-------------------------------------------------------------------------- diff --git a/src/MatrixFreeHeatCondEquationSystem.C b/src/MatrixFreeHeatCondEquationSystem.C index 9ecdd98a9..ac6a54db2 100644 --- a/src/MatrixFreeHeatCondEquationSystem.C +++ b/src/MatrixFreeHeatCondEquationSystem.C @@ -59,33 +59,6 @@ get_node_field( *meta.get_field(stk::topology::NODE_RANK, name)->field_state(state)); } -void -register_scalar_nodal_field_on_part( - stk::mesh::MetaData& meta, - std::string name, - const stk::mesh::Selector& selector, - int num_states, - double ic = 0) -{ - auto& field = meta.declare_field( - stk::topology::NODE_RANK, name, num_states); - stk::mesh::put_field_on_mesh(field, selector, &ic); -} - -void -register_vector_nodal_field_on_part( - stk::mesh::MetaData& meta, - std::string name, - const stk::mesh::Selector& selector, - int num_states, - double ic = 0) -{ - constexpr int dim = MatrixFreeHeatCondEquationSystem::dim; - std::array x{{ic, ic, ic}}; - auto& field = meta.declare_field( - stk::topology::NODE_RANK, name, num_states); - stk::mesh::put_field_on_mesh(field, selector, dim, x.data()); -} } // namespace void @@ -94,19 +67,46 @@ MatrixFreeHeatCondEquationSystem::register_nodal_fields( { constexpr int three_states = 3; constexpr int one_state = 1; + const double zero = 0; stk::mesh::Selector selector = stk::mesh::selectUnion(part_vec); - register_scalar_nodal_field_on_part( - meta_, names::temperature, selector, three_states); - register_scalar_nodal_field_on_part(meta_, names::delta, selector, one_state); - register_scalar_nodal_field_on_part( - meta_, names::volume_weight, selector, one_state); - register_scalar_nodal_field_on_part( - meta_, names::density, selector, one_state); - register_scalar_nodal_field_on_part( - meta_, names::specific_heat, selector, one_state); - register_scalar_nodal_field_on_part( - meta_, names::thermal_conductivity, selector, one_state); - register_vector_nodal_field_on_part(meta_, names::dtdx, selector, one_state); + { + auto& field = meta_.declare_field( + stk::topology::NODE_RANK, names::temperature, three_states); + stk::mesh::put_field_on_mesh(field, selector, &zero); + } + { + auto& field = meta_.declare_field( + stk::topology::NODE_RANK, names::delta, one_state); + stk::mesh::put_field_on_mesh(field, selector, &zero); + } + { + auto& field = meta_.declare_field( + stk::topology::NODE_RANK, names::volume_weight, one_state); + stk::mesh::put_field_on_mesh(field, selector, &zero); + } + { + auto& field = meta_.declare_field( + stk::topology::NODE_RANK, names::density, one_state); + stk::mesh::put_field_on_mesh(field, selector, &zero); + } + { + auto& field = meta_.declare_field( + stk::topology::NODE_RANK, names::specific_heat, one_state); + stk::mesh::put_field_on_mesh(field, selector, &zero); + } + { + auto& field = meta_.declare_field( + stk::topology::NODE_RANK, names::thermal_conductivity, one_state); + stk::mesh::put_field_on_mesh(field, selector, &zero); + } + { + const double zero = 0; + constexpr int dim = MatrixFreeHeatCondEquationSystem::dim; + const std::array x{{zero, zero, zero}}; + auto& field = meta_.declare_field( + stk::topology::NODE_RANK, names::dtdx, one_state); + stk::mesh::put_field_on_mesh(field, selector, dim, x.data()); + } realm_.augment_restart_variable_list(names::temperature); realm_.augment_property_map( @@ -141,18 +141,19 @@ MatrixFreeHeatCondEquationSystem::register_wall_bc( matrix_free::part_is_valid_for_matrix_free(polynomial_order_, *part), "part " + part->name() + " has invalid topology " + part->topology().name() + ". Only Quad4 and Quad9 supported"); - WallUserData userData = wallBCData.userData_; constexpr int one_state = 1; if (userData.tempSpec_) { const auto temperature_data = wallBCData.userData_.temperature_; - register_scalar_nodal_field_on_part( - meta_, names::qbc, *part, one_state, temperature_data.temperature_); + auto& field = meta_.declare_field( + stk::topology::NODE_RANK, names::qbc, one_state); + stk::mesh::put_field_on_mesh(field, *part, &temperature_data.temperature_); dirichlet_selector_ |= *part; } else if (userData.heatFluxSpec_) { const auto flux_data = wallBCData.userData_.q_; - register_scalar_nodal_field_on_part( - meta_, names::flux, *part, one_state, flux_data.qn_); + auto& field = meta_.declare_field( + stk::topology::NODE_RANK, names::flux, one_state); + stk::mesh::put_field_on_mesh(field, *part, &flux_data.qn_); flux_selector_ |= *part; } } diff --git a/src/MatrixFreeLowMachEquationSystem.C b/src/MatrixFreeLowMachEquationSystem.C index e109fc904..7b7bd49f3 100644 --- a/src/MatrixFreeLowMachEquationSystem.C +++ b/src/MatrixFreeLowMachEquationSystem.C @@ -141,43 +141,67 @@ void MatrixFreeLowMachEquationSystem::register_nodal_fields( const stk::mesh::PartVector& part_vec) { + const double zero = 0; + const std::array x{{0, 0, 0}}; + const int dim = meta_.spatial_dimension(); check_part_is_valid(part_vec); ThrowRequire(realm_.number_of_states() == 3); constexpr int one_state = 1; constexpr int three_states = 3; stk::mesh::Selector selector = stk::mesh::selectUnion(part_vec); - register_scalar_nodal_field_on_part( - meta_, names::density, selector, three_states); + { + auto& field = meta_.declare_field( + stk::topology::NODE_RANK, names::density, three_states); + stk::mesh::put_field_on_mesh(field, selector, &zero); + } realm_.augment_restart_variable_list(names::density); realm_.augment_property_map( DENSITY_ID, meta_.get_field(stk::topology::NODE_RANK, names::density)); register_copy_state_algorithm(names::density, 1, part_vec); - register_vector_nodal_field_on_part( - meta_, names::velocity, selector, three_states, {{0, 0, 0}}); + { + auto& field = meta_.declare_field( + stk::topology::NODE_RANK, names::velocity, three_states); + stk::mesh::put_field_on_mesh(field, selector, dim, x.data()); + } realm_.augment_restart_variable_list(names::velocity); register_copy_state_algorithm(names::velocity, dim, part_vec); - - register_scalar_nodal_field_on_part( - meta_, names::viscosity, selector, one_state); + { + auto& field = meta_.declare_field( + stk::topology::NODE_RANK, names::viscosity, one_state); + stk::mesh::put_field_on_mesh(field, selector, &zero); + } realm_.augment_property_map( VISCOSITY_ID, meta_.get_field( stk::topology::NODE_RANK, names::viscosity)); - - register_scalar_nodal_field_on_part( - meta_, names::pressure, selector, one_state, 0); + { + auto& field = meta_.declare_field( + stk::topology::NODE_RANK, names::pressure, one_state); + stk::mesh::put_field_on_mesh(field, selector, &zero); + } realm_.augment_restart_variable_list(names::pressure); - - register_scalar_nodal_field_on_part( - meta_, names::scaled_filter_length, selector, one_state, 0); - register_vector_nodal_field_on_part( - meta_, names::dpdx_tmp, selector, one_state, {{0, 0, 0}}); - register_vector_nodal_field_on_part( - meta_, names::dpdx, selector, one_state, {{0, 0, 0}}); - register_vector_nodal_field_on_part( - meta_, names::body_force, selector, one_state, {{0, 0, 0}}); + { + auto& field = meta_.declare_field( + stk::topology::NODE_RANK, names::scaled_filter_length, one_state); + stk::mesh::put_field_on_mesh(field, selector, &zero); + } + { + auto& field = meta_.declare_field( + stk::topology::NODE_RANK, names::dpdx_tmp, one_state); + stk::mesh::put_field_on_mesh(field, selector, dim, x.data()); + } + { + auto& field = meta_.declare_field( + stk::topology::NODE_RANK, names::dpdx, one_state); + stk::mesh::put_field_on_mesh(field, selector, dim, x.data()); + } + { + auto& field = meta_.declare_field( + stk::topology::NODE_RANK, names::body_force, one_state); + stk::mesh::put_field_on_mesh(field, selector, dim, x.data()); + } } void @@ -201,10 +225,13 @@ MatrixFreeLowMachEquationSystem::register_wall_bc( !(data.wallFunctionApproach_ || data.ablWallFunctionApproach_), "Wall function not implemented"); - constexpr int one_state = 1; - register_vector_nodal_field_on_part( - meta_, names::velocity_bc, *part, one_state, - {{data.u_.ux_, data.u_.uy_, data.u_.uz_}}); + { + constexpr int one_state = 1; + const std::array x{{data.u_.ux_, data.u_.uy_, data.u_.uz_}}; + auto& field = meta_.declare_field( + stk::topology::NODE_RANK, names::velocity_bc, one_state); + stk::mesh::put_field_on_mesh(field, *part, dim, x.data()); + } auto velocity_name = std::string(names::velocity); auto bc_data_type = get_bc_data_type(data, velocity_name); diff --git a/src/VolumeOfFluidEquationSystem.C b/src/VolumeOfFluidEquationSystem.C index d3732068a..7e5723e81 100644 --- a/src/VolumeOfFluidEquationSystem.C +++ b/src/VolumeOfFluidEquationSystem.C @@ -158,7 +158,7 @@ VolumeOfFluidEquationSystem::register_nodal_fields( //-------------------------------------------------------------------------- void VolumeOfFluidEquationSystem::register_element_fields( - stk::mesh::Part* /* part */, const stk::topology& /* theTopo */) + const stk::mesh::PartVector& /*part_vec*/, const stk::topology& /* theTopo */) { // nothing as of yet } @@ -167,12 +167,14 @@ VolumeOfFluidEquationSystem::register_element_fields( //-------- register_edge_fields ------------------------------------------- //-------------------------------------------------------------------------- void -VolumeOfFluidEquationSystem::register_edge_fields(stk::mesh::Part* part) +VolumeOfFluidEquationSystem::register_edge_fields( + const stk::mesh::PartVector& part_vec) { + stk::mesh::Selector selector = stk::mesh::selectUnion(part_vec); stk::mesh::MetaData& meta_data = realm_.meta_data(); auto massFlowRate_ = &(meta_data.declare_field( stk::topology::EDGE_RANK, "mass_flow_rate")); - stk::mesh::put_field_on_mesh(*massFlowRate_, *part, nullptr); + stk::mesh::put_field_on_mesh(*massFlowRate_, selector, nullptr); } //-------------------------------------------------------------------------- diff --git a/src/WallDistEquationSystem.C b/src/WallDistEquationSystem.C index 64028201a..1a72feec1 100644 --- a/src/WallDistEquationSystem.C +++ b/src/WallDistEquationSystem.C @@ -143,27 +143,30 @@ WallDistEquationSystem::register_nodal_fields( } void -WallDistEquationSystem::register_edge_fields(stk::mesh::Part* part) +WallDistEquationSystem::register_edge_fields( + const stk::mesh::PartVector& part_vec) { + stk::mesh::Selector selector = stk::mesh::selectUnion(part_vec); auto& meta = realm_.meta_data(); if (realm_.realmUsesEdges_) { const int nDim = meta.spatial_dimension(); edgeAreaVec_ = &(meta.declare_field( stk::topology::EDGE_RANK, "edge_area_vector")); - stk::mesh::put_field_on_mesh(*edgeAreaVec_, *part, nDim, nullptr); + stk::mesh::put_field_on_mesh(*edgeAreaVec_, selector, nDim, nullptr); } } void WallDistEquationSystem::register_element_fields( - stk::mesh::Part* part, const stk::topology&) + const stk::mesh::PartVector& part_vec, const stk::topology&) { + stk::mesh::Selector selector = stk::mesh::selectUnion(part_vec); if (realm_.query_for_overset()) { auto& meta = realm_.meta_data(); GenericFieldType& intersectedElement = meta.declare_field( stk::topology::ELEMENT_RANK, "intersected_element"); - stk::mesh::put_field_on_mesh(intersectedElement, *part, 1, nullptr); + stk::mesh::put_field_on_mesh(intersectedElement, selector, 1, nullptr); } } diff --git a/src/utils/StkHelpers.C b/src/utils/StkHelpers.C index 029bbe5db..c942c2eea 100644 --- a/src/utils/StkHelpers.C +++ b/src/utils/StkHelpers.C @@ -215,32 +215,5 @@ compute_precise_ghosting_lists( bulk, sendGhostsToRemove, recvGhostsToRemove); } -void -register_scalar_nodal_field_on_part( - stk::mesh::MetaData& meta, - std::string name, - const stk::mesh::Selector& selector, - int num_states, - double ic) -{ - auto& field = meta.declare_field( - stk::topology::NODE_RANK, name, num_states); - stk::mesh::put_field_on_mesh(field, selector, &ic); -} - -void -register_vector_nodal_field_on_part( - stk::mesh::MetaData& meta, - std::string name, - const stk::mesh::Selector& selector, - int num_states, - std::array x) -{ - const int dim = meta.spatial_dimension(); - auto& field = meta.declare_field( - stk::topology::NODE_RANK, name, num_states); - stk::mesh::put_field_on_mesh(field, selector, dim, x.data()); -} - } // namespace nalu } // namespace sierra