50 #ifndef BELOS_TFQMR_ITER_HPP
51 #define BELOS_TFQMR_ITER_HPP
94 template <
class ScalarType,
class MV>
106 Rtilde(Teuchos::null),
D(Teuchos::null),
V(Teuchos::null)
142 template <
class ScalarType,
class MV,
class OP>
270 "Belos::TFQMRIter::setBlockSize(): Cannot use a block size that is not one.");
338 template <
class ScalarType,
class MV,
class OP>
354 stateStorageInitialized_(false),
361 template <
class ScalarType,
class MV,
class OP>
375 template <
class ScalarType,
class MV,
class OP>
378 if (!stateStorageInitialized_) {
384 stateStorageInitialized_ =
false;
395 "Belos::TFQMRIter::setStateSize(): linear problem does not specify multivectors to clone from.");
396 R_ = MVT::Clone( *tmp, 1 );
397 D_ = MVT::Clone( *tmp, 1 );
398 V_ = MVT::Clone( *tmp, 1 );
399 solnUpdate_ = MVT::Clone( *tmp, 1 );
403 stateStorageInitialized_ =
true;
410 template <
class ScalarType,
class MV,
class OP>
414 if (!stateStorageInitialized_)
418 "Belos::TFQMRIter::initialize(): Cannot initialize state storage!");
422 std::string errstr(
"Belos::TFQMRIter::initialize(): Specified multivectors must have a consistent length and width.");
430 std::invalid_argument, errstr );
432 std::invalid_argument, errstr );
435 if (newstate.
R != R_) {
437 MVT::Assign( *newstate.
R, *R_ );
443 W_ = MVT::CloneCopy( *R_ );
444 U_ = MVT::CloneCopy( *R_ );
445 Rtilde_ = MVT::CloneCopy( *R_ );
447 MVT::MvInit( *solnUpdate_ );
451 lp_->apply( *U_, *V_ );
452 AU_ = MVT::CloneCopy( *V_ );
457 MVT::MvNorm( *R_, tau_ );
458 MVT::MvDot( *R_, *Rtilde_, rho_old_ );
463 "Belos::TFQMRIter::initialize(): TFQMRIterState does not have initial residual.");
473 template <
class ScalarType,
class MV,
class OP>
479 if (initialized_ ==
false) {
488 ScalarType eta = STzero, beta = STzero;
497 "Belos::TFQMRIter::iterate(): current linear system has more than one vector!" );
503 while (stest_->checkStatus(
this) !=
Passed) {
505 for (
int iIter=0; iIter<2; iIter++)
513 MVT::MvDot( *V_, *Rtilde_, alpha_ );
514 alpha_[0] = rho_old_[0]/alpha_[0];
522 MVT::MvAddMv( STone, *W_, -alpha_[0], *AU_, *W_ );
529 MVT::MvAddMv( STone, *U_, (theta_[0]*theta_[0]/alpha_[0])*eta, *D_, *D_ );
540 MVT::MvAddMv( STone, *U_, -alpha_[0], *V_, *U_ );
543 lp_->apply( *U_, *AU_ );
550 MVT::MvNorm( *W_, theta_ );
551 theta_[0] /= tau_[0];
554 tau_[0] *= theta_[0]*cs_[0];
555 eta = cs_[0]*cs_[0]*alpha_[0];
562 MVT::MvAddMv( STone, *solnUpdate_, eta, *D_, *solnUpdate_ );
567 if ( tau_[0] == MTzero ) {
577 MVT::MvDot( *W_, *Rtilde_, rho_ );
578 beta = rho_[0]/rho_old_[0];
579 rho_old_[0] = rho_[0];
586 MVT::MvAddMv( STone, *W_, beta, *U_, *U_ );
589 MVT::MvAddMv( STone, *AU_, beta, *V_, *V_ );
592 lp_->apply( *U_, *AU_ );
595 MVT::MvAddMv( STone, *AU_, beta, *V_, *V_ );
608 #endif // BELOS_TFQMR_ITER_HPP
Teuchos::RCP< const MV > V
Collection of types and exceptions used within the Belos solvers.
This class implements the preconditioned transpose-free QMR algorithm for solving non-Hermitian linea...
Belos's basic output manager for sending information of select verbosity levels to the appropriate ou...
Teuchos::ScalarTraits< ScalarType > SCT
SCT::magnitudeType MagnitudeType
OperatorTraits< ScalarType, MV, OP > OPT
TFQMRIterateFailure(const std::string &what_arg)
void setBlockSize(int blockSize)
Set the blocksize.
Class which manages the output and verbosity of the Belos solvers.
std::vector< ScalarType > alpha_
Teuchos::RCP< MV > Rtilde_
Pure virtual base class for defining the status testing capabilities of Belos.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Declaration of basic traits for the multivector type.
void initialize()
Initialize the solver with the initial vectors from the linear problem or random data.
TFQMRIter(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::TFQMRIter constructor.
virtual ~TFQMRIter()
Belos::TFQMRIter destructor.
Teuchos::RCP< const MV > R
The current residual basis.
Teuchos::RCP< const MV > getNativeResiduals(std::vector< MagnitudeType > *norms) const
Get the norms of the residuals native to the solver.
Teuchos::RCP< const MV > U
void resetNumIters(int iter=0)
Reset the iteration count.
Pure virtual base class which describes the basic interface to the linear solver iteration.
A pure virtual class for defining the status tests for the Belos iterative solvers.
Class which defines basic traits for the operator type.
Traits class which defines basic operations on multivectors.
Teuchos::RCP< MV > getCurrentUpdate() const
Get the current update to the linear system.
void initializeTFQMR(const TFQMRIterState< ScalarType, MV > &newstate)
Initialize the solver to an iterate, providing a complete state.
Teuchos::RCP< const MV > Rtilde
void setStateSize()
Method for initalizing the state storage needed by TFQMR.
void iterate()
This method performs TFQMR iterations until the status test indicates the need to stop or an error oc...
bool isInitialized()
States whether the solver has been initialized or not.
Teuchos::RCP< const MV > W
A linear system to solve, and its associated information.
Structure to contain pointers to TFQMRIter state variables.
Class which describes the linear problem to be solved by the iterative solver.
std::vector< MagnitudeType > cs_
bool stateStorageInitialized_
TFQMRIterInitFailure(const std::string &what_arg)
const Teuchos::RCP< StatusTest< ScalarType, MV, OP > > stest_
std::vector< MagnitudeType > tau_
int getNumIters() const
Get the current iteration count.
TFQMRIterInitFailure is thrown when the TFQMRIter object is unable to generate an initial iterate in ...
MultiVecTraits< ScalarType, MV > MVT
Teuchos::RCP< MV > solnUpdate_
std::vector< ScalarType > rho_old_
TFQMRIterateFailure is thrown when the TFQMRIter object is unable to compute the next iterate in the ...
int getBlockSize() const
Get the blocksize to be used by the iterative solver in solving this linear problem.
Class which defines basic traits for the operator type.
Parent class to all Belos exceptions.
const Teuchos::RCP< LinearProblem< ScalarType, MV, OP > > lp_
Teuchos::RCP< const MV > D
Belos header file which uses auto-configuration information to include necessary C++ headers...
std::vector< MagnitudeType > theta_
const LinearProblem< ScalarType, MV, OP > & getProblem() const
Get a constant reference to the linear problem.
std::vector< ScalarType > rho_
const Teuchos::RCP< OutputManager< ScalarType > > om_
TFQMRIterState< ScalarType, MV > getState() const
Get the current state of the linear solver.