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

EigenPreconditioner 类提供了对 Eigen 库中预处理器集合的接口。 更多...

#include <eigen_preconditioner.h>

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

Public 成员函数

 EigenPreconditioner (const libMesh::Parallel::Communicator &comm_in)
 构造函数。初始化 EigenPreconditioner 的数据结构。 更多...
 
virtual ~EigenPreconditioner ()
 析构函数。 更多...
 
virtual void apply (const NumericVector< T > &x, NumericVector< T > &y) override
 应用预处理器操作。 更多...
 
virtual void clear () override
 清空预处理器状态。 更多...
 
virtual void init () override
 初始化预处理器。 更多...
 
bool initialized () const
 
virtual void setup ()
 每当 "操作可能已更改" 时都会调用此函数。 更多...
 
void set_matrix (SparseMatrix< Number > &mat)
 设置要进行预处理的矩阵。 更多...
 
PreconditionerType type () const
 
void set_type (const PreconditionerType pct)
 设置要使用的预处理器类型。 更多...
 

静态 Public 成员函数

static std::unique_ptr
< Preconditioner< T > > 
build_preconditioner (const libMesh::Parallel::Communicator &comm, const SolverPackage solver_package=libMesh::default_solver_package())
 构建一个 Preconditioner,使用由 solver_package 指定的线性求解器软件包, 并以 std::unique_ptr 包装结果以确保安全性。 更多...
 
static std::string get_info ()
 Gets a string containing the reference information. 更多...
 
static void print_info (std::ostream &out_stream=libMesh::out)
 Prints the reference information, by default to libMesh::out. 更多...
 
static unsigned int n_objects ()
 Prints the number of outstanding (created, but not yet destroyed) objects. 更多...
 
static void enable_print_counter_info ()
 Methods to enable/disable the reference counter output from print_info() 更多...
 
static void disable_print_counter_info ()
 

Protected 类型

typedef std::map< std::string,
std::pair< unsigned int,
unsigned int > > 
Counts
 Data structure to log the information. 更多...
 

Protected 成员函数

void increment_constructor_count (const std::string &name) noexcept
 Increments the construction counter. 更多...
 
void increment_destructor_count (const std::string &name) noexcept
 Increments the destruction counter. 更多...
 

Protected 属性

SparseMatrix< T > * _matrix
 要进行预处理的矩阵 P... 更多...
 
PreconditionerType _preconditioner_type
 枚举类型,表示要使用的预处理器类型。 更多...
 
bool _is_initialized
 指示数据结构是否已初始化的标志。 更多...
 

静态 Protected 属性

static Counts _counts
 Actually holds the data. 更多...
 
static Threads::atomic
< unsigned int > 
_n_objects
 The number of objects. 更多...
 
static Threads::spin_mutex _mutex
 Mutual exclusion object to enable thread-safe reference counting. 更多...
 
static bool _enable_print_counter = true
 Flag to control whether reference count information is printed when print_info is called. 更多...
 

详细描述

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

EigenPreconditioner 类提供了对 Eigen 库中预处理器集合的接口。

该类是一个模板类,处理不同数据类型 T 的情况。继承自 Preconditioner<T>。

作者
Benjamin Kirk
日期
2013

在文件 eigen_preconditioner.h47 行定义.

成员类型定义说明

typedef std::map<std::string, std::pair<unsigned int, unsigned int> > libMesh::ReferenceCounter::Counts
protectedinherited

Data structure to log the information.

The log is identified by the class name.

在文件 reference_counter.h119 行定义.

构造及析构函数说明

template<typename T >
libMesh::EigenPreconditioner< T >::EigenPreconditioner ( const libMesh::Parallel::Communicator &  comm_in)
inline

构造函数。初始化 EigenPreconditioner 的数据结构。

参数
comm_in通信器对象,指定通信环境。

在文件 eigen_preconditioner.h89 行定义.

89  :
90  Preconditioner<T>(comm_in)
91 {
92 }
template<typename T >
libMesh::EigenPreconditioner< T >::~EigenPreconditioner ( )
inlinevirtual

