13#ifndef dealii_mapping_internal_h
14#define dealii_mapping_internal_h
33 template <
int dim,
int spacedim,
typename Number>
44 template <
int dim,
int spacedim,
typename Number>
49 const Number &volume_element,
57 template <
int dim,
int spacedim,
typename Number>
69 template <
int dim,
int spacedim,
typename Number>
80 template <
int dim,
int spacedim,
typename Number>
85 const Number &volume_element,
91 template <
int dim,
int spacedim,
typename Number>
98 for (
unsigned int i = 0; i < spacedim; ++i)
99 for (
unsigned int j = 0; j < spacedim; ++j)
102 for (
unsigned int K = 0; K < dim; ++K)
104 tmp[K] = covariant[j][0] * input[i][0][K];
105 for (
unsigned int J = 1; J < dim; ++J)
106 tmp[K] += covariant[j][J] * input[i][J][K];
108 for (
unsigned int k = 0; k < spacedim; ++k)
110 output[i][j][k] = covariant[k][0] * tmp[0];
111 for (
unsigned int K = 1; K < dim; ++K)
112 output[i][j][k] += covariant[k][K] * tmp[K];
121 template <
int dim,
int spacedim,
typename Number>
126 const Number &volume_element,
135 output *= 1.0 / volume_element;
141 template <
int dim,
int spacedim,
typename Number>
149 for (
unsigned int i = 0; i < spacedim; ++i)
151 Number tmp1[dim][dim];
152 for (
unsigned int J = 0; J < dim; ++J)
153 for (
unsigned int K = 0; K < dim; ++K)
155 tmp1[J][K] = contravariant[i][0] * input[0][J][K];
156 for (
unsigned int I = 1; I < dim; ++I)
157 tmp1[J][K] += contravariant[i][I] * input[I][J][K];
159 for (
unsigned int j = 0; j < spacedim; ++j)
162 for (
unsigned int K = 0; K < dim; ++K)
164 tmp2[K] = covariant[j][0] * tmp1[0][K];
165 for (
unsigned int J = 1; J < dim; ++J)
166 tmp2[K] += covariant[j][J] * tmp1[J][K];
168 for (
unsigned int k = 0; k < spacedim; ++k)
170 output[i][j][k] = covariant[k][0] * tmp2[0];
171 for (
unsigned int K = 1; K < dim; ++K)
172 output[i][j][k] += covariant[k][K] * tmp2[K];
182 template <
int dim,
int spacedim,
typename Number>
189 for (
unsigned int i = 0; i < spacedim; ++i)
191 Number tmp1[dim][dim];
192 for (
unsigned int J = 0; J < dim; ++J)
193 for (
unsigned int K = 0; K < dim; ++K)
195 tmp1[J][K] = covariant[i][0] * input[0][J][K];
196 for (
unsigned int I = 1; I < dim; ++I)
197 tmp1[J][K] += covariant[i][I] * input[I][J][K];
199 for (
unsigned int j = 0; j < spacedim; ++j)
202 for (
unsigned int K = 0; K < dim; ++K)
204 tmp2[K] = covariant[j][0] * tmp1[0][K];
205 for (
unsigned int J = 1; J < dim; ++J)
206 tmp2[K] += covariant[j][J] * tmp1[J][K];
208 for (
unsigned int k = 0; k < spacedim; ++k)
210 output[i][j][k] = covariant[k][0] * tmp2[0];
211 for (
unsigned int K = 1; K < dim; ++K)
212 output[i][j][k] += covariant[k][K] * tmp2[K];
222 template <
int dim,
int spacedim,
typename Number>
227 const Number &volume_element,
231 for (
unsigned int i = 0; i < spacedim; ++i)
234 for (
unsigned int I = 0; I < dim; ++I)
235 factor[I] = contravariant[i][I] * (1. / volume_element);
236 Number tmp1[dim][dim];
237 for (
unsigned int J = 0; J < dim; ++J)
238 for (
unsigned int K = 0; K < dim; ++K)
240 tmp1[J][K] = factor[0] * input[0][J][K];
241 for (
unsigned int I = 1; I < dim; ++I)
242 tmp1[J][K] += factor[I] * input[I][J][K];
244 for (
unsigned int j = 0; j < spacedim; ++j)
247 for (
unsigned int K = 0; K < dim; ++K)
249 tmp2[K] = covariant[j][0] * tmp1[0][K];
250 for (
unsigned int J = 1; J < dim; ++J)
251 tmp2[K] += covariant[j][J] * tmp1[J][K];
253 for (
unsigned int k = 0; k < spacedim; ++k)
255 output[i][j][k] = covariant[k][0] * tmp2[0];
256 for (
unsigned int K = 1; K < dim; ++K)
257 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< 2, spacedim, Number > apply_piola_gradient(const DerivativeForm< 1, dim, spacedim, Number > &covariant, const DerivativeForm< 1, dim, spacedim, Number > &contravariant, const Number &volume_element, const Tensor< 2, 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)