DOLFINx 0.11.0.0
DOLFINx C++ interface
Loading...
Searching...
No Matches
Function< T, U > Class Template Reference

#include <Function.h>

Public Types

using value_type = T
using geometry_type = U
 Geometry type of the Mesh that the Function is defined on.

Public Member Functions

 Function (std::shared_ptr< const FunctionSpace< geometry_type > > V)
 Create function on given function space.
 Function (std::shared_ptr< const FunctionSpace< geometry_type > > V, std::shared_ptr< la::Vector< value_type > > x)
 Create function on given function space with a given vector.
 Function (const Function &v)=delete
 Function (Function &&v)=default
 Move constructor.
 ~Function ()=default
 Destructor.
Functionoperator= (Function &&v)=default
 Move assignment.
Functionoperator= (const Function &v)=delete
Function sub (int i) const
 Extract a sub-function (a view into the Function).
Function collapse () const
 Collapse a subfunction (view into a Function) to a stand-alone Function.
std::shared_ptr< const FunctionSpace< geometry_type > > function_space () const
 Access the function space.
std::shared_ptr< const la::Vector< value_type > > x () const
 Underlying vector (const version).
std::shared_ptr< la::Vector< value_type > > x ()
 Underlying vector.
void interpolate (const std::function< std::pair< std::vector< value_type >, std::vector< std::size_t > >(md::mdspan< const geometry_type, md::extents< std::size_t, 3, md::dynamic_extent > >)> &f, CellRange auto &&cells)
 Interpolate an expression f(x) over a set of cells.
void interpolate (const std::function< std::pair< std::vector< value_type >, std::vector< std::size_t > >(md::mdspan< const geometry_type, md::extents< std::size_t, 3, md::dynamic_extent > >)> &f)
 Interpolate an expression f(x) on the whole domain.
void interpolate (const Function< value_type, geometry_type > &u0, CellRange auto &&cells0, CellRange auto &&cells1)
 Interpolate a Function over a subset of cells.
void interpolate (const Function< value_type, geometry_type > &u, CellRange auto &&cells)
 Interpolate a Function over a subset of cells.
void interpolate (const Function< value_type, geometry_type > &u)
 Interpolate a Function over all cells.
void interpolate (const Expression< value_type, geometry_type > &e0, CellRange auto &&cells0, CellRange auto &&cells1)
 Interpolate an Expression over a subset of cells.
void interpolate (const Expression< value_type, geometry_type > &e0, CellRange auto &&cells)
 Interpolate an Expression over a subset of cells.
void interpolate (const Expression< value_type, geometry_type > &e)
 Interpolate an Expression on all cells.
void interpolate (const Function< value_type, geometry_type > &u, CellRange auto &&cells, double tol, int maxit, const geometry::PointOwnershipData< U > &interpolation_data)
 Interpolate a Function defined on a different mesh.
void eval (std::span< const geometry_type > x, std::array< std::size_t, 2 > xshape, CellRange auto &&cells, std::span< value_type > u, std::array< std::size_t, 2 > ushape, double tol, int maxit) const
 Evaluate the Function at points.

Public Attributes

std::string name = "u"
 Name.

Detailed Description

template<dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
class dolfinx::fem::Function< T, U >

This class represents a function \( u_h \) in a finite element function space \( V_h \), given by

\[ u_h = \sum_{i=1}^{n} U_i \phi_i, \]

where \( \{\phi_i\}_{i=1}^{n} \) is a basis for \( V_h \), and \( U \) is a vector of expansion coefficients for \( u_h \).

Template Parameters
TThe function scalar type.
UThe mesh geometry scalar type.

Member Typedef Documentation

◆ value_type

template<dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
using value_type = T

Field type for the Function, e.g. double, std::complex<float>, etc.

Constructor & Destructor Documentation

◆ Function() [1/2]

template<dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
Function ( std::shared_ptr< const FunctionSpace< geometry_type > > V)
inlineexplicit

Create function on given function space.

Parameters
[in]VThe function space

◆ Function() [2/2]

template<dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
Function ( std::shared_ptr< const FunctionSpace< geometry_type > > V,
std::shared_ptr< la::Vector< value_type > > x )
inline

Create function on given function space with a given vector.

Warning
This constructor is intended for internal library use only.
Parameters
[in]VThe function space.
[in]xThe vector.

Member Function Documentation

◆ collapse()

template<dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
Function collapse ( ) const
inline

Collapse a subfunction (view into a Function) to a stand-alone Function.

Returns
New collapsed Function.

◆ eval()

template<dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
void eval ( std::span< const geometry_type > x,
std::array< std::size_t, 2 > xshape,
CellRange auto && cells,
std::span< value_type > u,
std::array< std::size_t, 2 > ushape,
double tol,
int maxit ) const
inline

Evaluate the Function at points.

Parameters
[in]xThe coordinates of the points. It has shape (num_points, 3) and storage is row-major.
[in]xshapeShape of x.
[in]cellsCell indices such that cells[i] is the index of the cell that contains the point x(i). Negative cell indices can be passed, in which case the corresponding point is ignored.
[out]uValues at the points. Values are not computed for points with a negative cell index. This argument must be passed with the correct size. Storage is row-major.
[in]ushapeShape of u.
[in]tolTolerance for convergence in Newton method for non-affine pullbacks. If the mesh geometry is affine this argument is ignored.
[in]maxitMaximum number of Newton iterations in non-affine pull-back. If the mesh geometry is affine this argument is ignored.

