libMesh::Preconditioner< T > Class Template Reference
#include <preconditioner.h>

Public Member Functions | |
| Preconditioner () | |
| virtual | ~Preconditioner () |
| bool | initialized () const |
| virtual void | apply (const NumericVector< T > &x, NumericVector< T > &y)=0 |
| virtual void | clear () |
| virtual void | init () |
| virtual void | setup () |
| void | set_matrix (SparseMatrix< Number > &mat) |
| PreconditionerType | type () const |
| void | set_type (const PreconditionerType pct) |
Static Public Member Functions | |
| static Preconditioner< T > * | build (const SolverPackage solver_package=libMesh::default_solver_package()) |
| static std::string | get_info () |
| static void | print_info (std::ostream &out=libMesh::out) |
| static unsigned int | n_objects () |
| static void | enable_print_counter_info () |
| static void | disable_print_counter_info () |
Protected Types | |
| typedef std::map< std::string, std::pair< unsigned int, unsigned int > > | Counts |
Protected Member Functions | |
| void | increment_constructor_count (const std::string &name) |
| void | increment_destructor_count (const std::string &name) |
Protected Attributes | |
| SparseMatrix< T > * | _matrix |
| PreconditionerType | _preconditioner_type |
| bool | _is_initialized |
Static Protected Attributes | |
| static Counts | _counts |
| static Threads::atomic < unsigned int > | _n_objects |
| static Threads::spin_mutex | _mutex |
| static bool | _enable_print_counter = true |
Detailed Description
template<typename T>
class libMesh::Preconditioner< T >
This class provides a uniform interface for preconditioners. This base class is overloaded to provide linear solvers from different packages like PETSC or Trilinos.
In the below comments P is the matrix to be preconditioned with Apply() performing the equivalent of the matrix vector product P^-1 x. This can also be thought of as (usually approximately) solving for Py=x.
Definition at line 61 of file preconditioner.h.
Member Typedef Documentation
typedef std::map<std::string, std::pair<unsigned int, unsigned int> > libMesh::ReferenceCounter::Counts [protected, inherited] |
Data structure to log the information. The log is identified by the class name.
Definition at line 113 of file reference_counter.h.
Constructor & Destructor Documentation
| libMesh::Preconditioner< T >::Preconditioner | ( | ) | [inline] |
Constructor. Initializes Preconditioner data structures
Definition at line 154 of file preconditioner.h.
00154 : 00155 _matrix(NULL), 00156 _preconditioner_type (ILU_PRECOND), 00157 _is_initialized (false) 00158 { 00159 }
| libMesh::Preconditioner< T >::~Preconditioner | ( | ) | [inline, virtual] |
Destructor.
Definition at line 165 of file preconditioner.h.
References libMesh::Preconditioner< T >::clear().
00166 { 00167 this->clear (); 00168 }
Member Function Documentation
| virtual void libMesh::Preconditioner< T >::apply | ( | const NumericVector< T > & | x, | |
| NumericVector< T > & | y | |||
| ) | [pure virtual] |
Computes the preconditioned vector "y" based on input "x". Usually by solving Py=x to get the action of P^-1 x.
Implemented in libMesh::PetscPreconditioner< T >, and libMesh::TrilinosPreconditioner< T >.
| Preconditioner< T > * libMesh::Preconditioner< T >::build | ( | const SolverPackage | solver_package = libMesh::default_solver_package() |
) | [inline, static] |
Builds a Preconditioner using the linear solver package specified by solver_package
Definition at line 35 of file preconditioner.C.
References libMesh::err, libMeshEnums::PETSC_SOLVERS, and libMesh::TRILINOS_SOLVERS.
00036 { 00037 // Build the appropriate solver 00038 switch (solver_package) 00039 { 00040 00041 /* 00042 #ifdef LIBMESH_HAVE_LASPACK 00043 case LASPACK_SOLVERS: 00044 { 00045 AutoPtr<Preconditioner<T> > ap(new LaspackPreconditioner<T>); 00046 return ap; 00047 } 00048 #endif 00049 */ 00050 00051 #ifdef LIBMESH_HAVE_PETSC 00052 case PETSC_SOLVERS: 00053 { 00054 return new PetscPreconditioner<T>(); 00055 } 00056 #endif 00057 00058 #ifdef LIBMESH_HAVE_TRILINOS 00059 case TRILINOS_SOLVERS: 00060 return new TrilinosPreconditioner<T>(); 00061 #endif 00062 00063 default: 00064 libMesh::err << "ERROR: Unrecognized solver package: " 00065 << solver_package 00066 << std::endl; 00067 libmesh_error(); 00068 } 00069 00070 return NULL; 00071 }
| virtual void libMesh::Preconditioner< T >::clear | ( | ) | [inline, virtual] |
Release all memory and clear data structures.
Reimplemented in libMesh::PetscPreconditioner< T >, and libMesh::TrilinosPreconditioner< T >.
Definition at line 97 of file preconditioner.h.
Referenced by libMesh::Preconditioner< T >::~Preconditioner().
| void libMesh::ReferenceCounter::disable_print_counter_info | ( | ) | [static, inherited] |
Definition at line 106 of file reference_counter.C.
References libMesh::ReferenceCounter::_enable_print_counter.
00107 { 00108 _enable_print_counter = false; 00109 return; 00110 }
| void libMesh::ReferenceCounter::enable_print_counter_info | ( | ) | [static, inherited] |
Methods to enable/disable the reference counter output from print_info()
Definition at line 100 of file reference_counter.C.
References libMesh::ReferenceCounter::_enable_print_counter.
00101 { 00102 _enable_print_counter = true; 00103 return; 00104 }
| std::string libMesh::ReferenceCounter::get_info | ( | ) | [static, inherited] |
Gets a string containing the reference information.
Definition at line 47 of file reference_counter.C.
References libMesh::ReferenceCounter::_counts, and libMesh::Quality::name().
Referenced by libMesh::ReferenceCounter::print_info().
00048 { 00049 #if defined(LIBMESH_ENABLE_REFERENCE_COUNTING) && defined(DEBUG) 00050 00051 std::ostringstream oss; 00052 00053 oss << '\n' 00054 << " ---------------------------------------------------------------------------- \n" 00055 << "| Reference count information |\n" 00056 << " ---------------------------------------------------------------------------- \n"; 00057 00058 for (Counts::iterator it = _counts.begin(); 00059 it != _counts.end(); ++it) 00060 { 00061 const std::string name(it->first); 00062 const unsigned int creations = it->second.first; 00063 const unsigned int destructions = it->second.second; 00064 00065 oss << "| " << name << " reference count information:\n" 00066 << "| Creations: " << creations << '\n' 00067 << "| Destructions: " << destructions << '\n'; 00068 } 00069 00070 oss << " ---------------------------------------------------------------------------- \n"; 00071 00072 return oss.str(); 00073 00074 #else 00075 00076 return ""; 00077 00078 #endif 00079 }
| void libMesh::ReferenceCounter::increment_constructor_count | ( | const std::string & | name | ) | [inline, protected, inherited] |
Increments the construction counter. Should be called in the constructor of any derived class that will be reference counted.
Definition at line 163 of file reference_counter.h.
References libMesh::ReferenceCounter::_counts, and libMesh::Threads::spin_mtx.
Referenced by libMesh::ReferenceCountedObject< RBParametrized >::ReferenceCountedObject().
00164 { 00165 Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx); 00166 std::pair<unsigned int, unsigned int>& p = _counts[name]; 00167 00168 p.first++; 00169 }
| void libMesh::ReferenceCounter::increment_destructor_count | ( | const std::string & | name | ) | [inline, protected, inherited] |
Increments the destruction counter. Should be called in the destructor of any derived class that will be reference counted.
Definition at line 176 of file reference_counter.h.
References libMesh::ReferenceCounter::_counts, and libMesh::Threads::spin_mtx.
Referenced by libMesh::ReferenceCountedObject< RBParametrized >::~ReferenceCountedObject().
00177 { 00178 Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx); 00179 std::pair<unsigned int, unsigned int>& p = _counts[name]; 00180 00181 p.second++; 00182 }
| virtual void libMesh::Preconditioner< T >::init | ( | ) | [inline, virtual] |
Initialize data structures if not done so already.
This MUST be called before the preconditioning object is used.
Reimplemented in libMesh::PetscPreconditioner< T >, and libMesh::TrilinosPreconditioner< T >.
Definition at line 104 of file preconditioner.h.
| bool libMesh::Preconditioner< T >::initialized | ( | ) | const [inline] |
- Returns:
- true if the data structures are initialized, false otherwise.
Definition at line 86 of file preconditioner.h.
00086 { return _is_initialized; }
| static unsigned int libMesh::ReferenceCounter::n_objects | ( | ) | [inline, static, inherited] |
Prints the number of outstanding (created, but not yet destroyed) objects.
Definition at line 79 of file reference_counter.h.
References libMesh::ReferenceCounter::_n_objects.
00080 { return _n_objects; }
| void libMesh::ReferenceCounter::print_info | ( | std::ostream & | out = libMesh::out |
) | [static, inherited] |
Prints the reference information, by default to libMesh::out.
Definition at line 88 of file reference_counter.C.
References libMesh::ReferenceCounter::_enable_print_counter, and libMesh::ReferenceCounter::get_info().
00089 { 00090 if( _enable_print_counter ) out_stream << ReferenceCounter::get_info(); 00091 }
| void libMesh::Preconditioner< T >::set_matrix | ( | SparseMatrix< Number > & | mat | ) | [inline] |
Sets the matrix P to be preconditioned.
Definition at line 172 of file preconditioner.h.
References libMesh::Preconditioner< T >::_is_initialized, and libMesh::Preconditioner< T >::_matrix.
00173 { 00174 //If the matrix is changing then we (probably) need to reinitialize. 00175 _is_initialized = false; 00176 _matrix = &mat; 00177 }
| void libMesh::Preconditioner< T >::set_type | ( | const PreconditionerType | pct | ) | [inline] |
Sets the type of preconditioner to use.
Definition at line 181 of file preconditioner.h.
References libMesh::Preconditioner< T >::_is_initialized, and libMesh::Preconditioner< T >::_preconditioner_type.
00182 { 00183 //If the preconditioner type changes we (probably) need to reinitialize. 00184 _is_initialized = false; 00185 _preconditioner_type = pct; 00186 }
| virtual void libMesh::Preconditioner< T >::setup | ( | ) | [inline, virtual] |
This is called every time the "operator might have changed".
This is essentially where you need to fill in your preconditioning matrix.
Definition at line 111 of file preconditioner.h.
| PreconditionerType libMesh::Preconditioner< T >::type | ( | ) | const [inline] |
Returns the type of preconditioner to use.
Definition at line 121 of file preconditioner.h.
00122 { return _preconditioner_type; }
Member Data Documentation
ReferenceCounter::Counts libMesh::ReferenceCounter::_counts [static, protected, inherited] |
Actually holds the data.
Definition at line 118 of file reference_counter.h.
Referenced by libMesh::ReferenceCounter::get_info(), libMesh::ReferenceCounter::increment_constructor_count(), and libMesh::ReferenceCounter::increment_destructor_count().
bool libMesh::ReferenceCounter::_enable_print_counter = true [static, protected, inherited] |
Flag to control whether reference count information is printed when print_info is called.
Definition at line 137 of file reference_counter.h.
Referenced by libMesh::ReferenceCounter::disable_print_counter_info(), libMesh::ReferenceCounter::enable_print_counter_info(), and libMesh::ReferenceCounter::print_info().
bool libMesh::Preconditioner< T >::_is_initialized [protected] |
Flag indicating if the data structures have been initialized.
Definition at line 145 of file preconditioner.h.
Referenced by libMesh::TrilinosPreconditioner< T >::init(), libMesh::PetscPreconditioner< T >::init(), libMesh::Preconditioner< Number >::initialized(), libMesh::Preconditioner< T >::set_matrix(), and libMesh::Preconditioner< T >::set_type().
SparseMatrix<T>* libMesh::Preconditioner< T >::_matrix [protected] |
The matrix P... ie the matrix to be preconditioned. This is often the actual system matrix of a linear sytem.
Definition at line 135 of file preconditioner.h.
Referenced by libMesh::TrilinosPreconditioner< T >::init(), libMesh::PetscPreconditioner< T >::init(), and libMesh::Preconditioner< T >::set_matrix().
Threads::spin_mutex libMesh::ReferenceCounter::_mutex [static, protected, inherited] |
Mutual exclusion object to enable thread-safe reference counting.
Definition at line 131 of file reference_counter.h.
Threads::atomic< unsigned int > libMesh::ReferenceCounter::_n_objects [static, protected, inherited] |
The number of objects. Print the reference count information when the number returns to 0.
Definition at line 126 of file reference_counter.h.
Referenced by libMesh::ReferenceCounter::n_objects(), libMesh::ReferenceCounter::ReferenceCounter(), and libMesh::ReferenceCounter::~ReferenceCounter().
PreconditionerType libMesh::Preconditioner< T >::_preconditioner_type [protected] |
Enum statitng with type of preconditioner to use.
Definition at line 140 of file preconditioner.h.
Referenced by libMesh::TrilinosPreconditioner< T >::compute(), libMesh::TrilinosPreconditioner< T >::init(), libMesh::PetscPreconditioner< T >::init(), libMesh::Preconditioner< T >::set_type(), and libMesh::Preconditioner< Number >::type().
The documentation for this class was generated from the following files:
Site Created By: libMesh Developers
Last modified: February 05 2013 19:55:34 UTC
Hosted By: