Poster of Linux kernelThe best gift for a Linux geek
Preconditioner

Preconditioner

Section: C Library Functions (3) Updated: Thu Apr 7 2011
Local index Up
 

NAME

Preconditioner -  

SYNOPSIS


#include <preconditioner.h>

Inherits ReferenceCountedObject< Preconditioner< T > >.

Inherited by PetscPreconditioner< T >.  

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 ()

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 ()

static unsigned int n_objects ()
 

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
 

Detailed Description

 

template<typename T> class 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.

Author:

Derek Gaston, 2009

Definition at line 59 of file preconditioner.h.  

Member Typedef Documentation

 

typedef std::map<std::string, std::pair<unsigned int, unsigned int> > ReferenceCounter::Counts [protected, inherited]Data structure to log the information. The log is identified by the class name.

Definition at line 105 of file reference_counter.h.  

Constructor & Destructor Documentation

 

template<typename T > Preconditioner< T >::Preconditioner () [inline]Constructor. Initializes Preconditioner data structures

Definition at line 143 of file preconditioner.h.

                                   :
  _matrix(NULL),
  _preconditioner_type (ILU_PRECOND),
  _is_initialized      (false)
{
}
 

template<typename T > Preconditioner< T >::~Preconditioner () [inline, virtual]Destructor.

Definition at line 154 of file preconditioner.h.

{
  this->clear ();
}
 

Member Function Documentation

 

template<typename T> virtual void 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 PetscPreconditioner< T >.

Referenced by __libmesh_petsc_preconditioner_apply().  

template<typename T > Preconditioner< T > * Preconditioner< T >::build (const SolverPackagesolver_package = libMesh::default_solver_package()) [static]Builds a Preconditioner using the linear solver package specified by solver_package

Definition at line 33 of file preconditioner.C.

References libMeshEnums::PETSC_SOLVERS.

{
  // Build the appropriate solver
  switch (solver_package)
    {

/*
#ifdef LIBMESH_HAVE_LASPACK
    case LASPACK_SOLVERS:
      {
        AutoPtr<Preconditioner<T> > ap(new LaspackPreconditioner<T>);
        return ap;
      }
#endif
*/

#ifdef LIBMESH_HAVE_PETSC
    case PETSC_SOLVERS:
      {
        return new PetscPreconditioner<T>();
      }
#endif

/*
#ifdef LIBMESH_HAVE_TRILINOS
    case TRILINOS_SOLVERS:
      {
        AutoPtr<Preconditioner<T> > ap(new AztecPreconditioner<T>);
        return ap;
      }
#endif
*/
    default:
      std::cerr << 'ERROR:  Unrecognized solver package: '
                << solver_package
                << std::endl;
      libmesh_error();
    }
    
  return NULL;    
}
 

template<typename T> virtual void Preconditioner< T >::clear () [inline, virtual]Release all memory and clear data structures.

Reimplemented in PetscPreconditioner< T >.

Definition at line 95 of file preconditioner.h.

{}
 

std::string ReferenceCounter::get_info () [static, inherited]Gets a string containing the reference information.

Definition at line 45 of file reference_counter.C.

References ReferenceCounter::_counts, and Quality::name().

Referenced by ReferenceCounter::print_info().

{
#if defined(LIBMESH_ENABLE_REFERENCE_COUNTING) && defined(DEBUG)

  std::ostringstream out;
  
  out << '
      << ' ---------------------------------------------------------------------------- 
      << '| Reference count information                                                |
      << ' ---------------------------------------------------------------------------- ;
  
  for (Counts::iterator it = _counts.begin();
       it != _counts.end(); ++it)
    {
      const std::string name(it->first);
      const unsigned int creations    = it->second.first;
      const unsigned int destructions = it->second.second;

      out << '| ' << name << ' reference count information:
          << '|  Creations:    ' << creations    << '
          << '|  Destructions: ' << destructions << ';
    }
  
  out << ' ---------------------------------------------------------------------------- ;

  return out.str();

#else

  return '';
  
#endif
}
 

void 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 149 of file reference_counter.h.

References ReferenceCounter::_counts, Quality::name(), and Threads::spin_mtx.

Referenced by ReferenceCountedObject< Value >::ReferenceCountedObject().

{
  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
  std::pair<unsigned int, unsigned int>& p = _counts[name];

  p.first++;
}
 

void 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 167 of file reference_counter.h.

References ReferenceCounter::_counts, Quality::name(), and Threads::spin_mtx.

Referenced by ReferenceCountedObject< Value >::~ReferenceCountedObject().

{
  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
  std::pair<unsigned int, unsigned int>& p = _counts[name];

  p.second++;
}
 

template<typename T> virtual void Preconditioner< T >::init () [inline, virtual]Initialize data structures if not done so already.

Reimplemented in PetscPreconditioner< T >.

Definition at line 100 of file preconditioner.h.

Referenced by __libmesh_petsc_preconditioner_setup().

{};
 

template<typename T> bool Preconditioner< T >::initialized () const [inline]Returns:

true if the data structures are initialized, false otherwise.

Definition at line 84 of file preconditioner.h.

{ return _is_initialized; }
 

static unsigned int ReferenceCounter::n_objects () [inline, static, inherited]Prints the number of outstanding (created, but not yet destroyed) objects.

Definition at line 76 of file reference_counter.h.

References ReferenceCounter::_n_objects.

Referenced by System::read_serialized_blocked_dof_objects(), and System::write_serialized_blocked_dof_objects().

  { return _n_objects; }
 

void ReferenceCounter::print_info () [static, inherited]Prints the reference information to std::cout.

