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

定义了一个用于有限元计算的稠密子向量。 在将元素载荷向量累加到全局向量之前存储这些载荷向量时特别有用,尤其是在存在方程组的情况下。 所有重写的虚拟函数在 dense_vector_base.h 中有文档说明。 更多...

#include <dense_subvector.h>

类 libMesh::DenseSubVector< T > 继承关系图:
[图例]

Public 成员函数

 DenseSubVector (DenseVector< T > &new_parent, const unsigned int ioff=0, const unsigned int n=0)
 构造函数。创建一个向量 parent 的稠密子向量。 子向量的维度为 $(m \times n)$,并且子向量的 $(0,0)$ 元素位于父向量的 $(ioff,joff)$ 位置。 更多...
 
 DenseSubVector (DenseSubVector &&)=default
 这五个特殊函数可以在该类中默认实现,因为它本身不管理任何内存。 更多...
 
 DenseSubVector (const DenseSubVector &)=default
 
DenseSubVectoroperator= (const DenseSubVector &)=default
 
DenseSubVectoroperator= (DenseSubVector &&)=default
 
virtual ~DenseSubVector ()=default
 
DenseVector< T > & parent ()
 
virtual void zero () overridefinal
 重写基类的 zero 函数,将子向量中的所有元素置零。 更多...
 
const T & operator() (const unsigned int i) const
 
T & operator() (const unsigned int i)
 
virtual T el (const unsigned int i) const overridefinal
 重写基类函数,返回索引为 i 的元素的常量引用和可写引用。 更多...
 
virtual T & el (const unsigned int i) overridefinal
 
virtual unsigned int size () const overridefinal
 
virtual bool empty () const overridefinal
 
unsigned int i_off () const
 
void reposition (const unsigned int ioff, const unsigned int n)
 更改子向量在父向量中的位置和长度。 更多...
 
Real min () const
 
Real max () const
 
Real l1_norm () const
 
Real l2_norm () const
 
Real linfty_norm () const
 
void print (std::ostream &os) const
 将向量漂亮地打印到 stdout。 更多...
 
void print_scientific (std::ostream &os, unsigned precision=8) const
 以科学计数法在额外的小数位数下打印向量的条目。 更多...
 

Private 属性

DenseVector< T > & _parent_vector
 包含该子向量的父向量。 更多...
 
unsigned int _n
 该子向量的长度。 更多...
 
unsigned int _i_off
 在父向量中的偏移。 更多...
 

详细描述

template<typename T>
class libMesh::DenseSubVector< T >

定义了一个用于有限元计算的稠密子向量。 在将元素载荷向量累加到全局向量之前存储这些载荷向量时特别有用,尤其是在存在方程组的情况下。 所有重写的虚拟函数在 dense_vector_base.h 中有文档说明。

作者
Benjamin S. Kirk
日期
2003

在文件 dense_subvector.h42 行定义.

构造及析构函数说明

template<typename T >
libMesh::DenseSubVector< T >::DenseSubVector ( DenseVector< T > &  new_parent,
const unsigned int  ioff = 0,
const unsigned int  n = 0 
)
inline

构造函数。创建一个向量 parent 的稠密子向量。 子向量的维度为 $(m \times n)$,并且子向量的 $(0,0)$ 元素位于父向量的 $(ioff,joff)$ 位置。

参数
new_parent父向量。
ioff子向量在父向量中的行偏移。
n子向量的长度。

在文件 dense_subvector.h168 行定义.

参考 libMesh::DenseSubVector< T >::reposition().

170  :
171  _parent_vector(new_parent)
172 {
173  reposition (ioff, n);
174 }
void reposition(const unsigned int ioff, const unsigned int n)
更改子向量在父向量中的位置和长度。
DenseVector< T > & _parent_vector
包含该子向量的父向量。
template<typename T>
libMesh::DenseSubVector< T >::DenseSubVector ( DenseSubVector< T > &&  )
default

这五个特殊函数可以在该类中默认实现,因为它本身不管理任何内存。

template<typename T>
libMesh::DenseSubVector< T >::DenseSubVector ( const DenseSubVector< T > &  )
default
template<typename T>
virtual libMesh::DenseSubVector< T >::~DenseSubVector ( )
virtualdefault

成员函数说明

template<typename T>
virtual T libMesh::DenseSubVector< T >::el ( const unsigned int  i) const
inlinefinaloverridevirtual

重写基类函数,返回索引为 i 的元素的常量引用和可写引用。

实现了 libMesh::DenseVectorBase< T >.

在文件 dense_subvector.h89 行定义.

90  { return (*this)(i); }
template<typename T>
virtual T& libMesh::DenseSubVector< T >::el ( const unsigned int  i)
inlinefinaloverridevirtual
返回
向量的 (i) 元素的可写引用。
参数
i元素的索引。

实现了 libMesh::DenseVectorBase< T >.

在文件 dense_subvector.h92 行定义.

93  { return (*this)(i); }
template<typename T>
virtual bool libMesh::DenseSubVector< T >::empty ( ) const
inlinefinaloverridevirtual
返回
子向量是否为空。

重载 libMesh::DenseVectorBase< T > .

在文件 dense_subvector.h104 行定义.

参考 libMesh::DenseSubVector< T >::_n.

参考自 libMesh::NumericVector< T >::insert().

105  { return (_n == 0); }
unsigned int _n
该子向量的长度。
template<typename T>
unsigned int libMesh::DenseSubVector< T >::i_off ( ) const
inline
返回
子向量在父向量中的行偏移。

在文件 dense_subvector.h110 行定义.

参考 libMesh::DenseSubVector< T >::_i_off.

110 { return _i_off; }
unsigned int _i_off
在父向量中的偏移。
template<typename T >
Real libMesh::DenseSubVector< T >::l1_norm ( ) const
inline
返回
向量的 $l_1$ 范数,即所有元素的绝对值之和。

在文件 dense_subvector.h259 行定义.

参考 std::abs() , 以及 libMesh::Real.

260 {
261  Real my_norm = 0.;
262  for (auto i : index_range(*this))
263  {
264  my_norm += std::abs(_parent_vector (i + this->i_off()));
265  }
266  return my_norm;
267 }
ADRealEigenVector< T, D, asd > abs(const ADRealEigenVector< T, D, asd > &)
计算自动微分实数向量的绝对值。
Definition: type_vector.h:112
unsigned int i_off() const
DenseVector< T > & _parent_vector
包含该子向量的父向量。
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
template<typename T >
Real libMesh::DenseSubVector< T >::l2_norm ( ) const
inline
返回
向量的 $l_2$ 范数,即所有元素的平方和的平方根。

在文件 dense_subvector.h273 行定义.

参考 libMesh::TensorTools::norm_sq(), libMesh::Real , 以及 std::sqrt().

274 {
275  Real my_norm = 0.;
276  for (auto i : index_range(*this))
277  {
278  my_norm += TensorTools::norm_sq(_parent_vector (i + this->i_off()));
279  }
280  return sqrt(my_norm);
281 }
ADRealEigenVector< T, D, asd > sqrt(const ADRealEigenVector< T, D, asd > &)
计算自动微分实数向量的平方根。
Definition: type_vector.h:88
T norm_sq(std::complex< T > a)
Definition: tensor_tools.h:74
unsigned int i_off() const
DenseVector< T > & _parent_vector
包含该子向量的父向量。
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
template<typename T >
Real libMesh::DenseSubVector< T >::linfty_norm ( ) const
inline
返回
向量的 $l_\infty$ 范数,即所有元素的最大绝对值。

在文件 dense_subvector.h287 行定义.

参考 libMesh::TensorTools::norm_sq(), libMesh::Real , 以及 std::sqrt().

288 {
289  if (!this->size())
290  return 0.;
291  Real my_norm = TensorTools::norm_sq(_parent_vector (this->i_off()));
292 
293  for (auto i : make_range(1u, this->size()))
294  {
295  Real current = TensorTools::norm_sq(_parent_vector (i + this->i_off()));
296  my_norm = (my_norm > current? my_norm : current);
297  }
298  return sqrt(my_norm);
299 }
ADRealEigenVector< T, D, asd > sqrt(const ADRealEigenVector< T, D, asd > &)
计算自动微分实数向量的平方根。
Definition: type_vector.h:88
T norm_sq(std::complex< T > a)
Definition: tensor_tools.h:74
unsigned int i_off() const
virtual unsigned int size() const overridefinal
DenseVector< T > & _parent_vector
包含该子向量的父向量。
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
template<typename T >
Real libMesh::DenseSubVector< T >::max ( ) const
inline
返回
向量的最大元素,或者在复数的情况下是实部的最大值。

在文件 dense_subvector.h242 行定义.

参考 libMesh::libmesh_real() , 以及 libMesh::Real.

243 {
244  libmesh_assert (this->size());
245  Real my_max = libmesh_real(_parent_vector (this->i_off()));
246 
247  for (auto i : make_range(1u, this->size()))
248  {
249  Real current = libmesh_real(_parent_vector (i + this->i_off()));
250  my_max = (my_max > current? my_max : current);
251  }
252  return my_max;
253 }
T libmesh_real(T a)
unsigned int i_off() const
virtual unsigned int size() const overridefinal
DenseVector< T > & _parent_vector
包含该子向量的父向量。
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
template<typename T >
Real libMesh::DenseSubVector< T >::min ( ) const
inline
返回
向量的最小元素,或者在复数的情况下是实部的最小值。

在文件 dense_subvector.h225 行定义.

参考 libMesh::libmesh_real() , 以及 libMesh::Real.

226 {
227  libmesh_assert (this->size());
228  Real my_min = libmesh_real(_parent_vector (this->i_off()));
229 
230  for (auto i : make_range(1u, this->size()))
231  {
232  Real current = libmesh_real(_parent_vector (i + this->i_off()));
233  my_min = (my_min < current? my_min : current);
234  }
235  return my_min;
236 }
T libmesh_real(T a)
unsigned int i_off() const
virtual unsigned int size() const overridefinal
DenseVector< T > & _parent_vector
包含该子向量的父向量。
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
template<typename T >
const T & libMesh::DenseSubVector< T >::operator() ( const unsigned int  i) const
inline
返回
子向量中索引为 i 的元素的常量引用。

在文件 dense_subvector.h204 行定义.

205 {
206  libmesh_assert_less (i, this->size());
207  libmesh_assert_less (i + this->i_off(), _parent_vector.size());
208 
209  return _parent_vector (i + this->i_off());
210 }
unsigned int i_off() const
virtual unsigned int size() const overridefinal
DenseVector< T > & _parent_vector
包含该子向量的父向量。
template<typename T >
T & libMesh::DenseSubVector< T >::operator() ( const unsigned int  i)
inline
返回
子向量中索引为 i 的元素的可写引用。

在文件 dense_subvector.h215 行定义.

216 {
217  libmesh_assert_less (i, this->size());
218  libmesh_assert_less (i + this->i_off(), _parent_vector.size());
219 
220  return _parent_vector (i + this->i_off());
221 }
unsigned int i_off() const
virtual unsigned int size() const overridefinal
DenseVector< T > & _parent_vector
包含该子向量的父向量。
template<typename T>
DenseSubVector& libMesh::DenseSubVector< T >::operator= ( const DenseSubVector< T > &  )
default
template<typename T>
DenseSubVector& libMesh::DenseSubVector< T >::operator= ( DenseSubVector< T > &&  )
default
template<typename T>
DenseVector<T>& libMesh::DenseSubVector< T >::parent ( )
inline
返回
对父向量的引用。

在文件 dense_subvector.h69 行定义.

参考 libMesh::DenseSubVector< T >::_parent_vector.

