本文整理汇总了C++中ParameterList::getEntryPtr方法的典型用法代码示例。如果您正苦于以下问题:C++ ParameterList::getEntryPtr方法的具体用法?C++ ParameterList::getEntryPtr怎么用?C++ ParameterList::getEntryPtr使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ParameterList
的用法示例。
在下文中一共展示了ParameterList::getEntryPtr方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: validateParameters
void ParameterList::validateParameters(
ParameterList const& validParamList,
int const depth,
EValidateUsed const validateUsed,
EValidateDefaults const validateDefaults
) const
{
typedef std::deque<ListPlusValidList> sublist_list_t;
#ifdef TEUCHOS_PARAMETER_LIST_SHOW_TRACE
RCP<FancyOStream> out = VerboseObjectBase::getDefaultOStream();
OSTab tab(out);
*out << "\n*** Entering ParameterList::validateParameters(...) for "
"this->name()=\""<<this->name()<<"\"...\n";
#endif
//
// First loop through and validate the parameters at this level.
//
// Here we generate a list of sublists that we will search next
//
sublist_list_t sublist_list;
ConstIterator itr;
for (itr = this->begin(); itr != this->end(); ++itr) {
const std::string &entryName = this->name(itr);
const ParameterEntry &theEntry = this->entry(itr);
#ifdef TEUCHOS_PARAMETER_LIST_SHOW_TRACE
OSTab tab(out);
*out << "\nentryName=\""<<entryName<<"\"\n";
#endif
if(
( theEntry.isUsed() && validateUsed!=VALIDATE_USED_ENABLED )
||
( theEntry.isDefault() && validateDefaults!=VALIDATE_DEFAULTS_ENABLED )
)
{
continue;
}
const ParameterEntry *validEntry = validParamList.getEntryPtr(entryName);
TEUCHOS_TEST_FOR_EXCEPTION_PURE_MSG(
!validEntry, Exceptions::InvalidParameterName
,"Error, the parameter {name=\""<<entryName<<"\","
"type=\""<<theEntry.getAny(false).typeName()<<"\""
",value=\""<<filterValueToString(theEntry)<<"\"}"
"\nin the parameter (sub)list \""<<this->name()<<"\""
"\nwas not found in the list of valid parameters!"
"\n\nThe valid parameters and types are:\n"
<<validParamList.currentParametersString()
);
RCP<const ParameterEntryValidator> validator;
if (nonnull(validator=validEntry->validator())) {
validator->validate(theEntry, entryName, this->name());
}
else {
const bool validType =
( validEntry!=NULL
? theEntry.getAny(false).type() == validEntry->getAny(false).type()
: false
);
TEUCHOS_TEST_FOR_EXCEPTION_PURE_MSG(
!validType, Exceptions::InvalidParameterType
,"Error, the parameter {name=\""<<entryName<<"\","
"type=\""<<theEntry.getAny(false).typeName()<<"\""
",value=\""<<filterValueToString(theEntry)<<"\"}"
"\nin the parameter (sub)list \""<<this->name()<<"\""
"\nexists in the list of valid parameters but has the wrong type."
"\n\nThe correct type is \""
<< validEntry->getAny(false).typeName() << "\"."
);
}
if( theEntry.isList() && depth > 0 ) {
sublist_list.push_back(
ListPlusValidList(
&getValue<ParameterList>(theEntry),&getValue<ParameterList>(*validEntry)
)
);
}
}
//
// Now loop through the sublists and validate their parameters
//
for(
sublist_list_t::const_iterator sl_itr = sublist_list.begin();
sl_itr != sublist_list.end();
++sl_itr
)
{
if (!sl_itr->validList->disableRecursiveValidation_) {
sl_itr->list->validateParameters(
*sl_itr->validList
,depth-1
,validateUsed
,validateDefaults
);
}
}
#ifdef TEUCHOS_PARAMETER_LIST_SHOW_TRACE
*out << "\n*** Existing ParameterList::validateParameters(...) for "
"this->name()=\""<<this->name()<<"\"...\n";
#endif
}
示例2: validateParametersAndSetDefaults
void ParameterList::validateParametersAndSetDefaults(
ParameterList const& validParamList,
int const depth
)
{
typedef std::deque<ListPlusValidList> sublist_list_t;
#ifdef TEUCHOS_PARAMETER_LIST_SHOW_TRACE
RCP<FancyOStream> out = VerboseObjectBase::getDefaultOStream();
OSTab tab(out);
*out << "\n*** Entering ParameterList::validateParametersAndSetDefaults(...) "
"for this->name()=\""<<this->name()<<"\"...\n";
#endif
//
// A) loop through and validate the parameters at this level.
//
// Here we generate a list of sublists that we will search next
//
sublist_list_t sublist_list;
{
Iterator itr;
for (itr = this->nonconstBegin(); itr != this->nonconstEnd(); ++itr) {
const std::string &entryName = this->name(itr);
ParameterEntry &theEntry = this->nonconstEntry(itr);
#ifdef TEUCHOS_PARAMETER_LIST_SHOW_TRACE
OSTab tab(out);
*out << "\nentryName=\""<<entryName<<"\"\n";
#endif
const ParameterEntry *validEntry = validParamList.getEntryPtr(entryName);
TEUCHOS_TEST_FOR_EXCEPTION_PURE_MSG(
!validEntry, Exceptions::InvalidParameterName
,"Error, the parameter {name=\""<<entryName<<"\","
"type=\""<<theEntry.getAny(false).typeName()<<"\""
",value=\""<<filterValueToString(theEntry)<<"\"}"
"\nin the parameter (sub)list \""<<this->name()<<"\""
"\nwas not found in the list of valid parameters!"
"\n\nThe valid parameters and types are:\n"
<<validParamList.currentParametersString()
);
RCP<const ParameterEntryValidator> validator;
if (nonnull(validator=validEntry->validator())) {
validator->validateAndModify(entryName, this->name(), &theEntry);
theEntry.setValidator(validator);
}
else {
const bool validType =
( validEntry!=NULL
? theEntry.getAny(false).type() == validEntry->getAny(false).type()
: false
);
TEUCHOS_TEST_FOR_EXCEPTION_PURE_MSG(
!validType, Exceptions::InvalidParameterType
,"Error, the parameter {name=\""<<entryName<<"\","
"type=\""<<theEntry.getAny(false).typeName()<<"\""
",value=\""<<filterValueToString(theEntry)<<"\"}"
"\nin the parameter (sub)list \""<<this->name()<<"\""
"\nexists in the list of valid parameters but has the wrong type."
"\n\nThe correct type is \""
<< validEntry->getAny(false).typeName() << "\"."
);
// Note: If there is no validator for this item, then we can not
// validate the value of the parameter, only its type!
}
if( theEntry.isList() && depth > 0 ) {
sublist_list.push_back(
ListPlusValidList(
&getValue<ParameterList>(theEntry),
&getValue<ParameterList>(*validEntry)
)
);
}
}
}
//
// B) Loop through the valid parameters at this level that are not set in
// *this, and set their defaults.
//
{
ConstIterator itr;
for (itr = validParamList.begin(); itr != validParamList.end(); ++itr) {
const std::string &validEntryName = validParamList.name(itr);
const ParameterEntry &validEntry = validParamList.entry(itr);
const ParameterEntry *theEntry = this->getEntryPtr(validEntryName);
if (!theEntry) {
// This entry does not exist, so add it. Here we will only set the
// value of the entry and its validator and and leave off the
// documentation. The reason that the validator is set is so that it
// can be used to extract and validate entries in the transformed list
// *this without having to refer back to the valid parameter list.
ParameterEntry newEntry;
newEntry.setAnyValue(
validEntry.getAny(),
true // isDefault
);
newEntry.setValidator(validEntry.validator());
this->setEntry(validEntryName,newEntry);
}
}
}
//
// C) Loop through the sublists and validate their parameters and set their
//.........这里部分代码省略.........
示例3: main
//.........这里部分代码省略.........
MPI_Finalize() ;
#endif
return -1;
}
// Set verbosity level
int verbosity = Anasazi::Errors + Anasazi::Warnings;
if (verbose) {
verbosity += Anasazi::FinalSummary + Anasazi::TimingDetails;
}
if (debug) {
verbosity += Anasazi::Debug;
}
// Eigensolver parameters
int maxIters = 450;
MagnitudeType tol = 1.0e-6;
//
// Create parameter list to pass into the solver manager
ParameterList MyPL;
MyPL.set( "Verbosity", verbosity );
MyPL.set( "Which", which );
MyPL.set( "Block Size", blockSize );
MyPL.set( "Maximum Iterations", maxIters );
MyPL.set( "Convergence Tolerance", tol );
MyPL.set( "Skinny Solver", skinny);
//
// Create the solver manager
Anasazi::RTRSolMgr<ScalarType,MV,OP> MySolverMan(problem, MyPL);
//
// Check that the parameters were all consumed
if (MyPL.getEntryPtr("Verbosity")->isUsed() == false ||
MyPL.getEntryPtr("Which")->isUsed() == false ||
MyPL.getEntryPtr("Block Size")->isUsed() == false ||
MyPL.getEntryPtr("Maximum Iterations")->isUsed() == false ||
MyPL.getEntryPtr("Convergence Tolerance")->isUsed() == false ||
MyPL.getEntryPtr("Skinny Solver")->isUsed() == false) {
if (verbose && MyPID==0) {
cout << "Failure! Unused parameters: " << endl;
MyPL.unused(cout);
}
}
// Solve the problem to the specified tolerances or length
Anasazi::ReturnType returnCode = MySolverMan.solve();
if (returnCode != Anasazi::Converged) {
testFailed = true;
}
// Get the eigenvalues and eigenvectors from the eigenproblem
Anasazi::Eigensolution<ScalarType,MV> sol = problem->getSolution();
std::vector<Anasazi::Value<ScalarType> > evals = sol.Evals;
RCP<MV> evecs = sol.Evecs;
int numev = sol.numVecs;
if (numev > 0) {
std::ostringstream os;
os.setf(std::ios::scientific, std::ios::floatfield);
os.precision(6);
// Compute the direct residual
std::vector<ScalarType> normV( numev );
示例4: main
//.........这里部分代码省略.........
if (shortrun) {
maxRestarts = 25;
numBlocks = 5;
}
else {
maxRestarts = 50;
numBlocks = 10;
}
int stepSize = numBlocks*maxRestarts;
MagnitudeType tol = tolCG * 10.0;
// Create a sort manager to pass into the block Krylov-Schur solver manager
// --> Make sure the reference-counted pointer is of type Anasazi::SortManager<>
// --> The block Krylov-Schur solver manager uses Anasazi::BasicSort<> by default,
// so you can also pass in the parameter "Which", instead of a sort manager.
RCP<Anasazi::SortManager<MagnitudeType> > MySort =
rcp( new Anasazi::BasicSort<MagnitudeType>( which ) );
//
// Create parameter list to pass into the solver manager
ParameterList MyPL;
MyPL.set( "Verbosity", verbosity );
MyPL.set( "Sort Manager", MySort );
//MyPL.set( "Which", which );
MyPL.set( "Block Size", blockSize );
MyPL.set( "Num Blocks", numBlocks );
MyPL.set( "Maximum Restarts", maxRestarts );
MyPL.set( "Step Size", stepSize );
MyPL.set( "Convergence Tolerance", tol );
MyPL.set( "In Situ Restarting", insitu );
//
// Create the solver manager
Anasazi::BlockKrylovSchurSolMgr<ScalarType,MV,OP> MySolverMgr(problem, MyPL);
//
// Check that the parameters were all consumed
if (MyPL.getEntryPtr("Verbosity")->isUsed() == false ||
MyPL.getEntryPtr("Block Size")->isUsed() == false ||
MyPL.getEntryPtr("Num Blocks")->isUsed() == false ||
MyPL.getEntryPtr("Maximum Restarts")->isUsed() == false ||
MyPL.getEntryPtr("Step Size")->isUsed() == false ||
MyPL.getEntryPtr("In Situ Restarting")->isUsed() == false ||
MyPL.getEntryPtr("Convergence Tolerance")->isUsed() == false) {
if (verbose && MyPID==0) {
cout << "Failure! Unused parameters: " << endl;
MyPL.unused(cout);
}
}
// Solve the problem to the specified tolerances or length
Anasazi::ReturnType returnCode = MySolverMgr.solve();
testFailed = false;
if (returnCode != Anasazi::Converged && shortrun==false) {
testFailed = true;
}
// Get the eigenvalues and eigenvectors from the eigenproblem
Anasazi::Eigensolution<ScalarType,MV> sol = problem->getSolution();
std::vector<Anasazi::Value<ScalarType> > evals = sol.Evals;
RCP<MV> evecs = sol.Evecs;
int numev = sol.numVecs;
if (numev > 0) {
std::ostringstream os;
os.setf(std::ios::scientific, std::ios::floatfield);
os.precision(6);
示例5: main
//.........这里部分代码省略.........
#endif
return -1;
}
// Set verbosity level
int verbosity = Anasazi::Errors + Anasazi::Warnings;
if (verbose) {
verbosity += Anasazi::FinalSummary + Anasazi::TimingDetails;
}
if (debug) {
verbosity += Anasazi::Debug;
}
// Eigensolver parameters
int maxRestarts = 25;
int maxDim = 50;
MagnitudeType tol = 1e-6;
//
// Create parameter list to pass into the solver manager
ParameterList MyPL;
MyPL.set( "Verbosity", verbosity );
MyPL.set( "Which", which );
MyPL.set( "Maximum Subspace Dimension", maxDim );
MyPL.set( "Block Size", blockSize );
MyPL.set( "Maximum Restarts", maxRestarts );
MyPL.set( "Convergence Tolerance", tol );
//
// Create the solver manager
Anasazi::GeneralizedDavidsonSolMgr<ScalarType,MV,OP> MySolverMgr(problem, MyPL);
//
// Check that the parameters were all consumed
if (MyPL.getEntryPtr("Verbosity")->isUsed() == false ||
MyPL.getEntryPtr("Which")->isUsed() == false ||
MyPL.getEntryPtr("Maximum Subspace Dimension")->isUsed() == false ||
MyPL.getEntryPtr("Block Size")->isUsed() == false ||
MyPL.getEntryPtr("Maximum Restarts")->isUsed() == false ||
MyPL.getEntryPtr("Convergence Tolerance")->isUsed() == false) {
if (verbose && MyPID==0) {
std::cout << "Failure! Unused parameters: " << std::endl;
MyPL.unused(std::cout);
}
}
// Solve the problem to the specified tolerances or length
Anasazi::ReturnType returnCode = MySolverMgr.solve();
testFailed = false;
if (returnCode != Anasazi::Converged) {
testFailed = true;
}
// Get the eigenvalues and eigenvectors from the eigenproblem
Anasazi::Eigensolution<ScalarType,MV> sol = problem->getSolution();
std::vector<Anasazi::Value<ScalarType> > evals = sol.Evals;
RCP<MV> evecs = sol.Evecs;
int numev = sol.numVecs;
if (numev > 0) {
std::ostringstream os;
os.setf(std::ios::scientific, std::ios::floatfield);
os.precision(6);
// Compute the direct residual
示例6: main
//.........这里部分代码省略.........
}
if (debug) {
verbosity += Anasazi::Debug;
}
// Eigensolver parameters
int numBlocks = 8;
int maxRestarts;
if (shortrun) {
maxRestarts = 10;
}
else {
maxRestarts = 100;
}
MagnitudeType tol = 1.0e-6;
//
// Create parameter list to pass into the solver manager
ParameterList MyPL;
MyPL.set( "Verbosity", verbosity );
MyPL.set( "Which", which );
MyPL.set( "Block Size", blockSize );
MyPL.set( "Num Blocks", numBlocks );
MyPL.set( "Maximum Restarts", maxRestarts );
MyPL.set( "Convergence Tolerance", tol );
MyPL.set( "Use Locking", locking );
MyPL.set( "Locking Tolerance", tol/10 );
MyPL.set( "In Situ Restarting", insitu );
//
// Create the solver manager
Anasazi::BlockDavidsonSolMgr<ScalarType,MV,OP> MySolverMan(problem, MyPL);
//
// Check that the parameters were all consumed
if (MyPL.getEntryPtr("Verbosity")->isUsed() == false ||
MyPL.getEntryPtr("Which")->isUsed() == false ||
MyPL.getEntryPtr("Block Size")->isUsed() == false ||
MyPL.getEntryPtr("Num Blocks")->isUsed() == false ||
MyPL.getEntryPtr("Maximum Restarts")->isUsed() == false ||
MyPL.getEntryPtr("Convergence Tolerance")->isUsed() == false ||
MyPL.getEntryPtr("Use Locking")->isUsed() == false ||
MyPL.getEntryPtr("In Situ Restarting")->isUsed() == false ||
MyPL.getEntryPtr("Locking Tolerance")->isUsed() == false) {
if (verbose && MyPID==0) {
cout << "Failure! Unused parameters: " << endl;
MyPL.unused(cout);
}
}
// Solve the problem to the specified tolerances or length
Anasazi::ReturnType returnCode = MySolverMan.solve();
testFailed = false;
if (returnCode != Anasazi::Converged && shortrun==false) {
testFailed = true;
}
// Get the eigenvalues and eigenvectors from the eigenproblem
Anasazi::Eigensolution<ScalarType,MV> sol = problem->getSolution();
RCP<MV> evecs = sol.Evecs;
int numev = sol.numVecs;
if (numev > 0) {
std::ostringstream os;
os.setf(std::ios::scientific, std::ios::floatfield);
os.precision(6);
示例7: main
int main(int argc, char *argv[])
{
#ifdef HAVE_MPI
// Initialize MPI
MPI_Init(&argc,&argv);
Epetra_MpiComm Comm(MPI_COMM_WORLD);
#else
Epetra_SerialComm Comm;
#endif
bool testFailed;
bool verbose = false;
CommandLineProcessor cmdp(false,true);
cmdp.setOption("verbose","quiet",&verbose,"Print messages and results.");
cmdp.setOption("debug","quiet",&verbose,"Print messages and results.");
if (cmdp.parse(argc,argv) != CommandLineProcessor::PARSE_SUCCESSFUL) {
#ifdef HAVE_MPI
MPI_Finalize();
#endif
return -1;
}
// create the output manager
RCP< OutputManager<ScalarType> > printer = rcp( new BasicOutputManager<ScalarType>() );
if (verbose) printer->stream(Errors) << Anasazi_Version() << endl << endl;
const int veclength = 99;
// Problem information
int space_dim = 1;
std::vector<double> brick_dim( space_dim );
brick_dim[0] = 1.0;
std::vector<int> elements( space_dim );
elements[0] = veclength+1;
// Create problem
RCP<ModalProblem> testCase = rcp( new ModeLaplace1DQ1(Comm, brick_dim[0], elements[0]) );
//
// Get the stiffness and mass matrices
RCP<const Epetra_CrsMatrix> K = rcp( const_cast<Epetra_CrsMatrix *>(testCase->getStiffness()), false );
RCP<const Epetra_CrsMatrix> M = rcp( const_cast<Epetra_CrsMatrix *>(testCase->getMass()), false );
//
// Create the initial vectors
const int nev = 4;
RCP<Epetra_MultiVector> ivec = rcp( new Epetra_MultiVector(K->OperatorDomainMap(), nev) );
ivec->Random();
//
// Create eigenproblem: one standard and one generalized
RCP<BasicEigenproblem<ScalarType,MV,OP> > probstd = rcp( new BasicEigenproblem<ScalarType, MV, OP>(K, ivec) );
RCP<BasicEigenproblem<ScalarType,MV,OP> > probgen = rcp( new BasicEigenproblem<ScalarType, MV, OP>(K, M, ivec) );
//
// Inform the eigenproblem that the operator A is symmetric
probstd->setHermitian(true);
probgen->setHermitian(true);
//
// Set the number of eigenvalues requested
probstd->setNEV( nev );
probgen->setNEV( nev );
//
// Inform the eigenproblem that you are finishing passing it information
if ( probstd->setProblem() != true || probgen->setProblem() != true ) {
if (verbose) {
printer->stream(Errors) << "Anasazi::BasicEigenproblem::SetProblem() returned with error." << endl
<< "End Result: TEST FAILED" << endl;
}
#ifdef HAVE_MPI
MPI_Finalize() ;
#endif
return -1;
}
// create the orthogonalization managers: one standard and one M-based
RCP< MatOrthoManager<ScalarType,MV,OP> > orthostd = rcp( new SVQBOrthoManager<ScalarType,MV,OP>() );
RCP< MatOrthoManager<ScalarType,MV,OP> > orthogen = rcp( new SVQBOrthoManager<ScalarType,MV,OP>(M) );
// create the sort manager
RCP< SortManager<MagnitudeType> > sorter = rcp( new BasicSort<MagnitudeType>("LM") );
// create the parameter list specifying blocksize > nev and full orthogonalization
ParameterList pls;
// begin testing
testFailed = false;
try
{
if (verbose) printer->stream(Errors) << "Testing solver(default,default) with standard eigenproblem..." << endl;
testsolver(probstd,printer,orthostd,sorter,pls);
if (verbose) printer->stream(Errors) << "Testing solver(default,default) with generalized eigenproblem..." << endl;
testsolver(probgen,printer,orthogen,sorter,pls);
pls.set<int>("Block Size",nev);
pls.set<bool>("Full Ortho",false);
if (verbose) printer->stream(Errors) << "Testing solver(nev,false) with standard eigenproblem..." << endl;
testsolver(probstd,printer,orthostd,sorter,pls);
TEST_FOR_EXCEPTION(pls.getEntryPtr("Block Size")->isUsed() == false, get_out, "Solver did not consume parameter \"Block Size\".");
TEST_FOR_EXCEPTION(pls.getEntryPtr("Full Ortho")->isUsed() == false, get_out, "Solver did not consume parameter \"Full Ortho\".");
pls.set<bool>("Full Ortho",true);
//.........这里部分代码省略.........
示例8: runtime_error
void Problem<Adapter>::setupProblemEnvironment(ParameterList *params)
{
try{
env_ = rcp(new Environment(*params, Teuchos::DefaultComm<int>::getComm()));
}
Z2_FORWARD_EXCEPTIONS
envConst_ = rcp_const_cast<const Environment>(env_);
ParameterList &processedParameters = env_->getParametersNonConst();
params_ = rcp<ParameterList>(&processedParameters, false);
#ifndef Z2_OMIT_ALL_PROFILING
ParameterList pl = *params_;
// Give a timer to the Environment if requested.
bool haveType=false, haveStream=false, haveFile=false;
int choice = MACRO_TIMERS; // default timer type
const Teuchos::ParameterEntry *pe = pl.getEntryPtr("timer_type");
if (pe){
choice = pe->getValue<int>(&choice);
haveType = true;
}
TimerType tt = static_cast<TimerType>(choice);
std::string fname;
pe = pl.getEntryPtr("timer_output_file");
if (pe){
haveFile = true;
fname = pe->getValue<std::string>(&fname);
std::ofstream *dbgFile = new std::ofstream;
if (comm_->getRank()==0){
// Using Teuchos::TimeMonitor, node 0 prints global timing info.
try{
dbgFile->open(fname.c_str(), std::ios::out|std::ios::trunc);
}
catch(std::exception &e){
throw std::runtime_error(e.what());
}
}
timer_ = rcp(new TimerManager(comm_, dbgFile, tt));
}
else{
choice = COUT_STREAM; // default output stream
pe = pl.getEntryPtr("timer_output_stream");
if (pe){
choice = pe->getValue<int>(&choice);
haveStream = true;
}
OSType outputStream = static_cast<OSType>(choice);
if (haveStream || haveType){
if (outputStream == COUT_STREAM)
timer_ = rcp(new TimerManager(comm_, &std::cout, tt));
else if (outputStream == CERR_STREAM)
timer_ = rcp(new TimerManager(comm_, &std::cerr, tt));
else if (outputStream == NULL_STREAM){
std::ofstream *of = NULL;
timer_ = rcp(new TimerManager(comm_, of, tt));
}
}
}
if (haveType || haveStream || haveFile)
env_->setTimer(timer_);
#endif
}
示例9: main
//.........这里部分代码省略.........
if (debug) {
verbosity += Anasazi::Debug;
}
// Eigensolver parameters
int numBlocks = 8;
int maxRestarts;
if (shortrun) {
maxRestarts = 10;
}
else {
maxRestarts = 100;
}
MagnitudeType tol = 1.0e-6;
//
// Create parameter list to pass into the solver manager
ParameterList MyPL;
MyPL.set( "Verbosity", verbosity );
MyPL.set( "Which", which );
MyPL.set( "Block Size", blockSize );
MyPL.set( "Num Blocks", numBlocks );
MyPL.set( "Maximum Restarts", maxRestarts );
MyPL.set( "Convergence Tolerance", tol );
MyPL.set( "Use Locking", locking );
MyPL.set( "Locking Tolerance", tol/10 );
MyPL.set( "In Situ Restarting", insitu );
MyPL.set( "Num Restart Blocks", rblocks );
//
// Create the solver manager
Anasazi::BlockDavidsonSolMgr<ScalarType,MV,OP> MySolverMan(problem, MyPL);
//
// Check that the parameters were all consumed
if (MyPL.getEntryPtr("Verbosity")->isUsed() == false ||
MyPL.getEntryPtr("Which")->isUsed() == false ||
MyPL.getEntryPtr("Block Size")->isUsed() == false ||
MyPL.getEntryPtr("Num Blocks")->isUsed() == false ||
MyPL.getEntryPtr("Maximum Restarts")->isUsed() == false ||
MyPL.getEntryPtr("Convergence Tolerance")->isUsed() == false ||
MyPL.getEntryPtr("Use Locking")->isUsed() == false ||
MyPL.getEntryPtr("In Situ Restarting")->isUsed() == false ||
MyPL.getEntryPtr("Num Restart Blocks")->isUsed() == false ||
MyPL.getEntryPtr("Locking Tolerance")->isUsed() == false) {
if (verbose && MyPID==0) {
cout << "Failure! Unused parameters: " << endl;
MyPL.unused(cout);
}
}
// Solve the problem to the specified tolerances or length
Anasazi::ReturnType returnCode = MySolverMan.solve();
testFailed = false;
if (returnCode != Anasazi::Converged && shortrun==false) {
testFailed = true;
}
// Get the eigenvalues and eigenvectors from the eigenproblem
Anasazi::Eigensolution<ScalarType,MV> sol = problem->getSolution();
RCP<MV> evecs = sol.Evecs;
int numev = sol.numVecs;
if (numev > 0) {
std::ostringstream os;
os.setf(std::ios::scientific, std::ios::floatfield);
os.precision(6);