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_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 =
 
   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);
 
   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::integratorPseudoTransientForwardSensitivity<double>(pl, model);
 
   63   bool integratorStatus = integrator->advanceTime();
 
   64   TEST_ASSERT(integratorStatus);
 
   67   double time = integrator->getTime();
 
   68   double timeFinal = pl->sublist(
"Default Integrator")
 
   69     .sublist(
"Time Step Control").get<
double>(
"Final Time");
 
   70   TEST_FLOATING_EQUALITY(time, timeFinal, 1.0e-14);
 
   73   RCP<const Thyra::VectorBase<double> > x_vec = integrator->getX();
 
   74   RCP<const Thyra::MultiVectorBase<double> > DxDp_vec = integrator->getDxDp();
 
   75   const double x = Thyra::get_ele(*x_vec, 0);
 
   76   const double dxdb = Thyra::get_ele(*(DxDp_vec->col(0)), 0);
 
   77   const double x_exact = model->getSteadyStateSolution();
 
   78   const double dxdb_exact = model->getSteadyStateSolutionSensitivity();
 
   80   TEST_FLOATING_EQUALITY( x,    x_exact,    1.0e-6 );
 
   81   TEST_FLOATING_EQUALITY( dxdb, dxdb_exact, 1.0e-6 );
 
  100   RCP<ParameterList> pList =
 
  101     getParametersFromXmlFile(
"Tempus_DIRK_SteadyQuadratic.xml");
 
  104   RCP<ParameterList> scm_pl = sublist(pList, 
"SteadyQuadraticModel", 
true);
 
  105   RCP<SteadyQuadraticModel<double> > model =
 
  109   RCP<ParameterList> pl = sublist(pList, 
"Tempus", 
true);
 
  113   RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<double> > integrator =
 
  114     Tempus::integratorPseudoTransientAdjointSensitivity<double>(pl, model);
 
  117   bool integratorStatus = integrator->advanceTime();
 
  118   TEST_ASSERT(integratorStatus);
 
  121   double time = integrator->getTime();
 
  122   double timeFinal =pl->sublist(
"Default Integrator")
 
  123     .sublist(
"Time Step Control").get<
double>(
"Final Time");
 
  124   TEST_FLOATING_EQUALITY(time, timeFinal, 1.0e-14);
 
  127   RCP<const Thyra::VectorBase<double> > x_vec = integrator->getX();
 
  128   RCP<const Thyra::MultiVectorBase<double> > DxDp_vec = integrator->getDgDp();
 
  129   const double x = Thyra::get_ele(*x_vec, 0);
 
  130   const double dxdb = Thyra::get_ele(*(DxDp_vec->col(0)), 0);
 
  131   const double x_exact = model->getSteadyStateSolution();
 
  132   const double dxdb_exact = model->getSteadyStateSolutionSensitivity();
 
  134   TEST_FLOATING_EQUALITY( x,    x_exact,    1.0e-6 );
 
  135   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...