39  stepper->setModel(model);
 
   40  stepper->initialize();
 
   41  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   54  predictorStepper->setModel(
 
   56  predictorStepper->initialize();
 
   59  bool useFSAL              = defaultStepper->getUseFSAL();
 
   60  std::string ICConsistency = defaultStepper->getICConsistency();
 
   61  bool ICConsistencyCheck   = defaultStepper->getICConsistencyCheck();
 
   62  bool zeroInitialGuess     = defaultStepper->getZeroInitialGuess();
 
   65  stepper->setAppAction(modifier);
 
   66  stepper->initialize();
 
   67  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   68  stepper->setAppAction(modifierX);
 
   69  stepper->initialize();
 
   70  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   71  stepper->setAppAction(observer);
 
   72  stepper->initialize();
 
   73  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   74  stepper->setSolver(solver);
 
   75  stepper->initialize();
 
   76  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   77  stepper->setPredictor(predictorStepper);
 
   78  stepper->initialize();
 
   79  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   80  stepper->setUseFSAL(useFSAL);
 
   81  stepper->initialize();
 
   82  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   83  stepper->setICConsistency(ICConsistency);
 
   84  stepper->initialize();
 
   85  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   86  stepper->setICConsistencyCheck(ICConsistencyCheck);
 
   87  stepper->initialize();
 
   88  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   89  stepper->setZeroInitialGuess(zeroInitialGuess);
 
   90  stepper->initialize();
 
   91  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   95      model, solver, predictorStepper, useFSAL, ICConsistency,
 
   96      ICConsistencyCheck, zeroInitialGuess, modifier));
 
   97  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
  100  TEUCHOS_ASSERT(stepper->getOrder() == 1);
 
 
  182  Teuchos::RCP<const Thyra::ModelEvaluator<double> > model =
 
  187  stepper->setModel(model);
 
  188  auto modifier = rcp(
new StepperBackwardEulerModifierTest());
 
  189  stepper->setAppAction(modifier);
 
  190  stepper->initialize();
 
  196  stepper->setInitialConditions(solutionHistory);
 
  197  solutionHistory->initWorkingState();
 
  199  solutionHistory->getWorkingState()->setTimeStep(dt);
 
  200  stepper->takeStep(solutionHistory);
 
  203  TEST_COMPARE(modifier->testBEGIN_STEP, ==, 
true);
 
  204  TEST_COMPARE(modifier->testBEFORE_SOLVE, ==, 
true);
 
  205  TEST_COMPARE(modifier->testAFTER_SOLVE, ==, 
true);
 
  206  TEST_COMPARE(modifier->testEND_STEP, ==, 
true);
 
  209  auto x = solutionHistory->getCurrentState()->getX();
 
  210  TEST_FLOATING_EQUALITY(modifier->testCurrentValue, get_ele(*(x), 0), 1.0e-14);
 
  211  x = solutionHistory->getWorkingState()->getX();
 
  212  TEST_FLOATING_EQUALITY(modifier->testWorkingValue, get_ele(*(x), 0), 1.0e-14);
 
  213  auto Dt = solutionHistory->getWorkingState()->getTimeStep();
 
  214  TEST_FLOATING_EQUALITY(modifier->testDt, Dt, 1.0e-14);
 
  216  TEST_COMPARE(modifier->testName, ==, 
"Backward Euler - Modifier");
 
 
  288  Teuchos::RCP<const Thyra::ModelEvaluator<double> > model =
 
  293  stepper->setModel(model);
 
  294  auto observer = rcp(
new StepperBackwardEulerObserverTest());
 
  295  stepper->setAppAction(observer);
 
  296  stepper->initialize();
 
  302  stepper->setInitialConditions(solutionHistory);
 
  303  solutionHistory->initWorkingState();
 
  305  solutionHistory->getWorkingState()->setTimeStep(dt);
 
  306  stepper->takeStep(solutionHistory);
 
  309  TEST_COMPARE(observer->testBEGIN_STEP, ==, 
true);
 
  310  TEST_COMPARE(observer->testBEFORE_SOLVE, ==, 
true);
 
  311  TEST_COMPARE(observer->testAFTER_SOLVE, ==, 
true);
 
  312  TEST_COMPARE(observer->testEND_STEP, ==, 
true);
 
  315  auto x = solutionHistory->getCurrentState()->getX();
 
  316  TEST_FLOATING_EQUALITY(observer->testCurrentValue, get_ele(*(x), 0), 1.0e-14);
 
  317  x = solutionHistory->getWorkingState()->getX();
 
  318  TEST_FLOATING_EQUALITY(observer->testWorkingValue, get_ele(*(x), 0), 1.0e-14);
 
  319  TEST_FLOATING_EQUALITY(observer->testDt, dt, 1.0e-14);
 
  321  TEST_COMPARE(observer->testName, ==, 
"Backward Euler");
 
 
  390  Teuchos::RCP<const Thyra::ModelEvaluator<double> > model =
 
  395  stepper->setModel(model);
 
  396  auto modifierX = rcp(
new StepperBackwardEulerModifierXTest());
 
  397  stepper->setAppAction(modifierX);
 
  398  stepper->initialize();
 
  404  stepper->setInitialConditions(solutionHistory);
 
  405  solutionHistory->initWorkingState();
 
  407  solutionHistory->getWorkingState()->setTimeStep(dt);
 
  408  stepper->takeStep(solutionHistory);
 
  411  TEST_COMPARE(modifierX->testX_BEGIN_STEP, ==, 
true);
 
  412  TEST_COMPARE(modifierX->testX_BEFORE_SOLVE, ==, 
true);
 
  413  TEST_COMPARE(modifierX->testX_AFTER_SOLVE, ==, 
true);
 
  414  TEST_COMPARE(modifierX->testXDOT_END_STEP, ==, 
true);
 
  417  auto x = solutionHistory->getCurrentState()->getX();
 
  418  TEST_FLOATING_EQUALITY(modifierX->testX, get_ele(*(x), 0), 1.0e-14);
 
  420  auto xDot = solutionHistory->getWorkingState()->getXDot();
 
  421  if (xDot == Teuchos::null) xDot = stepper->getStepperXDot();
 
  423  TEST_FLOATING_EQUALITY(modifierX->testXDot, get_ele(*(xDot), 0), 1.0e-14);
 
  424  auto Dt = solutionHistory->getWorkingState()->getTimeStep();
 
  425  TEST_FLOATING_EQUALITY(modifierX->testDt, Dt, 1.0e-14);
 
  427  auto time = solutionHistory->getWorkingState()->getTime();
 
  428  TEST_FLOATING_EQUALITY(modifierX->testTime, time, 1.0e-14);
 
 
  436  RCP<ParameterList> pList =
 
  437      Teuchos::getParametersFromXmlFile(
"Tempus_BackwardEuler_SinCos.xml");
 
  440  RCP<ParameterList> scm_pl = sublist(pList, 
"SinCosModel", 
true);
 
  443  RCP<ParameterList> tempusPL = sublist(pList, 
"Tempus", 
true);
 
  447    RCP<Tempus::IntegratorBasic<double> > integrator =
 
  448        Tempus::createIntegratorBasic<double>(tempusPL, model);
 
  450    RCP<ParameterList> stepperPL = sublist(tempusPL, 
"Default Stepper", 
true);
 
  451    RCP<const ParameterList> defaultPL =
 
  452        integrator->getStepper()->getValidParameters();
 
  454    bool pass = haveSameValuesSorted(*stepperPL, *defaultPL, 
true);
 
  457      out << 
