Rodin/Variational/Jacobian.h file

Jacobian matrix operator for vector-valued functions.

This file defines the Jacobian class, which computes the Jacobian matrix (matrix of all first-order partial derivatives) of vector-valued functions in variational formulations.

Mathematical Foundation

For a vector-valued function $ \mathbf{u} : \Omega \subset \mathbb{R}^d \to \mathbb{R}^n $ , the Jacobian matrix is defined as:

\[ J_{ij} = \frac{\partial u_i}{\partial x_j} \]

resulting in an $ n \times d $ matrix.

Special Cases

  • When $ n = d $ , the determinant $ \det(J) $ appears in change of variables
  • For $ d = n = 2,3 $ , related to deformation gradient in mechanics
  • Transpose $ J^T $ gives the gradient of components

Applications

  • Nonlinear elasticity: deformation gradient tensor
  • Fluid dynamics: velocity gradient tensor
  • Differential geometry: metric tensor computations
  • Coordinate transformations

Usage Example

// Displacement gradient for elasticity
P1 Vh(mesh, mesh.getSpaceDimension());
GridFunction<P1> u(Vh);
auto F = Jacobian(u);  // Deformation gradient F = \nabla u

Namespaces

namespace Rodin
The Rodin library for finite element methods and shape optimization.
namespace Rodin::Variational
Namespace Variational.
namespace Rodin::FormLanguage
Namespace FormLanguage.

Classes

template<class FES, class Data, class Derived>
class Rodin::Variational::JacobianBase<GridFunction<FES, Data>, Derived>
Jacobian of a P1 GridFunction.
template<class FES, class Data>
struct Rodin::FormLanguage::Traits<Variational::Jacobian<Variational::GridFunction<FES, Data>>>
Type traits for the matrix or tensor expression specialization.
template<class Derived, class FES, Variational::ShapeFunctionSpaceType Space>
struct Rodin::FormLanguage::Traits<Variational::Jacobian<Variational::ShapeFunction<Derived, FES, Space>>>
Type traits for the matrix or tensor expression specialization.
template<class FES, class Data>
class Rodin::Variational::Jacobian<GridFunction<FES, Data>>
Matrix-field jacobian, $ J_{ijk}=\partial_k A_{ij} $ .
template<class Derived, class FES, ShapeFunctionSpaceType Space>
class Rodin::Variational::Jacobian<ShapeFunction<Derived, FES, Space>>
Matrix-basis jacobian, $ J_{ijk}=\partial_k A_{ij} $ .