16 #ifndef dealii_derivative_form_h
17 #define dealii_derivative_form_h
57 template <
int order,
int dim,
int spacedim,
typename Number =
double>
112 template <
typename OtherNumber>
175 <<
"Invalid DerivativeForm index " << arg1);
197 template <
int order,
int dim,
int spacedim,
typename Number>
202 ExcMessage(
"Only allowed for forms with dim==spacedim."));
204 for (
unsigned int j = 0; j < dim; ++j)
210 template <
int order,
int dim,
int spacedim,
typename Number>
214 for (
unsigned int j = 0; j < spacedim; ++j)
220 template <
int order,
int dim,
int spacedim,
typename Number>
228 for (
unsigned int j = 0; j < dim; ++j)
235 template <
int order,
int dim,
int spacedim,
typename Number>
240 for (
unsigned int j = 0; j < spacedim; ++j)
247 template <
int order,
int dim,
int spacedim,
typename Number>
252 Assert((1 == spacedim) && (order == 1),
253 ExcMessage(
"Only allowed for spacedim==1 and order==1."));
262 template <
int order,
int dim,
int spacedim,
typename Number>
263 template <
typename OtherNumber>
268 for (
unsigned int j = 0; j < spacedim; ++j)
275 template <
int order,
int dim,
int spacedim,
typename Number>
286 template <
int order,
int dim,
int spacedim,
typename Number>
289 const unsigned int i)
const
298 template <
int order,
int dim,
int spacedim,
typename Number>
302 Assert((1 == spacedim) && (order == 1),
310 template <
int order,
int dim,
int spacedim,
typename Number>
319 for (
unsigned int j = 0; j < dim; ++j)
327 template <
int order,
int dim,
int spacedim,
typename Number>
334 for (
unsigned int i = 0; i < spacedim; ++i)
335 for (
unsigned int j = 0; j < dim; ++j)
336 tt[j][i] = (*
this)[i][j];
343 template <
int order,
int dim,
int spacedim,
typename Number>
350 for (
unsigned int i = 0; i < spacedim; ++i)
351 for (
unsigned int j = 0; j < dim; ++j)
352 dest[i][j] = (*
this)[i] *
T[j];
359 template <
int order,
int dim,
int spacedim,
typename Number>
364 for (
unsigned int i = 0; i < spacedim; ++i)
365 sum_of_squares += tensor[i].norm_square();
371 template <
int order,
int dim,
int spacedim,
typename Number>
387 for (
unsigned int i = 0; i < dim; ++i)
388 for (
unsigned int j = 0; j < dim; ++j)
389 G[i][j] = DF_t[i] * DF_t[j];
397 template <
int order,
int dim,
int spacedim,
typename Number>
411 for (
unsigned int i = 0; i < dim; ++i)
412 for (
unsigned int j = 0; j < dim; ++j)
413 G[i][j] = DF_t[i] * DF_t[j];
415 return (this->times_T_t(
invert(G)));
420 template <
int order,
int dim,
int spacedim,
typename Number>
438 template <
int order,
int dim,
int spacedim,
typename Number>
439 inline std::ostream &
443 for (
unsigned int i = 0; i < spacedim; ++i)
446 if (i != spacedim - 1)
447 for (
unsigned int j = 0; j < order + 1; ++j)
477 template <
int spacedim,
int dim,
typename Number1,
typename Number2>
483 for (
unsigned int i = 0; i < spacedim; ++i)
484 dest[i] = grad_F[i] * d_x;
499 template <
int spacedim,
int dim,
typename Number1,
typename Number2>
509 for (
unsigned int i = 0; i < dim; ++i)
528 template <
int dim,
typename Number1,
typename Number2>
534 for (
unsigned int i = 0; i < dim; ++i)
549 template <
int spacedim,
565 for (
unsigned int i = 0; i < n_components; ++i)
588 template <
int spacedim,
int dim,
typename Number1,
typename Number2>
595 for (
unsigned int i = 0; i < spacedim; ++i)
609 template <
int dim,
int spacedim,
typename Number>
625 template <
int spacedim,
int dim,
typename Number1,
typename Number2>
632 ExcMessage(
"Only dim = spacedim allowed for diagonal transformation"));
634 for (
unsigned int i = 0; i < spacedim; ++i)
635 dest[i] = grad_F[i][i] * d_x[i];
650 template <
int dim,
typename Number1,
typename Number2>
657 for (
unsigned int i = 0; i < dim; ++i)
672 template <
int spacedim,
688 for (
unsigned int i = 0; i < n_components; ++i)
OutputOperator< VectorType > & operator<<(OutputOperator< VectorType > &out, unsigned int step)
constexpr DEAL_II_HOST Number determinant(const SymmetricTensor< 2, dim, Number > &)
constexpr DEAL_II_HOST SymmetricTensor< 2, dim, Number > invert(const SymmetricTensor< 2, dim, Number > &t)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define Assert(cond, exc)
static ::ExceptionBase & ExcInvalidTensorIndex(int arg1)
#define AssertIndexRange(index, range)
#define DeclException1(Exception1, type1, outsequence)
static ::ExceptionBase & ExcMessage(std::string arg1)
::VectorizedArray< Number, width > sqrt(const ::VectorizedArray< Number, width > &)
typename internal::ProductTypeImpl< std::decay_t< T >, std::decay_t< U > >::type type
constexpr DEAL_II_HOST Number determinant(const SymmetricTensor< 2, dim, Number > &)