1 #include "parameters/all_parameters.h" 2 #include "bound_preserving_limiter_factory.hpp" 3 #include "bound_preserving_limiter.h" 4 #include "tvb_limiter.h" 5 #include "maximum_principle_limiter.h" 6 #include "positivity_preserving_limiter.h" 9 template <
int dim,
int nstate,
typename real>
10 std::unique_ptr< BoundPreservingLimiter<dim, real> >
15 if (nstate == parameters_input->
nstate)
17 else if constexpr (nstate > 1)
23 template <
int dim,
int nstate,
typename real>
24 std::unique_ptr< BoundPreservingLimiter<dim, real> >
38 if (limiter_type == limiter_enum::none) {
39 if (apply_tvb ==
true) {
40 if(curvilinear_grid) {
41 std::cout <<
"Error: Cannot create limiter for curvilinear grid" << std::endl;
43 }
else if (flux_nodes_type != flux_nodes_enum::GLL) {
44 std::cout <<
"Error: Can only use limiter with GLL flux nodes" << std::endl;
47 return std::make_unique < TVBLimiter<dim, nstate, real> >(parameters_input);
49 std::cout <<
"Error: Cannot create TVB limiter for dim > 1" << std::endl;
55 }
else if(curvilinear_grid) {
56 std::cout <<
"Error: Cannot create limiter for curvilinear grid" << std::endl;
58 }
else if (flux_nodes_type != flux_nodes_enum::GLL) {
59 std::cout <<
"Error: Can only use limiter with GLL flux nodes" << std::endl;
61 }
else if (limiter_type == limiter_enum::maximum_principle) {
62 return std::make_unique< MaximumPrincipleLimiter<dim, nstate, real> >(parameters_input);
63 }
else if (limiter_type == limiter_enum::positivity_preservingZhang2010
64 || limiter_type == limiter_enum::positivity_preservingWang2012) {
65 if (nstate == dim + 2)
66 return std::make_unique< PositivityPreservingLimiter<dim, nstate, real> >(parameters_input);
68 if(nstate != dim + 2) {
69 std::cout <<
"Error: Cannot create Positivity-Preserving limiter for nstate_input != dim + 2" << std::endl;
75 std::cout <<
"Error: Cannot create limiter pointer due to an invalid limiter type specified" << std::endl;
bool use_curvilinear_grid
Flag to use curvilinear grid.
LimiterType
Limiter type to be applied on the solution.
LimiterParam limiter_param
Contains parameters for limiter.
LimiterType bound_preserving_limiter
Variable to store specified limiter type.
Files for the baseline physics.
static std::unique_ptr< BoundPreservingLimiter< dim, real > > create_limiter(const Parameters::AllParameters *const parameters_input)
Recursively templated function that calls select_limiter when nstate is equal to one specified in prm...
This class creates a new BoundPreservingLimiter object based on input parameters. ...
Main parameter class that contains the various other sub-parameter classes.
int nstate
Number of state variables. Will depend on PDE.
FluxNodes flux_nodes_type
Store selected FluxNodes from the input file.
bool use_tvb_limiter
Flag for applying TVB Limiter.
static std::unique_ptr< BoundPreservingLimiter< dim, real > > select_limiter(const Parameters::AllParameters *const parameters_input)
Create a pointer to the limiter specified in prms.
FluxNodes
Flux nodes type.