析构函数。

在文件 eigen_preconditioner.h98 行定义.

99 {
100  this->clear ();
101 }
virtual void clear() override
清空预处理器状态。

成员函数说明

template<typename T >
void libMesh::EigenPreconditioner< T >::apply ( const NumericVector< T > &  x,
NumericVector< T > &  y 
)
overridevirtual

应用预处理器操作。

给定输入向量 x,将结果存储在输出向量 y 中。

参数
x输入向量。
y输出向量。

实现了 libMesh::Preconditioner< T >.

在文件 eigen_preconditioner.C34 行定义.

35 {
36  libmesh_not_implemented();
37 }
template<typename T >
std::unique_ptr< Preconditioner< T > > libMesh::Preconditioner< T >::build_preconditioner ( const libMesh::Parallel::Communicator &  comm,
const SolverPackage  solver_package = libMesh::default_solver_package() 
)
staticinherited

构建一个 Preconditioner,使用由 solver_package 指定的线性求解器软件包, 并以 std::unique_ptr 包装结果以确保安全性。

参数
comm通信器对象
solver_package求解器软件包(默认为 libMesh 的默认求解器软件包)
返回
返回一个包含 Preconditioner 指针的 std::unique_ptr

在文件 preconditioner.C50 行定义.

参考 libMesh::EIGEN_SOLVERS, libMesh::libmesh_ignore() , 以及 libMesh::TRILINOS_SOLVERS.

52 {
53  // Avoid unused parameter warnings when no solver packages are enabled.
54  libmesh_ignore(comm);
55 
56  // Build and return the appropriate Preconditioner object.
57  switch (solver_package)
58  {
59 
60 #ifdef LIBMESH_HAVE_PETSC
61  case PETSC_SOLVERS:
62  {
63  return std::make_unique<PetscPreconditioner<T>>(comm);
64  }
65 #endif
66 
67 #ifdef LIBMESH_TRILINOS_HAVE_EPETRA
68  case TRILINOS_SOLVERS:
69  return std::make_unique<TrilinosPreconditioner<T>>(comm);
70 #endif
71 
72 #ifdef LIBMESH_HAVE_EIGEN
73  case EIGEN_SOLVERS:
74  return std::make_unique<EigenPreconditioner<T>>(comm);
75 #endif
76 
77  default:
78  libmesh_error_msg("ERROR: Unrecognized solver package: " << solver_package);
79  }
80 }
EIGEN_SOLVERS
Definition: libmesh.C:249
TRILINOS_SOLVERS
Definition: libmesh.C:247
void libmesh_ignore(const Args &...)
template<typename T >
virtual void libMesh::EigenPreconditioner< T >::clear ( )
inlineoverridevirtual

清空预处理器状态。

重载 libMesh::Preconditioner< T > .

在文件 eigen_preconditioner.h75 行定义.

75 {}
void libMesh::ReferenceCounter::disable_print_counter_info ( )
staticinherited

在文件 reference_counter.C100 行定义.

参考 libMesh::ReferenceCounter::_enable_print_counter.

101 {
102  _enable_print_counter = false;
103  return;
104 }
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called...
void libMesh::ReferenceCounter::enable_print_counter_info ( )
staticinherited

Methods to enable/disable the reference counter output from print_info()

在文件 reference_counter.C94 行定义.

参考 libMesh::ReferenceCounter::_enable_print_counter.

95 {
96  _enable_print_counter = true;
97  return;
98 }
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called...
std::string libMesh::ReferenceCounter::get_info ( )
staticinherited

Gets a string containing the reference information.

在文件 reference_counter.C47 行定义.

参考 libMesh::ReferenceCounter::_counts.

参考自 libMesh::ReferenceCounter::print_info().