Definition at line 83 of file reference_counter.C.

References ReferenceCounter::get_info().

{
#if defined(LIBMESH_ENABLE_REFERENCE_COUNTING) && defined(DEBUG)
  
  std::cout << ReferenceCounter::get_info();
  
#endif
}
 

template<typename T > void Preconditioner< T >::set_matrix (SparseMatrix< Number > &mat)Sets the matrix P to be preconditioned.

Definition at line 161 of file preconditioner.h.

References libMesh::libMeshPrivateData::_is_initialized.

{
  //If the matrix is changing then we (probably) need to reinitialize.
  _is_initialized = false;
  _matrix = &mat;
}
 

template<typename T > void Preconditioner< T >::set_type (const PreconditionerTypepct)Sets the type of preconditioner to use.

Definition at line 170 of file preconditioner.h.

References libMesh::libMeshPrivateData::_is_initialized.

{
  //If the preconditioner type changes we (probably) need to reinitialize.
  _is_initialized = false;
  _preconditioner_type = pct;
}
 

template<typename T> PreconditionerType Preconditioner< T >::type () const [inline]Returns the type of preconditioner to use.

Definition at line 110 of file preconditioner.h.

  { return _preconditioner_type; }
 

Member Data Documentation

 

ReferenceCounter::Counts ReferenceCounter::_counts [static, protected, inherited]Actually holds the data.

Definition at line 110 of file reference_counter.h.

Referenced by ReferenceCounter::get_info(), ReferenceCounter::increment_constructor_count(), and ReferenceCounter::increment_destructor_count().  

template<typename T> bool Preconditioner< T >::_is_initialized [protected]Flag indicating if the data structures have been initialized.

Definition at line 134 of file preconditioner.h.

Referenced by Preconditioner< Number >::initialized().  

template<typename T> SparseMatrix<T>* 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 124 of file preconditioner.h.  

Threads::spin_mutex ReferenceCounter::_mutex [static, protected, inherited]Mutual exclusion object to enable thread-safe reference counting.

Definition at line 123 of file reference_counter.h.  

Threads::atomic< unsigned int > ReferenceCounter::_n_objects [static, protected, inherited]The number of objects. Print the reference count information when the number returns to 0.

Definition at line 118 of file reference_counter.h.

Referenced by ReferenceCounter::n_objects(), ReferenceCounter::ReferenceCounter(), and ReferenceCounter::~ReferenceCounter().  

template<typename T> PreconditionerType Preconditioner< T >::_preconditioner_type [protected]Enum statitng with type of preconditioner to use.

Definition at line 129 of file preconditioner.h.

Referenced by Preconditioner< Number >::type().

 

Author

Generated automatically by Doxygen for libMesh from the source code.


 

Index

NAME
SYNOPSIS
Public Member Functions
Static Public Member Functions
Protected Types
Protected Member Functions
Protected Attributes
Static Protected Attributes
Detailed Description
template<typename T> class Preconditioner< T >
Member Typedef Documentation
typedef std::map<std::string, std::pair<unsigned int, unsigned int> > ReferenceCounter::Counts [protected, inherited]Data structure to log the information. The log is identified by the class name.
Constructor & Destructor Documentation
template<typename T > Preconditioner< T >::Preconditioner () [inline]Constructor. Initializes Preconditioner data structures
template<typename T > Preconditioner< T >::~Preconditioner () [inline, virtual]Destructor.
Member Function Documentation
template<typename T> virtual void 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.
template<typename T > Preconditioner< T > * Preconditioner< T >::build (const SolverPackagesolver_package = libMesh::default_solver_package()) [static]Builds a Preconditioner using the linear solver package specified by solver_package
template<typename T> virtual void Preconditioner< T >::clear () [inline, virtual]Release all memory and clear data structures.
std::string ReferenceCounter::get_info () [static, inherited]Gets a string containing the reference information.
void 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.
void 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.
template<typename T> virtual void Preconditioner< T >::init () [inline, virtual]Initialize data structures if not done so already.
template<typename T> bool Preconditioner< T >::initialized () const [inline]Returns:
static unsigned int ReferenceCounter::n_objects () [inline, static, inherited]Prints the number of outstanding (created, but not yet destroyed) objects.
void ReferenceCounter::print_info () [static, inherited]Prints the reference information to std::cout.
template<typename T > void Preconditioner< T >::set_matrix (SparseMatrix< Number > &mat)Sets the matrix P to be preconditioned.
template<typename T > void Preconditioner< T >::set_type (const PreconditionerTypepct)Sets the type of preconditioner to use.
template<typename T> PreconditionerType Preconditioner< T >::type () const [inline]Returns the type of preconditioner to use.
Member Data Documentation
ReferenceCounter::Counts ReferenceCounter::_counts [static, protected, inherited]Actually holds the data.
template<typename T> bool Preconditioner< T >::_is_initialized [protected]Flag indicating if the data structures have been initialized.
template<typename T> SparseMatrix<T>* Preconditioner< T >::_matrix [protected]The matrix P... ie the matrix to be preconditioned. This is often the actual system matrix of a linear sytem.
Threads::spin_mutex ReferenceCounter::_mutex [static, protected, inherited]Mutual exclusion object to enable thread-safe reference counting.
Threads::atomic< unsigned int > ReferenceCounter::_n_objects [static, protected, inherited]The number of objects. Print the reference count information when the number returns to 0.
template<typename T> PreconditionerType Preconditioner< T >::_preconditioner_type [protected]Enum statitng with type of preconditioner to use.
Author

This document was created by man2html, using the manual pages.
Time: 21:52:57 GMT, April 16, 2011