1 #ifndef __PHILIP_LIFT_DRAG_H__ 2 #define __PHILIP_LIFT_DRAG_H__ 4 #include "functional.h" 12 template <
int dim,
int nstate,
typename real,
typename MeshType = dealii::Triangulation<dim>>
14 template <
int dim,
int nstate,
typename real,
typename MeshType = dealii::parallel::distributed::Triangulation<dim>>
86 real
evaluate_functional(
const bool compute_dIdW =
false,
const bool compute_dIdX =
false,
const bool compute_d2I =
false)
override;
91 template<
typename real2>
94 const unsigned int boundary_id,
95 const dealii::Point<dim,real2> &,
96 const dealii::Tensor<1,dim,real2> &normal,
97 const std::array<real2,nstate> &soln_at_q,
98 const std::array<dealii::Tensor<1,dim,real2>,nstate> &)
const 100 if (boundary_id == 1001) {
101 assert(soln_at_q.size() == dim+2);
111 return force_dimensionalization_factor * pressure * (normal *
force_vector);
120 const unsigned int boundary_id,
121 const dealii::Point<dim,real> &phys_coord,
122 const dealii::Tensor<1,dim,real> &normal,
123 const std::array<real,nstate> &soln_at_q,
124 const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_at_q)
const override 126 return evaluate_boundary_integrand<real>(
139 const unsigned int boundary_id,
140 const dealii::Point<dim,FadFadType> &phys_coord,
141 const dealii::Tensor<1,dim,FadFadType> &normal,
142 const std::array<FadFadType,nstate> &soln_at_q,
143 const std::array<dealii::Tensor<1,dim,FadFadType>,nstate> &soln_grad_at_q)
const override 145 return evaluate_boundary_integrand<FadFadType>(
158 const dealii::Point<dim,real> &,
159 const std::array<real,nstate> &,
160 const std::array<dealii::Tensor<1,dim,real>,nstate> &)
const 161 {
return (real) 0.0; }
167 const dealii::Point<dim,FadFadType> &,
const std::array<FadFadType,nstate> &,
168 const std::array<dealii::Tensor<1,dim,FadFadType>,nstate> &)
const 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< dealii::Tensor< 1, dim, real >, nstate > &) const
Virtual function for computation of cell volume functional term.
Sacado::Fad::DFad< real > FadType
Sacado AD type for first derivatives.
Sacado::Fad::DFad< FadType > FadFadType
Sacado AD type that allows 2nd derivatives.
dealii::Tensor< 1, dim, double > initialize_drag_vector(const dealii::Tensor< 2, dim, double > &rotation_matrix)
Initialize drag vector with given rotation matrix based on angle of attack.
Base class from which Advection, Diffusion, ConvectionDiffusion, and Euler is derived.
double initialize_force_dimensionalization_factor()
Compute force dimensionalization factor.
dealii::Tensor< 1, dim, double > initialize_lift_vector(const dealii::Tensor< 2, dim, double > &rotation_matrix)
Initialize lift vector with given rotation matrix based on angle of attack.
Files for the baseline physics.
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< dealii::Tensor< 1, dim, FadFadType >, nstate > &soln_grad_at_q) const override
Virtual function for Sacado computation of cell boundary functional term and derivatives.
dealii::Tensor< 2, dim, double > initialize_rotation_matrix(const double angle_of_attack)
Initialize rotation matrix based on given angle of attack.
const double angle_of_attack
Angle of attack retrieved from euler_fad_fad.
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 > &normal, const std::array< real2, nstate > &soln_at_q, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &) const
Virtual function for computation of cell boundary functional term.
const Physics::Euler< dim, dim+2, FadFadType > & euler_fad_fad
Casts DG's physics into an Euler physics reference.
dealii::Tensor< 1, dim, double > force_vector
Used force scaling vector depending whether this functional represents lift or drag.
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< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_at_q) const override
Virtual function for computation of cell boundary functional term.
LiftDragFunctional(std::shared_ptr< DGBase< dim, real, MeshType >> dg_input, const Functional_types functional_type)
Constructor.
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< dealii::Tensor< 1, dim, FadFadType >, nstate > &) const
Virtual function for Sacado computation of cell volume functional term and derivatives.
const dealii::Tensor< 2, dim, double > rotation_matrix
Rotation matrix based on angle of attack.
const double force_dimensionalization_factor
Pressure induced drag is given by.
real2 compute_pressure(const std::array< real2, nstate > &conservative_soln) const
Evaluate pressure from conservative variables.
Functional_types
Switch between lift and drag functional types.
const dealii::Tensor< 1, dim, double > drag_vector
Drag force scaling based on the rotation matrix applied on a [1 0]^T vector. Assumes that the drag is...
real evaluate_functional(const bool compute_dIdW=false, const bool compute_dIdX=false, const bool compute_d2I=false) override
Destructor.
const Functional_types functional_type
Switches between lift and drag.
DGBase is independent of the number of state variables.
const dealii::Tensor< 1, dim, double > lift_vector
Lift force scaling based on the rotation matrix applied on a [0 1]^T vector. Assumes that the lift is...