[P]arallel [Hi]gh-order [Li]brary for [P]DEs  Latest
Parallel High-Order Library for PDEs through hp-adaptive Discontinuous Galerkin methods
burgers.h
1 #ifndef __BURGERS__
2 #define __BURGERS__
3 
4 #include <deal.II/base/tensor.h>
5 
6 #include "parameters/all_parameters.h"
7 #include "parameters/parameters_manufactured_solution.h"
8 
9 #include "physics.h"
10 
11 namespace PHiLiP {
12 namespace Physics {
14 
29 template <int dim, int nspecies, int nstate, typename real>
30 class Burgers : public PhysicsBase <dim, nspecies, nstate, real>
31 {
32 protected:
33  // For overloading the virtual functions defined in PhysicsBase
43 protected:
46 public:
48 
49  const bool hasConvection;
51  const bool hasDiffusion;
54 
56  Burgers(
57  const Parameters::AllParameters *const parameters_input,
58  const double diffusion_coefficient,
59  const bool convection = true,
60  const bool diffusion = true,
61  const dealii::Tensor<2,3,double> input_diffusion_tensor = Parameters::ManufacturedSolutionParam::get_default_diffusion_tensor(),
63  const Parameters::AllParameters::TestType parameters_test = Parameters::AllParameters::TestType::run_control,
64  const bool has_nonzero_physical_source = false);
65 
67  std::array<dealii::Tensor<1,dim,real>,nstate> convective_flux (const std::array<real,nstate> &solution) const;
68 
70  std::array<dealii::Tensor<1,dim,real>,nstate> convective_numerical_split_flux (
71  const std::array<real,nstate> &conservative_soln1,
72  const std::array<real,nstate> &conservative_soln2) const override;
73 
75  std::array<real,nstate> convert_conservative_to_primitive ( const std::array<real,nstate> &conservative_soln ) const;
76 
78  std::array<real,nstate> convert_primitive_to_conservative ( const std::array<real,nstate> &primitive_soln ) const;
79 
81  std::array<dealii::Tensor<1,dim,real>,nstate>
83  const std::array<real,nstate> &conservative_soln,
84  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
85 
87  std::array<dealii::Tensor<1,dim,real>,nstate>
89  const std::array<real,nstate> &primitive_soln,
90  const std::array<dealii::Tensor<1,dim,real>,nstate> &primitive_soln_gradient) const;
91 
93  std::array<real,nstate> compute_entropy_variables (
94  const std::array<real,nstate> &conservative_soln) const;
95 
98  const std::array<real,nstate> &entropy_var) const;
99 
101  std::array<real,nstate> convective_eigenvalues (
102  const std::array<real,nstate> &/*solution*/,
103  const dealii::Tensor<1,dim,real> &/*normal*/) const;
104 
106  real max_convective_eigenvalue (const std::array<real,nstate> &soln) const;
107 
109  real max_viscous_eigenvalue (const std::array<real,nstate> &soln) const;
110 
111  // /// Diffusion matrix is identity
112  // std::array<dealii::Tensor<1,dim,real>,nstate> apply_diffusion_matrix (
113  // const std::array<real,nstate> &solution,
114  // const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_grad) const;
115 
117  std::array<dealii::Tensor<1,dim,real>,nstate> dissipative_flux (
118  const std::array<real,nstate> &solution,
119  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
120  const dealii::types::global_dof_index cell_index) const;
121 
123  std::array<dealii::Tensor<1,dim,real>,nstate> dissipative_flux (
124  const std::array<real,nstate> &solution,
125  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient) const;
126 
128  std::array<real,nstate> source_term (
129  const dealii::Point<dim,real> &pos,
130  const std::array<real,nstate> &solution,
131  const real current_time,
132  const dealii::types::global_dof_index cell_index) const;
133 
135  virtual std::array<real,nstate> source_term (
136  const dealii::Point<dim,real> &pos,
137  const std::array<real,nstate> &solution,
138  const real current_time) const;
139 
141 
144  void boundary_face_values (
145  const int /*boundary_type*/,
146  const dealii::Point<dim, real> &/*pos*/,
147  const dealii::Tensor<1,dim,real> &/*normal*/,
148  const std::array<real,nstate> &/*soln_int*/,
149  const std::array<dealii::Tensor<1,dim,real>,nstate> &/*soln_grad_int*/,
150  std::array<real,nstate> &/*soln_bc*/,
151  std::array<dealii::Tensor<1,dim,real>,nstate> &/*soln_grad_bc*/) const;
152 
153 protected:
155  real diffusion_coefficient () const;
156 };
157 
158 
159 } // Physics namespace
160 } // PHiLiP namespace
161 
162 #endif
const Parameters::AllParameters::TestType test_type
Allows Burgers to distinguish between different unsteady test types.
Definition: burgers.h:53
TestType
Possible integration tests to run.
Base class from which Advection, Diffusion, ConvectionDiffusion, and Euler is derived.
Definition: physics.h:34
std::array< real, nstate > source_term(const dealii::Point< dim, real > &pos, const std::array< real, nstate > &solution, const real current_time, const dealii::types::global_dof_index cell_index) const
Source term is zero or depends on manufactured solution.
Definition: burgers.cpp:227
Manufactured solution used for grid studies to check convergence orders.
real max_convective_eigenvalue(const std::array< real, nstate > &soln) const
Maximum convective eigenvalue.
Definition: burgers.cpp:177
Files for the baseline physics.
Definition: ADTypes.hpp:10
const bool has_nonzero_physical_source
Flag to signal that physical source term is non-zero.
Definition: physics.h:62
real diffusion_coefficient() const
Diffusion coefficient.
Definition: burgers.cpp:152
std::array< dealii::Tensor< 1, dim, real >, nstate > convert_conservative_gradient_to_primitive_gradient(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
Definition: burgers.cpp:127
std::shared_ptr< ManufacturedSolutionFunction< dim, nspecies, real > > manufactured_solution_function
Manufactured solution function.
Definition: physics.h:71
Main parameter class that contains the various other sub-parameter classes.
std::array< dealii::Tensor< 1, dim, real >, nstate > convective_flux(const std::array< real, nstate > &solution) const
Convective flux: .
Definition: burgers.cpp:77
std::array< real, nstate > compute_conservative_variables_from_entropy_variables(const std::array< real, nstate > &entropy_var) const
Computes the conservative variables from the entropy variables.
Definition: burgers.cpp:144
const bool hasDiffusion
Turns on diffusive part of the Burgers problem.
Definition: burgers.h:51
static dealii::Tensor< 2, 3, double > get_default_diffusion_tensor()
gets the default diffusion tensor
const bool hasConvection
Turns on convective part of the Burgers problem.
Definition: burgers.h:49
std::array< real, nstate > compute_entropy_variables(const std::array< real, nstate > &conservative_soln) const
Computes the entropy variables.
Definition: burgers.cpp:136
std::array< dealii::Tensor< 1, dim, real >, nstate > dissipative_flux(const std::array< real, nstate > &solution, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient, const dealii::types::global_dof_index cell_index) const
Dissipative flux: u.
Definition: burgers.cpp:198
real max_viscous_eigenvalue(const std::array< real, nstate > &soln) const
Maximum viscous eigenvalue.
Definition: burgers.cpp:191
void boundary_face_values(const int, const dealii::Point< dim, real > &, const dealii::Tensor< 1, dim, real > &, const std::array< real, nstate > &, const std::array< dealii::Tensor< 1, dim, real >, nstate > &, std::array< real, nstate > &, std::array< dealii::Tensor< 1, dim, real >, nstate > &) const
If diffusion is present, assign Dirichlet boundary condition.
Definition: burgers.cpp:29
std::array< real, nstate > convert_primitive_to_conservative(const std::array< real, nstate > &primitive_soln) const
Convert primitive solution to conservative solution.
Definition: burgers.cpp:111
std::array< real, nstate > convective_eigenvalues(const std::array< real, nstate > &, const dealii::Tensor< 1, dim, real > &) const
Spectral radius of convective term Jacobian is &#39;c&#39;.
Definition: burgers.cpp:161
std::array< real, nstate > convert_conservative_to_primitive(const std::array< real, nstate > &conservative_soln) const
Convert conservative variables to primitive variables.
Definition: burgers.cpp:104
Burger&#39;s equation with nonlinear advective term and linear diffusive term. Derived from PhysicsBase...
Definition: burgers.h:30
std::array< dealii::Tensor< 1, dim, real >, nstate > convective_numerical_split_flux(const std::array< real, nstate > &conservative_soln1, const std::array< real, nstate > &conservative_soln2) const override
Convective split flux.
Definition: burgers.cpp:89
double diffusion_scaling_coeff
Diffusion scaling coefficient in front of the diffusion tensor.
Definition: burgers.h:45
std::array< dealii::Tensor< 1, dim, real >, nstate > convert_primitive_gradient_to_conservative_gradient(const std::array< real, nstate > &primitive_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &primitive_soln_gradient) const
Definition: burgers.cpp:118
Burgers(const Parameters::AllParameters *const parameters_input, const double diffusion_coefficient, const bool convection=true, const bool diffusion=true, const dealii::Tensor< 2, 3, double > input_diffusion_tensor=Parameters::ManufacturedSolutionParam::get_default_diffusion_tensor(), std::shared_ptr< ManufacturedSolutionFunction< dim, nspecies, real > > manufactured_solution_function=nullptr, const Parameters::AllParameters::TestType parameters_test=Parameters::AllParameters::TestType::run_control, const bool has_nonzero_physical_source=false)
Constructor.
Definition: burgers.cpp:9