本文整理汇总了C++中thyra::LinearOpTester::set_all_error_tol方法的典型用法代码示例。如果您正苦于以下问题:C++ LinearOpTester::set_all_error_tol方法的具体用法?C++ LinearOpTester::set_all_error_tol怎么用?C++ LinearOpTester::set_all_error_tol使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类thyra::LinearOpTester
的用法示例。
在下文中一共展示了LinearOpTester::set_all_error_tol方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
TEUCHOS_UNIT_TEST(assembly_engine, z_basic_epetra_vtpetra)
{
TEUCHOS_ASSERT(tLinearOp!=Teuchos::null);
TEUCHOS_ASSERT(eLinearOp!=Teuchos::null);
TEUCHOS_ASSERT(tVector!=Teuchos::null);
TEUCHOS_ASSERT(eVector!=Teuchos::null);
Thyra::LinearOpTester<double> tester;
tester.set_all_error_tol(1e-14);
tester.show_all_tests(true);
tester.dump_all(true);
tester.num_random_vectors(200);
{
const bool result = tester.compare( *tLinearOp, *eLinearOp, Teuchos::ptrFromRef(out) );
TEST_ASSERT(result);
}
{
const bool result = Thyra::testRelNormDiffErr(
"Tpetra",*tVector,
"Epetra",*eVector,
"linear_properties_error_tol()", 1e-14,
"linear_properties_warning_tol()", 1e-14,
&out);
TEST_ASSERT(result);
}
}
示例2: test_invLumping
bool tLumping::test_invLumping(int verbosity,std::ostream & os)
{
bool status = false;
bool allPassed = true;
Thyra::LinearOpTester<double> tester;
tester.show_all_tests(true);
tester.set_all_error_tol(tolerance_);
Epetra_Map map(100,0,*GetComm());
// A matrix...to be lumped
Epetra_CrsMatrix A(Copy,map,5,false);
int indices[5];
double values[5] = {1,2,3,4,5};
for(int i=0;i<A.NumMyRows()-5;i++) {
int index = A.RowMap().GID(i);
for(int j=0;j<5;j++)
indices[j] = A.RowMap().GID(i+j);
A.InsertGlobalValues(index,5,values,indices);
}
for(int i=A.NumMyRows()-5;i<A.NumMyRows();i++) {
int index = A.RowMap().GID(i);
for(int j=0;j<5;j++)
indices[j] = A.RowMap().GID(j);
A.InsertGlobalValues(index,5,values,indices);
}
A.FillComplete();
// B matrix...already lumped
Epetra_CrsMatrix B(Copy,map,1,true);
double number = 1.0/15.0;
for(int i=0;i<B.NumMyRows();i++) {
int index = B.RowMap().GID(i);
B.InsertGlobalValues(index,1,&number,&index);
}
B.FillComplete();
Teko::LinearOp pA = Thyra::epetraLinearOp(rcpFromRef(A));
Teko::LinearOp pB = Thyra::epetraLinearOp(rcpFromRef(B));
Teko::LinearOp lumpedA = getInvLumpedMatrix(pA);
{
std::stringstream ss;
Teuchos::FancyOStream fos(rcpFromRef(ss)," |||");
const bool result = tester.compare( *pB, *lumpedA, Teuchos::ptrFromRef(fos) );
TEST_ASSERT(result,
std::endl << " tLummping::test_invLumping "
<< ": Testing basic inv lumping functionality");
if(not result || verbosity>=10)
os << ss.str();
}
return allPassed;
}
示例3: comm
TEUCHOS_UNIT_TEST(tStratimikosFactory, test_Defaults)
{
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 = buildSystem(comm,5);
RCP<Thyra::LinearOpBase<double> > tA = Thyra::nonconstEpetraLinearOp(eA);
// build stratimikos factory, adding Teko's version
Stratimikos::DefaultLinearSolverBuilder stratFactory;
stratFactory.setPreconditioningStrategyFactory(
Teuchos::abstractFactoryStd<Thyra::PreconditionerFactoryBase<double>,Teko::StratimikosFactory>(),
"Teko");
RCP<const ParameterList> validParams = stratFactory.getValidParameters();
stratFactory.setParameterList(Teuchos::rcp(new Teuchos::ParameterList(*validParams)));
// print out Teko's parameter list and fail if it doesn't exist!
TEST_NOTHROW(validParams->sublist("Preconditioner Types").sublist("Teko").print(out,
ParameterList::PrintOptions().showDoc(true).indent(2).showTypes(true)));
// build teko preconditioner factory
RCP<Thyra::PreconditionerFactoryBase<double> > precFactory
= stratFactory.createPreconditioningStrategy("Teko");
// make sure factory is built
TEST_ASSERT(precFactory!=Teuchos::null);
// build preconditioner
RCP<Thyra::PreconditionerBase<double> > prec = Thyra::prec<double>(*precFactory,tA);
TEST_ASSERT(prec!=Teuchos::null);
// build an operator to test against
RCP<const Teko::InverseLibrary> invLib = Teko::InverseLibrary::buildFromStratimikos();
RCP<const Teko::InverseFactory> invFact = invLib->getInverseFactory("Amesos");
Teko::LinearOp testOp = Teko::buildInverse(*invFact,tA);
Teko::LinearOp precOp = prec->getUnspecifiedPrecOp();
TEST_ASSERT(precOp!=Teuchos::null);
Thyra::LinearOpTester<double> tester;
tester.show_all_tests(true);
tester.set_all_error_tol(0);
TEST_ASSERT(tester.compare(*precOp,*testOp,Teuchos::ptrFromRef(out)));
}
示例4:
TEUCHOS_UNIT_TEST(assembly_engine, z_basic_epetra_vtpetra)
{
PHX::InitializeKokkosDevice();
TEUCHOS_ASSERT(tLinearOp!=Teuchos::null);
TEUCHOS_ASSERT(eLinearOp!=Teuchos::null);
TEUCHOS_ASSERT(tVector!=Teuchos::null);
TEUCHOS_ASSERT(eVector!=Teuchos::null);
Thyra::LinearOpTester<double> tester;
tester.set_all_error_tol(1e-14);
tester.show_all_tests(true);
tester.dump_all(true);
tester.num_random_vectors(200);
{
const bool result = tester.compare( *tLinearOp, *eLinearOp, Teuchos::ptrFromRef(out) );
TEST_ASSERT(result);
}
{
const bool result = Thyra::testRelNormDiffErr(
"Tpetra",*tVector,
"Epetra",*eVector,
"linear_properties_error_tol()", 1e-14,
"linear_properties_warning_tol()", 1e-14,
&out);
TEST_ASSERT(result);
}
// Need to kill global objects so that memory leaks on kokkos ref
// count pointing doesn't trigger test failure.
eLinearOp = Teuchos::null;
tLinearOp = Teuchos::null;
eVector = Teuchos::null;
tVector = Teuchos::null;
PHX::FinalizeKokkosDevice();
}
示例5: comm
TEUCHOS_UNIT_TEST(tExplicitOps, transpose)
{
// build global (or serial communicator)
#ifdef HAVE_MPI
Epetra_MpiComm comm(MPI_COMM_WORLD);
#else
Epetra_SerialComm comm;
#endif
int nx = 39; // essentially random values
int ny = 53;
// create some big blocks to play with
Trilinos_Util::CrsMatrixGallery FGallery("recirc_2d",comm,false); // CJ TODO FIXME: change for Epetra64
FGallery.Set("nx",nx);
FGallery.Set("ny",ny);
Epetra_CrsMatrix & epetraF = FGallery.GetMatrixRef();
Teko::LinearOp F = Thyra::epetraLinearOp(rcp(new Epetra_CrsMatrix(epetraF)));
Teko::LinearOp F_T = Teko::explicitTranspose(F);
Teko::LinearOp aF = Thyra::adjoint(F);
Teuchos::RCP<const Epetra_Operator> eOp = Thyra::get_Epetra_Operator(*F_T);
TEST_ASSERT(eOp!=Teuchos::null);
Teuchos::RCP<const Epetra_CrsMatrix> eCrs = Teuchos::rcp_dynamic_cast<const Epetra_CrsMatrix>(eOp);
TEST_ASSERT(eCrs!=Teuchos::null);
Thyra::LinearOpTester<double> tester;
tester.set_all_error_tol(1e-14);
tester.show_all_tests(true);
{
std::stringstream ss;
const bool result = tester.compare( *aF, *F_T, Teuchos::ptrFromRef(out) );
TEST_ASSERT(result);
}
}
示例6: test_PCDStrategy
bool tPCDStrategy::test_PCDStrategy(int verbosity,std::ostream & os)
{
bool status = false;
bool allPassed = true;
Thyra::LinearOpTester<double> tester;
tester.show_all_tests(true);
tester.set_all_error_tol(tolerance_);
Teko::LinearOp M1 = buildExampleOp(1,*GetComm(),1.0);
Teko::LinearOp M2 = buildExampleOp(2,*GetComm(),1.0);
Teko::LinearOp A = Thyra::nonconstBlock2x2<double>(buildExampleOp(2,*GetComm(),1.0),
buildExampleOp(1,*GetComm(),2.0),
buildExampleOp(1,*GetComm(),3.0),
buildExampleOp(2,*GetComm(),4.0));
Teko::BlockedLinearOp blkA = Teko::toBlockedLinearOp(A);
Teko::LinearOp laplace = Teko::explicitMultiply(M2,M1);
Teko::LinearOp Fp = M1;
Teko::LinearOp Qp = buildExampleOp(3,*GetComm(),1.0);
std::string pcdStr = Teko::NS::PCDStrategy::getPCDString();
std::string presLapStr = Teko::NS::PCDStrategy::getPressureLaplaceString();
std::string presMassStr = Teko::NS::PCDStrategy::getPressureMassString();
RCP<Teko::StaticRequestCallback<Teko::LinearOp> > pcdCb
= rcp(new Teko::StaticRequestCallback<Teko::LinearOp>(pcdStr,Fp));
RCP<Teko::StaticRequestCallback<Teko::LinearOp> > lapCb
= rcp(new Teko::StaticRequestCallback<Teko::LinearOp>(presLapStr,laplace));
RCP<Teko::StaticRequestCallback<Teko::LinearOp> > massCb
= rcp(new Teko::StaticRequestCallback<Teko::LinearOp>(presMassStr,Qp));
RCP<Teko::RequestHandler> rh = rcp(new Teko::RequestHandler);
rh->addRequestCallback(pcdCb);
rh->addRequestCallback(lapCb);
rh->addRequestCallback(massCb);
RCP<Teko::InverseLibrary> invLib = Teko::InverseLibrary::buildFromStratimikos();
RCP<Teko::InverseFactory> inverseFact = invLib->getInverseFactory("Amesos");
// test the inverse of the 00 block
{
bool result;
std::stringstream ss;
Teuchos::FancyOStream fos(Teuchos::rcpFromRef(ss)," |||");
Teko::LinearOp invA00 = inverseFact->buildInverse(M2);
Teko::BlockPreconditionerState state;
Teko::NS::PCDStrategy strategy(inverseFact,inverseFact);
strategy.setRequestHandler(rh);
// build the state object
// state.addLinearOp(presLapStr, laplace);
// state.addLinearOp(pcdStr, Fp);
// state.addLinearOp(presMassStr, Qp);
// test the 0,0 block inverses: hat
Teko::LinearOp hatInvA00 = strategy.getHatInvA00(blkA,state);
ss.str("");
result = tester.compare( *hatInvA00, *invA00, Teuchos::ptrFromRef(fos) );
TEST_ASSERT(result,
std::endl << " tPCDStrategy::test_PCDStrategy " << toString(status)
<< " : Comparing invHatA00 operators");
if(not result || verbosity>=10)
os << ss.str();
// test the 0,0 block inverses: tilde
Teko::LinearOp tildeInvA00 = strategy.getTildeInvA00(blkA,state);
ss.str("");
result = tester.compare( *tildeInvA00, *invA00, Teuchos::ptrFromRef(fos) );
TEST_ASSERT(result,
std::endl << " tPCDStrategy::test_PCDStrategy " << toString(status)
<< " : Comparing invTildeA00 operators");
if(not result || verbosity>=10)
os << ss.str();
}
// test the inverse of the Schur complement
{
bool result;
std::stringstream ss;
Teuchos::FancyOStream fos(Teuchos::rcpFromRef(ss)," |||");
Teko::LinearOp invLaplace = inverseFact->buildInverse(laplace);
Teko::LinearOp iQp = Teko::getInvDiagonalOp(Qp);
Teko::LinearOp invSchur = multiply(iQp,Fp,invLaplace);
Teko::BlockPreconditionerState state;
Teko::NS::PCDStrategy strategy(inverseFact,inverseFact);
strategy.setRequestHandler(rh);
// build the state object
// state.addLinearOp(presLapStr, laplace);
// state.addLinearOp(pcdStr, Fp);
// state.addLinearOp(presMassStr, Qp);
// test the 0,0 block inverses: hat
Teko::LinearOp invS_strategy = strategy.getInvS(blkA,state);
ss.str("");
result = tester.compare( *invS_strategy, *invSchur, Teuchos::ptrFromRef(fos) );
//.........这里部分代码省略.........
示例7: runCgSolveExample
bool runCgSolveExample(
const int dim,
const Scalar diagScale,
const bool symOp,
const bool showAllTests,
const typename Teuchos::ScalarTraits<Scalar>::magnitudeType tolerance,
const int maxNumIters
)
{
using Teuchos::as;
using Teuchos::null;
using Teuchos::RCP;
using Teuchos::rcp;
using Teuchos::OSTab;
typedef Teuchos::ScalarTraits<Scalar> ST;
using Thyra::multiply;
using Thyra::scale;
typedef typename ST::magnitudeType ScalarMag;
bool success = true;
bool result;
Teuchos::RCP<Teuchos::FancyOStream> out =
Teuchos::VerboseObjectBase::getDefaultOStream();
*out << "\n***\n*** Running silly CG solver using scalar type = \'"
<< ST::name() << "\' ...\n***\n";
Teuchos::Time timer("");
timer.start(true);
//
// (A) Setup a simple linear system with tridiagonal operator:
//
// [ a*2 -1 ]
// [ -r(1) a*2 -1 ]
// A = [ . . . ]
// [ -r(n-2) a*2 -1 ]
// [ -r(n-1) a*2 ]
//
// (A.1) Create the tridiagonal matrix operator
*out << "\nConstructing tridiagonal matrix A of dimension = " << dim
<< " and diagonal multiplier = " << diagScale << " ...\n";
Teuchos::Array<Scalar> lower(dim-1), diag(dim), upper(dim-1);
const Scalar
up = -ST::one(),
diagTerm = as<Scalar>(2.0) * diagScale * ST::one(),
low = -(symOp ? ST::one() : ST::random());
int k = 0;
// First row
diag[k] = diagTerm; upper[k] = up;
// Middle rows
for( k = 1; k < dim - 1; ++k ) {
lower[k-1] = low; diag[k] = diagTerm; upper[k] = up;
}
// Last row
lower[k-1] = low; diag[k] = diagTerm;
RCP<const Thyra::LinearOpBase<Scalar> > A =
rcp(new ExampleTridiagSerialLinearOp<Scalar>(dim, lower, diag, upper));
// (A.2) Testing the linear operator constructed linear operator
*out << "\nTesting the constructed linear operator A ...\n";
Thyra::LinearOpTester<Scalar> linearOpTester;
linearOpTester.enable_all_tests(false);
linearOpTester.check_linear_properties(true);
linearOpTester.set_all_error_tol(tolerance);
linearOpTester.set_all_warning_tol(1e-2*tolerance);
linearOpTester.show_all_tests(showAllTests);
result = linearOpTester.check(*A, out.ptr());
if(!result) success = false;
// (A.3) Create RHS vector b and set to a random value
RCP<Thyra::VectorBase<Scalar> > b = createMember(A->range());
Thyra::seed_randomize<Scalar>(0);
Thyra::randomize( -ST::one(), +ST::one(), b.ptr() );
// (A.4) Create LHS vector x and set to zero
RCP<Thyra::VectorBase<Scalar> > x = createMember(A->domain());
Thyra::V_S( x.ptr(), ST::zero() );
// (A.5) Create the final linear system
if(!symOp) {
*out << "\nSetting up normal equations for unsymmetric system A^H*(A*x-b) => new A*x = b ...\n";
// A^H*A
RCP<const Thyra::LinearOpBase<Scalar> > AtA = multiply(adjoint(A), A);
// A^H*b
RCP<Thyra::VectorBase<Scalar> > nb = createMember(AtA->range());
Thyra::apply<Scalar>(*A, Thyra::CONJTRANS, *b, nb.ptr());
A = AtA;
b = nb;
}
// (A.6) Testing the linear operator used with the solve
*out << "\nTesting the linear operator used with the solve ...\n";
linearOpTester.check_for_symmetry(true);
result = linearOpTester.check(*A, out.ptr());
if(!result) success = false;
//
// (B) Solve the linear system with the silly CG solver
//
*out << "\nSolving the linear system with sillyCgSolve(...) ...\n";
//.........这里部分代码省略.........
示例8: exampleImplicitlyComposedLinearOperators
//.........这里部分代码省略.........
E = mvE,
F = mvF,
J = mvJ,
K = mvK,
L = mvL,
N = mvN,
P = mvP,
Q = mvQ;
out << describe(*A, verbLevel);
out << describe(*B, verbLevel);
out << describe(*C, verbLevel);
out << describe(*E, verbLevel);
out << describe(*F, verbLevel);
out << describe(*J, verbLevel);
out << describe(*K, verbLevel);
out << describe(*L, verbLevel);
out << describe(*N, verbLevel);
out << describe(*P, verbLevel);
out << describe(*Q, verbLevel);
//
// B) Create the composed linear operators
//
// I
const RCP<const LinearOpBase<Scalar> > I = identity(space1, "I");
// D = diag(d)
const RCP<const LinearOpBase<Scalar> > D = diagonal(d, "D");
// M00 = [ gama*B*A + C, E + F ] ^H
// [ J^H * A, I ]
const RCP<const LinearOpBase<Scalar> > M00 =
adjoint(
block2x2(
add( scale(gamma,multiply(B,A)), C ), add( E, F ),
multiply(adjoint(J),A), I
),
"M00"
);
out << "\nM00 = " << describe(*M00, verbLevel);
// M01 = beta * [ Q ]
// [ K ]
const RCP<const LinearOpBase<Scalar> > M01 =
scale(
beta,
block2x1( Q, K ),
"M01"
);
out << "\nM01 = " << describe(*M01, verbLevel);
// M10 = [ L * N^H, eta*P ]
const RCP<const LinearOpBase<Scalar> > M10 =
block1x2(
multiply(L,adjoint(N)), scale(eta,P),
"M10"
);
out << "\nM10 = " << describe(*M10, verbLevel);
// M11 = D - Q^H*Q
const RCP<const LinearOpBase<Scalar> > M11 =
subtract( D, multiply(adjoint(Q),Q), "M11" );
out << "\nM11 = " << describe(*M11, verbLevel);
// M = [ M00, M01 ]
// [ M10, M11 ]
const RCP<const LinearOpBase<Scalar> > M =
block2x2(
M00, M01,
M10, M11,
"M"
);
out << "\nM = " << describe(*M, verbLevel);
//
// C) Test the final composed operator
//
Thyra::LinearOpTester<Scalar> linearOpTester;
linearOpTester.set_all_error_tol(errorTol);
linearOpTester.check_adjoint(testAdjoint);
if (as<int>(verbLevel) >= as<int>(Teuchos::VERB_HIGH))
linearOpTester.show_all_tests(true);
if (as<int>(verbLevel) >= as<int>(Teuchos::VERB_EXTREME))
linearOpTester.dump_all(true);
const bool result = linearOpTester.check(*M,&out);
return result;
}
示例9: fout
// Testing Parameter Support
TEUCHOS_UNIT_TEST(model_evaluator_blocked_hessians, d2f_dp2)
{
typedef panzer::Traits::RealType RealType;
typedef Thyra::VectorBase<RealType> VectorType;
typedef Thyra::SpmdVectorBase<RealType> SpmdVectorType;
typedef Thyra::LinearOpBase<RealType> OperatorType;
using Teuchos::RCP;
using Teuchos::rcp_dynamic_cast;
typedef Thyra::ModelEvaluatorBase::InArgs<double> InArgs;
typedef Thyra::ModelEvaluatorBase::OutArgs<double> OutArgs;
typedef panzer::ModelEvaluator<double> PME;
bool distr_param_on = true;
AssemblyPieces ap;
buildAssemblyPieces(distr_param_on,ap);
int pIndex = -1;
std::vector<Teuchos::RCP<Teuchos::Array<std::string> > > p_names;
std::vector<Teuchos::RCP<Teuchos::Array<double> > > p_values;
bool build_transient_support = true;
RCP<PME> me
= Teuchos::rcp(new PME(ap.fmb,ap.rLibrary,ap.lof,p_names,p_values,Teuchos::null,ap.gd,build_transient_support,0.0));
const double DENSITY_VALUE = 3.7;
const double TEMPERATURE_VALUE = 2.0;
const double PERTURB_VALUE = 0.1;
// add distributed parameter
{
RCP<ThyraObjFactory<double> > th_param_lof = rcp_dynamic_cast<ThyraObjFactory<double> >(ap.param_lof);
RCP<VectorType> param_density = Thyra::createMember(th_param_lof->getThyraDomainSpace());
Thyra::assign(param_density.ptr(),DENSITY_VALUE);
pIndex = me->addDistributedParameter("DENSITY_P",th_param_lof->getThyraDomainSpace(),
ap.param_ged,param_density,ap.param_dofManager);
}
me->setupModel(ap.wkstContainer,ap.physicsBlocks,ap.bcs,
*ap.eqset_factory,
*ap.bc_factory,
ap.cm_factory,
ap.cm_factory,
ap.closure_models,
ap.user_data,false,"");
// panzer::printMeshTopology(out,*ap.dofManager);
RCP<OperatorType> D2fDp2 = me->create_DfDp_op(pIndex);
// test hessian
{
RCP<VectorType> x = Thyra::createMember(*me->get_x_space());
Thyra::assign(x.ptr(),TEMPERATURE_VALUE);
RCP<VectorType> dx = Thyra::createMember(*me->get_x_space());
Thyra::assign(dx.ptr(),PERTURB_VALUE);
InArgs in_args = me->createInArgs();
in_args.set_x(x);
in_args.set_alpha(1.0/0.1);
in_args.set_beta(1.0);
me->evalModel_D2fDp2(pIndex,in_args,dx,D2fDp2);
out << "D2fDp2 = \n" << Teuchos::describe(*D2fDp2,Teuchos::VERB_EXTREME) << std::endl;
}
RCP<OperatorType> W = me->create_DfDp_op(pIndex);
{
RCP<VectorType> x = Thyra::createMember(*me->get_x_space());
Thyra::assign(x.ptr(),TEMPERATURE_VALUE);
InArgs in_args = me->createInArgs();
in_args.set_x(x);
in_args.set_alpha(1.0);
in_args.set_beta(0.0);
OutArgs out_args = me->createOutArgs();
out_args.set_DfDp(pIndex,W);
me->evalModel(in_args,out_args);
out << "W = \n" << Teuchos::describe(*W,Teuchos::VERB_EXTREME) << std::endl;
}
Thyra::LinearOpTester<double> tester;
tester.show_all_tests(true);
tester.set_all_error_tol(1e-15);
tester.num_random_vectors(20);
double scaling_of_dfdp = PERTURB_VALUE/DENSITY_VALUE;
Teuchos::FancyOStream fout(Teuchos::rcpFromRef(std::cout));
//.........这里部分代码省略.........