deal.II version GIT relicensing-2289-g1e5549a87a 2024-12-21 21:30: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\}}\)
Loading...
Searching...
No Matches
Classes | Functions
derivative_form.h File Reference
#include <deal.II/base/config.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 438 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 478 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 503 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 529 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 556 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 589 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 610 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 624 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 649 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 677 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 707 of file derivative_form.h.