9 #ifndef __laplace_polynomial_h 10 #define __laplace_polynomial_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> 36 PolynomialRHS(
const Polynomials::Polynomial<double> solution_1d);
38 virtual void cell(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
39 virtual void boundary(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
40 virtual void face(DoFInfo<dim>& dinfo1, DoFInfo<dim>& dinfo2, IntegrationInfo<dim>& info1,
41 IntegrationInfo<dim>& info2)
const;
60 virtual void cell(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
61 virtual void boundary(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
62 virtual void face(DoFInfo<dim>& dinfo1, DoFInfo<dim>& dinfo2, IntegrationInfo<dim>& info1,
63 IntegrationInfo<dim>& info2)
const;
75 , solution_1d(solution_1d)
79 virtual double value(
const Point<dim>& p,
const unsigned int component = 0)
const;
91 virtual void cell(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
92 virtual void boundary(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
93 virtual void face(DoFInfo<dim>& dinfo1, DoFInfo<dim>& dinfo2, IntegrationInfo<dim>& info1,
94 IntegrationInfo<dim>& info2)
const;
104 : solution_1d(solution_1d)
106 this->use_boundary =
false;
107 this->use_face =
false;
114 std::vector<double> rhs(info.fe_values(0).n_quadrature_points, 0.);
116 std::vector<double> px(3);
117 std::vector<double> py(3);
118 for (
unsigned int k = 0; k < info.fe_values(0).n_quadrature_points; ++k)
120 const double x = info.fe_values(0).quadrature_point(k)(0);
121 const double y = info.fe_values(0).quadrature_point(k)(1);
125 rhs[k] = -px[2] * py[0] - px[0] * py[2];
128 L2::L2(dinfo.vector(0).block(0), info.fe_values(0), rhs);
140 IntegrationInfo<dim>&)
const 148 : solution_1d(solution_1d)
150 this->use_boundary =
true;
151 this->use_face =
true;
158 Assert(info.values.size() >= 1, ExcDimensionMismatch(info.values.size(), 1));
159 Assert(info.gradients.size() >= 1, ExcDimensionMismatch(info.values.size(), 1));
161 std::vector<double> rhs(info.fe_values(0).n_quadrature_points, 0.);
163 std::vector<double> px(3);
164 std::vector<double> py(3);
165 for (
unsigned int k = 0; k < info.fe_values(0).n_quadrature_points; ++k)
167 const double x = info.fe_values(0).quadrature_point(k)(0);
168 const double y = info.fe_values(0).quadrature_point(k)(1);
172 rhs[k] = -px[2] * py[0] - px[0] * py[2];
179 L2::L2(dinfo.vector(0).block(0), info.fe_values(0), info.values[0][0]);
181 L2::L2(dinfo.vector(0).block(0), info.fe_values(0), rhs, -factor);
189 std::vector<double> boundary_values(info.fe_values(0).n_quadrature_points, 0.);
190 std::vector<double> px(1);
191 std::vector<double> py(1);
192 for (
unsigned int k = 0; k < info.fe_values(0).n_quadrature_points; ++k)
194 const double x = info.fe_values(0).quadrature_point(k)(0);
195 const double y = info.fe_values(0).quadrature_point(k)(1);
198 boundary_values[k] = px[0] * py[0];
202 const unsigned int deg = info.fe_values(0).get_fe().tensor_degree();
203 Laplace::nitsche_residual(dinfo.vector(0).block(0),
206 info.gradients[0][0],
208 Laplace::compute_penalty(dinfo, dinfo, deg, deg),
215 IntegrationInfo<dim>& info1, IntegrationInfo<dim>& info2)
const 217 const unsigned int deg = info1.fe_values(0).get_fe().tensor_degree();
219 Laplace::ip_residual(dinfo1.vector(0).block(0),
220 dinfo2.vector(0).block(0),
224 info1.gradients[0][0],
226 info2.gradients[0][0],
227 Laplace::compute_penalty(dinfo1, dinfo2, deg, deg),
237 Assert(component == 0, ExcNotImplemented());
239 std::vector<double> px(1);
240 std::vector<double> py(1);
244 return px[0] * py[0];
251 : solution_1d(solution_1d)
253 this->use_boundary =
false;
254 this->use_face =
false;
264 Assert(dinfo.n_values() >= 2, ExcDimensionMismatch(dinfo.n_values(), 4));
267 std::vector<double> px(3);
268 std::vector<double> py(3);
269 for (
unsigned int k = 0; k < info.fe_values(0).n_quadrature_points; ++k)
271 const double x = info.fe_values(0).quadrature_point(k)(0);
272 const double y = info.fe_values(0).quadrature_point(k)(1);
275 const double dx = info.fe_values(0).JxW(k);
277 Tensor<1, dim> Du = info.gradients[0][0][k];
278 Du[0] -= px[1] * py[0];
279 Du[1] -= px[0] * py[1];
280 double u = info.values[0][0][k];
284 dinfo.value(0) += (u * u) * dx;
286 dinfo.value(1) += (Du * Du) * dx;
288 if (dinfo.value(2) < u * u)
289 dinfo.value(2) = u * u;
292 dinfo.value(0) = std::sqrt(dinfo.value(0));
293 dinfo.value(1) = std::sqrt(dinfo.value(1));
294 dinfo.value(2) = std::sqrt(dinfo.value(2));
306 IntegrationInfo<dim>&)
const PolynomialBoundary(const Polynomials::Polynomial< double > solution_1d)
Definition: laplace/polynomial.h:73
virtual void face(DoFInfo< dim > &dinfo1, DoFInfo< dim > &dinfo2, IntegrationInfo< dim > &info1, IntegrationInfo< dim > &info2) const
Definition: laplace/polynomial.h:139
PolynomialError(const Polynomials::Polynomial< double > solution_1d)
Definition: laplace/polynomial.h:250
virtual void boundary(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: laplace/polynomial.h:299
double timestep
Current timestep if applicable.
Definition: integrator.h:48
virtual void cell(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: laplace/polynomial.h:156
Polynomials::Polynomial< double > solution_1d
Definition: laplace/polynomial.h:66
virtual void cell(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: laplace/polynomial.h:262
Definition: laplace/eigen.h:19
virtual void boundary(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: laplace/polynomial.h:187
Polynomials::Polynomial< double > solution_1d
Definition: laplace/polynomial.h:44
virtual void face(DoFInfo< dim > &dinfo1, DoFInfo< dim > &dinfo2, IntegrationInfo< dim > &info1, IntegrationInfo< dim > &info2) const
Definition: laplace/polynomial.h:214
virtual void boundary(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: laplace/polynomial.h:133
Definition: laplace/polynomial.h:33
Polynomials::Polynomial< double > solution_1d
Definition: laplace/polynomial.h:97
virtual double value(const Point< dim > &p, const unsigned int component=0) const
Definition: laplace/polynomial.h:235
PolynomialResidual(const Polynomials::Polynomial< double > solution_1d)
Definition: laplace/polynomial.h:147
std::vector< unsigned int > error_types
Definition: integrator.h:113
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
virtual void cell(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: laplace/polynomial.h:112
Definition: laplace/polynomial.h:55
Polynomials::Polynomial< double > solution_1d
Definition: laplace/polynomial.h:82
Definition: laplace/polynomial.h:86
virtual void face(DoFInfo< dim > &dinfo1, DoFInfo< dim > &dinfo2, IntegrationInfo< dim > &info1, IntegrationInfo< dim > &info2) const
Definition: laplace/polynomial.h:305
Definition: laplace/polynomial.h:70
Definition: integrator.h:29