参考自 libMesh::DenseSubMatrix< T >::condense().

69 { return _parent_vector; }
DenseVector< T > & _parent_vector
包含该子向量的父向量。
template<typename T >
void libMesh::DenseVectorBase< T >::print ( std::ostream &  os) const
inherited

将向量漂亮地打印到 stdout。

参数
os输出流。

在文件 dense_vector_base.C51 行定义.

52 {
53  for (auto i : make_range(this->size()))
54  os << std::setw(8)
55  << this->el(i)
56  << std::endl;
57 }
virtual unsigned int size() const =0
virtual T el(const unsigned int i) const =0
template<typename T >
void libMesh::DenseVectorBase< T >::print_scientific ( std::ostream &  os,
unsigned  precision = 8 
) const
inherited

以科学计数法在额外的小数位数下打印向量的条目。

参数
os输出流。
precision小数点后的精度。

在文件 dense_vector_base.C31 行定义.

32 {
33  // save the initial format flags
34  std::ios_base::fmtflags os_flags = os.flags();
35 
36  // Print the vector entries.
37  for (auto i : make_range(this->size()))
38  os << std::setw(10)
39  << std::scientific
40  << std::setprecision(precision)
41  << this->el(i)
42  << std::endl;
43 
44  // reset the original format flags
45  os.flags(os_flags);
46 }
virtual unsigned int size() const =0
virtual T el(const unsigned int i) const =0
template<typename T >
void libMesh::DenseSubVector< T >::reposition ( const unsigned int  ioff,
const unsigned int  n 
)
inline

更改子向量在父向量中的位置和长度。

参数
ioff子向量在父向量中的新行偏移。
n子向量的新长度。

在文件 dense_subvector.h180 行定义.

参考自 libMesh::DenseSubVector< T >::DenseSubVector().

182 {
183  _i_off = ioff;
184  _n = n;
185 
186  // Make sure we still fit in the parent vector.
187  libmesh_assert_less_equal ((this->i_off() + this->size()), _parent_vector.size());
188 }
unsigned int _n
该子向量的长度。
unsigned int i_off() const
virtual unsigned int size() const overridefinal
DenseVector< T > & _parent_vector
包含该子向量的父向量。
unsigned int _i_off
在父向量中的偏移。
template<typename T>
virtual unsigned int libMesh::DenseSubVector< T >::size ( ) const
inlinefinaloverridevirtual
返回
子向量的长度。

实现了 libMesh::DenseVectorBase< T >.

在文件 dense_subvector.h98 行定义.

参考 libMesh::DenseSubVector< T >::_n.

参考自 libMesh::NumericVector< T >::insert().

99  { return _n; }
unsigned int _n
该子向量的长度。
template<typename T >
void libMesh::DenseSubVector< T >::zero ( )
inlinefinaloverridevirtual

重写基类的 zero 函数,将子向量中的所有元素置零。

实现了 libMesh::DenseVectorBase< T >.

在文件 dense_subvector.h194 行定义.

195 {
196  for (auto i : index_range(*this))
197  _parent_vector (i + this->i_off()) = 0.;
198 }
unsigned int i_off() const
DenseVector< T > & _parent_vector
包含该子向量的父向量。

类成员变量说明

template<typename T>
unsigned int libMesh::DenseSubVector< T >::_i_off
private

在父向量中的偏移。

在文件 dense_subvector.h160 行定义.

参考自 libMesh::DenseSubVector< T >::i_off().

template<typename T>
unsigned int libMesh::DenseSubVector< T >::_n
private

该子向量的长度。

在文件 dense_subvector.h155 行定义.

参考自 libMesh::DenseSubVector< T >::empty() , 以及 libMesh::DenseSubVector< T >::size().

template<typename T>
DenseVector<T>& libMesh::DenseSubVector< T >::_parent_vector
private

包含该子向量的父向量。

在文件 dense_subvector.h150 行定义.

参考自 libMesh::DenseSubVector< T >::parent().


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