|
Anasazi
Version of the Day
|
Go to the documentation of this file.
43 #ifndef ANASAZI_STATUS_TEST_RESNORM_HPP
44 #define ANASAZI_STATUS_TEST_RESNORM_HPP
53 #include "Teuchos_ScalarTraits.hpp"
54 #include "Teuchos_LAPACK.hpp"
91 template <
class ScalarType,
class MV,
class OP>
94 typedef typename Teuchos::ScalarTraits<ScalarType>::magnitudeType MagnitudeType;
102 StatusTestResNorm(
typename Teuchos::ScalarTraits<ScalarType>::magnitudeType tol,
int quorum = -1,
ResType whichNorm = RES_ORTH,
bool scaled =
true,
bool throwExceptionOnNaN =
true);
153 void setTolerance(
typename Teuchos::ScalarTraits<ScalarType>::magnitudeType tol) {
159 typename Teuchos::ScalarTraits<ScalarType>::magnitudeType
getTolerance() {
return tol_;}
167 whichNorm_ = whichNorm;
215 std::ostream&
print(std::ostream& os,
int indent = 0)
const;
221 std::vector<int> ind_;
225 bool throwExceptionOnNaN_;
229 template <
class ScalarType,
class MV,
class OP>
231 : state_(
Undefined), tol_(tol), quorum_(quorum), scaled_(scaled), whichNorm_(whichNorm), throwExceptionOnNaN_(throwExceptionOnNaN)
234 template <
class ScalarType,
class MV,
class OP>
237 typedef Teuchos::ScalarTraits<MagnitudeType> MT;
239 std::vector<MagnitudeType> res;
243 std::vector<Value<ScalarType> > vals = solver->
getRitzValues();
244 switch (whichNorm_) {
248 vals.resize(res.size());
253 vals.resize(res.size());
262 Teuchos::LAPACK<int,MagnitudeType> lapack;
264 for (
unsigned int i=0; i<res.size(); i++) {
265 MagnitudeType tmp = lapack.LAPY2(vals[i].realpart,vals[i].imagpart);
267 if ( tmp != MT::zero() ) {
275 ind_.resize(res.size());
276 for (
unsigned int i=0; i<res.size(); i++) {
278 "StatusTestResNorm::checkStatus(): residual norm is nan or inf" );
285 int need = (quorum_ == -1) ? res.size() : quorum_;
291 template <
class ScalarType,
class MV,
class OP>
294 std::string ind(indent,
' ');
295 os << ind <<
"- StatusTestResNorm: ";
298 os <<
"Passed" << std::endl;
301 os <<
"Failed" << std::endl;
304 os <<
"Undefined" << std::endl;
307 os << ind <<
" (Tolerance,WhichNorm,Scaled,Quorum): "
309 switch (whichNorm_) {
317 os <<
",RITZRES_2NORM";
320 os <<
"," << (scaled_ ?
"true" :
"false")
325 os << ind <<
" Which vectors: ";
326 if (ind_.size() > 0) {
327 for (
unsigned int i=0; i<ind_.size(); i++) os << ind_[i] <<
" ";
331 os <<
"[empty]" << std::endl;
int getQuorum() const
Get quorum.
TestStatus getStatus() const
Return the result of the most recent checkStatus call, or undefined if it has not been run.
Types and exceptions used within Anasazi solvers and interfaces.
ResType
Enumerated type used to specify which residual norm used by residual norm status tests.
Teuchos::ScalarTraits< ScalarType >::magnitudeType getTolerance()
Get tolerance.
A status test for testing the norm of the eigenvectors residuals.
TestStatus checkStatus(Eigensolver< ScalarType, MV, OP > *solver)
int howMany() const
Get the number of vectors that passed the test.
StatusTestResNorm(typename Teuchos::ScalarTraits< ScalarType >::magnitudeType tol, int quorum=-1, ResType whichNorm=RES_ORTH, bool scaled=true, bool throwExceptionOnNaN=true)
Constructor.
virtual std::vector< Value< ScalarType > > getRitzValues()=0
Get the Ritz values from the previous iteration.
TestStatus
Enumerated type used to pass back information from a StatusTest.
void setWhichNorm(ResType whichNorm)
Set the residual norm to be used by the status test.
void setQuorum(int quorum)
Set quorum.
void clearStatus()
Clears the results of the last status test.
std::vector< int > whichVecs() const
Get the indices for the vectors that passed the test.
void setScale(bool relscale)
Instruct test to scale norms by eigenvalue estimates (relative scale). This also resets the test stat...
The Eigensolver is a templated virtual base class that defines the basic interface that any eigensolv...
virtual std::vector< typename Teuchos::ScalarTraits< ScalarType >::magnitudeType > getRes2Norms()=0
bool getScale()
Returns true if the test scales the norms by the eigenvalue estimates (relative scale).
ResNormNaNError is thrown from StatusTestResNorm::checkStatus() when a NaN ("not a number") is detect...
virtual std::vector< typename Teuchos::ScalarTraits< ScalarType >::magnitudeType > getRitzRes2Norms()=0
Declaration and definition of Anasazi::StatusTest.
Namespace Anasazi contains the classes, structs, enums and utilities used by the Anasazi package.
Common interface of stopping criteria for Anasazi's solvers.
std::ostream & print(std::ostream &os, int indent=0) const
Output formatted description of stopping test to output stream.
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.
virtual std::vector< typename Teuchos::ScalarTraits< ScalarType >::magnitudeType > getResNorms()=0
Get the current residual norms.
void reset()
Informs the status test that it should reset its internal configuration to the uninitialized state.
ResType getWhichNorm()
Return the residual norm used by the status test.
virtual ~StatusTestResNorm()
Destructor.