Loading [MathJax]/extensions/TeX/newcommand.js
 deal.II version GIT relicensing-2645-g9d42f38b55 2025-02-15 04:20:00+00:00
\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}} \newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=} \newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]} \newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
Classes | Functions
derivative_form.h File Reference
#include <deal.II/base/config.h>
#include <deal.II/base/exceptions.h>
#include <deal.II/base/numbers.h>
#include <deal.II/base/template_constraints.h>
#include <deal.II/base/tensor.h>

Go to the source code of this file.

Classes

class  DerivativeForm< order, dim, spacedim, Number >
 

Functions

template<int order, int dim, int spacedim, typename Number >
std::ostream & operator<< (std::ostream &out, const DerivativeForm< order, dim, spacedim, Number > &df)
 
template<int spacedim, int dim, typename Number1 , typename Number2 >
Tensor< 1, spacedim, typename ProductType< Number1, Number2 >::type > apply_transformation (const DerivativeForm< 1, dim, spacedim, Number1 > &grad_F, const Tensor< 1, dim, Number2 > &d_x)
 
template<int spacedim, int dim, typename Number1 , typename Number2 >
DerivativeForm< 1, spacedim, dim, typename ProductType< Number1, Number2 >::type > apply_transformation (const DerivativeForm< 1, dim, spacedim, Number1 > &grad_F, const Tensor< 2, dim, Number2 > &D_X)
 
template<int dim, typename Number1 , typename Number2 >
Tensor< 2, dim, typename ProductType< Number1, Number2 >::type > apply_transformation (const DerivativeForm< 1, dim, dim, Number1 > &grad_F, const Tensor< 2, dim, Number2 > &D_X)
 
template<int spacedim, int dim, int n_components, typename Number1 , typename Number2 >
Tensor< 1, n_components, Tensor< 1, spacedim, typename ProductType< Number1, Number2 >::type > > apply_transformation (const DerivativeForm< 1, dim, spacedim, Number1 > &grad_F, const Tensor< 1, n_components, Tensor< 1, dim, Number2 > > &D_X)
 
template<int spacedim, int dim, typename Number1 , typename Number2 >
Tensor< 2, spacedim, typename ProductType< Number1, Number2 >::type > apply_transformation (const DerivativeForm< 1, dim, spacedim, Number1 > &DF1, const DerivativeForm< 1, dim, spacedim, Number2 > &DF2)
 
template<int dim, int spacedim, typename Number >
DerivativeForm< 1, spacedim, dim, Number > transpose (const DerivativeForm< 1, dim, spacedim, Number > &DF)
 
template<int spacedim, int dim, typename Number1 , typename Number2 >
Tensor< 1, spacedim, typename ProductType< Number1, Number2 >::type > apply_diagonal_transformation (const DerivativeForm< 1, dim, spacedim, Number1 > &grad_F, const Tensor< 1, dim, Number2 > &d_x)
 
template<int dim, typename Number1 , typename Number2 >
Tensor< 2, dim, typename ProductType< Number1, Number2 >::type > apply_diagonal_transformation (const DerivativeForm< 1, dim, dim, Number1 > &grad_F, const Tensor< 2, dim, Number2 > &D_X)
 
template<int spacedim, int dim, int n_components, typename Number1 , typename Number2 >
Tensor< 1, n_components, Tensor< 1, spacedim, typename ProductType< Number1, Number2 >::type > > apply_diagonal_transformation (const DerivativeForm< 1, dim, spacedim, Number1 > &grad_F, const Tensor< 1, n_components, Tensor< 1, dim, Number2 > > &D_X)
 
template<int spacedim, int dim, typename Number1 , typename Number2 >
DerivativeForm< 1, spacedim, dim, typename ProductType< Number1, Number2 >::type > apply_diagonal_transformation (const DerivativeForm< 1, dim, spacedim, Number1 > &grad_F, const Tensor< 2, dim, Number2 > &D_X)
 

Function Documentation

◆ operator<<()

template<int order, int dim, int spacedim, typename Number >
std::ostream & operator<< ( std::ostream &  out,
const DerivativeForm< order, dim, spacedim, Number > &  df 
)
inline

Output operator for DerivativeForm. Print the elements consecutively, with a space in between, two spaces between rank 1 subtensors, three between rank 2 and so on.

Definition at line 441 of file derivative_form.h.

◆ apply_transformation() [1/5]

template<int spacedim, int dim, typename Number1 , typename Number2 >
Tensor< 1, spacedim, typename ProductType< Number1, Number2 >::type > apply_transformation ( const DerivativeForm< 1, dim, spacedim, Number1 > &  grad_F,
const Tensor< 1, dim, Number2 > &  d_x 
)
inline

One of the uses of DerivativeForm is to apply it as a linear transformation. This function returns \nabla \mathbf F(\mathbf x) \Delta \mathbf x, which approximates the change in \mathbf F(\mathbf x) when \mathbf x is changed by the amount \Delta \mathbf x

\nabla \mathbf F(\mathbf x) \; \Delta \mathbf x \approx \mathbf F(\mathbf x + \Delta \mathbf x) - \mathbf F(\mathbf x).

The transformation corresponds to

[\text{result}]_{i_1,\dots,i_k} = i\sum_{j} \left[\nabla \mathbf F(\mathbf x)\right]_{i_1,\dots,i_k, j} \Delta x_j

in index notation and corresponds to [\Delta \mathbf x] [\nabla \mathbf F(\mathbf x)]^T in matrix notation.

Definition at line 481 of file derivative_form.h.

◆ apply_transformation() [2/5]

