本文整理汇总了C++中stratimikos::DefaultLinearSolverBuilder::getValidParameters方法的典型用法代码示例。如果您正苦于以下问题:C++ DefaultLinearSolverBuilder::getValidParameters方法的具体用法?C++ DefaultLinearSolverBuilder::getValidParameters怎么用?C++ DefaultLinearSolverBuilder::getValidParameters使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类stratimikos::DefaultLinearSolverBuilder
的用法示例。
在下文中一共展示了DefaultLinearSolverBuilder::getValidParameters方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: comm
TEUCHOS_UNIT_TEST(tStratimikosFactory, test_RelatedFunctions)
{
using Teuchos::RCP;
using Teuchos::ParameterList;
// build global (or serial communicator)
#ifdef HAVE_MPI
Epetra_MpiComm comm(MPI_COMM_WORLD);
#else
Epetra_SerialComm comm;
#endif
// build epetra operator
RCP<Epetra_Operator> eA = buildStridedSystem(comm,5);
RCP<Thyra::LinearOpBase<double> > tA = Thyra::nonconstEpetraLinearOp(eA);
{
// build stratimikos factory, adding Teko's version
Stratimikos::DefaultLinearSolverBuilder stratFactory;
Teko::addTekoToStratimikosBuilder(stratFactory);
TEST_THROW(Teko::addTekoToStratimikosBuilder(stratFactory),std::logic_error);
Teko::addTekoToStratimikosBuilder(stratFactory,"Teko-2");
TEST_NOTHROW(stratFactory.getValidParameters()->sublist("Preconditioner Types").sublist("Teko"));
TEST_NOTHROW(stratFactory.getValidParameters()->sublist("Preconditioner Types").sublist("Teko-2"));
}
{
Teuchos::RCP<Teko::RequestHandler> rh = Teuchos::rcp(new Teko::RequestHandler);
// build stratimikos factory, adding Teko's version
Stratimikos::DefaultLinearSolverBuilder stratFactory;
Teko::addTekoToStratimikosBuilder(stratFactory,rh);
TEST_THROW(Teko::addTekoToStratimikosBuilder(stratFactory,rh),std::logic_error);
Teko::addTekoToStratimikosBuilder(stratFactory,rh,"Teko-2");
TEST_NOTHROW(stratFactory.getValidParameters()->sublist("Preconditioner Types").sublist("Teko"));
TEST_NOTHROW(stratFactory.getValidParameters()->sublist("Preconditioner Types").sublist("Teko-2"));
RCP<ParameterList> params = Teuchos::rcp(new ParameterList(*stratFactory.getValidParameters()));
ParameterList & tekoList = params->sublist("Preconditioner Types").sublist("Teko");
tekoList.set("Write Block Operator", false);
tekoList.set("Test Block Operator", false);
tekoList.set("Strided Blocking","1 1");
tekoList.set("Inverse Type","BGS");
ParameterList & ifl = tekoList.sublist("Inverse Factory Library");
ifl.sublist("BGS").set("Type","Block Gauss-Seidel");
ifl.sublist("BGS").set("Inverse Type","Amesos");
stratFactory.setParameterList(params);
RCP<Teko::StratimikosFactory> precFactory
= Teuchos::rcp_dynamic_cast<Teko::StratimikosFactory>(stratFactory.createPreconditioningStrategy("Teko-2"));
TEST_EQUALITY(precFactory->getRequestHandler(),rh);
}
}
示例2: addMueLuToStratimikosBuilder
void addMueLuToStratimikosBuilder(Stratimikos::DefaultLinearSolverBuilder & builder,
const std::string & stratName)
{
TEUCHOS_TEST_FOR_EXCEPTION(builder.getValidParameters()->sublist("Preconditioner Types").isParameter(stratName),std::logic_error,
"MueLu::addMueLuToStratimikosBuilder cannot add \"" + stratName +"\" because it is already included in builder!");
// use default constructor to add Teko::StratimikosFactory
builder.setPreconditioningStrategyFactory(Teuchos::abstractFactoryStd<Thyra::PreconditionerFactoryBase<double>,Thyra::MueLuPreconditionerFactory>(),
stratName);
}
示例3: addTekoToStratimikosBuilder
void addTekoToStratimikosBuilder(Stratimikos::DefaultLinearSolverBuilder & builder,
const Teuchos::RCP<Teko::RequestHandler> & rh,
const std::string & stratName)
{
TEUCHOS_TEST_FOR_EXCEPTION(builder.getValidParameters()->sublist("Preconditioner Types").isParameter(stratName),std::logic_error,
"Teko::addTekoToStratimikosBuilder cannot add \"" + stratName +"\" because it is already included in builder!");
// build an instance of a Teuchos::AbsractFactory<Thyra::PFB> so request handler is passed onto
// the resulting StratimikosFactory
Teuchos::RCP<TekoFactoryBuilder> tekoFactoryBuilder = Teuchos::rcp(new TekoFactoryBuilder(rh));
builder.setPreconditioningStrategyFactory(tekoFactoryBuilder,stratName);
}
示例4: lst
/** \brief Build an inverse library from Stratimikos
*
* Build an inverse library from Stratimkos. The labels
* will just be the names in Stratimikos.
*
* \param[in] strat Stratimikos object to use
*
* \returns A pointer to the inverse library created.
*/
Teuchos::RCP<InverseLibrary> InverseLibrary::buildFromStratimikos(const Stratimikos::DefaultLinearSolverBuilder & strat)
{
RCP<InverseLibrary> invLib = rcp(new InverseLibrary());
// get default inveres in Stratimikos
RCP<Teuchos::ParameterList> pl = rcp(new Teuchos::ParameterList(*strat.getValidParameters()));
Teuchos::ParameterList lst(pl->sublist("Linear Solver Types"));
Teuchos::ParameterList pft(pl->sublist("Preconditioner Types"));
Teuchos::ParameterList::ConstIterator itr;
Teuchos::ParameterList * temp = 0;
// loop over all entries in solver list
for(itr=lst.begin();itr!=lst.end();++itr) {
// get current entry
std::string label = itr->first;
Teuchos::ParameterList & list = itr->second.getValue(temp);
list.set("Type",label);
// add to library
invLib->addInverse(label,list);
}
// loop over all entries in preconditioner list
for(itr=pft.begin();itr!=pft.end();++itr) {
// get current entry
std::string label = itr->first;
Teuchos::ParameterList & list = itr->second.getValue(temp);
list.set("Type",label);
// add to library
invLib->addInverse(label,list);
}
return invLib;
}
示例5: buildAssemblyPieces
TEUCHOS_UNIT_TEST(explicit_model_evaluator, basic)
{
using Teuchos::RCP;
PHX::KokkosDeviceSession session;
bool parameter_on = true;
Teuchos::RCP<panzer::FieldManagerBuilder> fmb;
Teuchos::RCP<panzer::ResponseLibrary<panzer::Traits> > rLibrary;
Teuchos::RCP<panzer::LinearObjFactory<panzer::Traits> > lof;
Teuchos::RCP<panzer::GlobalData> gd;
buildAssemblyPieces(parameter_on,fmb,rLibrary,gd,lof);
// Test a transient me
{
typedef Thyra::ModelEvaluatorBase MEB;
typedef Thyra::ModelEvaluatorBase::InArgs<double> InArgs;
typedef Thyra::ModelEvaluatorBase::OutArgs<double> OutArgs;
typedef Thyra::VectorBase<double> VectorType;
typedef Thyra::LinearOpBase<double> OperatorType;
typedef panzer::ModelEvaluator<double> PME;
typedef panzer::ExplicitModelEvaluator<double> ExpPME;
std::vector<Teuchos::RCP<Teuchos::Array<std::string> > > p_names;
std::vector<Teuchos::RCP<Teuchos::Array<double> > > p_values;
bool build_transient_support = true;
Stratimikos::DefaultLinearSolverBuilder builder;
Teuchos::RCP<Teuchos::ParameterList> validList = Teuchos::rcp(new Teuchos::ParameterList(*builder.getValidParameters()));
builder.setParameterList(validList);
RCP<const Thyra::LinearOpWithSolveFactoryBase<double> > lowsFactory = builder.createLinearSolveStrategy("Amesos");
RCP<PME> me = Teuchos::rcp(new PME(fmb,rLibrary,lof,p_names,p_values,lowsFactory,gd,build_transient_support,0.0));
RCP<ExpPME> exp_me = Teuchos::rcp(new ExpPME(me,true,false)); // constant mass, use lumped
RCP<VectorType> exp_f, f;
// explicit evaluation
{
// set the nominal values
InArgs nom_vals = exp_me->getNominalValues();
TEST_ASSERT(nom_vals.supports(MEB::IN_ARG_x));
TEST_ASSERT(nom_vals.supports(MEB::IN_ARG_x_dot)); // this is supported for stabilization purposes
TEST_ASSERT(nom_vals.supports(MEB::IN_ARG_alpha)); // alpha and beta support needed for outputting responses
TEST_ASSERT(nom_vals.supports(MEB::IN_ARG_beta));
// create in args
InArgs in_args = exp_me->createInArgs();
TEST_ASSERT(in_args.supports(MEB::IN_ARG_x));
TEST_ASSERT(in_args.supports(MEB::IN_ARG_x_dot)); // this is supported for stabilization purposes
TEST_ASSERT(in_args.supports(MEB::IN_ARG_alpha)); // alpha and beta support needed for outputting responses
TEST_ASSERT(in_args.supports(MEB::IN_ARG_beta));
InArgs nomValues = exp_me->getNominalValues();
RCP<VectorType> x = Thyra::createMember(*exp_me->get_x_space());
RCP<VectorType> x_dot = Thyra::createMember(*exp_me->get_x_space());
Thyra::assign(x_dot.ptr(),0.0);
Thyra::assign(x.ptr(),5.0);
in_args.set_x(x);
in_args.set_x_dot(x_dot);
// create out args
OutArgs out_args = exp_me->createOutArgs();
TEST_ASSERT(out_args.supports(MEB::OUT_ARG_f));
TEST_ASSERT(!out_args.supports(MEB::OUT_ARG_W_op));
TEST_ASSERT(!out_args.supports(MEB::OUT_ARG_W));
exp_f = Thyra::createMember(*exp_me->get_f_space());
out_args.set_f(exp_f);
exp_me->evalModel(in_args, out_args);
}
// implicit evaluation
RCP<OperatorType> mass = me->create_W_op();
{
// create in args
InArgs in_args = me->createInArgs();
InArgs nomValues = me->getNominalValues();
RCP<VectorType> x = Thyra::createMember(*me->get_x_space());
RCP<VectorType> x_dot = Thyra::createMember(*me->get_x_space());
Thyra::assign(x_dot.ptr(),0.0);
Thyra::assign(x.ptr(),5.0);
in_args.set_x(x);
in_args.set_x_dot(x_dot);
// create out args
OutArgs out_args = me->createOutArgs();
f = Thyra::createMember(*me->get_f_space());
out_args.set_f(f);
me->evalModel(in_args, out_args);
in_args.set_x(x);
in_args.set_x_dot(x_dot);
in_args.set_alpha(1.0);
in_args.set_beta(0.0);
out_args.set_f(Teuchos::null);
out_args.set_W_op(mass);
//.........这里部分代码省略.........
示例6: main
//.........这里部分代码省略.........
// setup field manager build
/////////////////////////////////////////////////////////////
out << "SETUP FMB" << std::endl;
// Add in the application specific closure model factory
panzer::ClosureModelFactory_TemplateManager<panzer::Traits> cm_factory;
user_app::MyModelFactory_TemplateBuilder cm_builder;
cm_factory.buildObjects(cm_builder);
Teuchos::ParameterList closure_models("Closure Models");
closure_models.sublist("solid").sublist("SOURCE_TEMPERATURE").set<double>("Value",1.0);
closure_models.sublist("solid").sublist("DENSITY").set<double>("Value",1.0);
closure_models.sublist("solid").sublist("HEAT_CAPACITY").set<double>("Value",1.0);
closure_models.sublist("ion solid").sublist("SOURCE_ION_TEMPERATURE").set<double>("Value",1.0);
closure_models.sublist("ion solid").sublist("ION_DENSITY").set<double>("Value",1.0);
closure_models.sublist("ion solid").sublist("ION_HEAT_CAPACITY").set<double>("Value",1.0);
Teuchos::ParameterList user_data("User Data");
fmb->setWorksetContainer(wkstContainer);
fmb->setupVolumeFieldManagers(physicsBlocks,cm_factory,closure_models,*linObjFactory,user_data);
fmb->setupBCFieldManagers(bcs,physicsBlocks,*eqset_factory,cm_factory,bc_factory,closure_models,*linObjFactory,user_data);
// setup assembly engine
/////////////////////////////////////////////////////////////
// build assembly engine
panzer::AssemblyEngine_TemplateManager<panzer::Traits> ae_tm;
panzer::AssemblyEngine_TemplateBuilder builder(fmb,linObjFactory);
ae_tm.buildObjects(builder);
// setup linear algebra and solve
/////////////////////////////////////////////////////////////
// build ghosted variables
out << "BUILD LA" << std::endl;
RCP<panzer::EpetraLinearObjContainer> ghostCont
= Teuchos::rcp_dynamic_cast<panzer::EpetraLinearObjContainer>(linObjFactory->buildGhostedLinearObjContainer());
RCP<panzer::EpetraLinearObjContainer> container
= Teuchos::rcp_dynamic_cast<panzer::EpetraLinearObjContainer>(linObjFactory->buildLinearObjContainer());
eLinObjFactory->initializeContainer(panzer::EpetraLinearObjContainer::X |
panzer::EpetraLinearObjContainer::DxDt |
panzer::EpetraLinearObjContainer::F |
panzer::EpetraLinearObjContainer::Mat,*container);
eLinObjFactory->initializeGhostedContainer(panzer::EpetraLinearObjContainer::X |
panzer::EpetraLinearObjContainer::DxDt |
panzer::EpetraLinearObjContainer::F |
panzer::EpetraLinearObjContainer::Mat,*ghostCont);
panzer::AssemblyEngineInArgs input(ghostCont,container);
input.alpha = 0;
input.beta = 1;
// evaluate physics
out << "EVALUTE" << std::endl;
ae_tm.getAsObject<panzer::Traits::Residual>()->evaluate(input);
ae_tm.getAsObject<panzer::Traits::Jacobian>()->evaluate(input);
out << "RAN SUCCESSFULLY!" << std::endl;
out << "SOLVE" << std::endl;
// notice that this should be called by the assembly driver!
// linObjFactory->ghostToGlobalContainer(*ghostCont,*container);
Teuchos::RCP<const Thyra::LinearOpBase<double> > th_A = Thyra::epetraLinearOp(container->get_A());
Teuchos::RCP<const Thyra::VectorSpaceBase<double> > range = th_A->range();
Teuchos::RCP<const Thyra::VectorSpaceBase<double> > domain = th_A->domain();
Teuchos::RCP<Thyra::VectorBase<double> > th_x = Thyra::create_Vector(container->get_x(),domain);
Teuchos::RCP<Thyra::VectorBase<double> > th_f = Thyra::create_Vector(container->get_f(),range);
// solve with amesos
Stratimikos::DefaultLinearSolverBuilder solverBuilder;
Teuchos::RCP<Teuchos::ParameterList> validList = Teuchos::rcp(new Teuchos::ParameterList(*solverBuilder.getValidParameters()));
solverBuilder.setParameterList(validList);
RCP<Thyra::LinearOpWithSolveFactoryBase<double> > lowsFactory = solverBuilder.createLinearSolveStrategy("Amesos");
RCP<Thyra::LinearOpWithSolveBase<double> > lows = Thyra::linearOpWithSolve(*lowsFactory, th_A.getConst());
Thyra::solve<double>(*lows, Thyra::NOTRANS, *th_f, th_x.ptr());
if(false) {
EpetraExt::RowMatrixToMatrixMarketFile("a_op.mm",*container->get_A());
EpetraExt::VectorToMatrixMarketFile("x_vec.mm",*container->get_x());
EpetraExt::VectorToMatrixMarketFile("b_vec.mm",*container->get_f());
}
out << "WRITE" << std::endl;
// redistribute solution vector
linObjFactory->globalToGhostContainer(*container,*ghostCont,panzer::EpetraLinearObjContainer::X | panzer::EpetraLinearObjContainer::DxDt);
panzer_stk::write_solution_data(*dofManager,*mesh,*ghostCont->get_x());
mesh->writeToExodus("output.exo");
PHX::FinalizeKokkosDevice();
return 0;
}