16 #ifndef dealii_integrators_elasticity_h 17 #define dealii_integrators_elasticity_h 20 #include <deal.II/base/config.h> 22 #include <deal.II/base/exceptions.h> 23 #include <deal.II/base/quadrature.h> 25 #include <deal.II/fe/fe_values.h> 26 #include <deal.II/fe/mapping.h> 28 #include <deal.II/lac/full_matrix.h> 30 #include <deal.II/meshworker/dof_info.h> 32 DEAL_II_NAMESPACE_OPEN
55 const double factor = 1.)
65 const double dx = factor * fe.
JxW(k);
66 for (
unsigned int i = 0; i < n_dofs; ++i)
67 for (
unsigned int j = 0; j < n_dofs; ++j)
68 for (
unsigned int d1 = 0; d1 < dim; ++d1)
69 for (
unsigned int d2 = 0; d2 < dim; ++d2)
84 template <
int dim,
typename number>
100 for (
unsigned int k = 0; k < nq; ++k)
102 const double dx = factor * fe.
JxW(k);
103 for (
unsigned int i = 0; i < n_dofs; ++i)
104 for (
unsigned int d1 = 0; d1 < dim; ++d1)
105 for (
unsigned int d2 = 0; d2 < dim; ++d2)
107 result(i) += dx * .25 *
108 (input[d1][k][d2] + input[d2][k][d1]) *
139 const double dx = factor * fe.
JxW(k);
141 for (
unsigned int i = 0; i < n_dofs; ++i)
142 for (
unsigned int j = 0; j < n_dofs; ++j)
143 for (
unsigned int d1 = 0; d1 < dim; ++d1)
147 M(i, j) += dx * 2. * penalty * u * v;
148 for (
unsigned int d2 = 0; d2 < dim; ++d2)
194 const double dx = factor * fe.
JxW(k);
196 for (
unsigned int i = 0; i < n_dofs; ++i)
197 for (
unsigned int j = 0; j < n_dofs; ++j)
204 for (
unsigned int d = 0; d < dim; ++d)
211 for (
unsigned int d1 = 0; d1 < dim; ++d1)
217 M(i, j) += dx * 2. * penalty * u * v;
219 M(i, j) += dx * (ngradun * v + ngradvn * u);
220 for (
unsigned int d2 = 0; d2 < dim; ++d2)
261 template <
int dim,
typename number>
266 const VectorSlice<
const std::vector<std::vector<double>>> & input,
268 const VectorSlice<
const std::vector<std::vector<double>>> & data,
279 const double dx = factor * fe.
JxW(k);
281 for (
unsigned int i = 0; i < n_dofs; ++i)
282 for (
unsigned int d1 = 0; d1 < dim; ++d1)
284 const double u = input[d1][k];
286 const double g = data[d1][k];
287 result(i) += dx * 2. * penalty * (u - g) * v;
289 for (
unsigned int d2 = 0; d2 < dim; ++d2)
292 result(i) -= .5 * dx * v * Dinput[d1][k][d2] * n[d2];
294 result(i) -= .5 * dx * v * Dinput[d2][k][d1] * n[d2];
296 result(i) -= .5 * dx * (u - g) *
299 result(i) -= .5 * dx * (u - g) *
314 template <
int dim,
typename number>
319 const VectorSlice<
const std::vector<std::vector<double>>> & input,
321 const VectorSlice<
const std::vector<std::vector<double>>> & data,
332 const double dx = factor * fe.
JxW(k);
334 for (
unsigned int i = 0; i < n_dofs; ++i)
342 for (
unsigned int d = 0; d < dim; ++d)
344 udotn += n[d] * input[d][k];
345 gdotn += n[d] * data[d][k];
347 ngradun += n * Dinput[d][k] * n[d];
350 for (
unsigned int d1 = 0; d1 < dim; ++d1)
352 const double u = input[d1][k] - udotn * n[d1];
355 const double g = data[d1][k] - gdotn * n[d1];
356 result(i) += dx * 2. * penalty * (u - g) * v;
358 result(i) += dx * (ngradun * v + ngradvn * (u - g));
359 for (
unsigned int d2 = 0; d2 < dim; ++d2)
362 result(i) -= .5 * dx * Dinput[d1][k][d2] * n[d2] * v;
364 result(i) -= .5 * dx * Dinput[d2][k][d1] * n[d2] * v;
366 result(i) -= .5 * dx * (u - g) *
370 result(i) -= .5 * dx * (u - g) *
395 template <
int dim,
typename number>
400 const VectorSlice<
const std::vector<std::vector<double>>> & input,
411 const double dx = factor * fe.
JxW(k);
413 for (
unsigned int i = 0; i < n_dofs; ++i)
414 for (
unsigned int d1 = 0; d1 < dim; ++d1)
416 const double u = input[d1][k];
418 result(i) += dx * 2. * penalty * u * v;
420 for (
unsigned int d2 = 0; d2 < dim; ++d2)
423 result(i) -= .5 * dx * v * Dinput[d1][k][d2] * n[d2];
425 result(i) -= .5 * dx * v * Dinput[d2][k][d1] * n[d2];
427 result(i) -= .5 * dx * u *
430 result(i) -= .5 * dx * u *
449 const double int_factor = 1.,
450 const double ext_factor = -1.)
465 const double nu1 = int_factor;
466 const double nu2 = (ext_factor < 0) ? int_factor : ext_factor;
467 const double penalty = .5 * pen * (nu1 + nu2);
471 const double dx = fe1.
JxW(k);
473 for (
unsigned int i = 0; i < n_dofs; ++i)
474 for (
unsigned int j = 0; j < n_dofs; ++j)
475 for (
unsigned int d1 = 0; d1 < dim; ++d1)
482 M11(i, j) += dx * penalty * u1 * v1;
483 M12(i, j) -= dx * penalty * u2 * v1;
484 M21(i, j) -= dx * penalty * u1 * v2;
485 M22(i, j) += dx * penalty * u2 * v2;
487 for (
unsigned int d2 = 0; d2 < dim; ++d2)
490 M11(i, j) -= .25 * dx * nu1 *
493 M12(i, j) -= .25 * dx * nu2 *
496 M21(i, j) += .25 * dx * nu1 *
499 M22(i, j) += .25 * dx * nu2 *
503 M11(i, j) -= .25 * dx * nu1 *
506 M12(i, j) -= .25 * dx * nu2 *
509 M21(i, j) += .25 * dx * nu1 *
512 M22(i, j) += .25 * dx * nu2 *
516 M11(i, j) -= .25 * dx * nu1 *
519 M12(i, j) += .25 * dx * nu1 *
522 M21(i, j) -= .25 * dx * nu2 *
525 M22(i, j) += .25 * dx * nu2 *
529 M11(i, j) -= .25 * dx * nu1 *
532 M12(i, j) += .25 * dx * nu1 *
535 M21(i, j) -= .25 * dx * nu2 *
538 M22(i, j) += .25 * dx * nu2 *
551 template <
int dim,
typename number>
558 const VectorSlice<
const std::vector<std::vector<double>>> &input1,
561 const VectorSlice<
const std::vector<std::vector<double>>> &input2,
565 double int_factor = 1.,
566 double ext_factor = -1.)
577 const double nu1 = int_factor;
578 const double nu2 = (ext_factor < 0) ? int_factor : ext_factor;
579 const double penalty = .5 * pen * (nu1 + nu2);
584 const double dx = fe1.
JxW(k);
587 for (
unsigned int i = 0; i < n1; ++i)
588 for (
unsigned int d1 = 0; d1 < dim; ++d1)
592 const double u1 = input1[d1][k];
593 const double u2 = input2[d1][k];
595 result1(i) += dx * penalty * u1 * v1;
596 result1(i) -= dx * penalty * u2 * v1;
597 result2(i) -= dx * penalty * u1 * v2;
598 result2(i) += dx * penalty * u2 * v2;
600 for (
unsigned int d2 = 0; d2 < dim; ++d2)
605 (nu1 * Dinput1[d1][k][d2] + nu2 * Dinput2[d1][k][d2]) *
609 (nu1 * Dinput1[d1][k][d2] + nu2 * Dinput2[d1][k][d2]) *
614 (nu1 * Dinput1[d2][k][d1] + nu2 * Dinput2[d2][k][d1]) *
618 (nu1 * Dinput1[d2][k][d1] + nu2 * Dinput2[d2][k][d1]) *
621 result1(i) -= .25 * dx * nu1 *
624 result2(i) -= .25 * dx * nu2 *
628 result1(i) -= .25 * dx * nu1 *
631 result2(i) -= .25 * dx * nu2 *
641 DEAL_II_NAMESPACE_CLOSE
double shape_value_component(const unsigned int function_no, const unsigned int point_no, const unsigned int component) const
#define AssertDimension(dim1, dim2)
const unsigned int dofs_per_cell
const Tensor< 1, spacedim > & normal_vector(const unsigned int i) const
#define AssertVectorVectorDimension(vec, dim1, dim2)
void nitsche_tangential_matrix(FullMatrix< double > &M, const FEValuesBase< dim > &fe, double penalty, double factor=1.)
Library of integrals over cells and faces.
void nitsche_residual_homogeneous(Vector< number > &result, const FEValuesBase< dim > &fe, const VectorSlice< const std::vector< std::vector< double >>> &input, const VectorSlice< const std::vector< std::vector< Tensor< 1, dim >>>> &Dinput, double penalty, double factor=1.)
#define Assert(cond, exc)
static::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
void cell_residual(Vector< number > &result, const FEValuesBase< dim > &fe, const VectorSlice< const std::vector< std::vector< Tensor< 1, dim >>>> &input, double factor=1.)
const FiniteElement< dim, spacedim > & get_fe() const
void ip_matrix(FullMatrix< double > &M11, FullMatrix< double > &M12, FullMatrix< double > &M21, FullMatrix< double > &M22, const FEValuesBase< dim > &fe1, const FEValuesBase< dim > &fe2, const double pen, const double int_factor=1., const double ext_factor=-1.)
const unsigned int n_quadrature_points
void nitsche_matrix(FullMatrix< double > &M, const FEValuesBase< dim > &fe, double penalty, double factor=1.)
void nitsche_residual(Vector< number > &result, const FEValuesBase< dim > &fe, const VectorSlice< const std::vector< std::vector< double >>> &input, const VectorSlice< const std::vector< std::vector< Tensor< 1, dim >>>> &Dinput, const VectorSlice< const std::vector< std::vector< double >>> &data, double penalty, double factor=1.)
void ip_residual(Vector< number > &result1, Vector< number > &result2, const FEValuesBase< dim > &fe1, const FEValuesBase< dim > &fe2, const VectorSlice< const std::vector< std::vector< double >>> &input1, const VectorSlice< const std::vector< std::vector< Tensor< 1, dim >>>> &Dinput1, const VectorSlice< const std::vector< std::vector< double >>> &input2, const VectorSlice< const std::vector< std::vector< Tensor< 1, dim >>>> &Dinput2, double pen, double int_factor=1., double ext_factor=-1.)
Tensor< 1, spacedim > shape_grad_component(const unsigned int function_no, const unsigned int point_no, const unsigned int component) const
double JxW(const unsigned int quadrature_point) const
void nitsche_tangential_residual(Vector< number > &result, const FEValuesBase< dim > &fe, const VectorSlice< const std::vector< std::vector< double >>> &input, const VectorSlice< const std::vector< std::vector< Tensor< 1, dim >>>> &Dinput, const VectorSlice< const std::vector< std::vector< double >>> &data, double penalty, double factor=1.)
void cell_matrix(FullMatrix< double > &M, const FEValuesBase< dim > &fe, const double factor=1.)