template<int spacedim, int dim, typename Number1 , typename Number2 >
DerivativeForm< 1, spacedim, dim, typename ProductType< Number1, Number2 >::type > apply_transformation ( const DerivativeForm< 1, dim, spacedim, Number1 > &  grad_F,
const Tensor< 2, dim, Number2 > &  D_X 
)
inline

Similar to the previous apply_transformation(). Each row of the result corresponds to one of the rows of D_X transformed by grad_F, equivalent to \mathrm{D\_X} \, \mathrm{grad\_F}^T in matrix notation.

Definition at line 506 of file derivative_form.h.

◆ apply_transformation() [3/5]

template<int dim, typename Number1 , typename Number2 >
Tensor< 2, dim, typename ProductType< Number1, Number2 >::type > apply_transformation ( const DerivativeForm< 1, dim, dim, Number1 > &  grad_F,
const Tensor< 2, dim, Number2 > &  D_X 
)
inline

Similar to the previous apply_transformation(), specialized for the case dim == spacedim where we can return a rank-2 tensor instead of the more general DerivativeForm. Each row of the result corresponds to one of the rows of D_X transformed by grad_F, equivalent to \mathrm{D\_X} \, \mathrm{grad\_F}^T in matrix notation.

Definition at line 532 of file derivative_form.h.

◆ apply_transformation() [4/5]

template<int spacedim, int dim, int n_components, typename Number1 , typename Number2 >
Tensor< 1, n_components, Tensor< 1, spacedim, typename ProductType< Number1, Number2 >::type > > apply_transformation ( const DerivativeForm< 1, dim, spacedim, Number1 > &  grad_F,
const Tensor< 1, n_components, Tensor< 1, dim, Number2 > > &  D_X 
)
inline

Similar to the previous apply_transformation(). Each row of the result corresponds to one of the rows of D_X transformed by grad_F.

Definition at line 559 of file derivative_form.h.

◆ apply_transformation() [5/5]

template<int spacedim, int dim, typename Number1 , typename Number2 >
Tensor< 2, spacedim, typename ProductType< Number1, Number2 >::type > apply_transformation ( const DerivativeForm< 1, dim, spacedim, Number1 > &  DF1,
const DerivativeForm< 1, dim, spacedim, Number2 > &  DF2 
)
inline

Similar to the previous apply_transformation(). In matrix notation, it computes DF2 \, DF1^{T}. Moreover, the result of this operation \mathbf A can be interpreted as a metric tensor in {\mathbb R}^\text{spacedim} which corresponds to the Euclidean metric tensor in {\mathbb R}^\text{dim}. For every pair of vectors \mathbf u, \mathbf v \in {\mathbb R}^\text{spacedim}, we have:

\mathbf u \cdot \mathbf A \mathbf v = \text{DF2}^{-1}(\mathbf u) \cdot \text{DF1}^{-1}(\mathbf v)

Definition at line 592 of file derivative_form.h.

◆ transpose()

template<int dim, int spacedim, typename Number >
DerivativeForm< 1, spacedim, dim, Number > transpose ( const DerivativeForm< 1, dim, spacedim, Number > &  DF)
inline

Transpose of a rectangular DerivativeForm DF, mostly for compatibility reasons.

Definition at line 613 of file derivative_form.h.

◆ apply_diagonal_transformation() [1/4]

template<int spacedim, int dim, typename Number1 , typename Number2 >
Tensor< 1, spacedim, typename ProductType< Number1, Number2 >::type > apply_diagonal_transformation ( const DerivativeForm< 1, dim, spacedim, Number1 > &  grad_F,
const Tensor< 1, dim, Number2 > &  d_x 
)
inline

Specialization of apply_transformation() for a diagonal DerivativeForm.

Definition at line 627 of file derivative_form.h.

◆ apply_diagonal_transformation() [2/4]

template<int dim, typename Number1 , typename Number2 >
Tensor< 2, dim, typename ProductType< Number1, Number2 >::type > apply_diagonal_transformation ( const DerivativeForm< 1, dim, dim, Number1 > &  grad_F,
const Tensor< 2, dim, Number2 > &  D_X 
)
inline

Similar to the previous apply_diagonal_transformation(), specialized for the case dim == spacedim where we can return a rank-2 tensor instead of the more general DerivativeForm. Each row of the result corresponds to one of the rows of D_X transformed by grad_F, equivalent to \mathrm{D\_X} \, \mathrm{grad\_F}^T in matrix notation.

Definition at line 652 of file derivative_form.h.

◆ apply_diagonal_transformation() [3/4]

template<int spacedim, int dim, int n_components, typename Number1 , typename Number2 >
Tensor< 1, n_components, Tensor< 1, spacedim, typename ProductType< Number1, Number2 >::type > > apply_diagonal_transformation ( const DerivativeForm< 1, dim, spacedim, Number1 > &  grad_F,
const Tensor< 1, n_components, Tensor< 1, dim, Number2 > > &  D_X 
)
inline

Similar to the previous apply_diagonal_transformation(). Each row of the result corresponds to one of the rows of D_X transformed by grad_F.

Definition at line 680 of file derivative_form.h.

◆ apply_diagonal_transformation() [4/4]

template<int spacedim, int dim, typename Number1 , typename Number2 >
DerivativeForm< 1, spacedim, dim, typename ProductType< Number1, Number2 >::type > apply_diagonal_transformation ( const DerivativeForm< 1, dim, spacedim, Number1 > &  grad_F,
const Tensor< 2, dim, Number2 > &  D_X 
)
inline

Similar to the previous apply_transformation(). Each row of the result corresponds to one of the rows of D_X transformed by grad_F, equivalent to \mathrm{D\_X} \, \mathrm{grad\_F}^T in matrix notation.

Definition at line 710 of file derivative_form.h.