"stepperPL -------------- \n" 
  458          << *stepperPL << std::endl;
 
  459      out << 
"defaultPL -------------- \n" 
  460          << *defaultPL << std::endl;
 
  467    RCP<Tempus::IntegratorBasic<double> > integrator =
 
  468        Tempus::createIntegratorBasic<double>(model,
 
  469                                              std::string(
"Backward Euler"));
 
  471    RCP<ParameterList> stepperPL = sublist(tempusPL, 
"Default Stepper", 
true);
 
  473    stepperPL->set(
"Predictor Stepper Type", 
"None");
 
  474    RCP<const ParameterList> defaultPL =
 
  475        integrator->getStepper()->getValidParameters();
 
  477    bool pass = haveSameValuesSorted(*stepperPL, *defaultPL, 
true);
 
  480      out << 
"stepperPL -------------- \n" 
  481          << *stepperPL << std::endl;
 
  482      out << 
"defaultPL -------------- \n" 
  483          << *defaultPL << std::endl;
 
 
  494  std::vector<std::string> options;
 
  495  options.push_back(
"Default Parameters");
 
  496  options.push_back(
"ICConsistency and Check");
 
  498  for (
const auto& option : options) {
 
  500    RCP<ParameterList> pList =
 
  501        Teuchos::getParametersFromXmlFile(
"Tempus_BackwardEuler_SinCos.xml");
 
  502    RCP<ParameterList> pl = sublist(pList, 
"Tempus", 
true);
 
  505    RCP<ParameterList> scm_pl = sublist(pList, 
"SinCosModel", 
true);
 
  511    stepper->setModel(model);
 
  512    if (option == 
"ICConsistency and Check") {
 
  513      stepper->setICConsistency(
"Consistent");
 
  514      stepper->setICConsistencyCheck(
true);
 
  516    stepper->initialize();
 
  520    ParameterList tscPL =
 
  521        pl->sublist(
"Default Integrator").sublist(
"Time Step Control");
 
  522    timeStepControl->setInitIndex(tscPL.get<
int>(
"Initial Time Index"));
 
  523    timeStepControl->setInitTime(tscPL.get<
double>(
"Initial Time"));
 
  524    timeStepControl->setFinalTime(tscPL.get<
double>(
"Final Time"));
 
  525    timeStepControl->setInitTimeStep(dt);
 
  526    timeStepControl->initialize();
 
  529    auto inArgsIC = model->getNominalValues();
 
  531        rcp_const_cast<Thyra::VectorBase<double> >(inArgsIC.get_x());
 
  533    icState->setTime(timeStepControl->getInitTime());
 
  534    icState->setIndex(timeStepControl->getInitIndex());
 
  535    icState->setTimeStep(0.0);
 
  536    icState->setOrder(stepper->getOrder());
 
  541    solutionHistory->setName(
"Forward States");
 
  543    solutionHistory->setStorageLimit(2);
 
  544    solutionHistory->addState(icState);
 
  547    stepper->setInitialConditions(solutionHistory);
 
  550    RCP<Tempus::IntegratorBasic<double> > integrator =
 
  551        Tempus::createIntegratorBasic<double>();
 
  552    integrator->setStepper(stepper);
 
  553    integrator->setTimeStepControl(timeStepControl);
 
  554    integrator->setSolutionHistory(solutionHistory);
 
  556    integrator->initialize();
 
  559    bool integratorStatus = integrator->advanceTime();
 
  560    TEST_ASSERT(integratorStatus)
 
  563    double time      = integrator->getTime();
 
  564    double timeFinal = pl->sublist(
"Default Integrator")
 
  565                           .sublist(
"Time Step Control")
 
  566                           .get<
double>(
"Final Time");
 
  567    TEST_FLOATING_EQUALITY(time, timeFinal, 1.0e-14);
 
  570    RCP<Thyra::VectorBase<double> > x = integrator->getX();
 
  571    RCP<const Thyra::VectorBase<double> > x_exact =
 
  572        model->getExactSolution(time).get_x();
 
  575    RCP<Thyra::VectorBase<double> > xdiff = x->clone_v();
 
  576    Thyra::V_StVpStV(xdiff.ptr(), 1.0, *x_exact, -1.0, *(x));
 
  579    out << 
"  Stepper = " << stepper->description() << 
" with " << option
 
  581    out << 
"  =========================" << std::endl;
 
  582    out << 
"  Exact solution   : " << get_ele(*(x_exact), 0) << 
"   " 
  583        << get_ele(*(x_exact), 1) << std::endl;
 
  584    out << 
"  Computed solution: " << get_ele(*(x), 0) << 
"   " 
  585        << get_ele(*(x), 1) << std::endl;
 
  586    out << 
"  Difference       : " << get_ele(*(xdiff), 0) << 
"   " 
  587        << get_ele(*(xdiff), 1) << std::endl;
 
  588    out << 
"  =========================" << std::endl;
 
  589    TEST_FLOATING_EQUALITY(get_ele(*(x), 0), 0.798923, 1.0e-4);
 
  590    TEST_FLOATING_EQUALITY(get_ele(*(x), 1), 0.516729, 1.0e-4);