ASPECT
Public Member Functions | Private Attributes | List of all members
aspect::VectorFunctionFromTensorFunctionObject< dim, RangeNumberType > Class Template Reference
Inheritance diagram for aspect::VectorFunctionFromTensorFunctionObject< dim, RangeNumberType >:
Inheritance graph
[legend]

Public Member Functions

 VectorFunctionFromTensorFunctionObject (const std::function< Tensor< 1, dim, RangeNumberType >(const Point< dim > &)> &tensor_function_object, const unsigned int selected_component=0, const unsigned int n_components=dim)
 
virtual ~VectorFunctionFromTensorFunctionObject () override=default
 
virtual RangeNumberType value (const Point< dim > &p, const unsigned int component=0) const override
 
virtual void vector_value (const Point< dim > &p, Vector< RangeNumberType > &values) const override
 
virtual void vector_value_list (const std::vector< Point< dim >> &points, std::vector< Vector< RangeNumberType >> &value_list) const override
 
- Public Member Functions inherited from Function< dim, double >
 Function (const unsigned int n_components=1, const time_type initial_time=0.0)
 
 Function (const Function &f)=default
 
virtual ~Function () override=0
 
Functionoperator= (const Function &f)
 
virtual void value_list (const std::vector< Point< dim > > &points, std::vector< RangeNumberType > &values, const unsigned int component=0) const
 
virtual void vector_value_list (const std::vector< Point< dim > > &points, std::vector< Vector< RangeNumberType > > &values) const
 
virtual void vector_values (const std::vector< Point< dim > > &points, std::vector< std::vector< RangeNumberType > > &values) const
 
virtual Tensor< 1, dim, RangeNumberType > gradient (const Point< dim > &p, const unsigned int component=0) const
 
virtual void vector_gradient (const Point< dim > &p, std::vector< Tensor< 1, dim, RangeNumberType > > &gradients) const
 
virtual void gradient_list (const std::vector< Point< dim > > &points, std::vector< Tensor< 1, dim, RangeNumberType > > &gradients, const unsigned int component=0) const
 
virtual void vector_gradients (const std::vector< Point< dim > > &points, std::vector< std::vector< Tensor< 1, dim, RangeNumberType > > > &gradients) const
 
virtual void vector_gradient_list (const std::vector< Point< dim > > &points, std::vector< std::vector< Tensor< 1, dim, RangeNumberType > > > &gradients) const
 
virtual RangeNumberType laplacian (const Point< dim > &p, const unsigned int component=0) const
 
virtual void vector_laplacian (const Point< dim > &p, Vector< RangeNumberType > &values) const
 
virtual void laplacian_list (const std::vector< Point< dim > > &points, std::vector< RangeNumberType > &values, const unsigned int component=0) const
 
virtual void vector_laplacian_list (const std::vector< Point< dim > > &points, std::vector< Vector< RangeNumberType > > &values) const
 
virtual SymmetricTensor< 2, dim, RangeNumberType > hessian (const Point< dim > &p, const unsigned int component=0) const
 
virtual void vector_hessian (const Point< dim > &p, std::vector< SymmetricTensor< 2, dim, RangeNumberType > > &values) const
 
virtual void hessian_list (const std::vector< Point< dim > > &points, std::vector< SymmetricTensor< 2, dim, RangeNumberType > > &values, const unsigned int component=0) const
 
virtual void vector_hessian_list (const std::vector< Point< dim > > &points, std::vector< std::vector< SymmetricTensor< 2, dim, RangeNumberType > > > &values) const
 
virtual std::size_t memory_consumption () const
 
Number get_time () const
 
virtual void set_time (const Number new_time)
 
virtual void advance_time (const Number delta_t)
 
void serialize (Archive &ar, const unsigned int version)
 
unsigned int n_subscriptions () const
 
unsigned int n_subscriptions () const
 
void list_subscribers (StreamType &stream) const
 
void list_subscribers () const
 
void list_subscribers (StreamType &stream) const
 
void list_subscribers () const
 
- Public Member Functions inherited from FunctionTime< typename Number >
 FunctionTime (const Number initial_time=Number(0.0))
 
virtual ~FunctionTime ()=default
 
Number get_time () const
 
- Public Member Functions inherited from EnableObserverPointer
 EnableObserverPointer ()
 
 EnableObserverPointer (const EnableObserverPointer &)
 
 EnableObserverPointer (EnableObserverPointer &&) noexcept
 
virtual ~EnableObserverPointer ()
 
EnableObserverPointeroperator= (const EnableObserverPointer &)
 
EnableObserverPointeroperator= (EnableObserverPointer &&) noexcept
 
void serialize (Archive &ar, const unsigned int version)
 
unsigned int n_subscriptions () const
 
void list_subscribers (StreamType &stream) const
 
void list_subscribers () const
 
unsigned int n_subscriptions () const
 
void list_subscribers (StreamType &stream) const
 
void list_subscribers () const
 

Private Attributes

const std::function< Tensor< 1, dim, RangeNumberType >const Point< dim > &)> tensor_function_object
 
const unsigned int selected_component
 

Additional Inherited Members

- Public Types inherited from Function< dim, double >
typedef typename FunctionTime< typename numbers::NumberTraits< RangeNumberType >::real_type >::time_type time_type
 
- Public Types inherited from FunctionTime< typename Number >
typedef Number time_type
 
- Static Public Member Functions inherited from Function< dim, double >
static ::ExceptionBaseExcInUse (int arg1, std::string arg2, std::string arg3)
 
static ::ExceptionBaseExcNoSubscriber (std::string arg1, std::string arg2)
 
- Static Public Member Functions inherited from EnableObserverPointer
static ::ExceptionBaseExcInUse (int arg1, std::string arg2, std::string arg3)
 
