15#ifndef dealii_integrators_elasticity_h
16#define dealii_integrators_elasticity_h
52 const double factor = 1.)
54 const unsigned int n_dofs = fe.dofs_per_cell;
60 for (
unsigned int k = 0;
k < fe.n_quadrature_points; ++
k)
62 const double dx = factor * fe.JxW(
k);
63 for (
unsigned int i = 0; i < n_dofs; ++i)
64 for (
unsigned int j = 0;
j < n_dofs; ++
j)
65 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
66 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
68 (fe.shape_grad_component(
j,
k,
d1)[
d2] +
69 fe.shape_grad_component(
j,
k,
d2)[
d1]) *
70 (fe.shape_grad_component(i,
k,
d1)[
d2] +
71 fe.shape_grad_component(i,
k,
d2)[
d1]);
81 template <
int dim,
typename number>
88 const unsigned int nq = fe.n_quadrature_points;
89 const unsigned int n_dofs = fe.dofs_per_cell;
96 for (
unsigned int k = 0;
k <
nq; ++
k)
98 const double dx = factor * fe.JxW(
k);
99 for (
unsigned int i = 0; i < n_dofs; ++i)
100 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
101 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
105 (fe.shape_grad_component(i,
k,
d1)[
d2] +
106 fe.shape_grad_component(i,
k,
d2)[
d1]);
127 const unsigned int n_dofs = fe.dofs_per_cell;
133 for (
unsigned int k = 0;
k < fe.n_quadrature_points; ++
k)
135 const double dx = factor * fe.JxW(
k);
137 for (
unsigned int i = 0; i < n_dofs; ++i)
138 for (
unsigned int j = 0;
j < n_dofs; ++
j)
139 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
141 const double u = fe.shape_value_component(
j,
k,
d1);
142 const double v = fe.shape_value_component(i,
k,
d1);
144 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
148 fe.shape_grad_component(
j,
k,
d1)[
d2] * n[
d2] *
152 fe.shape_grad_component(
j,
k,
d2)[
d1] * n[
d2] *
156 fe.shape_grad_component(i,
k,
d1)[
d2] * n[
d2] *
160 fe.shape_grad_component(i,
k,
d2)[
d1] * n[
d2] *
182 const unsigned int n_dofs = fe.dofs_per_cell;
188 for (
unsigned int k = 0;
k < fe.n_quadrature_points; ++
k)
190 const double dx = factor * fe.JxW(
k);
192 for (
unsigned int i = 0; i < n_dofs; ++i)
193 for (
unsigned int j = 0;
j < n_dofs; ++
j)
200 for (
unsigned int d = 0; d < dim; ++d)
202 udotn += n[d] * fe.shape_value_component(
j,
k, d);
203 vdotn += n[d] * fe.shape_value_component(i,
k, d);
204 ngradun += n * fe.shape_grad_component(
j,
k, d) * n[d];
205 ngradvn += n * fe.shape_grad_component(i,
k, d) * n[d];
207 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
210 fe.shape_value_component(
j,
k,
d1) -
udotn * n[
d1];
212 fe.shape_value_component(i,
k,
d1) -
vdotn * n[
d1];
216 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
220 fe.shape_grad_component(
j,
k,
d1)[
d2] *
224 fe.shape_grad_component(
j,
k,
d2)[
d1] *
228 fe.shape_grad_component(i,
k,
d1)[
d2] *
232 fe.shape_grad_component(i,
k,
d2)[
d1] *
254 template <
int dim,
typename number>
258 const ArrayView<
const std::vector<double>> &input,
264 const unsigned int n_dofs = fe.dofs_per_cell;
269 for (
unsigned int k = 0;
k < fe.n_quadrature_points; ++
k)
271 const double dx = factor * fe.JxW(
k);
273 for (
unsigned int i = 0; i < n_dofs; ++i)
274 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
276 const double u = input[
d1][
k];
277 const double v = fe.shape_value_component(i,
k,
d1);
281 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
289 fe.shape_grad_component(i,
k,
d1)[
d2] * n[
d2];
292 fe.shape_grad_component(i,
k,
d2)[
d1] * n[
d2];
306 template <
int dim,
typename number>
311 const ArrayView<
const std::vector<double>> &input,
317 const unsigned int n_dofs = fe.dofs_per_cell;
322 for (
unsigned int k = 0;
k < fe.n_quadrature_points; ++
k)
324 const double dx = factor * fe.JxW(
k);
326 for (
unsigned int i = 0; i < n_dofs; ++i)
334 for (
unsigned int d = 0; d < dim; ++d)
336 udotn += n[d] * input[d][
k];
338 vdotn += n[d] * fe.shape_value_component(i,
k, d);
340 ngradvn += n * fe.shape_grad_component(i,
k, d) * n[d];
342 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
346 fe.shape_value_component(i,
k,
d1) -
vdotn * n[
d1];
351 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
359 fe.shape_grad_component(i,
k,
d1)[
d2] *
363 fe.shape_grad_component(i,
k,
d2)[
d1] *
384 template <
int dim,
typename number>
389 const ArrayView<
const std::vector<double>> &input,
394 const unsigned int n_dofs = fe.dofs_per_cell;
398 for (
unsigned int k = 0;
k < fe.n_quadrature_points; ++
k)
400 const double dx = factor * fe.JxW(
k);
402 for (
unsigned int i = 0; i < n_dofs; ++i)
403 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
405 const double u = input[
d1][
k];
406 const double v = fe.shape_value_component(i,
k,
d1);
409 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
417 fe.shape_grad_component(i,
k,
d1)[
d2] * n[
d2];
420 fe.shape_grad_component(i,
k,
d2)[
d1] * n[
d2];
441 const unsigned int n_dofs =
fe1.dofs_per_cell;
458 for (
unsigned int k = 0;
k <
fe1.n_quadrature_points; ++
k)
460 const double dx =
fe1.JxW(
k);
462 for (
unsigned int i = 0; i < n_dofs; ++i)
463 for (
unsigned int j = 0;
j < n_dofs; ++
j)
464 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
466 const double u1 =
fe1.shape_value_component(
j,
k,
d1);
467 const double u2 =
fe2.shape_value_component(
j,
k,
d1);
468 const double v1 =
fe1.shape_value_component(i,
k,
d1);
469 const double v2 =
fe2.shape_value_component(i,
k,
d1);
476 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
506 fe1.shape_grad_component(i,
k,
d1)[
d2] *
509 fe1.shape_grad_component(i,
k,
d1)[
d2] *
512 fe2.shape_grad_component(i,
k,
d1)[
d2] *
515 fe2.shape_grad_component(i,
k,
d1)[
d2] *
519 fe1.shape_grad_component(i,
k,
d2)[
d1] *
522 fe1.shape_grad_component(i,
k,
d2)[
d1] *
525 fe2.shape_grad_component(i,
k,
d2)[
d1] *
528 fe2.shape_grad_component(i,
k,
d2)[
d1] *
537 template <
int dim,
typename number>
551 const unsigned int n1 =
fe1.dofs_per_cell;
565 for (
unsigned int k = 0;
k <
fe1.n_quadrature_points; ++
k)
567 const double dx =
fe1.JxW(
k);
570 for (
unsigned int i = 0; i <
n1; ++i)
571 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
573 const double v1 =
fe1.shape_value_component(i,
k,
d1);
574 const double v2 =
fe2.shape_value_component(i,
k,
d1);
583 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
605 fe1.shape_grad_component(i,
k,
d1)[
d2] *
608 fe2.shape_grad_component(i,
k,
d1)[
d2] *
612 fe1.shape_grad_component(i,
k,
d2)[
d1] *
615 fe2.shape_grad_component(i,
k,
d2)[
d1] *
#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.