1 #ifndef __TARGET_FUNCTIONAL_H__ 2 #define __TARGET_FUNCTIONAL_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 "functional.h" 18 #include "physics/physics.h" 43 template <
int dim,
int nstate,
typename real>
124 const dealii::LinearAlgebra::distributed::Vector<real> &target_solution,
134 std::shared_ptr<
Physics::PhysicsBase<dim,nstate,Sacado::Fad::DFad<Sacado::Fad::DFad<real>>> > _physics_fad_fad,
144 const dealii::LinearAlgebra::distributed::Vector<real> &target_solution,
145 std::shared_ptr<
Physics::PhysicsBase<dim,nstate,Sacado::Fad::DFad<Sacado::Fad::DFad<real>>> > _physics_fad_fad,
165 const bool compute_dIdW =
false,
166 const bool compute_dIdX =
false,
167 const bool compute_d2I =
false)
override;
174 const double stepsize);
181 const double stepsize);
185 template <
typename real2>
188 const std::vector< real2 > &soln_coeff,
189 const std::vector< real > &target_soln_coeff,
190 const dealii::FESystem<dim> &fe_solution,
191 const std::vector< real2 > &coords_coeff,
192 const dealii::FESystem<dim> &fe_metric,
193 const dealii::Quadrature<dim> &volume_quadrature)
const;
199 const std::vector< real > &soln_coeff,
200 const std::vector< real > &target_soln_coeff,
201 const dealii::FESystem<dim> &fe_solution,
202 const std::vector< real > &coords_coeff,
203 const dealii::FESystem<dim> &fe_metric,
204 const dealii::Quadrature<dim> &volume_quadrature)
const;
208 const std::vector< Sacado::Fad::DFad<Sacado::Fad::DFad<real>> > &soln_coeff,
209 const std::vector< real > &target_soln_coeff,
210 const dealii::FESystem<dim> &fe_solution,
211 const std::vector< Sacado::Fad::DFad<Sacado::Fad::DFad<real>> > &coords_coeff,
212 const dealii::FESystem<dim> &fe_metric,
213 const dealii::Quadrature<dim> &volume_quadrature)
const;
217 template <
typename real2>
220 const unsigned int boundary_id,
221 const std::vector< real2 > &soln_coeff,
222 const std::vector< real > &target_soln_coeff,
223 const dealii::FESystem<dim> &fe_solution,
224 const std::vector< real2 > &coords_coeff,
225 const dealii::FESystem<dim> &fe_metric,
226 const dealii::Quadrature<dim-1> &face_quadrature,
227 const unsigned int face_number)
const;
232 const unsigned int boundary_id,
233 const std::vector< real > &soln_coeff,
234 const std::vector< real > &target_soln_coeff,
235 const dealii::FESystem<dim> &fe_solution,
236 const std::vector< real > &coords_coeff,
237 const dealii::FESystem<dim> &fe_metric,
238 const dealii::Quadrature<dim-1> &face_quadrature,
239 const unsigned int face_number)
const;
244 const unsigned int boundary_id,
245 const std::vector< Sacado::Fad::DFad<Sacado::Fad::DFad<real>> > &soln_coeff,
246 const std::vector< real > &target_soln_coeff,
247 const dealii::FESystem<dim> &fe_solution,
248 const std::vector< Sacado::Fad::DFad<Sacado::Fad::DFad<real>> > &coords_coeff,
249 const dealii::FESystem<dim> &fe_metric,
250 const dealii::Quadrature<dim-1> &face_quadrature,
251 const unsigned int face_number)
const;
257 const dealii::Point<dim,real> &,
258 const std::array<real,nstate> &soln_at_q,
259 const std::array<real,nstate> &target_soln_at_q,
260 const std::array<dealii::Tensor<1,dim,real>,nstate> &,
261 const std::array<dealii::Tensor<1,dim,real>,nstate> &)
const 265 for (
int istate=0; istate<nstate; ++istate) {
266 l2error += std::pow(soln_at_q[istate] - target_soln_at_q[istate], 2);
275 const dealii::Point<dim,FadFadType> &,
276 const std::array<FadFadType,nstate> &soln_at_q,
277 const std::array<real,nstate> &target_soln_at_q,
278 const std::array<dealii::Tensor<1,dim,FadFadType>,nstate> &,
279 const std::array<dealii::Tensor<1,dim,FadFadType>,nstate> &)
const 282 for (
int istate=0; istate<nstate; ++istate) {
283 l2error += std::pow(soln_at_q[istate] - target_soln_at_q[istate], 2);
293 const dealii::Point<dim,real> &,
294 const dealii::Tensor<1,dim,real> &,
295 const std::array<real,nstate> &soln_at_q,
296 const std::array<real,nstate> &target_soln_at_q,
297 const std::array<dealii::Tensor<1,dim,real>,nstate> &,
298 const std::array<dealii::Tensor<1,dim,real>,nstate> &)
302 for (
int istate=0; istate<nstate; ++istate) {
303 l2error += std::pow(soln_at_q[istate] - target_soln_at_q[istate], 2);
312 const dealii::Point<dim,FadFadType> &,
313 const dealii::Tensor<1,dim,FadFadType> &,
314 const std::array<FadFadType,nstate> &soln_at_q,
315 const std::array<real,nstate> &target_soln_at_q,
316 const std::array<dealii::Tensor<1,dim,FadFadType>,nstate> &,
317 const std::array<dealii::Tensor<1,dim,FadFadType>,nstate> &)
321 for (
int istate=0; istate<nstate; ++istate) {
322 l2error += std::pow(soln_at_q[istate] - target_soln_at_q[istate], 2);
354 #endif // __TARGET_FUNCTIONAL_H__ const bool uses_solution_gradient
Will evaluate solution gradient at quadrature points.
TargetFunctional base class.
const bool uses_solution_values
Will evaluate solution values at quadrature points.
Base class from which Advection, Diffusion, ConvectionDiffusion, and Euler is derived.
virtual real evaluate_boundary_integrand(const PHiLiP::Physics::PhysicsBase< dim, nstate, real > &, const unsigned int, const dealii::Point< dim, real > &, const dealii::Tensor< 1, dim, real > &, 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 > &, const std::array< dealii::Tensor< 1, dim, real >, nstate > &) const
Virtual function for computation of cell face functional term.
dealii::LinearAlgebra::distributed::Vector< real > evaluate_dIdX_finiteDifferences(DGBase< dim, real > &dg, const PHiLiP::Physics::PhysicsBase< dim, nstate, real > &physics, const double stepsize)
virtual real evaluate_volume_integrand(const PHiLiP::Physics::PhysicsBase< dim, nstate, real > &, const dealii::Point< dim, real > &, 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 > &, const std::array< dealii::Tensor< 1, dim, real >, nstate > &) const
Virtual function for computation of cell volume functional term.
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.
real2 evaluate_boundary_cell_functional(const Physics::PhysicsBase< dim, nstate, real2 > &physics, const unsigned int boundary_id, const std::vector< real2 > &soln_coeff, const std::vector< real > &target_soln_coeff, const dealii::FESystem< dim > &fe_solution, const std::vector< real2 > &coords_coeff, const dealii::FESystem< dim > &fe_metric, const dealii::Quadrature< dim-1 > &face_quadrature, const unsigned int face_number) const
Templated function to evaluate a cell's face functional.
TargetFunctional(std::shared_ptr< DGBase< dim, real >> dg_input, const bool uses_solution_values=true, const bool uses_solution_gradient=true)
Constructor.
Sacado::Fad::DFad< real > FadType
Sacado AD type for first derivatives.
virtual FadFadType evaluate_boundary_integrand(const PHiLiP::Physics::PhysicsBase< dim, nstate, FadFadType > &, const unsigned int, const dealii::Point< dim, FadFadType > &, const dealii::Tensor< 1, dim, FadFadType > &, 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 > &, const std::array< dealii::Tensor< 1, dim, FadFadType >, nstate > &) const
Virtual function for Sacado computation of cell face functional term and derivatives.
const dealii::LinearAlgebra::distributed::Vector< real > target_solution
Solution used to evaluate target functional.
virtual FadFadType evaluate_volume_integrand(const PHiLiP::Physics::PhysicsBase< dim, nstate, FadFadType > &, const dealii::Point< dim, FadFadType > &, 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 > &, const std::array< dealii::Tensor< 1, dim, FadFadType >, nstate > &) const
Virtual function for Sacado computation of cell volume functional term and derivatives.
real2 evaluate_volume_cell_functional(const Physics::PhysicsBase< dim, nstate, real2 > &physics, const std::vector< real2 > &soln_coeff, const std::vector< real > &target_soln_coeff, const dealii::FESystem< dim > &fe_solution, const std::vector< real2 > &coords_coeff, const dealii::FESystem< dim > &fe_metric, const dealii::Quadrature< dim > &volume_quadrature) const
Templated function to evaluate a cell's volume functional.
dealii::LinearAlgebra::distributed::Vector< real > evaluate_dIdw_finiteDifferences(DGBase< dim, real > &dg, const PHiLiP::Physics::PhysicsBase< dim, nstate, real > &physics, const double stepsize)
Sacado::Fad::DFad< FadType > FadFadType
Sacado AD type that allows 2nd derivatives.
std::shared_ptr< Physics::PhysicsBase< dim, nstate, FadFadType > > physics_fad_fad
Physics that should correspond to the one in DGBase.
std::shared_ptr< DGBase< dim, real, dealii::parallel::distributed::Triangulation< dim > > > dg
Smart pointer to DGBase.
DGBase is independent of the number of state variables.