[P]arallel [Hi]gh-order [Li]brary for [P]DEs  Latest
Parallel High-Order Library for PDEs through hp-adaptive Discontinuous Galerkin methods
maximum_principle_limiter.h
1 #ifndef __MAXIMUM_PRINCIPLE_LIMITER__
2 #define __MAXIMUM_PRINCIPLE_LIMITER__
3 
4 #include "bound_preserving_limiter.h"
5 
6 namespace PHiLiP {
8 /**********************************
9 * Zhang, Xiangxiong, and Chi-Wang Shu.
10 * "On maximum-principle-satisfying high order schemes for scalar conservation laws."
11 * Journal of Computational Physics 229.9 (2010): 3091-3120.
12 **********************************/
13 template<int dim, int nstate, typename real>
14 class MaximumPrincipleLimiter : public BoundPreservingLimiterState <dim, nstate, real>
15 {
16 public:
18  explicit MaximumPrincipleLimiter(
19  const Parameters::AllParameters* const parameters_input);
20 
22  ~MaximumPrincipleLimiter() = default;
23 
25  std::vector<real> global_max;
27  std::vector<real> global_min;
28 
30  std::shared_ptr<BoundPreservingLimiter<dim, real>> tvbLimiter;
31 
32 private:
35  const dealii::LinearAlgebra::distributed::Vector<double>& solution,
36  const dealii::DoFHandler<dim>& dof_handler,
37  const dealii::hp::FECollection<dim>& fe_collection);
38 
41 
45  dealii::LinearAlgebra::distributed::Vector<double>& solution,
46  const std::array<std::vector<real>, nstate>& soln_coeff,
47  const unsigned int n_shape_fns,
48  const std::vector<dealii::types::global_dof_index>& current_dofs_indices);
49 
50 public:
53  void limit(
54  dealii::LinearAlgebra::distributed::Vector<double>& solution,
55  const dealii::DoFHandler<dim>& dof_handler,
56  const dealii::hp::FECollection<dim>& fe_collection,
57  const dealii::hp::QCollection<dim>& volume_quadrature_collection,
58  const unsigned int grid_degree,
59  const unsigned int max_degree,
60  const dealii::hp::FECollection<1> oneD_fe_collection_1state,
61  const dealii::hp::QCollection<1> oneD_quadrature_collection);
62 
63 }; // End of MaximumPrincipleLimiter Class
64 } // PHiLiP namespace
65 
66 #endif
67 
std::vector< real > global_max
Maximum of initial solution for each state in domain.
~MaximumPrincipleLimiter()=default
Destructor.
Base Class for bound preserving limiters templated on state.
Class for implementation of Maximum-Principle-Satisfying limiter derived from BoundPreservingLimiterS...
const int nstate
Number of states.
Files for the baseline physics.
Definition: ADTypes.hpp:10
Main parameter class that contains the various other sub-parameter classes.
MaximumPrincipleLimiter(const Parameters::AllParameters *const parameters_input)
Constructor.
void limit(dealii::LinearAlgebra::distributed::Vector< double > &solution, const dealii::DoFHandler< dim > &dof_handler, const dealii::hp::FECollection< dim > &fe_collection, const dealii::hp::QCollection< dim > &volume_quadrature_collection, const unsigned int grid_degree, const unsigned int max_degree, const dealii::hp::FECollection< 1 > oneD_fe_collection_1state, const dealii::hp::QCollection< 1 > oneD_quadrature_collection)
std::vector< real > global_min
Minimum of initial solution for each state in domain.
void get_global_max_and_min_of_solution(const dealii::LinearAlgebra::distributed::Vector< double > &solution, const dealii::DoFHandler< dim > &dof_handler, const dealii::hp::FECollection< dim > &fe_collection)
Function to obtain the maximum and minimum of the initial solution for each state.
void write_limited_solution(dealii::LinearAlgebra::distributed::Vector< double > &solution, const std::array< std::vector< real >, nstate > &soln_coeff, const unsigned int n_shape_fns, const std::vector< dealii::types::global_dof_index > &current_dofs_indices)
std::shared_ptr< BoundPreservingLimiter< dim, real > > tvbLimiter
Pointer to TVB limiter class (TVB limiter can be applied in conjunction with this limiter) ...