21 #ifndef fiber_surface_normal_independent_function_hpp
22 #define fiber_surface_normal_independent_function_hpp
24 #include "../common/common.hpp"
26 #include "function.hpp"
27 #include "geometrical_data.hpp"
62 template <
typename Functor>
64 public Function<typename Functor::ValueType>
68 typedef typename Functor::ValueType ValueType;
69 typedef typename Base::CoordinateType CoordinateType;
75 virtual int worldDimension()
const {
76 return m_functor.argumentDimension();
79 virtual int codomainDimension()
const {
80 return m_functor.resultDimension();
83 virtual void addGeometricalDependencies(
size_t& geomDeps)
const {
88 arma::Mat<ValueType>& result)
const {
89 const arma::Mat<CoordinateType>& points = geomData.globals;
92 if ((
int)points.n_rows != worldDimension())
93 throw std::invalid_argument(
94 "SurfaceNormalIndependentFunction::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)
102 arma::Col<ValueType> activeResultColumn = result.unsafe_col(i);
103 m_functor.evaluate(points.unsafe_col(i), activeResultColumn);
108 const Functor& m_functor;
Function defined via a user-supplied functor, depending only on global coordinates.
Definition: surface_normal_independent_function.hpp:63
Storage of geometrical data.
Definition: geometrical_data.hpp:54
Function to be used as a source term.
Definition: function.hpp:39