15#ifndef dealii_mapping_internal_h
16#define dealii_mapping_internal_h
35 template <
int dim,
int spacedim,
typename Number>
36 Tensor<3, spacedim, Number>
38 const DerivativeForm<1, dim, spacedim, Number> &covariant,
39 const DerivativeForm<2, dim, spacedim, Number> &input);
46 template <
int dim,
int spacedim,
typename Number>
47 Tensor<3, spacedim, Number>
49 const DerivativeForm<1, dim, spacedim, Number> &covariant,
50 const DerivativeForm<1, dim, spacedim, Number> &contravariant,
51 const Tensor<3, dim, Number> &input);
58 template <
int dim,
int spacedim,
typename Number>
59 Tensor<3, spacedim, Number>
61 const DerivativeForm<1, dim, spacedim, Number> &covariant,
62 const Tensor<3, dim, Number> &input);
69 template <
int dim,
int spacedim,
typename Number>
70 Tensor<3, spacedim, Number>
72 const DerivativeForm<1, dim, spacedim, Number> &covariant,
73 const DerivativeForm<1, dim, spacedim, Number> &contravariant,
74 const Number &volume_element,
75 const Tensor<3, dim, Number> &input);
80 template <
int dim,
int spacedim,
typename Number>
81 Tensor<3, spacedim, Number>
87 for (
unsigned int i = 0; i < spacedim; ++i)
88 for (
unsigned int j = 0; j < spacedim; ++j)
91 for (
unsigned int K = 0; K < dim; ++K)
93 tmp[K] = covariant[j][0] * input[i][0][K];
94 for (
unsigned int J = 1; J < dim; ++J)
95 tmp[K] += covariant[j][J] * input[i][J][K];
97 for (
unsigned int k = 0; k < spacedim; ++k)
99 output[i][j][k] = covariant[k][0] * tmp[0];
100 for (
unsigned int K = 1; K < dim; ++K)
101 output[i][j][k] += covariant[k][K] * tmp[K];
110 template <
int dim,
int spacedim,
typename Number>
118 for (
unsigned int i = 0; i < spacedim; ++i)
120 Number tmp1[dim][dim];
121 for (
unsigned int J = 0; J < dim; ++J)
122 for (
unsigned int K = 0; K < dim; ++K)
124 tmp1[J][K] = contravariant[i][0] * input[0][J][K];
125 for (
unsigned int I = 1; I < dim; ++I)
126 tmp1[J][K] += contravariant[i][I] * input[I][J][K];
128 for (
unsigned int j = 0; j < spacedim; ++j)
131 for (
unsigned int K = 0; K < dim; ++K)
133 tmp2[K] = covariant[j][0] * tmp1[0][K];
134 for (
unsigned int J = 1; J < dim; ++J)
135 tmp2[K] += covariant[j][J] * tmp1[J][K];
137 for (
unsigned int k = 0; k < spacedim; ++k)
139 output[i][j][k] = covariant[k][0] * tmp2[0];
140 for (
unsigned int K = 1; K < dim; ++K)
141 output[i][j][k] += covariant[k][K] * tmp2[K];
151 template <
int dim,
int spacedim,
typename Number>
158 for (
unsigned int i = 0; i < spacedim; ++i)
160 Number tmp1[dim][dim];
161 for (
unsigned int J = 0; J < dim; ++J)
162 for (
unsigned int K = 0; K < dim; ++K)
164 tmp1[J][K] = covariant[i][0] * input[0][J][K];
165 for (
unsigned int I = 1; I < dim; ++I)
166 tmp1[J][K] += covariant[i][I] * input[I][J][K];
168 for (
unsigned int j = 0; j < spacedim; ++j)
171 for (
unsigned int K = 0; K < dim; ++K)
173 tmp2[K] = covariant[j][0] * tmp1[0][K];
174 for (
unsigned int J = 1; J < dim; ++J)
175 tmp2[K] += covariant[j][J] * tmp1[J][K];
177 for (
unsigned int k = 0; k < spacedim; ++k)
179 output[i][j][k] = covariant[k][0] * tmp2[0];
180 for (
unsigned int K = 1; K < dim; ++K)
181 output[i][j][k] += covariant[k][K] * tmp2[K];
191 template <
int dim,
int spacedim,
typename Number>
196 const Number &volume_element,
200 for (
unsigned int i = 0; i < spacedim; ++i)
203 for (
unsigned int I = 0; I < dim; ++I)
204 factor[I] = contravariant[i][I] * (1. / volume_element);
205 Number tmp1[dim][dim];
206 for (
unsigned int J = 0; J < dim; ++J)
207 for (
unsigned int K = 0; K < dim; ++K)
209 tmp1[J][K] = factor[0] * input[0][J][K];
210 for (
unsigned int I = 1; I < dim; ++I)
211 tmp1[J][K] += factor[I] * input[I][J][K];
213 for (
unsigned int j = 0; j < spacedim; ++j)
216 for (
unsigned int K = 0; K < dim; ++K)
218 tmp2[K] = covariant[j][0] * tmp1[0][K];
219 for (
unsigned int J = 1; J < dim; ++J)
220 tmp2[K] += covariant[j][J] * tmp1[J][K];
222 for (
unsigned int k = 0; k < spacedim; ++k)
224 output[i][j][k] = covariant[k][0] * tmp2[0];
225 for (
unsigned int K = 1; K < dim; ++K)
226 output[i][j][k] += covariant[k][K] * tmp2[K];
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
Tensor< 3, spacedim, Number > apply_contravariant_hessian(const DerivativeForm< 1, dim, spacedim, Number > &covariant, const DerivativeForm< 1, dim, spacedim, Number > &contravariant, const Tensor< 3, dim, Number > &input)
Tensor< 3, spacedim, Number > apply_piola_hessian(const DerivativeForm< 1, dim, spacedim, Number > &covariant, const DerivativeForm< 1, dim, spacedim, Number > &contravariant, const Number &volume_element, const Tensor< 3, dim, Number > &input)
Tensor< 3, spacedim, Number > apply_covariant_gradient(const DerivativeForm< 1, dim, spacedim, Number > &covariant, const DerivativeForm< 2, dim, spacedim, Number > &input)
Tensor< 3, spacedim, Number > apply_covariant_hessian(const DerivativeForm< 1, dim, spacedim, Number > &covariant, const Tensor< 3, dim, Number > &input)