◆ function_space()

template<dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
std::shared_ptr< const FunctionSpace< geometry_type > > function_space ( ) const
inline

Access the function space.

Returns
The function space.

◆ interpolate() [1/9]

template<dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
void interpolate ( const Expression< value_type, geometry_type > & e)
inline

Interpolate an Expression on all cells.

Parameters
[in]eExpression to be interpolated.
Precondition
If a mesh is associated with Function coefficients of e, it must be the same as the mesh::Mesh associated with this.

◆ interpolate() [2/9]

template<dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
void interpolate ( const Expression< value_type, geometry_type > & e0,
CellRange auto && cells )
inline

Interpolate an Expression over a subset of cells.

Parameters
[in]e0Expression to be interpolated. The Expression must have been created using the reference coordinates created by FiniteElement::interpolation_points for the element associated with this.
[in]cellsCells in the mesh associated with e0 to interpolate from if e0 has Function coefficients. If no mesh can be associated with e0 then the mesh associated with this is used.

◆ interpolate() [3/9]

template<dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
void interpolate ( const Expression< value_type, geometry_type > & e0,
CellRange auto && cells0,
CellRange auto && cells1 )
inline

Interpolate an Expression over a subset of cells.

Parameters
[in]e0Expression to be interpolated. The Expression must have been created using the reference coordinates created by FiniteElement::interpolation_points for the element associated with this.
[in]cells0Cells in the mesh associated with e0 to interpolate from if e0 has Function coefficients. If no mesh can be associated with e0 then the mesh associated with this is used.
[in]cells1Cell indices associated with the mesh of this that will be interpolated to. If cells0[i] is the index of a cell in the mesh associated with u0, then cells1[i] is the index of the same cell but in the mesh associated with this.
Precondition
cells0 cells1 must have the same length.

◆ interpolate() [4/9]

template<dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
void interpolate ( const Function< value_type, geometry_type > & u)
inline

Interpolate a Function over all cells.

The Functions must be defined on the same mesh.

Parameters
[in]uFunction to be interpolated.

◆ interpolate() [5/9]

template<dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
void interpolate ( const Function< value_type, geometry_type > & u,
CellRange auto && cells )
inline

Interpolate a Function over a subset of cells.

The Functions must be defined on the same mesh.

Parameters
[in]uFunction to be interpolated.
[in]cellsCells to interpolate from.

◆ interpolate() [6/9]

template<dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
void interpolate ( const Function< value_type, geometry_type > & u,
CellRange auto && cells,
double tol,
int maxit,
const geometry::PointOwnershipData< U > & interpolation_data )
inline

Interpolate a Function defined on a different mesh.

Parameters
[in]uFunction to be interpolated.
[in]cellsCells in the mesh associated with this to interpolate into.
[in]tolTolerance for convergence in Newton method for non-affine pullbacks. If the mesh geometry is affine this argument is ignored.
[in]maxitMaximum number of Newton iterations in non-affine pull-back. If the mesh geometry is affine this argument is ignored.
[in]interpolation_dataData required for associating the interpolation points of this with cells in u. Can be computed with fem::create_interpolation_data.

◆ interpolate() [7/9]

template<dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
void interpolate ( const Function< value_type, geometry_type > & u0,
CellRange auto && cells0,
CellRange auto && cells1 )
inline

Interpolate a Function over a subset of cells.

The Function being interpolated from and the Function being interpolated into can be defined on different sub-meshes, i.e. views into a subset a cells.

Parameters
[in]u0Function to be interpolated.
[in]cells0Cells to interpolate from. These are the indices of the cells in the mesh associated with u0.
[in]cells1Cell indices associated with the mesh of this that will be interpolated to. If cells0[i] is the index of a cell in the mesh associated with u0, then cells1[i] is the index of the same cell but in the mesh associated with this.
Precondition
cells0 and cells1 must have the same length.

◆ interpolate() [8/9]

template<dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
void interpolate ( const std::function< std::pair< std::vector< value_type >, std::vector< std::size_t > >(md::mdspan< const geometry_type, md::extents< std::size_t, 3, md::dynamic_extent > >)> & f)
inline

Interpolate an expression f(x) on the whole domain.

Parameters
[in]fExpression to be interpolated.

◆ interpolate() [9/9]

template<dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
void interpolate ( const std::function< std::pair< std::vector< value_type >, std::vector< std::size_t > >(md::mdspan< const geometry_type, md::extents< std::size_t, 3, md::dynamic_extent > >)> & f,
CellRange auto && cells )
inline

Interpolate an expression f(x) over a set of cells.

Parameters
[in]fExpression function to be interpolated.
[in]cellsCells to interpolate on.

◆ sub()

template<dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
Function sub ( int i) const
inline

Extract a sub-function (a view into the Function).

Parameters
[in]iIndex of subfunction
Returns
The sub-function

The documentation for this class was generated from the following files: