libmesh解析
本工作只是尝试解析原libmesh的代码,供学习使用
 全部  命名空间 文件 函数 变量 类型定义 枚举 枚举值 友元 
Public 成员函数 | Private 属性 | 所有成员列表
libMesh::CompositeFEMFunction< Output > 模板类 参考

FEMFunction函数的另一个函数。 更多...

#include <composite_fem_function.h>

类 libMesh::CompositeFEMFunction< Output > 继承关系图:
[图例]

Public 成员函数

 CompositeFEMFunction ()=default
 默认构造函数。 更多...
 
 CompositeFEMFunction (CompositeFEMFunction &&)=default
 该类可以使用默认的移动构造和分配。 更多...
 
CompositeFEMFunctionoperator= (CompositeFEMFunction &&)=default
 
 CompositeFEMFunction (const CompositeFEMFunction &)=delete
 该类包含unique_ptr成员,因此不能默认复制或分配。 更多...
 
CompositeFEMFunctionoperator= (const CompositeFEMFunction &)=delete
 
virtual ~CompositeFEMFunction ()=default
 子函数向量会自动清理。 更多...
 
void attach_subfunction (const FEMFunctionBase< Output > &f, std::vector< unsigned int > index_map)
 附加新的子函数和索引映射到复合函数。 子函数被克隆并添加到subfunctions中,同时更新index_maps和reverse_index_map。 (*this)(index_map[i]) 将返回 f(i)。 更多...
 
virtual Output operator() (const FEMContext &c, const Point &p, const Real time=0) 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
 重载操作符,用于计算特定分量的值。 更多...
 
virtual std::unique_ptr
< FEMFunctionBase< Output > > 
clone () const override
 克隆函数。创建并返回一个与当前实例相同类型的新实例。 更多...
 
unsigned int n_subfunctions () const
 获取子函数的数量。 更多...
 
unsigned int n_components () const
 获取组件的数量。 更多...
 
virtual void init_context (const FEMContext &)
 准备上下文对象以供使用。 更多...
 
void operator() (const FEMContext &, const Point &p, DenseVector< Output > &output)
 计算时间无关的向量值函数的评估函数。将输出值设置在传入的output DenseVector中。 更多...
 

Private 属性

std::vector< std::unique_ptr
< FEMFunctionBase< Output > > > 
subfunctions
 
std::vector< std::vector
< unsigned int > > 
index_maps
 对于每个子函数,存储从子函数的索引到全局函数索引的映射的列表。 更多...
 
std::vector< std::pair
< unsigned int, unsigned int > > 
reverse_index_map
 对于每个全局指数,存储该指数是哪个子函数的本地指数。 每个元素是一个std::pair<unsigned int, unsigned int>,表示子函数的索引和子函数中的本地指数。 更多...
 

详细描述

template<typename Output = Number>
class libMesh::CompositeFEMFunction< Output >

FEMFunction函数的另一个函数。

作者
Roy Stogner
日期
2012 FEMFunction函数的另一个函数。

在文件 composite_fem_function.h44 行定义.

构造及析构函数说明

template<typename Output = Number>
libMesh::CompositeFEMFunction< Output >::CompositeFEMFunction ( )
explicitdefault

默认构造函数。

参考自 libMesh::CompositeFEMFunction< Output >::clone().

template<typename Output = Number>
libMesh::CompositeFEMFunction< Output >::CompositeFEMFunction ( CompositeFEMFunction< Output > &&  )
default

该类可以使用默认的移动构造和分配。

template<typename Output = Number>
libMesh::CompositeFEMFunction< Output >::CompositeFEMFunction ( const CompositeFEMFunction< Output > &  )
delete

该类包含unique_ptr成员,因此不能默认复制或分配。

template<typename Output = Number>
virtual libMesh::CompositeFEMFunction< Output >::~CompositeFEMFunction ( )
virtualdefault

子函数向量会自动清理。

成员函数说明

template<typename Output = Number>
void libMesh::CompositeFEMFunction< Output >::attach_subfunction ( const FEMFunctionBase< Output > &  f,
std::vector< unsigned int >  index_map 
)
inline

