3 #include "burgers_rewienski.h"     8 template <
int dim, 
int nstate, 
typename real>
    11         const double rewienski_a,
    12         const double rewienski_b,
    13         const bool rewienski_manufactured_solution,
    14         const bool convection,
    16         const dealii::Tensor<2, 3> input_diffusion_tensor,
    18         : 
Burgers<dim, nstate, real>(parameters_input,
    22                                      input_diffusion_tensor,
    23                                      manufactured_solution_function)
    24         , rewienski_a(rewienski_a)
    25         , rewienski_b(rewienski_b)
    26         , rewienski_manufactured_solution(rewienski_manufactured_solution)
    28     static_assert(nstate==dim, 
"Physics::Burgers() should be created with nstate==dim");
    33 template <
int dim, 
int nstate, 
typename real>
    37         const dealii::Point<dim, real> &pos,
    38         const dealii::Tensor<1,dim,real> &normal_int,
    39         const std::array<real,nstate> &soln_int,
    40         const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_int,
    41         std::array<real,nstate> &soln_bc,
    42         std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc)
 const    44     std::array<real,nstate> boundary_values;
    45     std::array<dealii::Tensor<1,dim,real>,nstate> boundary_gradients;
    48         for (
int i=0; i<nstate; i++) {
    52         for (
int i=0; i<nstate; i++) {
    57     for (
int istate=0; istate<nstate; ++istate) {
    60         const bool inflow = (characteristic_dot_n[istate] <= 0.);
    63             soln_bc[istate] = boundary_values[istate];
    64             soln_grad_bc[istate] = soln_grad_int[istate];
    67             soln_bc[istate] = soln_int[istate];
    68             soln_grad_bc[istate] = soln_grad_int[istate];
    73 template <
int dim, 
int nstate, 
typename real>
    76         const dealii::Point<dim,real> &pos,
    77         const std::array<real,nstate> &,
    80     std::array<real,nstate> source;
    82     for (
int istate=0; istate<nstate; istate++) {
    84         source[istate] = 0.02*exp(b*pos[0]);
    87         for (
int istate=0; istate<nstate; istate++) {
    90             for (
int d=0;d<dim;++d) {
    92                 source[istate] += 0.5*manufactured_solution*manufactured_gradient[d];
    95         for (
int istate=0; istate<nstate; istate++) {
    97             real divergence = 0.0;
    98             for (
int d=0;d<dim;++d) {
   100                 divergence += manufactured_gradient[d];
   102             source[istate] += 0.5*manufactured_solution*divergence;
 Manufactured solution used for grid studies to check convergence orders. 
BurgersRewienski(const Parameters::AllParameters *const parameters_input, const double rewienski_a, const double rewienski_b, const bool rewienski_manufactured_solution, const bool convection, const bool diffusion, const dealii::Tensor< 2, 3, double > input_diffusion_tensor=Parameters::ManufacturedSolutionParam::get_default_diffusion_tensor(), std::shared_ptr< ManufacturedSolutionFunction< dim, real > > manufactured_solution_function=nullptr)
Constructor. 
Files for the baseline physics. 
Main parameter class that contains the various other sub-parameter classes. 
Burgers Rewienski equation. Derived from Burgers, which is derived from PhysicsBase. Based on eq.(18) in Carlberg 2011. 
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 'c'. 
const double rewienski_b
Parameter b for eq.(18) in Carlberg 2011. 
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 override
If diffusion is present, assign Dirichlet boundary condition. 
std::array< real, nstate > source_term(const dealii::Point< dim, real > &pos, const std::array< real, nstate > &solution, const real current_time) const override
PDE Source term. If rewienski_manufactured_solution==true then the manufactured solution source term ...
Burger's equation with nonlinear advective term and linear diffusive term. Derived from PhysicsBase...
const double rewienski_a
Parameter a for eq.(18) in Carlberg 2011. 
const bool hasDiffusion
Turns on diffusive part of the Burgers problem. 
const bool rewienski_manufactured_solution
std::shared_ptr< ManufacturedSolutionFunction< dim, real > > manufactured_solution_function
Manufactured solution function.