9 #ifndef __darcy_polynomial_h 10 #define __darcy_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> 68 RHS(
const Polynomials::Polynomial<double> curl_potential_1d,
69 const Polynomials::Polynomial<double> grad_potential_1d,
70 const Polynomials::Polynomial<double> pressure_1d);
72 virtual void cell(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
73 virtual void boundary(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
74 virtual void face(DoFInfo<dim>& dinfo1, DoFInfo<dim>& dinfo2, IntegrationInfo<dim>& info1,
75 IntegrationInfo<dim>& info2)
const;
94 Residual(
const Polynomials::Polynomial<double> curl_potential_1d,
95 const Polynomials::Polynomial<double> grad_potential_1d,
96 const Polynomials::Polynomial<double> pressure_1d);
98 virtual void cell(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
99 virtual void boundary(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
100 virtual void face(DoFInfo<dim>& dinfo1, DoFInfo<dim>& dinfo2, IntegrationInfo<dim>& info1,
101 IntegrationInfo<dim>& info2)
const;
118 Error(
const Polynomials::Polynomial<double> curl_potential_1d,
119 const Polynomials::Polynomial<double> grad_potential_1d,
120 const Polynomials::Polynomial<double> pressure_1d);
122 virtual void cell(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
123 virtual void boundary(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
124 virtual void face(DoFInfo<dim>& dinfo1, DoFInfo<dim>& dinfo2, IntegrationInfo<dim>& info1,
125 IntegrationInfo<dim>& info2)
const;
137 const Polynomials::Polynomial<double> grad_potential_1d,
138 const Polynomials::Polynomial<double> pressure_1d)
139 : curl_potential_1d(curl_potential_1d)
140 , grad_potential_1d(grad_potential_1d)
141 , pressure_1d(pressure_1d)
143 this->use_boundary =
false;
144 this->use_face =
false;
151 std::vector<std::vector<double>> rhs_u(
152 dim, std::vector<double>(info.fe_values(0).n_quadrature_points));
153 std::vector<double> rhs_p(info.fe_values(0).n_quadrature_points);
155 std::vector<double> px(2);
156 std::vector<double> py(2);
157 for (
unsigned int k = 0; k < info.fe_values(0).n_quadrature_points; ++k)
159 const double x = info.fe_values(0).quadrature_point(k)(0);
160 const double y = info.fe_values(0).quadrature_point(k)(1);
165 rhs_u[0][k] = px[0] * py[1];
166 rhs_u[1][k] = -px[1] * py[0];
172 rhs_u[0][k] += px[1] * py[0];
173 rhs_u[1][k] += px[0] * py[1];
182 rhs_p[k] += px[2] * py[0] + px[0] * py[2];
185 L2::L2(dinfo.vector(0).block(0), info.fe_values(0), rhs_u);
186 L2::L2(dinfo.vector(0).block(1), info.fe_values(1), rhs_p);
197 RHS<dim>::face(DoFInfo<dim>&, DoFInfo<dim>&, IntegrationInfo<dim>&, IntegrationInfo<dim>&)
const 207 : curl_potential_1d(curl_potential_1d)
208 , grad_potential_1d(grad_potential_1d)
209 , pressure_1d(pressure_1d)
211 this->use_boundary =
false;
212 this->use_face =
false;
220 Assert(info.values.size() >= 1, ExcDimensionMismatch(info.values.size(), 1));
221 Assert(info.gradients.size() >= 1, ExcDimensionMismatch(info.values.size(), 1));
223 std::vector<std::vector<double>> rhs_u(
224 dim, std::vector<double>(info.fe_values(0).n_quadrature_points));
225 std::vector<double> rhs_p(info.fe_values(0).n_quadrature_points);
227 std::vector<double> px(2);
228 std::vector<double> py(2);
229 for (
unsigned int k = 0; k < info.fe_values(0).n_quadrature_points; ++k)
231 const double x = info.fe_values(0).quadrature_point(k)(0);
232 const double y = info.fe_values(0).quadrature_point(k)(1);
237 rhs_u[0][k] = px[0] * py[1];
238 rhs_u[1][k] = -px[1] * py[0];
244 rhs_u[0][k] += px[1] * py[0];
245 rhs_u[1][k] += px[0] * py[1];
254 rhs_p[k] -= px[2] * py[0] + px[0] * py[2];
257 L2::L2(dinfo.vector(0).block(0), info.fe_values(0), rhs_u, -1.);
258 L2::L2(dinfo.vector(0).block(1), info.fe_values(1), rhs_p, -1.);
260 L2::L2(dinfo.vector(0).block(0), info.fe_values(0), make_slice(info.values[0], 0, dim));
261 Divergence::gradient_residual(
262 dinfo.vector(0).block(0), info.fe_values(0), info.values[0][dim], -1.);
264 dinfo.vector(0).block(1), info.fe_values(1), make_slice(info.gradients[0], 0, dim), 1.);
276 IntegrationInfo<dim>&)
const 286 : curl_potential_1d(curl_potential_1d)
287 , grad_potential_1d(grad_potential_1d)
288 , pressure_1d(pressure_1d)
302 this->use_boundary =
false;
303 this->use_face =
false;
310 std::vector<double> px(3);
311 std::vector<double> py(3);
312 for (
unsigned int k = 0; k < info.fe_values(0).n_quadrature_points; ++k)
314 const double x = info.fe_values(0).quadrature_point(k)(0);
315 const double y = info.fe_values(0).quadrature_point(k)(1);
318 const double dx = info.fe_values(0).JxW(k);
320 Tensor<1, dim> Du0 = info.gradients[0][0][k];
321 Du0[0] -= px[1] * py[1];
322 Du0[1] -= px[0] * py[2];
323 Tensor<1, dim> Du1 = info.gradients[0][1][k];
324 Du1[0] += px[2] * py[0];
325 Du1[1] += px[1] * py[1];
326 double u0 = info.values[0][0][k];
328 double u1 = info.values[0][1][k];
333 double p = info.values[0][dim][k];
335 Tensor<1, dim> Dp = info.gradients[0][dim][k];
336 Dp[0] += px[1] * py[0];
337 Dp[1] += px[0] * py[1];
343 Du0[0] -= px[2] * py[0];
344 Du0[1] -= px[1] * py[1];
345 Du1[0] -= px[1] * py[1];
346 Du1[1] -= px[0] * py[2];
347 double dive = Du0[0] + Du1[1];
350 Dp[0] -= px[1] * py[0];
351 Dp[1] -= px[0] * py[1];
354 dinfo.value(0) += (u0 * u0 + u1 * u1) * dx;
356 dinfo.value(1) += ((Du0 * Du0) + (Du1 * Du1)) * dx;
358 dinfo.value(2) += dive * dive * dx;
360 dinfo.value(3) += p * p * dx;
362 dinfo.value(4) += Dp * Dp * dx;
364 dinfo.value(5) += p * dx;
367 for (
unsigned int i = 0; i <= 4; ++i)
370 dinfo.value(i) = std::sqrt(dinfo.value(i));
382 Error<dim>::face(DoFInfo<dim>&, DoFInfo<dim>&, IntegrationInfo<dim>&, IntegrationInfo<dim>&)
const Residual(const Polynomials::Polynomial< double > curl_potential_1d, const Polynomials::Polynomial< double > grad_potential_1d, const Polynomials::Polynomial< double > pressure_1d)
Definition: darcy/polynomial.h:204
virtual void boundary(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: darcy/polynomial.h:269
virtual void cell(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: darcy/polynomial.h:308
Polynomials::Polynomial< double > pressure_1d
Definition: darcy/polynomial.h:130
std::vector< std::string > error_names
Definition: integrator.h:120
Polynomials::Polynomial< double > curl_potential_1d
Definition: darcy/polynomial.h:128
Polynomials::Polynomial< double > curl_potential_1d
Definition: darcy/polynomial.h:78
Polynomials::Polynomial< double > grad_potential_1d
Definition: darcy/polynomial.h:129
Polynomials::Polynomial< double > pressure_1d
Definition: darcy/polynomial.h:106
virtual void cell(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: darcy/polynomial.h:149
Polynomials::Polynomial< double > curl_potential_1d
Definition: darcy/polynomial.h:104
Polynomials::Polynomial< double > grad_potential_1d
Definition: darcy/polynomial.h:105
virtual void boundary(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: darcy/polynomial.h:191
Definition: estimator.h:33
virtual void boundary(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: darcy/polynomial.h:376
std::vector< unsigned int > error_types
Definition: integrator.h:113
Polynomials::Polynomial< double > pressure_1d
Definition: darcy/polynomial.h:80
Error(const Polynomials::Polynomial< double > curl_potential_1d, const Polynomials::Polynomial< double > grad_potential_1d, const Polynomials::Polynomial< double > pressure_1d)
Definition: darcy/polynomial.h:283
Definition: darcy/polynomial.h:115
virtual void face(DoFInfo< dim > &dinfo1, DoFInfo< dim > &dinfo2, IntegrationInfo< dim > &info1, IntegrationInfo< dim > &info2) const
Definition: darcy/polynomial.h:275
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: darcy/polynomial.h:65
virtual void face(DoFInfo< dim > &dinfo1, DoFInfo< dim > &dinfo2, IntegrationInfo< dim > &info1, IntegrationInfo< dim > &info2) const
Definition: darcy/polynomial.h:382
Definition: darcy/polynomial.h:91
virtual void face(DoFInfo< dim > &dinfo1, DoFInfo< dim > &dinfo2, IntegrationInfo< dim > &info1, IntegrationInfo< dim > &info2) const
Definition: darcy/polynomial.h:197
unsigned int error_type(unsigned int i) const
Definition: integrator.h:437
Definition: integrator.h:29
Polynomials::Polynomial< double > grad_potential_1d
Definition: darcy/polynomial.h:79
virtual void cell(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: darcy/polynomial.h:218