9 #ifndef __readiff_residual_h 10 #define __readiff_residual_h 12 #include <amandus/integrator.h> 13 #include <deal.II/base/polynomial.h> 14 #include <deal.II/base/tensor.h> 15 #include <deal.II/integrators/divergence.h> 16 #include <deal.II/integrators/l2.h> 17 #include <deal.II/integrators/laplace.h> 18 #include <readiff/parameters.h> 39 virtual void cell(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
40 virtual void boundary(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
41 virtual void face(DoFInfo<dim>& dinfo1, DoFInfo<dim>& dinfo2, IntegrationInfo<dim>& info1,
42 IntegrationInfo<dim>& info2)
const;
45 SmartPointer<const Parameters, class Residual<dim>>
parameters;
54 this->use_boundary =
false;
55 this->use_face =
true;
62 Assert(this->
timestep != 0, ExcMessage(
"Only for transient problems"));
63 Assert(info.values.size() >= 1, ExcDimensionMismatch(info.values.size(), 1));
64 Assert(info.gradients.size() >= 1, ExcDimensionMismatch(info.values.size(), 1));
66 std::vector<double> rhs0(info.fe_values(0).n_quadrature_points, 0.);
67 std::vector<double> rhs1(info.fe_values(0).n_quadrature_points, 0.);
70 for (
unsigned int k = 0; k < info.fe_values(0).n_quadrature_points; ++k)
72 const double u = info.values[0][0][k];
73 const double v = info.values[0][1][k];
74 rhs0[k] = p.A1 + p.B1 * u + p.C1 * v + p.D1 * u * v + p.E1 * u * u + p.F1 * v * v +
75 p.G1 * u * u * v + p.H1 * u * v * v;
76 rhs1[k] = p.A2 + p.B2 * u + p.C2 * v + p.D2 * u * v + p.E2 * u * u + p.F2 * v * v +
77 p.G2 * u * u * v + p.H2 * u * v * v;
80 L2::L2(dinfo.vector(0).block(0), info.fe_values(0), rhs0);
81 L2::L2(dinfo.vector(0).block(1), info.fe_values(0), rhs1);
83 dinfo.vector(0).block(0), info.fe_values(0), info.gradients[0][0], p.alpha1);
85 dinfo.vector(0).block(1), info.fe_values(0), info.gradients[0][1], p.alpha2);
97 IntegrationInfo<dim>& info2)
const 99 const unsigned int deg = info1.fe_values(0).get_fe().tensor_degree();
101 Laplace::ip_residual(dinfo1.vector(0).block(0),
102 dinfo2.vector(0).block(0),
106 info1.gradients[0][0],
108 info2.gradients[0][0],
109 Laplace::compute_penalty(dinfo1, dinfo2, deg, deg),
111 Laplace::ip_residual(dinfo1.vector(0).block(1),
112 dinfo2.vector(0).block(1),
116 info1.gradients[0][1],
118 info2.gradients[0][1],
119 Laplace::compute_penalty(dinfo1, dinfo2, deg, deg),
virtual void face(DoFInfo< dim > &dinfo1, DoFInfo< dim > &dinfo2, IntegrationInfo< dim > &info1, IntegrationInfo< dim > &info2) const
Definition: readiff/residual.h:96
double timestep
Current timestep if applicable.
Definition: integrator.h:48
virtual void boundary(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: readiff/residual.h:90
SmartPointer< const Parameters, class Residual< dim > > parameters
Definition: readiff/residual.h:45
Definition: readiff/residual.h:34
virtual void cell(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: readiff/residual.h:60
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
Definition: readiff/matrix.h:31
Definition: integrator.h:29