DOLFIN-X
DOLFIN-X C++ interface
Function.h
1 // Copyright (C) 2003-2012 Anders Logg
2 //
3 // This file is part of DOLFINX (https://www.fenicsproject.org)
4 //
5 // SPDX-License-Identifier: LGPL-3.0-or-later
6 
7 #pragma once
8 
9 #include "FunctionSpace.h"
10 #include <Eigen/Dense>
11 #include <dolfinx/common/types.h>
12 #include <dolfinx/fem/FiniteElement.h>
13 #include <dolfinx/la/PETScVector.h>
14 #include <functional>
15 #include <memory>
16 #include <petscsys.h>
17 #include <petscvec.h>
18 #include <vector>
19 
20 namespace dolfinx
21 {
22 
23 namespace geometry
24 {
25 class BoundingBoxTree;
26 }
27 namespace mesh
28 {
29 class Mesh;
30 } // namespace mesh
31 
32 namespace function
33 {
40 
41 class Function
42 {
43 public:
46  explicit Function(std::shared_ptr<const FunctionSpace> V);
47 
54  Function(std::shared_ptr<const FunctionSpace> V, Vec x);
55 
56  // Copy constructor
57  Function(const Function& v) = delete;
58 
60  Function(Function&& v) = default;
61 
63  virtual ~Function() = default;
64 
66  Function& operator=(Function&& v) = default;
67 
68  // Assignment
69  Function& operator=(const Function& v) = delete;
70 
74  Function sub(int i) const;
75 
78  Function collapse() const;
79 
82  std::shared_ptr<const FunctionSpace> function_space() const;
83 
87 
90  const la::PETScVector& vector() const;
91 
94  void interpolate(const Function& v);
95 
100  void
101  interpolate(const std::function<Eigen::Array<PetscScalar, Eigen::Dynamic,
102  Eigen::Dynamic, Eigen::RowMajor>(
103  const Eigen::Ref<const Eigen::Array<double, 3, Eigen::Dynamic,
104  Eigen::RowMajor>>&)>& f);
105 
114 
116  int value_rank() const;
117 
119  int value_size() const;
120 
124  int value_dimension(int i) const;
125 
127  std::vector<int> value_shape() const;
128 
139  void
140  eval(const Eigen::Ref<
141  const Eigen::Array<double, Eigen::Dynamic, 3, Eigen::RowMajor>>& x,
142  const Eigen::Ref<const Eigen::Array<int, Eigen::Dynamic, 1>>& cells,
143  Eigen::Ref<Eigen::Array<PetscScalar, Eigen::Dynamic, Eigen::Dynamic,
144  Eigen::RowMajor>>
145  u) const;
146 
149  Eigen::Array<PetscScalar, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>
150  compute_point_values() const;
151 
153  std::string name = "u";
154 
156  std::size_t id() const;
157 
158 private:
159  // ID
160  std::size_t _id;
161 
162  // The function space
163  std::shared_ptr<const FunctionSpace> _function_space;
164 
165  // The vector of expansion coefficients (local)
166  la::PETScVector _vector;
167 };
168 } // namespace function
169 } // namespace dolfinx
dolfinx::function::Function::Function
Function(std::shared_ptr< const FunctionSpace > V)
Create function on given function space.
Definition: Function.cpp:64
dolfinx::function::Function::value_dimension
int value_dimension(int i) const
Return value dimension for given axis.
Definition: Function.cpp:306
dolfinx::function::Function::compute_point_values
Eigen::Array< PetscScalar, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > compute_point_values() const
Compute values at all mesh points.
Definition: Function.cpp:322
dolfinx::function::Function::value_size
int value_size() const
Return value size.
Definition: Function.cpp:298
dolfinx::function::Function::collapse
Function collapse() const
Collapse a subfunction (view into the Function) to a stand-alone Function.
Definition: Function.cpp:99
dolfinx::la::PETScVector
It is a simple wrapper for a PETSc vector pointer (Vec). Its main purpose is to assist memory managem...
Definition: PETScVector.h:31
dolfinx::function::Function::name
std::string name
Name.
Definition: Function.h:153
dolfinx::function::Function::eval
void eval(const Eigen::Ref< const Eigen::Array< double, Eigen::Dynamic, 3, Eigen::RowMajor >> &x, const Eigen::Ref< const Eigen::Array< int, Eigen::Dynamic, 1 >> &cells, Eigen::Ref< Eigen::Array< PetscScalar, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor >> u) const
Evaluate the Function at points.
Definition: Function.cpp:149
dolfinx::geometry::BoundingBoxTree
Axis-Aligned bounding box binary tree. It is used to find entities in a collection (often a mesh::Mes...
Definition: BoundingBoxTree.h:30
dolfinx::function::Function::value_rank
int value_rank() const
Return value rank.
Definition: Function.cpp:291
dolfinx::function::Function::operator=
Function & operator=(Function &&v)=default
Move assignment.
dolfinx::function::Function::vector
la::PETScVector & vector()
Return vector of expansion coefficients (non-const version)
Definition: Function.cpp:131
dolfinx::function::Function::sub
Function sub(int i) const
Extract subfunction (view into the Function)
Definition: Function.cpp:89
dolfinx::function::Function::function_space
std::shared_ptr< const FunctionSpace > function_space() const
Return shared pointer to function space.
Definition: Function.cpp:126
dolfinx::function::Function::id
std::size_t id() const
ID.
Definition: Function.cpp:375
dolfinx::function::Function
This class represents a function in a finite element function space , given by.
Definition: Function.h:41
dolfinx::function::Function::interpolate_c
void interpolate_c(const FunctionSpace::interpolation_function &f)
Interpolate an expression. This interface uses an expression function f that has an in/out argument f...
Definition: Function.cpp:285
dolfinx::function::FunctionSpace::interpolation_function
std::function< void(Eigen::Ref< Eigen::Array< PetscScalar, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > >, const Eigen::Ref< const Eigen::Array< double, Eigen::Dynamic, 3, Eigen::RowMajor > > &)> interpolation_function
Interpolation function.
Definition: FunctionSpace.h:93
dolfinx::function::Function::value_shape
std::vector< int > value_shape() const
Return value shape.
Definition: Function.cpp:313
dolfinx::function::Function::interpolate
void interpolate(const Function &v)
Interpolate a Function (on possibly non-matching meshes)
Definition: Function.cpp:268
dolfinx::function::Function::~Function
virtual ~Function()=default
Destructor.