Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Tempus_UnitTest_IMEX_RK_Partition.cpp
Go to the documentation of this file.
1 // @HEADER
2 // ****************************************************************************
3 // Tempus: Copyright (2017) Sandia Corporation
4 //
5 // Distributed under BSD 3-clause license (See accompanying file Copyright.txt)
6 // ****************************************************************************
7 // @HEADER
8 
10 
12 
13 #include "../TestModels/VanDerPol_IMEX_ExplicitModel.hpp"
14 #include "../TestModels/VanDerPol_IMEXPart_ImplicitModel.hpp"
15 
16 
17 namespace Tempus_Unit_Test {
18 
19 using Teuchos::RCP;
20 using Teuchos::rcp;
21 using Teuchos::rcp_const_cast;
22 using Teuchos::rcp_dynamic_cast;
24 using Teuchos::sublist;
25 
28 
29 
30 // ************************************************************
31 // ************************************************************
32 TEUCHOS_UNIT_TEST(IMEX_RK_Partition, Default_Construction)
33 {
34  // Setup the explicit VanDerPol ModelEvaluator
35  const bool useProductVector = true;
36  auto explicitModel = rcp(new Tempus_Test::VanDerPol_IMEX_ExplicitModel<double>(Teuchos::null, useProductVector));
38 
39  // Setup the IMEX Pair ModelEvaluator
40  const int numExplicitBlocks = 1;
41  const int parameterIndex = 4;
43  explicitModel, implicitModel,
44  numExplicitBlocks, parameterIndex));
45 
46 
47  // Default construction.
48  auto stepper = rcp(new Tempus::StepperIMEX_RK_Partition<double>());
49  stepper->setModel(model);
50  stepper->initialize();
51  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
52 
53  // Default values for construction.
54  auto modifier = rcp(new Tempus::StepperRKModifierDefault<double>());
55  auto modifierX = rcp(new Tempus::StepperRKModifierXDefault<double>());
56  auto observer = rcp(new Tempus::StepperRKObserverDefault<double>());
57  auto solver = rcp(new Thyra::NOXNonlinearSolver());
58  solver->setParameterList(Tempus::defaultSolverParameters());
59 
60  bool useFSAL = stepper->getUseFSAL();
61  std::string ICConsistency = stepper->getICConsistency();
62  bool ICConsistencyCheck = stepper->getICConsistencyCheck();
63  bool zeroInitialGuess = stepper->getZeroInitialGuess();
64  std::string stepperType = "Partitioned IMEX RK SSP2";
66  auto explicitTableau = stepperERK->getTableau();
68  auto implicitTableau = stepperSDIRK->getTableau();
69  int order = 2;
70 
71 
72  // Test the set functions.
73  stepper->setAppAction(modifier); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
74  stepper->setAppAction(modifierX); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
75  stepper->setAppAction(observer); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
76  stepper->setSolver(solver); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
77  stepper->setUseFSAL(useFSAL); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
78  stepper->setICConsistency(ICConsistency); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
79  stepper->setICConsistencyCheck(ICConsistencyCheck); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
80  stepper->setZeroInitialGuess(zeroInitialGuess); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
81 
82  stepper->setStepperName(stepperType); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
83  stepper->setExplicitTableau(explicitTableau); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
84  stepper->setImplicitTableau(implicitTableau); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
85  stepper->setOrder(order); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
86 
87  TEUCHOS_TEST_FOR_EXCEPT(explicitTableau != stepper->getTableau());
88  TEUCHOS_TEST_FOR_EXCEPT(explicitTableau != stepper->getExplicitTableau());
89  TEUCHOS_TEST_FOR_EXCEPT(implicitTableau != stepper->getImplicitTableau());
90 
91  // Full argument list construction.
93  model, solver, useFSAL, ICConsistency, ICConsistencyCheck,
94  zeroInitialGuess, modifier, stepperType, explicitTableau,
95  implicitTableau, order));
96  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
97 
98  // Test stepper properties.
99  //out << "order = " << stepper->getOrder() << std::endl;
100  TEUCHOS_ASSERT(stepper->getOrder() == 2);
101 }
102 
103 
104 // ************************************************************
105 // ************************************************************
106 TEUCHOS_UNIT_TEST(IMEX_RK_Partition, StepperFactory_Construction)
107 {
108  // Setup the explicit VanDerPol ModelEvaluator
109  const bool useProductVector = true;
110  auto explicitModel = rcp(new Tempus_Test::VanDerPol_IMEX_ExplicitModel<double>(Teuchos::null, useProductVector));
112 
113  // Setup the IMEX Pair ModelEvaluator
114  const int numExplicitBlocks = 1;
115  const int parameterIndex = 4;
117  explicitModel, implicitModel,
118  numExplicitBlocks, parameterIndex));
119 
120  testFactoryConstruction("Partitioned IMEX RK SSP2", model);
121 }
122 
123 
124 // ************************************************************
125 // ************************************************************
126 TEUCHOS_UNIT_TEST(IMEX_RK_Partition, StepperFactory_Construction_General_wo_Parameterlist)
127 {
128  // Setup the explicit VanDerPol ModelEvaluator
129  const bool useProductVector = true;
130  auto explicitModel = rcp(new Tempus_Test::VanDerPol_IMEX_ExplicitModel<double>(Teuchos::null, useProductVector));
132 
133  // Setup the IMEX Pair ModelEvaluator
134  const int numExplicitBlocks = 1;
135  const int parameterIndex = 4;
137  explicitModel, implicitModel,
138  numExplicitBlocks, parameterIndex));
139 
141 
142  auto stepper = sf->createStepper("General Partitioned IMEX RK", model);
143  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
144 }
145 
146 
147 // ************************************************************
148 // ************************************************************
149 TEUCHOS_UNIT_TEST(IMEX_RK_Partition, StepperFactory_Construction_General_wo_Parameterlist_Model)
150 {
151  // Setup the explicit VanDerPol ModelEvaluator
152  const bool useProductVector = true;
153  auto explicitModel = rcp(new Tempus_Test::VanDerPol_IMEX_ExplicitModel<double>(Teuchos::null, useProductVector));
155 
156  // Setup the IMEX Pair ModelEvaluator
157  const int numExplicitBlocks = 1;
158  const int parameterIndex = 4;
160  explicitModel, implicitModel,
161  numExplicitBlocks, parameterIndex));
162 
164 
165  auto stepper = sf->createStepper("General Partitioned IMEX RK");
166  stepper->setModel(model);
167  stepper->initialize();
168  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
169 }
170 
171 
172 // ************************************************************
173 // ************************************************************
174 TEUCHOS_UNIT_TEST(IMEX_RK_Partition, AppAction)
175 {
176  auto stepper = rcp(new Tempus::StepperIMEX_RK_Partition<double>());
177 
178  // Setup the explicit VanDerPol ModelEvaluator
179  const bool useProductVector = true;
180  auto explicitModel = rcp(new Tempus_Test::VanDerPol_IMEX_ExplicitModel<double>(Teuchos::null, useProductVector));
182 
183  // Setup the IMEX Pair ModelEvaluator
184  const int numExplicitBlocks = 1;
185  const int parameterIndex = 4;
187  explicitModel, implicitModel,
188  numExplicitBlocks, parameterIndex));
189 
190  testRKAppAction(stepper, model, out, success);
191 }
192 
193 
194 } // namespace Tempus_Unit_Test
void testRKAppAction(const Teuchos::RCP< Tempus::StepperRKBase< double > > &stepper, const Teuchos::RCP< const Thyra::ModelEvaluator< double > > &model, Teuchos::FancyOStream &out, bool &success)
Unit test utility for Stepper RK AppAction.
Explicit Runge-Kutta time stepper.
void testFactoryConstruction(std::string stepperType, const Teuchos::RCP< const Thyra::ModelEvaluator< double > > &model)
Unit test utility for Stepper construction through StepperFactory.
van der Pol model formulated for the partitioned IMEX-RK.
Partitioned Implicit-Explicit Runge-Kutta (IMEX-RK) time stepper.
Teuchos::RCP< Teuchos::ParameterList > defaultSolverParameters()
Returns the default solver ParameterList for implicit Steppers.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
ModelEvaluator pair for implicit and explicit (IMEX) evaulations.
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)
#define TEUCHOS_ASSERT(assertion_test)
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)