From f6f55b768e1d82e516185befbbecd5f923086ae3 Mon Sep 17 00:00:00 2001 From: Heather Pacella Date: Mon, 7 Oct 2024 12:22:40 -0600 Subject: [PATCH] STK: Snapshot 10-07-24 12:22 from Sierra 5.21.5-699-g38edc8e6 --- packages/stk/CHANGELOG.md | 3 + .../stk_coupling/stk_coupling/Constants.hpp | 4 + packages/stk/stk_io/stk_io/OutputFile.hpp | 1 - .../stk/stk_io/stk_io/StkMeshIoBroker.hpp | 6 - .../stk_mesh/baseImpl/NgpFieldBLASImpl.hpp | 23 +- .../baseImpl/elementGraph/ElemElemGraph.cpp | 241 ------------------ .../baseImpl/elementGraph/ElemElemGraph.hpp | 8 - .../elementGraph/ProcessKilledElements.cpp | 240 +++++++++++++++++ .../elementGraph/ProcessKilledElements.hpp | 55 ++++ .../MortonLBVH_TreeManipulationUtils.hpp | 11 +- .../stk/stk_tools/stk_tools/CMakeLists.txt | 1 + .../ElemGraphMultipleSharedSidesUtils.hpp | 1 + .../element_graph/UnitTestElemElemGraph.cpp | 1 + .../UnitTestElemElemGraphChangeOwner.cpp | 1 + .../UnitTestElemElemGraphDeathIntegration.cpp | 2 +- .../element_graph/UnitTestElementDeath.cpp | 1 + .../UnitTestSkinMeshElementDeath.cpp | 1 + .../stk_search/UnitTestCoarseSearch.cpp | 4 + packages/stk/stk_util/stk_util/Version.hpp | 2 +- .../stk/stk_util/stk_util/diag/Option.hpp | 16 +- .../stk_util/registry/ProductRegistry.cpp | 2 +- 21 files changed, 326 insertions(+), 298 deletions(-) create mode 100644 packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ProcessKilledElements.cpp create mode 100644 packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ProcessKilledElements.hpp diff --git a/packages/stk/CHANGELOG.md b/packages/stk/CHANGELOG.md index 0715081353f9..5b1b4b01f5a4 100644 --- a/packages/stk/CHANGELOG.md +++ b/packages/stk/CHANGELOG.md @@ -1,5 +1,8 @@ # CHANGELOG +5.21.5-2 (STK_VERSION 5210502) 10/07/2024 + stk_search: Fixed HIP sort error. + stk_mesh: add multi-field NGP-FieldBLAS field_fill 5.21.5-1 (STK_VERSION 5210501) 9/27/2024 stk_mesh: deprecate BulkData::relation_exist diff --git a/packages/stk/stk_coupling/stk_coupling/Constants.hpp b/packages/stk/stk_coupling/stk_coupling/Constants.hpp index e7eb64fea35c..13a73deb5fc5 100644 --- a/packages/stk/stk_coupling/stk_coupling/Constants.hpp +++ b/packages/stk/stk_coupling/stk_coupling/Constants.hpp @@ -33,6 +33,10 @@ static const std::string TimeStep = "Time Step"; static const std::string FinalTime = "Final Time"; static const std::string IsFinished = "Is Finished"; static const std::string SuccessFlag = "Is Successful"; +static const std::string GlobalVars = "Global Vars"; +static const std::string CouplingVersion = "CouplingVersion"; +static const std::string ConvergenceStatus = "iteration_convergence_status"; +static const std::string StepContinuationStatus = "solve_step_continuation_status"; //ENDCouplingReservedNames } diff --git a/packages/stk/stk_io/stk_io/OutputFile.hpp b/packages/stk/stk_io/stk_io/OutputFile.hpp index 6530f4612ffd..08baf9eec551 100644 --- a/packages/stk/stk_io/stk_io/OutputFile.hpp +++ b/packages/stk/stk_io/stk_io/OutputFile.hpp @@ -213,7 +213,6 @@ class OutputFile void has_adaptivity(bool hasAdaptivity); bool is_skin_mesh() const; - void is_skin_mesh(bool skinMesh); void set_enable_edge_io(bool enableEdgeIO); diff --git a/packages/stk/stk_io/stk_io/StkMeshIoBroker.hpp b/packages/stk/stk_io/stk_io/StkMeshIoBroker.hpp index 918cbe1e796a..2b1201ded8a5 100644 --- a/packages/stk/stk_io/stk_io/StkMeshIoBroker.hpp +++ b/packages/stk/stk_io/stk_io/StkMeshIoBroker.hpp @@ -159,7 +159,6 @@ namespace stk { void set_ghosting_filter(size_t output_file_index, bool hasGhosting); void set_adaptivity_filter(size_t output_file_index, bool hasAdaptivity); - void set_skin_mesh_flag(size_t output_file_index, bool skinMesh); void set_filter_empty_output_entity_blocks(size_t output_file_index, const bool filterEmptyEntityBlocks); void set_filter_empty_output_assembly_entity_blocks(size_t output_file_index, const bool filterEmptyAssemblyEntityBlocks); @@ -853,11 +852,6 @@ namespace stk { m_outputFiles[output_file_index]->has_adaptivity(hasAdaptivity); } - inline void StkMeshIoBroker::set_skin_mesh_flag(size_t output_file_index, bool skinMesh) { - validate_output_file_index(output_file_index); - m_outputFiles[output_file_index]->is_skin_mesh(skinMesh); - } - inline void StkMeshIoBroker::set_filter_empty_output_entity_blocks(size_t output_file_index, const bool filterEmptyEntityBlocks) { validate_output_file_index(output_file_index); m_outputFiles[output_file_index]->set_filter_empty_entity_blocks(filterEmptyEntityBlocks); diff --git a/packages/stk/stk_mesh/stk_mesh/baseImpl/NgpFieldBLASImpl.hpp b/packages/stk/stk_mesh/stk_mesh/baseImpl/NgpFieldBLASImpl.hpp index 1e33e8840f47..5983b997afaa 100644 --- a/packages/stk/stk_mesh/stk_mesh/baseImpl/NgpFieldBLASImpl.hpp +++ b/packages/stk/stk_mesh/stk_mesh/baseImpl/NgpFieldBLASImpl.hpp @@ -288,21 +288,8 @@ void field_fill_impl(const Scalar alpha, } } else { - stk::mesh::HostMesh hostMesh(fields[0]->get_mesh()); - if (nfields == 1) - { - stk::mesh::HostField ngpField(fields[0]->get_mesh(), *fields[0]); - field_fill_for_each_entity(hostMesh, &ngpField, nfields, alpha, component, fieldSelector, execSpace); - } else - { - std::vector> ngpFields; - for (int i=0; i < nfields; ++i) - { - ngpFields.emplace_back(fields[i]->get_mesh(), *fields[i]); - - } - field_fill_for_each_entity(hostMesh, ngpFields.data(), nfields, alpha, component, fieldSelector, execSpace); - } + std::vector fieldsVec(fields, fields+nfields); + stk::mesh::field_fill(alpha, fieldsVec, fieldSelector); } for (int i=0; i < nfields; ++i) @@ -348,11 +335,7 @@ void field_copy_no_mark_t(const stk::mesh::FieldBase& xField, } else { xField.sync_to_host(); - stk::mesh::HostField hostX(xField.get_mesh(), xField); - stk::mesh::HostField hostY(yField.get_mesh(), yField); - stk::mesh::HostMesh hostMesh(xField.get_mesh()); - FieldCopy> fieldCopy(hostX, hostY); - stk::mesh::for_each_entity_run(hostMesh, xField.entity_rank(), selector, fieldCopy); + stk::mesh::field_copy(xField, yField, selector); } } diff --git a/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ElemElemGraph.cpp b/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ElemElemGraph.cpp index 9d75a0a23a96..bd0288d318d6 100644 --- a/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ElemElemGraph.cpp +++ b/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ElemElemGraph.cpp @@ -680,247 +680,6 @@ stk::topology ElemElemGraph::get_topology_of_connected_element(const GraphEdge & return m_element_topologies[graphEdge.elem2()]; } -void report_error_with_invalid_ordinal(std::pair ord_and_perm, const stk::mesh::BulkData& bulkData, const stk::mesh::EntityVector& side_nodes_vec, - stk::mesh::Entity element_with_perm_0, stk::mesh::Entity element_with_perm_4) -{ - if(ord_and_perm.first == stk::mesh::INVALID_CONNECTIVITY_ORDINAL) - { - std::ostringstream os; - os << "Proc: " << bulkData.parallel_rank() << std::endl; - os << "this element: " << bulkData.identifier(element_with_perm_0) << std::endl; - os << "other element: " << bulkData.identifier(element_with_perm_4) << std::endl; - os << "Nodes: "; - - for(stk::mesh::Entity side_node : side_nodes_vec) - { - os << bulkData.identifier(side_node) << " "; - } - - os << std::endl; - std::cerr << os.str(); - } - - STK_ThrowRequireMsg(ord_and_perm.first != stk::mesh::INVALID_CONNECTIVITY_ORDINAL, "yikes!"); - STK_ThrowRequireMsg(ord_and_perm.second != stk::mesh::INVALID_PERMUTATION, "yikes!"); -} - -void ensure_fresh_modifiable_state(stk::mesh::BulkData& bulkData) -{ - if(bulkData.in_modifiable_state()) { - bulkData.modification_end(); - } - bulkData.modification_begin(); -} - -class RemoteDeathBoundary -{ -public: - RemoteDeathBoundary(stk::mesh::BulkData& bulkData, ElemElemGraph& elementGraph, - const stk::mesh::EntityVector& killedElements, const stk::mesh::PartVector& parts_for_creating_side, stk::mesh::Part& active, const stk::mesh::PartVector* boundary_mesh_parts) : - m_bulkData(bulkData), m_elementGraph(elementGraph), m_killedElements(killedElements), m_parts_for_creating_side(parts_for_creating_side), m_active(active), - m_boundary_mesh_parts(boundary_mesh_parts), m_topology_modified(false) - {} - ~RemoteDeathBoundary(){} - - void update_death_boundary_for_remotely_killed_elements(std::vector &shared_modified, - stk::mesh::EntityVector& deletedEntities, - stk::mesh::impl::ParallelSelectedInfo &remoteActiveSelector) - { - std::vector remote_edges = get_remote_edges(); - - for(impl::GraphEdgeProc& re : remote_edges) - { - stk::mesh::EntityId local_id = re.get_local_element_global_id(); - int local_side = re.get_local_element_side_index(); - stk::mesh::EntityId remote_id = re.get_remote_element_global_id(); - int remote_side = re.get_remote_element_side_index(); - - stk::mesh::Entity element = m_bulkData.get_entity(stk::topology::ELEM_RANK, local_id); - - impl::ParallelInfo ¶llel_edge_info = m_elementGraph.get_parallel_edge_info(element, local_side, remote_id, remote_side); - remoteActiveSelector[-remote_id] = false; - - m_topology_modified = true; - - bool create_side = m_bulkData.bucket(element).member(m_active); - if(create_side==true) - { - impl::add_side_into_exposed_boundary(m_bulkData, - parallel_edge_info, - element, - local_side, - remote_id, - m_parts_for_creating_side, - shared_modified, - remoteActiveSelector, - m_boundary_mesh_parts); - } - else - { - impl::remove_side_from_death_boundary(m_bulkData, element, m_active, deletedEntities, local_side); - } - } - } - - void set_topology_is_modified() - { - m_topology_modified = true; - } - - bool get_topology_modification_status() const - { - return m_topology_modified; - } - -private: - - std::vector get_remote_edges() const - { - std::vector elements_to_comm = get_elements_to_communicate(); - return impl::communicate_killed_entities(m_bulkData.parallel(), elements_to_comm); - } - - std::vector get_elements_to_communicate() const - { - std::vector elements_to_comm; - - for(stk::mesh::Entity this_element :m_killedElements) - { - for(size_t j=0;j shared_modified; - stk::mesh::EntityVector deletedEntities; - - bulkData.initialize_face_adjacent_element_graph(); - ElemElemGraph& elementGraph = bulkData.get_face_adjacent_element_graph(); - - RemoteDeathBoundary remote_death_boundary(bulkData, elementGraph, killedElements, parts_for_creating_side, active, boundary_mesh_parts); - remote_death_boundary.update_death_boundary_for_remotely_killed_elements(shared_modified, deletedEntities, remoteActiveSelector); - - std::vector element_side_pairs; - element_side_pairs.reserve(impl::get_element_side_multiplier() * killedElements.size()); - - for(size_t k = 0; k < killedElements.size(); ++k) - { - stk::mesh::Entity this_element = killedElements[k]; - - for(size_t j = 0; j < elementGraph.get_num_connected_elems(this_element); ++j) - { - if(impl::does_element_have_side(bulkData, this_element)) - { - remote_death_boundary.set_topology_is_modified(); - if(elementGraph.is_connected_elem_locally_owned(this_element, j)) - { - impl::ElementViaSidePair other_element_via_side = elementGraph.get_connected_element_and_via_side(this_element, j); - stk::mesh::Entity other_element = other_element_via_side.element; - if(impl::does_element_have_side(bulkData, other_element_via_side.element)) - { - int side_id = other_element_via_side.side; - STK_ThrowRequireWithSierraHelpMsg(side_id != -1); - - bool is_other_element_alive = bulkData.bucket(other_element).member(active); - if(is_other_element_alive) - { - stk::mesh::Entity side = stk::mesh::get_side_entity_for_elem_side_pair(bulkData, this_element, side_id); - - if(bulkData.is_valid(side)) - { - if(bulkData.bucket(side).owned()) - { - stk::mesh::ConstPartVector parts = impl::get_stk_parts_for_moving_parts_into_death_boundary(boundary_mesh_parts); - bulkData.change_entity_parts(side, parts); - } - } - else - { - stk::mesh::PartVector parts = impl::get_parts_for_creating_side(bulkData, parts_for_creating_side, other_element, side_id); - - // switch elements - stk::mesh::Entity element_with_perm_0 = other_element; - stk::mesh::Entity element_with_perm_4 = this_element; - - int side_id_needed = elementGraph.get_connected_elements_side(this_element, j); - - STK_ThrowRequireMsg(side_id_needed >= 0, "ERROR: proc " << bulkData.parallel_rank() << " found side_id_needed=" << side_id_needed - << " between elem " << bulkData.identifier(element_with_perm_0)<< " and " << bulkData.identifier(element_with_perm_4) - << " in elem-elem-graph"); - - side = bulkData.declare_element_side(element_with_perm_0, side_id_needed, parts); - } - } - else - { - impl::remove_side_from_death_boundary(bulkData, this_element, active, deletedEntities, side_id); - } - } - } - else - { - impl::IdViaSidePair remote_id_side_pair = elementGraph.get_connected_remote_id_and_via_side(this_element, j); - stk::mesh::EntityId remote_id = remote_id_side_pair.id; - int remote_side = elementGraph.get_connected_elements_side(this_element, j); - impl::ParallelInfo ¶llel_edge_info = elementGraph.get_parallel_edge_info(this_element, remote_id_side_pair.side, remote_id, remote_side); - bool other_element_active = remoteActiveSelector[-remote_id]; - bool create_side = other_element_active; - - if(create_side) - { - impl::add_side_into_exposed_boundary(bulkData, parallel_edge_info, this_element, remote_id_side_pair.side, remote_id, parts_for_creating_side, - shared_modified, remoteActiveSelector, boundary_mesh_parts); - } - else - { - int side_id = remote_id_side_pair.side; - STK_ThrowRequireWithSierraHelpMsg(side_id != -1); - impl::remove_side_from_death_boundary(bulkData, this_element, active, deletedEntities, side_id); - } - } - } - } - } - stk::mesh::impl::delete_entities_and_upward_relations(bulkData, deletedEntities); - bulkData.make_mesh_parallel_consistent_after_element_death(shared_modified, deletedEntities, elementGraph, killedElements, active, modEndOpt); - bulkData.m_bucket_repository.set_remove_mode_fill_and_sort(); - return remote_death_boundary.get_topology_modification_status(); -} - stk::mesh::SideIdChooser ElemElemGraph::get_side_id_chooser() { return stk::mesh::SideIdChooser(m_bulk_data, m_idMapper, m_graph, m_coincidentGraph); diff --git a/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ElemElemGraph.hpp b/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ElemElemGraph.hpp index 15ff94150702..1f781168b37a 100644 --- a/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ElemElemGraph.hpp +++ b/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ElemElemGraph.hpp @@ -350,14 +350,6 @@ class ElemElemGraph std::string print_edge(const GraphEdge& graphEdge); }; -bool process_killed_elements(stk::mesh::BulkData& bulkData, - const stk::mesh::EntityVector& killedElements, - stk::mesh::Part& active, - stk::mesh::impl::ParallelSelectedInfo &remoteActiveSelector, - const stk::mesh::PartVector& side_parts, - const stk::mesh::PartVector* boundary_mesh_parts = nullptr, - stk::mesh::ModEndOptimizationFlag modEndOpt = stk::mesh::ModEndOptimizationFlag::MOD_END_SORT); - namespace impl { diff --git a/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ProcessKilledElements.cpp b/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ProcessKilledElements.cpp new file mode 100644 index 000000000000..97909707db7f --- /dev/null +++ b/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ProcessKilledElements.cpp @@ -0,0 +1,240 @@ +#include "ProcessKilledElements.hpp" +#include "ElemElemGraph.hpp" +#include "ElemElemGraphImpl.hpp" + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +namespace stk { namespace mesh { + +void ensure_fresh_modifiable_state(stk::mesh::BulkData& bulkData) +{ + if(bulkData.in_modifiable_state()) { + bulkData.modification_end(); + } + bulkData.modification_begin(); +} + +class RemoteDeathBoundary +{ +public: + RemoteDeathBoundary(stk::mesh::BulkData& bulkData, ElemElemGraph& elementGraph, + const stk::mesh::EntityVector& killedElements, const stk::mesh::PartVector& parts_for_creating_side, stk::mesh::Part& active, const stk::mesh::PartVector* boundary_mesh_parts) : + m_bulkData(bulkData), m_elementGraph(elementGraph), m_killedElements(killedElements), m_parts_for_creating_side(parts_for_creating_side), m_active(active), + m_boundary_mesh_parts(boundary_mesh_parts), m_topology_modified(false) + {} + ~RemoteDeathBoundary(){} + + void update_death_boundary_for_remotely_killed_elements(std::vector &shared_modified, + stk::mesh::EntityVector& deletedEntities, + stk::mesh::impl::ParallelSelectedInfo &remoteActiveSelector) + { + std::vector remote_edges = get_remote_edges(); + + for(impl::GraphEdgeProc& re : remote_edges) + { + stk::mesh::EntityId local_id = re.get_local_element_global_id(); + int local_side = re.get_local_element_side_index(); + stk::mesh::EntityId remote_id = re.get_remote_element_global_id(); + int remote_side = re.get_remote_element_side_index(); + + stk::mesh::Entity element = m_bulkData.get_entity(stk::topology::ELEM_RANK, local_id); + + impl::ParallelInfo ¶llel_edge_info = m_elementGraph.get_parallel_edge_info(element, local_side, remote_id, remote_side); + remoteActiveSelector[-remote_id] = false; + + m_topology_modified = true; + + bool create_side = m_bulkData.bucket(element).member(m_active); + if(create_side==true) + { + impl::add_side_into_exposed_boundary(m_bulkData, + parallel_edge_info, + element, + local_side, + remote_id, + m_parts_for_creating_side, + shared_modified, + remoteActiveSelector, + m_boundary_mesh_parts); + } + else + { + impl::remove_side_from_death_boundary(m_bulkData, element, m_active, deletedEntities, local_side); + } + } + } + + void set_topology_is_modified() + { + m_topology_modified = true; + } + + bool get_topology_modification_status() const + { + return m_topology_modified; + } + +private: + + std::vector get_remote_edges() const + { + std::vector elements_to_comm = get_elements_to_communicate(); + return impl::communicate_killed_entities(m_bulkData.parallel(), elements_to_comm); + } + + std::vector get_elements_to_communicate() const + { + std::vector elements_to_comm; + + for(stk::mesh::Entity this_element :m_killedElements) + { + for(size_t j=0;j shared_modified; + stk::mesh::EntityVector deletedEntities; + + bulkData.initialize_face_adjacent_element_graph(); + ElemElemGraph& elementGraph = bulkData.get_face_adjacent_element_graph(); + + RemoteDeathBoundary remote_death_boundary(bulkData, elementGraph, killedElements, parts_for_creating_side, active, boundary_mesh_parts); + remote_death_boundary.update_death_boundary_for_remotely_killed_elements(shared_modified, deletedEntities, remoteActiveSelector); + + std::vector element_side_pairs; + element_side_pairs.reserve(impl::get_element_side_multiplier() * killedElements.size()); + + for(size_t k = 0; k < killedElements.size(); ++k) + { + stk::mesh::Entity this_element = killedElements[k]; + + for(size_t j = 0; j < elementGraph.get_num_connected_elems(this_element); ++j) + { + if(impl::does_element_have_side(bulkData, this_element)) + { + remote_death_boundary.set_topology_is_modified(); + if(elementGraph.is_connected_elem_locally_owned(this_element, j)) + { + impl::ElementViaSidePair other_element_via_side = elementGraph.get_connected_element_and_via_side(this_element, j); + stk::mesh::Entity other_element = other_element_via_side.element; + if(impl::does_element_have_side(bulkData, other_element_via_side.element)) + { + int side_id = other_element_via_side.side; + STK_ThrowRequireWithSierraHelpMsg(side_id != -1); + + bool is_other_element_alive = bulkData.bucket(other_element).member(active); + if(is_other_element_alive) + { + stk::mesh::Entity side = stk::mesh::get_side_entity_for_elem_side_pair(bulkData, this_element, side_id); + + if(bulkData.is_valid(side)) + { + if(bulkData.bucket(side).owned()) + { + stk::mesh::ConstPartVector parts = impl::get_stk_parts_for_moving_parts_into_death_boundary(boundary_mesh_parts); + bulkData.change_entity_parts(side, parts); + } + } + else + { + stk::mesh::PartVector parts = impl::get_parts_for_creating_side(bulkData, parts_for_creating_side, other_element, side_id); + + // switch elements + stk::mesh::Entity element_with_perm_0 = other_element; + stk::mesh::Entity element_with_perm_4 = this_element; + + int side_id_needed = elementGraph.get_connected_elements_side(this_element, j); + + STK_ThrowRequireMsg(side_id_needed >= 0, "ERROR: proc " << bulkData.parallel_rank() << " found side_id_needed=" << side_id_needed + << " between elem " << bulkData.identifier(element_with_perm_0)<< " and " << bulkData.identifier(element_with_perm_4) + << " in elem-elem-graph"); + + side = bulkData.declare_element_side(element_with_perm_0, side_id_needed, parts); + } + } + else + { + impl::remove_side_from_death_boundary(bulkData, this_element, active, deletedEntities, side_id); + } + } + } + else + { + impl::IdViaSidePair remote_id_side_pair = elementGraph.get_connected_remote_id_and_via_side(this_element, j); + stk::mesh::EntityId remote_id = remote_id_side_pair.id; + int remote_side = elementGraph.get_connected_elements_side(this_element, j); + impl::ParallelInfo ¶llel_edge_info = elementGraph.get_parallel_edge_info(this_element, remote_id_side_pair.side, remote_id, remote_side); + bool other_element_active = remoteActiveSelector[-remote_id]; + bool create_side = other_element_active; + + if(create_side) + { + impl::add_side_into_exposed_boundary(bulkData, parallel_edge_info, this_element, remote_id_side_pair.side, remote_id, parts_for_creating_side, + shared_modified, remoteActiveSelector, boundary_mesh_parts); + } + else + { + int side_id = remote_id_side_pair.side; + STK_ThrowRequireWithSierraHelpMsg(side_id != -1); + impl::remove_side_from_death_boundary(bulkData, this_element, active, deletedEntities, side_id); + } + } + } + } + } + stk::mesh::impl::delete_entities_and_upward_relations(bulkData, deletedEntities); + bulkData.make_mesh_parallel_consistent_after_element_death(shared_modified, deletedEntities, elementGraph, killedElements, active, modEndOpt); + bulkData.m_bucket_repository.set_remove_mode_fill_and_sort(); + return remote_death_boundary.get_topology_modification_status(); +} + +}} // end namespaces stk mesh + diff --git a/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ProcessKilledElements.hpp b/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ProcessKilledElements.hpp new file mode 100644 index 000000000000..12c864542394 --- /dev/null +++ b/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ProcessKilledElements.hpp @@ -0,0 +1,55 @@ +// Copyright 2002 - 2008, 2010, 2011 National Technology Engineering +// Solutions of Sandia, LLC (NTESS). Under the terms of Contract +// DE-NA0003525 with NTESS, the U.S. Government retains certain rights +// in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// +// * Neither the name of NTESS nor the names of its contributors +// may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef STK_PROCESS_KILLED_ELEMENTS_HPP +#define STK_PROCESS_KILLED_ELEMENTS_HPP + +#include +#include +#include + +namespace stk { namespace mesh { +class Part; +class BulkData; + +bool process_killed_elements(stk::mesh::BulkData& bulkData, + const stk::mesh::EntityVector& killedElements, + stk::mesh::Part& active, + stk::mesh::impl::ParallelSelectedInfo &remoteActiveSelector, + const stk::mesh::PartVector& side_parts, + const stk::mesh::PartVector* boundary_mesh_parts = nullptr, + stk::mesh::impl::MeshModification::modification_optimization modEndOpt = stk::mesh::impl::MeshModification::modification_optimization::MOD_END_SORT); + +}} // end stk mesh namespaces + +#endif diff --git a/packages/stk/stk_search/stk_search/morton_lbvh/MortonLBVH_TreeManipulationUtils.hpp b/packages/stk/stk_search/stk_search/morton_lbvh/MortonLBVH_TreeManipulationUtils.hpp index b080ccf30b20..ff76f6ad9c5d 100644 --- a/packages/stk/stk_search/stk_search/morton_lbvh/MortonLBVH_TreeManipulationUtils.hpp +++ b/packages/stk/stk_search/stk_search/morton_lbvh/MortonLBVH_TreeManipulationUtils.hpp @@ -430,13 +430,10 @@ struct SortByCode { static void apply(const TreeType &tree, ExecutionSpace const& execSpace) { - if constexpr (Kokkos::SpaceAccessibility::accessible) { + if constexpr (Kokkos::SpaceAccessibility::accessible) { SortByCodeIdPair::apply(tree); } else { -//#if KOKKOS_VERSION >= 40300 -// Kokkos::Experimental::sort_by_key(execSpace, tree.m_leafCodes, tree.m_leafIds); -//#elif defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_ROCTHRUST) #if defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_ROCTHRUST) const int n = tree.m_leafIds.extent(0); @@ -447,7 +444,11 @@ struct SortByCode //thrust::stable_sort_by_key(rawLeafCodesThr, rawLeafCodesThr + n, rawLeafIdsThr); thrust::sort_by_key(rawLeafCodesThr, rawLeafCodesThr + n, rawLeafIdsThr); #else - STK_ThrowErrorMsg("shouldn't be able to get here"); // SortByCodeIdPair::apply(tree); +#if KOKKOS_VERSION >= 40300 + Kokkos::Experimental::sort_by_key(execSpace, tree.m_leafCodes, tree.m_leafIds); +#else + STK_ThrowErrorMessage("Need at least Kokkos 4.3"); +#endif #endif } } diff --git a/packages/stk/stk_tools/stk_tools/CMakeLists.txt b/packages/stk/stk_tools/stk_tools/CMakeLists.txt index 1e23d08ad8e2..33abe11f882c 100644 --- a/packages/stk/stk_tools/stk_tools/CMakeLists.txt +++ b/packages/stk/stk_tools/stk_tools/CMakeLists.txt @@ -79,6 +79,7 @@ else() add_library(stk_transfer_utils_lib ${TRANSFER_UTILS_SOURCES}) target_link_libraries(stk_transfer_utils_lib PUBLIC stk_io) target_link_libraries(stk_transfer_utils_lib PUBLIC stk_transfer) + target_link_libraries(stk_transfer_utils_lib PRIVATE stk_util_registry) add_library(stk_tools_lib ${MESH_CLONE_SOURCES} ${MESH_TOOLS_SOURCES} ${BLOCK_EXTRACTOR_SOURCES}) target_link_libraries(stk_tools_lib PUBLIC stk_io) diff --git a/packages/stk/stk_unit_test_utils/stk_unit_test_utils/ElemGraphMultipleSharedSidesUtils.hpp b/packages/stk/stk_unit_test_utils/stk_unit_test_utils/ElemGraphMultipleSharedSidesUtils.hpp index 2957958ca339..212a1097572b 100644 --- a/packages/stk/stk_unit_test_utils/stk_unit_test_utils/ElemGraphMultipleSharedSidesUtils.hpp +++ b/packages/stk/stk_unit_test_utils/stk_unit_test_utils/ElemGraphMultipleSharedSidesUtils.hpp @@ -56,6 +56,7 @@ #include #include #include +#include #include diff --git a/packages/stk/stk_unit_tests/stk_mesh/face_creation/element_graph/UnitTestElemElemGraph.cpp b/packages/stk/stk_unit_tests/stk_mesh/face_creation/element_graph/UnitTestElemElemGraph.cpp index 5f4f5d8447f2..66c0d2867773 100644 --- a/packages/stk/stk_unit_tests/stk_mesh/face_creation/element_graph/UnitTestElemElemGraph.cpp +++ b/packages/stk/stk_unit_tests/stk_mesh/face_creation/element_graph/UnitTestElemElemGraph.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include diff --git a/packages/stk/stk_unit_tests/stk_mesh/face_creation/element_graph/UnitTestElemElemGraphChangeOwner.cpp b/packages/stk/stk_unit_tests/stk_mesh/face_creation/element_graph/UnitTestElemElemGraphChangeOwner.cpp index e836d09b0327..5a27b594c4c7 100644 --- a/packages/stk/stk_unit_tests/stk_mesh/face_creation/element_graph/UnitTestElemElemGraphChangeOwner.cpp +++ b/packages/stk/stk_unit_tests/stk_mesh/face_creation/element_graph/UnitTestElemElemGraphChangeOwner.cpp @@ -25,6 +25,7 @@ #include #include // for change_entity_owner, etc #include // for parallel_info +#include #include namespace stk { namespace mesh { class Part; } } diff --git a/packages/stk/stk_unit_tests/stk_mesh/face_creation/element_graph/UnitTestElemElemGraphDeathIntegration.cpp b/packages/stk/stk_unit_tests/stk_mesh/face_creation/element_graph/UnitTestElemElemGraphDeathIntegration.cpp index beea53050de9..1ef2f70fb169 100644 --- a/packages/stk/stk_unit_tests/stk_mesh/face_creation/element_graph/UnitTestElemElemGraphDeathIntegration.cpp +++ b/packages/stk/stk_unit_tests/stk_mesh/face_creation/element_graph/UnitTestElemElemGraphDeathIntegration.cpp @@ -3,7 +3,7 @@ #include // for BulkData, etc #include // for count_selected_entities, etc #include // for MetaData -#include // for process_killed_elements +#include #include #include // for topology, etc #include // for parallel_machine_rank, etc diff --git a/packages/stk/stk_unit_tests/stk_mesh/face_creation/element_graph/UnitTestElementDeath.cpp b/packages/stk/stk_unit_tests/stk_mesh/face_creation/element_graph/UnitTestElementDeath.cpp index 487036273f6a..8ef6e71e9569 100644 --- a/packages/stk/stk_unit_tests/stk_mesh/face_creation/element_graph/UnitTestElementDeath.cpp +++ b/packages/stk/stk_unit_tests/stk_mesh/face_creation/element_graph/UnitTestElementDeath.cpp @@ -10,6 +10,7 @@ #include // for get_selected_entities, etc #include // for MetaData #include // for process_killed_elements, etc +#include #include // for topology, etc #include // for fill_mesh_using_stk_io, etc #include // for parallel_machine_size, etc diff --git a/packages/stk/stk_unit_tests/stk_mesh/face_creation/integration/UnitTestSkinMeshElementDeath.cpp b/packages/stk/stk_unit_tests/stk_mesh/face_creation/integration/UnitTestSkinMeshElementDeath.cpp index 0136648ed7be..5b62dd5d6b8a 100644 --- a/packages/stk/stk_unit_tests/stk_mesh/face_creation/integration/UnitTestSkinMeshElementDeath.cpp +++ b/packages/stk/stk_unit_tests/stk_mesh/face_creation/integration/UnitTestSkinMeshElementDeath.cpp @@ -5,6 +5,7 @@ #include // for put_io_part_attribute #include // for BulkData #include // for process_killed_elements, etc +#include #include // for get_selected_entities #include // for MetaData #include // for topology, etc diff --git a/packages/stk/stk_unit_tests/stk_search/UnitTestCoarseSearch.cpp b/packages/stk/stk_unit_tests/stk_search/UnitTestCoarseSearch.cpp index d609ce5df8c2..bca87004fe8a 100644 --- a/packages/stk/stk_unit_tests/stk_search/UnitTestCoarseSearch.cpp +++ b/packages/stk/stk_unit_tests/stk_search/UnitTestCoarseSearch.cpp @@ -493,6 +493,10 @@ TEST(stk_search, Local_CoarseSearchWithViews_MORTON_LBVH) TEST(stk_search, Local_CoarseSearchWithViews_ARBORX) { +#ifndef STK_HAS_ARBORX + GTEST_SKIP(); +#endif + local_test_coarse_search_for_algorithm_with_views(stk::search::ARBORX); local_test_coarse_search_for_algorithm_with_views(stk::search::ARBORX); } diff --git a/packages/stk/stk_util/stk_util/Version.hpp b/packages/stk/stk_util/stk_util/Version.hpp index aedfb9cb959f..f021530e66ee 100644 --- a/packages/stk/stk_util/stk_util/Version.hpp +++ b/packages/stk/stk_util/stk_util/Version.hpp @@ -44,7 +44,7 @@ //See the file CHANGELOG.md for a listing that shows the //correspondence between version numbers and API changes. -#define STK_VERSION 5210501 +#define STK_VERSION 5210502 namespace stk diff --git a/packages/stk/stk_util/stk_util/diag/Option.hpp b/packages/stk/stk_util/stk_util/diag/Option.hpp index ec26e9a79394..839d8bd64945 100644 --- a/packages/stk/stk_util/stk_util/diag/Option.hpp +++ b/packages/stk/stk_util/stk_util/diag/Option.hpp @@ -76,7 +76,7 @@ struct OptionDescription * interface so that a help description may be generated. * */ -struct Option : public OptionDescription +struct Option { /** * Creates a new Option instance. @@ -163,18 +163,6 @@ struct Option : public OptionDescription return m_value; } - /** - * @brief Member function describe prints a description of the option to - * the stream. - * - * @param os a std::ostream reference to print to - * description to. - * - * @return a std::ostream reference to the output - * stream. - */ - virtual std::ostream &describe(std::ostream &os) const; - operator std::string &() { return m_value; } @@ -187,7 +175,7 @@ struct Option : public OptionDescription }; -struct OptionMaskName +struct OptionMaskName : public OptionDescription { /** * Creates a new OptionMaskName instance. diff --git a/packages/stk/stk_util/stk_util/registry/ProductRegistry.cpp b/packages/stk/stk_util/stk_util/registry/ProductRegistry.cpp index 48109fc4c112..d1acaca9193b 100644 --- a/packages/stk/stk_util/stk_util/registry/ProductRegistry.cpp +++ b/packages/stk/stk_util/stk_util/registry/ProductRegistry.cpp @@ -42,7 +42,7 @@ //In Sierra, STK_VERSION_STRING is provided on the compile line by bake. //For Trilinos stk snapshots, the following macro definition gets populated with //the real version string by the trilinos_snapshot.sh script. -#define STK_VERSION_STRING "5.21.5-353-g60799ad8" +#define STK_VERSION_STRING "5.21.5-699-g38edc8e6" #endif namespace stk {