Tempus Version of the Day
Time Integration
Loading...
Searching...
No Matches
Tempus_UnitTest_DIRK_General.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
11
12namespace Tempus_Unit_Test {
13
14using Teuchos::RCP;
15using Teuchos::rcp;
16using Teuchos::rcp_const_cast;
17using Teuchos::rcp_dynamic_cast;
18using Teuchos::ParameterList;
19using Teuchos::sublist;
20
21
22// ************************************************************
23// ************************************************************
24TEUCHOS_UNIT_TEST(DIRK_General, Default_Construction)
25{
26 auto model = rcp(new Tempus_Test::SinCosModel<double>());
27
28 // Default construction.
29 auto stepper = rcp(new Tempus::StepperDIRK_General<double>());
30 stepper->setModel(model);
31 stepper->initialize();
32 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
33
34
35 // Default values for construction.
36 auto modifier = rcp(new Tempus::StepperRKModifierDefault<double>());
37 auto modifierX = rcp(new Tempus::StepperRKModifierXDefault<double>());
38 auto observer = rcp(new Tempus::StepperRKObserverDefault<double>());
39 auto solver = rcp(new Thyra::NOXNonlinearSolver());
40 solver->setParameterList(Tempus::defaultSolverParameters());
41
42 bool useFSAL = stepper->getUseFSAL();
43 std::string ICConsistency = stepper->getICConsistency();
44 bool ICConsistencyCheck = stepper->getICConsistencyCheck();
45 bool useEmbedded = stepper->getUseEmbedded();
46 bool zeroInitialGuess = stepper->getZeroInitialGuess();
47
48 using Teuchos::as;
49 int NumStages = 2;
50 Teuchos::SerialDenseMatrix<int,double> A(NumStages,NumStages);
51 Teuchos::SerialDenseVector<int,double> b(NumStages);
52 Teuchos::SerialDenseVector<int,double> c(NumStages);
53 Teuchos::SerialDenseVector<int,double> bstar(0);
54
55 // Fill A:
56 A(0,0) = 0.2928932188134524; A(0,1) = 0.0;
57 A(1,0) = 0.7071067811865476; A(1,1) = 0.2928932188134524;
58
59 // Fill b:
60 b(0) = 0.7071067811865476;
61 b(1) = 0.2928932188134524;
62
63 // Fill c:
64 c(0) = 0.2928932188134524;
65 c(1) = 1.0;
66
67 int order = 2;
68
69 // Test the set functions.
70 stepper->setAppAction(modifier); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
71 stepper->setAppAction(modifierX); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
72 stepper->setAppAction(observer); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
73 stepper->setSolver(solver); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
74 stepper->setUseFSAL(useFSAL); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
75 stepper->setICConsistency(ICConsistency); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
76 stepper->setICConsistencyCheck(ICConsistencyCheck); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
77 stepper->setUseEmbedded(useEmbedded); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
78 stepper->setZeroInitialGuess(zeroInitialGuess); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
79
80 stepper->setTableau(A, b, c, order, order, order); stepper->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
81
82
83 // Full argument list construction.
85 model, solver, useFSAL, ICConsistency, ICConsistencyCheck,
86 useEmbedded, zeroInitialGuess, modifier,
87 A, b, c, order, order, order,bstar));
88 TEUCHOS_TEST_FOR_EXCEPT(!stepper->isInitialized());
89
90 // Test stepper properties.
91 TEUCHOS_ASSERT(stepper->getOrder() == 2);
92}
93
94
95// ************************************************************
96// ************************************************************
97TEUCHOS_UNIT_TEST(DIRK_General, StepperFactory_Construction)
98{
99 auto model = rcp(new Tempus_Test::SinCosModel<double>());
100 testFactoryConstruction("General DIRK", model);
101}
102
103
104// ************************************************************
105// ************************************************************
106TEUCHOS_UNIT_TEST(DIRK_General, AppAction)
107{
108 auto stepper = rcp(new Tempus::StepperDIRK_General<double>());
109 auto model = rcp(new Tempus_Test::SinCosModel<double>());
110 testRKAppAction(stepper, model, out, success);
111}
112
113
114} // namespace Tempus_Test
General Implicit Runge-Kutta Butcher Tableau.
Sine-Cosine model problem from Rythmos. This is a canonical Sine-Cosine differential equation.
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.