diff --git a/packages/percept/cmake/Dependencies.cmake b/packages/percept/cmake/Dependencies.cmake index 3f62f47c913c..298764cda6bb 100644 --- a/packages/percept/cmake/Dependencies.cmake +++ b/packages/percept/cmake/Dependencies.cmake @@ -1,6 +1,5 @@ TRIBITS_PACKAGE_DEFINE_DEPENDENCIES( LIB_REQUIRED_PACKAGES SEACASIoss STKUtil STKIO STKMesh STKExprEval STKSearch STKTransfer Intrepid TEST_OPTIONAL_PACKAGES Gtest - LIB_REQUIRED_TPLS BoostLib LIB_OPTIONAL_TPLS OpenNURBS ) diff --git a/packages/percept/src/adapt/AdaptedMeshVerifier.cpp b/packages/percept/src/adapt/AdaptedMeshVerifier.cpp index 09d4ec1e53e4..07005bf8752e 100644 --- a/packages/percept/src/adapt/AdaptedMeshVerifier.cpp +++ b/packages/percept/src/adapt/AdaptedMeshVerifier.cpp @@ -315,12 +315,12 @@ namespace percept std::string stol = eMesh.getProperty("AdaptedMeshVerifier::checkParentChildVol::edgeTol"); if (stol.length()) { - edgeTol = boost::lexical_cast(stol); + edgeTol = std::stod(stol); } stol = eMesh.getProperty("AdaptedMeshVerifier::checkParentChildVol::volumeTol"); if (stol.length()) { - volumeTol = boost::lexical_cast(stol); + volumeTol = std::stod(stol); } bool badVol = false; bool badNode = false; diff --git a/packages/percept/src/adapt/Allocate.cpp b/packages/percept/src/adapt/Allocate.cpp deleted file mode 100644 index 8338444ca2a6..000000000000 --- a/packages/percept/src/adapt/Allocate.cpp +++ /dev/null @@ -1,99 +0,0 @@ -// 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. -// -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. -/* - * Allocate.cpp - * - * Created on: Jan 22, 2011 - * Author: kdcopps - */ - -// this is here only to avoid a warning on Mac builds - it was complaining about no symbols existing in this file - - namespace percept { - void dummyAllocateMethodForMacBuildWarning() - { - } - } - -#ifdef STK_ADAPT_REPLACE_NEW_DELETE - -#ifdef STK_HAVE_TBB -#include - -#pragma GCC visibility push(hidden) - -extern "C++" -{ - void* operator new(std::size_t) throw (std::bad_alloc); - void* operator new[](std::size_t) throw (std::bad_alloc); - void* operator new(std::size_t, const std::nothrow_t&) throw(); - void* operator new[](std::size_t, const std::nothrow_t&) throw(); - void operator delete(void*) throw(); - void operator delete[](void*) throw(); - void operator delete(void*, const std::nothrow_t&) throw(); - void operator delete[](void*, const std::nothrow_t&) throw(); -} // extern "C++" - -#pragma GCC visibility pop - - -// See Intel Threading Building Blocks, James Reinders (2007). -// chapter 11.11.1. Replacing new and delete -// -// No retry loop because we assume that scalable_malloc does -// all it takes to allocate the memory, so calling it repeatedly -// will not improve the situation at all -// -// No use of std::new_handler because it cannot be done in portable -// and thread-safe way (see sidebar) -// -// We throw std::bad_alloc() when scalable_malloc returns NULL -//(we return NULL if it is a no-throw implementation) - - -void* operator new (size_t size) throw (std::bad_alloc) { - if (size == 0) size = 1; - if (void* ptr = scalable_malloc (size)) - return ptr; - throw std::bad_alloc (); -} - -void* operator new[] (size_t size) throw (std::bad_alloc) { - return operator new (size); -} - -void* operator new (size_t size, const std::nothrow_t&) throw () { - if (size == 0) size = 1; - if (void* ptr = scalable_malloc (size)) - return ptr; - return NULL; -} - -void* operator new[] (size_t size, const std::nothrow_t&) throw () { - return operator new (size, std::nothrow); -} - -void operator delete (void* ptr) throw () { - if (ptr != 0) scalable_free (ptr); -} - -void operator delete[] (void* ptr) throw () { - operator delete (ptr); -} - -void operator delete (void* ptr, const std::nothrow_t&) throw () { - if (ptr != 0) scalable_free (ptr); -} - -void operator delete[] (void* ptr, const std::nothrow_t&) throw () { - operator delete (ptr, std::nothrow); -} - -#endif // STK_HAVE_TBB - -#endif // STK_ADAPT_REPLACE_NEW_DELETE diff --git a/packages/percept/src/adapt/Colorer.cpp b/packages/percept/src/adapt/Colorer.cpp index 4c7a70092478..28dd81c013ad 100644 --- a/packages/percept/src/adapt/Colorer.cpp +++ b/packages/percept/src/adapt/Colorer.cpp @@ -154,11 +154,7 @@ double *fdata = stk::mesh::field_data( *static_cast(element_color_field) , element ); fdata[0] = double(icolor); } -#if STK_ADAPT_COLORER_SET_TYPE_USE_VECTOR m_element_colors[icolor].push_back(element); -#else - m_element_colors[icolor].insert(element); -#endif if (!m_noColoring) { all_elements.insert(elem_id); diff --git a/packages/percept/src/adapt/Colorer.hpp b/packages/percept/src/adapt/Colorer.hpp index 575494798dea..9d7208a65d5e 100644 --- a/packages/percept/src/adapt/Colorer.hpp +++ b/packages/percept/src/adapt/Colorer.hpp @@ -26,37 +26,16 @@ #include -#define STK_ADAPT_COLORER_STORED_ENTITYID 0 - -#define STK_ADAPT_COLORER_SET_TYPE_USE_VECTOR 1 - -/// define only one of these to be 1 -#define STK_ADAPT_COLORER_SET_TYPE_BOOST 1 - -#if STK_ADAPT_COLORER_SET_TYPE_BOOST -#include -#endif - +#include namespace percept { -#if STK_ADAPT_COLORER_STORED_ENTITYID - typedef stk::mesh::EntityId ColorerStoredEntity; -#else typedef stk::mesh::Entity ColorerStoredEntity; -#endif -#if STK_ADAPT_COLORER_SET_TYPE_USE_VECTOR typedef std::vector ColorerSetType; -#endif -#if STK_ADAPT_COLORER_SET_TYPE_BOOST -# if !STK_ADAPT_COLORER_SET_TYPE_USE_VECTOR - typedef boost::unordered_set ColorerSetType; -# endif - typedef boost::unordered_set ColorerNodeSetType; - typedef boost::unordered_set ColorerElementSetType; -#endif + typedef std::unordered_set ColorerNodeSetType; + typedef std::unordered_set ColorerElementSetType; class Colorer { diff --git a/packages/percept/src/adapt/DiscretizeHex.hpp b/packages/percept/src/adapt/DiscretizeHex.hpp index 5324dc1b94d3..07ec9a9e1647 100644 --- a/packages/percept/src/adapt/DiscretizeHex.hpp +++ b/packages/percept/src/adapt/DiscretizeHex.hpp @@ -15,13 +15,13 @@ namespace percept { - typedef boost::array hex_to_tet_tuple_type_local; - typedef boost::array hex_to_pyr_tuple_type_local; - typedef boost::array hex_to_tet_tuple_type; - typedef boost::array hex_to_pyr_tuple_type; + typedef std::array hex_to_tet_tuple_type_local; + typedef std::array hex_to_pyr_tuple_type_local; + typedef std::array hex_to_tet_tuple_type; + typedef std::array hex_to_pyr_tuple_type; - typedef boost::array hex_to_hex_tuple_type_local; - typedef boost::array hex_to_hex_tuple_type; + typedef std::array hex_to_hex_tuple_type_local; + typedef std::array hex_to_hex_tuple_type; /** * @@ -252,7 +252,7 @@ namespace percept { if (elems_tri.size() == 0 && elems_quad.size() == 0) { VERIFY_OP_ON(num_quad_edge_marks, ==, 0, "hmm"); - elems_quad.push_back(quad_to_quad_tuple_type_local(0,1,2,3)); + elems_quad.push_back({0,1,2,3}); } if (m_debug) { @@ -274,10 +274,10 @@ namespace percept { hex_to_pyr_tuple_type_local hp; // reverse order to get proper volume - hp[3] = elems_quad[iquad].get<0>(); - hp[2] = elems_quad[iquad].get<1>(); - hp[1] = elems_quad[iquad].get<2>(); - hp[0] = elems_quad[iquad].get<3>(); + hp[3] = elems_quad[iquad][0]; + hp[2] = elems_quad[iquad][1]; + hp[1] = elems_quad[iquad][2]; + hp[0] = elems_quad[iquad][3]; for (unsigned ii=0; ii < 4; ++ii) { int hpii = quad_local_nodes[hp[ii]]; @@ -296,9 +296,9 @@ namespace percept { } hex_to_tet_tuple_type_local ht; // reverse order to get proper volume - ht[2] = elems_tri[itri].get<0>(); - ht[1] = elems_tri[itri].get<1>(); - ht[0] = elems_tri[itri].get<2>(); + ht[2] = elems_tri[itri][0]; + ht[1] = elems_tri[itri][1]; + ht[0] = elems_tri[itri][2]; for (unsigned ii=0; ii < 3; ++ii) { int htii = quad_local_nodes[ht[ii]]; diff --git a/packages/percept/src/adapt/DiscretizePyr.hpp b/packages/percept/src/adapt/DiscretizePyr.hpp index 58ab739c05de..a342811245c8 100644 --- a/packages/percept/src/adapt/DiscretizePyr.hpp +++ b/packages/percept/src/adapt/DiscretizePyr.hpp @@ -16,10 +16,10 @@ namespace percept { - typedef boost::array pyr_to_tet_tuple_type_local; - typedef boost::array pyr_to_pyr_tuple_type_local; - typedef boost::array pyr_to_tet_tuple_type; - typedef boost::array pyr_to_pyr_tuple_type; + typedef std::array pyr_to_tet_tuple_type_local; + typedef std::array pyr_to_pyr_tuple_type_local; + typedef std::array pyr_to_tet_tuple_type; + typedef std::array pyr_to_pyr_tuple_type; /** @@ -226,7 +226,7 @@ namespace percept { if (elems_tri.size() == 0 && elems_quad.size() == 0) { VERIFY_OP_ON(num_quad_edge_marks, ==, 0, "hmm"); - elems_quad.push_back(quad_to_quad_tuple_type_local(0,1,2,3)); + elems_quad.push_back({0,1,2,3}); } if (m_debug) { @@ -249,10 +249,10 @@ namespace percept { pyr_to_pyr_tuple_type_local hp; // reverse order to get proper volume - hp[3] = elems_quad[iquad].get<0>(); - hp[2] = elems_quad[iquad].get<1>(); - hp[1] = elems_quad[iquad].get<2>(); - hp[0] = elems_quad[iquad].get<3>(); + hp[3] = elems_quad[iquad][0]; + hp[2] = elems_quad[iquad][1]; + hp[1] = elems_quad[iquad][2]; + hp[0] = elems_quad[iquad][3]; for (unsigned ii=0; ii < 4; ++ii) { int hpii = quad_local_nodes[hp[ii]]; @@ -271,9 +271,9 @@ namespace percept { } pyr_to_tet_tuple_type_local ht; // reverse order to get proper volume - ht[2] = elems_tri[itri].get<0>(); - ht[1] = elems_tri[itri].get<1>(); - ht[0] = elems_tri[itri].get<2>(); + ht[2] = elems_tri[itri][0]; + ht[1] = elems_tri[itri][1]; + ht[0] = elems_tri[itri][2]; for (unsigned ii=0; ii < 3; ++ii) { int htii = quad_local_nodes[ht[ii]]; @@ -319,7 +319,7 @@ namespace percept { if (elems_tri.size() == 0) { VERIFY_OP_ON(num_tri_edge_marks, ==, 0, "hmm"); - elems_tri.push_back(tri_tuple_type_local(0,1,2)); + elems_tri.push_back({0,1,2}); } if (m_debug) @@ -339,9 +339,9 @@ namespace percept { } pyr_to_tet_tuple_type_local ht; // reverse order to get proper volume - ht[2] = elems_tri[itri].get<0>(); - ht[1] = elems_tri[itri].get<1>(); - ht[0] = elems_tri[itri].get<2>(); + ht[2] = elems_tri[itri][0]; + ht[1] = elems_tri[itri][1]; + ht[0] = elems_tri[itri][2]; for (unsigned ii=0; ii < 3; ++ii) { int htii = tri_local_nodes[ht[ii]]; diff --git a/packages/percept/src/adapt/DiscretizeWedge.hpp b/packages/percept/src/adapt/DiscretizeWedge.hpp index 55b963560b16..644564fb46aa 100644 --- a/packages/percept/src/adapt/DiscretizeWedge.hpp +++ b/packages/percept/src/adapt/DiscretizeWedge.hpp @@ -16,12 +16,12 @@ namespace percept { - typedef boost::array wedge_to_tet_tuple_type_local; - typedef boost::array wedge_to_pyr_tuple_type_local; - typedef boost::array wedge_to_wedge_tuple_type_local; - typedef boost::array wedge_to_tet_tuple_type; - typedef boost::array wedge_to_pyr_tuple_type; - typedef boost::array wedge_to_wedge_tuple_type; + typedef std::array wedge_to_tet_tuple_type_local; + typedef std::array wedge_to_pyr_tuple_type_local; + typedef std::array wedge_to_wedge_tuple_type_local; + typedef std::array wedge_to_tet_tuple_type; + typedef std::array wedge_to_pyr_tuple_type; + typedef std::array wedge_to_wedge_tuple_type; /** @@ -490,9 +490,9 @@ namespace percept { for (unsigned ii=0; ii < elems_tri[0].size(); ++ii) { tri_tuple_type_local tl; - tl.get<0>() = elems_tri[0][ii].get<0>(); - tl.get<1>() = elems_tri[0][ii].get<2>(); - tl.get<2>() = elems_tri[0][ii].get<1>(); + tl[0] = elems_tri[0][ii][0]; + tl[1] = elems_tri[0][ii][2]; + tl[2] = elems_tri[0][ii][1]; elems_tri[0][ii] = tl; } } @@ -533,13 +533,13 @@ namespace percept { wedge_to_wedge_tuple_type_local hw; for (unsigned ii=0; ii < elems_tri[0].size(); ++ii) { - hw[0] = map_to_wedge(tri_local_nodes[0][elems_tri[0][ii].get<0>()], edge_map_rev, face_map_rev); - hw[1] = map_to_wedge(tri_local_nodes[0][elems_tri[0][ii].get<1>()], edge_map_rev, face_map_rev); - hw[2] = map_to_wedge(tri_local_nodes[0][elems_tri[0][ii].get<2>()], edge_map_rev, face_map_rev); + hw[0] = map_to_wedge(tri_local_nodes[0][elems_tri[0][ii][0]], edge_map_rev, face_map_rev); + hw[1] = map_to_wedge(tri_local_nodes[0][elems_tri[0][ii][1]], edge_map_rev, face_map_rev); + hw[2] = map_to_wedge(tri_local_nodes[0][elems_tri[0][ii][2]], edge_map_rev, face_map_rev); - hw[3] = map_to_wedge(tri_local_nodes[1][elems_tri[1][ii].get<0>()], edge_map_rev, face_map_rev); - hw[4] = map_to_wedge(tri_local_nodes[1][elems_tri[1][ii].get<1>()], edge_map_rev, face_map_rev); - hw[5] = map_to_wedge(tri_local_nodes[1][elems_tri[1][ii].get<2>()], edge_map_rev, face_map_rev); + hw[3] = map_to_wedge(tri_local_nodes[1][elems_tri[1][ii][0]], edge_map_rev, face_map_rev); + hw[4] = map_to_wedge(tri_local_nodes[1][elems_tri[1][ii][1]], edge_map_rev, face_map_rev); + hw[5] = map_to_wedge(tri_local_nodes[1][elems_tri[1][ii][2]], edge_map_rev, face_map_rev); elems_wedge.push_back(hw); } @@ -627,7 +627,7 @@ namespace percept { if (elems_tri.size() == 0 && elems_quad.size() == 0) { VERIFY_OP_ON(num_quad_edge_marks, ==, 0, "hmm"); - elems_quad.push_back(quad_to_quad_tuple_type_local(0,1,2,3)); + elems_quad.push_back({0,1,2,3}); } if (m_debug) { @@ -649,10 +649,10 @@ namespace percept { wedge_to_pyr_tuple_type_local hp; // reverse order to get proper volume - not here since faces have proper outward-pointing normals - hp[3] = elems_quad[iquad].get<0>(); - hp[2] = elems_quad[iquad].get<1>(); - hp[1] = elems_quad[iquad].get<2>(); - hp[0] = elems_quad[iquad].get<3>(); + hp[3] = elems_quad[iquad][0]; + hp[2] = elems_quad[iquad][1]; + hp[1] = elems_quad[iquad][2]; + hp[0] = elems_quad[iquad][3]; for (unsigned ii=0; ii < 4; ++ii) { int hpii = quad_local_nodes[hp[ii]]; @@ -671,9 +671,9 @@ namespace percept { } wedge_to_tet_tuple_type_local ht; // reverse order to get proper volume - ht[2] = elems_tri[itri].get<0>(); - ht[1] = elems_tri[itri].get<1>(); - ht[0] = elems_tri[itri].get<2>(); + ht[2] = elems_tri[itri][0]; + ht[1] = elems_tri[itri][1]; + ht[0] = elems_tri[itri][2]; for (unsigned ii=0; ii < 3; ++ii) { int htii = quad_local_nodes[ht[ii]]; @@ -719,7 +719,7 @@ namespace percept { if (elems_tri.size() == 0) { VERIFY_OP_ON(num_tri_edge_marks, ==, 0, "hmm"); - elems_tri.push_back(tri_tuple_type_local(0,1,2)); + elems_tri.push_back({0,1,2}); } if (m_debug) @@ -739,9 +739,9 @@ namespace percept { } wedge_to_tet_tuple_type_local ht; // reverse order to get proper volume - ht[2] = elems_tri[itri].get<0>(); - ht[1] = elems_tri[itri].get<1>(); - ht[0] = elems_tri[itri].get<2>(); + ht[2] = elems_tri[itri][0]; + ht[1] = elems_tri[itri][1]; + ht[0] = elems_tri[itri][2]; for (unsigned ii=0; ii < 3; ++ii) { int htii = tri_local_nodes[ht[ii]]; diff --git a/packages/percept/src/adapt/FixSideSets.cpp b/packages/percept/src/adapt/FixSideSets.cpp index cbea8e707cb4..1c51e67ddf86 100644 --- a/packages/percept/src/adapt/FixSideSets.cpp +++ b/packages/percept/src/adapt/FixSideSets.cpp @@ -761,7 +761,7 @@ namespace percept { stk::mesh::EntityVector sides; stk::mesh::Selector sel = stk::mesh::Selector(*partp) & m_eMesh.get_fem_meta_data()->locally_owned_part(); - stk::mesh::get_selected_entities(sel , m_eMesh.get_bulk_data()->buckets(m_eMesh.side_rank()), sides); + stk::mesh::get_selected_entities(sel , m_eMesh.get_bulk_data()->buckets(m_eMesh.side_rank()), sides, false/*don't sort*/); for (auto side : sides) { diff --git a/packages/percept/src/adapt/HangingNodeAdapter.hpp b/packages/percept/src/adapt/HangingNodeAdapter.hpp index 40750eb909bd..6ebcbd11b606 100644 --- a/packages/percept/src/adapt/HangingNodeAdapter.hpp +++ b/packages/percept/src/adapt/HangingNodeAdapter.hpp @@ -11,13 +11,13 @@ #include #include +#include #include #include +#include #include -#include -#include #include @@ -28,42 +28,14 @@ namespace percept { - // this is the expected number of elements that are node neighbors of any element - enum { HNA_POOL_SIZE = 100 }; - -#define USE_HNA_USET 1 -#define USE_BOOST_POOL_ALLOC 1 - - template > + template, typename Allocator = std::allocator > struct PooledStdSet { -#if USE_BOOST_POOL_ALLOC - typedef std::set - > Type; -#else - typedef std::set > Type; -#endif + typedef std::set Type; typedef Less less; - }; - //typedef boost::unordered_set LocalSetType; - //typedef std::set , percept::pool_allocator > LocalSetType; - -#if USE_HNA_USET typedef SetOfEntities LocalSetType; -#else - typedef PooledStdSet::Type LocalSetType; - typedef PooledStdSet LocalSet; -#endif - - //typedef PooledUSet::Type LocalSetType; - //typedef PooledUSet LocalSet; - //typedef boost::unordered_set LocalSetType; class HangingNodeAdapterBase { @@ -267,10 +239,6 @@ SelectIfRefined sir(*this); HNRefinerSelector ters(*this, sir); -#if !USE_BOOST_POOL_ALLOC - Pool pool( sizeof(stk::mesh::Entity), HNA_POOL_SIZE ); -#endif - stk::mesh::Selector on_locally_owned_part = ( m_pMesh.get_fem_meta_data()->locally_owned_part() ); const stk::mesh::BucketVector & buckets = m_pMesh.get_bulk_data()->buckets( m_pMesh.element_rank() ); @@ -330,12 +298,8 @@ int *refine_field_elem = stk::mesh::field_data( *refine_field , element ); if (refine_field_elem[0] <= 0) { -#if USE_BOOST_POOL_ALLOC LocalSetType selected_neighbors; -#else - pool.Reset(); - LocalSetType selected_neighbors(LocalSet::less(), &pool); -#endif + get_node_neighbors(element, selected_neighbors); for (LocalSetType::iterator neighbor = selected_neighbors.begin(); @@ -482,9 +446,6 @@ SelectIfUnrefined sir; HNRefinerSelector ters(*this, sir); -#if !USE_BOOST_POOL_ALLOC - Pool pool( sizeof(stk::mesh::Entity), HNA_POOL_SIZE ); -#endif stk::mesh::Selector on_locally_owned_part = ( m_pMesh.get_fem_meta_data()->locally_owned_part() ); const stk::mesh::BucketVector & buckets = m_pMesh.get_bulk_data()->buckets( m_pMesh.element_rank() ); for ( stk::mesh::BucketVector::const_iterator k = buckets.begin() ; k != buckets.end() ; ++k ) @@ -508,12 +469,8 @@ int *refine_field_elem = stk::mesh::field_data( *refine_field , element ); if (refine_field_elem[0] < 0) { -#if USE_BOOST_POOL_ALLOC LocalSetType selected_neighbors; -#else - pool.Reset(); - LocalSetType selected_neighbors(LocalSet::less(), &pool); -#endif + get_node_neighbors(element, selected_neighbors); for (LocalSetType::iterator neighbor = selected_neighbors.begin(); @@ -639,8 +596,8 @@ class HNRefinerSelector : public RefinerSelector { HangingNodeAdapter& m_hna; LocalSelector& m_localSelector; - boost::unordered_set m_elements; - boost::unordered_set m_nodes; + std::unordered_set> m_elements; + std::unordered_set> m_nodes; typedef HangingNodeAdapter Base; public: diff --git a/packages/percept/src/adapt/NodeRegistry.cpp b/packages/percept/src/adapt/NodeRegistry.cpp index 726eec5c7de6..d4fd35cf9312 100644 --- a/packages/percept/src/adapt/NodeRegistry.cpp +++ b/packages/percept/src/adapt/NodeRegistry.cpp @@ -48,10 +48,9 @@ static SubDimCellData new_SubDimCellData; static SubDimCellData empty_SubDimCellData; - SubDimCellData* nodeId_elementOwnderId_ptr = getFromMapPtr(subDimEntity); - SubDimCellData& nodeId_elementOwnderId = (nodeId_elementOwnderId_ptr ? *nodeId_elementOwnderId_ptr : empty_SubDimCellData); - bool is_empty = nodeId_elementOwnderId_ptr == 0; - //bool is_not_empty_but_data_cleared = (!is_empty && nodeId_elementOwnderId.get().size() == 0); + SubDimCellData* nodeId_elementOwnerId_ptr = getFromMapPtr(subDimEntity); + SubDimCellData& nodeId_elementOwnerId = (nodeId_elementOwnerId_ptr ? *nodeId_elementOwnerId_ptr : empty_SubDimCellData); + bool is_empty = nodeId_elementOwnerId_ptr == 0; if (is_empty) { return 0.5; } @@ -64,7 +63,7 @@ double alpsum=0.0; for (unsigned ipts=0; ipts < nsz; ipts++) { - alp[ipts] = nodeId_elementOwnderId.get()[ipts]; + alp[ipts] = std::get(nodeId_elementOwnerId)[ipts]; alps[ipts] = alp[ipts]; VERIFY_OP_ON(alp[ipts], >=, 0.0, "hmmm33"); alpsum += alp[ipts]; @@ -362,22 +361,22 @@ for (iter = iter_begin; iter != iter_end; ++iter) { const SubDimCell_SDCEntityType& subDimEntity = (*iter).first; - SubDimCellData& nodeId_elementOwnderId = (*iter).second; + SubDimCellData& nodeId_elementOwnerId = (*iter).second; if (do_respect_spacing && *subDimSize_in == 2 && subDimEntity.size() != 2) continue; - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); if (nodeIds_onSE.size() == 0) continue; - stk::mesh::EntityId owning_elementId = nodeId_elementOwnderId.get().id(); - stk::mesh::EntityRank owning_elementRank = nodeId_elementOwnderId.get().rank(); + stk::mesh::EntityId owning_elementId = std::get(nodeId_elementOwnerId).id(); + stk::mesh::EntityRank owning_elementRank = std::get(nodeId_elementOwnerId).rank(); - unsigned char owning_elementSubDimOrd = nodeId_elementOwnderId.get(); + unsigned char owning_elementSubDimOrd = std::get(nodeId_elementOwnerId); VERIFY_OP_ON(owning_elementSubDimOrd, >, 0, "hmm 2"); --owning_elementSubDimOrd ; #if !defined(NO_GEOM_SUPPORT) - Double2& nodeId_spacing = nodeId_elementOwnderId.get(); + Double2& nodeId_spacing = std::get(nodeId_elementOwnerId); #endif if (nodeIds_onSE.size() != 1) continue; @@ -801,9 +800,9 @@ for (iter = m_cell_2_data_map.begin(); iter != m_cell_2_data_map.end(); ++iter) { const SubDimCell_SDCEntityType& subDimEntity = (*iter).first; - SubDimCellData& nodeId_elementOwnderId = (*iter).second; + SubDimCellData& nodeId_elementOwnerId = (*iter).second; - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); bool found = false; @@ -942,11 +941,6 @@ m_comm_all = new stk::CommSparse(m_eMesh.parallel()); } - void NodeRegistry::init_entity_repo() - { - for (unsigned i = 0; i < percept::EntityRankEnd; i++) m_entity_repo[i].clear(); - } - void NodeRegistry::clear_dangling_nodes(SetOfEntities* nodes_to_be_deleted) { bool debug = false; @@ -967,10 +961,10 @@ for (iter = map.begin(); iter != map.end(); ++iter) { const SubDimCell_SDCEntityType& subDimEntity = (*iter).first; - SubDimCellData& nodeId_elementOwnderId = (*iter).second; - stk::mesh::EntityId owning_elementId = nodeId_elementOwnderId.get().id(); - stk::mesh::EntityRank owning_element_rank = nodeId_elementOwnderId.get().rank(); - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + SubDimCellData& nodeId_elementOwnerId = (*iter).second; + stk::mesh::EntityId owning_elementId = std::get(nodeId_elementOwnerId).id(); + stk::mesh::EntityRank owning_element_rank = std::get(nodeId_elementOwnerId).rank(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); VERIFY_OP_ON(nodeIds_onSE.size(), ==, nodeIds_onSE.m_entity_id_vector.size(), "NodeRegistry::clear_dangling_nodes id vector/size mismatch"); unsigned nnodes = nodeIds_onSE.size(); @@ -1057,8 +1051,8 @@ { for (iter = map.begin(); iter != map.end(); ++iter) { - SubDimCellData& nodeId_elementOwnderId = (*iter).second; - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + SubDimCellData& nodeId_elementOwnerId = (*iter).second; + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); VERIFY_OP_ON(nodeIds_onSE.size(), ==, nodeIds_onSE.m_entity_id_vector.size(), "NodeRegistry::clear_dangling_nodes id vector/size mismatch after erase"); } } @@ -1069,7 +1063,6 @@ void NodeRegistry::initialize() { m_cell_2_data_map.clear(); - init_entity_repo(); } void NodeRegistry:: @@ -1225,9 +1218,9 @@ for (iter = m_cell_2_data_map.begin(); iter != m_cell_2_data_map.end(); ++iter) { - SubDimCellData& nodeId_elementOwnderId = (*iter).second; + SubDimCellData& nodeId_elementOwnerId = (*iter).second; - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); if (nodeIds_onSE.m_entity_id_vector.size() != nodeIds_onSE.size()) { @@ -1248,8 +1241,8 @@ stk::mesh::Entity node = get_entity(*m_eMesh.get_bulk_data(), stk::topology::NODE_RANK, nodeIds_onSE.m_entity_id_vector[ii]); if (!m_eMesh.is_valid(node)) { - stk::mesh::EntityId db_id = nodeId_elementOwnderId.get().id(); - stk::mesh::EntityRank db_rank = nodeId_elementOwnderId.get().rank(); + stk::mesh::EntityId db_id = std::get(nodeId_elementOwnerId).id(); + stk::mesh::EntityRank db_rank = std::get(nodeId_elementOwnerId).rank(); std::cout << "tmp P[" << m_eMesh.get_rank() << "] NodeRegistry::setAllReceivedNodeData id= " << nodeIds_onSE.m_entity_id_vector[ii] << " owning_elementId= " << db_id << " owning_element_rank= " << db_rank << std::endl; @@ -1411,8 +1404,8 @@ for (iter = m_cell_2_data_map.begin(); iter != m_cell_2_data_map.end(); ++iter) { - SubDimCellData& nodeId_elementOwnderId = (*iter).second; - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + SubDimCellData& nodeId_elementOwnerId = (*iter).second; + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); if (debug) std::cout << "tmp SRK nodeIds_onSE.size= " << nodeIds_onSE.size() << std::endl; if (nodeIds_onSE.size()) { @@ -1465,8 +1458,7 @@ nodeIds_onSE[ii] = vecNodes[ii]; nodeIds_onSE.m_entity_id_vector[ii] = m_eMesh.identifier(vecNodes[ii]); } - SubDimCellData data( nodeIds_onSE, - stk::mesh::EntityKey(m_eMesh.entity_rank(element), m_eMesh.identifier(element)), needed_rank, iSubDimOrd+1 ); + SubDimCellData data {nodeIds_onSE, stk::mesh::EntityKey(m_eMesh.entity_rank(element), m_eMesh.identifier(element)), (unsigned char)needed_rank, (unsigned char)(iSubDimOrd+1), {} }; putInMap(subDimEntity, data); } @@ -1486,14 +1478,14 @@ static SubDimCellData empty_SubDimCellData; - SubDimCellData* nodeId_elementOwnderId_ptr = getFromMapPtr(subDimEntity); - SubDimCellData& nodeId_elementOwnderId = (nodeId_elementOwnderId_ptr ? *nodeId_elementOwnderId_ptr : empty_SubDimCellData); - bool is_empty = nodeId_elementOwnderId_ptr == 0; - bool is_not_empty_but_data_cleared = (!is_empty && nodeId_elementOwnderId.get().size() == 0); + SubDimCellData* nodeId_elementOwnerId_ptr = getFromMapPtr(subDimEntity); + SubDimCellData& nodeId_elementOwnerId = (nodeId_elementOwnerId_ptr ? *nodeId_elementOwnerId_ptr : empty_SubDimCellData); + bool is_empty = nodeId_elementOwnerId_ptr == 0; + bool is_not_empty_but_data_cleared = (!is_empty && std::get(nodeId_elementOwnerId).size() == 0); // if empty or if my id is the smallest, make this element the owner - stk::mesh::EntityId db_id = nodeId_elementOwnderId.get().id(); - stk::mesh::EntityRank db_rank = nodeId_elementOwnderId.get().rank(); + stk::mesh::EntityId db_id = std::get(nodeId_elementOwnerId).id(); + stk::mesh::EntityRank db_rank = std::get(nodeId_elementOwnerId).rank(); stk::mesh::EntityId element_id = m_eMesh.identifier(element); stk::mesh::EntityId element_rank = m_eMesh.entity_rank(element); @@ -1505,7 +1497,7 @@ unsigned smark=0; if (!is_empty) { - unsigned& mark = nodeId_elementOwnderId.get().m_mark; + unsigned& mark = std::get(nodeId_elementOwnerId).m_mark; if (needNodes) mark |= NR_MARK; else @@ -1526,9 +1518,9 @@ { unsigned numNewNodes = needed_entity_rank.second; - SubDimCellData data( NodeIdsOnSubDimEntityType(numNewNodes, stk::mesh::Entity(), smark), - stk::mesh::EntityKey(m_eMesh.entity_rank(element), m_eMesh.identifier(element)), needed_entity_rank.first, iSubDimOrd+1 ); - NodeIdsOnSubDimEntityType& nid_new = data.get(); + SubDimCellData data { NodeIdsOnSubDimEntityType(numNewNodes, stk::mesh::Entity(), smark), + stk::mesh::EntityKey(m_eMesh.entity_rank(element), m_eMesh.identifier(element)), (unsigned char)needed_entity_rank.first, (unsigned char)(iSubDimOrd+1), {} }; + NodeIdsOnSubDimEntityType& nid_new = std::get(data); if (needNodes) nid_new.m_mark |= NR_MARK; else @@ -1541,53 +1533,12 @@ { stk::mesh::Entity owning_element = m_eMesh.get_entity(db_rank, db_id); VERIFY_OP_ON(m_eMesh.is_valid(owning_element), ==, true, "hmmm"); - NodeIdsOnSubDimEntityType& nid = nodeId_elementOwnderId.get(); - m_cell_2_data_map[subDimEntity] = SubDimCellData(nid, stk::mesh::EntityKey(m_eMesh.entity_rank(element), m_eMesh.identifier(element)), needed_entity_rank.first, iSubDimOrd+1 ); + NodeIdsOnSubDimEntityType& nid = std::get(nodeId_elementOwnerId); + m_cell_2_data_map[subDimEntity] = std::forward_as_tuple(nid, stk::mesh::EntityKey(m_eMesh.entity_rank(element), m_eMesh.identifier(element)),(unsigned char) needed_entity_rank.first, (unsigned char)(iSubDimOrd+1), Double2()); } ret_val = true; } - // all debug code from here on - - bool debug = false; - if (debug && !is_empty) - { - unsigned originalMark = nodeId_elementOwnderId.get().m_mark; - std::cout << m_eMesh.rank() << " registerNeedNewNode element= " << m_eMesh.print_entity_compact(element) << "\n needNodes= " << needNodes << " iSubDimOrd= " << iSubDimOrd - << " is_empty= " << is_empty << " is_not_empty_but_data_cleared= " << is_not_empty_but_data_cleared << " should_put_in= " << should_put_in - << " originalMark= " << originalMark << " currentMark= " << smark << " NR_MARK= " << NR_MARK - << m_eMesh.demangled_stacktrace(20) - << std::endl; - } - if (debug) - { - SubDimCellData* a_nodeId_elementOwnderId_ptr = getFromMapPtr(subDimEntity); - SubDimCellData& a_nodeId_elementOwnderId = (a_nodeId_elementOwnderId_ptr ? *a_nodeId_elementOwnderId_ptr : empty_SubDimCellData); - bool a_is_empty = a_nodeId_elementOwnderId_ptr == 0; - unsigned& gotMark = a_nodeId_elementOwnderId.get().m_mark; - unsigned nidSize = a_nodeId_elementOwnderId.get().size(); - - std::ostringstream sout; - sout << "P[" << m_eMesh.get_rank() << "] registerNeedNewNode:: element= " << m_eMesh.identifier(element) << " nidSize= " << nidSize - << " nid= " << (nidSize ? (int)m_eMesh.identifier(nodeId_elementOwnderId.get()[0]) : -1); - - sout << " smark= " << smark << " gotMark= " << gotMark << " needNodes= " << needNodes << " isG= " << m_eMesh.isGhostElement(element) - << " is_empty= " << is_empty - << " a_is_empty= " << a_is_empty - << " should_put_in= " << should_put_in - << " should_put_in_id= " << should_put_in_id - << " should_put_in_rank_gt= " << should_put_in_rank_gt - << " should_put_in_rank_gte= " << should_put_in_rank_gte - << " needed_entity_rank= " - << needed_entity_rank.first << " subDimEntity= "; - - for (unsigned k=0; k < subDimEntity.size(); k++) - { - sout << " " << m_eMesh.identifier(subDimEntity[k]) << " "; - } - std::cout << sout.str() << std::endl; - } - return ret_val; } @@ -1601,15 +1552,15 @@ static SubDimCellData new_SubDimCellData; static SubDimCellData empty_SubDimCellData; - SubDimCellData* nodeId_elementOwnderId_ptr = getFromMapPtr(subDimEntity); - SubDimCellData& nodeId_elementOwnderId = (nodeId_elementOwnderId_ptr ? *nodeId_elementOwnderId_ptr : empty_SubDimCellData); - bool is_empty = nodeId_elementOwnderId_ptr == 0; - bool is_not_empty_but_data_cleared = (!is_empty && nodeId_elementOwnderId.get().size() == 0); + SubDimCellData* nodeId_elementOwnerId_ptr = getFromMapPtr(subDimEntity); + SubDimCellData& nodeId_elementOwnerId = (nodeId_elementOwnerId_ptr ? *nodeId_elementOwnerId_ptr : empty_SubDimCellData); + bool is_empty = nodeId_elementOwnerId_ptr == 0; + bool is_not_empty_but_data_cleared = (!is_empty && std::get(nodeId_elementOwnerId).size() == 0); (void)is_not_empty_but_data_cleared; // if empty or if my id is the smallest, make this element the owner - stk::mesh::EntityId db_id = nodeId_elementOwnderId.get().id(); - stk::mesh::EntityId db_rank = nodeId_elementOwnderId.get().rank(); + stk::mesh::EntityId db_id = std::get(nodeId_elementOwnerId).id(); + stk::mesh::EntityId db_rank = std::get(nodeId_elementOwnerId).rank(); bool should_put_in_id = (m_eMesh.identifier(element) < db_id); bool should_put_in_rank_gt = (m_eMesh.entity_rank(element) > db_rank); @@ -1620,9 +1571,9 @@ if (!is_empty && should_put_in) { - nodeId_elementOwnderId.get() = stk::mesh::EntityKey(m_eMesh.entity_rank(element), m_eMesh.identifier(element)); - nodeId_elementOwnderId.get() = static_cast(iSubDimOrd + 1); - nodeId_elementOwnderId.get() = static_cast(needed_entity_rank.first); + std::get(nodeId_elementOwnerId) = stk::mesh::EntityKey(m_eMesh.entity_rank(element), m_eMesh.identifier(element)); + std::get(nodeId_elementOwnerId) = static_cast(iSubDimOrd + 1); + std::get(nodeId_elementOwnerId) = static_cast(needed_entity_rank.first); return true; } @@ -1642,14 +1593,14 @@ static SubDimCellData empty_SubDimCellData; - SubDimCellData* nodeId_elementOwnderId_ptr = getFromMapPtr(subDimEntity); - SubDimCellData& nodeId_elementOwnderId = (nodeId_elementOwnderId_ptr ? *nodeId_elementOwnderId_ptr : empty_SubDimCellData); - bool is_empty = nodeId_elementOwnderId_ptr == 0; - bool is_not_empty_but_data_cleared = (!is_empty && nodeId_elementOwnderId.get().size() == 0); + SubDimCellData* nodeId_elementOwnerId_ptr = getFromMapPtr(subDimEntity); + SubDimCellData& nodeId_elementOwnerId = (nodeId_elementOwnerId_ptr ? *nodeId_elementOwnerId_ptr : empty_SubDimCellData); + bool is_empty = nodeId_elementOwnerId_ptr == 0; + bool is_not_empty_but_data_cleared = (!is_empty && std::get(nodeId_elementOwnerId).size() == 0); // if empty or if my id is the smallest, make this element the owner - stk::mesh::EntityId db_id = nodeId_elementOwnderId.get().id(); - stk::mesh::EntityRank db_rank = nodeId_elementOwnderId.get().rank(); + stk::mesh::EntityId db_id = std::get(nodeId_elementOwnerId).id(); + stk::mesh::EntityRank db_rank = std::get(nodeId_elementOwnerId).rank(); stk::mesh::EntityId element_id = m_eMesh.identifier(element); stk::mesh::EntityId element_rank = m_eMesh.entity_rank(element); @@ -1661,7 +1612,7 @@ unsigned smark=0; if (!is_empty) { - unsigned& mark = nodeId_elementOwnderId.get().m_mark; + unsigned& mark = std::get(nodeId_elementOwnerId).m_mark; if (needNodes) mark |= NR_MARK; else @@ -1681,9 +1632,8 @@ if (is_empty || is_not_empty_but_data_cleared) { unsigned numNewNodes = 0; // needed_entity_rank.second; - SubDimCellData data( NodeIdsOnSubDimEntityType(numNewNodes, stk::mesh::Entity(), smark), - stk::mesh::EntityKey(m_eMesh.entity_rank(element), m_eMesh.identifier(element)), needed_entity_rank.first, iSubDimOrd+1 ); - NodeIdsOnSubDimEntityType& nid_new = data.get(); + SubDimCellData data = std::forward_as_tuple(NodeIdsOnSubDimEntityType(numNewNodes, stk::mesh::Entity(), smark), stk::mesh::EntityKey(m_eMesh.entity_rank(element), m_eMesh.identifier(element)), (unsigned char)needed_entity_rank.first, (unsigned char)(iSubDimOrd+1), Double2() ); + NodeIdsOnSubDimEntityType& nid_new = std::get(data); if (needNodes) nid_new.m_mark |= NR_MARK; else @@ -1696,8 +1646,8 @@ { stk::mesh::Entity owning_element = m_eMesh.get_entity(db_rank, db_id); VERIFY_OP_ON(m_eMesh.is_valid(owning_element), ==, true, "hmmm"); - NodeIdsOnSubDimEntityType& nid = nodeId_elementOwnderId.get(); - m_cell_2_data_map[subDimEntity] = SubDimCellData(nid, stk::mesh::EntityKey(m_eMesh.entity_rank(element), m_eMesh.identifier(element)), needed_entity_rank.first, iSubDimOrd+1 ); + NodeIdsOnSubDimEntityType& nid = std::get(nodeId_elementOwnerId); + m_cell_2_data_map[subDimEntity] = std::forward_as_tuple(nid, stk::mesh::EntityKey(m_eMesh.entity_rank(element), m_eMesh.identifier(element)), (unsigned char)needed_entity_rank.first, (unsigned char)(iSubDimOrd+1), Double2() ); } ret_val = true; } @@ -1837,9 +1787,9 @@ if (!need_to_send) return true; if (hasGhostNode) return true; - SubDimCellData* nodeId_elementOwnderId_ptr = getFromMapPtr(subDimEntity); - SubDimCellData& nodeId_elementOwnderId = (nodeId_elementOwnderId_ptr ? *nodeId_elementOwnderId_ptr : empty_SubDimCellData); - bool is_empty = nodeId_elementOwnderId_ptr == 0; + SubDimCellData* nodeId_elementOwnerId_ptr = getFromMapPtr(subDimEntity); + SubDimCellData& nodeId_elementOwnerId = (nodeId_elementOwnerId_ptr ? *nodeId_elementOwnerId_ptr : empty_SubDimCellData); + bool is_empty = nodeId_elementOwnerId_ptr == 0; if (is_empty) { @@ -1847,7 +1797,7 @@ str << m_eMesh.rank() << "ERROR: element= " << m_eMesh.print_entity_compact(element) << " needed_entity_rank= " << needed_entity_rank.first<< " " << needed_entity_rank.second << std::endl; str << "subDimEntity= " << subDimEntity << std::endl; - str << "nodeId_elementOwnderId= " << nodeId_elementOwnderId << std::endl; + str << "nodeId_elementOwnerId= " << nodeId_elementOwnerId << std::endl; str << "empty_SubDimCellData= " << empty_SubDimCellData << std::endl; std::cout << str.str() << std::endl; throw std::logic_error("NodeRegistry::checkForRemote no data (is_empty=true) - logic error."); @@ -1855,10 +1805,10 @@ } else { - stk::mesh::EntityId owning_elementId = nodeId_elementOwnderId.get().id(); - stk::mesh::EntityRank owning_elementRank = nodeId_elementOwnderId.get().rank(); + stk::mesh::EntityId owning_elementId = std::get(nodeId_elementOwnerId).id(); + stk::mesh::EntityRank owning_elementRank = std::get(nodeId_elementOwnerId).rank(); - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); unsigned nidsz = nodeIds_onSE.size(); // error check @@ -1867,7 +1817,7 @@ if ( isNotOK ) { std::cout << "P[" << proc_rank << "] elem id = " << m_eMesh.identifier(element) - << " nodeId_elementOwnderId.get() = " + << " std::get(nodeId_elementOwnerId) = " << owning_elementId << std::endl; throw std::logic_error("NodeRegistry::checkForRemote logic: owning element info is wrong"); @@ -1895,11 +1845,11 @@ for (unsigned i_other_proc = 0; i_other_proc < procs_to_send_to.size(); ++i_other_proc) { - buffer_entry.get() = subDimEntity.size(); - buffer_entry.get() = needed_entity_rank.first; + std::get(buffer_entry) = subDimEntity.size(); + std::get(buffer_entry) = needed_entity_rank.first; for (unsigned inode=0; inode < subDimEntity.size(); ++inode) - buffer_entry.get()[inode] = m_eMesh.entity_key(subDimEntity[inode]); + std::get(buffer_entry)[inode] = m_eMesh.entity_key(subDimEntity[inode]); if (nodeIds_onSE.m_entity_id_vector.size() != nodeIds_onSE.size()) { @@ -1928,7 +1878,7 @@ { m_comm_all->send_buffer( procs_to_send_to[i_other_proc] ).pack< CommDataType > (buffer_entry); - NodeIdsOnSubDimEntityType& nids = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nids = std::get(nodeId_elementOwnerId); nids.pack(m_eMesh, m_comm_all->send_buffer( procs_to_send_to[i_other_proc] )); } } @@ -1962,8 +1912,8 @@ for (iter = map.begin(); iter != map.end(); ++iter) { - SubDimCellData& nodeId_elementOwnderId = (*iter).second; - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + SubDimCellData& nodeId_elementOwnerId = (*iter).second; + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); if (nodeIds_onSE.size() != 1) { @@ -2051,9 +2001,9 @@ getSubDimEntity(subDimEntity, element, needed_entity_rank, iSubDimOrd); static SubDimCellData empty_SubDimCellData; - SubDimCellData* nodeId_elementOwnderId_ptr = getFromMapPtr(subDimEntity); - SubDimCellData& nodeId_elementOwnderId = (nodeId_elementOwnderId_ptr ? *nodeId_elementOwnderId_ptr : empty_SubDimCellData); - bool is_empty = nodeId_elementOwnderId_ptr == 0; + SubDimCellData* nodeId_elementOwnerId_ptr = getFromMapPtr(subDimEntity); + SubDimCellData& nodeId_elementOwnerId = (nodeId_elementOwnerId_ptr ? *nodeId_elementOwnerId_ptr : empty_SubDimCellData); + bool is_empty = nodeId_elementOwnerId_ptr == 0; if (s_allow_empty_sub_dims && is_empty) { @@ -2072,7 +2022,7 @@ << "\n iSubDimOrd= " << iSubDimOrd << std::endl; throw std::runtime_error("prolongateField: no node found"); } - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); if (nodeIds_onSE.size() != 1) { if (nodeIds_onSE.size() > 1) @@ -2203,9 +2153,9 @@ SubDimCell_SDCEntityType subDimEntity(&m_eMesh); getSubDimEntity(subDimEntity, element, needed_entity_rank, iSubDimOrd); static SubDimCellData empty_SubDimCellData; - SubDimCellData* nodeId_elementOwnderId_ptr = getFromMapPtr(subDimEntity); - SubDimCellData& nodeId_elementOwnderId = (nodeId_elementOwnderId_ptr ? *nodeId_elementOwnderId_ptr : empty_SubDimCellData); - bool is_empty = nodeId_elementOwnderId_ptr == 0; + SubDimCellData* nodeId_elementOwnerId_ptr = getFromMapPtr(subDimEntity); + SubDimCellData& nodeId_elementOwnerId = (nodeId_elementOwnerId_ptr ? *nodeId_elementOwnerId_ptr : empty_SubDimCellData); + bool is_empty = nodeId_elementOwnerId_ptr == 0; if (s_allow_empty_sub_dims && is_empty) { @@ -2216,7 +2166,7 @@ { throw std::runtime_error("addToExistingParts: no node found"); } - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); unsigned nidsz = nodeIds_onSE.size(); for (unsigned i_nid = 0; i_nid < nidsz; i_nid++) @@ -2321,9 +2271,9 @@ for (iter = m_cell_2_data_map.begin(); iter != m_cell_2_data_map.end(); ++iter) { const SubDimCell_SDCEntityType& subDimEntity = (*iter).first; - SubDimCellData& nodeId_elementOwnderId = (*iter).second; + SubDimCellData& nodeId_elementOwnerId = (*iter).second; - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); bool found = true; stk::mesh::EntityRank needed_entity_rank = stk::topology::NODE_RANK; @@ -2531,7 +2481,7 @@ for (SubDimCellToDataMap::iterator cell_iter = m_cell_2_data_map.begin(); cell_iter != m_cell_2_data_map.end(); ++cell_iter) { SubDimCellData& data = (*cell_iter).second; - NodeIdsOnSubDimEntityType& nodeIds_onSE = data.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(data); sz += nodeIds_onSE.size(); } @@ -2545,12 +2495,12 @@ { SubDimCellData& data = (*cell_iter).second; - stk::mesh::EntityId owning_elementId = data.get().id(); + stk::mesh::EntityId owning_elementId = std::get(data).id(); - NodeIdsOnSubDimEntityType& nodeIds_onSE = data.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(data); if (nodeIds_onSE.size()) { - stk::mesh::EntityRank erank = data.get().rank(); + stk::mesh::EntityRank erank = std::get(data).rank(); stk::mesh::Entity owning_element = get_entity_element(*m_eMesh.get_bulk_data(), erank, owning_elementId); if (!m_eMesh.is_valid(owning_element)) @@ -2617,7 +2567,7 @@ while ( recv_buffer.remaining() ) { - // Rank of sub-dim cells needing new nodes, which sub-dim entity, one non-owning element identifier, nodeId_elementOwnderId.first + // Rank of sub-dim cells needing new nodes, which sub-dim entity, one non-owning element identifier, nodeId_elementOwnerId.first recv_buffer.unpack< CommDataType >( buffer_entry ); NodeIdsOnSubDimEntityType nodeIds_onSE; @@ -2673,7 +2623,7 @@ m_eMesh.createEntities( stk::topology::NODE_RANK, num_nodes_needed, new_nodes); #else m_eMesh.initializeIdServer(); - stk::mesh::Part& nodePart = m_eMesh.get_fem_meta_data()->get_cell_topology_root_part(stk::mesh::get_cell_topology(stk::topology::NODE)); + stk::mesh::Part& nodePart = m_eMesh.get_fem_meta_data()->get_topology_root_part(stk::topology::NODE); stk::mesh::PartVector nodeParts(1, &nodePart); m_eMesh.getEntitiesUsingIdServer( m_eMesh.node_rank(), num_nodes_needed, new_nodes, nodeParts); #endif @@ -2709,18 +2659,18 @@ for (SubDimCellToDataMap::iterator cell_iter = m_cell_2_data_map.begin(); cell_iter != m_cell_2_data_map.end(); ++cell_iter) { SubDimCellData& data = (*cell_iter).second; - NodeIdsOnSubDimEntityType& nodeIds_onSE = data.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(data); if (!nodeIds_onSE.size()) continue; - stk::mesh::EntityId owning_elementId = data.get().id(); + stk::mesh::EntityId owning_elementId = std::get(data).id(); if (!owning_elementId) { throw std::logic_error("logic: hmmm #5.4.0"); } - stk::mesh::EntityRank erank = data.get().rank(); + stk::mesh::EntityRank erank = std::get(data).rank(); stk::mesh::Entity owning_element = get_entity_element(*m_eMesh.get_bulk_data(), erank, owning_elementId); if (!m_eMesh.is_valid(owning_element)) @@ -2782,8 +2732,7 @@ void NodeRegistry:: createNodeAndConnect(CommDataType& buffer_entry, NodeIdsOnSubDimEntityType& nodeIds_onSE, unsigned from_proc, vector& nodes_to_ghost) { - //stk::mesh::EntityRank needed_entity_rank = buffer_entry.get(); - unsigned subDimEntitySize = buffer_entry.get(); + unsigned subDimEntitySize = std::get(buffer_entry); for (unsigned iid = 0; iid < nodeIds_onSE.size(); iid++) { @@ -2800,7 +2749,7 @@ //getSubDimEntity(subDimEntity, element, needed_entity_rank, iSubDimOrd); for (unsigned inode = 0; inode < subDimEntitySize; ++inode) { - stk::mesh::EntityKey key = buffer_entry.get()[inode]; + stk::mesh::EntityKey key = std::get(buffer_entry)[inode]; stk::mesh::Entity node = m_eMesh.get_entity(key); VERIFY_OP_ON(m_eMesh.is_valid(node), ==, true, "bad node"); subDimEntity.insert(node); @@ -2813,7 +2762,7 @@ if (subDimCellDataPtr) { SubDimCellData& subDimCellData = *subDimCellDataPtr; - NodeIdsOnSubDimEntityType& nodeIds_onSE_existing = subDimCellData.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE_existing = std::get(subDimCellData); nodeIds_onSE.m_mark |= nodeIds_onSE_existing.m_mark; VERIFY_OP_ON(nodeIds_onSE_existing.size(), ==, nodeIds_onSE_existing.m_entity_id_vector.size(), "bad nodeIds_onSE_existing"); @@ -2866,9 +2815,9 @@ for (iter = map.begin(); iter != map.end(); ++iter) { //const SubDimCell_SDCEntityType& subDimEntity = (*iter).first; - SubDimCellData& nodeId_elementOwnderId = (*iter).second; + SubDimCellData& nodeId_elementOwnerId = (*iter).second; - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); bool found = false; for (unsigned ii = 0; ii < nodeIds_onSE.size(); ii++) @@ -2914,9 +2863,9 @@ for (iter = map.begin(); iter != map.end(); ++iter) { const SubDimCell_SDCEntityType& subDimEntity = (*iter).first; - SubDimCellData& nodeId_elementOwnderId = (*iter).second; + SubDimCellData& nodeId_elementOwnerId = (*iter).second; - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); unsigned jj = 0; bool found = false; @@ -2926,7 +2875,7 @@ { if (kept_nodes_orig_minus_kept_nodes.find(nodeIds_onSE[ii]) != kept_nodes_orig_minus_kept_nodes.end()) { - to_save[subDimEntity] = nodeId_elementOwnderId; + to_save[subDimEntity] = nodeId_elementOwnerId; } found = true; jj = ii; @@ -2989,10 +2938,10 @@ for (iter = map.begin(); iter != map.end(); ++iter) { - SubDimCellData& nodeId_elementOwnderId = (*iter).second; + SubDimCellData& nodeId_elementOwnerId = (*iter).second; - stk::mesh::EntityId owning_elementId = nodeId_elementOwnderId.get().id(); - stk::mesh::EntityRank owning_elementRank = nodeId_elementOwnderId.get().rank(); + stk::mesh::EntityId owning_elementId = std::get(nodeId_elementOwnerId).id(); + stk::mesh::EntityRank owning_elementRank = std::get(nodeId_elementOwnerId).rank(); if (owning_elementId) { @@ -3000,17 +2949,17 @@ if (!m_eMesh.is_valid(owning_element)) { - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); if (resize_nodeId_data) { nodeIds_onSE.resize(0); } - nodeId_elementOwnderId.get() = stk::mesh::EntityKey(owning_elementRank, 0u); + std::get(nodeId_elementOwnerId) = stk::mesh::EntityKey(owning_elementRank, 0u); } } else { - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); if (resize_nodeId_data) nodeIds_onSE.resize(0); } } @@ -3033,16 +2982,16 @@ for (iter = map.begin(); iter != map.end(); ++iter) { const SubDimCell_SDCEntityType& subDimEntity = (*iter).first; - SubDimCellData& nodeId_elementOwnderId = (*iter).second; + SubDimCellData& nodeId_elementOwnerId = (*iter).second; - stk::mesh::Entity owning_elem = m_eMesh.get_bulk_data()->get_entity(nodeId_elementOwnderId.get()); + stk::mesh::Entity owning_elem = m_eMesh.get_bulk_data()->get_entity(std::get(nodeId_elementOwnerId)); std::cout << "tmp ddb:: owning element id = " << m_eMesh.identifier(owning_elem) << std::endl; - std::cout << "tmp ddb:: owning element subdim rank = " << static_cast( nodeId_elementOwnderId.get()) << std::endl; + std::cout << "tmp ddb:: owning element subdim rank = " << static_cast( std::get(nodeId_elementOwnerId)) << std::endl; - std::cout << "tmp ddb:: owning element subdim ordinal = " << static_cast(nodeId_elementOwnderId.get()) << std::endl; + std::cout << "tmp ddb:: owning element subdim ordinal = " << static_cast(std::get(nodeId_elementOwnerId)) << std::endl; - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); for (unsigned ii = 0; ii < nodeIds_onSE.size(); ii++) { @@ -3068,11 +3017,11 @@ for (iter = map.begin(); iter != map.end(); ++iter) { const SubDimCell_SDCEntityType& subDimEntity = (*iter).first; - SubDimCellData& nodeId_elementOwnderId = (*iter).second; + SubDimCellData& nodeId_elementOwnerId = (*iter).second; mem += sizeof(SDCEntityType)*subDimEntity.size(); mem += sizeof(stk::mesh::EntityKey); - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); size_t mem1 = (sizeof(stk::mesh::Entity)+ sizeof(stk::mesh::EntityId))*nodeIds_onSE.size() +sizeof(unsigned); @@ -3140,9 +3089,9 @@ for (SubDimCellToDataMap::iterator iter = map.begin(); iter != map.end(); ++iter) { const SubDimCell_SDCEntityType& subDimEntity = (*iter).first; - SubDimCellData& nodeId_elementOwnderId = (*iter).second; + SubDimCellData& nodeId_elementOwnerId = (*iter).second; - stk::mesh::EntityRank owning_element_subDim_rank = static_cast(nodeId_elementOwnderId.get()); + stk::mesh::EntityRank owning_element_subDim_rank = static_cast(std::get(nodeId_elementOwnerId)); static std::vector procs_to_send_to; @@ -3159,7 +3108,7 @@ if (!need_to_send) continue; - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); if (nodeIds_onSE.size()) { @@ -3169,11 +3118,11 @@ // only need to send if it's got non-zero mark info if (is_marked || is_not_marked) { - buffer_entry.get() = subDimEntity.size(); - buffer_entry.get() = owning_element_subDim_rank; + std::get(buffer_entry) = subDimEntity.size(); + std::get(buffer_entry) = owning_element_subDim_rank; for (unsigned inode=0; inode < subDimEntity.size(); ++inode) - buffer_entry.get()[inode] = m_eMesh.entity_key(subDimEntity[inode]); + std::get(buffer_entry)[inode] = m_eMesh.entity_key(subDimEntity[inode]); for (unsigned jprocs = 0; jprocs < procs_to_send_to.size(); ++jprocs) { @@ -3207,28 +3156,26 @@ recv_buffer.unpack< unsigned > (mark); { - //stk::mesh::EntityRank needed_entity_rank = buffer_entry.get(); - unsigned subDimEntitySize = buffer_entry.get(); + unsigned subDimEntitySize = std::get(buffer_entry); SubDimCell_SDCEntityType subDimEntity(&m_eMesh); - //getSubDimEntity(subDimEntity, owning_element, needed_entity_rank, iSubDimOrd); for (unsigned inode = 0; inode < subDimEntitySize; ++inode) { - stk::mesh::Entity node = m_eMesh.get_entity(buffer_entry.get()[inode]); + stk::mesh::Entity node = m_eMesh.get_entity(std::get(buffer_entry)[inode]); VERIFY_OP_ON(m_eMesh.is_valid(node), ==, true, "bad node"); subDimEntity.insert(node); } static SubDimCellData empty_SubDimCellData; - SubDimCellData* nodeId_elementOwnderId_ptr = getFromMapPtr(subDimEntity); - SubDimCellData& nodeId_elementOwnderId = (nodeId_elementOwnderId_ptr ? *nodeId_elementOwnderId_ptr : empty_SubDimCellData); - bool is_empty = nodeId_elementOwnderId_ptr == 0; + SubDimCellData* nodeId_elementOwnerId_ptr = getFromMapPtr(subDimEntity); + SubDimCellData& nodeId_elementOwnerId = (nodeId_elementOwnerId_ptr ? *nodeId_elementOwnerId_ptr : empty_SubDimCellData); + bool is_empty = nodeId_elementOwnerId_ptr == 0; //VERIFY_OP_ON(is_empty, !=, true, "hmmm"); if (!is_empty) { - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); // accumulation from all other procs nodeIds_onSE.m_mark |= mark; @@ -3267,43 +3214,43 @@ std::cout << "NodeRegistry::compare_to_kokkos_NR : key with m_HashCode = " << subDimEntity_BOOST.getHash() << " NOT FOUND kokkos map\n"; noKeysNotInCommon++; } - else //compare data fields typedef boost::tuple SubDimCellData; + else { - if ( !( data_KOKKOS->get<0>() == data_BOOST.get<0>() )) + if ( !( std::get<0>(*data_KOKKOS) == std::get<0>(data_BOOST) )) { // kUOmap_contains_bUOmap = false; std::cout << "NodeRegistry::compare_to_kokkos_NR : NodeIdsOnSubDimEntityType on tuple's do not match between NodeRegistry and KokkosNodeRegistry\n"; - std::cout << " kOUmap NodeIdsOnSubDimEntityType = "<< data_KOKKOS->get<0>() << " bOUmap NodeIdsOnSubDimEntityType = " << data_BOOST.get<0>() << "\n"; + std::cout << " kOUmap NodeIdsOnSubDimEntityType = "<< std::get<0>(*data_KOKKOS) << " bOUmap NodeIdsOnSubDimEntityType = " << std::get<0>(data_BOOST) << "\n"; } - if(!( data_KOKKOS->get<1>() == data_BOOST.get<1>() )) + if(!( std::get<1>(*data_KOKKOS) == std::get<1>(data_BOOST) )) { // kUOmap_contains_bUOmap = false; std::cout << "NodeRegistry::compare_to_kokkos_NR : EntityKey on tuple's do not match between NodeRegistry and KokkosNodeRegistry\n"; - std::cout << " kOUmap EntityKey = "<< data_KOKKOS->get<1>() << " bOUmap EntityKey = " << data_BOOST.get<1>() << "\n"; + std::cout << " kOUmap EntityKey = "<< std::get<1>(*data_KOKKOS) << " bOUmap EntityKey = " << std::get<1>(data_BOOST) << "\n"; } - if(!( data_KOKKOS->get<2>() == data_BOOST.get<2>() ) ) + if(!( std::get<2>(*data_KOKKOS) == std::get<2>(data_BOOST) ) ) { // kUOmap_contains_bUOmap = false; std::cout << "NodeRegistry::compare_to_kokkos_NR : unsigned char on tuple's do not match between NodeRegistry and KokkosNodeRegistry\n"; - std::cout << " kOUmap unsigned char = "<< data_KOKKOS->get<2>() << " bOUmap unsigned char = " << data_BOOST.get<2>() << "\n"; + std::cout << " kOUmap unsigned char = "<< std::get<2>(*data_KOKKOS) << " bOUmap unsigned char = " << std::get<2>(data_BOOST) << "\n"; } - if(!( data_KOKKOS->get<3>() == data_BOOST.get<3>() ) ) + if(!( std::get<3>(*data_KOKKOS) == std::get<3>(data_BOOST) ) ) { // kUOmap_contains_bUOmap = false; std::cout << "NodeRegistry::compare_to_kokkos_NR : unsigned char on tuple's do not match between NodeRegistry and KokkosNodeRegistry\n"; - std::cout << " kOUmap unsigned char = "<< data_KOKKOS->get<3>() << " bOUmap unsigned char = " << data_BOOST.get<3>() << "\n"; + std::cout << " kOUmap unsigned char = "<< std::get<3>(*data_KOKKOS) << " bOUmap unsigned char = " << std::get<3>(data_BOOST) << "\n"; } - if(!( data_KOKKOS->get<4>() == data_BOOST.get<4>() ) ) + if(!( std::get<4>(*data_KOKKOS) == std::get<4>(data_BOOST) ) ) { // kUOmap_contains_bUOmap = false; std::cout << "NodeRegistry::compare_to_kokkos_NR : Double2 on tuple's do not match between NodeRegistry and KokkosNodeRegistry\n"; - std::cout << " kOUmap Double2 = "<< data_KOKKOS->get<4>() << " bOUmap Double2 = " << data_BOOST.get<4>() << "\n"; + std::cout << " kOUmap Double2 = "<< std::get<4>(*data_KOKKOS) << " bOUmap Double2 = " << std::get<4>(data_BOOST) << "\n"; } } if(!kUOmap_contains_bUOmap) std::cout << "NodeRegistry::compare_to_kokkos_NR : key with m_HashCode = " << subDimEntity_BOOST.getHash() << " doesn't match anything in kokkos map\n\n"; - for(unsigned iEnt=0;iEnt().m_entity_id_vector.size();iEnt++){ - unsigned ent_val = data_BOOST.get<0>().m_entity_id_vector[iEnt]; + for(unsigned iEnt=0;iEnt(data_BOOST).m_entity_id_vector.size();iEnt++){ + unsigned ent_val = std::get<0>(data_BOOST).m_entity_id_vector[iEnt]; nodesMappedTo.insert(stk::mesh::Entity(ent_val)); } } diff --git a/packages/percept/src/adapt/NodeRegistry.hpp b/packages/percept/src/adapt/NodeRegistry.hpp index 553a40efd0fa..0a3df61ddc28 100644 --- a/packages/percept/src/adapt/NodeRegistry.hpp +++ b/packages/percept/src/adapt/NodeRegistry.hpp @@ -45,17 +45,10 @@ #include -#include -#include - #define DEBUG_PRINT_11 0 #define NR_PRINT(a) do { if (DEBUG_PRINT_11) std::cout << #a << " = " << a ; } while(0) #define NR_PRINT_OUT(a,out) do { if (DEBUG_PRINT_11) out << #a << " = " << a << std::endl; } while(0) -/// define only one of these to be 1 -/// current best setting is NODE_REGISTRY_MAP_TYPE_BOOST = 1 - - #define STK_ADAPT_NODEREGISTRY_USE_ENTITY_REPO 0 #define STK_ADAPT_NODEREGISTRY_DO_REHASH 1 @@ -104,7 +97,6 @@ m_useAddNodeSharing(false), m_checkForGhostedNodes(false), m_gee_cnt(0), m_gen_cnt(0), - m_entity_repo(percept::EntityRankEnd), m_debug(false), m_state(NRS_NONE) { @@ -118,7 +110,6 @@ } void init_comm_all(); - void init_entity_repo(); void clear_dangling_nodes(SetOfEntities* nodes_to_be_deleted); void initialize(); @@ -212,8 +203,8 @@ { SubDimCellData& nodeId_elementOwnderId = data; - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); - stk::mesh::EntityId owning_elementId = nodeId_elementOwnderId.get().id(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnderId); + stk::mesh::EntityId owning_elementId = std::get(nodeId_elementOwnderId).id(); if (1) std::cout << "put in map: nodeIds_onSE.size= " << (nodeIds_onSE.size()) @@ -376,7 +367,6 @@ public: int m_gee_cnt; int m_gen_cnt; - std::vector m_entity_repo; bool m_debug; diff --git a/packages/percept/src/adapt/NodeRegistryDef.hpp b/packages/percept/src/adapt/NodeRegistryDef.hpp index 62e5e18a26cd..b85c43b52487 100644 --- a/packages/percept/src/adapt/NodeRegistryDef.hpp +++ b/packages/percept/src/adapt/NodeRegistryDef.hpp @@ -21,9 +21,9 @@ getSubDimEntity(subDimEntity, element, needed_entity_rank, iSubDimOrd); static SubDimCellData empty_SubDimCellData; - SubDimCellData* nodeId_elementOwnderId_ptr = getFromMapPtr(subDimEntity); - SubDimCellData& nodeId_elementOwnderId = (nodeId_elementOwnderId_ptr ? *nodeId_elementOwnderId_ptr : empty_SubDimCellData); - bool is_empty = nodeId_elementOwnderId_ptr == 0; + SubDimCellData* nodeId_elementOwnerId_ptr = getFromMapPtr(subDimEntity); + SubDimCellData& nodeId_elementOwnerId = (nodeId_elementOwnerId_ptr ? *nodeId_elementOwnerId_ptr : empty_SubDimCellData); + bool is_empty = nodeId_elementOwnerId_ptr == 0; bool debug = false; if (debug) @@ -37,13 +37,13 @@ << "\n eMesh.entity_rank(element) = " << m_eMesh.entity_rank(element) << "\n needed_entity_rank= " << needed_entity_rank << "\n iSubDimOrd= " << iSubDimOrd - << "\n nodeId_elementOwnderId.size= " << nodeId_elementOwnderId.get().size() - << "\n node_valid= " << m_eMesh.is_valid(nodeId_elementOwnderId.get()[0]) - << "\n node_id= " << nodeId_elementOwnderId.get().m_entity_id_vector[0] + << "\n nodeId_elementOwnerId.size= " << std::get(nodeId_elementOwnerId).size() + << "\n node_valid= " << m_eMesh.is_valid(std::get(nodeId_elementOwnerId)[0]) + << "\n node_id= " << std::get(nodeId_elementOwnerId).m_entity_id_vector[0] << "\n is_empty= " << is_empty - << "\n owningElementKey= " << (is_empty ? stk::mesh::EntityKey(m_eMesh.node_rank(),0) : nodeId_elementOwnderId.get()) - << "\n owningElementSubDimRank= " << (is_empty ? 0 : nodeId_elementOwnderId.get()) - << "\n owningElementSubDimOrd= " << (is_empty ? 0 : nodeId_elementOwnderId.get()) + << "\n owningElementKey= " << (is_empty ? stk::mesh::EntityKey(m_eMesh.node_rank(),0) : std::get(nodeId_elementOwnerId)) + << "\n owningElementSubDimRank= " << (is_empty ? 0 : std::get(nodeId_elementOwnerId)) + << "\n owningElementSubDimOrd= " << (is_empty ? 0 : std::get(nodeId_elementOwnerId)) << std::endl; } @@ -51,7 +51,7 @@ { return 0; } - NodeIdsOnSubDimEntityType& nodeId = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeId = std::get(nodeId_elementOwnerId); if (debug) { std::cout << "NodeRegistry::getNewNodesOnSubDimEntity: nodeId.size= " << nodeId.size() << " node= " << nodeId[0] << " " << nodeId.m_entity_id_vector[0] << std::endl; @@ -65,9 +65,8 @@ getSubDimEntity(subDimEntity, element, needed_entity_rank, iSubDimOrd); static SubDimCellData empty_SubDimCellData; - SubDimCellData* nodeId_elementOwnderId_ptr = getFromMapPtr(subDimEntity); - //SubDimCellData& nodeId_elementOwnderId = (nodeId_elementOwnderId_ptr ? *nodeId_elementOwnderId_ptr : empty_SubDimCellData); - bool is_empty = nodeId_elementOwnderId_ptr == 0; + SubDimCellData* nodeId_elementOwnerId_ptr = getFromMapPtr(subDimEntity); + bool is_empty = nodeId_elementOwnerId_ptr == 0; return is_empty; } diff --git a/packages/percept/src/adapt/NodeRegistryType.hpp b/packages/percept/src/adapt/NodeRegistryType.hpp index 5a4f18dedaca..a0811e36fc35 100644 --- a/packages/percept/src/adapt/NodeRegistryType.hpp +++ b/packages/percept/src/adapt/NodeRegistryType.hpp @@ -19,7 +19,7 @@ #include #include #include -#include +#include #include #include @@ -40,18 +40,12 @@ #include -#include -#include +#include #include #include #include -#define NODE_REGISTRY_MAP_TYPE_BOOST 1 -#if NODE_REGISTRY_MAP_TYPE_BOOST -#include -#endif - namespace percept { // pair of rank and number of entities of that rank needed on a SubDimCell struct NeededEntityType @@ -63,14 +57,14 @@ namespace percept { : first(f), second(s), third(0) {} }; - inline std::ostream &operator<<(std::ostream& out, const boost::array& arr) + inline std::ostream &operator<<(std::ostream& out, const std::array& arr) { out << arr[0]; return out; } #define DOUBLE2LEN 2 - typedef boost::array Double2; + typedef std::array Double2; inline std::ostream &operator<<(std::ostream& out, const Double2 arr) { @@ -80,7 +74,7 @@ namespace percept { } // tuple storage: SDC_DATA_GLOBAL_NODE_IDS, SDC_DATA_OWNING_ELEMENT_KEY, SDC_DATA_OWNING_SUBDIM_RANK, SDC_DATA_OWNING_SUBDIM_ORDINAL, SDC_DATA_SPACING - typedef boost::tuple SubDimCellData; + typedef std::tuple SubDimCellData; enum { MAX_NODES_ON_A_FACE = 4 }; typedef MySubDimCell SubDimCell_SDCEntityType; @@ -104,32 +98,21 @@ namespace percept { { std::ostringstream ostr; ostr << "SDC:: node ids= ["; - for (unsigned ii=0; ii < val.get().size(); ++ii) + for (unsigned ii=0; ii < std::get(val).size(); ++ii) { - ostr << " " << val.get().m_entity_id_vector[ii]; + ostr << " " << std::get(val).m_entity_id_vector[ii]; } - ostr << "] owning element rank= " << val.get().rank() - << " id= " << val.get().id() - << " subDim-ord= " << (int)val.get() - << " subDim-rank= " << (int)val.get() - << " spacing info= " << val.get()[0] << " " << val.get()[1]; + ostr << "] owning element rank= " << std::get(val).rank() + << " id= " << std::get(val).id() + << " subDim-ord= " << (int)std::get(val) + << " subDim-rank= " << (int)std::get(val) + << " spacing info= " << std::get(val)[0] << " " << std::get(val)[1]; out << ostr.str() << std::endl; return out; } /// map of the node ids on a sub-dim entity to the data on the sub-dim entity - -#if NODE_REGISTRY_MAP_TYPE_BOOST -# ifdef STK_HAVE_TBB - - typedef tbb::scalable_allocator > RegistryAllocator; - typedef boost::unordered_map, my_fast_equal_to, RegistryAllocator > SubDimCellToDataMap; - -# else - typedef boost::unordered_map, my_fast_equal_to > SubDimCellToDataMap; - typedef boost::unordered_map EntityRepo; -# endif -#endif + typedef std::unordered_map, my_fast_equal_to > SubDimCellToDataMap; // Size and rank of sub-dim cells needing new nodes, actual nodes' EntityKeys stored in a SubDimCell enum CommDataTypeEnum { @@ -139,7 +122,7 @@ namespace percept { }; // decode: size of SubDimCell, SubDimCell, sub-dim entity rank, non-owning element RANK - typedef boost::tuple > CommDataType; + typedef std::tuple > CommDataType; enum NodeRegistryState { NRS_NONE, diff --git a/packages/percept/src/adapt/NodeRegistry_KOKKOS.cpp b/packages/percept/src/adapt/NodeRegistry_KOKKOS.cpp index 4e274dc58446..51c0ea41eed2 100644 --- a/packages/percept/src/adapt/NodeRegistry_KOKKOS.cpp +++ b/packages/percept/src/adapt/NodeRegistry_KOKKOS.cpp @@ -22,15 +22,9 @@ #include namespace percept { - void NodeRegistry_KOKKOS::init_entity_repo() - { - for (unsigned i = 0; i < percept::EntityRankEnd; i++) m_entity_repo[i].clear(); - } - void NodeRegistry_KOKKOS::initialize() { m_cell_2_data_map.clear(); - init_entity_repo(); } void NodeRegistry_KOKKOS:: @@ -99,15 +93,15 @@ // for (iter = m_cell_2_data_map.begin(); iter != m_cell_2_data_map.end(); ++iter) // { -// SubDimCellData& nodeId_elementOwnderId = (*iter).second; +// SubDimCellData& nodeId_elementOwnerId = (*iter).second; for(unsigned iMapIndx = 0; iMapIndx(); + SubDimCellData& nodeId_elementOwnerId = m_cell_2_data_map.value_at(iData); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); if (debug) std::cout << "tmp SRK nodeIds_onSE.size= " << nodeIds_onSE.size() << std::endl; if (nodeIds_onSE.size()) { @@ -164,14 +158,14 @@ static SubDimCellData empty_SubDimCellData; - SubDimCellData* nodeId_elementOwnderId_ptr = getFromMapPtr(subDimEntity); - SubDimCellData& nodeId_elementOwnderId = (nodeId_elementOwnderId_ptr ? *nodeId_elementOwnderId_ptr : empty_SubDimCellData); - bool is_empty = nodeId_elementOwnderId_ptr == 0; - bool is_not_empty_but_data_cleared = (!is_empty && nodeId_elementOwnderId.get().size() == 0); + SubDimCellData* nodeId_elementOwnerId_ptr = getFromMapPtr(subDimEntity); + SubDimCellData& nodeId_elementOwnerId = (nodeId_elementOwnerId_ptr ? *nodeId_elementOwnerId_ptr : empty_SubDimCellData); + bool is_empty = nodeId_elementOwnerId_ptr == 0; + bool is_not_empty_but_data_cleared = (!is_empty && std::get(nodeId_elementOwnerId).size() == 0); // if empty or if my id is the smallest, make this element the owner - stk::mesh::EntityId db_id = nodeId_elementOwnderId.get().id(); - stk::mesh::EntityRank db_rank = nodeId_elementOwnderId.get().rank(); + stk::mesh::EntityId db_id = std::get(nodeId_elementOwnerId).id(); + stk::mesh::EntityRank db_rank = std::get(nodeId_elementOwnerId).rank(); stk::mesh::EntityId element_id = m_eMesh.identifier(element); stk::mesh::EntityId element_rank = m_eMesh.entity_rank(element); @@ -183,7 +177,7 @@ unsigned smark=0; if (!is_empty) { - unsigned& mark = nodeId_elementOwnderId.get().m_mark; + unsigned& mark = std::get(nodeId_elementOwnerId).m_mark; if (needNodes) mark |= NR_MARK; else @@ -204,9 +198,8 @@ { unsigned numNewNodes = needed_entity_rank.second; - SubDimCellData data( NodeIdsOnSubDimEntityType(numNewNodes, stk::mesh::Entity(), smark), - stk::mesh::EntityKey(m_eMesh.entity_rank(element), m_eMesh.identifier(element)), needed_entity_rank.first, iSubDimOrd+1 ); - NodeIdsOnSubDimEntityType& nid_new = data.get(); + SubDimCellData data = std::forward_as_tuple( NodeIdsOnSubDimEntityType(numNewNodes, stk::mesh::Entity(), smark), stk::mesh::EntityKey(m_eMesh.entity_rank(element), m_eMesh.identifier(element)), (unsigned char)needed_entity_rank.first, (unsigned char)(iSubDimOrd+1), Double2() ); + NodeIdsOnSubDimEntityType& nid_new = std::get(data); if (needNodes) nid_new.m_mark |= NR_MARK; else @@ -219,9 +212,8 @@ { stk::mesh::Entity owning_element = m_eMesh.get_entity(db_rank, db_id); VERIFY_OP_ON(m_eMesh.is_valid(owning_element), ==, true, "hmmm"); - NodeIdsOnSubDimEntityType& nid = nodeId_elementOwnderId.get(); -// m_cell_2_data_map[subDimEntity] = SubDimCellData(nid, stk::mesh::EntityKey(m_eMesh.entity_rank(element), m_eMesh.identifier(element)), needed_entity_rank.first, iSubDimOrd+1 ); - SubDimCellData data(nid, stk::mesh::EntityKey(m_eMesh.entity_rank(element), m_eMesh.identifier(element)), needed_entity_rank.first, iSubDimOrd+1 ); + NodeIdsOnSubDimEntityType& nid = std::get(nodeId_elementOwnerId); + SubDimCellData data = std::forward_as_tuple(nid, stk::mesh::EntityKey(m_eMesh.entity_rank(element), m_eMesh.identifier(element)), (unsigned char)needed_entity_rank.first, (unsigned char)(iSubDimOrd+1), Double2() ); putInMap(subDimEntity,data); } ret_val = true; @@ -232,7 +224,7 @@ bool debug = false; if (debug && !is_empty) { - unsigned originalMark = nodeId_elementOwnderId.get().m_mark; + unsigned originalMark = std::get(nodeId_elementOwnerId).m_mark; std::cout << m_eMesh.rank() << " registerNeedNewNode element= " << m_eMesh.print_entity_compact(element) << "\n needNodes= " << needNodes << " iSubDimOrd= " << iSubDimOrd << " is_empty= " << is_empty << " is_not_empty_but_data_cleared= " << is_not_empty_but_data_cleared << " should_put_in= " << should_put_in << " originalMark= " << originalMark << " currentMark= " << smark << " NR_MARK= " << NR_MARK @@ -241,15 +233,15 @@ } if (debug) { - SubDimCellData* a_nodeId_elementOwnderId_ptr = getFromMapPtr(subDimEntity); - SubDimCellData& a_nodeId_elementOwnderId = (a_nodeId_elementOwnderId_ptr ? *a_nodeId_elementOwnderId_ptr : empty_SubDimCellData); - bool a_is_empty = a_nodeId_elementOwnderId_ptr == 0; - unsigned& gotMark = a_nodeId_elementOwnderId.get().m_mark; - unsigned nidSize = a_nodeId_elementOwnderId.get().size(); + SubDimCellData* a_nodeId_elementOwnerId_ptr = getFromMapPtr(subDimEntity); + SubDimCellData& a_nodeId_elementOwnerId = (a_nodeId_elementOwnerId_ptr ? *a_nodeId_elementOwnerId_ptr : empty_SubDimCellData); + bool a_is_empty = a_nodeId_elementOwnerId_ptr == 0; + unsigned& gotMark = std::get(a_nodeId_elementOwnerId).m_mark; + unsigned nidSize = std::get(a_nodeId_elementOwnerId).size(); std::ostringstream sout; sout << "P[" << m_eMesh.get_rank() << "] registerNeedNewNode:: element= " << m_eMesh.identifier(element) << " nidSize= " << nidSize - << " nid= " << (nidSize ? (int)m_eMesh.identifier(nodeId_elementOwnderId.get()[0]) : -1); + << " nid= " << (nidSize ? (int)m_eMesh.identifier(std::get(nodeId_elementOwnerId)[0]) : -1); sout << " smark= " << smark << " gotMark= " << gotMark << " needNodes= " << needNodes << " isG= " << m_eMesh.isGhostElement(element) << " is_empty= " << is_empty @@ -416,13 +408,13 @@ unsigned iData = m_cell_2_data_map.find(subDimEntity); if(iData == Kokkos::UnorderedMapInvalidIndex) continue; - SubDimCellData& nodeId_elementOwnderId = m_cell_2_data_map.value_at(iData); - stk::mesh::EntityId owning_elementId = nodeId_elementOwnderId.get().id(); + SubDimCellData& nodeId_elementOwnerId = m_cell_2_data_map.value_at(iData); + stk::mesh::EntityId owning_elementId = std::get(nodeId_elementOwnerId).id(); - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); if (nodeIds_onSE.size()) { - stk::mesh::EntityRank erank = nodeId_elementOwnderId.get().rank(); + stk::mesh::EntityRank erank = std::get(nodeId_elementOwnerId).rank(); stk::mesh::Entity owning_element = get_entity_element(*m_eMesh.get_bulk_data(), erank, owning_elementId); if (!m_eMesh.is_valid(owning_element)) @@ -469,7 +461,7 @@ m_eMesh.createEntities( stk::topology::NODE_RANK, num_nodes_needed, new_nodes); #else m_eMesh.initializeIdServer(); - stk::mesh::Part& nodePart = m_eMesh.get_fem_meta_data()->get_cell_topology_root_part(stk::mesh::get_cell_topology(stk::topology::NODE)); + stk::mesh::Part& nodePart = m_eMesh.get_fem_meta_data()->get_topology_root_part(stk::topology::NODE); stk::mesh::PartVector nodeParts(1, &nodePart); m_eMesh.getEntitiesUsingIdServer( m_eMesh.node_rank(), num_nodes_needed, new_nodes, nodeParts); #endif @@ -522,12 +514,12 @@ (void)iData; else{ SubDimCellData& data = m_cell_2_data_map.value_at(iData); - NodeIdsOnSubDimEntityType& nodeIds_onSE = data.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(data); if (!nodeIds_onSE.size()) // continue; //continue doesn't work the same way in pf (void)iData; else{ - stk::mesh::EntityId owning_elementId = data.get().id(); + stk::mesh::EntityId owning_elementId = std::get(data).id(); #ifndef __CUDACC__ if (!owning_elementId) @@ -536,7 +528,7 @@ } #endif - stk::mesh::EntityRank erank = data.get().rank(); + stk::mesh::EntityRank erank = std::get(data).rank(); stk::mesh::Entity owning_element = get_entity_element(*m_eMesh.get_bulk_data(), erank, owning_elementId); if (!m_eMesh.is_valid(owning_element)) @@ -656,15 +648,15 @@ // for (SubDimCellToDataMap_KOKKOS::iterator iter = map.begin(); iter != map.end(); ++iter) // { // const SubDimCell_SDCEntityType& subDimEntity = (*iter).first; -// SubDimCellData& nodeId_elementOwnderId = (*iter).second; +// SubDimCellData& nodeId_elementOwnerId = (*iter).second; for(unsigned iMapIndx = 0; iMapIndx(nodeId_elementOwnderId.get()); + SubDimCellData& nodeId_elementOwnerId = map.value_at(iData); + stk::mesh::EntityRank owning_element_subDim_rank = static_cast(std::get(nodeId_elementOwnerId)); static std::vector procs_to_send_to; @@ -681,7 +673,7 @@ if (!need_to_send) continue; - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); if (nodeIds_onSE.size()) { @@ -691,11 +683,11 @@ // only need to send if it's got non-zero mark info if (is_marked || is_not_marked) { - buffer_entry.get() = subDimEntity.size(); - buffer_entry.get() = owning_element_subDim_rank; + std::get(buffer_entry) = subDimEntity.size(); + std::get(buffer_entry) = owning_element_subDim_rank; for (unsigned inode=0; inode < subDimEntity.size(); ++inode) - buffer_entry.get()[inode] = m_eMesh.entity_key(subDimEntity[inode]); + std::get(buffer_entry)[inode] = m_eMesh.entity_key(subDimEntity[inode]); for (unsigned jprocs = 0; jprocs < procs_to_send_to.size(); ++jprocs) { @@ -729,28 +721,27 @@ recv_buffer.unpack< unsigned > (mark); { - //stk::mesh::EntityRank needed_entity_rank = buffer_entry.get(); - unsigned subDimEntitySize = buffer_entry.get(); + unsigned subDimEntitySize = std::get(buffer_entry); SubDimCell_SDCEntityType subDimEntity(&m_eMesh); //getSubDimEntity(subDimEntity, owning_element, needed_entity_rank, iSubDimOrd); for (unsigned inode = 0; inode < subDimEntitySize; ++inode) { - stk::mesh::Entity node = m_eMesh.get_entity(buffer_entry.get()[inode]); + stk::mesh::Entity node = m_eMesh.get_entity(std::get(buffer_entry)[inode]); VERIFY_OP_ON(m_eMesh.is_valid(node), ==, true, "bad node"); subDimEntity.insert(node); } static SubDimCellData empty_SubDimCellData; - SubDimCellData* nodeId_elementOwnderId_ptr = getFromMapPtr(subDimEntity); - SubDimCellData& nodeId_elementOwnderId = (nodeId_elementOwnderId_ptr ? *nodeId_elementOwnderId_ptr : empty_SubDimCellData); - bool is_empty = nodeId_elementOwnderId_ptr == 0; + SubDimCellData* nodeId_elementOwnerId_ptr = getFromMapPtr(subDimEntity); + SubDimCellData& nodeId_elementOwnerId = (nodeId_elementOwnerId_ptr ? *nodeId_elementOwnerId_ptr : empty_SubDimCellData); + bool is_empty = nodeId_elementOwnerId_ptr == 0; //VERIFY_OP_ON(is_empty, !=, true, "hmmm"); if (!is_empty) { - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); // accumulation from all other procs nodeIds_onSE.m_mark |= mark; @@ -792,44 +783,44 @@ std::cout << "NodeRegistry_KOKKOS::compare_to_boost_NR : key with m_HashCode = " << subDimEntity_KOKKOS.getHash() << " NOT FOUND kokkos map\n"; noKeysNotInCommon++; } - else //compare data fields typedef boost::tuple SubDimCellData; + else { - if ( !( data_KOKKOS.get<0>() == data_BOOST->get<0>() )) + if ( !( std::get<0>(data_KOKKOS) == std::get<0>(*data_BOOST) )) { // bUOmap_contains_kUOmap = false; std::cout << "NodeRegistry_KOKKOS::compare_to_boost_NR : NodeIdsOnSubDimEntityType on tuple's do not match between NodeRegistry and KokkosNodeRegistry\n"; - std::cout << " kOUmap NodeIdsOnSubDimEntityType = "<< data_KOKKOS.get<0>() << " bOUmap NodeIdsOnSubDimEntityType = " << data_BOOST->get<0>() << "\n"; + std::cout << " kOUmap NodeIdsOnSubDimEntityType = "<< std::get<0>(data_KOKKOS) << " bOUmap NodeIdsOnSubDimEntityType = " << std::get<0>(*data_BOOST) << "\n"; } - if(!( data_KOKKOS.get<1>() == data_BOOST->get<1>() )) + if(!( std::get<1>(data_KOKKOS) == std::get<1>(*data_BOOST) )) { // bUOmap_contains_kUOmap = false; std::cout << "NodeRegistry_KOKKOS::compare_to_boost_NR : EntityKey on tuple's do not match between NodeRegistry and KokkosNodeRegistry\n"; - std::cout << " kOUmap EntityKey = "<< data_KOKKOS.get<1>() << " bOUmap EntityKey = " << data_BOOST->get<1>() << "\n"; + std::cout << " kOUmap EntityKey = "<< std::get<1>(data_KOKKOS) << " bOUmap EntityKey = " << std::get<1>(*data_BOOST) << "\n"; } - if(!( data_KOKKOS.get<2>() == data_BOOST->get<2>() ) ) + if(!( std::get<2>(data_KOKKOS) == std::get<2>(*data_BOOST) ) ) { // bUOmap_contains_kUOmap = false; std::cout << "NodeRegistry_KOKKOS::compare_to_boost_NR : unsigned char on tuple's do not match between NodeRegistry and KokkosNodeRegistry\n"; - std::cout << " kOUmap unsigned char = "<< data_KOKKOS.get<2>() << " bOUmap unsigned char = " << data_BOOST->get<2>() << "\n"; + std::cout << " kOUmap unsigned char = "<< std::get<2>(data_KOKKOS) << " bOUmap unsigned char = " << std::get<2>(*data_BOOST) << "\n"; } - if(!( data_KOKKOS.get<3>() == data_BOOST->get<3>() ) ) + if(!( std::get<3>(data_KOKKOS) == std::get<3>(*data_BOOST) ) ) { // bUOmap_contains_kUOmap = false; std::cout << "NodeRegistry_KOKKOS::compare_to_boost_NR : unsigned char on tuple's do not match between NodeRegistry and KokkosNodeRegistry\n"; - std::cout << " kOUmap unsigned char = "<< data_KOKKOS.get<3>() << " bOUmap unsigned char = " << data_BOOST->get<3>() << "\n"; + std::cout << " kOUmap unsigned char = "<< std::get<3>(data_KOKKOS) << " bOUmap unsigned char = " << std::get<3>(*data_BOOST) << "\n"; } - if(!( data_KOKKOS.get<4>() == data_BOOST->get<4>() ) ) + if(!( std::get<4>(data_KOKKOS) == std::get<4>(*data_BOOST) ) ) { // bUOmap_contains_kUOmap = false; std::cout << "NodeRegistry_KOKKOS::compare_to_boost_NR : Double2 on tuple's do not match between NodeRegistry and KokkosNodeRegistry\n"; - std::cout << " kOUmap Double2 = "<< data_KOKKOS.get<4>() << " bOUmap Double2 = " << data_BOOST->get<4>() << "\n"; + std::cout << " kOUmap Double2 = "<< std::get<4>(data_KOKKOS) << " bOUmap Double2 = " << std::get<4>(*data_BOOST) << "\n"; } } if(!bUOmap_contains_kUOmap) std::cout << "NodeRegistry_KOKKOS::compare_to_boost_NR : key with m_HashCode = " << subDimEntity_KOKKOS.getHash() << " doesn't match anything in kokkos map\n\n"; - for(unsigned iEnt=0;iEnt().m_entity_id_vector.size();iEnt++){ - unsigned ent_val = data_KOKKOS.get<0>().m_entity_id_vector[iEnt]; + for(unsigned iEnt=0;iEnt(data_KOKKOS).m_entity_id_vector.size();iEnt++){ + unsigned ent_val = std::get<0>(data_KOKKOS).m_entity_id_vector[iEnt]; nodesMappedTo.insert(stk::mesh::Entity(ent_val)); } } diff --git a/packages/percept/src/adapt/NodeRegistry_KOKKOS.hpp b/packages/percept/src/adapt/NodeRegistry_KOKKOS.hpp index da6e11bc99ae..8f0d31ac44d7 100644 --- a/packages/percept/src/adapt/NodeRegistry_KOKKOS.hpp +++ b/packages/percept/src/adapt/NodeRegistry_KOKKOS.hpp @@ -45,9 +45,6 @@ #include -#include -#include - #include #include @@ -55,9 +52,6 @@ #define NR_PRINT(a) do { if (DEBUG_PRINT_11) std::cout << #a << " = " << a ; } while(0) #define NR_PRINT_OUT(a,out) do { if (DEBUG_PRINT_11) out << #a << " = " << a << std::endl; } while(0) -/// define only one of these to be 1 -/// current best setting is NODE_REGISTRY_MAP_TYPE_BOOST = 1 - #define STK_ADAPT_NODEREGISTRY_USE_ENTITY_REPO 0 #define STK_ADAPT_NODEREGISTRY_DO_REHASH 1 @@ -83,7 +77,6 @@ /// map of the node ids on a sub-dim entity to the data on the sub-dim entity typedef Kokkos::UnorderedMap, my_fast_equal_to > SubDimCellToDataMap_KOKKOS; - typedef Kokkos::UnorderedMap EntityRepo_KOKKOS; //======================================================================================================================== //======================================================================================================================== @@ -112,7 +105,6 @@ m_useAddNodeSharing(false), m_checkForGhostedNodes(false), m_gee_cnt(0), m_gen_cnt(0), - m_entity_repo(percept::EntityRankEnd), m_debug(false), m_state(NRS_NONE), m_waste_tolerance(waste_tol) @@ -127,7 +119,6 @@ } void init_comm_all(); - void init_entity_repo(); void clear_dangling_nodes(SetOfEntities* nodes_to_be_deleted); void initialize(); @@ -232,8 +223,8 @@ { SubDimCellData& nodeId_elementOwnderId = data; - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); - stk::mesh::EntityId owning_elementId = nodeId_elementOwnderId.get().id(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnderId); + stk::mesh::EntityId owning_elementId = std::get(nodeId_elementOwnderId).id(); if (1) std::cout << "put in map: nodeIds_onSE.size= " << (nodeIds_onSE.size()) @@ -412,7 +403,6 @@ public: int m_gee_cnt; int m_gen_cnt; - std::vector m_entity_repo; bool m_debug; diff --git a/packages/percept/src/adapt/Percept_MOAB_SimplexTemplateRefiner.cpp b/packages/percept/src/adapt/Percept_MOAB_SimplexTemplateRefiner.cpp index b0f03e6d570c..6b0340b78f06 100644 --- a/packages/percept/src/adapt/Percept_MOAB_SimplexTemplateRefiner.cpp +++ b/packages/percept/src/adapt/Percept_MOAB_SimplexTemplateRefiner.cpp @@ -17,8 +17,6 @@ #include #include -#include - #include #include @@ -39,13 +37,11 @@ static double MBTetParametric[] = { 0., 0., 0., 1., 0., 0., 0., 1., 0., # define MB_TESSELLATOR_INCR_SUBCASE_COUNT(cs,sc) #endif // MB_DEBUG_TESSELLATOR -#define PERCEPT_DEBUG 0 - namespace moab { static void error(int i) { - std::string ii = "Percept_MOAB_SimplexTemplateRefiner:: err # "+ boost::lexical_cast(i); + std::string ii = "Percept_MOAB_SimplexTemplateRefiner:: err # "+ std::to_string(i); throw std::logic_error("test"); } @@ -220,9 +216,6 @@ namespace moab { // edge_length2[ei] = 0.; - if (PERCEPT_DEBUG) - std::cout << "tmp PM edge_code= " << edge_code << std::endl; - if ( ! edge_code ) { // No edges to subdivide @@ -279,9 +272,6 @@ namespace moab { int C = SimplexTemplateRefiner::template_index[edge_code][0]; int P = SimplexTemplateRefiner::template_index[edge_code][1]; - if (PERCEPT_DEBUG) - std::cout << "tmp PM C,P= " << C << " " << P << std::endl; - // 1. Permute the tetrahedron into our canonical configuration for ( int i = 0; i < 14; ++ i ) { @@ -1523,8 +1513,6 @@ namespace moab { output_perm.pop(); output_sign.pop(); - if (PERCEPT_DEBUG) - std::cout << "tmp PM case= " << C << " edge_code= " << edge_code << " ntets= " << ntets << std::endl; int t; if ( sgn > 0 ) { @@ -1538,16 +1526,13 @@ namespace moab { permuted_coords[perm[tets[3]]], permuted_tags[perm[tets[3]]], permuted_hash[perm[tets[3]]] ); #endif - TetTupleInt nt = TetTupleInt(permuted_local_ids[perm[tets[0]]], - permuted_local_ids[perm[tets[1]]], - permuted_local_ids[perm[tets[2]]], - permuted_local_ids[perm[tets[3]]]); + TetTupleInt nt = {permuted_local_ids[perm[tets[0]]], + permuted_local_ids[perm[tets[1]]], + permuted_local_ids[perm[tets[2]]], + permuted_local_ids[perm[tets[3]]]}; new_tets.push_back(nt); - if (PERCEPT_DEBUG) - std::cout << "tmp PM new tet= " << nt << std::endl; - tets += 4; } } @@ -1565,17 +1550,14 @@ namespace moab { permuted_coords[perm[tets[3]]], permuted_tags[perm[tets[3]]], permuted_hash[perm[tets[3]]] ); #endif - TetTupleInt nt = TetTupleInt(permuted_local_ids[perm[tets[1]]], - permuted_local_ids[perm[tets[0]]], - permuted_local_ids[perm[tets[2]]], - permuted_local_ids[perm[tets[3]]]); + TetTupleInt nt = {permuted_local_ids[perm[tets[1]]], + permuted_local_ids[perm[tets[0]]], + permuted_local_ids[perm[tets[2]]], + permuted_local_ids[perm[tets[3]]]}; new_tets.push_back(nt); - if (PERCEPT_DEBUG) - std::cout << "tmp PM new tet= " << nt << std::endl; - tets += 4; } } diff --git a/packages/percept/src/adapt/Percept_MOAB_SimplexTemplateRefiner.hpp b/packages/percept/src/adapt/Percept_MOAB_SimplexTemplateRefiner.hpp index 83ab805c25a7..9cf7524d7eba 100644 --- a/packages/percept/src/adapt/Percept_MOAB_SimplexTemplateRefiner.hpp +++ b/packages/percept/src/adapt/Percept_MOAB_SimplexTemplateRefiner.hpp @@ -1,8 +1,12 @@ -// 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. -// +/*--------------------------------------------------------------------*/ +/* Copyright 2002 - 2008, 2010, 2011 National Technology & */ +/* Engineering Solutions of Sandia, LLC (NTESS). Under the terms */ +/* of Contract DE-NA0003525 with NTESS, there is a */ +/* non-exclusive license for use of this work by or on behalf */ +/* of the U.S. Government. Export of this program may require */ +/* a license from the United States Government. */ +/*--------------------------------------------------------------------*/ + // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. @@ -26,10 +30,6 @@ * MOAB, a Mesh-Oriented datABase, is a software component for creating, * storing and accessing finite element mesh data. * - * Copyright 2007 Sandia Corporation. Under the terms of Contract - * DE-AC04-94AL85000 with Sandia Coroporation, the U.S. Government - * retains certain rights in this software. - * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either @@ -56,19 +56,11 @@ #include #include -#include -#include - #include -//p #include "EntityRefiner.hpp" -//p #include "SimplexTemplateTagAssigner.hpp" - -//p #include "moab/Types.hpp" // for MB_DLL_EXPORT - namespace moab { - typedef boost::tuple TetTupleInt; + typedef std::array TetTupleInt; //p typedef int EntityHandle; diff --git a/packages/percept/src/adapt/PredicateBasedElementAdapter.hpp b/packages/percept/src/adapt/PredicateBasedElementAdapter.hpp index 175f3ad6eeb3..1611865702c4 100644 --- a/packages/percept/src/adapt/PredicateBasedElementAdapter.hpp +++ b/packages/percept/src/adapt/PredicateBasedElementAdapter.hpp @@ -173,13 +173,9 @@ SubDimCellData* nodeId_elementOwnderId_ptr = getNodeRegistry().getFromMapPtr(subDimEntity); SubDimCellData& nodeId_elementOwnderId = (nodeId_elementOwnderId_ptr ? *nodeId_elementOwnderId_ptr : empty_SubDimCellData); bool is_empty = nodeId_elementOwnderId_ptr == 0; - //bool is_not_empty_but_data_cleared = (!is_empty && nodeId_elementOwnderId.get().size() == 0); if (!is_empty) { - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); - //unsigned nidsz = nodeIds_onSE.size(); - //for (unsigned i_nid = 0; i_nid < nidsz; i_nid++) - //stk::mesh::Entity edge_node = nodeIds_onSE[0]; + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnderId); if (nodeIds_onSE.size()) { unsigned mark = nodeIds_onSE.m_mark; diff --git a/packages/percept/src/adapt/PredicateTemplateAdapter.hpp b/packages/percept/src/adapt/PredicateTemplateAdapter.hpp index 679383bdd66c..a7ccd29193b9 100644 --- a/packages/percept/src/adapt/PredicateTemplateAdapter.hpp +++ b/packages/percept/src/adapt/PredicateTemplateAdapter.hpp @@ -455,13 +455,9 @@ SubDimCellData* nodeId_elementOwnderId_ptr = getNodeRegistry().getFromMapPtr(subDimEntity); SubDimCellData& nodeId_elementOwnderId = (nodeId_elementOwnderId_ptr ? *nodeId_elementOwnderId_ptr : empty_SubDimCellData); bool is_empty = nodeId_elementOwnderId_ptr == 0; - //bool is_not_empty_but_data_cleared = (!is_empty && nodeId_elementOwnderId.get().size() == 0); if (!is_empty) { - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); - //unsigned nidsz = nodeIds_onSE.size(); - //for (unsigned i_nid = 0; i_nid < nidsz; i_nid++) - //stk::mesh::Entity edge_node = nodeIds_onSE[0]; + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnderId); if (nodeIds_onSE.size()) { unsigned mark = nodeIds_onSE.m_mark; diff --git a/packages/percept/src/adapt/RefinementInfoByType.cpp b/packages/percept/src/adapt/RefinementInfoByType.cpp index 7d3ce520e162..2beb57180679 100644 --- a/packages/percept/src/adapt/RefinementInfoByType.cpp +++ b/packages/percept/src/adapt/RefinementInfoByType.cpp @@ -191,7 +191,7 @@ { const SubDimCell_SDCEntityType& subDimEntity = (*iter).first; SubDimCellData& nodeId_elementOwnderId = (*iter).second; - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnderId); unsigned idx = map_sde_size[subDimEntity.size()]; if (nodeIds_onSE.size()) diff --git a/packages/percept/src/adapt/Refiner.cpp b/packages/percept/src/adapt/Refiner.cpp index de40ee8412a1..7d22b3526cb0 100644 --- a/packages/percept/src/adapt/Refiner.cpp +++ b/packages/percept/src/adapt/Refiner.cpp @@ -628,10 +628,6 @@ { m_nodeRegistry->initialize(); } - else - { - m_nodeRegistry->init_entity_repo(); - } m_nodeRegistry->init_comm_all(); @@ -967,11 +963,6 @@ m_nodeRegistry->prolongate(m_eMesh.get_coordinates_field()); } - { - TIMER2(ProlongFields,DoRefine_); - m_nodeRegistry->prolongateFields(); - } - #if defined(STK_BUILT_IN_SIERRA) if (m_rbar_names.size()) m_nodeRegistry->add_rbars(m_rbar_names); @@ -1012,6 +1003,11 @@ } /***********************/ TRACE_PRINT("Refiner: fix_side_sets_2...done "); + { + TIMER2(ProlongFields,DoRefine_); + m_nodeRegistry->prolongateFields(); // Needed after mod-end so that parts are parallel consistent so that fields are parallel consistent + } + REF_LTRACE("doRefine: fix_side_sets...done"); if (m_doRemove) @@ -1132,8 +1128,6 @@ getRefinementInfo().countCurrentNodes(m_eMesh); getRefinementInfo().full_stats_after_refine(); - getNodeRegistry().init_entity_repo(); - m_nodeRegistry->dumpDB("after doBreak"); doProgressPrint("Stage: [16/16] Rebalance...done, Refinement done."); @@ -1603,8 +1597,8 @@ double tol = 1.e-4; std::string sni = m_eMesh.getProperty("smoother_niter"); std::string snt = m_eMesh.getProperty("smoother_tol"); - if (sni.length()) niter = boost::lexical_cast(sni); - if (snt.length()) tol = boost::lexical_cast(snt); + if (sni.length()) niter = std::stoi(sni); + if (snt.length()) tol = std::stod(snt); if (m_eMesh.getProperty("smoother_type") == "algebraic") { @@ -2709,14 +2703,8 @@ } //std::cout << "tmp Refiner::set_active_part: child_entities= " << child_entities.size() << " parent_entities= " << parent_entities.size() << std::endl; - for (unsigned iv=0; iv < child_entities.size(); iv++) - { - eMesh.get_bulk_data()->change_entity_parts( child_entities[iv], child_parts, parent_parts ); - } - for (unsigned iv=0; iv < parent_entities.size(); iv++) - { - eMesh.get_bulk_data()->change_entity_parts( parent_entities[iv], parent_parts, child_parts ); - } + eMesh.get_bulk_data()->change_entity_parts(child_entities, child_parts, parent_parts); + eMesh.get_bulk_data()->change_entity_parts(parent_entities, parent_parts, child_parts); } } @@ -2866,9 +2854,9 @@ { const SubDimCell_SDCEntityType& subDimEntity = (*cell_iter).first; SubDimCellData& nodeId_elementOwnderId = (*cell_iter).second; - stk::mesh::EntityId owning_elementId = nodeId_elementOwnderId.get().id(); - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); - stk::mesh::EntityRank owning_elementRank = nodeId_elementOwnderId.get().rank(); + stk::mesh::EntityId owning_elementId = std::get(nodeId_elementOwnderId).id(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnderId); + stk::mesh::EntityRank owning_elementRank = std::get(nodeId_elementOwnderId).rank(); if (0 && debug) std::cout << "P[" << m_eMesh.get_rank() << "] tmp srk1 subDimEntity.size= " << subDimEntity.size() << " owning_elementId= " << owning_elementId << " nodeIds_onSE.size= " << nodeIds_onSE.size() << std::endl; // if (subDimEntity.size() == 1) @@ -3035,10 +3023,7 @@ } } } - for (unsigned ii=0; ii < node_vec.size(); ii++) - { - m_eMesh.get_bulk_data()->change_entity_parts( node_vec[ii], add_parts, remove_parts ); - } + m_eMesh.get_bulk_data()->change_entity_parts( node_vec, add_parts, remove_parts ); } void Refiner:: @@ -3244,7 +3229,7 @@ const stk::mesh::EntityRank FAMILY_TREE_RANK = static_cast(m_eMesh.element_rank() + 1u); std::vector ftvec; - stk::mesh::get_selected_entities(m_eMesh.get_fem_meta_data()->locally_owned_part(), m_eMesh.get_bulk_data()->buckets(FAMILY_TREE_RANK), ftvec); + stk::mesh::get_selected_entities(m_eMesh.get_fem_meta_data()->locally_owned_part(), m_eMesh.get_bulk_data()->buckets(FAMILY_TREE_RANK), ftvec, false/*don't sort*/); for (auto ft : ftvec) { delete_ft_nodes(m_eMesh, ft); @@ -3254,7 +3239,7 @@ { SetOfEntities eset(*m_eMesh.get_bulk_data()); std::vector evec; - stk::mesh::get_selected_entities(m_eMesh.get_fem_meta_data()->locally_owned_part() , m_eMesh.get_bulk_data()->buckets(rank_iter), evec); + stk::mesh::get_selected_entities(m_eMesh.get_fem_meta_data()->locally_owned_part() , m_eMesh.get_bulk_data()->buckets(rank_iter), evec, false/*don't sort*/); for (auto elem : evec) { //eset.insert(elem); diff --git a/packages/percept/src/adapt/Refiner.hpp b/packages/percept/src/adapt/Refiner.hpp index 482b2f78f41d..d148739cc646 100644 --- a/packages/percept/src/adapt/Refiner.hpp +++ b/packages/percept/src/adapt/Refiner.hpp @@ -26,9 +26,6 @@ #include #include -#include -#include - #include #include #include diff --git a/packages/percept/src/adapt/RefinerPattern_Hex8_Het_N.hpp b/packages/percept/src/adapt/RefinerPattern_Hex8_Het_N.hpp index f36ac7552426..0d80034b4d46 100644 --- a/packages/percept/src/adapt/RefinerPattern_Hex8_Het_N.hpp +++ b/packages/percept/src/adapt/RefinerPattern_Hex8_Het_N.hpp @@ -279,6 +279,7 @@ namespace percept { << " num_new_elems= " << num_new_elems << std::endl; + std::vector elemNodes(4); for (unsigned ielem=0; ielem < elems_tet.size(); ielem++) { stk::mesh::Entity newElement = *element_pool; @@ -320,9 +321,9 @@ namespace percept { // 4 nodes of the new tets for (unsigned ii=0; ii < 4; ++ii) { - stk::mesh::Entity n0 = eMesh.createOrGetNode(elems_tet[ielem][ii]); - eMesh.get_bulk_data()->declare_relation(newElement, n0, ii); + elemNodes[ii] = eMesh.createOrGetNode(elems_tet[ielem][ii]); } + eMesh.get_bulk_data()->declare_relation(newElement, elemNodes); unsigned nchild = eMesh.numChildren(element); //set_parent_child_relations(eMesh, element, newElement, ielem); @@ -572,6 +573,7 @@ namespace percept { << " num_new_elems= " << num_new_elems << " elems_pyr.size= " << elems_pyr.size() << std::endl; + std::vector elemNodes(5); for (unsigned ielem=0; ielem < elems_pyr.size(); ielem++) { stk::mesh::Entity newElement = *element_pool; @@ -603,9 +605,9 @@ namespace percept { // 5 nodes of the new pyramids for (unsigned ii=0; ii < 5; ++ii) { - stk::mesh::Entity n0 = eMesh.createOrGetNode(elems_pyr[ielem][ii]); - eMesh.get_bulk_data()->declare_relation(newElement, n0, ii); + elemNodes[ii] = eMesh.createOrGetNode(elems_pyr[ielem][ii]); } + eMesh.get_bulk_data()->declare_relation(newElement, elemNodes); unsigned nchild = eMesh.numChildren(element); //set_parent_child_relations(eMesh, element, newElement, ielem); diff --git a/packages/percept/src/adapt/RefinerPattern_Line2_Line2_N.hpp b/packages/percept/src/adapt/RefinerPattern_Line2_Line2_N.hpp index c123632a4db5..5f8f098f29a9 100644 --- a/packages/percept/src/adapt/RefinerPattern_Line2_Line2_N.hpp +++ b/packages/percept/src/adapt/RefinerPattern_Line2_Line2_N.hpp @@ -49,7 +49,7 @@ stk::mesh::FieldBase *proc_rank_field=0) { const CellTopologyData * const cell_topo_data = m_eMesh.get_cell_topology(element); - typedef boost::tuple line_tuple_type; + typedef std::array line_tuple_type; static vector elems(2); CellTopology cell_topo(cell_topo_data); @@ -128,7 +128,7 @@ EN[jNode] = inode; } - elems[iChild] = line_tuple_type(EN[0], EN[1]); + elems[iChild] = {EN[0], EN[1]}; } #undef CENTROID_N @@ -142,7 +142,7 @@ newElement = *element_pool; - stk::mesh::Entity nodes[2] = {eMesh.createOrGetNode(elems[ielem].get<0>()), eMesh.createOrGetNode(elems[ielem].get<1>())}; + stk::mesh::Entity nodes[2] = {eMesh.createOrGetNode(elems[ielem][0]), eMesh.createOrGetNode(elems[ielem][1])}; create_side_element(eMesh, use_declare_element_side, nodes, 2, newElement); #if 0 diff --git a/packages/percept/src/adapt/RefinerPattern_Quad4_Het_N.hpp b/packages/percept/src/adapt/RefinerPattern_Quad4_Het_N.hpp index 92de0aefa444..79b2bf405197 100644 --- a/packages/percept/src/adapt/RefinerPattern_Quad4_Het_N.hpp +++ b/packages/percept/src/adapt/RefinerPattern_Quad4_Het_N.hpp @@ -284,7 +284,7 @@ namespace percept { << " new_sub_entity_nodes[face][0].size= " << new_sub_entity_nodes[m_primaryEntityRank][0].size() << "\n elem= " << elems[ielem] << std::endl; - elems[ielem] = quad_to_tri_tuple_type( Q_CV_EV(elems_local[ielem].get<0>() ), Q_CV_EV(elems_local[ielem].get<1>() ), Q_CV_EV(elems_local[ielem].get<2>() ) ); + elems[ielem] = { Q_CV_EV(elems_local[ielem][0] ), Q_CV_EV(elems_local[ielem][1] ), Q_CV_EV(elems_local[ielem][2] ) }; } if (0) @@ -302,9 +302,9 @@ namespace percept { // 3 nodes of the new tris - stk::mesh::Entity n0 = eMesh.createOrGetNode(elems[ielem].get<0>()); - stk::mesh::Entity n1 = eMesh.createOrGetNode(elems[ielem].get<1>()); - stk::mesh::Entity n2 = eMesh.createOrGetNode(elems[ielem].get<2>()); + stk::mesh::Entity n0 = eMesh.createOrGetNode(elems[ielem][0]); + stk::mesh::Entity n1 = eMesh.createOrGetNode(elems[ielem][1]); + stk::mesh::Entity n2 = eMesh.createOrGetNode(elems[ielem][2]); stk::mesh::Entity nodes[3] = {n0, n1, n2}; @@ -515,7 +515,7 @@ namespace percept { elems.resize(num_new_elems); for (unsigned ielem=0; ielem < num_new_elems; ielem++) { - elems[ielem] = quad_to_quad_tuple_type( Q_CV_EV(elems_local[ielem].get<0>() ), Q_CV_EV(elems_local[ielem].get<1>() ), Q_CV_EV(elems_local[ielem].get<2>() ), Q_CV_EV(elems_local[ielem].get<3>() ) ); + elems[ielem] = { Q_CV_EV(elems_local[ielem][0] ), Q_CV_EV(elems_local[ielem][1] ), Q_CV_EV(elems_local[ielem][2] ), Q_CV_EV(elems_local[ielem][3] ) }; } bool use_declare_element_side = UniformRefinerPatternBase::USE_DECLARE_ELEMENT_SIDE && m_primaryEntityRank == eMesh.side_rank(); @@ -528,10 +528,10 @@ namespace percept { // 4 nodes of the new quads stk::mesh::Entity nodes[4] = { - eMesh.createOrGetNode(elems[ielem].get<0>()), - eMesh.createOrGetNode(elems[ielem].get<1>()), - eMesh.createOrGetNode(elems[ielem].get<2>()), - eMesh.createOrGetNode(elems[ielem].get<3>()) }; + eMesh.createOrGetNode(elems[ielem][0]), + eMesh.createOrGetNode(elems[ielem][1]), + eMesh.createOrGetNode(elems[ielem][2]), + eMesh.createOrGetNode(elems[ielem][3]) }; create_side_element(eMesh, use_declare_element_side, nodes, 4, newElement); diff --git a/packages/percept/src/adapt/RefinerPattern_Tet4_Tet4_N.hpp b/packages/percept/src/adapt/RefinerPattern_Tet4_Tet4_N.hpp index 8cf01256a29b..2f6c461e4fd4 100644 --- a/packages/percept/src/adapt/RefinerPattern_Tet4_Tet4_N.hpp +++ b/packages/percept/src/adapt/RefinerPattern_Tet4_Tet4_N.hpp @@ -100,8 +100,8 @@ //static unsigned tbl_tet_face_nodes[4][3] = { {0, 1, 3}, {1, 2, 3}, {0, 3, 2}, {0, 2, 1} }; //static unsigned tbl_tet_edge_nodes[6][2] = { {0, 1}, {1, 2}, {2, 0}, {0, 3}, {1, 3}, {2, 3} }; - typedef boost::tuple TetTupleTypeLocal; - typedef boost::tuple TetTupleType; + typedef std::array TetTupleTypeLocal; + typedef std::array TetTupleType; /// general refinement pattern @@ -260,13 +260,10 @@ tets.resize(new_tets.size()); for (unsigned i = 0; i < new_tets.size(); i++) { - tets[i] = TetTupleTypeLocal((unsigned)new_tets[i].get<0>(), - (unsigned)new_tets[i].get<1>(), - (unsigned)new_tets[i].get<2>(), - (unsigned)new_tets[i].get<3>() ); - if (0) - std::cout << "tmp RefPatt::createNewElements new tet= " << tets[i] << std::endl; - + tets[i] = {(unsigned)new_tets[i][0], + (unsigned)new_tets[i][1], + (unsigned)new_tets[i][2], + (unsigned)new_tets[i][3]}; } } } @@ -277,9 +274,6 @@ vector::iterator& ft_element_pool, stk::mesh::FieldBase *proc_rank_field=0) { - bool debug = false; - //if (m_eMesh.getProperty("debugRemesh") == "true") debug = true; - const CellTopologyData * const cell_topo_data = eMesh.get_cell_topology(element); static std::vector elems(8); static std::vector elems_local(8); @@ -327,21 +321,12 @@ elems.resize(num_new_elems); for (unsigned ielem=0; ielem < num_new_elems; ielem++) { - elems[ielem] = TetTupleType( TET_CV_EV(elems_local[ielem].get<0>() ), - TET_CV_EV(elems_local[ielem].get<1>() ), - TET_CV_EV(elems_local[ielem].get<2>() ), - TET_CV_EV(elems_local[ielem].get<3>() ) ); - if (debug) - { - std::cout << "tmp RefPatt::createNewElements old tet= " << eMesh.print_entity_compact(element) << "\n new tet= " << elems[ielem] << " elems_local= " << elems_local[ielem] << std::endl; - } - + elems[ielem] = { TET_CV_EV(elems_local[ielem][0] ), + TET_CV_EV(elems_local[ielem][1] ), + TET_CV_EV(elems_local[ielem][2] ), + TET_CV_EV(elems_local[ielem][3] ) }; } - //std::cout << "tmp RefinerPattern_Tet4_Tet4_N::num_edges_marked= " << num_edges_marked << std::endl; - - //nodeRegistry.prolongateCoords(*const_cast(&element), stk::topology::ELEMENT_RANK, 0u); - for (unsigned ielem=0; ielem < elems.size(); ielem++) { stk::mesh::Entity newElement = *element_pool; @@ -365,43 +350,21 @@ { transition_element[0] = 1; } - if (0) - std::cout << "tmp srk found transition_element = " << m_eMesh.identifier(newElement) << " num_edges_marked= " << num_edges_marked - << " val= " << transition_element[0] - << " element= " << m_eMesh.identifier(element) - << std::endl; } - - //eMesh.get_bulk_data()->change_entity_parts( newElement, add_parts, remove_parts ); change_entity_parts(eMesh, element, newElement); - { - if (!elems[ielem].get<0>()) - { - std::cout << "P[" << eMesh.get_rank() << "] nid = 0 << " << std::endl; - //exit(1); - } - } - // 4 nodes of the new tets - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem].get<0>()), 0); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem].get<1>()), 1); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem].get<2>()), 2); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem].get<3>()), 3); - + eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem][0]), 0); + eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem][1]), 1); + eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem][2]), 2); + eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem][3]), 3); + set_parent_child_relations(eMesh, element, newElement, *ft_element_pool, ielem); std::vector elements(1,element); eMesh.prolongateElementFields( elements, newElement); - if (0) - { - std::cout << "tmp RefPatt::createNewElements eMesh.identifier(element)= " << eMesh.identifier(element) - << " newElement= " << eMesh.identifier(newElement) << std::endl; - - } - ft_element_pool++; element_pool++; diff --git a/packages/percept/src/adapt/RefinerPattern_Tri3_Tri3_2.hpp b/packages/percept/src/adapt/RefinerPattern_Tri3_Tri3_2.hpp index f05e02e725b9..30a7cb332273 100644 --- a/packages/percept/src/adapt/RefinerPattern_Tri3_Tri3_2.hpp +++ b/packages/percept/src/adapt/RefinerPattern_Tri3_Tri3_2.hpp @@ -84,7 +84,7 @@ stk::mesh::FieldBase *proc_rank_field=0) { const CellTopologyData * const cell_topo_data = m_eMesh.get_cell_topology(element); - typedef boost::tuple tri_tuple_type; + typedef std::array tri_tuple_type; static vector elems(2); shards::CellTopology cell_topo(cell_topo_data); @@ -120,8 +120,8 @@ if (num_nodes_on_edge) { eMesh.createOrGetNode(EDGE_N(iedge), mp); - elems[0] = tri_tuple_type(VERT_N(iedge), EDGE_N(iedge), VERT_N((iedge+2)%3) ); - elems[1] = tri_tuple_type(EDGE_N(iedge), VERT_N((iedge+1)%3), VERT_N((iedge+2)%3) ); + elems[0] = {VERT_N(iedge), EDGE_N(iedge), VERT_N((iedge+2)%3) }; + elems[1] = {EDGE_N(iedge), VERT_N((iedge+1)%3), VERT_N((iedge+2)%3) }; } } @@ -137,9 +137,9 @@ newElement = *element_pool; //std::cout << "tmp newElement id = " << m_eMesh.identifier(newElement) << std::endl; - stk::mesh::Entity nodes[3] = {eMesh.createOrGetNode(elems[ielem].get<0>()), - eMesh.createOrGetNode(elems[ielem].get<1>()), - eMesh.createOrGetNode(elems[ielem].get<2>())}; + stk::mesh::Entity nodes[3] = {eMesh.createOrGetNode(elems[ielem][0]), + eMesh.createOrGetNode(elems[ielem][1]), + eMesh.createOrGetNode(elems[ielem][2])}; create_side_element(eMesh, use_declare_element_side, nodes, 3, newElement); if (proc_rank_field) @@ -151,18 +151,10 @@ eMesh.get_bulk_data()->change_entity_parts( newElement, add_parts, remove_parts ); - { - if (!elems[ielem].get<0>()) - { - std::cout << "P[" << eMesh.get_rank() << "] nid = 0 << " << std::endl; - //exit(1); - } - } - // 3 nodes of the new tris - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem].get<0>()), 0); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem].get<1>()), 1); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem].get<2>()), 2); + eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem][0]), 0); + eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem][1]), 1); + eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem][2]), 2); set_parent_child_relations(eMesh, element, newElement, *ft_element_pool, ielem); diff --git a/packages/percept/src/adapt/RefinerPattern_Tri3_Tri3_N.hpp b/packages/percept/src/adapt/RefinerPattern_Tri3_Tri3_N.hpp index 60a36c12f200..ba5e8ddf9053 100644 --- a/packages/percept/src/adapt/RefinerPattern_Tri3_Tri3_N.hpp +++ b/packages/percept/src/adapt/RefinerPattern_Tri3_Tri3_N.hpp @@ -99,8 +99,8 @@ } const CellTopologyData * const cell_topo_data = m_eMesh.get_cell_topology(element); - typedef boost::tuple tri_tuple_type; - typedef boost::tuple tri_tuple_type_int; + typedef std::array tri_tuple_type; + typedef std::array tri_tuple_type_int; static vector elems(4); static vector elems_local(4); unsigned num_new_elems=0; @@ -149,7 +149,7 @@ elems.resize(num_new_elems); for (unsigned ielem=0; ielem < num_new_elems; ielem++) { - elems[ielem] = tri_tuple_type( CV_EV(elems_local[ielem].get<0>() ), CV_EV(elems_local[ielem].get<1>() ), CV_EV(elems_local[ielem].get<2>() ) ); + elems[ielem] = {CV_EV(elems_local[ielem][0] ), CV_EV(elems_local[ielem][1] ), CV_EV(elems_local[ielem][2] )}; } //std::cout << "tmp RefinerPattern_Tri3_Tri3_N::num_edges_marked= " << num_edges_marked << std::endl; @@ -164,9 +164,9 @@ if (!use_declare_element_side) newElement = *element_pool; - stk::mesh::Entity nodes[3] = {eMesh.createOrGetNode(elems[ielem].get<0>()), - eMesh.createOrGetNode(elems[ielem].get<1>()), - eMesh.createOrGetNode(elems[ielem].get<2>()) }; + stk::mesh::Entity nodes[3] = {eMesh.createOrGetNode(elems[ielem][0]), + eMesh.createOrGetNode(elems[ielem][1]), + eMesh.createOrGetNode(elems[ielem][2])}; create_side_element(eMesh, use_declare_element_side, nodes, 3, newElement); diff --git a/packages/percept/src/adapt/RefinerUnrefine.cpp b/packages/percept/src/adapt/RefinerUnrefine.cpp index a4f0c4a02bf4..523f4500ef2e 100644 --- a/packages/percept/src/adapt/RefinerUnrefine.cpp +++ b/packages/percept/src/adapt/RefinerUnrefine.cpp @@ -117,15 +117,15 @@ SubDimCell_SDCEntityType subDimEntity(&m_eMesh); m_nodeRegistry->getSubDimEntity(subDimEntity, element, needed_entity_rank, iSubDimOrd, cell_topo_data); - SubDimCellData* nodeId_elementOwnderId_ptr = m_nodeRegistry->getFromMapPtr(subDimEntity); - if (nodeId_elementOwnderId_ptr) + SubDimCellData* nodeId_elementOwnerId_ptr = m_nodeRegistry->getFromMapPtr(subDimEntity); + if (nodeId_elementOwnerId_ptr) { - nodeId_elementOwnderId_ptr->get() = m_eMesh.entity_key(element); - nodeId_elementOwnderId_ptr->get() = static_cast(iSubDimOrd + 1); - nodeId_elementOwnderId_ptr->get() = static_cast(needed_entity_rank); + std::get(*nodeId_elementOwnerId_ptr) = m_eMesh.entity_key(element); + std::get(*nodeId_elementOwnerId_ptr) = static_cast(iSubDimOrd + 1); + std::get(*nodeId_elementOwnerId_ptr) = static_cast(needed_entity_rank); - map_new[subDimEntity] = *nodeId_elementOwnderId_ptr; + map_new[subDimEntity] = *nodeId_elementOwnerId_ptr; } } @@ -136,7 +136,6 @@ } } } - //std::cout << m_eMesh.rank() << " old size= " << map.size() << " new= " << map_new.size() << std::endl; map = map_new; } @@ -912,10 +911,10 @@ for (SubDimCellToDataMap::iterator cell_iter = cell_2_data_map.begin(); cell_iter != cell_2_data_map.end(); ++cell_iter) { const SubDimCell_SDCEntityType& subDimEntity = (*cell_iter).first; - SubDimCellData& nodeId_elementOwnderId = (*cell_iter).second; - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); - stk::mesh::EntityId owning_elementId = nodeId_elementOwnderId.get().id(); - stk::mesh::EntityRank owning_elementRank = nodeId_elementOwnderId.get().rank(); + SubDimCellData& nodeId_elementOwnerId = (*cell_iter).second; + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); + stk::mesh::EntityId owning_elementId = std::get(nodeId_elementOwnerId).id(); + stk::mesh::EntityRank owning_elementRank = std::get(nodeId_elementOwnerId).rank(); if (!nodeIds_onSE.size()) continue; diff --git a/packages/percept/src/adapt/RefinerUtil.cpp b/packages/percept/src/adapt/RefinerUtil.cpp index ef34cb4377bb..a7bb98c87c9b 100644 --- a/packages/percept/src/adapt/RefinerUtil.cpp +++ b/packages/percept/src/adapt/RefinerUtil.cpp @@ -21,7 +21,6 @@ #include #include -#include #include namespace percept { @@ -166,8 +165,8 @@ namespace percept { int id_start = 0; int id_end = 0; try { - id_start = boost::lexical_cast(id_string_start); - id_end = boost::lexical_cast(id_string_end); + id_start = std::stoi(id_string_start); + id_end = std::stoi(id_string_end); } catch (std::exception& X) { @@ -195,7 +194,7 @@ namespace percept { for (int id=id_start; id <= id_end; id++) { - new_names += plus_or_minus + (boost::lexical_cast(id)) + mult + (id == id_end ? "" : ","); + new_names += plus_or_minus + std::to_string(id) + mult + (id == id_end ? "" : ","); } if (!last_one) new_names += ","; @@ -915,25 +914,23 @@ namespace percept { for (iter = map.begin(); iter != map.end(); ++iter) { const SubDimCell_SDCEntityType& subDimEntity = (*iter).first; - SubDimCellData& nodeId_elementOwnderId = (*iter).second; + SubDimCellData& nodeId_elementOwnerId = (*iter).second; // tuple storage: SDC_DATA_GLOBAL_NODE_IDS, SDC_DATA_OWNING_ELEMENT_KEY, SDC_DATA_OWNING_SUBDIM_RANK, SDC_DATA_OWNING_SUBDIM_ORDINAL, SDC_DATA_SPACING - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); - stk::mesh::EntityKey owningElementKey = nodeId_elementOwnderId.get(); + stk::mesh::EntityKey owningElementKey = std::get(nodeId_elementOwnerId); stk::mesh::EntityId owningElementId = owningElementKey.id(); (void)owningElementId; stk::mesh::EntityRank owningElementRank = owningElementKey.rank(); //VERIFY_OP_ON(owningElementRank, ==, eMesh.element_rank(), "bad owningElementRank"); - unsigned owningSubDimRank = nodeId_elementOwnderId.get(); - unsigned owningSubDimOrd = nodeId_elementOwnderId.get(); + unsigned owningSubDimRank = std::get(nodeId_elementOwnerId); + unsigned owningSubDimOrd = std::get(nodeId_elementOwnerId); VERIFY_OP_ON(owningSubDimOrd, >, 0, "hmm 2"); --owningSubDimOrd; unsigned owningSubDimSize = subDimEntity.size(); (void)owningSubDimSize; - //Double3 sdcSpacing = nodeId_elementOwnderId.get(); - stk::mesh::Entity owningElement = eMesh.get_bulk_data()->get_entity(owningElementKey.rank(), owningElementKey.id()); if (!eMesh.is_valid(owningElement)) { @@ -1033,15 +1030,15 @@ namespace percept { VERIFY_OP_ON(eMesh.is_valid(subDimEntity[ii]), ==, true, "bad node in rebuild_node_registry"); } static SubDimCellData empty_SubDimCellData; - SubDimCellData* nodeId_elementOwnderId_ptr = nodeRegistry.getFromMapPtr(subDimEntity); - SubDimCellData& nodeId_elementOwnderId = (nodeId_elementOwnderId_ptr ? *nodeId_elementOwnderId_ptr : empty_SubDimCellData); - bool is_empty = nodeId_elementOwnderId_ptr == 0; + SubDimCellData* nodeId_elementOwnerId_ptr = nodeRegistry.getFromMapPtr(subDimEntity); + SubDimCellData& nodeId_elementOwnerId = (nodeId_elementOwnerId_ptr ? *nodeId_elementOwnerId_ptr : empty_SubDimCellData); + bool is_empty = nodeId_elementOwnerId_ptr == 0; if (is_empty) { - SubDimCellData data( NodeIdsOnSubDimEntityType(1, stk::mesh::Entity(), nodeRegistry.NR_MARK_NONE), - owningElementKey, owningSubDimRank, owningSubDimOrd + 1); - NodeIdsOnSubDimEntityType& nid_new = data.get(); + SubDimCellData data { NodeIdsOnSubDimEntityType(1, stk::mesh::Entity(), nodeRegistry.NR_MARK_NONE), + owningElementKey, (unsigned char)owningSubDimRank, (unsigned char)(owningSubDimOrd + 1), {}}; + NodeIdsOnSubDimEntityType& nid_new = std::get(data); nid_new.resize(1); nid_new[0] = node; nid_new.m_entity_id_vector[0] = eMesh.id(node); @@ -1051,7 +1048,7 @@ namespace percept { } else { - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); nodeIds_onSE.push_back(node); nodeIds_onSE.m_entity_id_vector.push_back(eMesh.id(node)); nodeIds_onSE.m_mark = static_cast(node_data[NR_FIELD_MARK]); diff --git a/packages/percept/src/adapt/SerializeNodeRegistry.hpp b/packages/percept/src/adapt/SerializeNodeRegistry.hpp index 9925e162b369..43123ad13519 100644 --- a/packages/percept/src/adapt/SerializeNodeRegistry.hpp +++ b/packages/percept/src/adapt/SerializeNodeRegistry.hpp @@ -16,6 +16,8 @@ #include #include #include +#include +#include #if defined( STK_HAS_MPI ) #include @@ -29,6 +31,7 @@ #include #include +#include #include @@ -41,10 +44,6 @@ #include #include -#include -#include -#include - #define DEBUG_YAML 0 #include @@ -58,6 +57,17 @@ namespace percept { + inline stk::topology find_topology_by_name(const std::string & topologyName) + { + stk::topology t(stk::topology::BEGIN_TOPOLOGY); + for ( ; t < stk::topology::END_TOPOLOGY; ++t) { + if (topologyName == t.name()) { + return t; + } + } + return stk::topology(stk::topology::INVALID_TOPOLOGY); + } + /** in the following, we are looking at one partition, m_iM, of M-partitioned mesh * */ @@ -71,14 +81,14 @@ typedef std::string TopologyName; typedef std::string PartName; typedef std::vector PartSubsets; - typedef boost::tuple PartMapData; + typedef std::tuple PartMapData; typedef std::map PartMap; typedef stk::mesh::EntityId NodeMapKey; typedef int ProcRank; typedef std::vector SharedProcs; typedef SharedProcs NodeMapValue; - typedef boost::unordered_map NodeMap; + typedef std::unordered_map NodeMap; private: PerceptMesh& m_eMesh; @@ -213,12 +223,12 @@ out << YAML::Value; YAML_CHECK(out); out << YAML::Flow; YAML_CHECK(out); out << YAML::BeginSeq; YAML_CHECK(out); - out << iter->second.get<0>(); - out << iter->second.get<1>(); + out << std::get<0>(iter->second); + out << std::get<1>(iter->second); { out << YAML::Flow; YAML_CHECK(out); out << YAML::BeginSeq; YAML_CHECK(out); - PartSubsets subsets = iter->second.get<2>(); + PartSubsets subsets = std::get<2>(iter->second); for (unsigned isub=0; isub < subsets.size(); isub++) { out << subsets[isub]; @@ -239,21 +249,21 @@ for (iter = m_partMap->begin(); iter != m_partMap->end(); ++iter) { PartName part_name = iter->first; - stk::mesh::EntityRank part_rank = iter->second.get<0>(); - TopologyName topo_name = iter->second.get<1>(); + stk::mesh::EntityRank part_rank = std::get<0>(iter->second); + TopologyName topo_name = std::get<1>(iter->second); const stk::mesh::Part* c_part = m_eMesh.get_fem_meta_data()->get_part(part_name); stk::mesh::Part *part = const_cast(c_part); if (!part) { part = &m_eMesh.get_fem_meta_data()->declare_part(part_name, part_rank); stk::io::put_io_part_attribute(*part); - shards::CellTopology topo = m_eMesh.get_fem_meta_data()->get_cell_topology(topo_name); - if (!topo.getCellTopologyData()) + stk::topology topo = find_topology_by_name(topo_name.c_str()); + if (!topo.is_valid()) { std::cout << "bad cell topo SerializeNodeRegistry::declareGlobalParts topo_name= " << topo_name << std::endl; throw std::runtime_error("bad cell topo SerializeNodeRegistry::declareGlobalParts"); } - stk::mesh::set_cell_topology(*part, topo); + stk::mesh::set_topology(*part, topo); } } // once parts are declared, declare part subsets @@ -266,7 +276,7 @@ { throw std::runtime_error(std::string("no part found SerializeNodeRegistry::declareGlobalParts: part= ")+part_name); } - PartSubsets subsets = iter->second.get<2>(); + PartSubsets subsets = std::get<2>(iter->second); for (unsigned isub=0; isub < subsets.size(); isub++) { const stk::mesh::Part* c_subset = m_eMesh.get_fem_meta_data()->get_part(subsets[isub]); @@ -340,9 +350,9 @@ else { PartMapData& pmd_existing = partMap[part_name]; - pmd_existing.get<0>() = rank; - pmd_existing.get<1>() = topo_name; - PartSubsets& subsets_existing = pmd_existing.get<2>(); + std::get<0>(pmd_existing) = rank; + std::get<1>(pmd_existing) = topo_name; + PartSubsets& subsets_existing = std::get<2>(pmd_existing); //std::cout << "pmd read= " << pmd << std::endl; //std::cout << "pmd existing= " << pmd_existing << std::endl; for (unsigned isub=0; isub < subsets.size(); isub++) @@ -605,18 +615,16 @@ { subsets[isub] = part_subsets[isub]->name(); } - PartMapData pmd(part.primary_entity_rank(), topo_name, subsets); + PartMapData pmd {part.primary_entity_rank(), topo_name, subsets}; PartMap::iterator inMap = m_partMap->find(part.name()); // if not yet in the map, or if already in map, choose to overwrite if this is the one with subset info if (inMap == m_partMap->end()) { - if (m_debug) std::cout << "mergeGlobalParts:: not yet in map, part = " << part.name() << " data= " << pmd << std::endl; (*m_partMap)[part.name()] = pmd; } else { - PartSubsets& inMapSubsets = inMap->second.get<2>(); - if (m_debug) std::cout << "mergeGlobalParts:: in map, before, part = " << part.name() << " data= " << pmd << std::endl; + PartSubsets& inMapSubsets = std::get<2>(inMap->second); for (unsigned isub=0; isub < subsets.size(); isub++) { PartSubsets::iterator iv = find(inMapSubsets.begin(), inMapSubsets.end(), subsets[isub]); @@ -625,7 +633,6 @@ inMapSubsets.push_back(subsets[isub]); } } - if (m_debug) std::cout << "mergeGlobalParts:: in map, after, part = " << part.name() << " data= " << pmd << std::endl; } } // init/fini @@ -1037,7 +1044,7 @@ for (iter = localMap.begin(); iter != localMap.end(); ++iter) { const SubDimCell_SDCEntityType& subDimEntity = iter->first; - SubDimCellData& nodeId_elementOwnderId = iter->second; + SubDimCellData& nodeId_elementOwnerId = iter->second; // special case for "interior" subDimEntity's which are centroid nodes for quad or hex elements - // by definition they aren't shared @@ -1045,8 +1052,8 @@ continue; // lookup from global... - SubDimCellData* global_nodeId_elementOwnderId_ptr = globalNR.getFromMapPtr(subDimEntity); - if (!global_nodeId_elementOwnderId_ptr) + SubDimCellData* global_nodeId_elementOwnerId_ptr = globalNR.getFromMapPtr(subDimEntity); + if (!global_nodeId_elementOwnerId_ptr) { std::cout << "M[" << m_iM << "] SerializeNodeRegistry::lookupAndSetNewNodeIds couldn't find subDimEntity= " << subDimEntity; for (unsigned kk=0; kk < subDimEntity.size(); kk++) @@ -1058,10 +1065,10 @@ else { } - VERIFY_OP_ON(global_nodeId_elementOwnderId_ptr, !=, 0, "SerializeNodeRegistry::lookupAndSetNewNodeIds couldn't find subDimEntity"); + VERIFY_OP_ON(global_nodeId_elementOwnerId_ptr, !=, 0, "SerializeNodeRegistry::lookupAndSetNewNodeIds couldn't find subDimEntity"); - NodeIdsOnSubDimEntityType& global_nodeIds_onSE = global_nodeId_elementOwnderId_ptr->get(); - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& global_nodeIds_onSE = std::get(*global_nodeId_elementOwnerId_ptr); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); unsigned global_nnodes = global_nodeIds_onSE.size(); unsigned nnodes = nodeIds_onSE.size(); VERIFY_OP_ON(global_nnodes, ==, nnodes, "SerializeNodeRegistry::lookupAndSetNewNodeIds: mismatch in nnodes"); @@ -1139,10 +1146,10 @@ SubDimCell_SDCEntityType key(&eMesh); // subDimEntity = (*iter).first; stk::mesh::EntityId value_nodeId; - SubDimCellData value; // nodeId_elementOwnderId = (*iter).second; - NodeIdsOnSubDimEntityType& nodeIds_onSE = value.get(); + SubDimCellData value; // nodeId_elementOwnerId = (*iter).second; + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(value); nodeIds_onSE.resize(0); - stk::mesh::EntityKey& value_entity_key = value.get(); + stk::mesh::EntityKey& value_entity_key = std::get(value); for(unsigned ikeyd=0; ikeyd < KEY.size(); ++ikeyd) { key_nodeId = localNR.getMesh().identifier(KEY[ikeyd]); @@ -1160,11 +1167,11 @@ key.insert( node ); } - stk::mesh::EntityRank rank = static_cast((UInt)VALUE.get().rank()); - size_t id = VALUE.get().id(); + stk::mesh::EntityRank rank = static_cast((UInt)std::get(VALUE).rank()); + size_t id = std::get(VALUE).id(); value_entity_key = stk::mesh::EntityKey(rank,id); - NodeIdsOnSubDimEntityType& NODEIDS_ONSE = VALUE.get(); + NodeIdsOnSubDimEntityType& NODEIDS_ONSE = std::get(VALUE); value_nodeId = NODEIDS_ONSE.m_entity_id_vector[0]; nodeIds_onSE.m_entity_id_vector.push_back(value_nodeId); stk::mesh::Entity entity = eMesh.get_bulk_data()->get_entity(stk::topology::NODE_RANK, value_nodeId); @@ -1209,7 +1216,7 @@ for (iter = localMap.begin(); iter != localMap.end(); ++iter) { const SubDimCell_SDCEntityType& subDimEntity = (*iter).first; - SubDimCellData& nodeId_elementOwnderId = (*iter).second; + SubDimCellData& nodeId_elementOwnerId = (*iter).second; if (m_debug) { std::cout << "SerializeNodeRegistry::processNodeRegistry inserting localMap entry = " << subDimEntity ; @@ -1217,11 +1224,11 @@ { std::cout << " [" << newLocalNR.getMesh().get_bulk_data()->identifier(subDimEntity[kk]) << "] "; } - std::cout << " data= " << nodeId_elementOwnderId << " nid=" << nodeId_elementOwnderId.get().m_entity_id_vector[0] << std::endl; + std::cout << " data= " << nodeId_elementOwnerId << " nid=" << std::get(nodeId_elementOwnerId).m_entity_id_vector[0] << std::endl; } /// clone subDimEntity... - //globalMap[subDimEntity] = nodeId_elementOwnderId; - addKeyValuePair(globalNR, newLocalNR, subDimEntity, nodeId_elementOwnderId); + //globalMap[subDimEntity] = nodeId_elementOwnerId; + addKeyValuePair(globalNR, newLocalNR, subDimEntity, nodeId_elementOwnerId); } if (m_debug) std::cout << "SerializeNodeRegistry::processNodeRegistry globalMap size= " << globalMap.size() << std::endl; stk::mesh::fixup_ghosted_to_shared_nodes(*globalNR.getMesh().get_bulk_data()); @@ -1393,8 +1400,8 @@ for (iter = map.begin(); iter != map.end(); ++iter) { //const SubDimCell_SDCEntityType& subDimEntity = (*iter).first; - SubDimCellData& nodeId_elementOwnderId = (*iter).second; - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + SubDimCellData& nodeId_elementOwnerId = (*iter).second; + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); unsigned nnodes = nodeIds_onSE.size(); for (unsigned inode=0; inode < nnodes; inode++) { @@ -1432,8 +1439,8 @@ for (iter = map.begin(); iter != map.end(); ++iter) { //const SubDimCell_SDCEntityType& subDimEntity = (*iter).first; - SubDimCellData& nodeId_elementOwnderId = (*iter).second; - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + SubDimCellData& nodeId_elementOwnerId = (*iter).second; + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); unsigned nnodes = nodeIds_onSE.size(); for (unsigned inode=0; inode < nnodes; inode++) { @@ -1463,8 +1470,8 @@ for (iter = map.begin(); iter != map.end(); ++iter) { //const SubDimCell_SDCEntityType& subDimEntity = (*iter).first; - SubDimCellData& nodeId_elementOwnderId = (*iter).second; - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + SubDimCellData& nodeId_elementOwnerId = (*iter).second; + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); unsigned nnodes = nodeIds_onSE.size(); for (unsigned inode=0; inode < nnodes; inode++) { @@ -1480,8 +1487,8 @@ for (iter = map.begin(); iter != map.end(); ++iter) { //const SubDimCell_SDCEntityType& subDimEntity = (*iter).first; - SubDimCellData& nodeId_elementOwnderId = (*iter).second; - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); + SubDimCellData& nodeId_elementOwnerId = (*iter).second; + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(nodeId_elementOwnerId); unsigned nnodes = nodeIds_onSE.size(); for (unsigned inode=0; inode < nnodes; inode++) { @@ -1524,7 +1531,7 @@ for (iter = map.begin(); iter != map.end(); ++iter) { const SubDimCell_SDCEntityType& subDimEntity = (*iter).first; - SubDimCellData& nodeId_elementOwnderId = (*iter).second; + SubDimCellData& nodeId_elementOwnerId = (*iter).second; // check if all nodes are on the boundary (defined by shared nodes in the NodeMap) if (nodeMapFilter) @@ -1553,7 +1560,7 @@ emitter << YAML::Key; YAML_ERRCHECK; emitter << YAML::Flow; YAML_ERRCHECK; emitter << YAML::BeginSeq; YAML_ERRCHECK; - if (0) emitter << YAML::Anchor(std::string("seq")+boost::lexical_cast(jj++)); YAML_ERRCHECK; + if (0) emitter << YAML::Anchor(std::string("seq")+std::to_string(jj++)); YAML_ERRCHECK; for (unsigned k=0; k < subDimEntity.size(); k++) { //std::cout << " " << subDimEntity[k]->identifier() << " "; @@ -1561,8 +1568,8 @@ } emitter << YAML::EndSeq; YAML_ERRCHECK; - NodeIdsOnSubDimEntityType& nodeIds_onSE = nodeId_elementOwnderId.get(); - stk::mesh::EntityKey& value_entity_key = nodeId_elementOwnderId.get(); + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get( nodeId_elementOwnerId); + stk::mesh::EntityKey& value_entity_key = std::get(nodeId_elementOwnerId); //emitter << YAML::Scalar << nodeIds_onSE.size() emitter << YAML::Value; YAML_ERRCHECK; @@ -1626,11 +1633,10 @@ stk::mesh::EntityId value_tuple_0_quantum; NodeIdsOnSubDimEntityType value_tuple_0; - //typedef boost::tuple SubDimCellData; - SubDimCellData value; // nodeId_elementOwnderId = (*iter).second; - NodeIdsOnSubDimEntityType& nodeIds_onSE = value.get(); + SubDimCellData value; // nodeId_elementOwnerId = (*iter).second; + NodeIdsOnSubDimEntityType& nodeIds_onSE = std::get(value); nodeIds_onSE.resize(0); - stk::mesh::EntityKey& value_entity_key = value.get(); + stk::mesh::EntityKey& value_entity_key = std::get(value); // value = { {new_node0, new_node1,...}:[vector,vector], {elem_own[rank, ele_id]:EntityKey} } // key = { nodePtr_0,... : set } // value.serialized = { {new_nid0, new_nid1,...}:vector, {elem_own[rank, ele_id]:EntityKey} } @@ -1676,15 +1682,14 @@ stk::mesh::EntityKey entityKey(rank,id); if (DEBUG_YAML) std::cout << "s_r value_tuple_1= " << rank << " " << id << std::endl; value_entity_key = stk::mesh::EntityKey(rank,id); - if (DEBUG_YAML) std::cout << "s_r owning element rank= " << value.get().rank() - << " owning element id= " << value.get().id() + if (DEBUG_YAML) std::cout << "s_r owning element rank= " << std::get(value).rank() + << " owning element id= " << std::get(value).id() << std::endl; } else { value_tuple_0_quantum = itv->as(); - //stk::mesh::EntityId owning_elementId = stk::mesh::entity_id(data.get()); nodeIds_onSE.m_entity_id_vector.push_back(value_tuple_0_quantum); stk::mesh::Entity entity = eMesh.get_bulk_data()->get_entity(stk::topology::NODE_RANK, value_tuple_0_quantum); if (!eMesh.is_valid(entity)) diff --git a/packages/percept/src/adapt/SubDimCell.hpp b/packages/percept/src/adapt/SubDimCell.hpp index 243820100d6d..e74a44c692b0 100644 --- a/packages/percept/src/adapt/SubDimCell.hpp +++ b/packages/percept/src/adapt/SubDimCell.hpp @@ -12,118 +12,20 @@ #include #include - -#define STK_ADAPT_SUBDIMCELL_USES_STL_SET 0 -#define STK_ADAPT_SUBDIMCELL_USES_STL_VECTOR 0 -#define STK_ADAPT_SUBDIMCELL_USES_NO_MALLOC_ARRAY 1 - -#if STK_ADAPT_SUBDIMCELL_USES_NO_MALLOC_ARRAY #include -#endif - -#if STK_ADAPT_SUBDIMCELL_USES_BOOST_ARRAY -#include -#endif #include #include #include -#ifdef STK_HAVE_TBB -#include -#endif - - namespace percept { - template struct SubDimCellCompare { bool operator() (T i, T j) { return (i < j) ; } }; - // only set one of these - -#if STK_ADAPT_SUBDIMCELL_USES_STL_SET - -# ifdef STK_HAVE_TBB - typedef std::set, tbb::scalable_allocator > SubDimCellBaseClass; -# else - typedef std::set SubDimCellBaseClass; -# endif - - /// this class represents the set of node id's defining a sub-dimensional entity of an element (like a face or edge) - template > - class SubDimCell : public SubDimCellBaseClass - { - std::size_t m_hash; - public: - //set m_ids; - SubDimCell() : SubDimCellBaseClass(), m_hash(0u) {} - SubDimCell(unsigned num_ids, Ids *ids) : SubDimCellBaseClass(ids, ids+num_ids), m_hash(0u) - { - } - inline unsigned getHash() const - { - return m_hash; - } - inline void setHash(std::size_t hash) - { - m_hash = hash; - } - void clear() - { - m_hash = 0u; - SubDimCellBaseClass::clear(); - } - }; -#endif - -#if STK_ADAPT_SUBDIMCELL_USES_STL_VECTOR - - //typedef array SubDimCell; - - /// We assume we don't have any sub-dimensional entities with more than 4 nodes - template > - class SubDimCell : public std::vector //: public my_array //: public boost::array - { - public: - //typedef boost::array base_type; - typedef std::vector base_type; - - SubDimCell(unsigned n=4) : base_type() { base_type::reserve(n); } - void insert(T val) - { - bool found = false; - for (unsigned i = 0; i < base_type::size(); i++) - { - if (val == (*this)[i]) - { - found = true; - break; - } - } - if (!found) - { - base_type::push_back(val); - std::sort( base_type::begin(), base_type::end(), CompareClass() ); - - } - } - void sort() - { - std::sort( base_type::begin(), base_type::end(), CompareClass() ); - } - }; -#endif - -#if STK_ADAPT_SUBDIMCELL_USES_NO_MALLOC_ARRAY - - //typedef array SubDimCell; - - - template class SDCHashCode { @@ -149,9 +51,6 @@ //repo always init to 0 size: SubDimCell(unsigned n=4) : base_type(n), m_hash(0u) {} SubDimCell() : base_type(), m_hash(0u), m_HashCode(), m_CompareClass() {} SubDimCell(unsigned n) : base_type(), m_hash(0u), m_HashCode(), m_CompareClass() {} -#if 0 - SubDimCell(const SubDimCell& sdc) : base_type(sdc), m_hash(sdc.m_hash) {} -#endif // behaves like std::set void insert(T val) { @@ -166,25 +65,15 @@ } if (!found) { - //if (size() > max_size() ) throw std::runtime_error("SubDimCell out of range"); base_type::insert(val); sort(); } - //m_hash = hashCode(); updateHashCode(); } void sort() { -#ifdef __GNUC__ -#if (__GNUC__ == 4) && (__GNUC_MINOR__ == 4) - std::stable_sort( base_type::begin(), base_type::end(), m_CompareClass ); -#else - std::sort( base_type::begin(), base_type::end(), m_CompareClass ); -#endif -#else - std::sort( base_type::begin(), base_type::end(), m_CompareClass ); -#endif + std::sort( base_type::begin(), base_type::end(), m_CompareClass ); } void updateHashCode() @@ -227,14 +116,11 @@ for (typename base_type::iterator i = sdc.begin(); i != sdc.end(); i++) { - //sum += static_cast(const_cast(*i)); - //sum += static_cast((*i)->identifier()); sum += (size_t)(*i); } return sum; } - template inline bool SubDimCell:: operator==(const VAL& rhs) const @@ -268,30 +154,8 @@ return false; } - -#endif - -#if 1 - -#define DATA #define GET(x,i) x[i] - template - struct SubDimCell_compare - { - bool operator() (const SubDimCell& lhs, const SubDimCell& rhs) const - { - if (lhs.size() < rhs.size()) return true; - if (lhs.size() > rhs.size()) return false; - for (unsigned i = 0; i < lhs.size(); i++) - { - if (GET(lhs,i) < GET(rhs,i)) return true; - if (GET(lhs,i) > GET(rhs,i)) return false; - } - return false; - } - }; - template struct my_hash : public std::unary_function< SubDimCell, std::size_t> { @@ -375,40 +239,6 @@ } }; - template - struct my_hash_old : public std::unary_function< SubDimCell , std::size_t> - { - typedef SubDimCell _Tp ; - - inline std::size_t - operator()(const _Tp& x) const - { - std::size_t sum = 0; - for (unsigned i = 0; i < x.size(); i++) - { - sum += static_cast(GET(x,i)); - } - return sum; - } - }; - - template - struct my_equal_to_old : public std::binary_function< SubDimCell, SubDimCell, bool> - { - typedef SubDimCell _Tp ; - bool - operator()(const _Tp& x, const _Tp& y) const - { - if (x.size() != y.size()) return false; - for (unsigned i = 0; i < x.size(); i++) - { - if (GET(x,i) != GET(y,i)) return false; - } - return true; - } - }; - - template std::ostream& operator<<(std::ostream& out, const SubDimCell& c) { @@ -426,19 +256,8 @@ return out; } -// template -// std::ostringstream& operator<< (std::ostringstream& out, SubDimCell& c) -// { -// out << t; -// return out; -// } - -#undef DATA #undef GET -#endif - - } #endif diff --git a/packages/percept/src/adapt/SubDimCell_KOKKOS.hpp b/packages/percept/src/adapt/SubDimCell_KOKKOS.hpp index 4e7fa65ad4eb..9dc099ce8166 100644 --- a/packages/percept/src/adapt/SubDimCell_KOKKOS.hpp +++ b/packages/percept/src/adapt/SubDimCell_KOKKOS.hpp @@ -29,11 +29,6 @@ #include #include -#ifdef STK_HAVE_TBB -#include -#endif - - namespace percept { @@ -47,11 +42,7 @@ #if STK_ADAPT_SUBDIMCELL_KOKKOS_USES_STL_SET -# ifdef STK_HAVE_TBB - typedef std::set, tbb::scalable_allocator > SubDimCell_KOKKOSBaseClass; -# else typedef std::set SubDimCell_KOKKOSBaseClass; -# endif /// this class represents the set of node id's defining a sub-dimensional entity of an element (like a face or edge) template > @@ -86,10 +77,10 @@ /// We assume we don't have any sub-dimensional entities with more than 4 nodes template > - class SubDimCell_KOKKOS : public std::vector //: public my_array //: public boost::array + class SubDimCell_KOKKOS : public std::vector //: public my_array //: public std::array { public: - //typedef boost::array base_type; + //typedef std::array base_type; typedef std::vector base_type; SubDimCell_KOKKOS(unsigned n=4) : base_type() { base_type::reserve(n); } diff --git a/packages/percept/src/adapt/TransitionElementAdapter.hpp b/packages/percept/src/adapt/TransitionElementAdapter.hpp index 110049981260..4ed706754a81 100644 --- a/packages/percept/src/adapt/TransitionElementAdapter.hpp +++ b/packages/percept/src/adapt/TransitionElementAdapter.hpp @@ -1206,7 +1206,7 @@ SubDimCellData* nodeId_elementOwnderId_ptr = Base::getNodeRegistry().getFromMapPtr(subDimEntity); SubDimCellData& nodeId_elementOwnderId = (nodeId_elementOwnderId_ptr ? *nodeId_elementOwnderId_ptr : empty_SubDimCellData); bool is_empty = nodeId_elementOwnderId_ptr == 0; - bool is_marked = (!is_empty && nodeId_elementOwnderId.get().size() != 0); + bool is_marked = (!is_empty && std::get(nodeId_elementOwnderId).size() != 0); if (is_marked) throw std::runtime_error("bad mark in checkTransitionElements1"); } diff --git a/packages/percept/src/adapt/TriangulateQuad.hpp b/packages/percept/src/adapt/TriangulateQuad.hpp index 44cf90801543..c3988bb2f064 100644 --- a/packages/percept/src/adapt/TriangulateQuad.hpp +++ b/packages/percept/src/adapt/TriangulateQuad.hpp @@ -15,11 +15,11 @@ namespace percept { - typedef boost::tuple quad_to_tri_tuple_type_local; - typedef boost::tuple quad_to_tri_tuple_type; + typedef std::array quad_to_tri_tuple_type_local; + typedef std::array quad_to_tri_tuple_type; - typedef boost::tuple quad_to_quad_tuple_type_local; - typedef boost::tuple quad_to_quad_tuple_type; + typedef std::array quad_to_quad_tuple_type_local; + typedef std::array quad_to_quad_tuple_type; /** * @@ -101,7 +101,7 @@ namespace percept { //unsigned i1 = (iedge+1) % 4; unsigned jedge = iedge + 4; unsigned kedge = (iedge + 3) % 4 + 4; - elems_quad.push_back(quad_to_quad_tuple_type_local(i0, jedge, Q_CENTROID_N, kedge)); + elems_quad.push_back({i0, jedge, Q_CENTROID_N, kedge}); } return; } @@ -149,12 +149,12 @@ namespace percept { unsigned jedge = iedge + 4; if (edge_marks[iedge]) { - elems.push_back(quad_to_tri_tuple_type_local(i0, jedge, Q_CENTROID_N)); - elems.push_back(quad_to_tri_tuple_type_local(jedge, i1, Q_CENTROID_N)); + elems.push_back({i0, jedge, Q_CENTROID_N}); + elems.push_back({jedge, i1, Q_CENTROID_N}); } else { - elems.push_back(quad_to_tri_tuple_type_local(i0, i1, Q_CENTROID_N)); + elems.push_back({i0, i1, Q_CENTROID_N}); } } } @@ -193,9 +193,9 @@ namespace percept { unsigned i2 = (iedge+2) % 4; unsigned i3 = (iedge+3) % 4; unsigned jedge = iedge + 4; - elems.push_back(quad_to_tri_tuple_type_local(i0, jedge, i3)); - elems.push_back(quad_to_tri_tuple_type_local(jedge, i2, i3)); - elems.push_back(quad_to_tri_tuple_type_local(jedge, i1, i2)); + elems.push_back({i0, jedge, i3}); + elems.push_back({jedge, i2, i3}); + elems.push_back({jedge, i1, i2}); } else if (num_edges_marked == 2) { @@ -246,10 +246,10 @@ namespace percept { if (m_avoid_centroid_node) { - elems.push_back(quad_to_tri_tuple_type_local(i0, jedge0, i3)); - elems.push_back(quad_to_tri_tuple_type_local(jedge0, i1, jedge1)); - elems.push_back(quad_to_tri_tuple_type_local(jedge1, i2, i3)); - elems.push_back(quad_to_tri_tuple_type_local(jedge0, jedge1, i3)); + elems.push_back({i0, jedge0, i3}); + elems.push_back({jedge0, i1, jedge1}); + elems.push_back({jedge1, i2, i3}); + elems.push_back({jedge0, jedge1, i3}); } else { @@ -266,9 +266,9 @@ namespace percept { * o-------*-------o * i0 i0+4 i1 */ - elems_quad.push_back(quad_to_quad_tuple_type_local(i0, jedge0, Q_CENTROID_N, i3)); - elems_quad.push_back(quad_to_quad_tuple_type_local(jedge0, i1, jedge1, Q_CENTROID_N)); - elems_quad.push_back(quad_to_quad_tuple_type_local(jedge1, i2, i3, Q_CENTROID_N)); + elems_quad.push_back({i0, jedge0, Q_CENTROID_N, i3}); + elems_quad.push_back({jedge0, i1, jedge1, Q_CENTROID_N}); + elems_quad.push_back({jedge1, i2, i3, Q_CENTROID_N}); } } else @@ -288,8 +288,8 @@ namespace percept { * i0 i0+4 i1 */ - elems_quad.push_back(quad_to_quad_tuple_type_local(i0, jedge0, jedge1, i3)); - elems_quad.push_back(quad_to_quad_tuple_type_local(jedge0, i1, i2, jedge1)); + elems_quad.push_back({i0, jedge0, jedge1, i3}); + elems_quad.push_back({jedge0, i1, i2, jedge1}); } } else if (num_edges_marked == 3) @@ -330,10 +330,10 @@ namespace percept { unsigned jedge1 = iedge1 + 4; unsigned jedge2 = iedge2 + 4; - elems_quad.push_back(quad_to_quad_tuple_type_local(i0, jedge0, jedge2, i3)); - elems.push_back(quad_to_tri_tuple_type_local(jedge0, i1, jedge1)); - elems.push_back(quad_to_tri_tuple_type_local(jedge0, jedge1, jedge2)); - elems.push_back(quad_to_tri_tuple_type_local(jedge1, i2, jedge2)); + elems_quad.push_back({i0, jedge0, jedge2, i3}); + elems.push_back({jedge0, i1, jedge1}); + elems.push_back({jedge0, jedge1, jedge2}); + elems.push_back({jedge1, i2, jedge2}); } else if (num_edges_marked == 4) { @@ -368,13 +368,13 @@ namespace percept { unsigned jedge2 = iedge2 + 4; unsigned jedge3 = iedge3 + 4; - elems.push_back(quad_to_tri_tuple_type_local(jedge0, i1, jedge1)); - elems.push_back(quad_to_tri_tuple_type_local(jedge0, jedge1, jedge2)); - elems.push_back(quad_to_tri_tuple_type_local(jedge1, i2, jedge2)); + elems.push_back({jedge0, i1, jedge1}); + elems.push_back({jedge0, jedge1, jedge2}); + elems.push_back({jedge1, i2, jedge2}); - elems.push_back(quad_to_tri_tuple_type_local(jedge2, i3, jedge3)); - elems.push_back(quad_to_tri_tuple_type_local(jedge0, jedge2, jedge3)); - elems.push_back(quad_to_tri_tuple_type_local(i0, jedge0, jedge3)); + elems.push_back({jedge2, i3, jedge3}); + elems.push_back({jedge0, jedge2, jedge3}); + elems.push_back({i0, jedge0, jedge3}); } } diff --git a/packages/percept/src/adapt/TriangulateTri.hpp b/packages/percept/src/adapt/TriangulateTri.hpp index 8a648dc410b4..801ac1ca4d24 100644 --- a/packages/percept/src/adapt/TriangulateTri.hpp +++ b/packages/percept/src/adapt/TriangulateTri.hpp @@ -18,8 +18,8 @@ namespace percept { class TriangulateTri { public: - typedef boost::tuple tri_tuple_type_local; - typedef boost::tuple tri_tuple_type; + typedef std::array tri_tuple_type_local; + typedef std::array tri_tuple_type; /** * @@ -75,10 +75,10 @@ namespace percept { { elems.resize(4); - elems[0] = tri_tuple_type( T_VERT_N(0), T_EDGE_N(0), T_EDGE_N(2) ); - elems[1] = tri_tuple_type( T_VERT_N(1), T_EDGE_N(1), T_EDGE_N(0) ); - elems[2] = tri_tuple_type( T_VERT_N(2), T_EDGE_N(2), T_EDGE_N(1) ); - elems[3] = tri_tuple_type( T_EDGE_N(0), T_EDGE_N(1), T_EDGE_N(2) ); + elems[0] = { T_VERT_N(0), T_EDGE_N(0), T_EDGE_N(2) }; + elems[1] = { T_VERT_N(1), T_EDGE_N(1), T_EDGE_N(0) }; + elems[2] = { T_VERT_N(2), T_EDGE_N(2), T_EDGE_N(1) }; + elems[3] = { T_EDGE_N(0), T_EDGE_N(1), T_EDGE_N(2) }; } else if (num_edges_marked == 2) { @@ -207,15 +207,15 @@ namespace percept { int jedgep = (jedge+1)%3; if (jedge_max_edge == jedge) { - elems[0] = tri_tuple_type( T_VERT_N(i0), T_EDGE_N(jedge), T_VERT_N(i2) ); - elems[1] = tri_tuple_type( T_EDGE_N(jedge), T_EDGE_N( jedgep ), T_VERT_N(i2) ); - elems[2] = tri_tuple_type( T_EDGE_N(jedge), T_VERT_N(i1), T_EDGE_N( jedgep ) ); + elems[0] = { T_VERT_N(i0), T_EDGE_N(jedge), T_VERT_N(i2) }; + elems[1] = { T_EDGE_N(jedge), T_EDGE_N( jedgep ), T_VERT_N(i2) }; + elems[2] = { T_EDGE_N(jedge), T_VERT_N(i1), T_EDGE_N( jedgep ) }; } else { - elems[0] = tri_tuple_type( T_VERT_N(i0), T_EDGE_N(jedge), T_EDGE_N( jedgep ) ); - elems[1] = tri_tuple_type( T_VERT_N(i0), T_EDGE_N( jedgep ), T_VERT_N(i2) ); - elems[2] = tri_tuple_type( T_EDGE_N(jedge), T_VERT_N(i1), T_EDGE_N( jedgep ) ); + elems[0] = { T_VERT_N(i0), T_EDGE_N(jedge), T_EDGE_N( jedgep ) }; + elems[1] = { T_VERT_N(i0), T_EDGE_N( jedgep ), T_VERT_N(i2) }; + elems[2] = { T_EDGE_N(jedge), T_VERT_N(i1), T_EDGE_N( jedgep ) }; } } else if (num_edges_marked == 1) @@ -226,8 +226,8 @@ namespace percept { unsigned num_nodes_on_edge = edge_marks[iedge]; if (num_nodes_on_edge) { - elems[0] = tri_tuple_type(T_VERT_N(iedge), T_EDGE_N(iedge), T_VERT_N((iedge+2)%3) ); - elems[1] = tri_tuple_type(T_EDGE_N(iedge), T_VERT_N((iedge+1)%3), T_VERT_N((iedge+2)%3) ); + elems[0] = {T_VERT_N(iedge), T_EDGE_N(iedge), T_VERT_N((iedge+2)%3) }; + elems[1] = {T_EDGE_N(iedge), T_VERT_N((iedge+1)%3), T_VERT_N((iedge+2)%3) }; break; } } @@ -239,7 +239,7 @@ namespace percept { { // this allows each level to be at the same hierarchical level by having a single parent to single child elems.resize(1); - elems[0] = tri_tuple_type(T_VERT_N(0), T_VERT_N(1), T_VERT_N(2) ); + elems[0] = {T_VERT_N(0), T_VERT_N(1), T_VERT_N(2) }; } #else if (elems.size() != 0) diff --git a/packages/percept/src/adapt/UniformRefinerPattern.cpp b/packages/percept/src/adapt/UniformRefinerPattern.cpp index 1bd6a2165ea6..3801225c467a 100644 --- a/packages/percept/src/adapt/UniformRefinerPattern.cpp +++ b/packages/percept/src/adapt/UniformRefinerPattern.cpp @@ -283,7 +283,7 @@ //family_tree = parent_to_family_tree_relations[FAMILY_TREE_LEVEL_1].entity(); // EXPLANATION: stk_mesh inserts back-relations in front of existing relations (it uses the std::vector::insert method) - // FIXME - need a unit test to check if this ever breaks in the future (i.e. going to boost::mesh) + // FIXME - need a unit test to check if this ever breaks in the future //family_tree = parent_to_family_tree_relations[FAMILY_TREE_LEVEL_0].entity(); unsigned parent_elem_ft_level_1 = eMesh.getFamilyTreeRelationIndex(FAMILY_TREE_LEVEL_1, parent_elem); @@ -568,27 +568,69 @@ void UniformRefinerPatternBase::updateSurfaceBlockMap(percept::PerceptMesh& eMesh, stk::mesh::Part* part, stk::mesh::Part* part_to) { - std::vector surfaces = - eMesh.get_fem_meta_data()->get_surfaces_in_surface_to_block_map(); + std::vector surfaces = eMesh.get_fem_meta_data()->get_surfaces_in_surface_to_block_map(); // case 1: part/part_to are blocks if ( part->primary_entity_rank() == stk::topology::ELEMENT_RANK && part_to->primary_entity_rank() == stk::topology::ELEMENT_RANK) + { + // Add the refined block to all of the mappings that already contain the parent block + for (auto iter = surfaces.begin(); iter != surfaces.end(); ++iter) { - for (auto iter = surfaces.begin(); iter != surfaces.end(); ++iter) + const stk::mesh::Part * surface = *iter; + std::vector blocks = eMesh.get_fem_meta_data()->get_blocks_touching_surface(surface); + const bool parentBlockInMapping = (find(blocks.begin(), blocks.end(), part) != blocks.end()); + if (parentBlockInMapping) + { + const bool blockNotAlreadyInMapping = (find(blocks.begin(), blocks.end(), part_to) == blocks.end()); + if (blockNotAlreadyInMapping) { - const stk::mesh::Part * surface = *iter; - std::vector blocks = - eMesh.get_fem_meta_data()->get_blocks_touching_surface(surface); - if (find(blocks.begin(), blocks.end(), part) != blocks.end()) + std::vector new_blocks = blocks; + new_blocks.push_back(part_to); + eMesh.get_fem_meta_data()->set_surface_to_block_mapping(surface, new_blocks); + } + } + } + + if (part->topology() != part_to->topology()) { + // If the element topology changes upon refinement, also map the refined block to all + // surface parts of the appropriate topology that are also subsets of surfaces + // that are mapped to the "parent" block. We have to cascade the surface/block + // mappings down through all topology changes while respecting the original + // surface/block mapping. + + std::set faceTopologies; + for (unsigned i = 0; i < part_to->topology().num_faces(); ++i) + { + faceTopologies.insert(part_to->topology().face_topology(i)); + } + + for (const stk::mesh::Part * surface : surfaces) + { + std::vector blocks = eMesh.get_fem_meta_data()->get_blocks_touching_surface(surface); + const bool parentBlockInMapping = find(blocks.begin(), blocks.end(), part) != blocks.end(); + if (parentBlockInMapping) + { + for (const stk::mesh::Part * subsetSurface : surfaces) + { + const stk::mesh::PartVector supersetSurfaces = subsetSurface->supersets(); + const bool isSubsetOfAParentBlockSurface = (std::find(supersetSurfaces.begin(), supersetSurfaces.end(), surface) != supersetSurfaces.end()); + const bool subsetSurfaceTopologyMatchesBlock = (std::find(faceTopologies.begin(), faceTopologies.end(), subsetSurface->topology()) != faceTopologies.end()); + if (isSubsetOfAParentBlockSurface && subsetSurfaceTopologyMatchesBlock) { - std::vector new_blocks = blocks; - if (find(new_blocks.begin(), new_blocks.end(), part_to) == new_blocks.end()) - new_blocks.push_back(part_to); - eMesh.get_fem_meta_data()->set_surface_to_block_mapping(surface, new_blocks); + std::vector subsetSurfaceBlocks = eMesh.get_fem_meta_data()->get_blocks_touching_surface(subsetSurface); + const bool blockNotAlreadyInMapping = (find(subsetSurfaceBlocks.begin(), subsetSurfaceBlocks.end(), part_to) == subsetSurfaceBlocks.end()); + if (blockNotAlreadyInMapping) + { + subsetSurfaceBlocks.push_back(part_to); + eMesh.get_fem_meta_data()->set_surface_to_block_mapping(subsetSurface, subsetSurfaceBlocks); + } } + } } + } } + } // case 2: part/part_to are surfaces if (part->primary_entity_rank() == eMesh.get_fem_meta_data()->side_rank() && @@ -618,106 +660,114 @@ void UniformRefinerPatternBase::setNeededParts(percept::PerceptMesh& eMesh, BlockNamesType block_names_ranks, bool sameTopology, bool skipConvertedParts) { - EXCEPTWATCH; + EXCEPTWATCH; - if (DEBUG_SET_NEEDED_PARTS) - std::cout << "\n\n ============= setNeededParts start \n\n " << PerceptMesh::demangle(typeid(*this).name()) << std::endl; + if (DEBUG_SET_NEEDED_PARTS) + std::cout << "\n\n ============= setNeededParts start \n\n " << PerceptMesh::demangle(typeid(*this).name()) << std::endl; - addRefineNewNodesPart(eMesh); + addRefineNewNodesPart(eMesh); - addActiveParentParts(eMesh); + addActiveParentParts(eMesh); - if (block_names_ranks.size() == 0) - { - block_names_ranks.resize(percept::EntityRankEnd); - } + if (block_names_ranks.size() == 0) + { + block_names_ranks.resize(percept::EntityRankEnd); + } - m_fromParts.resize(0); - m_toParts.resize(0); + m_fromParts.resize(0); + m_toParts.resize(0); - setNeededParts_debug1(eMesh); + setNeededParts_debug1(eMesh); - std::vector& block_names_include = block_names_ranks[m_primaryEntityRank]; + std::vector& block_names_include = block_names_ranks[m_primaryEntityRank]; - stk::mesh::PartVector all_parts = eMesh.get_fem_meta_data()->get_parts(); + stk::mesh::PartVector all_parts = eMesh.get_fem_meta_data()->get_parts(); - bool found_include_only_block = foundIncludeOnlyBlock(eMesh, block_names_include); + bool found_include_only_block = foundIncludeOnlyBlock(eMesh, block_names_include); - for (stk::mesh::PartVector::iterator i_part = all_parts.begin(); i_part != all_parts.end(); ++i_part) - { - stk::mesh::Part * part = *i_part ; + for (stk::mesh::PartVector::iterator i_part = all_parts.begin(); i_part != all_parts.end(); ++i_part) + { + stk::mesh::Part * part = *i_part ; - if ( stk::mesh::is_auto_declared_part(*part) ) - continue; - bool is_auto_part = part->attribute() != 0; - if (is_auto_part) - continue; + if ( stk::mesh::is_auto_declared_part(*part) ) + continue; + bool is_auto_part = part->attribute() != 0; + if (is_auto_part) + continue; - bool doThisPart = shouldDoThisPart(eMesh, block_names_ranks, - found_include_only_block, block_names_include, part); + bool doThisPart = shouldDoThisPart(eMesh, block_names_ranks, + found_include_only_block, block_names_include, part); - if (!doThisPart) continue; + if (!doThisPart) continue; - stk::mesh::EntityRank switch_part_primary_entity_rank = part->primary_entity_rank() ; + stk::mesh::EntityRank switch_part_primary_entity_rank = part->primary_entity_rank() ; - if (switch_part_primary_entity_rank == eMesh.edge_rank() || - switch_part_primary_entity_rank == stk::topology::ELEMENT_RANK || - switch_part_primary_entity_rank == eMesh.face_rank()) - { - stk::mesh::Part * block_to=0; - if (sameTopology) - { - block_to = part; - } - else - { - std::string toTopoPartName = getToTopoPartName(); - if (REMOVE_UNDERSCORE_FROM_TOPO_NAME) Util::replace(toTopoPartName,"_",""); - std::string newPartName = part->name() + getConvertSeparatorString() + toTopoPartName + getConvertSeparatorString() + getAppendConvertString(); - block_to = &eMesh.get_fem_meta_data()->declare_part(newPartName, part->primary_entity_rank()); - if (DEBUG_SET_NEEDED_PARTS) std::cout << "tmp setNeededParts:: declare_part name= " << newPartName - << " with topo= " << getToTopoPartName() << std::endl; - stk::mesh::set_cell_topology(*block_to, shards::CellTopology(getToTopology())); - - if (block_to->attribute() == 0) { - stk::io::put_io_part_attribute(*block_to); - } - - addDistributionFactorToNewPart(*eMesh.get_fem_meta_data(), part, block_to); - - updateSurfaceBlockMap(eMesh, part, block_to); - - stk::mesh::PartVector *pv = const_cast(part->attribute()); - if (pv == 0) - { - pv = new stk::mesh::PartVector; - eMesh.get_fem_meta_data()->declare_attribute_with_delete(*part, pv); - } - pv->push_back(block_to); - if (DEBUG_SET_NEEDED_PARTS) - { - for (unsigned ii=0; ii < pv->size(); ii++) - { - std::cout << "tmp srk part.attr = " << part->name() << " block_to= " << (*pv)[ii]->name() << std::endl; - } - } - } + if (switch_part_primary_entity_rank == eMesh.edge_rank() || + switch_part_primary_entity_rank == stk::topology::ELEMENT_RANK || + switch_part_primary_entity_rank == eMesh.face_rank()) + { + stk::mesh::Part * block_to=0; + if (sameTopology) + { + block_to = part; + } + else + { + std::string toTopoPartName = getToTopoPartName(); + if (REMOVE_UNDERSCORE_FROM_TOPO_NAME) Util::replace(toTopoPartName,"_",""); + std::string newPartName = part->name() + getConvertSeparatorString() + toTopoPartName + getConvertSeparatorString() + getAppendConvertString(); + block_to = &eMesh.get_fem_meta_data()->declare_part(newPartName, part->primary_entity_rank()); + if (DEBUG_SET_NEEDED_PARTS) std::cout << "tmp setNeededParts:: declare_part name= " << newPartName + << " with topo= " << getToTopoPartName() << std::endl; + stk::mesh::set_topology(*block_to, stk::mesh::get_topology(shards::CellTopology(getToTopology()), eMesh.get_fem_meta_data()->spatial_dimension())); + + if (block_to->attribute() == 0) { + stk::io::put_io_part_attribute(*block_to); + } - if (!((part->name()).find(UniformRefinerPatternBase::getOldElementsPartName()) != std::string::npos)) - { - if (DEBUG_SET_NEEDED_PARTS) std::cout << "tmp setNeededParts:: fromPart = " << part->name() << " toPart = " << block_to->name() << std::endl; - m_fromParts.push_back(part); - m_toParts.push_back(block_to); - } - } - } + addDistributionFactorToNewPart(*eMesh.get_fem_meta_data(), part, block_to); + + updateSurfaceBlockMap(eMesh, part, block_to); + + if (switch_part_primary_entity_rank == stk::topology::ELEMENT_RANK) { + // Add the new surface parts needed by topology change upon refinement and make + // another pass at updating the surface to block mapping for these new parts + fixSubsets(eMesh); + addExtraSurfaceParts(eMesh); + updateSurfaceBlockMap(eMesh, part, block_to); + } + + stk::mesh::PartVector *pv = const_cast(part->attribute()); + if (pv == 0) + { + pv = new stk::mesh::PartVector; + eMesh.get_fem_meta_data()->declare_attribute_with_delete(*part, pv); + } + pv->push_back(block_to); + if (DEBUG_SET_NEEDED_PARTS) + { + for (unsigned ii=0; ii < pv->size(); ii++) + { + std::cout << "tmp srk part.attr = " << part->name() << " block_to= " << (*pv)[ii]->name() << std::endl; + } + } + } + + if (!((part->name()).find(UniformRefinerPatternBase::getOldElementsPartName()) != std::string::npos)) + { + if (DEBUG_SET_NEEDED_PARTS) std::cout << "tmp setNeededParts:: fromPart = " << part->name() << " toPart = " << block_to->name() << std::endl; + m_fromParts.push_back(part); + m_toParts.push_back(block_to); + } + } + } - if (!sameTopology) fixSubsets(eMesh); - addExtraSurfaceParts(eMesh); + if (!sameTopology) fixSubsets(eMesh); + addExtraSurfaceParts(eMesh); - addOldPart(eMesh); + addOldPart(eMesh); - setNeededParts_debug2(); + setNeededParts_debug2(); } #define DEBUG_fixSubSets 0 @@ -1612,7 +1662,7 @@ } if (!ctopo) { - stk::mesh::Part& root_part = eMesh.get_fem_meta_data()->get_cell_topology_root_part(getToTopology()); + stk::mesh::Part& root_part = eMesh.get_fem_meta_data()->get_topology_root_part(stk::mesh::get_topology(getToTopology(), eMesh.get_fem_meta_data()->spatial_dimension())); add_parts.push_back( &root_part); } eMesh.get_bulk_data()->change_entity_parts( newElement, add_parts, remove_parts ); diff --git a/packages/percept/src/adapt/UniformRefinerPattern.hpp b/packages/percept/src/adapt/UniformRefinerPattern.hpp index b304e2dd4037..d39d780a80a8 100644 --- a/packages/percept/src/adapt/UniformRefinerPattern.hpp +++ b/packages/percept/src/adapt/UniformRefinerPattern.hpp @@ -24,8 +24,6 @@ #include "Teuchos_RCP.hpp" #include -#include -#include #include @@ -38,10 +36,6 @@ #include #include #include -#include - -#include - #include #include @@ -482,16 +476,12 @@ virtual std::string getName() { return std::string("UniformRefinerPattern_")+getFromTopoPartName()+"_"+getToTopoPartName(); } - // draw - /// draw a picture of the element's topology and its refinement pattern (using the "dot" program from AT&T's graphviz program) - static std::string draw(bool showRefined = false, bool showEdgeNodes = false); - protected: percept::PerceptMesh& m_eMesh; URP(percept::PerceptMesh& eMesh) : m_eMesh(eMesh) {} typedef ToTopology TTopo; - typedef boost::array refined_element_type; + typedef std::array refined_element_type; diff --git a/packages/percept/src/adapt/UniformRefinerPattern_Beam2_Beam3_1_sierra.hpp b/packages/percept/src/adapt/UniformRefinerPattern_Beam2_Beam3_1_sierra.hpp index be8b0d6ed41e..9df570dcb3e7 100644 --- a/packages/percept/src/adapt/UniformRefinerPattern_Beam2_Beam3_1_sierra.hpp +++ b/packages/percept/src/adapt/UniformRefinerPattern_Beam2_Beam3_1_sierra.hpp @@ -61,7 +61,7 @@ stk::mesh::FieldBase *proc_rank_field=0) { const CellTopologyData * const cell_topo_data = m_eMesh.get_cell_topology(element); - typedef boost::array quadratic_type; + typedef std::array quadratic_type; static vector elems(1); CellTopology cell_topo(cell_topo_data); diff --git a/packages/percept/src/adapt/UniformRefinerPattern_Hex20_Hex20_8_sierra.hpp b/packages/percept/src/adapt/UniformRefinerPattern_Hex20_Hex20_8_sierra.hpp index 61471ec382a2..09dcb6670259 100644 --- a/packages/percept/src/adapt/UniformRefinerPattern_Hex20_Hex20_8_sierra.hpp +++ b/packages/percept/src/adapt/UniformRefinerPattern_Hex20_Hex20_8_sierra.hpp @@ -81,7 +81,7 @@ virtual unsigned getNumNewElemPerElem() { return 8; } - //typedef boost::array refined_element_type; + //typedef std::array refined_element_type; void diff --git a/packages/percept/src/adapt/UniformRefinerPattern_Hex27_Hex27_8_sierra.hpp b/packages/percept/src/adapt/UniformRefinerPattern_Hex27_Hex27_8_sierra.hpp index a36745ac83b3..2fc15916ba47 100644 --- a/packages/percept/src/adapt/UniformRefinerPattern_Hex27_Hex27_8_sierra.hpp +++ b/packages/percept/src/adapt/UniformRefinerPattern_Hex27_Hex27_8_sierra.hpp @@ -79,7 +79,7 @@ virtual unsigned getNumNewElemPerElem() { return 8; } - //typedef boost::array refined_element_type; + //typedef std::array refined_element_type; void diff --git a/packages/percept/src/adapt/UniformRefinerPattern_Hex8_Tet4_24.hpp b/packages/percept/src/adapt/UniformRefinerPattern_Hex8_Tet4_24.hpp index 7a00cdf3b7a4..cec9a2caa0a7 100644 --- a/packages/percept/src/adapt/UniformRefinerPattern_Hex8_Tet4_24.hpp +++ b/packages/percept/src/adapt/UniformRefinerPattern_Hex8_Tet4_24.hpp @@ -136,7 +136,7 @@ { EXCEPTWATCH; const CellTopologyData * const cell_topo_data = m_eMesh.get_cell_topology(element); - typedef boost::tuple tet_tuple_type; + typedef std::array tet_tuple_type; static vector elems(24); shards::CellTopology cell_topo(cell_topo_data); @@ -191,7 +191,7 @@ throw std::logic_error("UniformRefinerPattern_Hex8_Tet4_20 logic err"); } - elems[iele++] = tet_tuple_type(CENTROID_N, VERT_N(itf), VERT_N(itfp), FACE_N(i_face)); + elems[iele++] = {CENTROID_N, VERT_N(itf), VERT_N(itfp), FACE_N(i_face)}; } } @@ -203,6 +203,7 @@ #endif + std::vector elemNodes(4); for (unsigned ielem=0; ielem < elems.size(); ielem++) { //stk::mesh::Entity newElement = eMesh.get_bulk_data()->declare_entity(Element, *element_id_pool, eMesh.getPart(interface_table::shards_Triangle_3) ); @@ -218,17 +219,11 @@ change_entity_parts(eMesh, element, newElement); - { - if (!elems[ielem].get<0>()) - { - std::cout << "P[" << eMesh.get_rank() << " nid = 0 << " << std::endl; - exit(1); - } - } - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem].get<0>()), 0); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem].get<1>()), 1); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem].get<2>()), 2); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem].get<3>()), 3); + elemNodes[0] = eMesh.createOrGetNode(elems[ielem][0]); + elemNodes[1] = eMesh.createOrGetNode(elems[ielem][1]); + elemNodes[2] = eMesh.createOrGetNode(elems[ielem][2]); + elemNodes[3] = eMesh.createOrGetNode(elems[ielem][3]); + eMesh.get_bulk_data()->declare_relation(newElement, elemNodes); set_parent_child_relations(eMesh, element, newElement, *ft_element_pool, ielem); diff --git a/packages/percept/src/adapt/UniformRefinerPattern_Hex8_Tet4_6_12.hpp b/packages/percept/src/adapt/UniformRefinerPattern_Hex8_Tet4_6_12.hpp index f147f2bbf68d..7956e972aab1 100644 --- a/packages/percept/src/adapt/UniformRefinerPattern_Hex8_Tet4_6_12.hpp +++ b/packages/percept/src/adapt/UniformRefinerPattern_Hex8_Tet4_6_12.hpp @@ -142,7 +142,7 @@ { EXCEPTWATCH; const CellTopologyData * const cell_topo_data = m_eMesh.get_cell_topology(element); - typedef boost::tuple tet_tuple_type; + typedef std::array tet_tuple_type; vector new_elements(6); shards::CellTopology cell_topo(cell_topo_data); @@ -242,7 +242,7 @@ } new_elements.resize(12); - // boost::array centroid = {{0,0,0}}; + // std::array centroid = {{0,0,0}}; // for (unsigned iv = 0; iv < 8; iv++) // { // centroid[0] += m_node_coords[element_globalIds[iv]][0]/8.0; @@ -264,10 +264,10 @@ // m_elems[shards_Tetrahedron_4].push_back(element_globalIds[loc_trifaces[iQuadFace][kTriOnQuadFace][jTriNodeIndex]]); // } - new_elements[iele++] = tet_tuple_type(CENTROID_N, - element_globalIds[loc_trifaces[iQuadFace][kTriOnQuadFace][0]], - element_globalIds[loc_trifaces[iQuadFace][kTriOnQuadFace][1]], - element_globalIds[loc_trifaces[iQuadFace][kTriOnQuadFace][2]]); + new_elements[iele++] = {CENTROID_N, + element_globalIds[loc_trifaces[iQuadFace][kTriOnQuadFace][0]], + element_globalIds[loc_trifaces[iQuadFace][kTriOnQuadFace][1]], + element_globalIds[loc_trifaces[iQuadFace][kTriOnQuadFace][2]]}; } } @@ -299,10 +299,10 @@ // { // m_elems[shards_Tetrahedron_4].push_back(element_globalIds[loc_trifaces[iQuadFace][kTriOnQuadFace][jTriNodeIndex]]); // } - new_elements[count] = tet_tuple_type(element_globalIds[vmaxIndx], - element_globalIds[loc_trifaces[iQuadFace][kTriOnQuadFace][0]], - element_globalIds[loc_trifaces[iQuadFace][kTriOnQuadFace][1]], - element_globalIds[loc_trifaces[iQuadFace][kTriOnQuadFace][2]]); + new_elements[count] = {element_globalIds[vmaxIndx], + element_globalIds[loc_trifaces[iQuadFace][kTriOnQuadFace][0]], + element_globalIds[loc_trifaces[iQuadFace][kTriOnQuadFace][1]], + element_globalIds[loc_trifaces[iQuadFace][kTriOnQuadFace][2]]}; ++count; @@ -315,6 +315,7 @@ } // to here <<<<<< ----------------------- + std::vector elemNodes(4); for (unsigned ielem=0; ielem < new_elements.size(); ielem++) { //stk::mesh::Entity newElement = eMesh.get_bulk_data()->declare_entity(Element, *element_id_pool, eMesh.getPart(interface_table::shards_Triangle_3) ); @@ -332,17 +333,11 @@ unsigned nchild = new_elements.size(); - { - if (!new_elements[ielem].get<0>()) - { - std::cout << "P[" << eMesh.get_rank() << " nid = 0 << " << std::endl; - exit(123); - } - } - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(new_elements[ielem].get<0>()), 0); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(new_elements[ielem].get<1>()), 1); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(new_elements[ielem].get<2>()), 2); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(new_elements[ielem].get<3>()), 3); + elemNodes[0] = eMesh.createOrGetNode(new_elements[ielem][0]); + elemNodes[1] = eMesh.createOrGetNode(new_elements[ielem][1]); + elemNodes[2] = eMesh.createOrGetNode(new_elements[ielem][2]); + elemNodes[3] = eMesh.createOrGetNode(new_elements[ielem][3]); + eMesh.get_bulk_data()->declare_relation(newElement, elemNodes); set_parent_child_relations(eMesh, element, newElement, *ft_element_pool, ielem, &nchild); diff --git a/packages/percept/src/adapt/UniformRefinerPattern_Line2_Line2_2_sierra.hpp b/packages/percept/src/adapt/UniformRefinerPattern_Line2_Line2_2_sierra.hpp index f697335a6dc1..2f3742a05ff0 100644 --- a/packages/percept/src/adapt/UniformRefinerPattern_Line2_Line2_2_sierra.hpp +++ b/packages/percept/src/adapt/UniformRefinerPattern_Line2_Line2_2_sierra.hpp @@ -49,7 +49,7 @@ stk::mesh::FieldBase *proc_rank_field=0) { const CellTopologyData * const cell_topo_data = m_eMesh.get_cell_topology(element); - typedef boost::tuple line_tuple_type; + typedef std::array line_tuple_type; static vector elems(2); CellTopology cell_topo(cell_topo_data); @@ -123,7 +123,7 @@ EN[jNode] = inode; } - elems[iChild] = line_tuple_type(EN[0], EN[1]); + elems[iChild] = {EN[0], EN[1]}; } #undef CENTROID_N @@ -141,18 +141,9 @@ if (!use_declare_element_side) newElement = *element_pool; - stk::mesh::Entity nodes[2] = {eMesh.createOrGetNode(elems[ielem].get<0>()), eMesh.createOrGetNode(elems[ielem].get<1>())}; + stk::mesh::Entity nodes[2] = {eMesh.createOrGetNode(elems[ielem][0]), eMesh.createOrGetNode(elems[ielem][1])}; create_side_element(eMesh, use_declare_element_side, nodes, 2, newElement); -#if 0 - if (proc_rank_field && proc_rank_field->field_array_rank() == m_eMesh.edge_rank()) //&& m_eMesh.get_spatial_dim()==1) - { - double *fdata =stk::mesh::field_data( *static_cast(proc_rank_field) , newElement ); - //fdata[0] = double(m_eMesh.get_rank()); - fdata[0] = double(eMesh.owner_rank(newElement)); - } -#endif - stk::mesh::FieldBase * proc_rank_field_edge = m_eMesh.get_field(stk::topology::EDGE_RANK, "proc_rank_edge"); if (proc_rank_field_edge && proc_rank_field_edge->field_array_rank() != m_eMesh.edge_rank()) { @@ -172,8 +163,6 @@ << std::endl; } - //eMesh.get_bulk_data()->change_entity_parts( newElement, add_parts, remove_parts ); - change_entity_parts(eMesh, element, newElement); set_parent_child_relations(eMesh, element, newElement, *ft_element_pool, ielem); diff --git a/packages/percept/src/adapt/UniformRefinerPattern_Line2_Line3_1_sierra.hpp b/packages/percept/src/adapt/UniformRefinerPattern_Line2_Line3_1_sierra.hpp index 7c0399e52966..68e9daa1f9e6 100644 --- a/packages/percept/src/adapt/UniformRefinerPattern_Line2_Line3_1_sierra.hpp +++ b/packages/percept/src/adapt/UniformRefinerPattern_Line2_Line3_1_sierra.hpp @@ -72,7 +72,7 @@ stk::mesh::FieldBase *proc_rank_field=0) { const CellTopologyData * const cell_topo_data = m_eMesh.get_cell_topology(element); - typedef boost::array quadratic_type; + typedef std::array quadratic_type; static vector elems(1); CellTopology cell_topo(cell_topo_data); diff --git a/packages/percept/src/adapt/UniformRefinerPattern_Pyramid5_Tet4_2.hpp b/packages/percept/src/adapt/UniformRefinerPattern_Pyramid5_Tet4_2.hpp index 5942d951e352..158087d88d8d 100644 --- a/packages/percept/src/adapt/UniformRefinerPattern_Pyramid5_Tet4_2.hpp +++ b/packages/percept/src/adapt/UniformRefinerPattern_Pyramid5_Tet4_2.hpp @@ -123,7 +123,7 @@ stk::mesh::FieldBase *proc_rank_field=0) { EXCEPTWATCH; - typedef boost::tuple tet_tuple_type; + typedef std::array tet_tuple_type; vector new_elements(2); static unsigned element_globalIds[5] = {0,0,0,0,0}; @@ -149,15 +149,15 @@ } unsigned istart = indxMinVal; - new_elements[0] = tet_tuple_type(element_globalIds[(0+istart)%4], - element_globalIds[(1+istart)%4], - element_globalIds[(2+istart)%4], - element_globalIds[4]); + new_elements[0] = {element_globalIds[(0+istart)%4], + element_globalIds[(1+istart)%4], + element_globalIds[(2+istart)%4], + element_globalIds[4]}; - new_elements[1] = tet_tuple_type(element_globalIds[(0+istart)%4], - element_globalIds[(2+istart)%4], - element_globalIds[(3+istart)%4], - element_globalIds[4]); + new_elements[1] = {element_globalIds[(0+istart)%4], + element_globalIds[(2+istart)%4], + element_globalIds[(3+istart)%4], + element_globalIds[4]}; for (unsigned ielem=0; ielem < new_elements.size(); ielem++) { @@ -173,10 +173,10 @@ unsigned nchild = new_elements.size(); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(new_elements[ielem].get<0>()), 0); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(new_elements[ielem].get<1>()), 1); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(new_elements[ielem].get<2>()), 2); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(new_elements[ielem].get<3>()), 3); + eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(new_elements[ielem][0]), 0); + eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(new_elements[ielem][1]), 1); + eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(new_elements[ielem][2]), 2); + eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(new_elements[ielem][3]), 3); set_parent_child_relations(eMesh, element, newElement, *ft_element_pool, ielem, &nchild); diff --git a/packages/percept/src/adapt/UniformRefinerPattern_Quad4_Quad4_4.hpp b/packages/percept/src/adapt/UniformRefinerPattern_Quad4_Quad4_4.hpp index 11931edfad2d..281e3499a342 100644 --- a/packages/percept/src/adapt/UniformRefinerPattern_Quad4_Quad4_4.hpp +++ b/packages/percept/src/adapt/UniformRefinerPattern_Quad4_Quad4_4.hpp @@ -50,7 +50,7 @@ stk::mesh::FieldBase *proc_rank_field=0) { const CellTopologyData * const cell_topo_data = m_eMesh.get_cell_topology(element); - typedef boost::tuple quad_tuple_type; + typedef std::array quad_tuple_type; static vector elems(4); CellTopology cell_topo(cell_topo_data); @@ -86,10 +86,10 @@ // new_sub_entity_nodes[i][j] #define CENTROID_N NN(m_primaryEntityRank,0) - elems[0] = quad_tuple_type(VERT_N(0), EDGE_N(0), CENTROID_N, EDGE_N(3)); - elems[1] = quad_tuple_type(VERT_N(1), EDGE_N(1), CENTROID_N, EDGE_N(0)); - elems[2] = quad_tuple_type(VERT_N(2), EDGE_N(2), CENTROID_N, EDGE_N(1)); - elems[3] = quad_tuple_type(VERT_N(3), EDGE_N(3), CENTROID_N, EDGE_N(2)); + elems[0] = {VERT_N(0), EDGE_N(0), CENTROID_N, EDGE_N(3)}; + elems[1] = {VERT_N(1), EDGE_N(1), CENTROID_N, EDGE_N(0)}; + elems[2] = {VERT_N(2), EDGE_N(2), CENTROID_N, EDGE_N(1)}; + elems[3] = {VERT_N(3), EDGE_N(3), CENTROID_N, EDGE_N(2)}; #undef CENTROID_N @@ -107,10 +107,10 @@ newElement = *element_pool; stk::mesh::Entity nodes[4] = { - eMesh.createOrGetNode(elems[ielem].get<0>()), - eMesh.createOrGetNode(elems[ielem].get<1>()), - eMesh.createOrGetNode(elems[ielem].get<2>()), - eMesh.createOrGetNode(elems[ielem].get<3>()) }; + eMesh.createOrGetNode(elems[ielem][0]), + eMesh.createOrGetNode(elems[ielem][1]), + eMesh.createOrGetNode(elems[ielem][2]), + eMesh.createOrGetNode(elems[ielem][3]) }; create_side_element(eMesh, use_declare_element_side, nodes, 4, newElement); diff --git a/packages/percept/src/adapt/UniformRefinerPattern_Quad4_Tri3_2.hpp b/packages/percept/src/adapt/UniformRefinerPattern_Quad4_Tri3_2.hpp index 794517780e80..2e0d213516ea 100644 --- a/packages/percept/src/adapt/UniformRefinerPattern_Quad4_Tri3_2.hpp +++ b/packages/percept/src/adapt/UniformRefinerPattern_Quad4_Tri3_2.hpp @@ -66,7 +66,7 @@ stk::mesh::FieldBase *proc_rank_field=0) { const CellTopologyData * const cell_topo_data = m_eMesh.get_cell_topology(element); - typedef boost::tuple tri_tuple_type; + typedef std::array tri_tuple_type; static vector elems(2); CellTopology cell_topo(cell_topo_data); @@ -91,8 +91,8 @@ } unsigned istart = indxMinVal; - elems[0] = tri_tuple_type(VERT_N((0 + istart) % 4), VERT_N((1 + istart) % 4), VERT_N((2 + istart) % 4)); - elems[1] = tri_tuple_type(VERT_N((0 + istart) % 4), VERT_N((2 + istart) % 4), VERT_N((3 + istart) % 4)); + elems[0] = {VERT_N((0 + istart) % 4), VERT_N((1 + istart) % 4), VERT_N((2 + istart) % 4)}; + elems[1] = {VERT_N((0 + istart) % 4), VERT_N((2 + istart) % 4), VERT_N((3 + istart) % 4)}; } bool use_declare_element_side = UniformRefinerPatternBase::USE_DECLARE_ELEMENT_SIDE && m_primaryEntityRank == eMesh.side_rank(); @@ -105,9 +105,9 @@ // 3 nodes of the new quads stk::mesh::Entity nodes[3] = { - eMesh.createOrGetNode(elems[ielem].get<0>()), - eMesh.createOrGetNode(elems[ielem].get<1>()), - eMesh.createOrGetNode(elems[ielem].get<2>()) }; + eMesh.createOrGetNode(elems[ielem][0]), + eMesh.createOrGetNode(elems[ielem][1]), + eMesh.createOrGetNode(elems[ielem][2]) }; create_side_element(eMesh, use_declare_element_side, nodes, 3, newElement); diff --git a/packages/percept/src/adapt/UniformRefinerPattern_Quad4_Tri3_4.hpp b/packages/percept/src/adapt/UniformRefinerPattern_Quad4_Tri3_4.hpp index 07e0df7f10bb..72e9a8e824aa 100644 --- a/packages/percept/src/adapt/UniformRefinerPattern_Quad4_Tri3_4.hpp +++ b/packages/percept/src/adapt/UniformRefinerPattern_Quad4_Tri3_4.hpp @@ -57,7 +57,7 @@ stk::mesh::FieldBase *proc_rank_field=0) { const CellTopologyData * const cell_topo_data = m_eMesh.get_cell_topology(element); - typedef boost::tuple tri_tuple_type; + typedef std::array tri_tuple_type; static vector elems(4); CellTopology cell_topo(cell_topo_data); @@ -81,10 +81,10 @@ #define CENTROID_N NN(m_primaryEntityRank, 0) - elems[0] = tri_tuple_type(VERT_N(0), VERT_N(1), CENTROID_N); - elems[1] = tri_tuple_type(VERT_N(1), VERT_N(2), CENTROID_N); - elems[2] = tri_tuple_type(VERT_N(2), VERT_N(3), CENTROID_N); - elems[3] = tri_tuple_type(VERT_N(3), VERT_N(0), CENTROID_N); + elems[0] = {VERT_N(0), VERT_N(1), CENTROID_N}; + elems[1] = {VERT_N(1), VERT_N(2), CENTROID_N}; + elems[2] = {VERT_N(2), VERT_N(3), CENTROID_N}; + elems[3] = {VERT_N(3), VERT_N(0), CENTROID_N}; #undef CENTROID_N @@ -110,9 +110,9 @@ newElement = *element_pool; stk::mesh::Entity nodes[3] = { - eMesh.createOrGetNode(elems[ielem].get<0>()), - eMesh.createOrGetNode(elems[ielem].get<1>()), - eMesh.createOrGetNode(elems[ielem].get<2>())}; + eMesh.createOrGetNode(elems[ielem][0]), + eMesh.createOrGetNode(elems[ielem][1]), + eMesh.createOrGetNode(elems[ielem][2])}; create_side_element(eMesh, use_declare_element_side, nodes, 3, newElement); diff --git a/packages/percept/src/adapt/UniformRefinerPattern_Quad4_Tri3_6.hpp b/packages/percept/src/adapt/UniformRefinerPattern_Quad4_Tri3_6.hpp index d05d96f0edc0..c5b46e401670 100644 --- a/packages/percept/src/adapt/UniformRefinerPattern_Quad4_Tri3_6.hpp +++ b/packages/percept/src/adapt/UniformRefinerPattern_Quad4_Tri3_6.hpp @@ -92,7 +92,7 @@ stk::mesh::FieldBase *proc_rank_field=0) { const CellTopologyData * const cell_topo_data = m_eMesh.get_cell_topology(element); - typedef boost::tuple tri_tuple_type; + typedef std::array tri_tuple_type; static vector elems(6); CellTopology cell_topo(cell_topo_data); @@ -132,13 +132,13 @@ } - elems[0] = tri_tuple_type(VERT_N(0), EDGE_N(0), EDGE_N(3)); - elems[1] = tri_tuple_type(VERT_N(1), EDGE_N(1), EDGE_N(0)); - elems[2] = tri_tuple_type(EDGE_N(0), EDGE_N(1), EDGE_N(3)); + elems[0] = {VERT_N(0), EDGE_N(0), EDGE_N(3)}; + elems[1] = {VERT_N(1), EDGE_N(1), EDGE_N(0)}; + elems[2] = {EDGE_N(0), EDGE_N(1), EDGE_N(3)}; - elems[3] = tri_tuple_type(VERT_N(2), EDGE_N(2), EDGE_N(1)); - elems[4] = tri_tuple_type(VERT_N(3), EDGE_N(3), EDGE_N(2)); - elems[5] = tri_tuple_type(EDGE_N(2), EDGE_N(3), EDGE_N(1)); + elems[3] = {VERT_N(2), EDGE_N(2), EDGE_N(1)}; + elems[4] = {VERT_N(3), EDGE_N(3), EDGE_N(2)}; + elems[5] = {EDGE_N(2), EDGE_N(3), EDGE_N(1)}; // write a diagram of the refinement pattern as a vtk file, or a latex/tikz/pgf file #define WRITE_DIAGRAM 0 @@ -158,9 +158,9 @@ newElement = *element_pool; stk::mesh::Entity nodes[3] = { - eMesh.createOrGetNode(elems[ielem].get<0>()), - eMesh.createOrGetNode(elems[ielem].get<1>()), - eMesh.createOrGetNode(elems[ielem].get<2>())}; + eMesh.createOrGetNode(elems[ielem][0]), + eMesh.createOrGetNode(elems[ielem][1]), + eMesh.createOrGetNode(elems[ielem][2])}; create_side_element(eMesh, use_declare_element_side, nodes, 3, newElement); @@ -171,18 +171,8 @@ fdata[0] = double(eMesh.owner_rank(newElement)); } - //eMesh.get_bulk_data()->change_entity_parts( newElement, add_parts, remove_parts ); change_entity_parts(eMesh, element, newElement); - { - if (!elems[ielem].get<0>()) - { - std::cout << "P[" << eMesh.get_rank() << " nid = 0 << " << std::endl; - exit(1); - } - - } - set_parent_child_relations(eMesh, element, newElement, *ft_element_pool, ielem); ft_element_pool++; diff --git a/packages/percept/src/adapt/UniformRefinerPattern_ShellLine2_ShellLine2_2_sierra.hpp b/packages/percept/src/adapt/UniformRefinerPattern_ShellLine2_ShellLine2_2_sierra.hpp index 4a6b09762c9d..182cec6eb4b7 100644 --- a/packages/percept/src/adapt/UniformRefinerPattern_ShellLine2_ShellLine2_2_sierra.hpp +++ b/packages/percept/src/adapt/UniformRefinerPattern_ShellLine2_ShellLine2_2_sierra.hpp @@ -49,7 +49,7 @@ stk::mesh::FieldBase *proc_rank_field=0) { const CellTopologyData * const cell_topo_data = m_eMesh.get_cell_topology(element); - typedef boost::tuple line_tuple_type; + typedef std::array line_tuple_type; static vector elems(2); CellTopology cell_topo(cell_topo_data); @@ -123,7 +123,7 @@ EN[jNode] = inode; } - elems[iChild] = line_tuple_type(EN[0], EN[1]); + elems[iChild] = {EN[0], EN[1]}; } #undef CENTROID_N @@ -142,28 +142,11 @@ if (!use_declare_element_side) newElement = *element_pool; - stk::mesh::Entity nodes[2] = {eMesh.createOrGetNode(elems[ielem].get<0>()), eMesh.createOrGetNode(elems[ielem].get<1>())}; + stk::mesh::Entity nodes[2] = {eMesh.createOrGetNode(elems[ielem][0]), eMesh.createOrGetNode(elems[ielem][1])}; create_side_element(eMesh, use_declare_element_side, nodes, 2, newElement); -#if 0 - if (proc_rank_field && proc_rank_field->rank() == m_eMesh.edge_rank()) //&& m_eMesh.get_spatial_dim()==1) - { - double *fdata = stk::mesh::field_data( *static_cast(proc_rank_field) , newElement ); - //fdata[0] = double(m_eMesh.get_rank()); - fdata[0] = double(eMesh.owner_rank(newElement)); - } -#endif change_entity_parts(eMesh, element, newElement); - { - if (!elems[ielem].get<0>()) - { - std::cout << "P[" << eMesh.get_rank() << " nid = 0 " << std::endl; - exit(1); - } - - } - set_parent_child_relations(eMesh, element, newElement, *ft_element_pool, ielem); ft_element_pool++; diff --git a/packages/percept/src/adapt/UniformRefinerPattern_Tet10_Tet10_8_sierra.hpp b/packages/percept/src/adapt/UniformRefinerPattern_Tet10_Tet10_8_sierra.hpp index 98b614ff699f..e53d8eb166f2 100644 --- a/packages/percept/src/adapt/UniformRefinerPattern_Tet10_Tet10_8_sierra.hpp +++ b/packages/percept/src/adapt/UniformRefinerPattern_Tet10_Tet10_8_sierra.hpp @@ -80,7 +80,7 @@ virtual unsigned getNumNewElemPerElem() { return 8; } - //typedef boost::array refined_element_type; + //typedef std::array refined_element_type; void diff --git a/packages/percept/src/adapt/UniformRefinerPattern_Tet4_Tet4_8_sierra.hpp b/packages/percept/src/adapt/UniformRefinerPattern_Tet4_Tet4_8_sierra.hpp index 4cf8fbf9b53b..b1ed08796fb2 100644 --- a/packages/percept/src/adapt/UniformRefinerPattern_Tet4_Tet4_8_sierra.hpp +++ b/packages/percept/src/adapt/UniformRefinerPattern_Tet4_Tet4_8_sierra.hpp @@ -15,8 +15,6 @@ #include #include -#include -#include #define USE_FACE_BREAKER_T4_T4_8 1 #if USE_FACE_BREAKER_T4_T4_8 @@ -90,8 +88,8 @@ virtual unsigned getNumNewElemPerElem() { return 8; } #if USE_PERCEPT_MOAB_TET_REFINE - typedef boost::tuple TetTupleTypeLocal; - typedef boost::tuple TetTupleType; + typedef std::array TetTupleTypeLocal; + typedef std::array TetTupleType; #define TET_VERT_N(i) (i) #define TET_EDGE_N(i) ((i)+4) @@ -150,10 +148,10 @@ tets.resize(new_tets.size()); for (unsigned i = 0; i < new_tets.size(); i++) { - tets[i] = TetTupleTypeLocal((unsigned)new_tets[i].get<0>(), - (unsigned)new_tets[i].get<1>(), - (unsigned)new_tets[i].get<2>(), - (unsigned)new_tets[i].get<3>() ); + tets[i] = {(unsigned)new_tets[i][0], + (unsigned)new_tets[i][1], + (unsigned)new_tets[i][2], + (unsigned)new_tets[i][3]}; if (0) std::cout << "tmp RefPatt::createNewElements new tet= " << tets[i] << std::endl; @@ -197,10 +195,10 @@ elems.resize(num_new_elems); for (unsigned ielem=0; ielem < num_new_elems; ielem++) { - elems[ielem] = TetTupleType( TET_CV_EV(elems_local[ielem].get<0>() ), - TET_CV_EV(elems_local[ielem].get<1>() ), - TET_CV_EV(elems_local[ielem].get<2>() ), - TET_CV_EV(elems_local[ielem].get<3>() ) ); + elems[ielem] = { TET_CV_EV(elems_local[ielem][0] ), + TET_CV_EV(elems_local[ielem][1] ), + TET_CV_EV(elems_local[ielem][2] ), + TET_CV_EV(elems_local[ielem][3] ) }; if (0) std::cout << "tmp RefPatt::createNewElements new tet= " << elems[ielem] << std::endl; @@ -224,19 +222,11 @@ //eMesh.get_bulk_data()->change_entity_parts( newElement, add_parts, remove_parts ); change_entity_parts(eMesh, element, newElement); - { - if (!elems[ielem].get<0>()) - { - std::cout << "P[" << eMesh.get_rank() << "] nid = 0 << " << std::endl; - //exit(1); - } - } - // 4 nodes of the new tets - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem].get<0>()), 0); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem].get<1>()), 1); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem].get<2>()), 2); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem].get<3>()), 3); + eMesh.get_bulk_data()->declare_relation(newElement, {eMesh.createOrGetNode(elems[ielem][0]), + eMesh.createOrGetNode(elems[ielem][1]), + eMesh.createOrGetNode(elems[ielem][2]), + eMesh.createOrGetNode(elems[ielem][3])}); set_parent_child_relations(eMesh, element, newElement, *ft_element_pool, ielem); diff --git a/packages/percept/src/adapt/UniformRefinerPattern_Wedge6_Tet4_3.hpp b/packages/percept/src/adapt/UniformRefinerPattern_Wedge6_Tet4_3.hpp index 5a905c10487d..215700049dac 100644 --- a/packages/percept/src/adapt/UniformRefinerPattern_Wedge6_Tet4_3.hpp +++ b/packages/percept/src/adapt/UniformRefinerPattern_Wedge6_Tet4_3.hpp @@ -76,7 +76,7 @@ stk::mesh::FieldBase *proc_rank_field=0) { EXCEPTWATCH; - typedef boost::tuple tet_tuple_type; + typedef std::array tet_tuple_type; vector new_elements(3); stk::mesh::EntityId element_globalIds[6] = {0,0,0,0,0,0}; @@ -115,21 +115,21 @@ } // tet connected to min ID vertex but not opposite quad faces - new_elements[0] = tet_tuple_type(element_globalIds[min_vertex_renumber[indxMinVal][0]], - element_globalIds[min_vertex_renumber[indxMinVal][4]], - element_globalIds[min_vertex_renumber[indxMinVal][5]], - element_globalIds[min_vertex_renumber[indxMinVal][3]]); + new_elements[0] = {element_globalIds[min_vertex_renumber[indxMinVal][0]], + element_globalIds[min_vertex_renumber[indxMinVal][4]], + element_globalIds[min_vertex_renumber[indxMinVal][5]], + element_globalIds[min_vertex_renumber[indxMinVal][3]]}; // tets formed from splitting opposite quad faces using its min ID vertex - new_elements[1] = tet_tuple_type(element_globalIds[indxMinVal], - element_globalIds[opposite_quad_face_nodes[(0+indxMinValFace)%4]], - element_globalIds[opposite_quad_face_nodes[(1+indxMinValFace)%4]], - element_globalIds[opposite_quad_face_nodes[(2+indxMinValFace)%4]]); - - new_elements[2] = tet_tuple_type(element_globalIds[indxMinVal], - element_globalIds[opposite_quad_face_nodes[(0+indxMinValFace)%4]], - element_globalIds[opposite_quad_face_nodes[(2+indxMinValFace)%4]], - element_globalIds[opposite_quad_face_nodes[(3+indxMinValFace)%4]]); + new_elements[1] = {element_globalIds[indxMinVal], + element_globalIds[opposite_quad_face_nodes[(0+indxMinValFace)%4]], + element_globalIds[opposite_quad_face_nodes[(1+indxMinValFace)%4]], + element_globalIds[opposite_quad_face_nodes[(2+indxMinValFace)%4]]}; + + new_elements[2] = {element_globalIds[indxMinVal], + element_globalIds[opposite_quad_face_nodes[(0+indxMinValFace)%4]], + element_globalIds[opposite_quad_face_nodes[(2+indxMinValFace)%4]], + element_globalIds[opposite_quad_face_nodes[(3+indxMinValFace)%4]]}; for (unsigned ielem=0; ielem < new_elements.size(); ielem++) { @@ -145,10 +145,10 @@ unsigned nchild = new_elements.size(); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(new_elements[ielem].get<0>()), 0); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(new_elements[ielem].get<1>()), 1); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(new_elements[ielem].get<2>()), 2); - eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(new_elements[ielem].get<3>()), 3); + eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(new_elements[ielem][0]), 0); + eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(new_elements[ielem][1]), 1); + eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(new_elements[ielem][2]), 2); + eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(new_elements[ielem][3]), 3); set_parent_child_relations(eMesh, element, newElement, *ft_element_pool, ielem, &nchild); diff --git a/packages/percept/src/adapt/UniformRefinerPattern_def.hpp b/packages/percept/src/adapt/UniformRefinerPattern_def.hpp index 2c39956d7d65..a888fa7d8712 100644 --- a/packages/percept/src/adapt/UniformRefinerPattern_def.hpp +++ b/packages/percept/src/adapt/UniformRefinerPattern_def.hpp @@ -13,212 +13,6 @@ namespace percept { - template - std::string - URP:: - draw(bool showRefined , bool showEdgeNodes ) - { - Elem::StdMeshObjTopologies::bootstrap(); - -#define EXPRINT 0 - - const CellTopologyData * const cell_topo_data = shards::getCellTopologyData(); - shards::CellTopology cell_topo(cell_topo_data); - - std::ostringstream graph_str; - - unsigned n_vert = FromTopology::vertex_count; - unsigned n_node = FromTopology::node_count; - unsigned n_edge = cell_topo.getEdgeCount(); - unsigned n_face = cell_topo.getFaceCount(); - unsigned n_side = cell_topo.getSideCount(); - - graph_str << - "graph " << cell_topo.getName() << " {\n" - << "# name= " << cell_topo.getName() << "\n" - << "# n_vert = " << n_vert << "\n" - << "# n_node = " << n_node << "\n" - << "# n_edge = " << n_edge << "\n" - << "# n_face = " << n_face << "\n" - << "# n_side = " << n_side << "\n" - << - " ratio=1;\n" - " layout=nop;\n" - " size=\"4,4\";\n" - " bb=\"-50,-50,150,150\";\n" - " node [color=Green, fontcolor=Blue, font=Courier, width=0.125, height=0.125, shape=circle, fontsize=6, fixedsize=true, penwidth=0.2]; \n" - //" edge [style=dashed]; \n" - " edge [penwidth=0.1]; \n" - ; - - - //" node [color=Green, fontcolor=Blue, font=Courier, width=\"0.1\", height=\"0.1\", shape=none];\n" ; - - std::vector needed_entities; - - Elem::CellTopology elem_celltopo = Elem::getCellTopology< FromTopology >(); - const Elem::RefinementTopology* ref_topo_p = Elem::getRefinementTopology(elem_celltopo); - if (!ref_topo_p) - throw std::runtime_error("draw:: error, no refinement topology found"); - const Elem::RefinementTopology& ref_topo = *ref_topo_p; - - unsigned num_child = ref_topo.num_child(); - unsigned num_child_nodes = ref_topo.num_child_nodes(); - bool homogeneous_child = ref_topo.homogeneous_child(); - - //bool edge_exists[num_child_nodes][num_child_nodes]; - bool edge_exists[128][128]; - - - typedef Elem::StdMeshObjTopologies::RefTopoX RefTopoX; - RefTopoX& ref_topo_x = Elem::StdMeshObjTopologies::RefinementTopologyExtra< FromTopology > ::refinement_topology; - - if (0) std::cout << num_child << " " << homogeneous_child << " " << n_vert; - - //if (n_face == 0) n_face = 1; // 2D face has one "face" - if (0) - std::cout << "tmp n_face= " << n_face << " n_side= " << n_side << std::endl; - - - Math::MyVector delta; - double len_max = 0.0; - for (unsigned i_edge = 0; i_edge < n_edge; i_edge++) - { - Math::MyVector pc0( ref_topo_x[ cell_topo_data->edge[i_edge].node[0] ].parametric_coordinates ); - Math::MyVector pc1( ref_topo_x[ cell_topo_data->edge[i_edge].node[1] ].parametric_coordinates ); - pc0 -= pc1; - double len = norm_2(pc0); - len_max = std::max(len_max, len); - } - - double scv = 80.0; - Math::Matrix scm = Math::scalingMatrix(scv / len_max); - Math::Matrix rm = scm; - - Math::MyVector centroid; - for (unsigned i_node = 0; i_node < n_node; i_node++) - { - Math::MyVector pc( ref_topo_x[i_node].parametric_coordinates ); - centroid += pc/(double(n_node)); - } - if (0) std::cout << "len_max= " << len_max << " centroid= " << centroid << std::endl; - - if (cell_topo.getDimension() == 3) - { - - // good one - Math::Matrix rmx = Math::rotationMatrix(0, -60.0); - Math::Matrix rmy = Math::rotationMatrix(1, 0.0); - Math::Matrix rmz = Math::rotationMatrix(2, -30.0); - - //rm = ublas::prod(rmy, rmz); - rm = ublas::prod(rmx, rmz); - rm = ublas::prod(rmy, rm); - rm = ublas::prod(scm, rm); - } - - if (0) - std::cout << rm; - for (unsigned i_node = 0; i_node < n_node; i_node++) - { - double *pc = ref_topo_x[i_node].parametric_coordinates; - Math::MyVector v(pc); - v -= centroid; - v = ublas::prod(rm, v); - - v(0) += scv/2.; - v(1) += scv/2.; - v(2) += scv/2.; - - graph_str << " " << i_node << " [ pos=\"" << v(0) << "," << v(1) << "\"];\n"; - } - - // draw edges - if (!showRefined) - //if (showEdges) - for (unsigned i_edge = 0; i_edge < n_edge; i_edge++) - { - unsigned nn = cell_topo_data->edge[i_edge].topology->vertex_count; - if (showEdgeNodes) - nn = cell_topo_data->edge[i_edge].topology->node_count; - for (unsigned j_node = 0; j_node < nn - 1; j_node++) - { - graph_str << " " - << cell_topo_data->edge[i_edge].node[j_node] << " -- " - << cell_topo_data->edge[i_edge].node[(j_node + 1) % nn] << " ; \n" ; - } - } - - bool ft = (fromTopoKey == toTopoKey); - - if (showRefined && ft) - { - // draw edges - for (unsigned i=0; i < num_child_nodes; i++) - for (unsigned j = 0; j < num_child_nodes; j++) - { - edge_exists[i][j]=false; - } - for (unsigned iChild = 0; iChild < num_child; iChild++) - { - // draw nodes - unsigned nvn = (showEdgeNodes? FromTopology::node_count : FromTopology::vertex_count); - for (unsigned jNode = 0; jNode < nvn; jNode++) - { - unsigned childNodeIdx = ref_topo.child_node(iChild)[jNode]; -#ifndef NDEBUG - unsigned childNodeIdxCheck = ref_topo_x[childNodeIdx].ordinal_of_node; - VERIFY_OP(childNodeIdx, ==, childNodeIdxCheck, "childNodeIdxCheck"); -#endif - - double *pc = ref_topo_x[childNodeIdx].parametric_coordinates; - Math::MyVector v(pc); - v -= centroid; - v = ublas::prod(rm, v); - - v(0) += scv/2.; - v(1) += scv/2.; - v(2) += scv/2.; - - //graph_str << " " << i_node << " [ pos=\"" << pc[0] << "," << pc[1] << "\"];\n"; - std::string color="green"; - //if (childNodeIdx >= FromTopology::node_count) - if (childNodeIdx >= FromTopology::vertex_count) - color = "red"; - graph_str << " " << childNodeIdx << " [color=" << color << ", pos=\"" << v(0) << "," << v(1) << "\"];\n"; - - } - - for (unsigned i_edge = 0; i_edge < n_edge; i_edge++) - { - //unsigned nn = cell_topo_data->edge[i_edge].topology->vertex_count; - //unsigned nn = cell_topo_data->edge[i_edge].topology->node_count; - - unsigned nn = cell_topo_data->edge[i_edge].topology->vertex_count; - if (showEdgeNodes) - nn = cell_topo_data->edge[i_edge].topology->node_count; - - for (unsigned j_node = 0; j_node < nn - 1; j_node++) - { - unsigned j0 = ref_topo.child_node(iChild)[ cell_topo_data->edge[i_edge].node[j_node] ]; - unsigned j1 = ref_topo.child_node(iChild)[ cell_topo_data->edge[i_edge].node[(j_node + 1) % nn] ]; - unsigned j00 = std::min(j0,j1); - unsigned j10 = std::max(j0,j1); - if (!edge_exists[j00][j10]) - graph_str << " " << std::min(j0,j1) << " -- " << std::max(j0,j1) << " ; \n" ; - edge_exists[j00][j10]=true; - } - } - - } - } - - graph_str << "}\n"; - - return std::string(graph_str.str()); - - } - /// utility methods for converting Sierra tables to new format (which groups DOF's on sub-entities) template bool diff --git a/packages/percept/src/adapt/main/MeshAdapt.cpp b/packages/percept/src/adapt/main/MeshAdapt.cpp index e7ad69fad77a..12afac0f9699 100644 --- a/packages/percept/src/adapt/main/MeshAdapt.cpp +++ b/packages/percept/src/adapt/main/MeshAdapt.cpp @@ -6,6 +6,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +#include #include #include @@ -210,7 +211,7 @@ namespace percept { bool isInt = false; { try { - i = boost::lexical_cast(s); + i = std::stoi(s); (void)i; isInt = true; } diff --git a/packages/percept/src/adapt/main/MeshAdapt.hpp b/packages/percept/src/adapt/main/MeshAdapt.hpp index e220bd738c64..b1463f10625a 100644 --- a/packages/percept/src/adapt/main/MeshAdapt.hpp +++ b/packages/percept/src/adapt/main/MeshAdapt.hpp @@ -50,8 +50,6 @@ #include #include -#include -#include #include #include diff --git a/packages/percept/src/adapt/main/RunAdaptRun.hpp b/packages/percept/src/adapt/main/RunAdaptRun.hpp index efae7147111b..3f8726f33ccf 100644 --- a/packages/percept/src/adapt/main/RunAdaptRun.hpp +++ b/packages/percept/src/adapt/main/RunAdaptRun.hpp @@ -16,7 +16,9 @@ #include #include #include +#include #include +#include #if HAVE_YAML #include @@ -96,7 +98,7 @@ static void copy_error_indicator(PerceptMesh& eMesh_no_ft,PerceptMesh& eMesh, ErrorFieldType * error_field_no_ft, ErrorFieldType * error_field) { #if STK_PERCEPT_LITE==0 - boost::shared_ptr mesh_transfer = + std::shared_ptr mesh_transfer = buildSTKMeshTransfer(*(eMesh_no_ft.get_bulk_data()), eMesh_no_ft.get_coordinates_field(), error_field_no_ft, @@ -286,6 +288,7 @@ static void copy_error_indicator(PerceptMesh& eMesh_no_ft,PerceptMesh& eMesh, YamlUtils::emit(fout, node); } } + } #endif private: @@ -613,6 +616,7 @@ static void copy_error_indicator(PerceptMesh& eMesh_no_ft,PerceptMesh& eMesh, &eMesh_error.get_fem_meta_data()->declare_field(stk::topology::ELEMENT_RANK, rar.m_error_indicator_field); stk::mesh::FieldTraits::data_type* init_np = nullptr; // gcc 4.8 hack stk::mesh::put_field_on_mesh( *from_error_field , eMesh_error.get_fem_meta_data()->universal_part(), 1, init_np); + eMesh_error.add_input_field(from_error_field); eMesh_error.commit(); @@ -668,7 +672,7 @@ static void copy_error_indicator(PerceptMesh& eMesh_no_ft,PerceptMesh& eMesh, if (part->primary_entity_rank() != stk::topology::ELEMENT_RANK || stk::mesh::is_auto_declared_part(*part)) continue; - stk::topology stk_topo = stk::mesh::get_topology(eMesh.get_fem_meta_data()->get_cell_topology(*part)); + stk::topology stk_topo = eMesh.get_fem_meta_data()->get_topology(*part); if (stk_topo == stk::topology::WEDGE_6) { rar.m_wedge_block_names.push_back(part->name()); diff --git a/packages/percept/src/adapt/markers/Marker.cpp b/packages/percept/src/adapt/markers/Marker.cpp index d4a1f7932027..2dd0c6817fd1 100644 --- a/packages/percept/src/adapt/markers/Marker.cpp +++ b/packages/percept/src/adapt/markers/Marker.cpp @@ -97,7 +97,7 @@ stk::mesh::Selector *Marker::getSelector() { return m_globalSelector; } struct CompareErrIndRefFieldVec : public std::binary_function { bool operator()( ErrIndInfoTuple a, ErrIndInfoTuple b) { - return *a.get<0>() < *b.get<0>(); + return std::get<0>(a) < std::get<0>(b); } }; diff --git a/packages/percept/src/adapt/markers/Marker.hpp b/packages/percept/src/adapt/markers/Marker.hpp index 7e0a4f3d7197..c4d647f577a3 100644 --- a/packages/percept/src/adapt/markers/Marker.hpp +++ b/packages/percept/src/adapt/markers/Marker.hpp @@ -11,9 +11,7 @@ #define Marker_h #include - -#include -#include +#include #include #include @@ -33,7 +31,7 @@ class BoundingRegion; * */ //-------------------------------------------------------------------- -typedef boost::tuple ErrIndInfoTuple; +typedef std::tuple ErrIndInfoTuple; struct MarkerInfo { diff --git a/packages/percept/src/adapt/markers/MarkerInterval.cpp b/packages/percept/src/adapt/markers/MarkerInterval.cpp index 6dceffcf7960..4de6d247443f 100644 --- a/packages/percept/src/adapt/markers/MarkerInterval.cpp +++ b/packages/percept/src/adapt/markers/MarkerInterval.cpp @@ -81,8 +81,8 @@ size_t MarkerInterval::estimateNewElements(double errIndRefineThreshold, std::ve { size_t numRefinedLocal = 0, numRefinedGlobal = 0; for (size_t i = 0; i < errIndRefFieldVec.size(); ++i) { - if (refine_element(*errIndRefFieldVec[i].get<0>()) - && !errIndRefFieldVec[i].get<2>()) + if (refine_element(*std::get<0>(errIndRefFieldVec[i])) + && !std::get<2>(errIndRefFieldVec[i])) ++numRefinedLocal; } diff --git a/packages/percept/src/adapt/markers/MarkerPhysicallyBased.cpp b/packages/percept/src/adapt/markers/MarkerPhysicallyBased.cpp index 63fe129625f9..bd17cb088b66 100644 --- a/packages/percept/src/adapt/markers/MarkerPhysicallyBased.cpp +++ b/packages/percept/src/adapt/markers/MarkerPhysicallyBased.cpp @@ -82,13 +82,13 @@ void MarkerPhysicallyBased::markUsing(double errIndRefineThreshold, std::vector< { for (unsigned i = 0; i < errIndRefFieldVec.size(); ++i) { // reset to 0, then check criterion - *errIndRefFieldVec[i].get<1>() = static_cast(0); - if (*errIndRefFieldVec[i].get<0>() < m_unrefinement_multiplier*errIndRefineThreshold) { - *errIndRefFieldVec[i].get<1>() = static_cast(-1); + *std::get<1>(errIndRefFieldVec[i]) = static_cast(0); + if (*std::get<0>(errIndRefFieldVec[i]) < m_unrefinement_multiplier*errIndRefineThreshold) { + *std::get<1>(errIndRefFieldVec[i]) = static_cast(-1); } - if (do_refine && (*errIndRefFieldVec[i].get<0>() > errIndRefineThreshold) - && !errIndRefFieldVec[i].get<2>()) { - *errIndRefFieldVec[i].get<1>() = static_cast(1); + if (do_refine && (*std::get<0>(errIndRefFieldVec[i]) > errIndRefineThreshold) + && !std::get<2>(errIndRefFieldVec[i])) { + *std::get<1>(errIndRefFieldVec[i]) = static_cast(1); } } } @@ -102,8 +102,8 @@ size_t MarkerPhysicallyBased::estimateNewElements(double errIndRefineThreshold, size_t numRefinedLocal = 0, numRefinedGlobal = 0; for (size_t i = 0; i < errIndRefFieldVec.size(); ++i) { - if ((*errIndRefFieldVec[i].get<0>() > errIndRefineThreshold) - && !errIndRefFieldVec[i].get<2>() ) + if ((*std::get<0>(errIndRefFieldVec[i]) > errIndRefineThreshold) + && !std::get<2>(errIndRefFieldVec[i]) ) ++numRefinedLocal; } diff --git a/packages/percept/src/adapt/markers/MarkerUsingErrIndFraction.cpp b/packages/percept/src/adapt/markers/MarkerUsingErrIndFraction.cpp index e2d0404f5ad7..ba6f0c22a442 100644 --- a/packages/percept/src/adapt/markers/MarkerUsingErrIndFraction.cpp +++ b/packages/percept/src/adapt/markers/MarkerUsingErrIndFraction.cpp @@ -72,14 +72,14 @@ void MarkerUsingErrIndFraction::markUsing(double errIndRefineThreshold, std::vec for (unsigned i = 0; i < errIndRefFieldVec.size(); ++i) { // reset to 0, then check criterion - *errIndRefFieldVec[i].get<1>() = static_cast(0); - if (*errIndRefFieldVec[i].get<0>() < UF*g_maxErrorIndicator) { - *errIndRefFieldVec[i].get<1>() = static_cast(-1); + *std::get<1>(errIndRefFieldVec[i]) = static_cast(0); + if (*std::get<0>(errIndRefFieldVec[i]) < UF*g_maxErrorIndicator) { + *std::get<1>(errIndRefFieldVec[i]) = static_cast(-1); } if (do_refine) { - if ((*errIndRefFieldVec[i].get<0>() > errIndRefineThreshold*g_maxErrorIndicator) - && !errIndRefFieldVec[i].get<2>()) { - *errIndRefFieldVec[i].get<1>() = static_cast(1); + if ((*std::get<0>(errIndRefFieldVec[i]) > errIndRefineThreshold*g_maxErrorIndicator) + && !std::get<2>(errIndRefFieldVec[i])) { + *std::get<1>(errIndRefFieldVec[i]) = static_cast(1); } } } @@ -96,8 +96,8 @@ size_t MarkerUsingErrIndFraction::estimateNewElements(double errIndRefineThresho size_t numRefinedLocal = 0, numRefinedGlobal = 0; for (size_t i = 0; i < errIndRefFieldVec.size(); ++i) { - if ((*errIndRefFieldVec[i].get<0>() > errIndRefineThreshold*g_maxErrorIndicator) - && !errIndRefFieldVec[i].get<2>() ) + if ((*std::get<0>(errIndRefFieldVec[i]) > errIndRefineThreshold*g_maxErrorIndicator) + && !std::get<2>(errIndRefFieldVec[i]) ) ++numRefinedLocal; } diff --git a/packages/percept/src/adapt/sierra_element/CellTopology.cpp b/packages/percept/src/adapt/sierra_element/CellTopology.cpp index 59611c0c1f3d..04d37d7eab47 100644 --- a/packages/percept/src/adapt/sierra_element/CellTopology.cpp +++ b/packages/percept/src/adapt/sierra_element/CellTopology.cpp @@ -1,17 +1,22 @@ -// 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. -// +/*--------------------------------------------------------------------*/ +/* Copyright 2002 - 2008, 2010, 2011 National Technology & */ +/* Engineering Solutions of Sandia, LLC (NTESS). Under the terms */ +/* of Contract DE-NA0003525 with NTESS, there is a */ +/* non-exclusive license for use of this work by or on behalf */ +/* of the U.S. Government. Export of this program may require */ +/* a license from the United States Government. */ +/*--------------------------------------------------------------------*/ + // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. /*------------------------------------------------------------------------*/ /* shards : Shared Discretization Tools */ -/* Copyright (2008, 2011) Sandia Corporation */ +/* Copyright (2002-2008, 2010, 2011) National Technology & */ +/* Engineering Solutions of Sandia, LLC. */ /* */ -/* Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive */ -/* license for use of this work by or on behalf of the U.S. Government. */ +/* Under terms of Contract DE-NA0003525, there is a non-exclusive */ +/* license for use of this work by or on behalf of the U.S. Government. */ /* */ /* This library is free software; you can redistribute it and/or modify */ /* it under the terms of the GNU Lesser General Public License as */ diff --git a/packages/percept/src/adapt/sierra_element/StdMeshObjTopologies.cpp b/packages/percept/src/adapt/sierra_element/StdMeshObjTopologies.cpp index 07f3288e46be..d50c8bc2106c 100644 --- a/packages/percept/src/adapt/sierra_element/StdMeshObjTopologies.cpp +++ b/packages/percept/src/adapt/sierra_element/StdMeshObjTopologies.cpp @@ -26,7 +26,6 @@ */ #include -#include #include @@ -2760,7 +2759,7 @@ for (unsigned jc=0; jc < M; jc++) { bool end = (child[jc] == EUA || jc== M-1); - std::cout << (jc==0?"{":"") << (child[jc] == EUA?"EUA":boost::lexical_cast(child[jc])) << (end?(ic==(N-1)?"}\n":"},\n"):", "); + std::cout << (jc==0?"{":"") << (child[jc] == EUA?"EUA":std::to_string(child[jc])) << (end?(ic==(N-1)?"}\n":"},\n"):", "); if (end) break; } } diff --git a/packages/percept/src/percept/GeometryVerifier.cpp b/packages/percept/src/percept/GeometryVerifier.cpp index 53c239a6c0e3..b931b140401d 100644 --- a/packages/percept/src/percept/GeometryVerifier.cpp +++ b/packages/percept/src/percept/GeometryVerifier.cpp @@ -299,12 +299,12 @@ using namespace Intrepid; if ( stk::mesh::is_auto_declared_part(*part) ) continue; - const CellTopologyData * const part_cell_topo_data = stk::mesh::MetaData::get(bulk).get_cell_topology(*part).getCellTopologyData(); + const stk::topology part_cell_topo_data = stk::mesh::MetaData::get(bulk).get_topology(*part); //std::cout << "P[" << p_rank << "] part = " << part->name() << " part_cell_topo_data= " << part_cell_topo_data << " topo-name= " // << (part_cell_topo_data ? part_cell_topo_data->name : "null") << std::endl; - if (part_cell_topo_data) - jac_data[part_cell_topo_data->name] = jacData(); + if (part_cell_topo_data.is_valid()) + jac_data[part_cell_topo_data.char_name()] = jacData(); } for (unsigned ipass = 0; ipass < 1; ipass++) diff --git a/packages/percept/src/percept/Histograms.hpp b/packages/percept/src/percept/Histograms.hpp index bd94d1ceae4f..463f9348f9fe 100644 --- a/packages/percept/src/percept/Histograms.hpp +++ b/packages/percept/src/percept/Histograms.hpp @@ -42,7 +42,7 @@ { m_data = other.m_data; m_bar_symbol = other.m_bar_symbol; - m_max_column_width = m_max_column_width; + m_max_column_width = other.m_max_column_width; } std::vector m_data; diff --git a/packages/percept/src/percept/Intrepid_HGRAD_HEX_C2_Serendipity_FEM.hpp b/packages/percept/src/percept/Intrepid_HGRAD_HEX_C2_Serendipity_FEM.hpp index c73872e2a985..5c8037e0df3f 100644 --- a/packages/percept/src/percept/Intrepid_HGRAD_HEX_C2_Serendipity_FEM.hpp +++ b/packages/percept/src/percept/Intrepid_HGRAD_HEX_C2_Serendipity_FEM.hpp @@ -1,8 +1,12 @@ -// 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. -// +/*--------------------------------------------------------------------*/ +/* Copyright 2002 - 2008, 2010, 2011 National Technology & */ +/* Engineering Solutions of Sandia, LLC (NTESS). Under the terms */ +/* of Contract DE-NA0003525 with NTESS, there is a */ +/* non-exclusive license for use of this work by or on behalf */ +/* of the U.S. Government. Export of this program may require */ +/* a license from the United States Government. */ +/*--------------------------------------------------------------------*/ + // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. @@ -10,9 +14,10 @@ // ************************************************************************ // // Intrepid Package -// Copyright (2007) Sandia Corporation +// Copyright (2002-2008, 2010, 2011) National Technology & +// Engineering Solutions of Sandia, LLC. // -// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +// Under terms of Contract DE-NA0003525, there is a non-exclusive // license for use of this work by or on behalf of the U.S. Government. // // This library is free software; you can redistribute it and/or modify diff --git a/packages/percept/src/percept/Intrepid_HGRAD_HEX_C2_Serendipity_FEMDef.hpp b/packages/percept/src/percept/Intrepid_HGRAD_HEX_C2_Serendipity_FEMDef.hpp index 73de2723bf2b..2316bee2b56f 100644 --- a/packages/percept/src/percept/Intrepid_HGRAD_HEX_C2_Serendipity_FEMDef.hpp +++ b/packages/percept/src/percept/Intrepid_HGRAD_HEX_C2_Serendipity_FEMDef.hpp @@ -1,8 +1,12 @@ -// 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. -// +/*--------------------------------------------------------------------*/ +/* Copyright 2002 - 2008, 2010, 2011 National Technology & */ +/* Engineering Solutions of Sandia, LLC (NTESS). Under the terms */ +/* of Contract DE-NA0003525 with NTESS, there is a */ +/* non-exclusive license for use of this work by or on behalf */ +/* of the U.S. Government. Export of this program may require */ +/* a license from the United States Government. */ +/*--------------------------------------------------------------------*/ + // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. @@ -12,9 +16,10 @@ // ************************************************************************ // // Intrepid Package -// Copyright (2007) Sandia Corporation +// Copyright (2002-2008, 2010, 2011) National Technology & +// Engineering Solutions of Sandia, LLC. // -// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +// Under terms of Contract DE-NA0003525, there is a non-exclusive // license for use of this work by or on behalf of the U.S. Government. // // This library is free software; you can redistribute it and/or modify diff --git a/packages/percept/src/percept/Intrepid_HGRAD_QUAD_C2_Serendipity_FEM.hpp b/packages/percept/src/percept/Intrepid_HGRAD_QUAD_C2_Serendipity_FEM.hpp index 78a574419590..45fb2fe29baf 100644 --- a/packages/percept/src/percept/Intrepid_HGRAD_QUAD_C2_Serendipity_FEM.hpp +++ b/packages/percept/src/percept/Intrepid_HGRAD_QUAD_C2_Serendipity_FEM.hpp @@ -1,8 +1,12 @@ -// 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. -// +/*--------------------------------------------------------------------*/ +/* Copyright 2002 - 2008, 2010, 2011 National Technology & */ +/* Engineering Solutions of Sandia, LLC (NTESS). Under the terms */ +/* of Contract DE-NA0003525 with NTESS, there is a */ +/* non-exclusive license for use of this work by or on behalf */ +/* of the U.S. Government. Export of this program may require */ +/* a license from the United States Government. */ +/*--------------------------------------------------------------------*/ + // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. @@ -10,9 +14,10 @@ // ************************************************************************ // // Intrepid Package -// Copyright (2007) Sandia Corporation +// Copyright (2002-2008, 2010, 2011) National Technology & +// Engineering Solutions of Sandia, LLC. // -// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +// Under terms of Contract DE-NA0003525, there is a non-exclusive // license for use of this work by or on behalf of the U.S. Government. // // This library is free software; you can redistribute it and/or modify diff --git a/packages/percept/src/percept/Intrepid_HGRAD_QUAD_C2_Serendipity_FEMDef.hpp b/packages/percept/src/percept/Intrepid_HGRAD_QUAD_C2_Serendipity_FEMDef.hpp index 5545ddc2f5a8..ed484aee21de 100644 --- a/packages/percept/src/percept/Intrepid_HGRAD_QUAD_C2_Serendipity_FEMDef.hpp +++ b/packages/percept/src/percept/Intrepid_HGRAD_QUAD_C2_Serendipity_FEMDef.hpp @@ -1,8 +1,12 @@ -// 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. -// +/*--------------------------------------------------------------------*/ +/* Copyright 2002 - 2008, 2010, 2011 National Technology & */ +/* Engineering Solutions of Sandia, LLC (NTESS). Under the terms */ +/* of Contract DE-NA0003525 with NTESS, there is a */ +/* non-exclusive license for use of this work by or on behalf */ +/* of the U.S. Government. Export of this program may require */ +/* a license from the United States Government. */ +/*--------------------------------------------------------------------*/ + // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. @@ -13,9 +17,10 @@ // ************************************************************************ // // Intrepid Package -// Copyright (2007) Sandia Corporation +// Copyright (2002-2008, 2010, 2011) National Technology & +// Engineering Solutions of Sandia, LLC. // -// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +// Under terms of Contract DE-NA0003525, there is a non-exclusive // license for use of this work by or on behalf of the U.S. Government. // // This library is free software; you can redistribute it and/or modify diff --git a/packages/percept/src/percept/Intrepid_HGRAD_WEDGE_C2_Serendipity_FEM.hpp b/packages/percept/src/percept/Intrepid_HGRAD_WEDGE_C2_Serendipity_FEM.hpp index 4841b76da6a4..9d6d6824b18f 100644 --- a/packages/percept/src/percept/Intrepid_HGRAD_WEDGE_C2_Serendipity_FEM.hpp +++ b/packages/percept/src/percept/Intrepid_HGRAD_WEDGE_C2_Serendipity_FEM.hpp @@ -1,8 +1,12 @@ -// 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. -// +/*--------------------------------------------------------------------*/ +/* Copyright 2002 - 2008, 2010, 2011 National Technology & */ +/* Engineering Solutions of Sandia, LLC (NTESS). Under the terms */ +/* of Contract DE-NA0003525 with NTESS, there is a */ +/* non-exclusive license for use of this work by or on behalf */ +/* of the U.S. Government. Export of this program may require */ +/* a license from the United States Government. */ +/*--------------------------------------------------------------------*/ + // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. @@ -10,9 +14,10 @@ // ************************************************************************ // // Intrepid Package -// Copyright (2007) Sandia Corporation +// Copyright (2002-2008, 2010, 2011) National Technology & +// Engineering Solutions of Sandia, LLC. // -// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +// Under terms of Contract DE-NA0003525, there is a non-exclusive // license for use of this work by or on behalf of the U.S. Government. // // This library is free software; you can redistribute it and/or modify diff --git a/packages/percept/src/percept/Intrepid_HGRAD_WEDGE_C2_Serendipity_FEMDef.hpp b/packages/percept/src/percept/Intrepid_HGRAD_WEDGE_C2_Serendipity_FEMDef.hpp index e1e5b894eb7c..1feaff09c157 100644 --- a/packages/percept/src/percept/Intrepid_HGRAD_WEDGE_C2_Serendipity_FEMDef.hpp +++ b/packages/percept/src/percept/Intrepid_HGRAD_WEDGE_C2_Serendipity_FEMDef.hpp @@ -1,8 +1,12 @@ -// 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. -// +/*--------------------------------------------------------------------*/ +/* Copyright 2002 - 2008, 2010, 2011 National Technology & */ +/* Engineering Solutions of Sandia, LLC (NTESS). Under the terms */ +/* of Contract DE-NA0003525 with NTESS, there is a */ +/* non-exclusive license for use of this work by or on behalf */ +/* of the U.S. Government. Export of this program may require */ +/* a license from the United States Government. */ +/*--------------------------------------------------------------------*/ + // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. @@ -12,9 +16,10 @@ // ************************************************************************ // // Intrepid Package -// Copyright (2007) Sandia Corporation +// Copyright (2002-2008, 2010, 2011) National Technology & +// Engineering Solutions of Sandia, LLC. // -// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +// Under terms of Contract DE-NA0003525, there is a non-exclusive // license for use of this work by or on behalf of the U.S. Government. // // This library is free software; you can redistribute it and/or modify diff --git a/packages/percept/src/percept/MeshType.hpp b/packages/percept/src/percept/MeshType.hpp index e71d12acb510..8ab22ca264ec 100644 --- a/packages/percept/src/percept/MeshType.hpp +++ b/packages/percept/src/percept/MeshType.hpp @@ -391,15 +391,5 @@ struct StructuredGrid { template void set_field(const double * fld, unsigned size, int index, PerceptMesh *eMesh, typename MeshType::MTField *field, typename MeshType::MTNode node); - - template - std::ostream& operator<<(std::ostream& os, const std::array& arr) - { - for (unsigned i=0; i < N; ++i) - os << arr[i] << (i == N-1 ? "" : " "); - return os; - } - - } #endif diff --git a/packages/percept/src/percept/NoMallocArray.hpp b/packages/percept/src/percept/NoMallocArray.hpp index e26c20aac146..d164498a6004 100644 --- a/packages/percept/src/percept/NoMallocArray.hpp +++ b/packages/percept/src/percept/NoMallocArray.hpp @@ -14,7 +14,7 @@ namespace percept { - // patterned after boost::array + // patterned after std::array template class NoMallocArray { @@ -161,9 +161,6 @@ const T* data() const { return m_data; } T* data() { return m_data; } - // use array as C array (direct read/write access to data) - T* c_array() { return m_data; } - // assignment with type conversion template NoMallocArray& operator= (const NoMallocArray& rhs) { diff --git a/packages/percept/src/percept/Percept.hpp b/packages/percept/src/percept/Percept.hpp index 0f1c6b39f24a..74799994dc07 100644 --- a/packages/percept/src/percept/Percept.hpp +++ b/packages/percept/src/percept/Percept.hpp @@ -58,29 +58,6 @@ #endif - -//------------------------------------------------------------------------------------------------------------------------ -//------------------------------------------------------------------------------------------------------------------------ -//----- PGI Compiler old-ness problem - unsupported on boost::ublas -//------------------------------------------------------------------------------------------------------------------------ -//------------------------------------------------------------------------------------------------------------------------ - -/* The following is to avoid the following error from boost::ublas libraries: - -"/scratch/srkenno/code/TPLs_src/boost/boost/numeric/ublas/detail/config.hpp", line 170: catastrophic error: - #error directive: Your compiler and/or configuration is unsupported - by this verions of uBLAS. Define BOOST_UBLAS_UNSUPPORTED_COMPILER=0 - to override this message. Boost 1.32.0 includes uBLAS with support - for many older compilers. - #error Your compiler and/or configuration is unsupported by this verions of uBLAS. Define BOOST_UBLAS_UNSUPPORTED_COMPILER=0 to - override this message. Boost 1.32.0 includes uBLAS with support for many older compilers. -*/ - -#if defined(__PGI) -#define BOOST_UBLAS_UNSUPPORTED_COMPILER 0 -#endif - - //------------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------------ //----- Geometry configuration diff --git a/packages/percept/src/percept/PerceptBoostArray.hpp b/packages/percept/src/percept/PerceptBoostArray.hpp index 22c45182bcac..41de384047c7 100644 --- a/packages/percept/src/percept/PerceptBoostArray.hpp +++ b/packages/percept/src/percept/PerceptBoostArray.hpp @@ -13,18 +13,15 @@ #pragma warning disable 2196 2536 279 #endif -#include -#include -#include -#include #include +#include namespace percept { template - inline std::ostream& operator<< (std::ostream& out, const boost::array& coll) + inline std::ostream& operator<< (std::ostream& out, const std::array& coll) { - typedef boost::array Array; + typedef std::array Array; typename Array::const_iterator pos; for (pos=coll.begin(); pos!=coll.end(); ++pos) { diff --git a/packages/percept/src/percept/PerceptMesh.cpp b/packages/percept/src/percept/PerceptMesh.cpp index d2519ea9edc3..5aa503804b5e 100644 --- a/packages/percept/src/percept/PerceptMesh.cpp +++ b/packages/percept/src/percept/PerceptMesh.cpp @@ -13,10 +13,9 @@ #include #include #include +#include #include -#include - #include #include @@ -510,8 +509,7 @@ for (unsigned ipart=0; ipart < nparts; ipart++) { stk::mesh::Part& part = *parts[ipart]; - //const CellTopologyData *const topology = PerceptMesh::get_cell_topology(part); - const CellTopologyData *const topology = metaData.get_cell_topology(part).getCellTopologyData(); + const stk::topology topology = metaData.get_topology(part); std::string subsets = "{"; const stk::mesh::PartVector &part_subsets = part.subsets(); if (part_subsets.size() > 0) { @@ -523,7 +521,7 @@ } subsets += "}"; stream << "P[" << p_rank << "] info> Part[" << ipart << "]= " << part.name() - << " topology = " << (topology?shards::CellTopology(topology).getName():"null") + << " topology = " << topology.name() << " primary_entity_rank = " << static_cast(part.primary_entity_rank()) << " is io_part= " << stk::io::is_part_io_part(part) << " subsets = " << subsets @@ -1099,91 +1097,6 @@ // return perm; // } - - - std::vector PerceptMesh::nodes_in_mesh(const std::vector& listOfNodes, std::vector& results, bool sorted) - { - std::vector resId; - std::vector subDim(1); - results.resize(0); - int numInMesh = 0; - for (unsigned ii=0; ii < listOfNodes.size(); ++ii) - { - std::vector tmp; - subDim[0] = listOfNodes[ii]; - int inM = in_mesh(subDim, tmp, sorted); - if (inM) - { - resId.push_back(listOfNodes[ii]); - numInMesh++; - } - results.insert(results.end(), tmp.begin(), tmp.end()); - } - return resId; - } - - /// return info about elements that contain the given collection of entities, false if none - int PerceptMesh::in_mesh(const std::vector& subDim0, std::vector& results, bool sorted) - { - results.resize(0); - - std::vector subDim = subDim0; - std::sort(subDim.begin(), subDim.end()); - const stk::mesh::BucketVector & element_buckets = get_bulk_data()->buckets( element_rank() ); - - for ( stk::mesh::BucketVector::const_iterator k = element_buckets.begin() ; k != element_buckets.end() ; ++k ) - { - stk::mesh::Bucket & bucket = **k ; - const CellTopologyData * const element_topo_data = PerceptMesh::get_cell_topology(bucket); - shards::CellTopology cell_topo(element_topo_data); - - const unsigned num_elements_in_bucket = bucket.size(); - for (unsigned iElem = 0; iElem < num_elements_in_bucket; iElem++) - { - stk::mesh::Entity element = bucket[iElem]; - for (stk::mesh::EntityRank subDimRank = element_rank(); subDimRank >= stk::topology::NODE_RANK; --subDimRank) - { - unsigned num_subdims = 1; - if (element_topo_data) - { - if (subDimRank == face_rank()) num_subdims = element_topo_data->side_count; - if (subDimRank == edge_rank()) num_subdims = element_topo_data->edge_count; - if (subDimRank == node_rank()) num_subdims = element_topo_data->vertex_count; - } - for (unsigned isubdim = 0; isubdim < num_subdims; isubdim++) - { - std::vector list, sorted_list; - if (!element_topo_data) - { - if (subDimRank == element_rank()) - { - const MyPairIterRelation elem_nodes(*get_bulk_data(), element, stk::topology::NODE_RANK ); - for (unsigned ii=0; ii < elem_nodes.size(); ++ii) - { - list.push_back(identifier(elem_nodes[ii].entity())); - } - } - else - { - continue; - } - } - else - { - get_subdim_entity(list, element, subDimRank, isubdim, sorted); - } - sorted_list = list; - std::sort(sorted_list.begin(), sorted_list.end()); - if (sorted_list == subDim) - results.push_back(SubDimInfoType(element, subDimRank, isubdim, list)); - //std::cout << results.front() << std::endl; - } - } - } - } - return results.size(); - } - std::string PerceptMesh::print_entity_compact_field_name(const stk::mesh::Entity entity, const std::string& fieldName, int prec) { stk::mesh::FieldBase *field = get_fem_meta_data()->get_field(node_rank(), fieldName); @@ -1633,7 +1546,7 @@ min_max_ave.val[2] = 0.0; min_max_ave.count = 0.0; - boost::unordered_map node_normals; + std::unordered_map node_normals; stk::mesh::Selector this_part(part); const stk::mesh::BucketVector & buckets = get_bulk_data()->buckets( side_rank() ); @@ -2271,18 +2184,22 @@ auto & bulk = *get_bulk_data(); requested_entities.clear(); requested_entities.reserve(count); + std::vector ids; + if (entityRank != get_fem_meta_data()->side_rank()) { + ids.reserve(count); + } for(int ii = 0; ii < count; ++ii) { - stk::mesh::Entity elem; if (entityRank == get_fem_meta_data()->side_rank()) { - elem = bulk.declare_solo_side(parts); + requested_entities.push_back(bulk.declare_solo_side(parts)); } else { - stk::mesh::EntityId id = getNextId(entityRank); - elem = bulk.declare_entity(entityRank, id, parts); + ids.push_back(getNextId(entityRank)); } - requested_entities.push_back(elem); + } + if (entityRank != get_fem_meta_data()->side_rank()) { + bulk.declare_entities(entityRank, ids, parts, requested_entities); } return true; } @@ -2772,55 +2689,6 @@ //======================================================================================================================== - /// transform mesh by a given 3x3 matrix -#if !STK_PERCEPT_LITE - void PerceptMesh::transform_mesh(MDArray& matrix) - { - if (matrix.rank() != 2) throw std::runtime_error("pass in a 3x3 matrix"); - if (matrix.dimension(0) != 3 || matrix.dimension(1) != 3) throw std::runtime_error("pass in a 3x3 matrix"); - Math::Matrix mat; - for (int i = 0; i < 3; i++) - for (int j = 0; j < 3; j++) - { - mat(i,j) = matrix(i,j); - } - transform_mesh(mat); - } -#endif - - class MeshTransformer : public GenericFunction - { - Math::Matrix m_rotMat; - public: - - MeshTransformer(){} - MeshTransformer(Math::Matrix& m) : m_rotMat(m) {} - virtual void operator()(MDArray& domain, MDArray& codomain, double time_value_optional=0.0) - { - double x = domain(0); - double y = domain(1); - double z = (domain.dimension(0) == 2 ? 0 : domain(2)); - Math::Vector v; - v(0)=x; - v(1)=y; - v(2)=z; - v = m_rotMat * v; - codomain(0)=v(0); - codomain(1)=v(1); - if (codomain.dimension(0) == 3 ) codomain(2)= v(2); - } - - }; - /// transform mesh by a given 3x3 matrix - void PerceptMesh::transform_mesh(Math::Matrix& matrix) - { -#if defined(STK_PERCEPT_LITE) && STK_PERCEPT_LITE == 1 - VERIFY_MSG("not available in PerceptMeshLite"); -#else - MeshTransformer xform(matrix); - nodalOpLoop(*get_bulk_data(), xform, get_coordinates_field()); -#endif - } void PerceptMesh::checkForPartsToAvoidWriting() { @@ -3837,8 +3705,8 @@ { stk::mesh::Part& part_1 = *parts_1[ipart]; stk::mesh::Part& part_2 = *parts_2[ipart]; - const CellTopologyData *const topology_1 = metaData_1.get_cell_topology(part_1).getCellTopologyData(); - const CellTopologyData *const topology_2 = metaData_2.get_cell_topology(part_2).getCellTopologyData(); + const stk::topology topology_1 = metaData_1.get_topology(part_1); + const stk::topology topology_2 = metaData_2.get_topology(part_2); if (part_1.subsets().size() != part_2.subsets().size()) { msg += std::string("| parts subsets size diff ")+part_1.name()+" "+part_2.name()+" | "; @@ -3846,14 +3714,9 @@ } if (part_1.name() != part_2.name()) { msg += "|part names diff "+part_1.name()+" "+part_2.name()+" | "; diff = true; } - if ((topology_1 != topology_2) || - ((std::string(topology_1?shards::CellTopology(topology_1).getName():"null") != - std::string(topology_2?shards::CellTopology(topology_2).getName():"null") )) - ) + if (topology_1 != topology_2) { - msg += "| part topology diff "+ - std::string(topology_1?shards::CellTopology(topology_1).getName():"null")+" "+ - std::string(topology_2?shards::CellTopology(topology_2).getName():"null"); + msg += "| part topology diff "+ topology_1.name() + " " + topology_2.name(); diff = true; } @@ -5699,7 +5562,7 @@ block = block & owned; get_selected_entities( block, get_bulk_data()->buckets(element_rank()), - owned_elements); + owned_elements, false/*don't sort*/); //Part * skin_part = 0; stk::mesh::EntityVector elements_closure; @@ -5853,7 +5716,7 @@ if (end_bit == "mag") index = -1; else - index = boost::lexical_cast(end_bit); + index = std::stoi(end_bit); fname = fname.substr(0,pos-1); } field_stats(iter->second.m_data, fname, index); @@ -7112,7 +6975,7 @@ { eMesh.get_bulk_data()->modification_begin(); std::vector vecNodes; - stk::mesh::get_selected_entities(sel & stk::mesh::selectUnion(parts) , thisPerceptMesh.get_bulk_data()->buckets(thisPerceptMesh.node_rank()), vecNodes); + stk::mesh::get_selected_entities(sel & stk::mesh::selectUnion(parts) , thisPerceptMesh.get_bulk_data()->buckets(thisPerceptMesh.node_rank()), vecNodes, false/*don't sort*/); stk::mesh::Part& nodePart = eMesh.get_fem_meta_data()->get_topology_root_part(stk::topology::NODE); for (size_t ii = 0; ii < vecNodes.size(); ++ii) @@ -7121,7 +6984,7 @@ eMesh.get_bulk_data()->set_local_id(node, ii); } - stk::mesh::get_selected_entities(sel & stk::mesh::selectUnion(parts) , thisPerceptMesh.get_bulk_data()->buckets(thisPerceptMesh.node_rank()), vecNodes); + stk::mesh::get_selected_entities(sel & stk::mesh::selectUnion(parts) , thisPerceptMesh.get_bulk_data()->buckets(thisPerceptMesh.node_rank()), vecNodes, false/*don't sort*/); for (size_t ii = 0; ii < vecNodes.size(); ++ii) { stk::mesh::Entity oldNode = vecNodes[ii]; @@ -7186,8 +7049,8 @@ VERIFY_OP_ON(newPart, !=, 0, "hmm "+ partsAll[iPart]->name()); std::vector vecFaces, vecShells; - stk::mesh::get_selected_entities(sel1 , thisPerceptMesh.get_bulk_data()->buckets(thisPerceptMesh.side_rank()), vecFaces); - stk::mesh::get_selected_entities(sel1 , thisPerceptMesh.get_bulk_data()->buckets(thisPerceptMesh.element_rank()), vecShells); + stk::mesh::get_selected_entities(sel1 , thisPerceptMesh.get_bulk_data()->buckets(thisPerceptMesh.side_rank()), vecFaces, false/*don't sort*/); + stk::mesh::get_selected_entities(sel1 , thisPerceptMesh.get_bulk_data()->buckets(thisPerceptMesh.element_rank()), vecShells, false/*don't sort*/); //if (1) std::cout << "P[" << thisPerceptMesh.get_rank() << "] vecFaces.size= " << vecFaces.size() << " vecShells.size= " << vecShells.size() << std::endl; vecFaces.insert(vecFaces.end(), vecShells.begin(), vecShells.end()); for (unsigned ii=0; ii < vecFaces.size(); ++ii) @@ -7236,7 +7099,7 @@ } } std::vector vecNodes; - stk::mesh::get_selected_entities(sel & stk::mesh::selectUnion(partsAll) , thisPerceptMesh.get_bulk_data()->buckets(thisPerceptMesh.node_rank()), vecNodes); + stk::mesh::get_selected_entities(sel & stk::mesh::selectUnion(partsAll) , thisPerceptMesh.get_bulk_data()->buckets(thisPerceptMesh.node_rank()), vecNodes, false/*don't sort*/); for (unsigned ii = 0; ii < vecNodes.size(); ++ii) { @@ -7314,11 +7177,11 @@ double uv[2] = {U,V}; TriQuadSurfaceMesh3D::Point p = {{0, 0, 0}}; - evaluator.evaluateGregoryPatch(uv, element, p.c_array()); + evaluator.evaluateGregoryPatch(uv, element, p.data()); if (debug) { std::cout << "crm: face= " << iMesh.id(element) << " uv= " << Math::print_2d(uv) - << " xyz= " << Math::print_3d(p.c_array()) << " idStart= " << idStart << std::endl; + << " xyz= " << Math::print_3d(p.data()) << " idStart= " << idStart << std::endl; } coords.push_back(p); nodeIdMap.push_back(idStart + kk); @@ -7353,11 +7216,11 @@ double U = double(iU)/double(n); double uv[2] = {U,V}; TriQuadSurfaceMesh3D::Point p = {{0, 0, 0}}; - evaluator.evaluateGregoryPatch(uv, element, p.c_array()); + evaluator.evaluateGregoryPatch(uv, element, p.data()); if (debug) { std::cout << "crm: face= " << iMesh.id(element) << " uv= " << Math::print_2d(uv) - << " xyz= " << Math::print_3d(p.c_array()) << std::endl; + << " xyz= " << Math::print_3d(p.data()) << std::endl; } coords.push_back(p); nodeIdMap.push_back(idStart + kk); diff --git a/packages/percept/src/percept/PerceptMesh.hpp b/packages/percept/src/percept/PerceptMesh.hpp index ef41172975e2..c1040a531a9e 100644 --- a/packages/percept/src/percept/PerceptMesh.hpp +++ b/packages/percept/src/percept/PerceptMesh.hpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -23,9 +24,6 @@ #include #endif -#include - - #include #include #include @@ -74,14 +72,11 @@ #include "Teuchos_RCP.hpp" -//#include "PerceptMeshReadWrite.hpp" #include #include #include -#include - #if !STK_PERCEPT_LITE #include #endif @@ -269,14 +264,7 @@ stk::mesh::Entity& element_found, unsigned& side_ord_found, bool debug=false); - typedef boost::tuple > SubDimInfoType; - - /// return info about elements that contain the given collection of entities - returns the number of results found - int in_mesh(const std::vector& subDim, std::vector& results, bool sorted=true); - - /// treat the listOfNodes individually, calling in_mesh with a single node at a time from the list and - /// coalescing the results - returns which ones in listOfNodes are in the mesh - std::vector nodes_in_mesh(const std::vector& listOfNodes, std::vector& results, bool sorted=true); + typedef std::tuple > SubDimInfoType; /// for surface faces (tri's and quad's) find if the given parametric coords are inside bool in_face(stk::mesh::Entity face, const double *uv, const double tol=1.e-5) const; @@ -439,11 +427,6 @@ /// return the number of steps in the database int get_database_time_step_count(); -#if !STK_PERCEPT_LITE - /// transform mesh by a given 3x3 matrix - void transform_mesh(MDArray& matrix); -#endif - /// add coordinate-like fields needed, for example, to use smoothing of geometry-projected refined meshes /// Must be called before commit() void add_coordinate_state_fields(const bool output_fields=false); @@ -716,9 +699,6 @@ void set_sync_io_regions(bool val) { m_sync_io_regions = val; } void set_remove_io_orig_topo_type(bool val) { m_remove_io_orig_topo_type = val; } - /// transform mesh by a given 3x3 matrix - void transform_mesh(Math::Matrix& matrix); - /// return true if the two meshes are different; if @param print is true, print diffs; set print_all_field_diffs to get more output static bool mesh_difference(stk::mesh::MetaData& metaData_1, stk::mesh::MetaData& metaData_2, @@ -1022,7 +1002,7 @@ } const CellTopologyData * get_cell_topology(const stk::mesh::Part& thing) { - const CellTopologyData * cell_topo_data = get_fem_meta_data()->get_cell_topology(thing).getCellTopologyData(); + const CellTopologyData * cell_topo_data = stk::mesh::get_cell_topology(get_fem_meta_data()->get_topology(thing)).getCellTopologyData(); return cell_topo_data; } diff --git a/packages/percept/src/percept/SameRankRelation.hpp b/packages/percept/src/percept/SameRankRelation.hpp deleted file mode 100644 index 4b9c8c91d5db..000000000000 --- a/packages/percept/src/percept/SameRankRelation.hpp +++ /dev/null @@ -1,46 +0,0 @@ -// 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. -// -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -#ifndef percept_SameRankRelation_hpp -#define percept_SameRankRelation_hpp - -//#include - -#include -//#include -//#include - -/// define only one of these to be 1 -#define SAME_RANK_RELATION_MAP_TYPE_BOOST 1 -#define SAME_RANK_RELATION_MAP_TYPE_TR1 0 -#define SAME_RANK_RELATION_MAP_TYPE_STD 0 - -#if SAME_RANK_RELATION_MAP_TYPE_BOOST -#include -#endif - -#if SAME_RANK_RELATION_MAP_TYPE_STD -#include -#endif - -#if SAME_RANK_RELATION_MAP_TYPE_TR1 -#include -#endif - - namespace percept { - - - typedef std::vector PerceptEntityVector; - typedef stk::mesh::Entity SameRankRelationKey; - typedef PerceptEntityVector SameRankRelationValue; - typedef boost::unordered_map SameRankRelation; - - - } - -#endif diff --git a/packages/percept/src/percept/SetOfEntities.hpp b/packages/percept/src/percept/SetOfEntities.hpp index ced1e552b583..e41dc685b8e3 100644 --- a/packages/percept/src/percept/SetOfEntities.hpp +++ b/packages/percept/src/percept/SetOfEntities.hpp @@ -9,60 +9,14 @@ #ifndef SetOfEntities_hpp #define SetOfEntities_hpp -#define PERCEPT_USE_STD_SET 0 -#define PERCEPT_USE_STD_POOLED_SET 1 -#define PERCEPT_USE_STD_USET 0 - -#if PERCEPT_USE_STD_USET -#include -#include -#endif - -#if PERCEPT_USE_STD_POOLED_SET -#include -#include -#endif - namespace percept { -#if PERCEPT_USE_STD_SET - //typedef std::set SetOfEntitiesBase; - typedef std::set SetOfEntitiesBase; - struct SetOfEntities : public SetOfEntitiesBase - { - SetOfEntities() : SetOfEntitiesBase() {} - SetOfEntities(stk::mesh::BulkData& bulk) : SetOfEntitiesBase() {} - }; -#endif - -#if PERCEPT_USE_STD_USET - typedef std::unordered_set SetOfEntitiesBase; - struct SetOfEntities : public SetOfEntitiesBase - { - SetOfEntities() : SetOfEntitiesBase() {} - SetOfEntities(stk::mesh::BulkData& bulk) : SetOfEntitiesBase() {} - }; - -#endif - -#if PERCEPT_USE_STD_POOLED_SET - - // this is the expected number of elements that are node neighbors of any element - enum { PERCEPT_POOLED_SET_POOL_SIZE = 100 }; - - - template > + template, typename Allocator = std::allocator > struct SetOfEntitiesBase { - typedef std::set - > Type; + typedef std::set Type; typedef Less less; - }; struct SetOfEntities : public SetOfEntitiesBase::Type @@ -71,12 +25,6 @@ SetOfEntities(stk::mesh::BulkData& bulk) {} }; - - //typedef std::set ElementUnrefineCollection; - //typedef elements_to_be_destroyed_type ElementUnrefineCollection; - -#endif - } #endif diff --git a/packages/percept/src/percept/ShardsInterfaceTable.cpp b/packages/percept/src/percept/ShardsInterfaceTable.cpp index 425ed7d88426..e2a284c3860c 100644 --- a/packages/percept/src/percept/ShardsInterfaceTable.cpp +++ b/packages/percept/src/percept/ShardsInterfaceTable.cpp @@ -20,7 +20,7 @@ using namespace shards; { shards_Particle , getCellTopologyData< shards::Particle >(), 0, shards::Particle::vertex_count, shards::Particle::node_count , -1 , 0}, { shards_Line_2 , getCellTopologyData< shards::Line<2> >(), 0, shards::Line<2>::vertex_count, shards::Line<2>::node_count , shards_Quadrilateral_4 , - stk::mesh::set_cell_topology< shards::Line<2> > }, + stk::mesh::set_topology< stk::topology::LINE_2 > }, { shards_ShellLine_2 , getCellTopologyData< shards::ShellLine<2> >(), 0, shards::ShellLine<2>::vertex_count, shards::ShellLine<2>::node_count , -1 , 0}, { shards_ShellLine_3 , getCellTopologyData< shards::ShellLine<3> >(), 0, shards::ShellLine<3>::vertex_count, shards::ShellLine<3>::node_count , -1 , 0}, @@ -28,13 +28,13 @@ using namespace shards; { shards_Beam_3 , getCellTopologyData< shards::Beam<3> >(), 0, shards::Beam<3>::vertex_count, shards::Beam<3>::node_count , -1 , 0}, { shards_Triangle_3 , getCellTopologyData< shards::Triangle<3> >(), 0, shards::Triangle<3>::vertex_count, shards::Triangle<3>::node_count , shards_Wedge_6 , - stk::mesh::set_cell_topology< shards::Triangle<3> > }, + stk::mesh::set_topology< stk::topology::TRI_3 > }, { shards_Triangle_6 , getCellTopologyData< shards::Triangle<6> >(), 0, shards::Triangle<6>::vertex_count, shards::Triangle<6>::node_count , -1 , 0}, { shards_ShellTriangle_3 , getCellTopologyData< shards::ShellTriangle<3> >(), 0, shards::ShellTriangle<3>::vertex_count, shards::ShellTriangle<3>::node_count , -1 , 0}, { shards_ShellTriangle_6 , getCellTopologyData< shards::ShellTriangle<6> >(), 0, shards::ShellTriangle<6>::vertex_count, shards::ShellTriangle<6>::node_count , -1 , 0}, { shards_Quadrilateral_4 , getCellTopologyData< shards::Quadrilateral<4> >(), 0, shards::Quadrilateral<4>::vertex_count, shards::Quadrilateral<4>::node_count , shards_Hexahedron_8 , - stk::mesh::set_cell_topology< shards::Quadrilateral<4> > }, + stk::mesh::set_topology< stk::topology::QUAD_4 > }, { shards_Quadrilateral_8 , getCellTopologyData< shards::Quadrilateral<8> >(), 0, shards::Quadrilateral<8>::vertex_count, shards::Quadrilateral<8>::node_count , -1 , 0}, { shards_Quadrilateral_9 , getCellTopologyData< shards::Quadrilateral<9> >(), 0, shards::Quadrilateral<9>::vertex_count, shards::Quadrilateral<9>::node_count , -1 , 0}, { shards_ShellQuadrilateral_4 , getCellTopologyData< shards::ShellQuadrilateral<4> >(), 0, shards::ShellQuadrilateral<4>::vertex_count, shards::ShellQuadrilateral<4>::node_count , -1 , 0}, @@ -45,7 +45,7 @@ using namespace shards; { shards_Hexagon_6 , getCellTopologyData< shards::Hexagon<6> >(), 0, shards::Hexagon<6>::vertex_count, shards::Hexagon<6>::node_count , -1 , 0}, { shards_Tetrahedron_4 , getCellTopologyData< shards::Tetrahedron<4> >(), 0, shards::Tetrahedron<4>::vertex_count, shards::Tetrahedron<4>::node_count , -1 , - stk::mesh::set_cell_topology< shards::Tetrahedron<4> >}, + stk::mesh::set_topology< stk::topology::TET_4 >}, { shards_Tetrahedron_10 , getCellTopologyData< shards::Tetrahedron<10> >(), 0, shards::Tetrahedron<10>::vertex_count, shards::Tetrahedron<10>::node_count , -1 , 0}, { shards_Pyramid_5 , getCellTopologyData< shards::Pyramid<5> >(), 0, shards::Pyramid<5>::vertex_count, shards::Pyramid<5>::node_count , -1 , 0}, @@ -53,12 +53,12 @@ using namespace shards; { shards_Pyramid_14 , getCellTopologyData< shards::Pyramid<14> >(), 0, shards::Pyramid<14>::vertex_count, shards::Pyramid<14>::node_count , -1 , 0}, { shards_Wedge_6 , getCellTopologyData< shards::Wedge<6> >(), 0, shards::Wedge<6>::vertex_count, shards::Wedge<6>::node_count , -1 , - stk::mesh::set_cell_topology< shards::Wedge<6> >}, + stk::mesh::set_topology< stk::topology::WEDGE_6 >}, { shards_Wedge_15 , getCellTopologyData< shards::Wedge<15> >(), 0, shards::Wedge<15>::vertex_count, shards::Wedge<15>::node_count , -1 , 0}, { shards_Wedge_18 , getCellTopologyData< shards::Wedge<18> >(), 0, shards::Wedge<18>::vertex_count, shards::Wedge<18>::node_count , -1 , 0}, { shards_Hexahedron_8 , getCellTopologyData< shards::Hexahedron<8> >(), 0, shards::Hexahedron<8>::vertex_count, shards::Hexahedron<8>::node_count , -1 , - stk::mesh::set_cell_topology< shards::Hexahedron<8> > }, + stk::mesh::set_topology< stk::topology::HEX_8 > }, { shards_Hexahedron_20 , getCellTopologyData< shards::Hexahedron<20> >(), 0, shards::Hexahedron<20>::vertex_count, shards::Hexahedron<20>::node_count , -1 , 0}, { shards_Hexahedron_27 , getCellTopologyData< shards::Hexahedron<27> >(), 0, shards::Hexahedron<27>::vertex_count, shards::Hexahedron<27>::node_count , -1 , 0} diff --git a/packages/percept/src/percept/ShardsInterfaceTable.hpp b/packages/percept/src/percept/ShardsInterfaceTable.hpp index b77704e5f439..0ff90232842a 100644 --- a/packages/percept/src/percept/ShardsInterfaceTable.hpp +++ b/packages/percept/src/percept/ShardsInterfaceTable.hpp @@ -32,7 +32,7 @@ namespace percept { namespace interface_table { - typedef void (*stk_set_cell_topology_fptr)(stk::mesh::Part & ); + typedef void (*stk_set_topology_fptr)(stk::mesh::Part & ); enum ElemTypes { @@ -87,7 +87,7 @@ unsigned vertex_count; unsigned node_count; int sweptElemType; - stk_set_cell_topology_fptr setCellTopoFptr; + stk_set_topology_fptr setCellTopoFptr; } elemInfoType; diff --git a/packages/percept/src/percept/SmoothingHelperFunctions.cpp b/packages/percept/src/percept/SmoothingHelperFunctions.cpp index 777f999011ab..6c1dc0d033c5 100644 --- a/packages/percept/src/percept/SmoothingHelperFunctions.cpp +++ b/packages/percept/src/percept/SmoothingHelperFunctions.cpp @@ -83,8 +83,8 @@ namespace percept unsigned per = parts[ip]->primary_entity_rank(); if (per == stk::topology::ELEMENT_RANK) { - const CellTopologyData *const topology = metaData->get_cell_topology(*parts[ip]).getCellTopologyData(); - if (!topology || topology->dimension != per) + const stk::topology topology = metaData->get_topology(*parts[ip]); + if (!topology.is_valid() || topology.dimension() != per) { std::cout << "Warning: PerceptMesh::get_skin_part: skipping part with dimension < element_rank, part name= " << parts[ip]->name() << std::endl; continue; diff --git a/packages/percept/src/percept/Stacktrace.hpp b/packages/percept/src/percept/Stacktrace.hpp index f4e7985f3ffe..66ce23cffb9d 100644 --- a/packages/percept/src/percept/Stacktrace.hpp +++ b/packages/percept/src/percept/Stacktrace.hpp @@ -17,10 +17,9 @@ #include #endif -#include - #include #include +#include namespace percept { @@ -39,8 +38,6 @@ namespace percept { #else # define STACKTRACE_POS() do { } while(0) #endif - //#define STACKTRACE_POS_I(i) do { Stacktrace::s_position = i + boost::lexical_cast(__LINE__); } while(0) - //#define STACKTRACE_POS() STACKTRACE_POS_I(0) class Stacktrace { public: diff --git a/packages/percept/src/percept/Util.hpp b/packages/percept/src/percept/Util.hpp index 3ee8a0d26005..c3d71ca72e78 100644 --- a/packages/percept/src/percept/Util.hpp +++ b/packages/percept/src/percept/Util.hpp @@ -39,7 +39,6 @@ #include #include -#include #include @@ -261,7 +260,7 @@ namespace shards { //======================================================================================================================== template - std::string toString(T t) { return boost::lexical_cast(t); } + std::string toString(T t) { return std::to_string(t); } inline std::string toString(stk::topology::rank_t t) { return toString(static_cast(t)); } @@ -273,7 +272,7 @@ namespace shards { inline T SQR(T t) { return t*t; } - inline int toInt(std::string t) { return boost::lexical_cast(t); } + inline int toInt(std::string t) { return std::stoi(t); } //======================================================================================================================== diff --git a/packages/percept/src/percept/eigen_verify/EigenVerify.cpp b/packages/percept/src/percept/eigen_verify/EigenVerify.cpp index 9f1da313eb80..89a42d130196 100644 --- a/packages/percept/src/percept/eigen_verify/EigenVerify.cpp +++ b/packages/percept/src/percept/eigen_verify/EigenVerify.cpp @@ -262,7 +262,7 @@ void EigenVerify::run(int argc, char** argv) stk::mesh::Field * coordinates_to = mesh_data[1]->meta_data().get_field >(stk::topology::NODE_RANK, "coordinates"); - boost::shared_ptr mesh_transfer_01 = + std::shared_ptr mesh_transfer_01 = buildSTKMeshTransfer(mesh_data[0]->bulk_data(), coordinates_from, fieldAll[0], diff --git a/packages/percept/src/percept/fixtures/BeamFixture.cpp b/packages/percept/src/percept/fixtures/BeamFixture.cpp index da48009cd169..c1acb74414c9 100644 --- a/packages/percept/src/percept/fixtures/BeamFixture.cpp +++ b/packages/percept/src/percept/fixtures/BeamFixture.cpp @@ -22,7 +22,7 @@ #include #include - +#include #include #include @@ -45,6 +45,7 @@ { // Define where fields exist on the mesh: stk::mesh::Part & universal = m_metaData.universal_part(); + stk::mesh::FieldTraits::data_type* init_c = nullptr; // gcc 4.8 hack stk::mesh::FieldTraits::data_type* init_s = nullptr; // gcc 4.8 hack put_field_on_mesh( m_coordinates_field , universal, init_c); diff --git a/packages/percept/src/percept/fixtures/PyramidFixture.cpp b/packages/percept/src/percept/fixtures/PyramidFixture.cpp index e142a69eb937..884f452ce745 100644 --- a/packages/percept/src/percept/fixtures/PyramidFixture.cpp +++ b/packages/percept/src/percept/fixtures/PyramidFixture.cpp @@ -80,7 +80,6 @@ stk::io::put_io_part_attribute(*m_sideset_tri); m_metaData.declare_part_subset(*m_sideset_tri, *m_sideset_tri_subset); } - stk::mesh::FieldTraits::data_type* init_c = nullptr; // gcc 4.8 hack stk::mesh::FieldTraits::data_type* init_s = nullptr; // gcc 4.8 hack diff --git a/packages/percept/src/percept/fixtures/QuadFixture.hpp b/packages/percept/src/percept/fixtures/QuadFixture.hpp index baa96efc1d98..11c7793fe1fb 100644 --- a/packages/percept/src/percept/fixtures/QuadFixture.hpp +++ b/packages/percept/src/percept/fixtures/QuadFixture.hpp @@ -28,6 +28,7 @@ #include #include #include +#include #include @@ -53,7 +54,7 @@ /// Topology can also be Triangle<3> - template > + template class QuadFixture { stk::mesh::EntityId exodus_side_id(stk::mesh::EntityId element_id, unsigned which_side_ord) @@ -65,8 +66,8 @@ public: // typedef int Scalar ; //typedef double Scalar ; - typedef Topology QuadOrTriTopo ; - enum { NodesPerElem = QuadOrTriTopo::node_count }; +// typedef Topology QuadOrTriTopo ; + enum { NodesPerElem = stk::topology_detail::topology_data::num_nodes }; typedef stk::mesh::Field CoordFieldType; typedef stk::mesh::Field CoordGatherFieldType; @@ -99,8 +100,7 @@ set_bounding_box(0,(double)NX,0,(double)NY); // Set topology of the element block part - //stk::mesh::set_cell_topology(meta_data, quad_part, CellTopology(shards::getCellTopologyData()) ); - stk::mesh::set_cell_topology(quad_part); + stk::mesh::set_topology(quad_part, Topology); stk::io::put_io_part_attribute(quad_part); //put coord-field on all nodes: @@ -353,13 +353,9 @@ if (!debug_geom_side_sets_as_blocks) { std::string topo_name = NodesPerElem == 4 ? "surface_quad4_edge2_" : "surface_tri3_edge2_" ; - side_parts[i_side] = &meta_data.declare_part(topo_name+boost::lexical_cast(i_side+1), stk::topology::EDGE_RANK); - stk::mesh::Part& side_part = meta_data.declare_part(std::string("surface_")+boost::lexical_cast(i_side+1), stk::topology::EDGE_RANK); - //void set_cell_topology(MetaData & fem_meta, Part &part, CellTopology cell_topology); - - //stk::mesh::set_cell_topology< shards::Line<2> >(*side_parts[i_side]); - //stk::mesh::set_cell_topology(meta_data, *side_parts[i_side], CellTopology(shards::getCellTopologyData()) ); - stk::mesh::set_cell_topology< shards::Line<2> >(*side_parts[i_side]); + side_parts[i_side] = &meta_data.declare_part(topo_name+std::to_string(i_side+1), stk::topology::EDGE_RANK); + stk::mesh::Part& side_part = meta_data.declare_part(std::string("surface_")+std::to_string(i_side+1), stk::topology::EDGE_RANK); + stk::mesh::set_topology< stk::topology::LINE_2 >(*side_parts[i_side]); stk::io::put_io_part_attribute(*side_parts[i_side]); stk::io::put_io_part_attribute(side_part); @@ -367,10 +363,7 @@ } else { - //side_parts[i_side] = &meta_data.declare_part(std::string("block_1000")+boost::lexical_cast(i_side+1), meta_data.edge_rank()); - side_parts[i_side] = &meta_data.declare_part_with_topology(std::string("block_1000")+boost::lexical_cast(i_side+1), stk::topology::BEAM_2); - //, m_block_beam( m_metaData.declare_part< Beam2 >( "block_2" ) ) - //stk::mesh::set_cell_topology< shards::Beam<2> >(*side_parts[i_side]); + side_parts[i_side] = &meta_data.declare_part_with_topology(std::string("block_1000")+std::to_string(i_side+1), stk::topology::BEAM_2); stk::io::put_io_part_attribute(*side_parts[i_side]); } diff --git a/packages/percept/src/percept/fixtures/TriQuadSurfaceMesh3D.hpp b/packages/percept/src/percept/fixtures/TriQuadSurfaceMesh3D.hpp index 77208b522aaa..c9df7c41fd89 100644 --- a/packages/percept/src/percept/fixtures/TriQuadSurfaceMesh3D.hpp +++ b/packages/percept/src/percept/fixtures/TriQuadSurfaceMesh3D.hpp @@ -45,7 +45,7 @@ public: //typedef double Point[3]; - typedef boost::array Point; + typedef std::array Point; typedef stk::mesh::EntityIdVector QuadIds; typedef stk::mesh::EntityIdVector TriIds; diff --git a/packages/percept/src/percept/fixtures/WedgeFixture.hpp b/packages/percept/src/percept/fixtures/WedgeFixture.hpp index 963951d5b48d..4e2ffafe6136 100644 --- a/packages/percept/src/percept/fixtures/WedgeFixture.hpp +++ b/packages/percept/src/percept/fixtures/WedgeFixture.hpp @@ -52,7 +52,7 @@ { bool verbose = false; - std::vector > coordsLine(n_nodes_x); + std::vector > coordsLine(n_nodes_x); for (unsigned ix = 0; ix < n_nodes_x; ix++) { double dx = double(ix)/double(n_nodes_x - 1); @@ -78,7 +78,7 @@ tp2.dump(); // sweep to make a quad mesh from line mesh - boost::array dir = {{0, (ymax-ymin)/double(n_nodes_y - 1),0}}; + std::array dir = {{0, (ymax-ymin)/double(n_nodes_y - 1),0}}; TransformDir xf0 ( dir ); Transform* xf = &xf0; @@ -102,7 +102,7 @@ //tp2.writeSTKMesh("tp2-quad-tri.e"); // sweep again to make a wedge mesh - boost::array dir1 = {{0,0,(zmax-zmin)/double(n_nodes_z - 1)}}; + std::array dir1 = {{0,0,(zmax-zmin)/double(n_nodes_z - 1)}}; TransformDir xf01(dir1); Transform* xf01t = &xf01; std::vector xforms0(n_nodes_z - 1, xf01t); @@ -138,7 +138,7 @@ { bool verbose = true; - boost::array coordsLine[] = { + std::array coordsLine[] = { {{0,0,0}}, {{1,0,0}}, {{2,0,0}}, {{3,0,0}}, {{4,0,0}} }; @@ -170,7 +170,7 @@ tp2.dump(); // sweep to make a quad mesh from line mesh - boost::array dir = {{0,1.234,0}}; + std::array dir = {{0,1.234,0}}; TransformDir xf0 ( dir ); Transform* xf = &xf0; @@ -196,7 +196,7 @@ //tp2.writeSTKMesh("tp2-quad-tri.e"); // sweep again to make a wedge mesh - boost::array dir1 = {{0,0,2.345}}; + std::array dir1 = {{0,0,2.345}}; std::vector xforms0(1); TransformDir xf01(dir1); xforms0[0] = &xf01; diff --git a/packages/percept/src/percept/function/StringFunction.cpp b/packages/percept/src/percept/function/StringFunction.cpp index c4cdf0f89ab1..230439037431 100644 --- a/packages/percept/src/percept/function/StringFunction.cpp +++ b/packages/percept/src/percept/function/StringFunction.cpp @@ -23,7 +23,6 @@ #include #include #include -#include namespace percept { @@ -75,7 +74,7 @@ m_gradient_string = ""; m_spatialDim = len; for (int i = 0; i < len; i++) - m_gradient_string += "v["+boost::lexical_cast(i)+"]= "+gstring[i]+";"; + m_gradient_string += "v["+std::to_string(i)+"]= "+gstring[i]+";"; } void @@ -86,7 +85,7 @@ m_gradient_string = ""; m_spatialDim = len; for (int i = 0; i < len; i++) - m_gradient_string += "v["+boost::lexical_cast(i)+"]= "+gstring(i)+";"; + m_gradient_string += "v["+std::to_string(i)+"]= "+gstring(i)+";"; } // new StringFunction = lhs OP rhs @@ -217,7 +216,7 @@ } if (deriv_spec.dimension(0) > 1) { - out_str += "v["+boost::lexical_cast(iresult)+"]= " + fstr+";"; + out_str += "v["+std::to_string(iresult)+"]= " + fstr+";"; } else { @@ -234,7 +233,7 @@ Teuchos::RCP StringFunction::derivative_test_fd(MDArrayString& deriv_spec, double eps) { - std::string eps_string = boost::lexical_cast(eps); + std::string eps_string = std::to_string(eps); std::string fstr = m_func_string; std::string fstr_p = m_func_string; std::string fstr_m = m_func_string; @@ -259,7 +258,7 @@ } if (deriv_spec.dimension(0) > 1) { - out_str += "v["+boost::lexical_cast(iresult)+"]= " + fstr+";"; + out_str += "v["+std::to_string(iresult)+"]= " + fstr+";"; } else { diff --git a/packages/percept/src/percept/math/Math.hpp b/packages/percept/src/percept/math/Math.hpp index 57128b74236c..052f0d8eae06 100644 --- a/packages/percept/src/percept/math/Math.hpp +++ b/packages/percept/src/percept/math/Math.hpp @@ -21,59 +21,15 @@ #include -#include -#include -#include - #include #include namespace percept { - namespace ublas = boost::numeric::ublas; - class Math { public: - typedef ublas::c_matrix Matrix; - - typedef ublas::c_vector Vector; - - typedef ublas::c_vector ubvec; - - class MyVector : public ubvec - { - public: - - MyVector(double x=0.0) : ubvec() - { - (*this)(0) = x; - (*this)(1) = x; - (*this)(2) = x; - } - - MyVector(double *x) : ubvec() - { - (*this)(0) = x[0]; - (*this)(1) = x[1]; - (*this)(2) = x[2]; - } - //Vector(const ubvec& v) : ubvec(v) {} - - MyVector& operator=(const ubvec& v) - { - //ubvec& v0 = ubvec::operator=(v); - (*this)(0) = v(0); - (*this)(1) = v(1); - (*this)(2) = v(2); - return *this; - } - - //v = ublas::prod(m_rotMat, v); - - }; - static double my_abs_hi(double x, double eps=1.e-6) { return std::sqrt(x*x + eps*eps); } static double my_min_hi(double x, double y, double eps=1.e-6) { return 0.5*(x+y - my_abs_hi(x-y,eps)); } static double my_max_hi(double x, double y, double eps=1.e-6) { return 0.5*(x+y + my_abs_hi(x-y,eps)); } @@ -86,55 +42,6 @@ namespace percept { return (rnd+1.0)/2.0; } - static Matrix rotationMatrix(int axis, double angle_degrees) - { - Matrix rm; - rm.clear(); - double theta = M_PI * angle_degrees / 180.0; - double cost = std::cos(theta); - double sint = std::sin(theta); - if (axis == 2) - { - rm(0,0) = cost; rm(0,1) = -sint; - rm(1,0) = sint; rm(1,1) = cost; - rm(2,2) = 1.0; - } - else if (axis == 1) - { - rm(0,0) = cost; rm(0,2) = -sint; - rm(2,0) = sint; rm(2,2) = cost; - rm(1,1) = 1.0; - } - else if (axis == 0) - { - rm(1,1) = cost; rm(1,2) = -sint; - rm(2,1) = sint; rm(2,2) = cost; - rm(0,0) = 1.0; - } - return rm; - } - - static Matrix scalingMatrix(int axis, double scale) - { - Matrix sm; - sm.clear(); - sm(0,0)=1.0; - sm(1,1)=1.0; - sm(2,2)=1.0; - sm(axis,axis)=scale; - return sm; - } - - static Matrix scalingMatrix( double scale) - { - Matrix sm; - sm.clear(); - sm(0,0)=scale; - sm(1,1)=scale; - sm(2,2)=scale; - return sm; - } - static double norm_3d(const double * vec) { double norm = std::sqrt(vec[0]*vec[0]+ @@ -242,9 +149,6 @@ namespace percept { } }; - inline Math::Vector operator*(Math::Matrix& mat, Math::Vector& vec) { return ublas::prod(mat, vec); } - inline Math::Matrix operator*(Math::Matrix& mat, Math::Matrix& mat2) { return ublas::prod(mat, mat2); } - } #endif diff --git a/packages/percept/src/percept/mesh/gen/SweepMesher.cpp b/packages/percept/src/percept/mesh/gen/SweepMesher.cpp index ffe2cc6b95cc..7459b7c2a2d4 100644 --- a/packages/percept/src/percept/mesh/gen/SweepMesher.cpp +++ b/packages/percept/src/percept/mesh/gen/SweepMesher.cpp @@ -243,7 +243,7 @@ SHARDS_ARRAY_DIM_TAG_SIMPLE_IMPLEMENTATION( Tag1 ) } //exit(1); - boost::array centroid = {{0,0,0}}; + std::array centroid = {{0,0,0}}; for (unsigned iv = 0; iv < 6; iv++) { centroid[0] += m_node_coords[elem[iv]][0]/6.0; @@ -384,7 +384,7 @@ SHARDS_ARRAY_DIM_TAG_SIMPLE_IMPLEMENTATION( Tag1 ) } //exit(1); - boost::array centroid = {{0,0,0}}; + std::array centroid = {{0,0,0}}; for (unsigned iv = 0; iv < 8; iv++) { centroid[0] += m_node_coords[elem[iv]][0]/8.0; diff --git a/packages/percept/src/percept/mesh/gen/SweepMesher.hpp b/packages/percept/src/percept/mesh/gen/SweepMesher.hpp index a0be6dbd4d8e..1ecf471e6ea2 100644 --- a/packages/percept/src/percept/mesh/gen/SweepMesher.hpp +++ b/packages/percept/src/percept/mesh/gen/SweepMesher.hpp @@ -54,7 +54,7 @@ SHARDS_ARRAY_DIM_TAG_SIMPLE_DECLARATION( Tag1 ) dst.insert(dst.end(), src.begin(), src.end()); } - typedef boost::array Coord; + typedef std::array Coord; typedef GeneralFunction< Coord, Coord > VectorFieldGeneralFunction; class Transform : public VectorFieldGeneralFunction { @@ -129,7 +129,7 @@ SHARDS_ARRAY_DIM_TAG_SIMPLE_DECLARATION( Tag1 ) * * Then use sweep to create a hex mesh (this example breaks a quad to create two Tri's, then creates a mixed hex/wedge mesh) * - * boost::array< double, 3> dir = {0,0,1}; + * std::array< double, 3> dir = {0,0,1}; * std::vector xforms(1, &TransformDir( dir ) ); * * // break one of the quads into tris @@ -139,7 +139,7 @@ SHARDS_ARRAY_DIM_TAG_SIMPLE_DECLARATION( Tag1 ) * tp2.dump(); * * // sweep to make a hex mesh - * boost::array< double, 3> dir1 = {0,0,2.345}; + * std::array< double, 3> dir1 = {0,0,2.345}; * xforms[0] = &TransformDir(dir1); * tp2.sweep( SweepMesher::ET_Quad4, SweepMesher::ET_Hex8, xforms); * @@ -399,7 +399,7 @@ SHARDS_ARRAY_DIM_TAG_SIMPLE_DECLARATION( Tag1 ) std::vector xforms(npoints-1); for (unsigned i = 0; i < npoints-1; i++) { - boost::array< double, 3> dir; + std::array< double, 3> dir; dir[0] = path[i+1][0]-path[i][0]; dir[1] = path[i+1][1]-path[i][1]; dir[2] = path[i+1][2]-path[i][2]; diff --git a/packages/percept/src/percept/mesh/gen/TransformPath.hpp b/packages/percept/src/percept/mesh/gen/TransformPath.hpp index 53a0475e028b..11d2edb0f5c6 100644 --- a/packages/percept/src/percept/mesh/gen/TransformPath.hpp +++ b/packages/percept/src/percept/mesh/gen/TransformPath.hpp @@ -19,7 +19,7 @@ class TransformPath : public Transform { - typedef boost::array Coord; + typedef std::array Coord; Coord m_from; Coord m_from_dir; Coord m_to; diff --git a/packages/percept/src/percept/mesh/geometry/kernel/GeometryFactory.cpp b/packages/percept/src/percept/mesh/geometry/kernel/GeometryFactory.cpp index c54aeb9660c3..5af51c05dacd 100644 --- a/packages/percept/src/percept/mesh/geometry/kernel/GeometryFactory.cpp +++ b/packages/percept/src/percept/mesh/geometry/kernel/GeometryFactory.cpp @@ -10,9 +10,7 @@ #include #include -#include - -#define DEBUG_GF2 0 +#include namespace percept { @@ -38,7 +36,7 @@ static stk::mesh::Part* getPart(stk::mesh::MetaData *meta_data, std::string part_name, bool partial_string_match_ok) { stk::mesh::Part* found_part =0; - boost::algorithm::to_lower(part_name); + sierra::make_lower(part_name); if (!partial_string_match_ok) { found_part = meta_data->get_part(part_name); @@ -53,7 +51,6 @@ getPart(stk::mesh::MetaData *meta_data, std::string part_name, bool partial_stri { stk::mesh::Part& part = *parts[ipart]; size_t found = part.name().find(part_name); - if (DEBUG_GF2) std::cout << "part_name= " << part_name << " part.name()= " << part.name() << " found= " << found << std::endl; if (found != std::string::npos) { // skip "old" parts @@ -68,7 +65,6 @@ getPart(stk::mesh::MetaData *meta_data, std::string part_name, bool partial_stri } } } - if (DEBUG_GF2) std::cout << "part_name= " << part_name << " found_part.name()= " << found_part->name() << std::endl; const bool error_check = true; if (error_check && !found_part && part_name != "edgeseams") diff --git a/packages/percept/src/percept/mesh/geometry/kernel/GeometryKernelGregoryPatch.cpp b/packages/percept/src/percept/mesh/geometry/kernel/GeometryKernelGregoryPatch.cpp index a62ac425e859..83dab53ec1cb 100644 --- a/packages/percept/src/percept/mesh/geometry/kernel/GeometryKernelGregoryPatch.cpp +++ b/packages/percept/src/percept/mesh/geometry/kernel/GeometryKernelGregoryPatch.cpp @@ -130,7 +130,7 @@ void GeometryKernelGregoryPatch::snap_to std::set neighbors, neighbors_local; if (!m_geometryMesh->is_valid(closest_face)) { - GeometryKernelGregoryPatch::EntitySet& faceSet = m_meshTransfer->meshb()->m_searchMap[node_hint]; + GeometryKernelGregoryPatch::EntitySet& faceSet = m_meshTransfer->meshB()->m_searchMap[node_hint]; neighbors = faceSet; } diff --git a/packages/percept/src/percept/mesh/geometry/kernel/GeometryKernelGregoryPatch.hpp b/packages/percept/src/percept/mesh/geometry/kernel/GeometryKernelGregoryPatch.hpp index e20e672650b2..9de35f0c9a35 100644 --- a/packages/percept/src/percept/mesh/geometry/kernel/GeometryKernelGregoryPatch.hpp +++ b/packages/percept/src/percept/mesh/geometry/kernel/GeometryKernelGregoryPatch.hpp @@ -62,7 +62,7 @@ class GeometryKernelGregoryPatch : public GeometryKernel stk::mesh::PartVector m_geometryMeshActiveParts; stk::mesh::PartVector m_nodeMeshActiveParts; bool m_debug; - boost::shared_ptr m_meshTransfer; + std::shared_ptr m_meshTransfer; stk::mesh::Entity m_found_face; }; diff --git a/packages/percept/src/percept/mesh/geometry/kernel/MeshGeometry.cpp b/packages/percept/src/percept/mesh/geometry/kernel/MeshGeometry.cpp index 0b7134832a96..7b86c9bb5340 100644 --- a/packages/percept/src/percept/mesh/geometry/kernel/MeshGeometry.cpp +++ b/packages/percept/src/percept/mesh/geometry/kernel/MeshGeometry.cpp @@ -9,11 +9,6 @@ #include #include -//#include - - - - #include #include diff --git a/packages/percept/src/percept/mesh/geometry/kernel/MeshGeometry.hpp b/packages/percept/src/percept/mesh/geometry/kernel/MeshGeometry.hpp index 60e36a825818..5a6cb2a82a82 100644 --- a/packages/percept/src/percept/mesh/geometry/kernel/MeshGeometry.hpp +++ b/packages/percept/src/percept/mesh/geometry/kernel/MeshGeometry.hpp @@ -15,9 +15,7 @@ #include -#include - -#define DEBUG_GEOM_SNAP 0 +#include namespace percept { @@ -159,8 +157,7 @@ class MeshGeometry const PerceptMesh& m_eMesh; //PerceptMesh * m_eMesh_pntr; typedef std::pair CacheBucketClassifyValueType; - typedef boost::unordered_map CacheBucketClassifyType; -// typedef boost::unordered_map MaxDeltaOnGeometryType; + typedef std::unordered_map CacheBucketClassifyType; MeshGeometry(const PerceptMesh& eMesh, GeometryKernel* geom, double doCheckMovement=0.0, double doCheckCpuTime=0.0, bool cache_bucket_selectors_is_active=false, bool doPrint=false); ~MeshGeometry(); diff --git a/packages/percept/src/percept/mesh/geometry/kernel/xfer/GPSTKMeshTransferSetup.hpp b/packages/percept/src/percept/mesh/geometry/kernel/xfer/GPSTKMeshTransferSetup.hpp index 8a7fbfaf9711..a2dd63db1166 100644 --- a/packages/percept/src/percept/mesh/geometry/kernel/xfer/GPSTKMeshTransferSetup.hpp +++ b/packages/percept/src/percept/mesh/geometry/kernel/xfer/GPSTKMeshTransferSetup.hpp @@ -25,7 +25,7 @@ namespace percept typedef stk::transfer::GeometricTransfer< class LinInterp< class GPFromMesh, class GPToMesh > > GPSTKMeshTransfer; inline - boost::shared_ptr + std::shared_ptr buildGPSTKMeshTransfer(PerceptMesh& fromMesh, const stk::mesh::PartVector& fromParts, const std::vector& fromFields, @@ -45,17 +45,17 @@ namespace percept transferType = TWOD_AXI_TO_THREED; } - boost::shared_ptr + std::shared_ptr from_mesh (new GPFromMesh(fromMesh, fromParts, fromFields)); - boost::shared_ptr + std::shared_ptr to_mesh (new GPToMesh(toMesh, toParts, toFields, transferType)); #if 0 - boost::shared_ptr + std::shared_ptr mesh_transfer(new GPSTKMeshTransfer(from_mesh, to_mesh, transfer_name, 1.5, stk::search::OCTREE)); #else - boost::shared_ptr + std::shared_ptr mesh_transfer(new GPSTKMeshTransfer(from_mesh, to_mesh, transfer_name)); #endif diff --git a/packages/percept/src/percept/mesh/geometry/stk_geom/3D/FitGregoryPatches.cpp b/packages/percept/src/percept/mesh/geometry/stk_geom/3D/FitGregoryPatches.cpp index d4bd900e219b..08f5120a51e5 100644 --- a/packages/percept/src/percept/mesh/geometry/stk_geom/3D/FitGregoryPatches.cpp +++ b/packages/percept/src/percept/mesh/geometry/stk_geom/3D/FitGregoryPatches.cpp @@ -612,9 +612,9 @@ namespace percept { std::vector& normalsSet = m_nodeNormalsSetMap[node]; for (unsigned jj=0; jj < normals.size(); ++jj) { - if (normalsSet[jj] && Math::norm_3d(normals[jj].c_array()) > 0.0) + if (normalsSet[jj] && Math::norm_3d(normals[jj].data()) > 0.0) { - Math::normalize_3d(normals[jj].c_array()); + Math::normalize_3d(normals[jj].data()); } else { @@ -1155,7 +1155,7 @@ namespace percept { { tangent[j] = nd1[j] - nd0[j]; } - Math::normalize_3d(tangent.c_array()); + Math::normalize_3d(tangent.data()); return tangent; } @@ -1484,12 +1484,12 @@ namespace percept { if (orient0 >= 0) { - Math::copy_3d(n.getData().get(), normals0[orient0].c_array()); + Math::copy_3d(n.getData().get(), normals0[orient0].data()); VERIFY_OP_ON(Math::norm_3d(n.getData().get()), >, 1.e-8, "bad norm"); } if (orient1 >= 0) { - Math::copy_3d(np.getData().get(), normals1[orient1].c_array()); + Math::copy_3d(np.getData().get(), normals1[orient1].data()); VERIFY_OP_ON(Math::norm_3d(np.getData().get()), >, 1.e-8, "bad normp"); } diff --git a/packages/percept/src/percept/mesh/geometry/stk_geom/3D/FitGregoryPatches.hpp b/packages/percept/src/percept/mesh/geometry/stk_geom/3D/FitGregoryPatches.hpp index 5e4339bf885e..705943f3fc87 100644 --- a/packages/percept/src/percept/mesh/geometry/stk_geom/3D/FitGregoryPatches.hpp +++ b/packages/percept/src/percept/mesh/geometry/stk_geom/3D/FitGregoryPatches.hpp @@ -173,7 +173,7 @@ class FitGregoryPatches * angle criterion; also adds edges to the QA mesh for debugging * and Q/A purposes. */ - typedef boost::array Point; + typedef std::array Point; double edgeAngle(stk::mesh::Entity node, const Edge& e0, const Edge& e1); diff --git a/packages/percept/src/percept/mesh/geometry/stk_geom/3D/GregoryPatch_FitUtil.mcpp b/packages/percept/src/percept/mesh/geometry/stk_geom/3D/GregoryPatch_FitUtil.mcpp index cec7e7c92310..2386e28b3a25 100644 --- a/packages/percept/src/percept/mesh/geometry/stk_geom/3D/GregoryPatch_FitUtil.mcpp +++ b/packages/percept/src/percept/mesh/geometry/stk_geom/3D/GregoryPatch_FitUtil.mcpp @@ -1,7 +1,12 @@ -// Copyright 2014 Sandia Corporation. Under the terms of -// Contract DE-AC04-94AL85000 with Sandia Corporation, the -// U.S. Government retains certain rights in this software. -// +/*--------------------------------------------------------------------*/ +/* Copyright 2002 - 2008, 2010, 2011 National Technology & */ +/* Engineering Solutions of Sandia, LLC (NTESS). Under the terms */ +/* of Contract DE-NA0003525 with NTESS, there is a */ +/* non-exclusive license for use of this work by or on behalf */ +/* of the U.S. Government. Export of this program may require */ +/* a license from the United States Government. */ +/*--------------------------------------------------------------------*/ + // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. diff --git a/packages/percept/src/percept/mesh/geometry/stk_geom/3D/GregoryPatch_Quad.mcpp b/packages/percept/src/percept/mesh/geometry/stk_geom/3D/GregoryPatch_Quad.mcpp index bcb70d8fec54..175fe01fc858 100644 --- a/packages/percept/src/percept/mesh/geometry/stk_geom/3D/GregoryPatch_Quad.mcpp +++ b/packages/percept/src/percept/mesh/geometry/stk_geom/3D/GregoryPatch_Quad.mcpp @@ -1,7 +1,12 @@ -// Copyright 2014 Sandia Corporation. Under the terms of -// Contract DE-AC04-94AL85000 with Sandia Corporation, the -// U.S. Government retains certain rights in this software. -// +/*--------------------------------------------------------------------*/ +/* Copyright 2002 - 2008, 2010, 2011 National Technology & */ +/* Engineering Solutions of Sandia, LLC (NTESS). Under the terms */ +/* of Contract DE-NA0003525 with NTESS, there is a */ +/* non-exclusive license for use of this work by or on behalf */ +/* of the U.S. Government. Export of this program may require */ +/* a license from the United States Government. */ +/*--------------------------------------------------------------------*/ + // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. diff --git a/packages/percept/src/percept/mesh/geometry/stk_geom/3D/GregoryPatch_Tri.mcpp b/packages/percept/src/percept/mesh/geometry/stk_geom/3D/GregoryPatch_Tri.mcpp index 3566c2b665b8..7f68af787d1e 100644 --- a/packages/percept/src/percept/mesh/geometry/stk_geom/3D/GregoryPatch_Tri.mcpp +++ b/packages/percept/src/percept/mesh/geometry/stk_geom/3D/GregoryPatch_Tri.mcpp @@ -1,7 +1,12 @@ -// Copyright 2014 Sandia Corporation. Under the terms of -// Contract DE-AC04-94AL85000 with Sandia Corporation, the -// U.S. Government retains certain rights in this software. -// +/*--------------------------------------------------------------------*/ +/* Copyright 2002 - 2008, 2010, 2011 National Technology & */ +/* Engineering Solutions of Sandia, LLC (NTESS). Under the terms */ +/* of Contract DE-NA0003525 with NTESS, there is a */ +/* non-exclusive license for use of this work by or on behalf */ +/* of the U.S. Government. Export of this program may require */ +/* a license from the United States Government. */ +/*--------------------------------------------------------------------*/ + // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. diff --git a/packages/percept/src/percept/mesh/geometry/volume/sierra_only/FiniteVolumeMesh.cpp b/packages/percept/src/percept/mesh/geometry/volume/sierra_only/FiniteVolumeMesh.cpp index c9c5afbfea88..aba48cea110e 100644 --- a/packages/percept/src/percept/mesh/geometry/volume/sierra_only/FiniteVolumeMesh.cpp +++ b/packages/percept/src/percept/mesh/geometry/volume/sierra_only/FiniteVolumeMesh.cpp @@ -21,7 +21,6 @@ #include // for all_reduce_max, etc #include // for basic_string, operator<< #include // for pair -#include "boost/unordered/unordered_set.hpp" #include "stk_mesh/base/Bucket.hpp" // for Bucket, Bucket::iterator #include "stk_mesh/base/BulkData.hpp" // for BulkData #include "stk_mesh/base/Entity.hpp" // for Entity diff --git a/packages/percept/src/percept/mesh/mod/smoother/ReferenceMeshSmootherAlgebraic.cpp b/packages/percept/src/percept/mesh/mod/smoother/ReferenceMeshSmootherAlgebraic.cpp index 6e5b1384eb36..470c211fb1a4 100644 --- a/packages/percept/src/percept/mesh/mod/smoother/ReferenceMeshSmootherAlgebraic.cpp +++ b/packages/percept/src/percept/mesh/mod/smoother/ReferenceMeshSmootherAlgebraic.cpp @@ -13,7 +13,6 @@ #include #include #include -#include #include #include diff --git a/packages/percept/src/percept/mesh/mod/smoother/ReferenceMeshSmootherBase.hpp b/packages/percept/src/percept/mesh/mod/smoother/ReferenceMeshSmootherBase.hpp index 6179d53f0f92..cbe3b5e0a2d1 100644 --- a/packages/percept/src/percept/mesh/mod/smoother/ReferenceMeshSmootherBase.hpp +++ b/packages/percept/src/percept/mesh/mod/smoother/ReferenceMeshSmootherBase.hpp @@ -14,7 +14,8 @@ #include #include -#include +#include +#include #include #include @@ -29,7 +30,7 @@ class ReferenceMeshSmootherBaseImpl : public MeshSmootherImpl { using Base = MeshSmootherImpl; - typedef boost::unordered_map > NodeMap; + typedef std::unordered_map > NodeMap; ReferenceMeshSmootherBaseImpl(PerceptMesh *eMesh, // typename MeshType::MTSelector *boundary_selector=0, diff --git a/packages/percept/src/percept/mesh/mod/smoother/ReferenceMeshSmootherConjugateGradient.cpp b/packages/percept/src/percept/mesh/mod/smoother/ReferenceMeshSmootherConjugateGradient.cpp index cd759143dcab..205a6a1314fa 100644 --- a/packages/percept/src/percept/mesh/mod/smoother/ReferenceMeshSmootherConjugateGradient.cpp +++ b/packages/percept/src/percept/mesh/mod/smoother/ReferenceMeshSmootherConjugateGradient.cpp @@ -12,7 +12,6 @@ #include #include #include -#include #include diff --git a/packages/percept/src/percept/mesh/mod/smoother/ScalingMatricesGen.mhpp b/packages/percept/src/percept/mesh/mod/smoother/ScalingMatricesGen.mhpp index eeca23552bab..df885de0679b 100644 --- a/packages/percept/src/percept/mesh/mod/smoother/ScalingMatricesGen.mhpp +++ b/packages/percept/src/percept/mesh/mod/smoother/ScalingMatricesGen.mhpp @@ -1,7 +1,12 @@ -// Copyright 2014 Sandia Corporation. Under the terms of -// Contract DE-AC04-94AL85000 with Sandia Corporation, the -// U.S. Government retains certain rights in this software. -// +/*--------------------------------------------------------------------*/ +/* Copyright 2002 - 2008, 2010, 2011 National Technology & */ +/* Engineering Solutions of Sandia, LLC (NTESS). Under the terms */ +/* of Contract DE-NA0003525 with NTESS, there is a */ +/* non-exclusive license for use of this work by or on behalf */ +/* of the U.S. Government. Export of this program may require */ +/* a license from the United States Government. */ +/*--------------------------------------------------------------------*/ + // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. diff --git a/packages/percept/src/percept/mesh/mod/smoother/SmootherMetric.hpp b/packages/percept/src/percept/mesh/mod/smoother/SmootherMetric.hpp index 84ab33caf2c4..795eff7408d1 100644 --- a/packages/percept/src/percept/mesh/mod/smoother/SmootherMetric.hpp +++ b/packages/percept/src/percept/mesh/mod/smoother/SmootherMetric.hpp @@ -16,7 +16,6 @@ #include #include #include -#include #include #include "SGridJacobianUtil.hpp" #include diff --git a/packages/percept/src/percept/mesh/mod/smoother/SmootherMetricGen.mhpp b/packages/percept/src/percept/mesh/mod/smoother/SmootherMetricGen.mhpp index c6974481c7d1..44135e5c5c96 100644 --- a/packages/percept/src/percept/mesh/mod/smoother/SmootherMetricGen.mhpp +++ b/packages/percept/src/percept/mesh/mod/smoother/SmootherMetricGen.mhpp @@ -1,7 +1,12 @@ -// Copyright 2014 Sandia Corporation. Under the terms of -// Contract DE-AC04-94AL85000 with Sandia Corporation, the -// U.S. Government retains certain rights in this software. -// +/*--------------------------------------------------------------------*/ +/* Copyright 2002 - 2008, 2010, 2011 National Technology & */ +/* Engineering Solutions of Sandia, LLC (NTESS). Under the terms */ +/* of Contract DE-NA0003525 with NTESS, there is a */ +/* non-exclusive license for use of this work by or on behalf */ +/* of the U.S. Government. Export of this program may require */ +/* a license from the United States Government. */ +/*--------------------------------------------------------------------*/ + // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. diff --git a/packages/percept/src/percept/mesh/mod/smoother/future-dev/ReferenceMeshSmoother2.cpp b/packages/percept/src/percept/mesh/mod/smoother/future-dev/ReferenceMeshSmoother2.cpp index 55f4009ddf3a..c879daa94769 100644 --- a/packages/percept/src/percept/mesh/mod/smoother/future-dev/ReferenceMeshSmoother2.cpp +++ b/packages/percept/src/percept/mesh/mod/smoother/future-dev/ReferenceMeshSmoother2.cpp @@ -13,7 +13,6 @@ #include #include #include -#include #include #include diff --git a/packages/percept/src/percept/mesh/mod/smoother/future-dev/ReferenceMeshSmoother3.cpp b/packages/percept/src/percept/mesh/mod/smoother/future-dev/ReferenceMeshSmoother3.cpp index a61fd571c3c8..2b491d86bb68 100644 --- a/packages/percept/src/percept/mesh/mod/smoother/future-dev/ReferenceMeshSmoother3.cpp +++ b/packages/percept/src/percept/mesh/mod/smoother/future-dev/ReferenceMeshSmoother3.cpp @@ -13,7 +13,6 @@ #include #include #include -#include #include #include diff --git a/packages/percept/src/percept/mesh_transfer/MeshTransfer.cpp b/packages/percept/src/percept/mesh_transfer/MeshTransfer.cpp index d99aa274aa94..5d574357da2e 100644 --- a/packages/percept/src/percept/mesh_transfer/MeshTransfer.cpp +++ b/packages/percept/src/percept/mesh_transfer/MeshTransfer.cpp @@ -165,7 +165,7 @@ void MeshTransfer::run(int argc, char** argv) srcMesh.commit(); dstMesh.commit(); - boost::shared_ptr mesh_transfer = + std::shared_ptr mesh_transfer = buildSTKMeshTransfer(*(srcMesh.get_bulk_data()), srcMesh.get_coordinates_field(), fromField, diff --git a/packages/percept/src/percept/pool.cpp b/packages/percept/src/percept/pool.cpp index 9a206aaa4dcc..37ee279db93b 100644 --- a/packages/percept/src/percept/pool.cpp +++ b/packages/percept/src/percept/pool.cpp @@ -13,11 +13,11 @@ Pool::Pool( size_t granularity, size_t size ) { if( m_size > 0 ) { - m_storage.reset( new char[m_size*granularity] ); - m_slots.reset( new void*[m_size] ); + m_storage.resize(m_size*granularity); + m_slots.resize(m_size); for( size_t i = 0; i < m_size; ++i ) - m_slots[i] = reinterpret_cast( m_storage.get() + i*granularity ); + m_slots[i] = reinterpret_cast( m_storage.data() + i*granularity ); } } diff --git a/packages/percept/src/percept/pool.h b/packages/percept/src/percept/pool.h index 38715c1a4e1e..05dfb55aefba 100644 --- a/packages/percept/src/percept/pool.h +++ b/packages/percept/src/percept/pool.h @@ -1,7 +1,9 @@ #ifndef INCL_CORE_POOL #define INCL_CORE_POOL -#include +#include +#include +#include //! Simple pool class. class Pool @@ -13,7 +15,7 @@ class Pool //! Checks for emptiness before destructing. ~Pool(); - void Reset() { m_used = 0; m_overflow = 0; } + void Reset() { m_used = 0; m_overflow = 0; } //! Gets the pool granularity. size_t GetGranularity() const { return m_granularity; } @@ -58,7 +60,7 @@ class Pool bool IsFromPool( void const* instance ) const { char const* block = reinterpret_cast( instance ); - return m_storage.get() <= block && block < ( m_storage.get() + m_size*m_granularity ); + return m_storage.data() <= block && block < ( m_storage.data() + m_size*m_granularity ); } size_t m_granularity; //!< The size of each element in the pool in bytes. @@ -66,8 +68,8 @@ class Pool size_t m_used; //!< The number of pooled allocations. size_t m_overflow; //!< The number of non-pooled allocations. - boost::scoped_array m_storage; //!< The pool storage. - boost::scoped_array m_slots; //!< The free list. + std::vector m_storage; //!< The pool storage. + std::vector m_slots; //!< The free list. }; #endif // ndef INCL_CORE_POOL diff --git a/packages/percept/src/percept/stk_rebalance/ZoltanPartition.hpp b/packages/percept/src/percept/stk_rebalance/ZoltanPartition.hpp index bd28070a68fd..8e225f933ec7 100644 --- a/packages/percept/src/percept/stk_rebalance/ZoltanPartition.hpp +++ b/packages/percept/src/percept/stk_rebalance/ZoltanPartition.hpp @@ -13,15 +13,23 @@ /* filename: ZoltanPartition.h */ /* purpose: header file for stk toolkit zoltan methods */ /* */ -/*----------------------------------------------------------------------*/ -/* Copyright 2001,2010 Sandia Corporation. */ -/* Under the terms of Contract DE-AC04-94AL85000, there is a */ -/* non-exclusive license for use of this work by or on behalf */ -/* of the U.S. Government. Export of this program may require */ -/* a license from the United States Government. */ -/*----------------------------------------------------------------------*/ - -// Copyright 2001 Sandia Corporation, Albuquerque, NM. +/*--------------------------------------------------------------------*/ +/* Copyright 2002 - 2008, 2010, 2011 National Technology & */ +/* Engineering Solutions of Sandia, LLC (NTESS). Under the terms */ +/* of Contract DE-NA0003525 with NTESS, there is a */ +/* non-exclusive license for use of this work by or on behalf */ +/* of the U.S. Government. Export of this program may require */ +/* a license from the United States Government. */ +/*--------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------*/ +/* Copyright 2002 - 2008, 2010, 2011 National Technology & */ +/* Engineering Solutions of Sandia, LLC (NTESS). Under the terms */ +/* of Contract DE-NA0003525 with NTESS, there is a */ +/* non-exclusive license for use of this work by or on behalf */ +/* of the U.S. Government. Export of this program may require */ +/* a license from the United States Government. */ +/*--------------------------------------------------------------------*/ #ifndef stk_rebalance_ZoltanPartition_hpp #define stk_rebalance_ZoltanPartition_hpp diff --git a/packages/percept/src/percept/structured/StructuredCellIndex.hpp b/packages/percept/src/percept/structured/StructuredCellIndex.hpp index 75d17e561212..4a67b07cdad3 100644 --- a/packages/percept/src/percept/structured/StructuredCellIndex.hpp +++ b/packages/percept/src/percept/structured/StructuredCellIndex.hpp @@ -12,10 +12,24 @@ #include #include +#include + namespace percept { using StructuredCellIndex = std::array; // i,j,k, block } +namespace std { + + template<> + struct hash + { + size_t operator()(const percept::StructuredCellIndex& e) const + { + return hash()(e[0]+e[1]+e[2]+e[3]); + } + }; +} + #endif diff --git a/packages/percept/src/percept/structured/StructuredGridRefiner.cpp b/packages/percept/src/percept/structured/StructuredGridRefiner.cpp index cea87d8502d6..c04ba3683842 100644 --- a/packages/percept/src/percept/structured/StructuredGridRefiner.cpp +++ b/packages/percept/src/percept/structured/StructuredGridRefiner.cpp @@ -35,21 +35,21 @@ namespace percept { unsigned StructuredGridRefiner::do_refine_structured() { + unsigned num_refined_cells = 0; + #if HAVE_CGNS m_output->m_sblocks.resize(0); const int my_rank = stk::parallel_machine_rank(m_output->m_comm); - unsigned num_refined_cells = 0; - double runTime = 0; for (unsigned iblock=0; iblock < m_input->m_sblocks.size(); ++iblock) { std::shared_ptr sgi = m_input->m_sblocks[iblock]; std::array nijk{{0,0,0,0,0,0,0,0,0}}; - std::array node_size_global{{sgi->m_sizes.node_size_global[0], + std::array node_size_global{{sgi->m_sizes.node_size_global[0], sgi->m_sizes.node_size_global[1], sgi->m_sizes.node_size_global[2]}}; - + std::shared_ptr sgiNew ( new StructuredBlock(sgi->m_comm, iblock, nijk, node_size_global, sgi->m_name+"_refined", sgi->m_base, sgi->m_zone, m_output.get()) ); m_output->m_sblocks.push_back(sgiNew); @@ -82,7 +82,7 @@ namespace percept { if (debug && my_rank == 0) std::cout << "StructuredGridRefiner: start block " << sgi->m_name << " refine..." << std::endl; - + struct timeval begin, end; gettimeofday(&begin,NULL); { @@ -95,16 +95,16 @@ namespace percept { gettimeofday(&end,NULL); runTime += 1.0*(end.tv_sec-begin.tv_sec) + 1.0e-6*(end.tv_usec-begin.tv_usec); - + // deal with zone connectivity { int nconn = sgi->m_zoneConnectivity.size(); for (int i = 0; i < nconn; i++) { Ioss::ZoneConnectivity& zc = sgi->m_zoneConnectivity[i]; - + std::string connectname = zc.m_connectionName; std::string donorname = zc.m_donorName; - + std::array range_beg = zc.m_ownerRangeBeg; std::array range_end = zc.m_ownerRangeEnd; std::array donor_beg = zc.m_donorRangeBeg; @@ -123,26 +123,24 @@ namespace percept { int owner_zone = zc.m_ownerZone; (void) owner_zone; int donor_zone = zc.m_donorZone; - - bool owns_nodes = sgi->m_zone < donor_zone || donor_zone == -1; + sgiNew->m_zoneConnectivity.emplace_back(connectname, sgi->m_zone, donorname, donor_zone, transform, - range_beg, range_end, donor_beg, donor_end, - owns_nodes); + range_beg, range_end, donor_beg, donor_end); } } - + // deal with boundary conditions { int nbc = sgi->m_boundaryConditions.size(); for (int i = 0; i < nbc; i++) { Ioss::BoundaryCondition& bc = sgi->m_boundaryConditions[i]; - + std::string bcname = bc.m_bcName; //std::string donorname = zc.m_donorName; // FIXME CG_BCType_t bctype = CGNS_ENUMV( BCTypeNull ); (void)bctype; - + Ioss::IJK_t range_beg = bc.m_rangeBeg; Ioss::IJK_t range_end = bc.m_rangeEnd; for (unsigned j=0; j < 3; ++j) @@ -151,7 +149,7 @@ namespace percept { range_end[j] = 2*(range_end[j] - m_index_base) + m_index_base; } - + sgiNew->m_boundaryConditions.emplace_back(bcname, range_beg, range_end); } } @@ -163,11 +161,9 @@ namespace percept { std::cout << "Total number of cells after refinement = " << num_refined_cells << std::endl; std::cout << "Runtime (seconds) over " << m_input->m_sblocks.size() << " blocks was " << runTime << std::endl; } +#endif return num_refined_cells; -#else - return 0; -#endif } unsigned StructuredGridRefiner::do_refine() @@ -293,5 +289,3 @@ namespace percept { } - - diff --git a/packages/percept/src/percept/xfer/LinInterp.hpp b/packages/percept/src/percept/xfer/LinInterp.hpp index 8906bd980452..c661c4b2b84e 100644 --- a/packages/percept/src/percept/xfer/LinInterp.hpp +++ b/packages/percept/src/percept/xfer/LinInterp.hpp @@ -167,6 +167,9 @@ LinInterp::filter_to_nearest ( } dist = std::sqrt(dist); } + else if (topo.getKey()==shards::Beam<2>::key) { + // do nothing + } else { Intrepid::CellTools::mapToReferenceFrame(outputParametricPoints, inputPhysicalPoints, @@ -350,6 +353,10 @@ LinInterp::apply_from_nodal_field ( if (topo.getKey()==shards::Particle::key) { basisVals(0,0) = 1.0; } + else if(topo.getKey()==shards::Beam<2>::key) { + basisVals(0,0) = 0.5; + basisVals(1,0) = 0.5; + } else { Teuchos::RCP > > HGRAD_Basis = BasisTable::getBasis(topo); diff --git a/packages/percept/src/percept/xfer/STKMeshTransferSetup.hpp b/packages/percept/src/percept/xfer/STKMeshTransferSetup.hpp index a9b7e4d878c5..d17ac6f5e726 100644 --- a/packages/percept/src/percept/xfer/STKMeshTransferSetup.hpp +++ b/packages/percept/src/percept/xfer/STKMeshTransferSetup.hpp @@ -27,7 +27,7 @@ typedef stk::transfer::GeometricTransfer< class LinInterp< FMesh, TMesh > > STK template inline -boost::shared_ptr +std::shared_ptr buildSTKMeshTransfer(stk::mesh::BulkData &bulkData_from, stk::mesh::Field * coordinates_from, stk::mesh::FieldBase * field_from, @@ -49,13 +49,13 @@ buildSTKMeshTransfer(stk::mesh::BulkData &bulkData_from, transferType = TWOD_AXI_TO_THREED; } - boost::shared_ptr + std::shared_ptr from_mesh (new FMesh(bulkData_from, coordinates_from, field_from, bulkData_from.parallel())); - boost::shared_ptr + std::shared_ptr to_mesh (new TMesh(bulkData_to, coordinates_to, field_to, @@ -63,7 +63,7 @@ buildSTKMeshTransfer(stk::mesh::BulkData &bulkData_from, transferType, srcFieldType)); - boost::shared_ptr + std::shared_ptr mesh_transfer(new SMT(from_mesh, to_mesh, transfer_name, expansion_factor)); return mesh_transfer; @@ -76,16 +76,16 @@ initializeSTKMeshTransfer(SMT * mesh_transfer) { mesh_transfer->coarse_search(); - mesh_transfer->mesha()->fromBulkData_.modification_begin(); + mesh_transfer->meshA()->fromBulkData_.modification_begin(); // based on Transfer::change_ghosting() in conchas2 // which calls Transfer::ghost_from_elements(); STKMeshTransfer::MeshA::EntityProcVec entity_keys; mesh_transfer->determine_entities_to_copy(entity_keys); - mesh_transfer->mesha()->update_ghosting(entity_keys); + mesh_transfer->meshA()->update_ghosting(entity_keys); - stk::mesh::fixup_ghosted_to_shared_nodes(mesh_transfer->mesha()->fromBulkData_); - mesh_transfer->mesha()->fromBulkData_.modification_end(); + stk::mesh::fixup_ghosted_to_shared_nodes(mesh_transfer->meshA()->fromBulkData_); + mesh_transfer->meshA()->fromBulkData_.modification_end(); mesh_transfer->local_search(); } diff --git a/packages/percept/src/percept/xfer/ToMesh.hpp b/packages/percept/src/percept/xfer/ToMesh.hpp index 3e2e9bfb79b8..d46289c783ed 100644 --- a/packages/percept/src/percept/xfer/ToMesh.hpp +++ b/packages/percept/src/percept/xfer/ToMesh.hpp @@ -24,7 +24,6 @@ #include #include -#include #include #include