43  stepper->setModel(model);
 
   44  stepper->initialize();
 
   45  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   56  bool useFSAL              = stepper->getUseFSAL();
 
   57  std::string ICConsistency = stepper->getICConsistency();
 
   58  bool ICConsistencyCheck   = stepper->getICConsistencyCheck();
 
   59  bool zeroInitialGuess     = stepper->getZeroInitialGuess();
 
   60  std::string schemeName    = 
"Average Acceleration";
 
   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->setSolver(solver);
 
   72  stepper->initialize();
 
   73  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   74  stepper->setUseFSAL(useFSAL);
 
   75  stepper->initialize();
 
   76  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   77  stepper->setICConsistency(ICConsistency);
 
   78  stepper->initialize();
 
   79  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   80  stepper->setICConsistencyCheck(ICConsistencyCheck);
 
   81  stepper->initialize();
 
   82  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   83  stepper->setZeroInitialGuess(zeroInitialGuess);
 
   84  stepper->initialize();
 
   85  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   87  stepper->setSchemeName(schemeName);
 
   88  stepper->initialize();
 
   89  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   90  stepper->setBeta(beta);
 
   91  stepper->initialize();
 
   92  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   93  stepper->setGamma(gamma);
 
   94  stepper->initialize();
 
   95  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   99      model, solver, useFSAL, ICConsistency, ICConsistencyCheck,
 
  100      zeroInitialGuess, schemeName, beta, gamma, modifier));
 
  101  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
  104  TEUCHOS_ASSERT(stepper->getOrder() == 2);
 
 
  120  std::vector<std::string> options;
 
  121  options.push_back(
"Default Parameters");
 
  122  options.push_back(
"ICConsistency and Check");
 
  124  for (
const auto& option : options) {
 
  126    RCP<ParameterList> pList = Teuchos::getParametersFromXmlFile(
 
  127        "Tempus_NewmarkImplicitAForm_HarmonicOscillator_Damped_SecondOrder." 
  129    RCP<ParameterList> pl = sublist(pList, 
"Tempus", 
true);
 
  132    RCP<ParameterList> hom_pl = sublist(pList, 
"HarmonicOscillatorModel", 
true);
 
  135    auto modelME = rcp_dynamic_cast<const Thyra::ModelEvaluator<double>>(model);
 
  138    RCP<Tempus::StepperNewmarkImplicitAForm<double>> stepper =
 
  140    if (option == 
"ICConsistency and Check") {
 
  141      stepper->setICConsistency(
"Consistent");
 
  142      stepper->setICConsistencyCheck(
true);
 
  144    stepper->initialize();
 
  147    RCP<Tempus::TimeStepControl<double>> timeStepControl =
 
  149    ParameterList tscPL =
 
  150        pl->sublist(
"Default Integrator").sublist(
"Time Step Control");
 
  151    timeStepControl->setInitIndex(tscPL.get<
int>(
"Initial Time Index"));
 
  152    timeStepControl->setInitTime(tscPL.get<
double>(
"Initial Time"));
 
  153    timeStepControl->setFinalTime(tscPL.get<
double>(
"Final Time"));
 
  154    timeStepControl->setInitTimeStep(dt);
 
  155    timeStepControl->initialize();
 
  158    using Teuchos::rcp_const_cast;
 
  159    auto inArgsIC = model->getNominalValues();
 
  160    RCP<Thyra::VectorBase<double>> icX =
 
  161        rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x());
 
  162    RCP<Thyra::VectorBase<double>> icXDot =
 
  163        rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot());
 
  164    RCP<Thyra::VectorBase<double>> icXDotDot =
 
  165        rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot_dot());
 
  166    RCP<Tempus::SolutionState<double>> icState =
 
  168    icState->setTime(timeStepControl->getInitTime());
 
  169    icState->setIndex(timeStepControl->getInitIndex());
 
  170    icState->setTimeStep(0.0);
 
  171    icState->setOrder(stepper->getOrder());
 
  175    RCP<Tempus::SolutionHistory<double>> solutionHistory =
 
  177    solutionHistory->setName(
"Forward States");
 
  179    solutionHistory->setStorageLimit(2);
 
  180    solutionHistory->addState(icState);
 
  183    stepper->setInitialConditions(solutionHistory);
 
  186    RCP<Tempus::IntegratorBasic<double>> integrator =
 
  187        Tempus::createIntegratorBasic<double>();
 
  188    integrator->setStepper(stepper);
 
  189    integrator->setTimeStepControl(timeStepControl);
 
  190    integrator->setSolutionHistory(solutionHistory);
 
  192    integrator->initialize();
 
  195    bool integratorStatus = integrator->advanceTime();
 
  196    TEST_ASSERT(integratorStatus)
 
  199    double time      = integrator->getTime();
 
  200    double timeFinal = pl->sublist(
"Default Integrator")
 
  201                           .sublist(
"Time Step Control")
 
  202                           .get<
