9 #include "Teuchos_UnitTestHarness.hpp"
10 #include "Teuchos_XMLParameterListHelpers.hpp"
11 #include "Teuchos_TimeMonitor.hpp"
13 #include "Thyra_VectorStdOps.hpp"
15 #include "Tempus_IntegratorBasic.hpp"
16 #include "Tempus_IntegratorObserverLogging.hpp"
17 #include "Tempus_IntegratorObserverComposite.hpp"
19 #include "../TestModels/SinCosModel.hpp"
20 #include "../TestModels/VanDerPolModel.hpp"
21 #include "../TestUtils/Tempus_ConvergenceTestUtils.hpp"
29 using Teuchos::ParameterList;
30 using Teuchos::sublist;
31 using Teuchos::getParametersFromXmlFile;
43 RCP<ParameterList> pList =
44 getParametersFromXmlFile(
"Tempus_Observer_SinCos.xml");
47 RCP<ParameterList> scm_pl = sublist(pList,
"SinCosModel",
true);
48 RCP<SinCosModel<double> > model =
52 RCP<ParameterList> pl = sublist(pList,
"Tempus",
true);
53 RCP<Tempus::IntegratorBasic<double> > integrator =
54 Tempus::integratorBasic<double>(pl, model);
56 RCP<Tempus::IntegratorObserverLogging<double> > loggingObs =
58 integrator->setObserver(loggingObs);
61 bool integratorStatus = integrator->advanceTime();
62 TEST_ASSERT(integratorStatus)
65 double time = integrator->getTime();
66 double timeFinal = pl->sublist(
"Demo Integrator")
67 .sublist(
"Time Step Control").get<
double>(
"Final Time");
68 TEST_FLOATING_EQUALITY(time, timeFinal, 1.0e-14);
71 std::map<std::string,int> refCounters;
72 std::list<std::string> refOrder;
74 refCounters[loggingObs->nameObserveStartIntegrator_ ] = 1;
75 refCounters[loggingObs->nameObserveStartTimeStep_ ] = 10;
76 refCounters[loggingObs->nameObserveNextTimeStep_ ] = 10;
77 refCounters[loggingObs->nameObserveBeforeTakeStep_ ] = 10;
78 refCounters[loggingObs->nameObserveAfterTakeStep_ ] = 10;
79 refCounters[loggingObs->nameObserveAcceptedTimeStep_] = 10;
80 refCounters[loggingObs->nameObserveEndIntegrator_ ] = 1;
82 refOrder.push_back(loggingObs->nameObserveStartIntegrator_ );
83 for (
int i=0 ; i<10; ++i) {
84 refOrder.push_back(loggingObs->nameObserveStartTimeStep_ );
85 refOrder.push_back(loggingObs->nameObserveNextTimeStep_ );
86 refOrder.push_back(loggingObs->nameObserveBeforeTakeStep_ );
87 refOrder.push_back(loggingObs->nameObserveAfterTakeStep_ );
88 refOrder.push_back(loggingObs->nameObserveAcceptedTimeStep_);
90 refOrder.push_back(loggingObs->nameObserveEndIntegrator_ );
92 const std::map<std::string,int>& counters = *(loggingObs->getCounters());
93 const std::list<std::string>& order = *(loggingObs->getOrder());
97 counters.find(loggingObs->nameObserveStartIntegrator_ )->second,
98 refCounters.find(loggingObs->nameObserveStartIntegrator_ )->second);
100 counters.find(loggingObs->nameObserveStartTimeStep_ )->second,
101 refCounters.find(loggingObs->nameObserveStartTimeStep_ )->second);
103 counters.find(loggingObs->nameObserveNextTimeStep_ )->second,
104 refCounters.find(loggingObs->nameObserveNextTimeStep_ )->second);
106 counters.find(loggingObs->nameObserveBeforeTakeStep_ )->second,
107 refCounters.find(loggingObs->nameObserveBeforeTakeStep_ )->second);
109 counters.find(loggingObs->nameObserveAfterTakeStep_ )->second,
110 refCounters.find(loggingObs->nameObserveAfterTakeStep_ )->second);
112 counters.find(loggingObs->nameObserveAcceptedTimeStep_)->second,
113 refCounters.find(loggingObs->nameObserveAcceptedTimeStep_)->second);
115 counters.find(loggingObs->nameObserveEndIntegrator_ )->second,
116 refCounters.find(loggingObs->nameObserveEndIntegrator_ )->second);
118 TEUCHOS_ASSERT(order.size() == refOrder.size());
119 std::list<std::string>::const_iterator orderIter = order.begin();
120 std::list<std::string>::const_iterator refOrderIter = refOrder.begin();
121 for ( ; orderIter != order.end(); ++orderIter,++refOrderIter) {
123 TEST_EQUALITY(*orderIter, *refOrderIter);
127 loggingObs->resetLogCounters();
129 counters.find(loggingObs->nameObserveStartIntegrator_ )->second, 0);
131 counters.find(loggingObs->nameObserveStartTimeStep_ )->second, 0);
133 counters.find(loggingObs->nameObserveNextTimeStep_ )->second, 0);
135 counters.find(loggingObs->nameObserveBeforeTakeStep_ )->second, 0);
137 counters.find(loggingObs->nameObserveAfterTakeStep_ )->second, 0);
139 counters.find(loggingObs->nameObserveAcceptedTimeStep_)->second, 0);
141 counters.find(loggingObs->nameObserveEndIntegrator_ )->second, 0);
142 TEST_EQUALITY(order.size(), 0);
144 Teuchos::TimeMonitor::summarize();
150 RCP<ParameterList> pList =
151 getParametersFromXmlFile(
"Tempus_Observer_SinCos.xml");
154 RCP<ParameterList> scm_pl = sublist(pList,
"SinCosModel",
true);
155 RCP<SinCosModel<double> > model =
159 RCP<ParameterList> pl = sublist(pList,
"Tempus",
true);
160 RCP<Tempus::IntegratorBasic<double> > integrator =
161 Tempus::integratorBasic<double>(pl, model);
163 RCP<Tempus::IntegratorObserverLogging<double> > loggingObs =
167 RCP<Tempus::IntegratorObserverLogging<double> > loggingObs2 =
170 RCP<Tempus::IntegratorObserverComposite<double> > compObs =
173 compObs->addObserver(loggingObs);
174 compObs->addObserver(loggingObs2);
176 compObs->observeStartIntegrator(*integrator);
177 compObs->observeStartTimeStep(*integrator);
178 compObs->observeBeforeTakeStep(*integrator);
179 compObs->observeAfterTakeStep(*integrator);
180 compObs->observeAcceptedTimeStep(*integrator);
183 for (
int i=0 ; i<10; ++i) {
184 compObs->observeStartTimeStep(*integrator);
185 compObs->observeBeforeTakeStep(*integrator);
186 compObs->observeAfterTakeStep(*integrator);
187 compObs->observeAcceptedTimeStep(*integrator);
189 compObs->observeEndIntegrator(*integrator);
191 const std::map<std::string,int>& counters = *(loggingObs->getCounters());
194 counters.find(loggingObs->nameObserveStartIntegrator_ )->second, 1);
196 counters.find(loggingObs->nameObserveStartTimeStep_ )->second,11);
198 counters.find(loggingObs->nameObserveBeforeTakeStep_ )->second,11);
200 counters.find(loggingObs->nameObserveAfterTakeStep_ )->second,11);
202 counters.find(loggingObs->nameObserveAcceptedTimeStep_ )->second,11);
204 counters.find(loggingObs->nameObserveEndIntegrator_ )->second, 1);
206 counters.find(loggingObs2->nameObserveStartIntegrator_ )->second, 1);
208 counters.find(loggingObs2->nameObserveStartTimeStep_ )->second,11);
210 counters.find(loggingObs2->nameObserveBeforeTakeStep_ )->second,11);
212 counters.find(loggingObs2->nameObserveAfterTakeStep_ )->second,11);
214 counters.find(loggingObs2->nameObserveAcceptedTimeStep_)->second,11);
216 counters.find(loggingObs2->nameObserveEndIntegrator_ )->second, 1);