7 #ifndef __elasticity_polynomial_h 8 #define __elasticity_polynomial_h 10 #include <amandus/elasticity/residual.h> 11 #include <amandus/integrator.h> 12 #include <deal.II/base/polynomial.h> 13 #include <deal.II/base/tensor.h> 14 #include <deal.II/integrators/divergence.h> 15 #include <deal.II/integrators/l2.h> 16 #include <deal.II/integrators/laplace.h> 17 #include <elasticity/parameters.h> 42 const std::vector<Polynomials::Polynomial<double>> potentials_1d);
44 virtual void cell(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
45 virtual void boundary(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
48 dealii::SmartPointer<const Parameters, class Residual<dim>>
parameters;
95 const std::vector<Polynomials::Polynomial<double>> potentials_1d);
97 virtual void cell(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
98 virtual void boundary(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
99 virtual void face(DoFInfo<dim>& dinfo1, DoFInfo<dim>& dinfo2, IntegrationInfo<dim>& info1,
100 IntegrationInfo<dim>& info2)
const;
103 dealii::SmartPointer<const Parameters, class Residual<dim>>
parameters;
111 const std::vector<Polynomials::Polynomial<double>> potentials_1d)
113 , potentials_1d(potentials_1d)
115 AssertDimension(
potentials_1d.size(), (dim == 2 ? 2 : dim + 1));
116 this->use_boundary =
false;
117 this->use_face =
false;
124 std::vector<std::vector<double>> rhs(dim,
125 std::vector<double>(info.fe_values(0).n_quadrature_points));
126 std::vector<std::vector<double>> phi(dim, std::vector<double>(4));
128 for (
unsigned int k = 0; k < info.fe_values(0).n_quadrature_points; ++k)
130 const Point<dim>& x = info.fe_values(0).quadrature_point(k);
131 Tensor<1, dim> DivDu;
132 Tensor<1, dim> DDivu;
139 DivDu[0] -= phi[0][3] * phi[1][0] + phi[0][1] * phi[1][2];
140 DivDu[1] -= phi[0][0] * phi[1][3] + phi[0][2] * phi[1][1];
141 DDivu[0] -= phi[0][3] * phi[1][0] + phi[0][1] * phi[1][2];
142 DDivu[1] -= phi[0][2] * phi[1][1] + phi[0][0] * phi[1][3];
147 DivDu[0] += 0.5 * (phi[0][0] * phi[1][3] + phi[0][2] * phi[1][1]);
148 DivDu[1] -= 0.5 * (phi[0][3] * phi[1][0] + phi[0][1] * phi[1][2]);
152 for (
unsigned int d = 0; d < dim; ++d)
156 L2::L2(dinfo.vector(0).block(0), info.fe_values(0), rhs);
169 const Parameters& par,
const std::vector<Polynomials::Polynomial<double>>
potentials_1d)
173 AssertDimension(
potentials_1d.size(), (dim == 2 ? 2 : dim + 1));
180 this->use_boundary =
false;
181 this->use_face =
false;
190 std::vector<std::vector<double>> phi(dim, std::vector<double>(3));
191 for (
unsigned int k = 0; k < info.fe_values(0).n_quadrature_points; ++k)
193 const Point<dim>& x = info.fe_values(0).quadrature_point(k);
196 Tensor<1, dim> Du[dim];
197 const double dx = info.fe_values(0).JxW(k);
199 for (
unsigned int d = 0; d < dim; ++d)
201 u[d] = info.values[0][d][k];
202 Du[d] = info.gradients[0][d][k];
208 u[0] -= phi[0][1] * phi[1][0];
209 u[1] -= phi[0][0] * phi[1][1];
210 Du[0][0] -= phi[0][2] * phi[1][0];
211 Du[0][1] -= phi[0][1] * phi[1][1];
212 Du[1][0] -= phi[0][1] * phi[1][1];
213 Du[1][1] -= phi[0][0] * phi[1][2];
221 u[0] += phi[0][0] * phi[1][1];
222 u[1] -= phi[0][1] * phi[1][0];
223 Du[0][0] += phi[0][1] * phi[1][1];
224 Du[0][1] += phi[0][0] * phi[1][2];
225 Du[1][0] -= phi[0][2] * phi[1][0];
226 Du[1][1] -= phi[0][1] * phi[1][1];
229 double uu = 0., Duu = 0., div = 0.;
230 for (
unsigned int d = 0; d < dim; ++d)
233 Duu += Du[d] * Du[d];
234 div += Du[d][d] * Du[d][d];
238 dinfo.value(0) += uu * dx;
240 dinfo.value(1) += Duu * dx;
242 dinfo.value(2) = div * dx;
245 for (
unsigned int i = 0; i <= 2; ++i)
246 dinfo.value(i) = std::sqrt(dinfo.value(i));
258 IntegrationInfo<dim>&)
const virtual void cell(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: elasticity/polynomial.h:122
std::vector< Polynomials::Polynomial< double > > potentials_1d
Definition: elasticity/polynomial.h:49
virtual void cell(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: elasticity/polynomial.h:186
std::vector< std::string > error_names
Definition: integrator.h:120
dealii::SmartPointer< const Parameters, class Residual< dim > > parameters
Definition: elasticity/polynomial.h:48
Definition: elasticity/polynomial.h:91
virtual void boundary(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: elasticity/polynomial.h:251
Definition: elasticity/eigen.h:25
std::vector< Polynomials::Polynomial< double > > potentials_1d
Definition: elasticity/polynomial.h:104
std::vector< unsigned int > error_types
Definition: integrator.h:113
virtual void face(DoFInfo< dim > &dinfo1, DoFInfo< dim > &dinfo2, IntegrationInfo< dim > &info1, IntegrationInfo< dim > &info2) const
Definition: elasticity/polynomial.h:257
Definition: elasticity/polynomial.h:38
PolynomialError(const Parameters &par, const std::vector< Polynomials::Polynomial< double >> potentials_1d)
Definition: elasticity/polynomial.h:168
dealii::SmartPointer< const Parameters, class Residual< dim > > parameters
Definition: elasticity/polynomial.h:103
Definition: integrator.h:29
virtual void boundary(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: elasticity/polynomial.h:161