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 namespace Tempus_Unit_Test {
17 
19 using Teuchos::RCP;
20 using Teuchos::rcp;
21 using Teuchos::rcp_const_cast;
22 using Teuchos::rcp_dynamic_cast;
23 using Teuchos::sublist;
24 
27 
28 // ************************************************************
29 // ************************************************************
30 TEUCHOS_UNIT_TEST(IMEX_RK_Partition, Default_Construction)
31 {
32  // Setup the explicit VanDerPol ModelEvaluator
33  const bool useProductVector = true;
34  auto explicitModel =
36  Teuchos::null, useProductVector));
37  auto implicitModel =
39 
40  // Setup the IMEX Pair ModelEvaluator
41  const int numExplicitBlocks = 1;
42  const int parameterIndex = 4;
44  explicitModel, implicitModel, numExplicitBlocks, parameterIndex));
45 
46  // Default construction.
47  auto stepper = rcp(new Tempus::StepperIMEX_RK_Partition<double>());
48  stepper->setModel(model);
49  stepper->initialize();
50  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
51 
52  // Default values for construction.
53  auto modifier = rcp(new Tempus::StepperRKModifierDefault<double>());
54  auto modifierX = rcp(new Tempus::StepperRKModifierXDefault<double>());
55  auto observer = rcp(new Tempus::StepperRKObserverDefault<double>());
56  auto solver = rcp(new Thyra::NOXNonlinearSolver());
57  solver->setParameterList(Tempus::defaultSolverParameters());
58 
59  bool useFSAL = stepper->getUseFSAL();
60  std::string ICConsistency = stepper->getICConsistency();
61  bool ICConsistencyCheck = stepper->getICConsistencyCheck();
62  bool zeroInitialGuess = stepper->getZeroInitialGuess();
63  std::string stepperType = "Partitioned IMEX RK SSP2";
65  auto explicitTableau = stepperERK->getTableau();
66  auto stepperSDIRK =
68  auto implicitTableau = stepperSDIRK->getTableau();
69  int order = 2;
70 
71  // Test the set functions.
72  stepper->setAppAction(modifier);
73  stepper->initialize();
74  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
75  stepper->setAppAction(modifierX);
76  stepper->initialize();
77  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
78  stepper->setAppAction(observer);
79  stepper->initialize();
80  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
81  stepper->setSolver(solver);
82  stepper->initialize();
83  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
84  stepper->setUseFSAL(useFSAL);
85  stepper->initialize();
86  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
87  stepper->setICConsistency(ICConsistency);
88  stepper->initialize();
89  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
90  stepper->setICConsistencyCheck(ICConsistencyCheck);
91  stepper->initialize();
92  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
93  stepper->setZeroInitialGuess(zeroInitialGuess);
94  stepper->initialize();
95  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
96 
97  stepper->setStepperName(stepperType);
98  stepper->initialize();
99  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
100  stepper->setExplicitTableau(explicitTableau);
101  stepper->initialize();
102  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
103  stepper->setImplicitTableau(implicitTableau);
104  stepper->initialize();
105  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
106  stepper->setOrder(order);
107  stepper->initialize();
108  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
109 
110  TEUCHOS_TEST_FOR_EXCEPT(explicitTableau != stepper->getTableau());
111  TEUCHOS_TEST_FOR_EXCEPT(explicitTableau != stepper->getExplicitTableau());
112  TEUCHOS_TEST_FOR_EXCEPT(implicitTableau != stepper->getImplicitTableau());
113 
114  // Full argument list construction.
116  model, solver, useFSAL, ICConsistency, ICConsistencyCheck,
117  zeroInitialGuess, modifier, stepperType, explicitTableau, implicitTableau,
118  order));
119  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
120 
121  // Test stepper properties.
122  // out << "order = " << stepper->getOrder() << std::endl;
123  TEUCHOS_ASSERT(stepper->getOrder() == 2);
124 }
125 
126 // ************************************************************
127 // ************************************************************
128 TEUCHOS_UNIT_TEST(IMEX_RK_Partition, StepperFactory_Construction)
129 {
130  // Setup the explicit VanDerPol ModelEvaluator
131  const bool useProductVector = true;
132  auto explicitModel =
134  Teuchos::null, useProductVector));
135  auto implicitModel =
137 
138  // Setup the IMEX Pair ModelEvaluator
139  const int numExplicitBlocks = 1;
140  const int parameterIndex = 4;
142  explicitModel, implicitModel, numExplicitBlocks, parameterIndex));
143 
144  testFactoryConstruction("Partitioned IMEX RK SSP2", model);
145 }
146 
147 // ************************************************************
148 // ************************************************************
149 TEUCHOS_UNIT_TEST(IMEX_RK_Partition,
150  StepperFactory_Construction_General_wo_Parameterlist)
151 {
152  // Setup the explicit VanDerPol ModelEvaluator
153  const bool useProductVector = true;
154  auto explicitModel =
156  Teuchos::null, useProductVector));
157  auto implicitModel =
159 
160  // Setup the IMEX Pair ModelEvaluator
161  const int numExplicitBlocks = 1;
162  const int parameterIndex = 4;
164  explicitModel, implicitModel, numExplicitBlocks, parameterIndex));
165 
167 
168  auto stepper = sf->createStepper("General Partitioned IMEX RK", model);
169  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
170 }
171 
172 // ************************************************************
173 // ************************************************************
174 TEUCHOS_UNIT_TEST(IMEX_RK_Partition,
175  StepperFactory_Construction_General_wo_Parameterlist_Model)
176 {
177  // Setup the explicit VanDerPol ModelEvaluator
178  const bool useProductVector = true;
179  auto explicitModel =
181  Teuchos::null, useProductVector));
182  auto implicitModel =
184 
185  // Setup the IMEX Pair ModelEvaluator
186  const int numExplicitBlocks = 1;
187  const int parameterIndex = 4;
189  explicitModel, implicitModel, numExplicitBlocks, parameterIndex));
190 
192 
193  auto stepper = sf->createStepper("General Partitioned IMEX RK");
194  stepper->setModel(model);
195  stepper->initialize();
196  TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
197 }
198 
199 // ************************************************************
200 // ************************************************************
201 TEUCHOS_UNIT_TEST(IMEX_RK_Partition, AppAction)
202 {
203  auto stepper = rcp(new Tempus::StepperIMEX_RK_Partition<double>());
204 
205  // Setup the explicit VanDerPol ModelEvaluator
206  const bool useProductVector = true;
207  auto explicitModel =
209  Teuchos::null, useProductVector));
210  auto implicitModel =
212 
213  // Setup the IMEX Pair ModelEvaluator
214  const int numExplicitBlocks = 1;
215  const int parameterIndex = 4;
217  explicitModel, implicitModel, numExplicitBlocks, parameterIndex));
218 
219  testRKAppAction(stepper, model, out, success);
220 }
221 
222 } // namespace Tempus_Unit_Test
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.
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.
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)