Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 
12 namespace Tempus_Unit_Test {
13 
14 using Teuchos::RCP;
15 using Teuchos::rcp;
16 using Teuchos::rcp_const_cast;
17 using Teuchos::rcp_dynamic_cast;
19 using Teuchos::sublist;
20 
21 
22 // ************************************************************
23 // ************************************************************
24 TEUCHOS_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);
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 // ************************************************************
97 TEUCHOS_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 // ************************************************************
106 TEUCHOS_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_Unit_Test
General Implicit Runge-Kutta Butcher Tableau.
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.
void testFactoryConstruction(std::string stepperType, const Teuchos::RCP< const Thyra::ModelEvaluator< double > > &model)
Unit test utility for Stepper construction through StepperFactory.
Sine-Cosine model problem from Rythmos. This is a canonical Sine-Cosine differential equation with a...
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)
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)
TypeTo as(const TypeFrom &t)
#define TEUCHOS_ASSERT(assertion_test)
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)