50#ifndef BELOS_PSEUDO_BLOCK_TFQMR_ITER_HPP
51#define BELOS_PSEUDO_BLOCK_TFQMR_ITER_HPP
70#include "Teuchos_ScalarTraits.hpp"
71#include "Teuchos_ParameterList.hpp"
72#include "Teuchos_TimeMonitor.hpp"
91 template <
class ScalarType,
class MV>
94 typedef Teuchos::ScalarTraits<ScalarType>
SCT;
98 Teuchos::RCP<const MV>
W;
99 Teuchos::RCP<const MV>
U;
100 Teuchos::RCP<const MV>
AU;
102 Teuchos::RCP<const MV>
D;
103 Teuchos::RCP<const MV>
V;
109 Rtilde(Teuchos::null),
D(Teuchos::null),
V(Teuchos::null)
113 template <
class ScalarType,
class MV,
class OP>
121 typedef Teuchos::ScalarTraits<ScalarType>
SCT;
131 Teuchos::ParameterList ¶ms );
249 TEUCHOS_TEST_FOR_EXCEPTION(blockSize!=1,std::invalid_argument,
250 "Belos::PseudoBlockTFQMRIter::setBlockSize(): Cannot use a block size that is not one.");
264 const Teuchos::RCP<LinearProblem<ScalarType,MV,OP> >
lp_;
265 const Teuchos::RCP<OutputManager<ScalarType> >
om_;
266 const Teuchos::RCP<StatusTest<ScalarType,MV,OP> >
stest_;
309 template <
class ScalarType,
class MV,
class OP>
313 Teuchos::ParameterList &
326 template <
class ScalarType,
class MV,
class OP>
327 Teuchos::RCP<const MV>
330 MagnitudeType one = Teuchos::ScalarTraits<MagnitudeType>::one();
333 if ((
int) normvec->size() <
numRHS_)
337 for (
int i=0; i<
numRHS_; i++) {
338 (*normvec)[i] = Teuchos::ScalarTraits<MagnitudeType>::squareroot( 2*
iter_ + one )*
tau_[i];
342 return Teuchos::null;
347 template <
class ScalarType,
class MV,
class OP>
351 const ScalarType STone = Teuchos::ScalarTraits<ScalarType>::one();
352 const ScalarType STzero = Teuchos::ScalarTraits<ScalarType>::zero();
353 const MagnitudeType MTzero = Teuchos::ScalarTraits<MagnitudeType>::zero();
356 TEUCHOS_TEST_FOR_EXCEPTION(newstate.
Rtilde == Teuchos::null,std::invalid_argument,
357 "Belos::PseudoBlockTFQMRIter::initialize(): PseudoBlockTFQMRIterState does not have initial residual.");
368 if ( Teuchos::is_null(
D_) )
430 template <
class ScalarType,
class MV,
class OP>
441 const ScalarType STone = Teuchos::ScalarTraits<ScalarType>::one();
442 const ScalarType STzero = Teuchos::ScalarTraits<ScalarType>::zero();
443 const MagnitudeType MTone = Teuchos::ScalarTraits<MagnitudeType>::one();
444 const MagnitudeType MTzero = Teuchos::ScalarTraits<MagnitudeType>::zero();
445 std::vector< ScalarType > beta(
numRHS_,STzero);
446 std::vector<int> index(1);
456 for (
int iIter=0; iIter<2; iIter++)
465 for (
int i=0; i<
numRHS_; i++) {
475 for (
int i=0; i<
numRHS_; ++i) {
526 bool breakdown=
false;
527 for (
int i=0; i<
numRHS_; ++i) {
532 if (
tau_[i] == MTzero ) {
542 for (
int i=0; i<
numRHS_; ++i) {
565 for (
int i=0; i<
numRHS_; ++i) {
589 for (
int i=0; i<
numRHS_; ++i) {
Belos header file which uses auto-configuration information to include necessary C++ headers.
Pure virtual base class which describes the basic interface to the linear solver iteration.
Class which describes the linear problem to be solved by the iterative solver.
Declaration of basic traits for the multivector type.
Class which defines basic traits for the operator type.
Class which manages the output and verbosity of the Belos solvers.
Pure virtual base class for defining the status testing capabilities of Belos.
Collection of types and exceptions used within the Belos solvers.
Iteration()
Default Constructor.
Traits class which defines basic operations on multivectors.
static Teuchos::RCP< MV > CloneCopy(const MV &mv)
Creates a new MV and copies contents of mv into the new vector (deep copy).
static void MvNorm(const MV &mv, std::vector< typename Teuchos::ScalarTraits< ScalarType >::magnitudeType > &normvec, NormType type=TwoNorm)
Compute the norm of each individual vector of mv. Upon return, normvec[i] holds the value of ,...
static void MvDot(const MV &mv, const MV &A, std::vector< ScalarType > &b)
Compute a vector b where the components are the individual dot-products of the i-th columns of A and ...
static Teuchos::RCP< MV > Clone(const MV &mv, const int numvecs)
Creates a new empty MV containing numvecs columns.
static Teuchos::RCP< const MV > CloneView(const MV &mv, const std::vector< int > &index)
Creates a new const MV that shares the selected contents of mv (shallow copy).
static Teuchos::RCP< MV > CloneViewNonConst(MV &mv, const std::vector< int > &index)
Creates a new MV that shares the selected contents of mv (shallow copy).
static void MvAddMv(const ScalarType alpha, const MV &A, const ScalarType beta, const MV &B, MV &mv)
Replace mv with .
static void MvInit(MV &mv, const ScalarType alpha=Teuchos::ScalarTraits< ScalarType >::zero())
Replace each element of the vectors in mv with alpha.
static int GetNumberVecs(const MV &mv)
Obtain the number of vectors in mv.
Class which defines basic traits for the operator type.
Belos's basic output manager for sending information of select verbosity levels to the appropriate ou...
std::vector< ScalarType > rho_
int getNumIters() const
Get the current iteration count.
void iterate()
This method performs pseudo-block TFQMR iterations until the status test indicates the need to stop o...
void resetNumIters(int iter=0)
Reset the iteration count.
const Teuchos::RCP< LinearProblem< ScalarType, MV, OP > > lp_
std::vector< ScalarType > rho_old_
int getBlockSize() const
Get the blocksize to be used by the iterative solver in solving this linear problem.
bool isInitialized()
States whether the solver has been initialized or not.
const Teuchos::RCP< StatusTest< ScalarType, MV, OP > > stest_
virtual ~PseudoBlockTFQMRIter()
Belos::PseudoBlockTFQMRIter destructor.
std::vector< MagnitudeType > theta_
PseudoBlockTFQMRIterState< ScalarType, MV > getState() const
Get the current state of the linear solver.
std::vector< MagnitudeType > tau_
const Teuchos::RCP< OutputManager< ScalarType > > om_
MultiVecTraits< ScalarType, MV > MVT
void initialize()
Initialize the solver with the initial vectors from the linear problem or random data.
Teuchos::RCP< const MV > getNativeResiduals(std::vector< MagnitudeType > *norms) const
std::vector< ScalarType > eta_
Teuchos::RCP< MV > getCurrentUpdate() const
Get the current update to the linear system.
PseudoBlockTFQMRIter(const Teuchos::RCP< LinearProblem< ScalarType, MV, OP > > &problem, const Teuchos::RCP< OutputManager< ScalarType > > &printer, const Teuchos::RCP< StatusTest< ScalarType, MV, OP > > &tester, Teuchos::ParameterList ¶ms)
Belos::PseudoBlockTFQMRIter constructor.
Teuchos::RCP< MV > solnUpdate_
Teuchos::ScalarTraits< ScalarType > SCT
void initializeTFQMR(const PseudoBlockTFQMRIterState< ScalarType, MV > &newstate)
Initialize the solver to an iterate, providing a complete state.
Teuchos::RCP< MV > Rtilde_
SCT::magnitudeType MagnitudeType
void setBlockSize(int blockSize)
Set the blocksize.
std::vector< ScalarType > alpha_
const LinearProblem< ScalarType, MV, OP > & getProblem() const
Get a constant reference to the linear problem.
OperatorTraits< ScalarType, MV, OP > OPT
A pure virtual class for defining the status tests for the Belos iterative solvers.
Structure to contain pointers to PseudoBlockTFQMRIter state variables.
std::vector< MagnitudeType > theta
std::vector< MagnitudeType > tau
SCT::magnitudeType MagnitudeType
Teuchos::RCP< const MV > AU
std::vector< ScalarType > rho
Teuchos::RCP< const MV > D
std::vector< ScalarType > alpha
Teuchos::RCP< const MV > Rtilde
Teuchos::RCP< const MV > W
The current residual basis.
Teuchos::RCP< const MV > U
Teuchos::RCP< const MV > V
PseudoBlockTFQMRIterState()
Teuchos::ScalarTraits< ScalarType > SCT
std::vector< ScalarType > eta