7 #ifndef __advection_residual_h 8 #define __advection_residual_h 10 #include <amandus/advection/parameters.h> 11 #include <amandus/integrator.h> 12 #include <deal.II/integrators/advection.h> 13 #include <deal.II/integrators/l2.h> 31 Residual(
const Parameters& par,
const dealii::Function<dim>& bdry);
33 virtual void cell(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
34 virtual void boundary(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
35 virtual void face(DoFInfo<dim>& dinfo1, DoFInfo<dim>& dinfo2, IntegrationInfo<dim>& info1,
36 IntegrationInfo<dim>& info2)
const;
39 dealii::SmartPointer<const Parameters, class Residual<dim>>
parameters;
40 dealii::SmartPointer<const dealii::Function<dim>,
class Residual<dim>> boundary_values;
48 , boundary_values(&bdry)
50 this->input_vector_names.push_back(
"Newton iterate");
57 Assert(info.values.size() >= 1, dealii::ExcDimensionMismatch(info.values.size(), 1));
58 Assert(info.gradients.size() >= 1, dealii::ExcDimensionMismatch(info.values.size(), 1));
72 dinfo.vector(0).block(0),
74 dealii::make_slice(info.gradients[0], 0, dim),
76 dealii::LocalIntegrators::Divergence::grad_div_residual(
77 dinfo.vector(0).block(0),
79 dealii::make_slice(info.gradients[0], 0, dim),
86 dealii::make_slice(info.gradients[0], 0, dim),
96 std::vector<std::vector<double>> null(
97 dim, std::vector<double>(info.fe_values(0).n_quadrature_points, 0.));
99 boundary_values->vector_values(info.fe_values(0).get_quadrature_points(), null);
101 const unsigned int deg = info.fe_values(0).get_fe().tensor_degree();
102 if (dinfo.face->boundary_indicator() == 0 || dinfo.face->boundary_indicator() == 1)
103 dealii::LocalIntegrators::Advection::nitsche_residual(
104 dinfo.vector(0).block(0),
106 dealii::make_slice(info.values[0], 0, dim),
107 dealii::make_slice(info.gradients[0], 0, dim),
109 dealii::LocalIntegrators::Laplace::compute_penalty(dinfo, dinfo, deg, deg),
116 IntegrationInfo<dim>& info2)
const 118 const unsigned int deg = info1.fe_values(0).get_fe().tensor_degree();
119 dealii::LocalIntegrators::Advection::ip_residual(
120 dinfo1.vector(0).block(0),
121 dinfo2.vector(0).block(0),
124 dealii::make_slice(info1.values[0], 0, dim),
125 dealii::make_slice(info1.gradients[0], 0, dim),
126 dealii::make_slice(info2.values[0], 0, dim),
127 dealii::make_slice(info2.gradients[0], 0, dim),
128 dealii::LocalIntegrators::Laplace::compute_penalty(dinfo1, dinfo2, deg, deg),
virtual void face(DoFInfo< dim > &dinfo1, DoFInfo< dim > &dinfo2, IntegrationInfo< dim > &info1, IntegrationInfo< dim > &info2) const
Definition: advection/residual.h:115
Definition: advection/residual.h:28
Definition: advection/matrix.h:17
virtual void cell(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: advection/residual.h:55
virtual void boundary(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: advection/residual.h:94
void cell_residual(dealii::Vector< number > &result, const dealii::FEValuesBase< dim > &fe, const dealii::VectorSlice< const std::vector< std::vector< dealii::Tensor< 1, dim >>>> &input, double lambda=0., double mu=1.)
Definition: elasticity/integrators.h:23
dealii::SmartPointer< const Parameters, class Residual< dim > > parameters
Definition: advection/residual.h:39
Definition: integrator.h:29