12#include "Tempus_StepperForwardEuler.hpp" 
   13#include "Tempus_StepperBackwardEuler.hpp" 
   15#include "Tempus_StepperSubcycling.hpp" 
   25using Teuchos::ParameterList;
 
   28using Teuchos::rcp_const_cast;
 
   29using Teuchos::rcp_dynamic_cast;
 
   30using Teuchos::sublist;
 
   39  auto modelME = rcp_dynamic_cast<const Thyra::ModelEvaluator<double> >(model);
 
   42  auto inArgsIC = model->getNominalValues();
 
   44      rcp_const_cast<Thyra::VectorBase<double> >(inArgsIC.get_x());
 
   47  solutionHistory->addState(icState);
 
   48  solutionHistory->initWorkingState();
 
   53  stepper->setSubcyclingStepper(stepperBE);
 
   54  stepper->setInitialConditions(solutionHistory);
 
   55  stepper->initialize();
 
   56  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   65  bool useFSAL              = stepper->getUseFSAL();
 
   66  std::string ICConsistency = stepper->getICConsistency();
 
   67  bool ICConsistencyCheck   = stepper->getICConsistencyCheck();
 
   70  stepper->setSolver(solver);
 
   71  stepper->initialize();
 
   72  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   73  stepper->setAppAction(modifier);
 
   74  stepper->initialize();
 
   75  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   76  stepper->setAppAction(modifierX);
 
   77  stepper->initialize();
 
   78  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   79  stepper->setAppAction(observer);
 
   80  stepper->initialize();
 
   81  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   82  stepper->setUseFSAL(useFSAL);
 
   83  stepper->initialize();
 
   84  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   85  stepper->setICConsistency(ICConsistency);
 
   86  stepper->initialize();
 
   87  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   88  stepper->setICConsistencyCheck(ICConsistencyCheck);
 
   89  stepper->initialize();
 
   90  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   95  scIntegrator->setStepper(stepperFE);
 
   96  scIntegrator->setSolutionHistory(solutionHistory);
 
   97  scIntegrator->initialize();
 
  100      model, scIntegrator, useFSAL, ICConsistency, ICConsistencyCheck,
 
  102  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
  105  TEUCHOS_ASSERT(stepper->getOrder() == 1);
 
 
  114  auto modelME   = rcp_dynamic_cast<const Thyra::ModelEvaluator<double> >(model);
 
  117  stepper->setSubcyclingStepper(stepperBE);
 
  120  auto inArgsIC = model->getNominalValues();
 
  122      rcp_const_cast<Thyra::VectorBase<double> >(inArgsIC.get_x());
 
  125  solutionHistory->addState(icState);
 
  126  solutionHistory->initWorkingState();
 
  129  stepper->setInitialConditions(solutionHistory);
 
  130  stepper->initialize();
 
  133  stepper->setSubcyclingInitTimeStep(0.25);
 
  134  stepper->setSubcyclingMaxTimeStep(0.5);
 
  135  double maxTimeStep_Set = stepper->getSubcyclingMaxTimeStep();
 
  136  stepper->takeStep(solutionHistory);
 
  137  double maxTimeStep_After = stepper->getSubcyclingMaxTimeStep();
 
  139  TEST_FLOATING_EQUALITY(maxTimeStep_Set, maxTimeStep_After, 1.0e-14);
 
 
  144class StepperSubcyclingModifierTest
 
  148  StepperSubcyclingModifierTest()
 
  149    : testBEGIN_STEP(false),
 
  151      testCurrentValue(-0.99),
 
  152      testWorkingValue(-0.99),
 
  158  virtual ~StepperSubcyclingModifierTest() {}
 
  168      case StepperSubcyclingAppAction<double>::BEGIN_STEP: {
 
  169        testBEGIN_STEP   = 
true;
 
  170        auto x           = sh->getCurrentState()->getX();
 
  171        testCurrentValue = get_ele(*(x), 0);
 
  172        testName         = 
"Subcycling - Modifier";
 
  173        stepper->setStepperName(testName);
 
  176      case StepperSubcyclingAppAction<double>::END_STEP: {
 
  178        auto x           = sh->getWorkingState()->getX();
 
  179        testWorkingValue = get_ele(*(x), 0);
 
  180        testDt           = sh->getWorkingState()->getTimeStep() / 10.0;
 
  181        sh->getWorkingState()->setTimeStep(testDt);
 
  185        TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
 
  186                                   "Error - unknown action location.\n");
 
  192  double testCurrentValue;
 
  193  double testWorkingValue;
 
  195  std::string testName;
 
  202  auto modelME = rcp_dynamic_cast<const Thyra::ModelEvaluator<double> >(model);
 
  207  auto modifier  = rcp(
new StepperSubcyclingModifierTest());
 
  208  stepper->setAppAction(modifier);
 
  209  stepper->setSubcyclingStepper(stepperFE);
 
  211  stepper->setSubcyclingMinTimeStep(15);
 
  212  stepper->setSubcyclingInitTimeStep(15.0);
 
  213  stepper->setSubcyclingMaxTimeStep(15.0);
 
  214  stepper->setSubcyclingMaxFailures(10);
 
  215  stepper->setSubcyclingMaxConsecFailures(5);
 
  216  stepper->setSubcyclingScreenOutputIndexInterval(1);
 
  217  stepper->setSubcyclingPrintDtChanges(
true);
 
  221  timeStepControl->setInitIndex(0);
 
  222  timeStepControl->setInitTime(0.0);
 
  223  timeStepControl->setFinalTime(1.0);
 
  224  timeStepControl->setInitTimeStep(15.0);
 
  225  timeStepControl->initialize();
 
  228  auto inArgsIC = model->getNominalValues();
 
  230      rcp_const_cast<Thyra::VectorBase<double> >(inArgsIC.get_x());
 
  232  icState->setTime(timeStepControl->getInitTime());
 
  233  icState->setIndex(timeStepControl->getInitIndex());
 
  234  icState->setTimeStep(0.0);                           
 
  239  solutionHistory->setName(
"Forward States");
 
  241  solutionHistory->setStorageLimit(2);
 
  242  solutionHistory->addState(icState);
 
  245  stepper->setInitialConditions(solutionHistory);
 
  246  stepper->initialize();
 
  249  stepper->setInitialConditions(solutionHistory);
 
  250  solutionHistory->initWorkingState();
 
  251  solutionHistory->getWorkingState()->setTimeStep(15.0);
 
  252  stepper->takeStep(solutionHistory);
 
  255  TEST_COMPARE(modifier->testBEGIN_STEP, ==, 
true);
 
  256  TEST_COMPARE(modifier->testEND_STEP, ==, 
true);
 
  259  auto x = solutionHistory->getCurrentState()->getX();
 
  260  TEST_FLOATING_EQUALITY(modifier->testCurrentValue, get_ele(*(x), 0), 1.0e-14);
 
  261  x = solutionHistory->getWorkingState()->getX();
 
  262  TEST_FLOATING_EQUALITY(modifier->testWorkingValue, get_ele(*(x), 0), 1.0e-14);
 
  263  auto Dt = solutionHistory->getWorkingState()->getTimeStep();
 
  264  TEST_FLOATING_EQUALITY(modifier->testDt, Dt, 1.0e-14);
 
  266  TEST_COMPARE(modifier->testName, ==, 
"Subcycling - Modifier");
 
 
  271class StepperSubcyclingObserverTest
 
  275  StepperSubcyclingObserverTest()
 
  276    : testBEGIN_STEP(false),
 
  278      testCurrentValue(-0.99),
 
  279      testWorkingValue(-0.99),
 
  281      testName(
"Subcyling")
 
  286  virtual ~StepperSubcyclingObserverTest() {}
 
  289  virtual void observe(
 
  296      case StepperSubcyclingAppAction<double>::BEGIN_STEP: {
 
  297        testBEGIN_STEP   = 
true;
 
  298        auto x           = sh->getCurrentState()->getX();
 
  299        testCurrentValue = get_ele(*(x), 0);
 
  302      case StepperSubcyclingAppAction<double>::END_STEP: {
 
  304        auto x           = sh->getWorkingState()->getX();
 
  305        testWorkingValue = get_ele(*(x), 0);
 
  309        TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
 
  310                                   "Error - unknown action location.\n");
 
  316  double testCurrentValue;
 
  317  double testWorkingValue;
 
  319  std::string testName;
 
  326  auto modelME = rcp_dynamic_cast<const Thyra::ModelEvaluator<double> >(model);
 
  331  auto observer  = rcp(
new StepperSubcyclingObserverTest());
 
  332  stepper->setAppAction(observer);
 
  333  stepper->setSubcyclingStepper(stepperFE);
 
  335  stepper->setSubcyclingMinTimeStep(15);
 
  336  stepper->setSubcyclingInitTimeStep(15.0);
 
  337  stepper->setSubcyclingMaxTimeStep(15.0);
 
  338  stepper->setSubcyclingMaxFailures(10);
 
  339  stepper->setSubcyclingMaxConsecFailures(5);
 
  340  stepper->setSubcyclingScreenOutputIndexInterval(1);
 
  341  stepper->setSubcyclingPrintDtChanges(
true);
 
  345  timeStepControl->setInitIndex(0);
 
  346  timeStepControl->setInitTime(0.0);
 
  347  timeStepControl->setFinalTime(1.0);
 
  348  timeStepControl->setInitTimeStep(15.0);
 
  349  timeStepControl->initialize();
 
  352  auto inArgsIC = model->getNominalValues();
 
  354      rcp_const_cast<Thyra::VectorBase<double> >(inArgsIC.get_x());
 
  356  icState->setTime(timeStepControl->getInitTime());
 
  357  icState->setIndex(timeStepControl->getInitIndex());
 
  358  icState->setTimeStep(0.0);                           
 
  363  solutionHistory->setName(
"Forward States");
 
  365  solutionHistory->setStorageLimit(2);
 
  366  solutionHistory->addState(icState);
 
  369  stepper->setInitialConditions(solutionHistory);
 
  370  stepper->initialize();
 
  373  stepper->setInitialConditions(solutionHistory);
 
  374  solutionHistory->initWorkingState();
 
  375  solutionHistory->getWorkingState()->setTimeStep(15.0);
 
  376  stepper->takeStep(solutionHistory);
 
  379  TEST_COMPARE(observer->testBEGIN_STEP, ==, 
true);
 
  380  TEST_COMPARE(observer->testEND_STEP, ==, 
true);
 
  383  auto x = solutionHistory->getCurrentState()->getX();
 
  384  TEST_FLOATING_EQUALITY(observer->testCurrentValue, get_ele(*(x), 0), 1.0e-14);
 
  385  x = solutionHistory->getWorkingState()->getX();
 
  386  TEST_FLOATING_EQUALITY(observer->testWorkingValue, get_ele(*(x), 0), 1.0e-14);
 
  387  TEST_FLOATING_EQUALITY(observer->testDt, 15.0, 1.0e-14);
 
  389  TEST_COMPARE(observer->testName, ==, 
"Subcyling");
 
 
  394class StepperSubcyclingModifierXTest
 
  398  StepperSubcyclingModifierXTest()
 
  399    : testX_BEGIN_STEP(false),
 
  400      testXDOT_END_STEP(false),
 
  409  virtual ~StepperSubcyclingModifierXTest() {}
 
  413                      const double time, 
const double dt,
 
  418      case StepperSubcyclingModifierXBase<double>::X_BEGIN_STEP: {
 
  419        testX_BEGIN_STEP = 
true;
 
  420        testX            = get_ele(*(x), 0);
 
  424      case StepperSubcyclingModifierXBase<double>::XDOT_END_STEP: {
 
  425        testXDOT_END_STEP = 
true;
 
  426        testXDot          = get_ele(*(x), 0);
 
  431        TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
 
  432                                   "Error - unknown action location.\n");
 
  436  bool testX_BEGIN_STEP;
 
  437  bool testXDOT_END_STEP;
 
  448  auto modelME = rcp_dynamic_cast<const Thyra::ModelEvaluator<double> >(model);
 
  453  auto modifierX = rcp(
new StepperSubcyclingModifierXTest());
 
  454  stepper->setAppAction(modifierX);
 
  455  stepper->setSubcyclingStepper(stepperFE);
 
  457  stepper->setSubcyclingMinTimeStep(15);
 
  458  stepper->setSubcyclingInitTimeStep(15.0);
 
  459  stepper->setSubcyclingMaxTimeStep(15.0);
 
  460  stepper->setSubcyclingMaxFailures(10);
 
  461  stepper->setSubcyclingMaxConsecFailures(5);
 
  462  stepper->setSubcyclingScreenOutputIndexInterval(1);
 
  463  stepper->setSubcyclingPrintDtChanges(
true);
 
  467  timeStepControl->setInitIndex(0);
 
  468  timeStepControl->setInitTime(0.0);
 
  469  timeStepControl->setFinalTime(1.0);
 
  470  timeStepControl->setInitTimeStep(15.0);
 
  471  timeStepControl->initialize();
 
  474  auto inArgsIC = model->getNominalValues();
 
  476      rcp_const_cast<Thyra::VectorBase<double> >(inArgsIC.get_x());
 
  478      rcp_const_cast<Thyra::VectorBase<double> >(inArgsIC.get_x_dot());
 
  480  icState->setTime(timeStepControl->getInitTime());
 
  481  icState->setIndex(timeStepControl->getInitIndex());
 
  482  icState->setTimeStep(0.0);                           
 
  487  solutionHistory->setName(
"Forward States");
 
  489  solutionHistory->setStorageLimit(2);
 
  490  solutionHistory->addState(icState);
 
  493  stepper->setInitialConditions(solutionHistory);
 
  494  stepper->initialize();
 
  497  stepper->setInitialConditions(solutionHistory);
 
  498  solutionHistory->initWorkingState();
 
  499  solutionHistory->getWorkingState()->setTimeStep(15.0);
 
  500  stepper->takeStep(solutionHistory);
 
  503  stepper->setInitialConditions(solutionHistory);
 
  504  solutionHistory->initWorkingState();
 
  505  solutionHistory->getWorkingState()->setTimeStep(15.0);
 
  506  stepper->takeStep(solutionHistory);
 
  509  TEST_COMPARE(modifierX->testX_BEGIN_STEP, ==, 
true);
 
  510  TEST_COMPARE(modifierX->testXDOT_END_STEP, ==, 
true);
 
  513  auto x = solutionHistory->getCurrentState()->getX();
 
  514  TEST_FLOATING_EQUALITY(modifierX->testX, get_ele(*(x), 0), 1.0e-14);
 
  516  auto xDot = solutionHistory->getWorkingState()->getXDot();
 
  517  if (xDot == Teuchos::null) xDot = stepper->getStepperXDot();
 
  519  TEST_FLOATING_EQUALITY(modifierX->testXDot, get_ele(*(xDot), 0), 1.0e-14);
 
  520  auto Dt = solutionHistory->getWorkingState()->getTimeStep();
 
  521  TEST_FLOATING_EQUALITY(modifierX->testDt, Dt, 1.0e-14);
 
  523  auto time = solutionHistory->getWorkingState()->getTime();
 
  524  TEST_FLOATING_EQUALITY(modifierX->testTime, time, 1.0e-14);
 
 
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
 
ACTION_LOCATION
Indicates the location of application action (see algorithm).
 
Base modifier for StepperSubcycling.
 
Default modifier for StepperSubcycling.
 
Base ModifierX for StepperSubcycling.
 
MODIFIER_TYPE
Indicates the location of application action (see algorithm).
 
virtual void modify(Teuchos::RCP< Thyra::VectorBase< double > >, const double, const double, const MODIFIER_TYPE modType)=0
Modify solution based on the MODIFIER_TYPE.
 
Default ModifierX for StepperSubcycling.
 
Base observer for StepperSubcycling.
 
Default observer for StepperSubcycling.
 
TimeStepControl manages the time step size. There several mechanisms that effect the time step size a...
 
Sine-Cosine model problem from Rythmos. This is a canonical Sine-Cosine differential equation.
 
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)
 
@ STORAGE_TYPE_STATIC
Keep a fix number of states.
 
Teuchos::RCP< StepperBackwardEuler< Scalar > > createStepperBackwardEuler(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
 
Teuchos::RCP< SolutionState< Scalar > > createSolutionStateX(const Teuchos::RCP< Thyra::VectorBase< Scalar > > &x, const Teuchos::RCP< Thyra::VectorBase< Scalar > > &xdot=Teuchos::null, const Teuchos::RCP< Thyra::VectorBase< Scalar > > &xdotdot=Teuchos::null)
Nonmember constructor from non-const solution vectors, x.
 
Teuchos::RCP< StepperForwardEuler< Scalar > > createStepperForwardEuler(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
 
Teuchos::RCP< Teuchos::ParameterList > defaultSolverParameters()
Returns the default solver ParameterList for implicit Steppers.