9 #include "Teuchos_UnitTestHarness.hpp"
10 #include "Teuchos_XMLParameterListHelpers.hpp"
11 #include "Teuchos_TimeMonitor.hpp"
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 {
31 using Teuchos::ParameterList;
32 using Teuchos::sublist;
33 using Teuchos::getParametersFromXmlFile;
38 Teuchos::FancyOStream &out,
bool &success)
41 RCP<ParameterList> pList =
42 getParametersFromXmlFile(
"Tempus_ExplicitRK_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 =
48 Teuchos::rcp(
new SteadyQuadraticModel<double>(scm_pl));
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);
56 RCP<Tempus::IntegratorPseudoTransientForwardSensitivity<double> > integrator =
57 Tempus::integratorPseudoTransientForwardSensitivity<double>(pl, model);
60 bool integratorStatus = integrator->advanceTime();
61 TEST_ASSERT(integratorStatus);
64 double time = integrator->getTime();
65 double timeFinal = pl->sublist(
"Demo Integrator")
66 .sublist(
"Time Step Control").get<
double>(
"Final Time");
67 TEST_FLOATING_EQUALITY(time, timeFinal, 1.0e-14);
70 RCP<const Thyra::VectorBase<double> > x_vec = integrator->getX();
71 RCP<const Thyra::MultiVectorBase<double> > DxDp_vec = integrator->getDxDp();
72 const double x = Thyra::get_ele(*x_vec, 0);
73 const double dxdb = Thyra::get_ele(*(DxDp_vec->col(0)), 0);
74 const double x_exact = model->getSteadyStateSolution();
75 const double dxdb_exact = model->getSteadyStateSolutionSensitivity();
77 TEST_FLOATING_EQUALITY( x, x_exact, 1.0e-6 );
78 TEST_FLOATING_EQUALITY( dxdb, dxdb_exact, 1.0e-6 );
97 RCP<ParameterList> pList =
98 getParametersFromXmlFile(
"Tempus_ExplicitRK_SteadyQuadratic.xml");
101 RCP<ParameterList> scm_pl = sublist(pList,
"SteadyQuadraticModel",
true);
102 RCP<SteadyQuadraticModel<double> > model =
106 RCP<ParameterList> pl = sublist(pList,
"Tempus",
true);
110 RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<double> > integrator =
111 Tempus::integratorPseudoTransientAdjointSensitivity<double>(pl, model);
114 bool integratorStatus = integrator->advanceTime();
115 TEST_ASSERT(integratorStatus);
118 double time = integrator->getTime();
119 double timeFinal =pl->sublist(
"Demo Integrator")
120 .sublist(
"Time Step Control").get<
double>(
"Final Time");
121 TEST_FLOATING_EQUALITY(time, timeFinal, 1.0e-14);
124 RCP<const Thyra::VectorBase<double> > x_vec = integrator->getX();
125 RCP<const Thyra::MultiVectorBase<double> > DxDp_vec = integrator->getDgDp();
126 const double x = Thyra::get_ele(*x_vec, 0);
127 const double dxdb = Thyra::get_ele(*(DxDp_vec->col(0)), 0);
128 const double x_exact = model->getSteadyStateSolution();
129 const double dxdb_exact = model->getSteadyStateSolutionSensitivity();
131 TEST_FLOATING_EQUALITY( x, x_exact, 1.0e-6 );
132 TEST_FLOATING_EQUALITY( dxdb, dxdb_exact, 1.0e-6 );
void test_pseudotransient_fsa(const bool use_dfdp_as_tangent, Teuchos::FancyOStream &out, bool &success)
TEUCHOS_UNIT_TEST(BackwardEuler, SinCos_ASA)
Simple quadratic equation with a stable steady-state. This is a simple differential equation which h...