Commit c7c056f2 authored by Jakub Klinkovský's avatar Jakub Klinkovský
Browse files

Generalization of MeshTypeResolver for unstructured meshes

parent 94f9f8ae
Loading
Loading
Loading
Loading
+32 −25
Original line number Diff line number Diff line
@@ -11,50 +11,57 @@
#pragma once

#include <TNL/Solvers/BuildConfigTags.h>
#include <TNL/Meshes/BuildConfigTags.h>

namespace TNL {
namespace Solvers {

class HeatEquationBuildConfig
{
   public:
class HeatEquationBuildConfigTag{};

      static void print() { std::cerr << "HeatEquationBuildConfig" << std::endl; }
};
namespace Solvers {
   
/****
 * Turn off support for float and long double.
 */
template<> struct ConfigTagReal< HeatEquationBuildConfig, float > { enum { enabled = false }; };
template<> struct ConfigTagReal< HeatEquationBuildConfig, long double > { enum { enabled = false }; };
template<> struct ConfigTagReal< HeatEquationBuildConfigTag, float > { enum { enabled = false }; };
template<> struct ConfigTagReal< HeatEquationBuildConfigTag, long double > { enum { enabled = false }; };

/****
 * Turn off support for short int and long int indexing.
 */
template<> struct ConfigTagIndex< HeatEquationBuildConfig, short int >{ enum { enabled = false }; };
template<> struct ConfigTagIndex< HeatEquationBuildConfig, long int >{ enum { enabled = false }; };

/****
 * Use of Grid is enabled for allowed dimensions and Real, Device and Index types.
 */
template< int Dimension, typename Real, typename Device, typename Index >
   struct ConfigTagMesh< HeatEquationBuildConfig, Meshes::Grid< Dimension, Real, Device, Index > >
      { enum { enabled = ConfigTagDimension< HeatEquationBuildConfig, Dimension >::enabled  &&
                         ConfigTagReal< HeatEquationBuildConfig, Real >::enabled &&
                         ConfigTagDevice< HeatEquationBuildConfig, Device >::enabled &&
                         ConfigTagIndex< HeatEquationBuildConfig, Index >::enabled }; };
template<> struct ConfigTagIndex< HeatEquationBuildConfigTag, short int >{ enum { enabled = false }; };
template<> struct ConfigTagIndex< HeatEquationBuildConfigTag, long int >{ enum { enabled = false }; };

/****
 * Please, chose your preferred time discretization  here.
 */
template<> struct ConfigTagTimeDiscretisation< HeatEquationBuildConfig, ExplicitTimeDiscretisationTag >{ enum { enabled = true }; };
template<> struct ConfigTagTimeDiscretisation< HeatEquationBuildConfig, SemiImplicitTimeDiscretisationTag >{ enum { enabled = false }; };
template<> struct ConfigTagTimeDiscretisation< HeatEquationBuildConfig, ImplicitTimeDiscretisationTag >{ enum { enabled = false }; };
template<> struct ConfigTagTimeDiscretisation< HeatEquationBuildConfigTag, ExplicitTimeDiscretisationTag >{ enum { enabled = true }; };
template<> struct ConfigTagTimeDiscretisation< HeatEquationBuildConfigTag, SemiImplicitTimeDiscretisationTag >{ enum { enabled = false }; };
template<> struct ConfigTagTimeDiscretisation< HeatEquationBuildConfigTag, ImplicitTimeDiscretisationTag >{ enum { enabled = false }; };

/****
 * Only the Runge-Kutta-Merson solver is enabled by default.
 */
template<> struct ConfigTagExplicitSolver< HeatEquationBuildConfig, ExplicitEulerSolverTag >{ enum { enabled = false }; };
template<> struct ConfigTagExplicitSolver< HeatEquationBuildConfigTag, ExplicitEulerSolverTag >{ enum { enabled = false }; };

} // namespace Solvers

namespace Meshes {
namespace BuildConfigTags {

template< int Dimensions > struct GridDimensionTag< HeatEquationBuildConfigTag, Dimensions >{ enum { enabled = true }; };

/****
 * Turn off support for float and long double.
 */
template<> struct GridRealTag< HeatEquationBuildConfigTag, float > { enum { enabled = false }; };
template<> struct GridRealTag< HeatEquationBuildConfigTag, long double > { enum { enabled = false }; };

/****
 * Turn off support for short int and long int indexing.
 */
template<> struct GridIndexTag< HeatEquationBuildConfigTag, short int >{ enum { enabled = false }; };
template<> struct GridIndexTag< HeatEquationBuildConfigTag, long int >{ enum { enabled = false }; };

} // namespace BuildConfigTags
} // namespace Meshes
} // namespace TNL
+2 −2
Original line number Diff line number Diff line
@@ -24,8 +24,8 @@
using namespace TNL;
using namespace TNL::Problems;

//typedef tnlDefaultBuildMeshConfig BuildConfig;
typedef Solvers::FastBuildConfig BuildConfig;
//typedef Solvers::DefaultBuildConfigTag BuildConfig;
typedef Solvers::FastBuildConfigTag BuildConfig;

template< typename MeshConfig >
class heatEquationEocConfig
+2 −3
Original line number Diff line number Diff line
@@ -26,9 +26,8 @@
using namespace TNL;
using namespace TNL::Problems;

//typedef tnlDefaultBuildMeshConfig BuildConfig;
typedef Solvers::FastBuildConfig BuildConfig;
//typedef Solvers::HeatEquationBuildConfig BuildConfig;
//typedef Solvers::DefaultBuildConfigTag BuildConfig;
typedef Solvers::FastBuildConfigTag BuildConfig;

template< typename MeshConfig >
class heatEquationConfig
+21 −12
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@
#define eulerBUILDCONFIGTAG_H_

#include <TNL/Solvers/BuildConfigTags.h>
#include <TNL/Meshes/BuildConfigTags.h>

namespace TNL {

@@ -21,18 +22,6 @@ template<> struct ConfigTagReal< eulerBuildConfigTag, long double > { enum { ena
template<> struct ConfigTagIndex< eulerBuildConfigTag, short int >{ enum { enabled = false }; };
template<> struct ConfigTagIndex< eulerBuildConfigTag, long int >{ enum { enabled = false }; };

template< int Dimension > struct ConfigTagDimension< eulerBuildConfigTag, Dimension >{ enum { enabled = ( Dimension == 1 ) }; };

/****
 * Use of Grid is enabled for allowed dimensions and Real, Device and Index types.
 */
template< int Dimension, typename Real, typename Device, typename Index >
   struct ConfigTagMesh< eulerBuildConfigTag, Meshes::Grid< Dimension, Real, Device, Index > >
      { enum { enabled = ConfigTagDimension< eulerBuildConfigTag, Dimension >::enabled  &&
                         ConfigTagReal< eulerBuildConfigTag, Real >::enabled &&
                         ConfigTagDevice< eulerBuildConfigTag, Device >::enabled &&
                         ConfigTagIndex< eulerBuildConfigTag, Index >::enabled }; };

/****
 * Please, chose your preferred time discretisation  here.
 */
@@ -46,6 +35,26 @@ template<> struct ConfigTagTimeDiscretisation< eulerBuildConfigTag, ImplicitTime
template<> struct ConfigTagExplicitSolver< eulerBuildConfigTag, ExplicitEulerSolverTag >{ enum { enabled = true }; };

} // namespace Solvers

namespace Meshes {
namespace BuildConfigTags {

template< int Dimensions > struct GridDimensionTag< eulerBuildConfigTag, Dimensions >{ enum { enabled = ( Dimensions == 1 ) }; };

/****
 * Turn off support for float and long double.
 */
template<> struct GridRealTag< eulerBuildConfigTag, float > { enum { enabled = false }; };
template<> struct GridRealTag< eulerBuildConfigTag, long double > { enum { enabled = false }; };

/****
 * Turn off support for short int and long int indexing.
 */
template<> struct GridIndexTag< eulerBuildConfigTag, short int >{ enum { enabled = false }; };
template<> struct GridIndexTag< eulerBuildConfigTag, long int >{ enum { enabled = false }; };

} // namespace BuildConfigTags
} // namespace Meshes
} // namespace TNL

#endif /* eulerBUILDCONFIGTAG_H_ */
+21 −11
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
#pragma once

#include <TNL/Solvers/BuildConfigTags.h>
#include <TNL/Meshes/BuildConfigTags.h>

namespace TNL {

@@ -31,17 +32,6 @@ template<> struct ConfigTagReal< transportEquationBuildConfigTag, long double >
template<> struct ConfigTagIndex< transportEquationBuildConfigTag, short int >{ enum { enabled = false }; };
template<> struct ConfigTagIndex< transportEquationBuildConfigTag, long int >{ enum { enabled = false }; };

/****
 * Use of Grid is enabled for allowed dimensions and Real, Device and Index types.
 */

template< int Dimensions, typename Real, typename Device, typename Index >
   struct ConfigTagMesh< transportEquationBuildConfigTag, Meshes::Grid< Dimensions, Real, Device, Index > >
      { enum { enabled = ConfigTagDimension< transportEquationBuildConfigTag, Dimensions >::enabled  &&
                         ConfigTagReal< transportEquationBuildConfigTag, Real >::enabled &&
                         ConfigTagDevice< transportEquationBuildConfigTag, Device >::enabled &&
                         ConfigTagIndex< transportEquationBuildConfigTag, Index >::enabled }; };

/****
 * Please, chose your preferred time discretisation  here.
 */
@@ -55,4 +45,24 @@ template<> struct ConfigTagTimeDiscretisation< transportEquationBuildConfigTag,
template<> struct ConfigTagExplicitSolver< transportEquationBuildConfigTag, Solvers::ExplicitEulerSolverTag >{ enum { enabled = true }; };

} // namespace Solvers

namespace Meshes {
namespace BuildConfigTags {

template< int Dimensions > struct GridDimensionTag< transportEquationBuildConfigTag, Dimensions >{ enum { enabled = true }; };

/****
 * Turn off support for float and long double.
 */
template<> struct GridRealTag< transportEquationBuildConfigTag, float > { enum { enabled = false }; };
template<> struct GridRealTag< transportEquationBuildConfigTag, long double > { enum { enabled = false }; };

/****
 * Turn off support for short int and long int indexing.
 */
template<> struct GridIndexTag< transportEquationBuildConfigTag, short int >{ enum { enabled = false }; };
template<> struct GridIndexTag< transportEquationBuildConfigTag, long int >{ enum { enabled = false }; };

} // namespace BuildConfigTags
} // namespace Meshes
} // namespace TNL
Loading