Commit 0e1d0482 authored by Jakub Klinkovský's avatar Jakub Klinkovský
Browse files

Optimized default BuildConfigTags for meshes

parent eeeffb99
Loading
Loading
Loading
Loading
+19 −10
Original line number Diff line number Diff line
@@ -31,8 +31,10 @@ namespace BuildConfigTags {
// 1, 2, and 3 dimensions are enabled by default
template< typename ConfigTag, int Dimension > struct GridDimensionTag { enum { enabled = ( Dimension > 0 && Dimension <= 3 ) }; };

// Grids are enabled for all real types by default.
template< typename ConfigTag, typename Real > struct GridRealTag { enum { enabled = true }; };
// Grids are enabled only for the `float` and `double` real types by default.
template< typename ConfigTag, typename Real > struct GridRealTag { enum { enabled = false }; };
template< typename ConfigTag > struct GridRealTag< ConfigTag, float > { enum { enabled = true }; };
template< typename ConfigTag > struct GridRealTag< ConfigTag, double > { enum { enabled = true }; };

// Grids are enabled on all available devices by default.
template< typename ConfigTag, typename Device > struct GridDeviceTag { enum { enabled = true }; };
@@ -40,8 +42,10 @@ template< typename ConfigTag, typename Device > struct GridDeviceTag { enum { en
template< typename ConfigTag > struct GridDeviceTag< ConfigTag, Devices::Cuda > { enum { enabled = false }; };
#endif

// Grids are enabled for all index types by default.
template< typename ConfigTag, typename Index > struct GridIndexTag { enum { enabled = true }; };
// Grids are enabled only for the `int` and `long int` index types by default.
template< typename ConfigTag, typename Index > struct GridIndexTag { enum { enabled = false }; };
template< typename ConfigTag > struct GridIndexTag< ConfigTag, int > { enum { enabled = true }; };
template< typename ConfigTag > struct GridIndexTag< ConfigTag, long int > { enum { enabled = true }; };

// The Grid is enabled for allowed dimensions and Real, Device and Index types.
// 
@@ -85,14 +89,19 @@ template< typename ConfigTag, typename CellTopology > struct MeshCellTopologyTag
// All sensible world dimensions are enabled by default.
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 }; };
// Meshes are enabled only for the `float` and `double` real types by default.
template< typename ConfigTag, typename Real > struct MeshRealTag { enum { enabled = false }; };
template< typename ConfigTag > struct MeshRealTag< ConfigTag, float > { enum { enabled = true }; };
template< typename ConfigTag > struct MeshRealTag< ConfigTag, double > { enum { enabled = true }; };

// Meshes are enabled for all global index types by default.
template< typename ConfigTag, typename GlobalIndex > struct MeshGlobalIndexTag { enum { enabled = true }; };
// Meshes are enabled only for the `int` and `long int` global index types by default.
template< typename ConfigTag, typename GlobalIndex > struct MeshGlobalIndexTag { enum { enabled = false }; };
template< typename ConfigTag > struct MeshGlobalIndexTag< ConfigTag, int > { enum { enabled = true }; };
template< typename ConfigTag > struct MeshGlobalIndexTag< ConfigTag, long int > { enum { enabled = true }; };

// Meshes are enabled for all local index types by default.
template< typename ConfigTag, typename LocalIndex > struct MeshLocalIndexTag { enum { enabled = true }; };
// Meshes are enabled only for the `short int` local index type by default.
template< typename ConfigTag, typename LocalIndex > struct MeshLocalIndexTag { enum { enabled = false }; };
template< typename ConfigTag > struct MeshLocalIndexTag< ConfigTag, short int > { enum { enabled = true }; };

// Config tag specifying the MeshConfig to use.
template< typename ConfigTag >
+2 −7
Original line number Diff line number Diff line
@@ -16,12 +16,7 @@
namespace TNL {
namespace Solvers {

class FastBuildConfigTag
{
   public:

      static void print() { std::cerr << "FastBuildConfigTag" << std::endl; }
};
class FastBuildConfigTag {};

/****
 * Turn off support for float and long double.
+2 −3
Original line number Diff line number Diff line
@@ -49,11 +49,10 @@ struct MeshWorldDimensionTag< MeshConverterConfigTag, CellTopology, WorldDimensi
{ enum { enabled = ( WorldDimension == CellTopology::dimension ) }; };

// Meshes are enabled only for types explicitly listed below.
template< typename Real > struct MeshRealTag< MeshConverterConfigTag, Real > { enum { enabled = false }; };
template< typename GlobalIndex > struct MeshGlobalIndexTag< MeshConverterConfigTag, GlobalIndex > { enum { enabled = false }; };
template< typename LocalIndex > struct MeshLocalIndexTag< MeshConverterConfigTag, LocalIndex > { enum { enabled = false }; };
template<> struct MeshRealTag< MeshConverterConfigTag, float > { enum { enabled = false }; };
template<> struct MeshRealTag< MeshConverterConfigTag, double > { enum { enabled = true }; };
template<> struct MeshGlobalIndexTag< MeshConverterConfigTag, int > { enum { enabled = true }; };
template<> struct MeshGlobalIndexTag< MeshConverterConfigTag, long int > { enum { enabled = false }; };
template<> struct MeshLocalIndexTag< MeshConverterConfigTag, short int > { enum { enabled = true }; };

} // namespace BuildConfigTags
+2 −3
Original line number Diff line number Diff line
@@ -47,11 +47,10 @@ struct MeshWorldDimensionTag< TNLViewBuildConfigTag, CellTopology, WorldDimensio
{ enum { enabled = ( WorldDimension == CellTopology::dimension ) }; };

// Meshes are enabled only for types explicitly listed below.
template< typename Real > struct MeshRealTag< TNLViewBuildConfigTag, Real > { enum { enabled = false }; };
template< typename GlobalIndex > struct MeshGlobalIndexTag< TNLViewBuildConfigTag, GlobalIndex > { enum { enabled = false }; };
template< typename LocalIndex > struct MeshLocalIndexTag< TNLViewBuildConfigTag, LocalIndex > { enum { enabled = false }; };
template<> struct MeshRealTag< TNLViewBuildConfigTag, float > { enum { enabled = false }; };
template<> struct MeshRealTag< TNLViewBuildConfigTag, double > { enum { enabled = true }; };
template<> struct MeshGlobalIndexTag< TNLViewBuildConfigTag, int > { enum { enabled = true }; };
template<> struct MeshGlobalIndexTag< TNLViewBuildConfigTag, long int > { enum { enabled = false }; };
template<> struct MeshLocalIndexTag< TNLViewBuildConfigTag, short int > { enum { enabled = true }; };

} // namespace BuildConfigTags