45#ifndef STOKHOS_INVERSEPRECONDITIONER_HPP
46#define STOKHOS_INVERSEPRECONDITIONER_HPP
48#include "Teuchos_RCP.hpp"
50#include "Teuchos_SerialDenseMatrix.hpp"
51#include "Teuchos_SerialDenseSolver.hpp"
55 template <
typename ordinal_type,
typename value_type>
62 const Teuchos::SerialDenseMatrix<ordinal_type,double> & A_) :
A(A_) {}
68 const Teuchos::SerialDenseMatrix<ordinal_type, value_type>& Input,
69 Teuchos::SerialDenseMatrix<ordinal_type, value_type>& Result,
70 ordinal_type m)
const {
71 Teuchos::RCP< Teuchos::SerialDenseMatrix<ordinal_type, value_type> > AA, UU, RR;
72 AA = Teuchos::rcp(
new Teuchos::SerialDenseMatrix<ordinal_type, value_type> (Teuchos::Copy,
A));
73 UU = Teuchos::rcp(
new Teuchos::SerialDenseMatrix<ordinal_type, value_type> (Teuchos::Copy,Result));
74 RR = Teuchos::rcp(
new Teuchos::SerialDenseMatrix<ordinal_type, value_type> (Teuchos::Copy,Input));
77 Teuchos::SerialDenseSolver<ordinal_type, value_type> solver;
79 solver.setVectors(UU, RR);
81 if (solver.shouldEquilibrate()) {
82 solver.factorWithEquilibration(
true);
83 solver.equilibrateMatrix();
87 for (ordinal_type i=0; i<
A.numRows(); i++)
88 Result(i,0)=(*UU)(i,0);
94 const Teuchos::SerialDenseMatrix<ordinal_type,value_type> &
A;
InversePreconditioner(const Teuchos::SerialDenseMatrix< ordinal_type, double > &A_)
Constructor.
const Teuchos::SerialDenseMatrix< ordinal_type, value_type > & A
virtual ordinal_type ApplyInverse(const Teuchos::SerialDenseMatrix< ordinal_type, value_type > &Input, Teuchos::SerialDenseMatrix< ordinal_type, value_type > &Result, ordinal_type m) const
virtual ~InversePreconditioner()
Destructor.
Top-level namespace for Stokhos classes and functions.