DOLFINx 0.12.0.0
DOLFINx C++
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.
Function & operator= (Function &&v)=default
 Move assignment.
Function & operator= (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, mesh::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, mesh::CellRange auto &&cells0, mesh::CellRange auto &&cells1)
 Interpolate a Function over a subset of cells.
void interpolate (const Function< value_type, geometry_type > &u, mesh::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 Function< value_type, geometry_type > &u, mesh::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, mesh::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,
mesh::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/6]

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() [2/6]

template<dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
void interpolate ( const Function< value_type, geometry_type > & u,
mesh::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() [3/6]

template<dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
void interpolate ( const Function< value_type, geometry_type > & u,
mesh::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() [4/6]

template<dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
void interpolate ( const Function< value_type, geometry_type > & u0,
mesh::CellRange auto && cells0,
mesh::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() [5/6]

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() [6/6]

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,
mesh::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: