18 #ifndef LIBMESH_COMPOSITE_FUNCTION_H
19 #define LIBMESH_COMPOSITE_FUNCTION_H
22 #include "libmesh/dense_vector.h"
23 #include "libmesh/function_base.h"
24 #include "libmesh/int_range.h"
25 #include "libmesh/libmesh.h"
26 #include "libmesh/point.h"
43 template <
typename Output=Number>
80 std::vector<unsigned int> index_map)
82 const unsigned int subfunction_index =
88 unsigned int max_index =
89 *std::max_element(index_map.begin(), index_map.end());
96 for (
auto j : index_range(index_map))
104 std::make_pair(subfunction_index, j);
129 const Real time = 0)
override
144 libmesh_assert_greater_equal (output.
size(),
155 for (
auto j : index_range(temp))
187 virtual std::unique_ptr<FunctionBase<Output>>
clone()
const override
192 return std::unique_ptr<FunctionBase<Output>> (returnval);
235 #endif // LIBMESH_COMPOSITE_FUNCTION_H
std::vector< std::unique_ptr< FunctionBase< Output > > > subfunctions
unsigned int n_subfunctions() const
获取子函数的数量。
CompositeFunction & operator=(CompositeFunction &&)=default
const unsigned int invalid_uint
A number which is used quite often to represent an invalid or uninitialized value for an unsigned int...
virtual void operator()(const Point &p, const Real time, DenseVector< Output > &output) override
重载操作符,用于计算矢量值。
void resize(const unsigned int n)
调整向量的大小。将所有元素设置为0。
unsigned int n_components() const
获取组件的数量。
bool is_time_dependent() const
virtual std::unique_ptr< FunctionBase< Output > > clone() const override
克隆函数。创建并返回一个与当前实例相同类型的新实例。
virtual Output operator()(const Point &p, const Real time=0) override
重载操作符,用于计算标量值。
将不同函数的结果组合成单个向量的函数。所有重写的虚拟函数在function_base.h中都有文档。
bool _is_time_dependent
成员变量用于缓存函数是否真正依赖于时间。
virtual void zero() overridefinal
将向量中的每个元素设置为0。由于派生类中的存储方法可能不同,需要将其声明为纯虚函数。
CompositeFunction()=default
默认构造函数。
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual ~CompositeFunction()=default
子函数向量会自动清理。
std::vector< std::pair< unsigned int, unsigned int > > reverse_index_map
对于每个全局指数,存储该指数是哪个子函数的本地指数。 每个元素是一个std::pair<unsigned int, unsigned int>,表示子函数的索引和子函数中的本地指数。 ...
std::vector< std::vector< unsigned int > > index_maps
对于每个子函数,存储从子函数的索引到全局函数索引的映射的列表。
virtual std::unique_ptr< FunctionBase< Output > > clone() const =0
virtual Output component(unsigned int i, const Point &p, Real time) override
重载操作符,用于计算特定分量的值。
FunctionBase是一个函数对象的基类,可以在某一点(可选地包括时间)进行评估。
virtual unsigned int size() const overridefinal
void attach_subfunction(const FunctionBase< Output > &f, std::vector< unsigned int > index_map)
附加新的子函数,以及从附加的子函数的索引到组合函数的索引的映射。