![]() |
deal.II version 9.7.1
|
#include <deal.II/base/derivative_form.h>
This class represents the (tangential) derivatives of a function 







i.e., one needs to be able to multiply the matrix 



Similarly, the second derivative is a bilinear map from 


In deal.II we represent these derivatives using objects of type DerivativeForm<1,dim,spacedim,Number>, DerivativeForm<2,dim,spacedim,Number> and so on.
Definition at line 63 of file derivative_form.h.

Public Member Functions | |
| DerivativeForm ()=default | |
| DerivativeForm (const Tensor< order+1, dim, Number > &) | |
| DerivativeForm (const Tensor< 1, spacedim, Tensor< order, dim, Number > > &) | |
| Tensor< order, dim, Number > & | operator[] (const unsigned int i) |
| const Tensor< order, dim, Number > & | operator[] (const unsigned int i) const |
| DerivativeForm & | operator= (const Tensor< order+1, dim, Number > &) |
| DerivativeForm & | operator= (const Tensor< order, spacedim, Tensor< 1, dim, Number > > &) |
| DerivativeForm & | operator= (const Tensor< 1, dim, Number > &) |
| template<typename OtherNumber> | |
| DerivativeForm & | operator= (const DerivativeForm< order, dim, spacedim, OtherNumber > &df) |
| operator Tensor< order+1, dim, Number > () const | |
| operator Tensor< 1, dim, Number > () const | |
| DerivativeForm< 1, spacedim, dim, Number > | transpose () const |
| numbers::NumberTraits< Number >::real_type | norm () const |
| Number | determinant () const |
| DerivativeForm< 1, dim, spacedim, Number > | covariant_form () const |
| Tensor< 2, dim, Number > | first_fundamental_form () const |
Static Public Member Functions | |
| static std::size_t | memory_consumption () |
| static ::ExceptionBase & | ExcInvalidTensorIndex (int arg1) |
Private Member Functions | |
| DerivativeForm< 1, dim, spacedim, Number > | times_T_t (const Tensor< 2, dim, Number > &T) const |
Private Attributes | |
| Tensor< order, dim, Number > | tensor [spacedim] |
Related Symbols | |
(Note that these are not member symbols.) | |
| 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) |
|
default |
Constructor. Initialize all entries to zero.
| DerivativeForm< order, dim, spacedim, Number >::DerivativeForm | ( | const Tensor< order+1, dim, Number > & | ) |
Constructor from a tensor.
| DerivativeForm< order, dim, spacedim, Number >::DerivativeForm | ( | const Tensor< 1, spacedim, Tensor< order, dim, Number > > & | ) |
| Tensor< order, dim, Number > & DerivativeForm< order, dim, spacedim, Number >::operator[] | ( | const unsigned int | i | ) |
Read-Write access operator.
| const Tensor< order, dim, Number > & DerivativeForm< order, dim, spacedim, Number >::operator[] | ( | const unsigned int | i | ) | const |
Read-only access operator.
| DerivativeForm & DerivativeForm< order, dim, spacedim, Number >::operator= | ( | const Tensor< order+1, dim, Number > & | ) |
Assignment operator.
| DerivativeForm & DerivativeForm< order, dim, spacedim, Number >::operator= | ( | const Tensor< order, spacedim, Tensor< 1, dim, Number > > & | ) |
Assignment operator.
| DerivativeForm & DerivativeForm< order, dim, spacedim, Number >::operator= | ( | const Tensor< 1, dim, Number > & | ) |
Assignment operator.
| DerivativeForm & DerivativeForm< order, dim, spacedim, Number >::operator= | ( | const DerivativeForm< order, dim, spacedim, OtherNumber > & | df | ) |
Number conversion operator.
| DerivativeForm< order, dim, spacedim, Number >::operator Tensor< order+1, dim, Number > | ( | ) | const |
Converts a DerivativeForm <order, dim, dim, Number> to Tensor<order+1, dim, Number>. In particular, if order == 1 and the derivative is the Jacobian of 

| DerivativeForm< order, dim, spacedim, Number >::operator Tensor< 1, dim, Number > | ( | ) | const |
Converts a DerivativeForm<1, dim, 1, Number> to Tensor<1, dim, Number>.
| DerivativeForm< 1, spacedim, dim, Number > DerivativeForm< order, dim, spacedim, Number >::transpose | ( | ) | const |
Return the transpose of a rectangular DerivativeForm, viewed as a two dimensional matrix.
| numbers::NumberTraits< Number >::real_type DerivativeForm< order, dim, spacedim, Number >::norm | ( | ) | const |
Compute the Frobenius norm of this form, i.e., the expression 
| Number DerivativeForm< order, dim, spacedim, Number >::determinant | ( | ) | const |
Compute the volume element associated with the Jacobian of the transformation 



| DerivativeForm< 1, dim, spacedim, Number > DerivativeForm< order, dim, spacedim, Number >::covariant_form | ( | ) | const |
Assuming that the current object stores the Jacobian of a mapping 





| Tensor< 2, dim, Number > DerivativeForm< order, dim, spacedim, Number >::first_fundamental_form | ( | ) | const |
Compute the first fundamental form. This is the tensor of dot products of the columns of the current object.
|
static |
Determine an estimate for the memory consumption (in bytes) of this object.
|
private |
Auxiliary function that computes 
|
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 459 of file derivative_form.h.
|
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
\approx
\mathbf F(\mathbf x + \Delta \mathbf x) - \mathbf F(\mathbf x).
\]](form_414.png)
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
\]](form_415.png)
in index notation and corresponds to ![$[\Delta \mathbf x] [\nabla \mathbf F(\mathbf x)]^T$](form_416.png)
Definition at line 499 of file derivative_form.h.
|
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 
Definition at line 524 of file derivative_form.h.
|
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 
Definition at line 550 of file derivative_form.h.
|
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 577 of file derivative_form.h.
|
Similar to the previous apply_transformation(). In matrix notation, it computes 




![\[ \mathbf u \cdot \mathbf A \mathbf v =
\text{DF2}^{-1}(\mathbf u) \cdot \text{DF1}^{-1}(\mathbf v)
\]](form_422.png)
Definition at line 610 of file derivative_form.h.
|
Transpose of a rectangular DerivativeForm DF, mostly for compatibility reasons.
Definition at line 631 of file derivative_form.h.
|
Specialization of apply_transformation() for a diagonal DerivativeForm.
Definition at line 645 of file derivative_form.h.
|
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 
Definition at line 670 of file derivative_form.h.
|
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 698 of file derivative_form.h.
|
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 
Definition at line 728 of file derivative_form.h.
|
private |
Array of tensors holding the subelements.
Definition at line 204 of file derivative_form.h.