static ::ExceptionBaseExcNoSubscriber (std::string arg1, std::string arg2)
 
- Public Attributes inherited from Function< dim, double >
const unsigned int n_components
 
- Static Public Attributes inherited from Function< dim, double >
static constexpr unsigned int dimension
 

Detailed Description

template<int dim, typename RangeNumberType = double>
class aspect::VectorFunctionFromTensorFunctionObject< dim, RangeNumberType >

This class is built as a means of translating the Tensor<1,dim, RangeNumberType> values produced by function objects that for a given point return a tensor, and returning them as a multiple component version of the same thing as a Vector for use in, for example, the VectorTools::interpolate or the many other functions taking Function objects. It allows the user to place the desired components into an n_components long vector starting at the selected_component location in that vector and have all other components be 0.

For example: Say you created a function object that returns the gravity (here, a radially inward pointing vector of magnitude 9.81):

const auto gravity
= [](const Point<dim> &p) -> Tensor<1,dim> { return -9.81 * (p /
p.norm()); }

and you want to interpolate this onto your mesh using the VectorTools::interpolate function, with a finite element for the DoFHandler object has 3 copies of a finite element with dim components, for a total of 3*dim components. To interpolate onto that DoFHandler, you need an object of type Function that has 3*dim vector components. Creating such an object from the existing gravity object is done using this piece of code:

where the dim components of the gravity function are placed into the first dim components of the function object.

Definition at line 292 of file compat.h.

Constructor & Destructor Documentation

◆ VectorFunctionFromTensorFunctionObject()

template<int dim, typename RangeNumberType >
VectorFunctionFromTensorFunctionObject< dim, RangeNumberType >::VectorFunctionFromTensorFunctionObject ( const std::function< Tensor< 1, dim, RangeNumberType >(const Point< dim > &)> &  tensor_function_object,
const unsigned int  selected_component = 0,
const unsigned int  n_components = dim 
)
explicit

Given a function object that takes a Point and returns a Tensor<1,dim, RangeNumberType> value, convert this into an object that matches the Function<dim> interface.

By default, create a Vector object of the same size as tensor_function returns, i.e., with dim components.

Parameters
tensor_function_objectThe TensorFunction that will form dim components of the resulting Vector Function object.
n_componentsThe total number of vector components of the resulting TensorFunction object. This clearly has to be at least dim.
selected_componentThe first component that should be filled by the first argument. This should be such that the entire tensor_function fits inside the n_component length return vector.

Definition at line 370 of file compat.h.

References AssertIndexRange, and aspect::VectorFunctionFromTensorFunctionObject< dim, RangeNumberType >::selected_component.

◆ ~VectorFunctionFromTensorFunctionObject()

template<int dim, typename RangeNumberType = double>
virtual aspect::VectorFunctionFromTensorFunctionObject< dim, RangeNumberType >::~VectorFunctionFromTensorFunctionObject ( )
overridevirtualdefault

This destructor is defined as virtual so as to coincide with all other aspects of class.

Member Function Documentation

◆ value()

template<int dim, typename RangeNumberType >
RangeNumberType VectorFunctionFromTensorFunctionObject< dim, RangeNumberType >::value ( const Point< dim > &  p,
const unsigned int  component = 0 
) const
inlineoverridevirtual

Return a single component of a vector-valued function at a given point.

Reimplemented from Function< dim, double >.

Definition at line 389 of file compat.h.

References AssertIndexRange.

◆ vector_value()

template<int dim, typename RangeNumberType >
void VectorFunctionFromTensorFunctionObject< dim, RangeNumberType >::vector_value ( const Point< dim > &  p,
Vector< RangeNumberType > &  values 
) const
inlineoverridevirtual

Return all components of a vector-valued function at a given point.

values shall have the right size beforehand, i.e. n_components.

Reimplemented from Function< dim, double >.

Definition at line 414 of file compat.h.

References Assert, and StandardExceptions::ExcDimensionMismatch().

◆ vector_value_list()

template<int dim, typename RangeNumberType >
void VectorFunctionFromTensorFunctionObject< dim, RangeNumberType >::vector_value_list ( const std::vector< Point< dim >> &  points,
std::vector< Vector< RangeNumberType >> &  value_list 
) const
overridevirtual

Return all components of a vector-valued function at a list of points.

value_list shall be the same size as points and each element of the vector will be passed to vector_value() to evaluate the function

Member function vector_value_list is the interface for giving a list of points (vector<Point<dim>>) of which to evaluate using the vector_value member function. Again, this function is written so as to not replicate the function definition but passes each point on to vector_value to be evaluated.

Definition at line 447 of file compat.h.

References Assert, and StandardExceptions::ExcDimensionMismatch().

Member Data Documentation

◆ tensor_function_object

template<int dim, typename RangeNumberType = double>
const std::function<Tensor<1, dim, RangeNumberType>const Point<dim> &)> aspect::VectorFunctionFromTensorFunctionObject< dim, RangeNumberType >::tensor_function_object
private

The TensorFunction object which we call when this class's vector_value() or vector_value_list() functions are called.

Definition at line 357 of file compat.h.

◆ selected_component

template<int dim, typename RangeNumberType = double>
const unsigned int aspect::VectorFunctionFromTensorFunctionObject< dim, RangeNumberType >::selected_component
private

The first vector component whose value is to be filled by the given TensorFunction. The values will be placed in components selected_component to selected_component+dim-1 for a TensorFunction<1,dim, RangeNumberType> object.

Definition at line 365 of file compat.h.

Referenced by aspect::VectorFunctionFromTensorFunctionObject< dim, RangeNumberType >::VectorFunctionFromTensorFunctionObject().


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