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.