42  RCP<ParameterList> pList = Teuchos::getParametersFromXmlFile(
 
   43      "Tempus_NewmarkImplicitDForm_HarmonicOscillator_Damped_SecondOrder.xml");
 
   44  RCP<ParameterList> pl = sublist(pList, 
"Tempus", 
true);
 
   47  RCP<ParameterList> hom_pl = sublist(pList, 
"HarmonicOscillatorModel", 
true);
 
   48  auto model                = Teuchos::rcp(
 
   50  auto modelME = rcp_dynamic_cast<const Thyra::ModelEvaluator<double>>(model);
 
   57  RCP<Tempus::TimeStepControl<double>> timeStepControl =
 
   60      pl->sublist(
"Default Integrator").sublist(
"Time Step Control");
 
   61  timeStepControl->setInitIndex(tscPL.get<
int>(
"Initial Time Index"));
 
   62  timeStepControl->setInitTime(tscPL.get<
double>(
"Initial Time"));
 
   63  timeStepControl->setFinalTime(tscPL.get<
double>(
"Final Time"));
 
   64  timeStepControl->setInitTimeStep(dt);
 
   65  timeStepControl->initialize();
 
   68  using Teuchos::rcp_const_cast;
 
   69  auto inArgsIC = model->getNominalValues();
 
   70  RCP<Thyra::VectorBase<double>> icX =
 
   71      rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x());
 
   72  RCP<Thyra::VectorBase<double>> icXDot =
 
   73      rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot());
 
   74  RCP<Thyra::VectorBase<double>> icXDotDot =
 
   75      rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot_dot());
 
   76  RCP<Tempus::SolutionState<double>> icState =
 
   78  icState->setTime(timeStepControl->getInitTime());
 
   79  icState->setIndex(timeStepControl->getInitIndex());
 
   80  icState->setTimeStep(0.0);
 
   81  icState->setOrder(stepper->getOrder());
 
   85  RCP<Tempus::SolutionHistory<double>> solutionHistory =
 
   87  solutionHistory->setName(
"Forward States");
 
   89  solutionHistory->setStorageLimit(2);
 
   90  solutionHistory->addState(icState);
 
   93  RCP<Tempus::IntegratorBasic<double>> integrator =
 
   94      Tempus::createIntegratorBasic<double>();
 
   95  integrator->setStepper(stepper);
 
   96  integrator->setTimeStepControl(timeStepControl);
 
   97  integrator->setSolutionHistory(solutionHistory);
 
   99  integrator->initialize();
 
  102  bool integratorStatus = integrator->advanceTime();
 
  103  TEST_ASSERT(integratorStatus)
 
  106  double time      = integrator->getTime();
 
  107  double timeFinal = pl->sublist(
"Default Integrator")
 
  108                         .sublist(
"Time Step Control")
 
  109                         .get<
double>(
"Final Time");
 
  110  TEST_FLOATING_EQUALITY(time, timeFinal, 1.0e-14);
 
  113  RCP<Thyra::VectorBase<double>> x = integrator->getX();
 
  114  RCP<const Thyra::VectorBase<double>> x_exact =
 
  115      model->getExactSolution(time).get_x();
 
  118  RCP<Thyra::VectorBase<double>> xdiff = x->clone_v();
 
  119  Thyra::V_StVpStV(xdiff.ptr(), 1.0, *x_exact, -1.0, *(x));
 
  122  out << 
"  Stepper = " << stepper->description() << std::endl;
 
  123  out << 
"  =========================" << std::endl;
 
  124  out << 
"  Exact solution   : " << get_ele(*(x_exact), 0) << std::endl;
 
  125  out << 
"  Computed solution: " << get_ele(*(x), 0) << std::endl;
 
  126  out << 
"  Difference       : " << get_ele(*(xdiff), 0) << std::endl;
 
  127  out << 
"  =========================" << std::endl;
 
  128  TEST_FLOATING_EQUALITY(get_ele(*(x), 0), -0.222222, 1.0e-4);
 
 
  269  stepper->setModel(model);
 
  270  stepper->initialize();
 
  271  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
  282  bool useFSAL              = stepper->getUseFSAL();
 
  283  std::string ICConsistency = stepper->getICConsistency();
 
  284  bool ICConsistencyCheck   = stepper->getICConsistencyCheck();
 
  285  bool zeroInitialGuess     = stepper->getZeroInitialGuess();
 
  286  std::string schemeName    = 
