Loading src/TNL/Meshes/Mesh.h +4 −0 Original line number Diff line number Diff line Loading @@ -301,6 +301,10 @@ protected: template< int EntityDimension, int SubentityDimension > void setSubentitiesCounts( const typename MeshTraitsType::NeighborCountsArray& counts ); template< int EntityDimension, int SubentityDimension > void setSubentitiesCounts( typename MeshTraitsType::NeighborCountsArray&& counts ); }; template< typename MeshConfig, typename Device > Loading src/TNL/Meshes/Mesh.hpp +8 −0 Original line number Diff line number Diff line Loading @@ -144,6 +144,14 @@ Mesh< MeshConfig, Device >::setSubentitiesCounts( const typename MeshTraitsType: StorageBaseType::template setSubentitiesCounts< EntityDimension, SubentityDimension >( counts ); } template< typename MeshConfig, typename Device > template< int EntityDimension, int SubentityDimension > void Mesh< MeshConfig, Device >::setSubentitiesCounts( typename MeshTraitsType::NeighborCountsArray&& counts ) { StorageBaseType::template setSubentitiesCounts< EntityDimension, SubentityDimension >( std::move( counts ) ); } template< typename MeshConfig, typename Device > template< int EntityDimension, int SubentityDimension > __cuda_callable__ Loading src/TNL/Meshes/MeshDetails/IndexPermutationApplier.h +12 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,18 @@ private: static void exec( Mesh& mesh, const GlobalIndexArray& perm ) { using EntityTopology = typename Mesh::template EntityType< Dimension >::EntityTopology; if( Topologies::IsDynamicTopology< EntityTopology >::value ) { // copy the subentity counts into an array typename Mesh::MeshTraitsType::NeighborCountsArray counts( perm.getSize() ); for( typename GlobalIndexArray::ValueType i = 0; i < perm.getSize(); i++ ) counts[ i ] = mesh.template getSubentitiesCount< Dimension, Subdimension >( i ); // permute the array permuteArray( counts, perm ); // set the permuted counts mesh.template setSubentitiesCounts< Dimension, Subdimension >( std::move( counts ) ); } auto& subentitiesStorage = mesh.template getSubentitiesMatrix< Dimension, Subdimension >(); Matrices::permuteMatrixRows( subentitiesStorage, perm ); } Loading src/TNL/Meshes/MeshDetails/layers/StorageLayer.h +12 −0 Original line number Diff line number Diff line Loading @@ -85,6 +85,18 @@ public: BaseType::template setSubentitiesCounts< Subdimension >( counts ); } template< int Dimension, int Subdimension > void setSubentitiesCounts( typename MeshTraitsType::NeighborCountsArray&& counts ) { static_assert( Dimension > Subdimension, "Invalid combination of Dimension and Subdimension." ); static_assert( SubentityTraits< Dimension, Subdimension >::storageEnabled, "You try to set subentitiesCounts for a combination of Dimension and Subdimension which is disabled in " "the mesh configuration." ); using BaseType = SubentityStorageLayerFamily< MeshConfig, Device, typename EntityTraits< Dimension >::EntityTopology >; BaseType::template setSubentitiesCounts< Subdimension >( std::move( counts ) ); } template< int Dimension, int Subdimension > __cuda_callable__ typename MeshTraitsType::LocalIndexType Loading Loading
src/TNL/Meshes/Mesh.h +4 −0 Original line number Diff line number Diff line Loading @@ -301,6 +301,10 @@ protected: template< int EntityDimension, int SubentityDimension > void setSubentitiesCounts( const typename MeshTraitsType::NeighborCountsArray& counts ); template< int EntityDimension, int SubentityDimension > void setSubentitiesCounts( typename MeshTraitsType::NeighborCountsArray&& counts ); }; template< typename MeshConfig, typename Device > Loading
src/TNL/Meshes/Mesh.hpp +8 −0 Original line number Diff line number Diff line Loading @@ -144,6 +144,14 @@ Mesh< MeshConfig, Device >::setSubentitiesCounts( const typename MeshTraitsType: StorageBaseType::template setSubentitiesCounts< EntityDimension, SubentityDimension >( counts ); } template< typename MeshConfig, typename Device > template< int EntityDimension, int SubentityDimension > void Mesh< MeshConfig, Device >::setSubentitiesCounts( typename MeshTraitsType::NeighborCountsArray&& counts ) { StorageBaseType::template setSubentitiesCounts< EntityDimension, SubentityDimension >( std::move( counts ) ); } template< typename MeshConfig, typename Device > template< int EntityDimension, int SubentityDimension > __cuda_callable__ Loading
src/TNL/Meshes/MeshDetails/IndexPermutationApplier.h +12 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,18 @@ private: static void exec( Mesh& mesh, const GlobalIndexArray& perm ) { using EntityTopology = typename Mesh::template EntityType< Dimension >::EntityTopology; if( Topologies::IsDynamicTopology< EntityTopology >::value ) { // copy the subentity counts into an array typename Mesh::MeshTraitsType::NeighborCountsArray counts( perm.getSize() ); for( typename GlobalIndexArray::ValueType i = 0; i < perm.getSize(); i++ ) counts[ i ] = mesh.template getSubentitiesCount< Dimension, Subdimension >( i ); // permute the array permuteArray( counts, perm ); // set the permuted counts mesh.template setSubentitiesCounts< Dimension, Subdimension >( std::move( counts ) ); } auto& subentitiesStorage = mesh.template getSubentitiesMatrix< Dimension, Subdimension >(); Matrices::permuteMatrixRows( subentitiesStorage, perm ); } Loading
src/TNL/Meshes/MeshDetails/layers/StorageLayer.h +12 −0 Original line number Diff line number Diff line Loading @@ -85,6 +85,18 @@ public: BaseType::template setSubentitiesCounts< Subdimension >( counts ); } template< int Dimension, int Subdimension > void setSubentitiesCounts( typename MeshTraitsType::NeighborCountsArray&& counts ) { static_assert( Dimension > Subdimension, "Invalid combination of Dimension and Subdimension." ); static_assert( SubentityTraits< Dimension, Subdimension >::storageEnabled, "You try to set subentitiesCounts for a combination of Dimension and Subdimension which is disabled in " "the mesh configuration." ); using BaseType = SubentityStorageLayerFamily< MeshConfig, Device, typename EntityTraits< Dimension >::EntityTopology >; BaseType::template setSubentitiesCounts< Subdimension >( std::move( counts ) ); } template< int Dimension, int Subdimension > __cuda_callable__ typename MeshTraitsType::LocalIndexType Loading