21 #ifndef fiber_surface_normal_dependent_function_hpp
22 #define fiber_surface_normal_dependent_function_hpp
24 #include "../common/common.hpp"
26 #include "function.hpp"
27 #include "geometrical_data.hpp"
62 template <
typename Functor>
67 typedef typename Functor::ValueType ValueType;
68 typedef typename Base::CoordinateType CoordinateType;
74 virtual int worldDimension()
const {
75 return m_functor.argumentDimension();
78 virtual int codomainDimension()
const {
79 return m_functor.resultDimension();
82 virtual void addGeometricalDependencies(
size_t& geomDeps)
const {
83 geomDeps |= GLOBALS | NORMALS;
87 arma::Mat<ValueType>& result)
const {
88 const arma::Mat<CoordinateType>& points = geomData.globals;
89 const arma::Mat<CoordinateType>& normals = geomData.normals;
92 if ((
int)points.n_rows != worldDimension())
93 throw std::invalid_argument(
94 "SurfaceNormalDependentFunction::evaluate(): "
95 "incompatible world dimension");
98 const size_t pointCount = points.n_cols;
99 result.set_size(codomainDimension(), pointCount);
100 for (
size_t i = 0; i < pointCount; ++i) {
101 arma::Col<ValueType> activeResultColumn = result.unsafe_col(i);
102 m_functor.evaluate(points.unsafe_col(i), normals.unsafe_col(i),
108 const Functor& m_functor;
Storage of geometrical data.
Definition: geometrical_data.hpp:54
Function defined via a user-supplied functor, depending on global coordinates and on the surface norm...
Definition: surface_normal_dependent_function.hpp:63
Function to be used as a source term.
Definition: function.hpp:39