13#ifndef dealii_integrators_elasticity_h
14#define dealii_integrators_elasticity_h
50 const double factor = 1.)
60 const double dx = factor * fe.
JxW(k);
61 for (
unsigned int i = 0; i < n_dofs; ++i)
62 for (
unsigned int j = 0; j < n_dofs; ++j)
63 for (
unsigned int d1 = 0; d1 < dim; ++d1)
64 for (
unsigned int d2 = 0; d2 < dim; ++d2)
79 template <
int dim,
typename number>
94 for (
unsigned int k = 0; k < nq; ++k)
96 const double dx = factor * fe.
JxW(k);
97 for (
unsigned int i = 0; i < n_dofs; ++i)
98 for (
unsigned int d1 = 0; d1 < dim; ++d1)
99 for (
unsigned int d2 = 0; d2 < dim; ++d2)
101 result(i) += dx * .25 *
102 (input[d1][k][d2] + input[d2][k][d1]) *
133 const double dx = factor * fe.
JxW(k);
135 for (
unsigned int i = 0; i < n_dofs; ++i)
136 for (
unsigned int j = 0; j < n_dofs; ++j)
137 for (
unsigned int d1 = 0; d1 < dim; ++d1)
141 M(i, j) += dx * 2. * penalty * u * v;
142 for (
unsigned int d2 = 0; d2 < dim; ++d2)
188 const double dx = factor * fe.
JxW(k);
190 for (
unsigned int i = 0; i < n_dofs; ++i)
191 for (
unsigned int j = 0; j < n_dofs; ++j)
198 for (
unsigned int d = 0; d < dim; ++d)
205 for (
unsigned int d1 = 0; d1 < dim; ++d1)
211 M(i, j) += dx * 2. * penalty * u * v;
213 M(i, j) += dx * (ngradun * v + ngradvn * u);
214 for (
unsigned int d2 = 0; d2 < dim; ++d2)
252 template <
int dim,
typename number>
256 const ArrayView<
const std::vector<double>> &input,
269 const double dx = factor * fe.
JxW(k);
271 for (
unsigned int i = 0; i < n_dofs; ++i)
272 for (
unsigned int d1 = 0; d1 < dim; ++d1)
274 const double u = input[d1][k];
276 const double g =
data[d1][k];
277 result(i) += dx * 2. * penalty * (u - g) * v;
279 for (
unsigned int d2 = 0; d2 < dim; ++d2)
282 result(i) -= .5 * dx * v * Dinput[d1][k][d2] * n[d2];
284 result(i) -= .5 * dx * v * Dinput[d2][k][d1] * n[d2];
286 result(i) -= .5 * dx * (u - g) *
289 result(i) -= .5 * dx * (u - g) *
304 template <
int dim,
typename number>
309 const ArrayView<
const std::vector<double>> &input,
322 const double dx = factor * fe.
JxW(k);
324 for (
unsigned int i = 0; i < n_dofs; ++i)
332 for (
unsigned int d = 0; d < dim; ++d)
334 udotn += n[d] * input[d][k];
335 gdotn += n[d] *
data[d][k];
337 ngradun += n * Dinput[d][k] * n[d];
340 for (
unsigned int d1 = 0; d1 < dim; ++d1)
342 const double u = input[d1][k] - udotn * n[d1];
345 const double g =
data[d1][k] - gdotn * n[d1];
346 result(i) += dx * 2. * penalty * (u - g) * v;
348 result(i) += dx * (ngradun * v + ngradvn * (u - g));
349 for (
unsigned int d2 = 0; d2 < dim; ++d2)
352 result(i) -= .5 * dx * Dinput[d1][k][d2] * n[d2] * v;
354 result(i) -= .5 * dx * Dinput[d2][k][d1] * n[d2] * v;
356 result(i) -= .5 * dx * (u - g) *
360 result(i) -= .5 * dx * (u - g) *
382 template <
int dim,
typename number>
387 const ArrayView<
const std::vector<double>> &input,
398 const double dx = factor * fe.
JxW(k);
400 for (
unsigned int i = 0; i < n_dofs; ++i)
401 for (
unsigned int d1 = 0; d1 < dim; ++d1)
403 const double u = input[d1][k];
405 result(i) += dx * 2. * penalty * u * v;
407 for (
unsigned int d2 = 0; d2 < dim; ++d2)
410 result(i) -= .5 * dx * v * Dinput[d1][k][d2] * n[d2];
412 result(i) -= .5 * dx * v * Dinput[d2][k][d1] * n[d2];
414 result(i) -= .5 * dx * u *
417 result(i) -= .5 * dx * u *
436 const double int_factor = 1.,
437 const double ext_factor = -1.)
452 const double nu1 = int_factor;
453 const double nu2 = (ext_factor < 0) ? int_factor : ext_factor;
454 const double penalty = .5 * pen * (nu1 + nu2);
458 const double dx = fe1.
JxW(k);
460 for (
unsigned int i = 0; i < n_dofs; ++i)
461 for (
unsigned int j = 0; j < n_dofs; ++j)
462 for (
unsigned int d1 = 0; d1 < dim; ++d1)
469 M11(i, j) += dx * penalty * u1 *
v1;
470 M12(i, j) -= dx * penalty * u2 *
v1;
471 M21(i, j) -= dx * penalty * u1 * v2;
472 M22(i, j) += dx * penalty * u2 * v2;
474 for (
unsigned int d2 = 0; d2 < dim; ++d2)
477 M11(i, j) -= .25 * dx * nu1 *
480 M12(i, j) -= .25 * dx * nu2 *
483 M21(i, j) += .25 * dx * nu1 *
486 M22(i, j) += .25 * dx * nu2 *
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 * nu1 *
509 M21(i, j) -= .25 * dx * nu2 *
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 *
535 template <
int dim,
typename number>
541 const ArrayView<
const std::vector<double>> &input1,
543 const ArrayView<
const std::vector<double>> &input2,
546 double int_factor = 1.,
547 double ext_factor = -1.)
558 const double nu1 = int_factor;
559 const double nu2 = (ext_factor < 0) ? int_factor : ext_factor;
560 const double penalty = .5 * pen * (nu1 + nu2);
565 const double dx = fe1.
JxW(k);
568 for (
unsigned int i = 0; i < n1; ++i)
569 for (
unsigned int d1 = 0; d1 < dim; ++d1)
573 const double u1 = input1[d1][k];
574 const double u2 = input2[d1][k];
576 result1(i) += dx * penalty * u1 *
v1;
577 result1(i) -= dx * penalty * u2 *
v1;
578 result2(i) -= dx * penalty * u1 * v2;
579 result2(i) += dx * penalty * u2 * v2;
581 for (
unsigned int d2 = 0; d2 < dim; ++d2)
586 (nu1 * Dinput1[d1][k][d2] + nu2 * Dinput2[d1][k][d2]) *
590 (nu1 * Dinput1[d1][k][d2] + nu2 * Dinput2[d1][k][d2]) *
595 (nu1 * Dinput1[d2][k][d1] + nu2 * Dinput2[d2][k][d1]) *
599 (nu1 * Dinput1[d2][k][d1] + nu2 * Dinput2[d2][k][d1]) *
602 result1(i) -= .25 * dx * nu1 *
605 result2(i) -= .25 * dx * nu2 *
609 result1(i) -= .25 * dx * nu1 *
612 result2(i) -= .25 * dx * nu2 *
const unsigned int dofs_per_cell
const Tensor< 1, spacedim > & normal_vector(const unsigned int q_point) const
double shape_value_component(const unsigned int i, const unsigned int q_point, const unsigned int component) const
const unsigned int n_quadrature_points
Tensor< 1, spacedim > shape_grad_component(const unsigned int i, const unsigned int q_point, const unsigned int component) const
const FiniteElement< dim, spacedim > & get_fe() const
double JxW(const unsigned int q_point) const
unsigned int n_components() const
virtual size_type size() const override
#define DEAL_II_DEPRECATED
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define Assert(cond, exc)
#define AssertVectorVectorDimension(VEC, DIM1, DIM2)
#define AssertDimension(dim1, dim2)
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
std::vector< index_type > data
void nitsche_tangential_matrix(FullMatrix< double > &M, const FEValuesBase< dim > &fe, double penalty, double factor=1.)
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.)
void nitsche_residual(Vector< number > &result, const FEValuesBase< dim > &fe, const ArrayView< const std::vector< double > > &input, const ArrayView< const std::vector< Tensor< 1, dim > > > &Dinput, const ArrayView< const std::vector< double > > &data, double penalty, double factor=1.)
void nitsche_residual_homogeneous(Vector< number > &result, const FEValuesBase< dim > &fe, const ArrayView< const std::vector< double > > &input, const ArrayView< const std::vector< Tensor< 1, dim > > > &Dinput, double penalty, double factor=1.)
void ip_residual(Vector< number > &result1, Vector< number > &result2, const FEValuesBase< dim > &fe1, const FEValuesBase< dim > &fe2, const ArrayView< const std::vector< double > > &input1, const ArrayView< const std::vector< Tensor< 1, dim > > > &Dinput1, const ArrayView< const std::vector< double > > &input2, const ArrayView< const std::vector< Tensor< 1, dim > > > &Dinput2, double pen, double int_factor=1., double ext_factor=-1.)
void nitsche_tangential_residual(Vector< number > &result, const FEValuesBase< dim > &fe, const ArrayView< const std::vector< double > > &input, const ArrayView< const std::vector< Tensor< 1, dim > > > &Dinput, const ArrayView< const std::vector< double > > &data, double penalty, double factor=1.)
void nitsche_matrix(FullMatrix< double > &M, const FEValuesBase< dim > &fe, double penalty, double factor=1.)
void cell_residual(Vector< number > &result, const FEValuesBase< dim > &fe, const ArrayView< const std::vector< Tensor< 1, dim > > > &input, double factor=1.)
void cell_matrix(FullMatrix< double > &M, const FEValuesBase< dim > &fe, const double factor=1.)
Library of integrals over cells and faces.