double>(
"Final Time");
 
  203    TEST_FLOATING_EQUALITY(time, timeFinal, 1.0e-14);
 
  206    RCP<Thyra::VectorBase<double>> x = integrator->getX();
 
  207    RCP<const Thyra::VectorBase<double>> x_exact =
 
  208        model->getExactSolution(time).get_x();
 
  211    RCP<Thyra::VectorBase<double>> xdiff = x->clone_v();
 
  212    Thyra::V_StVpStV(xdiff.ptr(), 1.0, *x_exact, -1.0, *(x));
 
  215    out << 
"  Stepper = " << stepper->description() << 
"\n            with " 
  216        << option << std::endl;
 
  217    out << 
"  =========================" << std::endl;
 
  218    out << 
"  Exact solution   : " << get_ele(*(x_exact), 0) << std::endl;
 
  219    out << 
"  Computed solution: " << get_ele(*(x), 0) << std::endl;
 
  220    out << 
"  Difference       : " << get_ele(*(xdiff), 0) << std::endl;
 
  221    out << 
"  =========================" << std::endl;
 
  222    TEST_FLOATING_EQUALITY(get_ele(*(x), 0), -0.222222, 1.0e-4);
 
 
  359  using Teuchos::ParameterList;
 
  361  using Teuchos::sublist;
 
  366  RCP<ParameterList> pList = Teuchos::getParametersFromXmlFile(
 
  367      "Tempus_NewmarkImplicitAForm_HarmonicOscillator_Damped_SecondOrder.xml");
 
  368  RCP<ParameterList> pl = sublist(pList, 
"Tempus", 
true);
 
  371  RCP<ParameterList> hom_pl = sublist(pList, 
"HarmonicOscillatorModel", 
true);
 
  372  RCP<const Thyra::ModelEvaluator<double>> model =
 
  376  RCP<Tempus::StepperNewmarkImplicitAForm<double>> stepper =
 
  379  auto modifier = rcp(
new StepperNewmarkImplicitAFormModifierTest());
 
  380  stepper->setAppAction(modifier);
 
  381  stepper->initialize();
 
  384  RCP<Tempus::TimeStepControl<double>> timeStepControl =
 
  386  ParameterList tscPL =
 
  387      pl->sublist(
"Default Integrator").sublist(
"Time Step Control");
 
  388  timeStepControl->setInitIndex(tscPL.get<
int>(
"Initial Time Index"));
 
  389  timeStepControl->setInitTime(tscPL.get<
double>(
"Initial Time"));
 
  390  timeStepControl->setFinalTime(dt);
 
  391  timeStepControl->setInitTimeStep(dt);
 
  392  timeStepControl->initialize();
 
  395  using Teuchos::rcp_const_cast;
 
  396  auto inArgsIC = model->getNominalValues();
 
  397  RCP<Thyra::VectorBase<double>> icX =
 
  398      rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x());
 
  399  RCP<Thyra::VectorBase<double>> icXDot =
 
  400      rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot());
 
  401  RCP<Thyra::VectorBase<double>> icXDotDot =
 
  402      rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot_dot());
 
  403  RCP<Tempus::SolutionState<double>> icState =
 
  405  icState->setTime(timeStepControl->getInitTime());
 
  406  icState->setIndex(timeStepControl->getInitIndex());
 
  407  icState->setTimeStep(0.0);
 
  408  icState->setOrder(stepper->getOrder());
 
  412  RCP<Tempus::SolutionHistory<double>> solutionHistory =
 
  414  solutionHistory->setName(
"Forward States");
 
  416  solutionHistory->setStorageLimit(2);
 
  417  solutionHistory->addState(icState);
 
  420  RCP<Tempus::IntegratorBasic<double>> integrator =
 
  421      Tempus::createIntegratorBasic<double>();
 
  422  integrator->setStepper(stepper);
 
  423  integrator->setTimeStepControl(timeStepControl);
 
  424  integrator->setSolutionHistory(solutionHistory);
 
  425  integrator->initialize();
 
  428  bool integratorStatus = integrator->advanceTime();
 
  429  TEST_ASSERT(integratorStatus)
 
  432  TEST_COMPARE(modifier->testBEGIN_STEP, ==, 
true);
 
  433  TEST_COMPARE(modifier->testBEFORE_SOLVE, ==, 
true);
 
  434  TEST_COMPARE(modifier->testAFTER_SOLVE, ==, 
true);
 
  435  TEST_COMPARE(modifier->testEND_STEP, ==, 
true);
 
  438  auto x  = integrator->getX();
 
  439  auto Dt = integrator->getTime();
 
  440  TEST_FLOATING_EQUALITY(modifier->testDt, Dt, 1.0e-14);
 
  441  TEST_FLOATING_EQUALITY(modifier->testCurrentValue, get_ele(*(x), 0), 1.0e-14);
 
  442  TEST_COMPARE(modifier->testName, ==, stepper->getStepperName());
 
 
  447  using Teuchos::ParameterList;
 
  449  using Teuchos::sublist;
 
  454  RCP<ParameterList> pList = Teuchos::getParametersFromXmlFile(
 
  455      "Tempus_NewmarkImplicitAForm_HarmonicOscillator_Damped_SecondOrder.xml");
 
  456  RCP<ParameterList> pl = sublist(pList, 
"Tempus", 
true);
 
  459  RCP<ParameterList> hom_pl = sublist(pList, 
"HarmonicOscillatorModel", 
true);
 
  460  RCP<const Thyra::ModelEvaluator<double>> model =
 
  464  RCP<Tempus::StepperNewmarkImplicitAForm<double>> stepper =
 
  467  auto modifierX = rcp(
new StepperNewmarkImplicitAFormModifierXTest());
 
  468  stepper->setAppAction(modifierX);
 
  469  stepper->initialize();
 
  472  RCP<Tempus::TimeStepControl<double>> timeStepControl =
 
  474  ParameterList tscPL =
 
  475      pl->sublist(
"Default Integrator").sublist(
"Time Step Control");
 
  476  timeStepControl->setInitIndex(tscPL.get<
int>(
"Initial Time Index"));
 
  477  timeStepControl->setInitTime(tscPL.get<
double>(
"Initial Time"));
 
  478  timeStepControl->setFinalTime(dt);
 
  479  timeStepControl->setInitTimeStep(dt);
 
  480  timeStepControl->initialize();
 
  483  using Teuchos::rcp_const_cast;
 
  484  auto inArgsIC = model->getNominalValues();
 
  485  RCP<Thyra::VectorBase<double>> icX =
 
  486      rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x());
 
  487  RCP<Thyra::VectorBase<double>> icXDot =
 
  488      rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot());
 
  489  RCP<Thyra::VectorBase<double>> icXDotDot =
 
  490      rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot_dot());
 
  491  RCP<Tempus::SolutionState<double>> icState =
 
  493  icState->setTime(timeStepControl->getInitTime());
 
  494  icState->setIndex(timeStepControl->getInitIndex());
 
  495  icState->setTimeStep(0.0);
 
  496  icState->setOrder(stepper->getOrder());
 
  500  RCP<Tempus::SolutionHistory<double>> solutionHistory =
 
  502  solutionHistory->setName(
"Forward States");
 
  504  solutionHistory->setStorageLimit(2);
 
  505  solutionHistory->addState(icState);
 
  508  RCP<Tempus::IntegratorBasic<double>> integrator =
 
  509      Tempus::createIntegratorBasic<double>();
 
  510  integrator->setStepper(stepper);
 
  511  integrator->setTimeStepControl(timeStepControl);
 
  512  integrator->setSolutionHistory(solutionHistory);
 
  513  integrator->initialize();
 
  516  bool integratorStatus = integrator->advanceTime();
 
  517  TEST_ASSERT(integratorStatus)
 
  520  TEST_COMPARE(modifierX->testX_BEGIN_STEP, ==, 
true);
 
  521  TEST_COMPARE(modifierX->testX_BEFORE_SOLVE, ==, 
true);
 
  522  TEST_COMPARE(modifierX->testX_AFTER_SOLVE, ==, 
true);
 
  523  TEST_COMPARE(modifierX->testX_END_STEP, ==, 
true);
 
  526  auto Dt = integrator->getTime();
 
  527  TEST_FLOATING_EQUALITY(modifierX->testDt, Dt, 1.0e-14);
 
  529  const auto x = integrator->getX();
 
  530  TEST_FLOATING_EQUALITY(modifierX->testX, get_ele(*(x), 0), 1.0e-14);
 
 
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...