8 template <
int dim, 
int nstate, 
typename real>
    11     const double                                              diffusion_coefficient,
    12     const bool                                                convection, 
    14     const dealii::Tensor<2,3,double>                          input_diffusion_tensor,
    17     const bool                                                has_nonzero_physical_source)
    18     : 
PhysicsBase<dim,nstate,real>(parameters_input, diffusion, has_nonzero_physical_source, input_diffusion_tensor, manufactured_solution_function)
    19     , diffusion_scaling_coeff(diffusion_coefficient)
    20     , hasConvection(convection)
    21     , hasDiffusion(diffusion)
    22     , test_type(parameters_test)
    24     static_assert(nstate==dim, 
"Physics::Burgers() should be created with nstate==dim");
    27 template <
int dim, 
int nstate, 
typename real>
    31    const dealii::Point<dim, real> &pos,
    32    const dealii::Tensor<1,dim,real> &normal_int,
    33    const std::array<real,nstate> &soln_int,
    34    const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_int,
    35    std::array<real,nstate> &soln_bc,
    36    std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc)
 const    38     std::array<real,nstate> boundary_values;
    39     std::array<dealii::Tensor<1,dim,real>,nstate> boundary_gradients;
    40     for (
int i=0; i<nstate; i++) {
    45     for (
int istate=0; istate<nstate; ++istate) {
    48         const bool inflow = (characteristic_dot_n[istate] <= 0.);
    54             soln_bc[istate] = boundary_values[istate];
    55             soln_grad_bc[istate] = soln_grad_int[istate];
    61             soln_bc[istate] = soln_int[istate];
    68             soln_grad_bc[istate] = soln_grad_int[istate];
    75 template <
int dim, 
int nstate, 
typename real>
    79     std::array<dealii::Tensor<1,dim,real>,nstate> conv_flux;
    80     for (
int flux_dim=0; flux_dim<dim; ++flux_dim) {
    81         for (
int s=0; s<nstate; ++s) {
    82             conv_flux[s][flux_dim] = 0.5*solution[flux_dim]*solution[s];
    88 template <
int dim, 
int nstate, 
typename real>
    90                 const std::array<real,nstate> &conservative_soln1,
    91                 const std::array<real,nstate> &conservative_soln2)
 const    93     std::array<dealii::Tensor<1,dim,real>,nstate> conv_flux;
    94         for (
int flux_dim=0; flux_dim<dim; ++flux_dim) {
    95             for (
int s=0; s<nstate; ++s) {
    96                 conv_flux[s][flux_dim] = 1./6. * (conservative_soln1[flux_dim]*conservative_soln1[flux_dim] + conservative_soln1[flux_dim]*conservative_soln2[s] + conservative_soln2[s]*conservative_soln2[s]);
   102 template <
int dim, 
int nstate, 
typename real>
   105     const std::array<real,nstate> &conservative_soln)
 const   107     return conservative_soln;
   110 template <
int dim, 
int nstate, 
typename real>
   113     const std::array<real,nstate> &entropy_var)
 const   118 template <
int dim, 
int nstate, 
typename real>
   123     const real zero = 0.0;
   127 template <
int dim, 
int nstate, 
typename real>
   130     const std::array<real,nstate> &solution,
   131     const dealii::Tensor<1,dim,real> &normal)
 const   133     std::array<real,nstate> eig;
   134     for (
int i=0; i<nstate; i++) {
   136         for (
int d=0;d<dim;++d) {
   137             eig[i] += solution[d]*normal[d];
   143 template <
int dim, 
int nstate, 
typename real>
   148     for (
int i=0; i<dim; i++) {
   150         const real abs_soln = abs(soln[i]);
   151         max_eig = std::max(max_eig, abs_soln);
   157 template <
int dim, 
int nstate, 
typename real>
   164 template <
int dim, 
int nstate, 
typename real>
   167     const std::array<real,nstate> &solution,
   168     const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
   169     const dealii::types::global_dof_index )
 const   174 template <
int dim, 
int nstate, 
typename real>
   177     const std::array<real,nstate> &,
   178     const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient)
 const   180     std::array<dealii::Tensor<1,dim,real>,nstate> diss_flux;
   182     for (
int i=0; i<nstate; i++) {
   183         for (
int d1=0; d1<dim; d1++) {
   184             diss_flux[i][d1] = 0.0;
   185             for (
int d2=0; d2<dim; d2++) {
   186                 diss_flux[i][d1] += -diff_coeff*((this->
diffusion_tensor[d1][d2])*solution_gradient[i][d2]);
   193 template <
int dim, 
int nstate, 
typename real>
   196     const dealii::Point<dim,real> &pos,
   197     const std::array<real,nstate> &solution,
   198     const real current_time,
   199     const dealii::types::global_dof_index )
 const   204 template <
int dim, 
int nstate, 
typename real>
   207     const dealii::Point<dim,real> &pos,
   208     const std::array<real,nstate> &,
   209     const real current_time)
 const   211     std::array<real,nstate> source;
   215     if(this->
test_type == TestType::burgers_energy_stability || this->
test_type == TestType::burgers_limiter
   216             || this->
test_type == TestType::stability_fr_parameter_range){
   217         for(
int istate =0; istate<nstate; istate++){
   218             source[istate] = 0.0;
   219             const double pi = atan(1)*4.0;
   220             const real pi_xmt = pi * (pos[0] - current_time);
   221             const real pi_ymt = pi * (pos[1] - current_time);
   222             const real pi_zmt = pi * (pos[2] - current_time);
   226                 source[istate] = pi * sin(pi_xmt)
   227                                    *(1.0 - cos(pi_xmt));
   232                 const real sourcedt = pi*sin(pi_xmt)*cos(pi_ymt)
   233                                +pi*cos(pi_xmt)*sin(pi_ymt);
   234                 const real sourcedx = -pi*sin(pi_xmt)*(cos(pi_xmt))
   235                                *pow(cos(pi_ymt),2.0);
   236                 const real sourcedy = -pi*sin(pi_ymt)*(cos(pi_ymt))
   237                                *pow(cos(pi_xmt),2.0);
   238                 source[istate] = sourcedt + sourcedx + sourcedy;
   243                 const real sourcedt = pi*sin(pi_xmt)*cos(pi_ymt)*cos(pi_zmt)
   244                                +pi*cos(pi_xmt)*sin(pi_ymt)*cos(pi_zmt)
   245                                +pi*cos(pi_xmt)*cos(pi_ymt)*sin(pi_zmt);
   246                 const real sourcedx = -pi*sin(pi_xmt)*(cos(pi_xmt))
   247                                *pow(cos(pi_ymt),2.0)*pow(cos(pi_zmt),2.0);
   248                 const real sourcedy = -pi*sin(pi_ymt)*(cos(pi_ymt))
   249                                *pow(cos(pi_xmt),2.0)*pow(cos(pi_zmt),2.0);
   250                 const real sourcedz = -pi*sin(pi_zmt)*(cos(pi_zmt))
   251                                *pow(cos(pi_xmt),2.0)*pow(cos(pi_ymt),2.0);
   252                 source[istate] = sourcedt + sourcedx + sourcedy + sourcedz;
   268     for (
int istate=0; istate<nstate; istate++) {
   269         source[istate] = 0.0;
   272         for (
int d=0;d<dim;++d) {
   274             source[istate] += 0.5*manufactured_solution*manufactured_gradient[d];
   278         for (
int dr=0; dr<dim; ++dr) {
   279             for (
int dc=0; dc<dim; ++dc) {
   283         source[istate] += -diff_coeff*hess;
   285     for (
int istate=0; istate<nstate; istate++) {
   287         real divergence = 0.0;
   288         for (
int d=0;d<dim;++d) {
   290             divergence += manufactured_gradient[d];
   292         source[istate] += 0.5*manufactured_solution*divergence;
 real max_viscous_eigenvalue(const std::array< real, nstate > &soln) const
Maximum viscous eigenvalue. 
std::array< real, nstate > compute_entropy_variables(const std::array< real, nstate > &conservative_soln) const
Computes the entropy variables. 
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. 
TestType
Possible integration tests to run. 
std::array< dealii::Tensor< 1, dim, real >, nstate > convective_flux(const std::array< real, nstate > &solution) const
Convective flux: . 
Base class from which Advection, Diffusion, ConvectionDiffusion, and Euler is derived. 
Manufactured solution used for grid studies to check convergence orders. 
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. 
Files for the baseline physics. 
Main parameter class that contains the various other sub-parameter classes. 
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. 
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'. 
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. 
real max_convective_eigenvalue(const std::array< real, nstate > &soln) const
Maximum convective eigenvalue. 
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. 
double diffusion_scaling_coeff
Diffusion scaling coefficient in front of the diffusion tensor. 
dealii::Tensor< 2, dim, double > diffusion_tensor
Anisotropic diffusion matrix. 
const Parameters::AllParameters::TestType test_type
Allows Burgers to distinguish between different unsteady test types. 
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, real > > manufactured_solution_function=nullptr, const Parameters::AllParameters::TestType parameters_test=Parameters::AllParameters::TestType::run_control, const bool has_nonzero_physical_source=false)
Constructor. 
Burger's equation with nonlinear advective term and linear diffusive term. Derived from PhysicsBase...
const bool hasDiffusion
Turns on diffusive part of the Burgers problem. 
std::shared_ptr< ManufacturedSolutionFunction< dim, real > > manufactured_solution_function
Manufactured solution function. 
real diffusion_coefficient() const
Diffusion coefficient.