1 #ifndef __PHILIP_TARGET_WALL_PRESSURE_H__ 2 #define __PHILIP_TARGET_WALL_PRESSURE_H__ 5 #include <deal.II/differentiation/ad/sacado_math.h> 6 #include <deal.II/differentiation/ad/sacado_number_types.h> 7 #include <deal.II/differentiation/ad/sacado_product_types.h> 8 #include <deal.II/fe/fe_q.h> 9 #include <deal.II/fe/fe_values.h> 10 #include <deal.II/lac/la_parallel_vector.h> 16 #include "dg/dg_base.hpp" 17 #include "physics/physics.h" 18 #include "target_functional.h" 25 template <
int dim,
int nstate,
typename real>
43 real
evaluate_functional(
const bool compute_dIdW =
false,
const bool compute_dIdX =
false,
const bool compute_d2I =
false)
override 47 this->
pcout <<
"Target pressure error l2_norm: " << value <<
"\n";
55 template<
typename real2>
58 const unsigned int boundary_id,
59 const dealii::Point<dim,real2> &,
60 const dealii::Tensor<1,dim,real2> &,
61 const std::array<real2,nstate> &soln_at_q,
62 const std::array<real,nstate> &target_soln_at_q,
63 const std::array<dealii::Tensor<1,dim,real2>,nstate> &,
64 const std::array<dealii::Tensor<1,dim,real2>,nstate> &)
const 66 if (boundary_id == 1001) {
67 assert(soln_at_q.size() == dim+2);
72 std::array<real2,nstate> target_soln_at_q_real2;
73 for (
int s=0; s<nstate; ++s) {
74 target_soln_at_q_real2[s] = target_soln_at_q[s];
76 real2 target_pressure = euler.compute_pressure (target_soln_at_q_real2);
77 real2 diff = pressure - target_pressure;
78 real2 diff2 = diff*diff;
89 const unsigned int boundary_id,
90 const dealii::Point<dim,real> &phys_coord,
91 const dealii::Tensor<1,dim,real> &normal,
92 const std::array<real,nstate> &soln_at_q,
93 const std::array<real,nstate> &target_soln_at_q,
94 const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_at_q,
95 const std::array<dealii::Tensor<1,dim,real>,nstate> &target_soln_grad_at_q)
const override 97 return evaluate_boundary_integrand<real>(
105 target_soln_grad_at_q);
111 const unsigned int boundary_id,
112 const dealii::Point<dim,FadFadType> &phys_coord,
113 const dealii::Tensor<1,dim,FadFadType> &normal,
114 const std::array<FadFadType,nstate> &soln_at_q,
115 const std::array<real,nstate> &target_soln_at_q,
116 const std::array<dealii::Tensor<1,dim,FadFadType>,nstate> &soln_grad_at_q,
117 const std::array<dealii::Tensor<1,dim,FadFadType>,nstate> &target_soln_grad_at_q)
const override 119 return evaluate_boundary_integrand<FadFadType>(
127 target_soln_grad_at_q);
134 const dealii::Point<dim,real> &,
135 const std::array<real,nstate> &,
136 const std::array<real,nstate> &,
137 const std::array<dealii::Tensor<1,dim,real>,nstate> &,
138 const std::array<dealii::Tensor<1,dim,real>,nstate> &)
const override 139 {
return (real) 0.0; }
144 const dealii::Point<dim,FadFadType> &,
145 const std::array<FadFadType,nstate> &,
146 const std::array<real,nstate> &,
147 const std::array<dealii::Tensor<1,dim,FadFadType>,nstate> &,
148 const std::array<dealii::Tensor<1,dim,FadFadType>,nstate> &)
const override real evaluate_functional(const bool compute_dIdW=false, const bool compute_dIdX=false, const bool compute_d2I=false) override
Evaluates the functional derivative with respect to the solution variable.
TargetFunctional base class.
Base class from which Advection, Diffusion, ConvectionDiffusion, and Euler is derived.
real2 evaluate_boundary_integrand(const PHiLiP::Physics::PhysicsBase< dim, nstate, real2 > &physics, const unsigned int boundary_id, const dealii::Point< dim, real2 > &, const dealii::Tensor< 1, dim, real2 > &, const std::array< real2, nstate > &soln_at_q, const std::array< real, nstate > &target_soln_at_q, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &) const
Virtual function for computation of cell boundary functional term.
virtual FadFadType evaluate_boundary_integrand(const PHiLiP::Physics::PhysicsBase< dim, nstate, FadFadType > &physics, const unsigned int boundary_id, const dealii::Point< dim, FadFadType > &phys_coord, const dealii::Tensor< 1, dim, FadFadType > &normal, const std::array< FadFadType, nstate > &soln_at_q, const std::array< real, nstate > &target_soln_at_q, const std::array< dealii::Tensor< 1, dim, FadFadType >, nstate > &soln_grad_at_q, const std::array< dealii::Tensor< 1, dim, FadFadType >, nstate > &target_soln_grad_at_q) const override
Virtual function for Sacado computation of cell boundary functional term and derivatives.
Files for the baseline physics.
virtual real evaluate_functional(const bool compute_dIdW=false, const bool compute_dIdX=false, const bool compute_d2I=false) override
Evaluates the functional derivative with respect to the solution variable.
Sacado::Fad::DFad< real > FadType
Sacado AD type for first derivatives.
virtual real evaluate_volume_integrand(const PHiLiP::Physics::PhysicsBase< dim, nstate, real > &, const dealii::Point< dim, real > &, const std::array< real, nstate > &, const std::array< real, nstate > &, const std::array< dealii::Tensor< 1, dim, real >, nstate > &, const std::array< dealii::Tensor< 1, dim, real >, nstate > &) const override
Virtual function for computation of cell volume functional term.
Euler equations. Derived from PhysicsBase.
virtual FadFadType evaluate_volume_integrand(const PHiLiP::Physics::PhysicsBase< dim, nstate, FadFadType > &, const dealii::Point< dim, FadFadType > &, const std::array< FadFadType, nstate > &, const std::array< real, nstate > &, const std::array< dealii::Tensor< 1, dim, FadFadType >, nstate > &, const std::array< dealii::Tensor< 1, dim, FadFadType >, nstate > &) const override
Virtual function for Sacado computation of cell volume functional term and derivatives.
real2 compute_pressure(const std::array< real2, nstate > &conservative_soln) const
Evaluate pressure from conservative variables.
Sacado::Fad::DFad< FadType > FadFadType
Sacado AD type that allows 2nd derivatives.
virtual real evaluate_boundary_integrand(const PHiLiP::Physics::PhysicsBase< dim, nstate, real > &physics, const unsigned int boundary_id, const dealii::Point< dim, real > &phys_coord, const dealii::Tensor< 1, dim, real > &normal, const std::array< real, nstate > &soln_at_q, const std::array< real, nstate > &target_soln_at_q, const std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_at_q, const std::array< dealii::Tensor< 1, dim, real >, nstate > &target_soln_grad_at_q) const override
Virtual function for computation of cell boundary functional term.
dealii::ConditionalOStream pcout
Parallel std::cout that only outputs on mpi_rank==0.