11 #ifndef ANASAZI_STATUS_TEST_RESNORM_HPP
12 #define ANASAZI_STATUS_TEST_RESNORM_HPP
59 template <
class ScalarType,
class MV,
class OP>
135 whichNorm_ = whichNorm;
183 std::ostream&
print(std::ostream& os,
int indent = 0)
const;
189 std::vector<int> ind_;
193 bool throwExceptionOnNaN_;
197 template <
class ScalarType,
class MV,
class OP>
199 : state_(
Undefined), tol_(tol), quorum_(quorum), scaled_(scaled), whichNorm_(whichNorm), throwExceptionOnNaN_(throwExceptionOnNaN)
202 template <
class ScalarType,
class MV,
class OP>
207 std::vector<MagnitudeType> res;
211 std::vector<Value<ScalarType> > vals = solver->
getRitzValues();
212 switch (whichNorm_) {
216 vals.resize(res.size());
221 vals.resize(res.size());
232 for (
unsigned int i=0; i<res.size(); i++) {
233 MagnitudeType tmp = lapack.
LAPY2(vals[i].realpart,vals[i].imagpart);
235 if ( tmp != MT::zero() ) {
243 ind_.resize(res.size());
244 for (
unsigned int i=0; i<res.size(); i++) {
246 "StatusTestResNorm::checkStatus(): residual norm is nan or inf" );
253 int need = (quorum_ == -1) ? res.size() : quorum_;
259 template <
class ScalarType,
class MV,
class OP>
262 std::string ind(indent,
' ');
263 os << ind <<
"- StatusTestResNorm: ";
266 os <<
"Passed" << std::endl;
269 os <<
"Failed" << std::endl;
272 os <<
"Undefined" << std::endl;
275 os << ind <<
" (Tolerance,WhichNorm,Scaled,Quorum): "
277 switch (whichNorm_) {
285 os <<
",RITZRES_2NORM";
288 os <<
"," << (scaled_ ?
"true" :
"false")
293 os << ind <<
" Which vectors: ";
294 if (ind_.size() > 0) {
295 for (
unsigned int i=0; i<ind_.size(); i++) os << ind_[i] <<
" ";
299 os <<
"[empty]" << std::endl;
virtual std::vector< typename Teuchos::ScalarTraits< ScalarType >::magnitudeType > getResNorms()=0
Get the current residual norms.
bool getScale()
Returns true if the test scales the norms by the eigenvalue estimates (relative scale).
ResType
Enumerated type used to specify which residual norm used by residual norm status tests.
virtual std::vector< Value< ScalarType > > getRitzValues()=0
Get the Ritz values from the previous iteration.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
TestStatus getStatus() const
Return the result of the most recent checkStatus call, or undefined if it has not been run...
void setTolerance(typename Teuchos::ScalarTraits< ScalarType >::magnitudeType tol)
Set tolerance. This also resets the test status to Undefined.
An exception class parent to all Anasazi exceptions.
void reset()
Informs the status test that it should reset its internal configuration to the uninitialized state...
TestStatus
Enumerated type used to pass back information from a StatusTest.
std::ostream & print(std::ostream &os, int indent=0) const
Output formatted description of stopping test to output stream.
ResType getWhichNorm()
Return the residual norm used by the status test.
virtual ~StatusTestResNorm()
Destructor.
virtual std::vector< typename Teuchos::ScalarTraits< ScalarType >::magnitudeType > getRitzRes2Norms()=0
ResNormNaNError is thrown from StatusTestResNorm::checkStatus() when a NaN ("not a number") is detect...
Teuchos::ScalarTraits< ScalarType >::magnitudeType getTolerance()
Get tolerance.
ScalarType LAPY2(const ScalarType &x, const ScalarType &y) const
virtual std::vector< typename Teuchos::ScalarTraits< ScalarType >::magnitudeType > getRes2Norms()=0
int howMany() const
Get the number of vectors that passed the test.
Types and exceptions used within Anasazi solvers and interfaces.
TestStatus checkStatus(Eigensolver< ScalarType, MV, OP > *solver)
void setQuorum(int quorum)
Set quorum.
Common interface of stopping criteria for Anasazi's solvers.
A status test for testing the norm of the eigenvectors residuals.
void setScale(bool relscale)
Instruct test to scale norms by eigenvalue estimates (relative scale). This also resets the test stat...
StatusTestResNorm(typename Teuchos::ScalarTraits< ScalarType >::magnitudeType tol, int quorum=-1, ResType whichNorm=RES_ORTH, bool scaled=true, bool throwExceptionOnNaN=true)
Constructor.
std::vector< int > whichVecs() const
Get the indices for the vectors that passed the test.
The Eigensolver is a templated virtual base class that defines the basic interface that any eigensolv...
void setWhichNorm(ResType whichNorm)
Set the residual norm to be used by the status test.
void clearStatus()
Clears the results of the last status test.
Declaration and definition of Anasazi::StatusTest.
int getQuorum() const
Get quorum.