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.