18 #ifndef LIBMESH_COMPOSITE_FEM_FUNCTION_H
19 #define LIBMESH_COMPOSITE_FEM_FUNCTION_H
22 #include "libmesh/dense_vector.h"
23 #include "libmesh/fem_function_base.h"
24 #include "libmesh/int_range.h"
25 #include "libmesh/libmesh.h"
26 #include "libmesh/point.h"
43 template <
typename Output=Number>
78 std::vector<unsigned int> index_map)
80 const unsigned int subfunction_index =
86 unsigned int max_index =
87 *std::max_element(index_map.begin(), index_map.end());
94 for (
auto j : index_range(index_map))
102 std::make_pair(subfunction_index, j);
117 const Real time = 0)
override
134 libmesh_assert_greater_equal (output.
size(),
145 for (
auto j : index_range(temp))
179 virtual std::unique_ptr<FEMFunctionBase<Output>>
clone()
const override
184 return std::unique_ptr<FEMFunctionBase<Output>> (returnval);
225 #endif // LIBMESH_COMPOSITE_FEM_FUNCTION_H
unsigned int n_subfunctions() const
获取子函数的数量。
void attach_subfunction(const FEMFunctionBase< Output > &f, std::vector< unsigned int > index_map)
附加新的子函数和索引映射到复合函数。 子函数被克隆并添加到subfunctions中,同时更新index_maps和reverse_index_map。 (*this)(index_map[i]) 将返...
const unsigned int invalid_uint
A number which is used quite often to represent an invalid or uninitialized value for an unsigned int...
std::vector< std::pair< unsigned int, unsigned int > > reverse_index_map
对于每个全局指数,存储该指数是哪个子函数的本地指数。 每个元素是一个std::pair<unsigned int, unsigned int>,表示子函数的索引和子函数中的本地指数。 ...
void resize(const unsigned int n)
调整向量的大小。将所有元素设置为0。
virtual std::unique_ptr< FEMFunctionBase< Output > > clone() const override
克隆函数。创建并返回一个与当前实例相同类型的新实例。
virtual void operator()(const FEMContext &c, const Point &p, const Real time, DenseVector< Output > &output) override
重载操作符,用于计算矢量值。
virtual Output component(const FEMContext &c, unsigned int i, const Point &p, Real time) override
重载操作符,用于计算特定分量的值。
CompositeFEMFunction & operator=(CompositeFEMFunction &&)=default
std::vector< std::vector< unsigned int > > index_maps
对于每个子函数,存储从子函数的索引到全局函数索引的映射的列表。
std::vector< std::unique_ptr< FEMFunctionBase< Output > > > subfunctions
virtual Output operator()(const FEMContext &c, const Point &p, const Real time=0) override
重载操作符,用于计算标量值。
virtual void zero() overridefinal
将向量中的每个元素设置为0。由于派生类中的存储方法可能不同,需要将其声明为纯虚函数。
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
CompositeFEMFunction()=default
默认构造函数。
unsigned int n_components() const
获取组件的数量。
virtual ~CompositeFEMFunction()=default
子函数向量会自动清理。
virtual std::unique_ptr< FEMFunctionBase< Output > > clone() const =0
创建并返回函数的新副本。
FEMFunctionBase是一个基类,用户可以从中派生出“函数样式”的对象,以在FEMSystem中使用。
virtual unsigned int size() const overridefinal