48 {
49 #if defined(LIBMESH_ENABLE_REFERENCE_COUNTING) && defined(DEBUG)
50 
51  std::ostringstream oss;
52 
53  oss << '\n'
54  << " ---------------------------------------------------------------------------- \n"
55  << "| Reference count information |\n"
56  << " ---------------------------------------------------------------------------- \n";
57 
58  for (const auto & [name, cd] : _counts)
59  oss << "| " << name << " reference count information:\n"
60  << "| Creations: " << cd.first << '\n'
61  << "| Destructions: " << cd.second << '\n';
62 
63  oss << " ---------------------------------------------------------------------------- \n";
64 
65  return oss.str();
66 
67 #else
68 
69  return "";
70 
71 #endif
72 }
static Counts _counts
Actually holds the data.
void libMesh::ReferenceCounter::increment_constructor_count ( const std::string &  name)
inlineprotectednoexceptinherited

Increments the construction counter.

Should be called in the constructor of any derived class that will be reference counted.

在文件 reference_counter.h183 行定义.

参考 libMesh::err.

参考自 libMesh::ReferenceCountedObject< SparseMatrix< T > >::ReferenceCountedObject().

184 {
185  libmesh_try
186  {
187  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
188  std::pair<unsigned int, unsigned int> & p = _counts[name];
189  p.first++;
190  }
191  libmesh_catch (...)
192  {
193  auto stream = libMesh::err.get();
194  stream->exceptions(stream->goodbit); // stream must not throw
195  libMesh::err << "Encountered unrecoverable error while calling "
196  << "ReferenceCounter::increment_constructor_count() "
197  << "for a(n) " << name << " object." << std::endl;
198  std::terminate();
199  }
200 }
OStreamProxy err
static Counts _counts
Actually holds the data.
void libMesh::ReferenceCounter::increment_destructor_count ( const std::string &  name)
inlineprotectednoexceptinherited

Increments the destruction counter.

Should be called in the destructor of any derived class that will be reference counted.

在文件 reference_counter.h207 行定义.

参考 libMesh::err.

参考自 libMesh::ReferenceCountedObject< SparseMatrix< T > >::~ReferenceCountedObject().

208 {
209  libmesh_try
210  {
211  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
212  std::pair<unsigned int, unsigned int> & p = _counts[name];
213  p.second++;
214  }
215  libmesh_catch (...)
216  {
217  auto stream = libMesh::err.get();
218  stream->exceptions(stream->goodbit); // stream must not throw
219  libMesh::err << "Encountered unrecoverable error while calling "
220  << "ReferenceCounter::increment_destructor_count() "
221  << "for a(n) " << name << " object." << std::endl;
222  std::terminate();
223  }
224 }
OStreamProxy err
static Counts _counts
Actually holds the data.
template<typename T >
void libMesh::EigenPreconditioner< T >::init ( )
overridevirtual

初始化预处理器。

重载 libMesh::Preconditioner< T > .

在文件 eigen_preconditioner.C43 行定义.

44 {
45  libmesh_not_implemented();
46 }
template<typename T >
bool libMesh::Preconditioner< T >::initialized ( ) const
inlineinherited
返回
如果数据结构已初始化,则返回 true,否则返回 false。

在文件 preconditioner.h87 行定义.

参考 libMesh::Preconditioner< T >::_is_initialized.

87 { return _is_initialized; }
bool _is_initialized
指示数据结构是否已初始化的标志。
static unsigned int libMesh::ReferenceCounter::n_objects ( )
inlinestaticinherited

Prints the number of outstanding (created, but not yet destroyed) objects.

在文件 reference_counter.h85 行定义.

参考 libMesh::ReferenceCounter::_n_objects.

参考自 libMesh::LibMeshInit::~LibMeshInit().

86  { return _n_objects; }
static Threads::atomic< unsigned int > _n_objects
The number of objects.
void libMesh::ReferenceCounter::print_info ( std::ostream &  out_stream = libMesh::out)
staticinherited

Prints the reference information, by default to libMesh::out.

在文件 reference_counter.C81 行定义.

参考 libMesh::ReferenceCounter::_enable_print_counter , 以及 libMesh::ReferenceCounter::get_info().

参考自 libMesh::LibMeshInit::~LibMeshInit().

