12#include "Tempus_StepperHHTAlpha.hpp" 
   20#include "../TestModels/HarmonicOscillatorModel.hpp" 
   24using Teuchos::ParameterList;
 
   27using Teuchos::rcp_const_cast;
 
   28using Teuchos::rcp_dynamic_cast;
 
   29using Teuchos::sublist;
 
   39  stepper->setModel(model);
 
   40  stepper->initialize();
 
   41  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   47  bool useFSAL              = stepper->getUseFSAL();
 
   48  std::string ICConsistency = stepper->getICConsistency();
 
   49  bool ICConsistencyCheck   = stepper->getICConsistencyCheck();
 
   50  bool zeroInitialGuess     = stepper->getZeroInitialGuess();
 
   51  std::string schemeName    = 
"Newmark Beta User Defined";
 
   62  stepper->setSolver(solver);
 
   63  stepper->initialize();
 
   64  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   65  stepper->setUseFSAL(useFSAL);
 
   66  stepper->initialize();
 
   67  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   68  stepper->setICConsistency(ICConsistency);
 
   69  stepper->initialize();
 
   70  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   71  stepper->setICConsistencyCheck(ICConsistencyCheck);
 
   72  stepper->initialize();
 
   73  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   74  stepper->setZeroInitialGuess(zeroInitialGuess);
 
   75  stepper->initialize();
 
   76  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   78  stepper->setAppAction(modifier);
 
   79  stepper->initialize();
 
   80  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   81  stepper->setAppAction(modifierX);
 
   82  stepper->initialize();
 
   83  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   84  stepper->setAppAction(observer);
 
   85  stepper->initialize();
 
   86  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   88  stepper->setSchemeName(schemeName);
 
   89  stepper->initialize();
 
   90  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   91  stepper->setBeta(beta);
 
   92  stepper->initialize();
 
   93  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   94  stepper->setGamma(gamma);
 
   95  stepper->initialize();
 
   96  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
   97  stepper->setAlphaF(alpha_f);
 
   98  stepper->initialize();
 
   99  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
  100  stepper->setAlphaM(alpha_m);
 
  101  stepper->initialize();
 
  102  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
  106      model, solver, useFSAL, ICConsistency, ICConsistencyCheck,
 
  107      zeroInitialGuess, schemeName, beta, gamma, alpha_f, alpha_m, modifier));
 
  108  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
 
  111  TEUCHOS_ASSERT(stepper->getOrder() == 2);
 
 
  124class StepperHHTAlphaModifierTest
 
  128  StepperHHTAlphaModifierTest()
 
  129    : testBEGIN_STEP(false),
 
  130      testBEFORE_SOLVE(false),
 
  131      testAFTER_SOLVE(false),
 
  133      testCurrentValue(-0.99),
 
  134      testWorkingValue(-0.99),
 
  141  virtual ~StepperHHTAlphaModifierTest() {}
 
  151      case StepperHHTAlphaAppAction<double>::BEGIN_STEP: {
 
  152        testBEGIN_STEP   = 
true;
 
  153        auto x           = sh->getCurrentState()->getX();
 
  154        testCurrentValue = get_ele(*(x), 0);
 
  157      case StepperHHTAlphaAppAction<double>::BEFORE_SOLVE: {
 
  158        testBEFORE_SOLVE = 
true;
 
  159        testDt           = sh->getWorkingState()->getTimeStep() / 10.0;
 
  160        sh->getWorkingState()->setTimeStep(testDt);
 
  163      case StepperHHTAlphaAppAction<double>::AFTER_SOLVE: {
 
  164        testAFTER_SOLVE = 
true;
 
  165        testName        = 
"HHT Alpha - Modifier";
 
  166        stepper->setStepperName(testName);
 
  169      case StepperHHTAlphaAppAction<double>::END_STEP: {
 
  171        auto x           = sh->getWorkingState()->getX();
 
  172        testWorkingValue = get_ele(*(x), 0);
 
  176        TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
 
  177                                   "Error - unknown action location.\n");
 
  181  bool testBEFORE_SOLVE;
 
  182  bool testAFTER_SOLVE;
 
  184  double testCurrentValue;
 
  185  double testWorkingValue;
 
  187  std::string testName;
 
  192  Teuchos::RCP<const Thyra::ModelEvaluator<double> > model =
 
  197  stepper->setModel(model);
 
  198  auto modifier = rcp(
new StepperHHTAlphaModifierTest());
 
  199  stepper->setAppAction(modifier);
 
  200  stepper->initialize();
 
  206  stepper->setInitialConditions(solutionHistory);
 
  207  solutionHistory->initWorkingState();
 
  209  solutionHistory->getWorkingState()->setTimeStep(dt);
 
  210  stepper->takeStep(solutionHistory);
 
  213  TEST_COMPARE(modifier->testBEGIN_STEP, ==, 
true);
 
  214  TEST_COMPARE(modifier->testBEFORE_SOLVE, ==, 
true);
 
  215  TEST_COMPARE(modifier->testAFTER_SOLVE, ==, 
true);
 
  216  TEST_COMPARE(modifier->testEND_STEP, ==, 
true);
 
  219  auto x = solutionHistory->getCurrentState()->getX();
 
  220  TEST_FLOATING_EQUALITY(modifier->testCurrentValue, get_ele(*(x), 0), 1.0e-14);
 
  221  x = solutionHistory->getWorkingState()->getX();
 
  222  TEST_FLOATING_EQUALITY(modifier->testWorkingValue, get_ele(*(x), 0), 1.0e-14);
 
  223  auto Dt = solutionHistory->getWorkingState()->getTimeStep();
 
  224  TEST_FLOATING_EQUALITY(modifier->testDt, Dt, 1.0e-14);
 
  225  TEST_COMPARE(modifier->testName, ==, 
"HHT Alpha - Modifier");
 
 
  230class StepperHHTAlphaObserverTest
 
  234  StepperHHTAlphaObserverTest()
 
  235    : testBEGIN_STEP(false),
 
  236      testBEFORE_SOLVE(false),
 
  237      testAFTER_SOLVE(false),
 
  239      testCurrentValue(-0.99),
 
  240      testWorkingValue(-0.99),
 
  247  virtual ~StepperHHTAlphaObserverTest() {}
 
  250  virtual void observe(
 
  257      case StepperHHTAlphaAppAction<double>::BEGIN_STEP: {
 
  258        testBEGIN_STEP   = 
true;
 
  259        auto x           = sh->getCurrentState()->getX();
 
  260        testCurrentValue = get_ele(*(x), 0);
 
  263      case StepperHHTAlphaAppAction<double>::BEFORE_SOLVE: {
 
  264        testBEFORE_SOLVE = 
true;
 
  265        testDt           = sh->getWorkingState()->getTimeStep();
 
  268      case StepperHHTAlphaAppAction<double>::AFTER_SOLVE: {
 
  269        testAFTER_SOLVE = 
true;
 
  270        testName        = stepper->getStepperType();
 
  273      case StepperHHTAlphaAppAction<double>::END_STEP: {
 
  275        auto x           = sh->getWorkingState()->getX();
 
  276        testWorkingValue = get_ele(*(x), 0);
 
  280        TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
 
  281                                   "Error - unknown action location.\n");
 
  286  bool testBEFORE_SOLVE;
 
  287  bool testAFTER_SOLVE;
 
  289  double testCurrentValue;
 
  290  double testWorkingValue;
 
  292  std::string testName;
 
  297  Teuchos::RCP<const Thyra::ModelEvaluator<double> > model =
 
  302  stepper->setModel(model);
 
  303  auto observer = rcp(
new StepperHHTAlphaObserverTest());
 
  304  stepper->setAppAction(observer);
 
  305  stepper->initialize();
 
  311  stepper->setInitialConditions(solutionHistory);
 
  312  solutionHistory->initWorkingState();
 
  314  solutionHistory->getWorkingState()->setTimeStep(dt);
 
  315  stepper->takeStep(solutionHistory);
 
  318  TEST_COMPARE(observer->testBEGIN_STEP, ==, 
true);
 
  319  TEST_COMPARE(observer->testBEFORE_SOLVE, ==, 
true);
 
  320  TEST_COMPARE(observer->testAFTER_SOLVE, ==, 
true);
 
  321  TEST_COMPARE(observer->testEND_STEP, ==, 
true);
 
  323  auto x = solutionHistory->getCurrentState()->getX();
 
  324  TEST_FLOATING_EQUALITY(observer->testCurrentValue, get_ele(*(x), 0), 1.0e-14);
 
  325  x = solutionHistory->getWorkingState()->getX();
 
  326  TEST_FLOATING_EQUALITY(observer->testWorkingValue, get_ele(*(x), 0), 1.0e-14);
 
  327  TEST_FLOATING_EQUALITY(observer->testDt, dt, 1.0e-14);
 
  329  TEST_COMPARE(observer->testName, ==, 
"HHT-Alpha");
 
 
  334class StepperHHTAlphaModifierXTest
 
  338  StepperHHTAlphaModifierXTest()
 
  339    : testX_BEGIN_STEP(false),
 
  340      testX_BEFORE_SOLVE(false),
 
  341      testX_AFTER_SOLVE(false),
 
  342      testX_END_STEP(false),
 
  351  virtual ~StepperHHTAlphaModifierXTest() {}
 
  361      case StepperHHTAlphaModifierXBase<double>::X_BEGIN_STEP: {
 
  362        testX_BEGIN_STEP = 
true;
 
  363        testXbegin       = get_ele(*(x), 0);
 
  366      case StepperHHTAlphaModifierXBase<double>::X_BEFORE_SOLVE: {
 
  367        testX_BEFORE_SOLVE = 
true;
 
  371      case StepperHHTAlphaModifierXBase<double>::X_AFTER_SOLVE: {
 
  372        testX_AFTER_SOLVE = 
true;
 
  376      case StepperHHTAlphaModifierXBase<double>::X_END_STEP: {
 
  377        testX_END_STEP = 
true;
 
  378        testXend       = get_ele(*(x), 0);
 
  382        TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
 
  383                                   "Error - unknown action location.\n");
 
  387  bool testX_BEGIN_STEP;
 
  388  bool testX_BEFORE_SOLVE;
 
  389  bool testX_AFTER_SOLVE;
 
  399  Teuchos::RCP<const Thyra::ModelEvaluator<double> > model =
 
  404  stepper->setModel(model);
 
  405  auto modifierX = rcp(
new StepperHHTAlphaModifierXTest());
 
  406  stepper->setAppAction(modifierX);
 
  407  stepper->initialize();
 
  412  stepper->setInitialConditions(solutionHistory);
 
  413  solutionHistory->initWorkingState();
 
  415  solutionHistory->getWorkingState()->setTimeStep(dt);
 
  416  stepper->takeStep(solutionHistory);
 
  419  TEST_COMPARE(modifierX->testX_BEGIN_STEP, ==, 
true);
 
  420  TEST_COMPARE(modifierX->testX_BEFORE_SOLVE, ==, 
true);
 
  421  TEST_COMPARE(modifierX->testX_AFTER_SOLVE, ==, 
true);
 
  422  TEST_COMPARE(modifierX->testX_END_STEP, ==, 
true);
 
  425  auto xbegin = solutionHistory->getCurrentState()->getX();
 
  426  TEST_FLOATING_EQUALITY(modifierX->testXbegin, get_ele(*(xbegin), 0), 1.0e-14);
 
  427  auto xend = solutionHistory->getWorkingState()->getX();
 
  428  TEST_FLOATING_EQUALITY(modifierX->testXend, get_ele(*(xend), 0), 1.0e-14);
 
  429  auto Dt = solutionHistory->getWorkingState()->getTimeStep();
 
  430  TEST_FLOATING_EQUALITY(modifierX->testDt, Dt, 1.0e-14);
 
  431  auto time = solutionHistory->getWorkingState()->getTime();
 
  432  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 StepperHHTAlpha.
 
Default modifier for StepperHHTAlpha.
 
Base ModifierX for StepperHHTAlpha.
 
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 StepperHHTAlpha.
 
Base observer for StepperHHTAlpha.
 
Default observer for StepperHHTAlpha.
 
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)
 
void testFactoryConstruction(std::string stepperType, const Teuchos::RCP< const Thyra::ModelEvaluator< double > > &model)
Unit test utility for Stepper construction through StepperFactory.
 
Teuchos::RCP< SolutionHistory< Scalar > > createSolutionHistoryME(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model)
Nonmember contructor from a Thyra ModelEvaluator.
 
Teuchos::RCP< Teuchos::ParameterList > defaultSolverParameters()
Returns the default solver ParameterList for implicit Steppers.