Loading src/TNL/Meshes/BuildConfigTags.h +6 −6 Original line number Diff line number Diff line Loading @@ -50,10 +50,10 @@ template< typename ConfigTag, typename Index > struct GridIndexTag { enum { enab // individual per-type tags. template< typename ConfigTag, typename MeshType > struct GridTag { enum { enabled = false }; }; template< typename ConfigTag, int Dimensions, typename Real, typename Device, typename Index > struct GridTag< ConfigTag, Grid< Dimensions, Real, Device, Index > > template< typename ConfigTag, int Dimension, typename Real, typename Device, typename Index > struct GridTag< ConfigTag, Grid< Dimension, Real, Device, Index > > { enum { enabled = GridDimensionTag< ConfigTag, Dimensions >::enabled && enum { enabled = GridDimensionTag< ConfigTag, Dimension >::enabled && GridRealTag< ConfigTag, Real >::enabled && GridDeviceTag< ConfigTag, Device >::enabled && GridIndexTag< ConfigTag, Index >::enabled Loading Loading @@ -81,7 +81,7 @@ template< typename ConfigTag, typename CellTopology > struct MeshCellTopologyTag //template< typename ConfigTag > struct MeshCellTopologyTag< ConfigTag, MeshSimplexTopology > { enum { enabled = true }; }; // All sensible world dimensions are enabled by default. template< typename ConfigTag, typename CellTopology, int WorldDimension > struct MeshWorldDimensionTag { enum { enabled = ( WorldDimension >= CellTopology::dimensions && WorldDimension <= 3 ) }; }; template< typename ConfigTag, typename CellTopology, int WorldDimension > struct MeshWorldDimensionTag { enum { enabled = ( WorldDimension >= CellTopology::dimension && WorldDimension <= 3 ) }; }; // Meshes are enabled for all real types by default. template< typename ConfigTag, typename Real > struct MeshRealTag { enum { enabled = true }; }; Loading @@ -101,8 +101,8 @@ template< typename ConfigTag, typename GlobalIndex > struct MeshIdTag< ConfigTag template< typename ConfigTag > struct MeshConfigTemplateTag { template< typename Cell, int WorldDimensions, typename Real, typename GlobalIndex, typename LocalIndex, typename Id > using MeshConfig = MeshConfigBase< Cell, WorldDimensions, Real, GlobalIndex, LocalIndex, Id >; template< typename Cell, int WorldDimension, typename Real, typename GlobalIndex, typename LocalIndex, typename Id > using MeshConfig = MeshConfigBase< Cell, WorldDimension, Real, GlobalIndex, LocalIndex, Id >; }; // The Mesh is enabled for allowed Device, CellTopology, WorldDimension, Real, Loading src/TNL/Meshes/CMakeLists.txt +1 −1 Original line number Diff line number Diff line Loading @@ -7,8 +7,8 @@ ADD_SUBDIRECTORY( TypeResolver ) SET( headers Grid.h GridEntity.h GridEntityConfig.h DimensionTag.h DummyMesh.h MeshDimensionTag.h Mesh.h MeshEntity.h Traverser.h Loading src/TNL/Meshes/MeshDimensionTag.h→src/TNL/Meshes/DimensionTag.h +10 −16 Original line number Diff line number Diff line /*************************************************************************** MeshDimensionTag.h - description DimensionTag.h - description ------------------- begin : Feb 11, 2014 copyright : (C) 2014 by Tomas Oberhuber et al. Loading @@ -8,12 +8,6 @@ /* See Copyright Notice in tnl/Copyright */ /*** * Authors: * Oberhuber Tomas, tomas.oberhuber@fjfi.cvut.cz * Zabka Vitezslav, zabkav@gmail.com */ #pragma once #include <TNL/Assert.h> Loading @@ -30,32 +24,32 @@ namespace Meshes { * expression is a simple identifier. * * Therefore one cannot specialize the mesh layers just by integers saying the mesh * layer dimensions but instead this tag must be used. This makes the code more difficult * layer dimension but instead this tag must be used. This makes the code more difficult * to read and we would like to avoid it if it is possible sometime. * On the other hand, MeshDimensionTag is also used for method overloading when * On the other hand, DimensionTag is also used for method overloading when * asking for different mesh entities. In this case it makes sense and it cannot be * replaced. */ template< int Dimension > class MeshDimensionTag class DimensionTag { static_assert( Dimensions >= 0, "The value of the dimensions cannot be negative." ); static_assert( Dimension >= 0, "The dimension cannot be negative." ); public: static constexpr int value = Dimensions; static constexpr int value = Dimension; using Decrement = MeshDimensionsTag< Dimensions - 1 >; using Increment = MeshDimensionsTag< Dimensions + 1 >; using Decrement = DimensionTag< Dimension - 1 >; using Increment = DimensionTag< Dimension + 1 >; }; template<> class MeshDimensionTag< 0 > class DimensionTag< 0 > { public: static const int value = 0; using Increment = MeshDimensionsTag< 1 >; using Increment = DimensionTag< 1 >; }; } // namespace Meshes Loading src/TNL/Meshes/GridDetails/NeighborGridEntitiesStorage.h +6 −6 Original line number Diff line number Diff line Loading @@ -11,7 +11,7 @@ #pragma once #include <TNL/Devices/Cuda.h> #include <TNL/Meshes/MeshDimensionTag.h> #include <TNL/Meshes/DimensionTag.h> #include <TNL/Meshes/GridEntityConfig.h> #include <TNL/Meshes/GridDetails/NeighborGridEntityGetter.h> Loading Loading @@ -44,7 +44,7 @@ class NeighborGridEntityLayer< GridEntity, NeighborEntityDimension, GridEntityCo {} __cuda_callable__ const NeighborEntityGetterType& getNeighborEntities( const MeshDimensionTag< NeighborEntityDimension>& tag ) const const NeighborEntityGetterType& getNeighborEntities( const DimensionTag< NeighborEntityDimension>& tag ) const { return this->neighborEntities; } Loading Loading @@ -76,7 +76,7 @@ class NeighborGridEntityLayer< GridEntity, 0, GridEntityConfig, true > {} __cuda_callable__ const NeighborEntityGetterType& getNeighborEntities( const MeshDimensionTag< 0 >& tag ) const const NeighborEntityGetterType& getNeighborEntities( const DimensionTag< 0 >& tag ) const { return this->neighborEntities; } Loading Loading @@ -112,7 +112,7 @@ class NeighborGridEntityLayer< GridEntity, NeighborEntityDimension, GridEntityCo {} __cuda_callable__ const NeighborEntityGetterType& getNeighborEntities( const MeshDimensionTag< NeighborEntityDimension >& tag ) const {} const NeighborEntityGetterType& getNeighborEntities( const DimensionTag< NeighborEntityDimension >& tag ) const {} __cuda_callable__ void refresh( const typename GridEntity::GridType& grid, Loading @@ -131,7 +131,7 @@ class NeighborGridEntityLayer< GridEntity, 0, GridEntityConfig, false > NeighborGridEntityLayer( const GridEntity& entity ){} __cuda_callable__ const NeighborEntityGetterType& getNeighborEntities( const MeshDimensionTag< 0 >& tag ) const {} const NeighborEntityGetterType& getNeighborEntities( const DimensionTag< 0 >& tag ) const {} __cuda_callable__ void refresh( const typename GridEntity::GridType& grid, Loading Loading @@ -163,7 +163,7 @@ class NeighborGridEntitiesStorage const NeighborGridEntityGetter< GridEntity, EntityDimension >& getNeighborEntities() const { return BaseType::getNeighborEntities( MeshDimensionTag< EntityDimension >() ); return BaseType::getNeighborEntities( DimensionTag< EntityDimension >() ); } }; Loading src/TNL/Meshes/Mesh.h +12 −12 Original line number Diff line number Diff line Loading @@ -45,32 +45,32 @@ class Mesh using CellType = typename MeshTraitsType::CellType; using VertexType = typename MeshTraitsType::VertexType; using PointType = typename MeshTraitsType::PointType; static constexpr int dimensions = MeshTraitsType::meshDimensions; static constexpr int dimension = MeshTraitsType::meshDimension; template< int Dimensions > using EntityTraits = typename MeshTraitsType::template EntityTraits< Dimensions >; template< int Dimension > using EntityTraits = typename MeshTraitsType::template EntityTraits< Dimension >; template< int Dimensions > using EntityType = typename EntityTraits< Dimensions >::EntityType; template< int Dimension > using EntityType = typename EntityTraits< Dimension >::EntityType; static String getType(); virtual String getTypeVirtual() const; static constexpr int getDimensions(); static constexpr int getMeshDimension(); template< int Dimensions > template< int Dimension > static constexpr bool entitiesAvailable(); // TODO: rename to getEntitiesCount template< int Dimension > GlobalIndexType getNumberOfEntities() const; template< int Dimensions > EntityType< Dimensions >& getEntity( const GlobalIndexType& entityIndex ); template< int Dimension > EntityType< Dimension >& getEntity( const GlobalIndexType& entityIndex ); template< int Dimensions > const EntityType< Dimensions >& getEntity( const GlobalIndexType& entityIndex ) const; template< int Dimension > const EntityType< Dimension >& getEntity( const GlobalIndexType& entityIndex ) const; GlobalIndexType getNumberOfCells() const; Loading Loading @@ -103,7 +103,7 @@ class Mesh friend MeshInitializer< MeshConfig >; template< typename Mesh, typename DimensionsTag, typename SuperdimensionsTag > template< typename Mesh, typename DimensionTag, typename SuperdimensionTag > friend struct MeshEntityStorageRebinderWorker; }; Loading Loading
src/TNL/Meshes/BuildConfigTags.h +6 −6 Original line number Diff line number Diff line Loading @@ -50,10 +50,10 @@ template< typename ConfigTag, typename Index > struct GridIndexTag { enum { enab // individual per-type tags. template< typename ConfigTag, typename MeshType > struct GridTag { enum { enabled = false }; }; template< typename ConfigTag, int Dimensions, typename Real, typename Device, typename Index > struct GridTag< ConfigTag, Grid< Dimensions, Real, Device, Index > > template< typename ConfigTag, int Dimension, typename Real, typename Device, typename Index > struct GridTag< ConfigTag, Grid< Dimension, Real, Device, Index > > { enum { enabled = GridDimensionTag< ConfigTag, Dimensions >::enabled && enum { enabled = GridDimensionTag< ConfigTag, Dimension >::enabled && GridRealTag< ConfigTag, Real >::enabled && GridDeviceTag< ConfigTag, Device >::enabled && GridIndexTag< ConfigTag, Index >::enabled Loading Loading @@ -81,7 +81,7 @@ template< typename ConfigTag, typename CellTopology > struct MeshCellTopologyTag //template< typename ConfigTag > struct MeshCellTopologyTag< ConfigTag, MeshSimplexTopology > { enum { enabled = true }; }; // All sensible world dimensions are enabled by default. template< typename ConfigTag, typename CellTopology, int WorldDimension > struct MeshWorldDimensionTag { enum { enabled = ( WorldDimension >= CellTopology::dimensions && WorldDimension <= 3 ) }; }; template< typename ConfigTag, typename CellTopology, int WorldDimension > struct MeshWorldDimensionTag { enum { enabled = ( WorldDimension >= CellTopology::dimension && WorldDimension <= 3 ) }; }; // Meshes are enabled for all real types by default. template< typename ConfigTag, typename Real > struct MeshRealTag { enum { enabled = true }; }; Loading @@ -101,8 +101,8 @@ template< typename ConfigTag, typename GlobalIndex > struct MeshIdTag< ConfigTag template< typename ConfigTag > struct MeshConfigTemplateTag { template< typename Cell, int WorldDimensions, typename Real, typename GlobalIndex, typename LocalIndex, typename Id > using MeshConfig = MeshConfigBase< Cell, WorldDimensions, Real, GlobalIndex, LocalIndex, Id >; template< typename Cell, int WorldDimension, typename Real, typename GlobalIndex, typename LocalIndex, typename Id > using MeshConfig = MeshConfigBase< Cell, WorldDimension, Real, GlobalIndex, LocalIndex, Id >; }; // The Mesh is enabled for allowed Device, CellTopology, WorldDimension, Real, Loading
src/TNL/Meshes/CMakeLists.txt +1 −1 Original line number Diff line number Diff line Loading @@ -7,8 +7,8 @@ ADD_SUBDIRECTORY( TypeResolver ) SET( headers Grid.h GridEntity.h GridEntityConfig.h DimensionTag.h DummyMesh.h MeshDimensionTag.h Mesh.h MeshEntity.h Traverser.h Loading
src/TNL/Meshes/MeshDimensionTag.h→src/TNL/Meshes/DimensionTag.h +10 −16 Original line number Diff line number Diff line /*************************************************************************** MeshDimensionTag.h - description DimensionTag.h - description ------------------- begin : Feb 11, 2014 copyright : (C) 2014 by Tomas Oberhuber et al. Loading @@ -8,12 +8,6 @@ /* See Copyright Notice in tnl/Copyright */ /*** * Authors: * Oberhuber Tomas, tomas.oberhuber@fjfi.cvut.cz * Zabka Vitezslav, zabkav@gmail.com */ #pragma once #include <TNL/Assert.h> Loading @@ -30,32 +24,32 @@ namespace Meshes { * expression is a simple identifier. * * Therefore one cannot specialize the mesh layers just by integers saying the mesh * layer dimensions but instead this tag must be used. This makes the code more difficult * layer dimension but instead this tag must be used. This makes the code more difficult * to read and we would like to avoid it if it is possible sometime. * On the other hand, MeshDimensionTag is also used for method overloading when * On the other hand, DimensionTag is also used for method overloading when * asking for different mesh entities. In this case it makes sense and it cannot be * replaced. */ template< int Dimension > class MeshDimensionTag class DimensionTag { static_assert( Dimensions >= 0, "The value of the dimensions cannot be negative." ); static_assert( Dimension >= 0, "The dimension cannot be negative." ); public: static constexpr int value = Dimensions; static constexpr int value = Dimension; using Decrement = MeshDimensionsTag< Dimensions - 1 >; using Increment = MeshDimensionsTag< Dimensions + 1 >; using Decrement = DimensionTag< Dimension - 1 >; using Increment = DimensionTag< Dimension + 1 >; }; template<> class MeshDimensionTag< 0 > class DimensionTag< 0 > { public: static const int value = 0; using Increment = MeshDimensionsTag< 1 >; using Increment = DimensionTag< 1 >; }; } // namespace Meshes Loading
src/TNL/Meshes/GridDetails/NeighborGridEntitiesStorage.h +6 −6 Original line number Diff line number Diff line Loading @@ -11,7 +11,7 @@ #pragma once #include <TNL/Devices/Cuda.h> #include <TNL/Meshes/MeshDimensionTag.h> #include <TNL/Meshes/DimensionTag.h> #include <TNL/Meshes/GridEntityConfig.h> #include <TNL/Meshes/GridDetails/NeighborGridEntityGetter.h> Loading Loading @@ -44,7 +44,7 @@ class NeighborGridEntityLayer< GridEntity, NeighborEntityDimension, GridEntityCo {} __cuda_callable__ const NeighborEntityGetterType& getNeighborEntities( const MeshDimensionTag< NeighborEntityDimension>& tag ) const const NeighborEntityGetterType& getNeighborEntities( const DimensionTag< NeighborEntityDimension>& tag ) const { return this->neighborEntities; } Loading Loading @@ -76,7 +76,7 @@ class NeighborGridEntityLayer< GridEntity, 0, GridEntityConfig, true > {} __cuda_callable__ const NeighborEntityGetterType& getNeighborEntities( const MeshDimensionTag< 0 >& tag ) const const NeighborEntityGetterType& getNeighborEntities( const DimensionTag< 0 >& tag ) const { return this->neighborEntities; } Loading Loading @@ -112,7 +112,7 @@ class NeighborGridEntityLayer< GridEntity, NeighborEntityDimension, GridEntityCo {} __cuda_callable__ const NeighborEntityGetterType& getNeighborEntities( const MeshDimensionTag< NeighborEntityDimension >& tag ) const {} const NeighborEntityGetterType& getNeighborEntities( const DimensionTag< NeighborEntityDimension >& tag ) const {} __cuda_callable__ void refresh( const typename GridEntity::GridType& grid, Loading @@ -131,7 +131,7 @@ class NeighborGridEntityLayer< GridEntity, 0, GridEntityConfig, false > NeighborGridEntityLayer( const GridEntity& entity ){} __cuda_callable__ const NeighborEntityGetterType& getNeighborEntities( const MeshDimensionTag< 0 >& tag ) const {} const NeighborEntityGetterType& getNeighborEntities( const DimensionTag< 0 >& tag ) const {} __cuda_callable__ void refresh( const typename GridEntity::GridType& grid, Loading Loading @@ -163,7 +163,7 @@ class NeighborGridEntitiesStorage const NeighborGridEntityGetter< GridEntity, EntityDimension >& getNeighborEntities() const { return BaseType::getNeighborEntities( MeshDimensionTag< EntityDimension >() ); return BaseType::getNeighborEntities( DimensionTag< EntityDimension >() ); } }; Loading
src/TNL/Meshes/Mesh.h +12 −12 Original line number Diff line number Diff line Loading @@ -45,32 +45,32 @@ class Mesh using CellType = typename MeshTraitsType::CellType; using VertexType = typename MeshTraitsType::VertexType; using PointType = typename MeshTraitsType::PointType; static constexpr int dimensions = MeshTraitsType::meshDimensions; static constexpr int dimension = MeshTraitsType::meshDimension; template< int Dimensions > using EntityTraits = typename MeshTraitsType::template EntityTraits< Dimensions >; template< int Dimension > using EntityTraits = typename MeshTraitsType::template EntityTraits< Dimension >; template< int Dimensions > using EntityType = typename EntityTraits< Dimensions >::EntityType; template< int Dimension > using EntityType = typename EntityTraits< Dimension >::EntityType; static String getType(); virtual String getTypeVirtual() const; static constexpr int getDimensions(); static constexpr int getMeshDimension(); template< int Dimensions > template< int Dimension > static constexpr bool entitiesAvailable(); // TODO: rename to getEntitiesCount template< int Dimension > GlobalIndexType getNumberOfEntities() const; template< int Dimensions > EntityType< Dimensions >& getEntity( const GlobalIndexType& entityIndex ); template< int Dimension > EntityType< Dimension >& getEntity( const GlobalIndexType& entityIndex ); template< int Dimensions > const EntityType< Dimensions >& getEntity( const GlobalIndexType& entityIndex ) const; template< int Dimension > const EntityType< Dimension >& getEntity( const GlobalIndexType& entityIndex ) const; GlobalIndexType getNumberOfCells() const; Loading Loading @@ -103,7 +103,7 @@ class Mesh friend MeshInitializer< MeshConfig >; template< typename Mesh, typename DimensionsTag, typename SuperdimensionsTag > template< typename Mesh, typename DimensionTag, typename SuperdimensionTag > friend struct MeshEntityStorageRebinderWorker; }; Loading