"Average Acceleration";
 
  291  stepper->setAppAction(modifier);
 
  292  stepper->initialize();
 
  293  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
  294  stepper->setAppAction(modifierX);
 
  295  stepper->initialize();
 
  296  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
  297  stepper->setSolver(solver);
 
  298  stepper->initialize();
 
  299  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
  300  stepper->setUseFSAL(useFSAL);
 
  301  stepper->initialize();
 
  302  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
  303  stepper->setICConsistency(ICConsistency);
 
  304  stepper->initialize();
 
  305  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
  306  stepper->setICConsistencyCheck(ICConsistencyCheck);
 
  307  stepper->initialize();
 
  308  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
  309  stepper->setZeroInitialGuess(zeroInitialGuess);
 
  310  stepper->initialize();
 
  311  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
  313  stepper->setSchemeName(schemeName);
 
  314  stepper->initialize();
 
  315  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
  316  stepper->setBeta(beta);
 
  317  stepper->initialize();
 
  318  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
  319  stepper->setGamma(gamma);
 
  320  stepper->initialize();
 
  321  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
  325      model, solver, useFSAL, ICConsistency, ICConsistencyCheck,
 
  326      zeroInitialGuess, schemeName, beta, gamma, modifier));
 
  327  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
  330  TEUCHOS_ASSERT(stepper->getOrder() == 2);
 
 
  343  using Teuchos::ParameterList;
 
  345  using Teuchos::sublist;
 
  350  RCP<ParameterList> pList = Teuchos::getParametersFromXmlFile(
 
  351      "Tempus_NewmarkImplicitAForm_HarmonicOscillator_Damped_SecondOrder.xml");
 
  352  RCP<ParameterList> pl = sublist(pList, 
"Tempus", 
true);
 
  355  RCP<ParameterList> hom_pl = sublist(pList, 
"HarmonicOscillatorModel", 
true);
 
  356  RCP<const Thyra::ModelEvaluator<double>> model =
 
  360  RCP<Tempus::StepperNewmarkImplicitDForm<double>> stepper =
 
  363  auto modifier = rcp(
new StepperNewmarkImplicitDFormModifierTest());
 
  364  stepper->setAppAction(modifier);
 
  365  stepper->initialize();
 
  368  RCP<Tempus::TimeStepControl<double>> timeStepControl =
 
  370  ParameterList tscPL =
 
  371      pl->sublist(
"Default Integrator").sublist(
"Time Step Control");
 
  372  timeStepControl->setInitIndex(tscPL.get<
int>(
"Initial Time Index"));
 
  373  timeStepControl->setInitTime(tscPL.get<
double>(
"Initial Time"));
 
  374  timeStepControl->setFinalTime(dt);
 
  375  timeStepControl->setInitTimeStep(dt);
 
  376  timeStepControl->initialize();
 
  379  using Teuchos::rcp_const_cast;
 
  380  auto inArgsIC = model->getNominalValues();
 
  381  RCP<Thyra::VectorBase<double>> icX =
 
  382      rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x());
 
  383  RCP<Thyra::VectorBase<double>> icXDot =
 
  384      rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot());
 
  385  RCP<Thyra::VectorBase<double>> icXDotDot =
 
  386      rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot_dot());
 
  387  RCP<Tempus::SolutionState<double>> icState =
 
  389  icState->setTime(timeStepControl->getInitTime());
 
  390  icState->setIndex(timeStepControl->getInitIndex());
 
  391  icState->setTimeStep(0.0);
 
  392  icState->setOrder(stepper->getOrder());
 
  396  RCP<Tempus::SolutionHistory<double>> solutionHistory =
 
  398  solutionHistory->setName(
"Forward States");
 
  400  solutionHistory->setStorageLimit(2);
 
  401  solutionHistory->addState(icState);
 
  404  RCP<Tempus::IntegratorBasic<double>> integrator =
 
  405      Tempus::createIntegratorBasic<double>();
 
  406  integrator->setStepper(stepper);
 
  407  integrator->setTimeStepControl(timeStepControl);
 
  408  integrator->setSolutionHistory(solutionHistory);
 
  409  integrator->initialize();
 
  412  bool integratorStatus = integrator->advanceTime();
 
  413  TEST_ASSERT(integratorStatus)
 
  416  TEST_COMPARE(modifier->testBEGIN_STEP, ==, 
true);
 
  417  TEST_COMPARE(modifier->testBEFORE_SOLVE, ==, 
true);
 
  418  TEST_COMPARE(modifier->testAFTER_SOLVE, ==, 
true);
 
  419  TEST_COMPARE(modifier->testEND_STEP, ==, 
true);
 
  422  auto x  = integrator->getX();
 
  423  auto Dt = integrator->getTime();
 
  424  TEST_FLOATING_EQUALITY(modifier->testDt, Dt, 1.0e-14);
 
  425  TEST_FLOATING_EQUALITY(modifier->testCurrentValue, get_ele(*(x), 0), 1.0e-14);
 
  426  TEST_COMPARE(modifier->testName, ==, stepper->getStepperName());
 
 
  431  using Teuchos::ParameterList;
 
  433  using Teuchos::sublist;
 
  438  RCP<ParameterList> pList = Teuchos::getParametersFromXmlFile(
 
  439      "Tempus_NewmarkImplicitAForm_HarmonicOscillator_Damped_SecondOrder.xml");
 
  440  RCP<ParameterList> pl = sublist(pList, 
"Tempus", 
true);
 
  443  RCP<ParameterList> hom_pl = sublist(pList, 
"HarmonicOscillatorModel", 
true);
 
  444  RCP<const Thyra::ModelEvaluator<double>> model =
 
  448  RCP<Tempus::StepperNewmarkImplicitDForm<double>> stepper =
 
  451  auto modifierX = rcp(
new StepperNewmarkImplicitDFormModifierXTest());
 
  452  stepper->setAppAction(modifierX);
 
  453  stepper->initialize();
 
  456  RCP<Tempus::TimeStepControl<double>> timeStepControl =
 
  458  ParameterList tscPL =
 
  459      pl->sublist(
"Default Integrator").sublist(
"Time Step Control");
 
  460  timeStepControl->setInitIndex(tscPL.get<
int>(
"Initial Time Index"));
 
  461  timeStepControl->setInitTime(tscPL.get<
double>(
"Initial Time"));
 
  462  timeStepControl->setFinalTime(dt);
 
  463  timeStepControl->setInitTimeStep(dt);
 
  464  timeStepControl->initialize();
 
  467  using Teuchos::rcp_const_cast;
 
  468  auto inArgsIC = model->getNominalValues();
 
  469  RCP<Thyra::VectorBase<double>> icX =
 
  470      rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x());
 
  471  RCP<Thyra::VectorBase<double>> icXDot =
 
  472      rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot());
 
  473  RCP<Thyra::VectorBase<double>> icXDotDot =
 
  474      rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x_dot_dot());
 
  475  RCP<Tempus::SolutionState<double>> icState =
 
  477  icState->setTime(timeStepControl->getInitTime());
 
  478  icState->setIndex(timeStepControl->getInitIndex());
 
  479  icState->setTimeStep(0.0);
 
  480  icState->setOrder(stepper->getOrder());
 
  484  RCP<Tempus::SolutionHistory<double>> solutionHistory =
 
  486  solutionHistory->setName(
"Forward States");
 
  488  solutionHistory->setStorageLimit(2);
 
  489  solutionHistory->addState(icState);
 
  492  RCP<Tempus::IntegratorBasic<double>> integrator =
 
  493      Tempus::createIntegratorBasic<double>();
 
  494  integrator->setStepper(stepper);
 
  495  integrator->setTimeStepControl(timeStepControl);
 
  496  integrator->setSolutionHistory(solutionHistory);
 
  497  integrator->initialize();
 
  500  bool integratorStatus = integrator->advanceTime();
 
  501  TEST_ASSERT(integratorStatus)
 
  504  TEST_COMPARE(modifierX->testX_BEGIN_STEP, ==, 
true);
 
  505  TEST_COMPARE(modifierX->testX_BEFORE_SOLVE, ==, 
true);
 
  506  TEST_COMPARE(modifierX->testX_AFTER_SOLVE, ==, 
true);
 
  507  TEST_COMPARE(modifierX->testX_END_STEP, ==, 
true);
 
  510  auto Dt = integrator->getTime();
 
  511  TEST_FLOATING_EQUALITY(modifierX->testDt, Dt, 1.0e-14);
 
  513  const auto x = integrator->getX();
 
  514  TEST_FLOATING_EQUALITY(modifierX->testX, get_ele(*(x), 0), 1.0e-14);
 
 
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...