82 {
84  out_stream << ReferenceCounter::get_info();
85 }
static std::string get_info()
Gets a string containing the reference information.
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called...
template<typename T >
void libMesh::Preconditioner< T >::set_matrix ( SparseMatrix< Number > &  mat)
inherited

设置要进行预处理的矩阵。

参数
mat要进行预处理的稀疏矩阵
返回

在文件 preconditioner.h174 行定义.

参考 libMesh::libMeshPrivateData::_is_initialized.

175 {
176  //如果矩阵发生变化,那么(可能)需要重新初始化。
177  _is_initialized = false;
178  _matrix = &mat;
179 }
bool _is_initialized
指示数据结构是否已初始化的标志。
SparseMatrix< T > * _matrix
要进行预处理的矩阵 P...
template<typename T >
void libMesh::Preconditioner< T >::set_type ( const PreconditionerType  pct)
inherited

设置要使用的预处理器类型。

参数
pct预处理器类型
返回

在文件 preconditioner.h183 行定义.

参考 libMesh::libMeshPrivateData::_is_initialized.

184 {
185  //如果前置条件类型改变,我们(可能)需要重新初始化。
186  _is_initialized = false;
187  _preconditioner_type = pct;
188 }
PreconditionerType _preconditioner_type
枚举类型,表示要使用的预处理器类型。
bool _is_initialized
指示数据结构是否已初始化的标志。
template<typename T >
virtual void libMesh::Preconditioner< T >::setup ( )
inlinevirtualinherited

每当 "操作可能已更改" 时都会调用此函数。

这是您需要填充预处理矩阵的地方。

返回

在文件 preconditioner.h120 行定义.

120 {}
template<typename T >
PreconditionerType libMesh::Preconditioner< T >::type ( ) const
inlineinherited
返回
要使用的预处理器类型。

在文件 preconditioner.h133 行定义.

参考 libMesh::Preconditioner< T >::_preconditioner_type.

133 { return _preconditioner_type; }
PreconditionerType _preconditioner_type
枚举类型,表示要使用的预处理器类型。

类成员变量说明

ReferenceCounter::Counts libMesh::ReferenceCounter::_counts
staticprotectedinherited

Actually holds the data.

在文件 reference_counter.h124 行定义.

参考自 libMesh::ReferenceCounter::get_info().

bool libMesh::ReferenceCounter::_enable_print_counter = true
staticprotectedinherited

Flag to control whether reference count information is printed when print_info is called.

在文件 reference_counter.h143 行定义.

参考自 libMesh::ReferenceCounter::disable_print_counter_info(), libMesh::ReferenceCounter::enable_print_counter_info() , 以及 libMesh::ReferenceCounter::print_info().

template<typename T >
bool libMesh::Preconditioner< T >::_is_initialized
protectedinherited

指示数据结构是否已初始化的标志。

在文件 preconditioner.h158 行定义.

参考自 libMesh::Preconditioner< T >::initialized().

template<typename T >
SparseMatrix<T>* libMesh::Preconditioner< T >::_matrix
protectedinherited

要进行预处理的矩阵 P...

通常是线性系统的实际系统矩阵。

在文件 preconditioner.h148 行定义.

Threads::spin_mutex libMesh::ReferenceCounter::_mutex
staticprotectedinherited

Mutual exclusion object to enable thread-safe reference counting.

在文件 reference_counter.h137 行定义.

Threads::atomic< unsigned int > libMesh::ReferenceCounter::_n_objects
staticprotectedinherited

The number of objects.

Print the reference count information when the number returns to 0.

在文件 reference_counter.h132 行定义.

参考自 libMesh::ReferenceCounter::n_objects(), libMesh::ReferenceCounter::ReferenceCounter() , 以及 libMesh::ReferenceCounter::~ReferenceCounter().

template<typename T >
PreconditionerType libMesh::Preconditioner< T >::_preconditioner_type
protectedinherited

枚举类型,表示要使用的预处理器类型。

在文件 preconditioner.h153 行定义.

参考自 libMesh::Preconditioner< T >::type().


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