附加新的子函数和索引映射到复合函数。 子函数被克隆并添加到subfunctions中,同时更新index_maps和reverse_index_map。 (*this)(index_map[i]) 将返回 f(i)。

参数
f要附加的子函数。
index_map从子函数的索引到全局函数索引的映射。

在文件 composite_fem_function.h77 行定义.

参考 libMesh::FEMFunctionBase< Output >::clone(), libMesh::CompositeFEMFunction< Output >::index_maps, libMesh::invalid_uint, libMesh::CompositeFEMFunction< Output >::reverse_index_map , 以及 libMesh::CompositeFEMFunction< Output >::subfunctions.

参考自 libMesh::CompositeFEMFunction< Output >::clone().

79  {
80  const unsigned int subfunction_index =
81  cast_int<unsigned int>(subfunctions.size());
82  libmesh_assert_equal_to(subfunctions.size(), index_maps.size());
83 
84  subfunctions.push_back(f.clone());
85 
86  unsigned int max_index =
87  *std::max_element(index_map.begin(), index_map.end());
88 
89  if (max_index >= reverse_index_map.size())
90  reverse_index_map.resize
91  (max_index+1, std::make_pair(libMesh::invalid_uint,
93 
94  for (auto j : index_range(index_map))
95  {
96  libmesh_assert_less(index_map[j], reverse_index_map.size());
97  libmesh_assert_equal_to(reverse_index_map[index_map[j]].first,
99  libmesh_assert_equal_to(reverse_index_map[index_map[j]].second,
101  reverse_index_map[index_map[j]] =
102  std::make_pair(subfunction_index, j);
103  }
104 
105  index_maps.push_back(std::move(index_map));
106  }
const unsigned int invalid_uint
A number which is used quite often to represent an invalid or uninitialized value for an unsigned int...
Definition: libmesh.h:254
std::vector< std::pair< unsigned int, unsigned int > > reverse_index_map
对于每个全局指数,存储该指数是哪个子函数的本地指数。 每个元素是一个std::pair&lt;unsigned int, unsigned int&gt;,表示子函数的索引和子函数中的本地指数。 ...
std::vector< std::vector< unsigned int > > index_maps
对于每个子函数,存储从子函数的索引到全局函数索引的映射的列表。
std::vector< std::unique_ptr< FEMFunctionBase< Output > > > subfunctions
template<typename Output = Number>
virtual std::unique_ptr<FEMFunctionBase<Output> > libMesh::CompositeFEMFunction< Output >::clone ( ) const
inlineoverridevirtual

克隆函数。创建并返回一个与当前实例相同类型的新实例。

返回
新实例的指针。

实现了 libMesh::FEMFunctionBase< Output >.

在文件 composite_fem_function.h179 行定义.

参考 libMesh::CompositeFEMFunction< Output >::attach_subfunction(), libMesh::CompositeFEMFunction< Output >::CompositeFEMFunction(), libMesh::CompositeFEMFunction< Output >::index_maps , 以及 libMesh::CompositeFEMFunction< Output >::subfunctions.

180  {
181  CompositeFEMFunction * returnval = new CompositeFEMFunction();
182  for (auto i : index_range(subfunctions))
183  returnval->attach_subfunction(*subfunctions[i], index_maps[i]);
184  return std::unique_ptr<FEMFunctionBase<Output>> (returnval);
185  }
std::vector< std::vector< unsigned int > > index_maps
对于每个子函数,存储从子函数的索引到全局函数索引的映射的列表。
std::vector< std::unique_ptr< FEMFunctionBase< Output > > > subfunctions
CompositeFEMFunction()=default
默认构造函数。
template<typename Output = Number>
virtual Output libMesh::CompositeFEMFunction< Output >::component ( const FEMContext &  c,
unsigned int  i,
const Point &  p,
Real  time 
)
inlineoverridevirtual

重载操作符,用于计算特定分量的值。

参数
cFEM上下文。
i要计算的分量的索引。
p计算点的坐标。
time时间值。
返回
计算得到的值。

重载 libMesh::FEMFunctionBase< Output > .

在文件 composite_fem_function.h158 行定义.

参考 libMesh::invalid_uint, libMesh::CompositeFEMFunction< Output >::reverse_index_map , 以及 libMesh::CompositeFEMFunction< Output >::subfunctions.

参考自 libMesh::CompositeFEMFunction< Output >::operator()().

162  {
163  if (i >= reverse_index_map.size() ||
165  return 0;
166 
167  libmesh_assert_less(reverse_index_map[i].first,
168  subfunctions.size());
169  libmesh_assert_not_equal_to(reverse_index_map[i].second,
171  return subfunctions[reverse_index_map[i].first]->
172  component(c, reverse_index_map[i].second, p, time);
173  }
const unsigned int invalid_uint
A number which is used quite often to represent an invalid or uninitialized value for an unsigned int...
Definition: libmesh.h:254
std::vector< std::pair< unsigned int, unsigned int > > reverse_index_map
对于每个全局指数,存储该指数是哪个子函数的本地指数。 每个元素是一个std::pair&lt;unsigned int, unsigned int&gt;,表示子函数的索引和子函数中的本地指数。 ...
virtual Output component(const FEMContext &c, unsigned int i, const Point &p, Real time) override
重载操作符,用于计算特定分量的值。
std::vector< std::unique_ptr< FEMFunctionBase< Output > > > subfunctions
template<typename Output>
virtual void libMesh::FEMFunctionBase< Output >::init_context ( const FEMContext &  )
inlinevirtualinherited

准备上下文对象以供使用。

大多数问题将希望出于效率的考虑重新实现此函数,以便根据其特定的函数要求调用FE::get_*()。

参数
contextFEM上下文对象。

libMesh::ParsedFEMFunction< Output > , 以及 libMesh::ParsedFEMFunction< T > 重载.

在文件 fem_function_base.h70 行定义.

70 {}
template<typename Output = Number>
unsigned int libMesh::CompositeFEMFunction< Output >::n_components ( ) const
inline

获取组件的数量。

返回
组件的数量。

在文件 composite_fem_function.h200 行定义.

参考 libMesh::CompositeFEMFunction< Output >::reverse_index_map.

201  {
202  return reverse_index_map.size();
203  }
std::vector< std::pair< unsigned int, unsigned int > > reverse_index_map
对于每个全局指数,存储该指数是哪个子函数的本地指数。 每个元素是一个std::pair&lt;unsigned int, unsigned int&gt;,表示子函数的索引和子函数中的本地指数。 ...
template<typename Output = Number>
unsigned int libMesh::CompositeFEMFunction< Output >::n_subfunctions ( ) const
inline

获取子函数的数量。

返回
子函数的数量。

在文件 composite_fem_function.h191 行定义.

参考 libMesh::CompositeFEMFunction< Output >::subfunctions.

192  {
193  return subfunctions.size();
194  }
std::vector< std::unique_ptr< FEMFunctionBase< Output > > > subfunctions
template<typename Output >
void libMesh::FEMFunctionBase< Output >::operator() ( const FEMContext &  context,
const Point &  p,
DenseVector< Output > &  output 
)
inlineinherited

计算时间无关的向量值函数的评估函数。将输出值设置在传入的output DenseVector中。

参数
contextFEM上下文对象。
p坐标点。
output输出的向量。

在文件 fem_function_base.h153 行定义.

156 {
157  // 调用时间相关的函数,t=0。
158  this->operator()(context, p, 0., output);
159 }
virtual Output operator()(const FEMContext &, const Point &p, const Real time=0.)=0
计算坐标p和时间time(默认为0)处的标量函数值。
template<typename Output = Number>
virtual Output libMesh::CompositeFEMFunction< Output >::operator() ( const FEMContext &  c,
const Point &  p,
const Real  time = 0 
)
inlineoverridevirtual

重载操作符,用于计算标量值。

参数
cFEM上下文。
p计算点的坐标。
time时间值,默认为0。
返回
计算得到的标量值。

实现了 libMesh::FEMFunctionBase< Output >.

在文件 composite_fem_function.h115 行定义.

参考 libMesh::CompositeFEMFunction< Output >::component().

118  {
119  return this->component(c, 0, p, time);
120  }
virtual Output component(const FEMContext &c, unsigned int i, const Point &p, Real time) override
重载操作符,用于计算特定分量的值。
template<typename Output = Number>
virtual void libMesh::CompositeFEMFunction< Output >::operator() ( const FEMContext &  c,
const Point &  p,
const Real  time,
DenseVector< Output > &  output 
)
inlineoverridevirtual

重载操作符,用于计算矢量值。

参数
cFEM上下文。
p计算点的坐标。
time时间值。
output计算得到的矢量值。

实现了 libMesh::FEMFunctionBase< Output >.

在文件 composite_fem_function.h129 行定义.

参考 libMesh::CompositeFEMFunction< Output >::index_maps, libMesh::DenseVector< T >::resize(), libMesh::CompositeFEMFunction< Output >::reverse_index_map, libMesh::DenseVector< T >::size(), libMesh::CompositeFEMFunction< Output >::subfunctions , 以及 libMesh::DenseVector< T >::zero().

133  {
134  libmesh_assert_greater_equal (output.size(),
135  reverse_index_map.size());
136 
137  // 必要时,清零未被任何子函数覆盖的输出分量
138  output.zero();
139 
140  DenseVector<Output> temp;
141  for (auto i : index_range(subfunctions))
142  {
143  temp.resize(cast_int<unsigned int>(index_maps[i].size()));
144  (*subfunctions[i])(c, p, time, temp);
145  for (auto j : index_range(temp))
146  output(index_maps[i][j]) = temp(j);
147  }
148  }
std::vector< std::pair< unsigned int, unsigned int > > reverse_index_map
对于每个全局指数,存储该指数是哪个子函数的本地指数。 每个元素是一个std::pair&lt;unsigned int, unsigned int&gt;,表示子函数的索引和子函数中的本地指数。 ...
std::vector< std::vector< unsigned int > > index_maps
对于每个子函数,存储从子函数的索引到全局函数索引的映射的列表。
std::vector< std::unique_ptr< FEMFunctionBase< Output > > > subfunctions
virtual void zero() overridefinal
将向量中的每个元素设置为0。由于派生类中的存储方法可能不同,需要将其声明为纯虚函数。
Definition: dense_vector.h:428
virtual unsigned int size() const overridefinal
Definition: dense_vector.h:111
template<typename Output = Number>
CompositeFEMFunction& libMesh::CompositeFEMFunction< Output >::operator= ( CompositeFEMFunction< Output > &&  )
default
template<typename Output = Number>
CompositeFEMFunction& libMesh::CompositeFEMFunction< Output >::operator= ( const CompositeFEMFunction< Output > &  )
delete

类成员变量说明

template<typename Output = Number>
std::vector<std::vector<unsigned int> > libMesh::CompositeFEMFunction< Output >::index_maps
private

对于每个子函数,存储从子函数的索引到全局函数索引的映射的列表。

index_maps[i] 存储第 i 个子函数的索引映射。

在文件 composite_fem_function.h214 行定义.

参考自 libMesh::CompositeFEMFunction< Output >::attach_subfunction(), libMesh::CompositeFEMFunction< Output >::clone() , 以及 libMesh::CompositeFEMFunction< Output >::operator()().

template<typename Output = Number>
std::vector<std::pair<unsigned int, unsigned int> > libMesh::CompositeFEMFunction< Output >::reverse_index_map
private

对于每个全局指数,存储该指数是哪个子函数的本地指数。 每个元素是一个std::pair<unsigned int, unsigned int>,表示子函数的索引和子函数中的本地指数。

在文件 composite_fem_function.h220 行定义.

参考自 libMesh::CompositeFEMFunction< Output >::attach_subfunction(), libMesh::CompositeFEMFunction< Output >::component(), libMesh::CompositeFEMFunction< Output >::n_components() , 以及 libMesh::CompositeFEMFunction< Output >::operator()().

template<typename Output = Number>
std::vector<std::unique_ptr<FEMFunctionBase<Output> > > libMesh::CompositeFEMFunction< Output >::subfunctions
private

该类的文档由以下文件生成: