13 #include "Tempus_config.hpp"
14 #include "Tempus_IntegratorPseudoTransientForwardSensitivity.hpp"
15 #include "Tempus_IntegratorPseudoTransientAdjointSensitivity.hpp"
17 #include "Thyra_VectorStdOps.hpp"
18 #include "Thyra_MultiVectorStdOps.hpp"
20 #include "../TestModels/SteadyQuadraticModel.hpp"
22 #include "Thyra_DefaultMultiVectorProductVector.hpp"
23 #include "Thyra_DefaultProductVector.hpp"
28 namespace Tempus_Test {
30 using Teuchos::getParametersFromXmlFile;
33 using Teuchos::sublist;
41 RCP<ParameterList> pList =
42 getParametersFromXmlFile(
"Tempus_DIRK_SteadyQuadratic.xml");
45 RCP<ParameterList> scm_pl = sublist(pList,
"SteadyQuadraticModel",
true);
46 scm_pl->set(
"Use DfDp as Tangent", use_dfdp_as_tangent);
47 RCP<SteadyQuadraticModel<double> > model =
51 RCP<ParameterList> pl = sublist(pList,
"Tempus",
true);
52 ParameterList &sens_pl = pl->sublist(
"Sensitivities");
53 sens_pl.set(
"Use DfDp as Tangent", use_dfdp_as_tangent);
54 sens_pl.set(
"Reuse State Linear Solver",
true);
55 sens_pl.set(
"Force W Update",
true);
59 RCP<Tempus::IntegratorPseudoTransientForwardSensitivity<double> > integrator =
60 Tempus::createIntegratorPseudoTransientForwardSensitivity<double>(pl,
64 bool integratorStatus = integrator->advanceTime();
68 double time = integrator->getTime();
69 double timeFinal = pl->sublist(
"Default Integrator")
70 .sublist(
"Time Step Control")
71 .get<
double>(
"Final Time");
75 RCP<const Thyra::VectorBase<double> > x_vec = integrator->getX();
76 RCP<const Thyra::MultiVectorBase<double> > DxDp_vec = integrator->getDxDp();
77 const double x = Thyra::get_ele(*x_vec, 0);
78 const double dxdb = Thyra::get_ele(*(DxDp_vec->col(0)), 0);
79 const double x_exact = model->getSteadyStateSolution();
80 const double dxdb_exact = model->getSteadyStateSolutionSensitivity();
102 getParametersFromXmlFile(
"Tempus_DIRK_SteadyQuadratic.xml");
115 Tempus::integratorPseudoTransientAdjointSensitivity<double>(pl, model);
118 bool integratorStatus = integrator->advanceTime();
122 double time = integrator->getTime();
123 double timeFinal = pl->sublist(
"Default Integrator")
124 .sublist(
"Time Step Control")
125 .
get<
double>(
"Final Time");
131 const double x = Thyra::get_ele(*x_vec, 0);
132 const double dxdb = Thyra::get_ele(*(DxDp_vec->col(0)), 0);
133 const double x_exact = model->getSteadyStateSolution();
134 const double dxdb_exact = model->getSteadyStateSolutionSensitivity();
136 TEST_FLOATING_EQUALITY(x, x_exact, 1.0e-6);
137 TEST_FLOATING_EQUALITY(dxdb, dxdb_exact, 1.0e-6);
void test_pseudotransient_fsa(const bool use_dfdp_as_tangent, Teuchos::FancyOStream &out, bool &success)
#define TEST_FLOATING_EQUALITY(v1, v2, tol)
TEUCHOS_UNIT_TEST(BackwardEuler, SinCos_ASA)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Simple quadratic equation with a stable steady-state.