#pragma once

#include <TNL/Solvers/BuildConfigTags.h>

class {problemBaseName}BuildConfigTag{{}};


namespace TNL {{
namespace Solvers {{
/****
 * Turn off support for float and long double.
 */
template<> struct ConfigTagReal< {problemBaseName}BuildConfigTag, float > {{ enum {{ enabled = false }}; }};
template<> struct ConfigTagReal< {problemBaseName}BuildConfigTag, long double > {{ enum {{ enabled = false }}; }};

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

/****
 * The mesh type will be resolved by the Solver by default.
 * (The detailed mesh configuration is in TNL/Meshes/TypeResolver/BuildConfigTags.h)
 */
template<> struct ConfigTagMeshResolve< {problemBaseName}BuildConfigTag >{{ enum {{ enabled = true }}; }};

/****
 * All time discretisations (explicit, semi-impicit and implicit ) are
 * enabled by default.
 */
template< typename TimeDiscretisation > struct ConfigTagTimeDiscretisation< {problemBaseName}BuildConfigTag, TimeDiscretisation >{{ enum {{ enabled = true }}; }};

/****
 * All explicit solvers are enabled by default
 */
template< typename ExplicitSolver > struct ConfigTagExplicitSolver< {problemBaseName}BuildConfigTag, ExplicitSolver >{{ enum {{ enabled = true }}; }};

}} // namespace Solvers
}} // namespace TNL
