Tempus Version of the Day
Time Integration
Loading...
Searching...
No Matches
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
17namespace Tempus_Unit_Test {
18
19using Teuchos::RCP;
20using Teuchos::rcp;
21using Teuchos::rcp_const_cast;
22using Teuchos::rcp_dynamic_cast;
23using Teuchos::ParameterList;
24using Teuchos::sublist;
25
28
29
30// ************************************************************
31// ************************************************************
32TEUCHOS_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));
37 auto implicitModel = rcp(new Tempus_Test::VanDerPol_IMEXPart_ImplicitModel<double>());
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";
65 auto stepperERK = Teuchos::rcp(new Tempus::StepperERK_Trapezoidal<double>());
66 auto explicitTableau = stepperERK->getTableau();
67 auto stepperSDIRK = Teuchos::rcp(new Tempus::StepperSDIRK_2Stage3rdOrder<double>());
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// ************************************************************
106TEUCHOS_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));
111 auto implicitModel = rcp(new Tempus_Test::VanDerPol_IMEXPart_ImplicitModel<double>());
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// ************************************************************
126TEUCHOS_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));
131 auto implicitModel = rcp(new Tempus_Test::VanDerPol_IMEXPart_ImplicitModel<double>());
132
133 // Setup the IMEX Pair ModelEvaluator
134 const int numExplicitBlocks = 1;
135 const int parameterIndex = 4;
137 explicitModel, implicitModel,
138 numExplicitBlocks, parameterIndex));
139
140 RCP<StepperFactory<double> > sf = Teuchos::rcp(new StepperFactory<double>());
141
142 auto stepper = sf->createStepper("General Partitioned IMEX RK", model);
143 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
144}
145
146
147// ************************************************************
148// ************************************************************
149TEUCHOS_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));
154 auto implicitModel = rcp(new Tempus_Test::VanDerPol_IMEXPart_ImplicitModel<double>());
155
156 // Setup the IMEX Pair ModelEvaluator
157 const int numExplicitBlocks = 1;
158 const int parameterIndex = 4;
160 explicitModel, implicitModel,
161 numExplicitBlocks, parameterIndex));
162
163 RCP<StepperFactory<double> > sf = Teuchos::rcp(new StepperFactory<double>());
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// ************************************************************
174TEUCHOS_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));
181 auto implicitModel = rcp(new Tempus_Test::VanDerPol_IMEXPart_ImplicitModel<double>());
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_Test
Explicit Runge-Kutta time stepper.
Partitioned Implicit-Explicit Runge-Kutta (IMEX-RK) time stepper.
ModelEvaluator pair for implicit and explicit (IMEX) evaulations.
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_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< Teuchos::ParameterList > defaultSolverParameters()
Returns the default solver ParameterList for implicit Steppers.