Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Tempus_UnitTest_TimeEventRange.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 #include "Tempus_TimeEventRange.hpp"
11 
12 
13 static double PI = M_PI;
14 
15 namespace Tempus_Unit_Test {
16 
17 using Teuchos::RCP;
18 using Teuchos::rcp;
19 using Teuchos::rcp_const_cast;
20 using Teuchos::rcp_dynamic_cast;
21 
22 
23 // ************************************************************
24 // ************************************************************
25 TEUCHOS_UNIT_TEST(TimeEventRange, Default_Construction)
26 {
27  auto te = rcp(new Tempus::TimeEventRange<double>());
28 
29  TEST_COMPARE(te->getName(), ==, "TimeEventRange (0; 0; 0)");
30  te->setName("TestName");
31  TEST_COMPARE(te->getName(), ==, "TestName");
32 
33  TEST_FLOATING_EQUALITY(te->getTimeStart (), 0.0, 1.0e-14);
34  TEST_FLOATING_EQUALITY(te->getTimeStop (), 0.0, 1.0e-14);
35  TEST_FLOATING_EQUALITY(te->getTimeStride(), 0.0, 1.0e-14);
36  TEST_COMPARE(te->getNumEvents (), ==, 1);
37 
38  TEST_FLOATING_EQUALITY(te->getRelTol(), std::numeric_limits<double>::epsilon()*100.0, 1.0e-14);
39  TEST_FLOATING_EQUALITY(te->getAbsTol(), std::numeric_limits<double>::epsilon()*100.0, 1.0e-14);
40 
41  TEST_COMPARE(te->getLandOnExactly(), ==, true);
42 }
43 
44 
45 // ************************************************************
46 // ************************************************************
47 TEUCHOS_UNIT_TEST(TimeEventRange, Full_Construction_Stride)
48 {
49  auto te = rcp(new Tempus::TimeEventRange<double>(
50  0.0, PI, 1.0, "TestName", true, 1.0e-14));
51 
52  //te->describe(out, Teuchos::VERB_EXTREME);
53 
54  TEST_COMPARE(te->getName(), ==, "TestName");
55 
56  // Test when everything is zero.
57  TEST_FLOATING_EQUALITY(te->getTimeStart (), 0.0 , 1.0e-14);
58  TEST_FLOATING_EQUALITY(te->getTimeStop (), PI, 1.0e-14);
59  TEST_FLOATING_EQUALITY(te->getTimeStride(), 1.0, 1.0e-14);
60  TEST_COMPARE(te->getNumEvents (), ==, 4);
61 
62  auto teRange2 = rcp(new Tempus::TimeEventRange<double>(
63  -PI/2.0, PI/2.0, PI/4.0, "teRange2", true, 1.0e-14));
64 
65  TEST_FLOATING_EQUALITY(teRange2->timeToNextEvent(0.1), PI/4.0-0.1, 1.0e-14);
66 
67 }
68 
69 
70 // ************************************************************
71 // ************************************************************
72 TEUCHOS_UNIT_TEST(TimeEventRange, Full_Construction_NumEvents)
73 {
74  auto te = rcp(new Tempus::TimeEventRange<double>(
75  0.0, PI, 5, "TestName", true, 1.0e-14));
76 
77  TEST_COMPARE(te->getName(), ==, "TestName");
78 
79  // Test when everything is zero.
80  TEST_FLOATING_EQUALITY(te->getTimeStart (), 0.0, 1.0e-14);
81  TEST_FLOATING_EQUALITY(te->getTimeStop (), PI, 1.0e-14);
82  TEST_FLOATING_EQUALITY(te->getTimeStride(), PI/4.0, 1.0e-14);
83  TEST_COMPARE(te->getNumEvents (), ==, 5);
84 }
85 
86 
87 // ************************************************************
88 // ************************************************************
89 TEUCHOS_UNIT_TEST(TimeEventRange, Basic_Accessors)
90 {
91  auto te = rcp(new Tempus::TimeEventRange<double>());
92 
93  te->setRelTol(0.1);
94  TEST_FLOATING_EQUALITY(te->getRelTol(), 0.1, 1.0e-14);
95  te->setRelTol(1.0e-14);
96  te->setLandOnExactly(false);
97  TEST_COMPARE(te->getLandOnExactly(), ==, false);
98  te->setLandOnExactly(true);
99 
100  // Reset start after stop.
101  te->setTimeStart(1.0);
102  TEST_FLOATING_EQUALITY(te->getTimeStart (), 1.0, 1.0e-14);
103  TEST_FLOATING_EQUALITY(te->getTimeStop (), 1.0, 1.0e-14);
104  TEST_FLOATING_EQUALITY(te->getTimeStride(), 0.0, 1.0e-14);
105  TEST_COMPARE(te->getNumEvents (), ==, 1);
106 
107  // Reset stop.
108  te->setTimeStop(4.0);
109  TEST_FLOATING_EQUALITY(te->getTimeStart (), 1.0, 1.0e-14);
110  TEST_FLOATING_EQUALITY(te->getTimeStop (), 4.0, 1.0e-14);
111  TEST_FLOATING_EQUALITY(te->getTimeStride(), 3.0, 1.0e-14);
112  TEST_COMPARE(te->getNumEvents (), ==, 2);
113 
114  // Reset stride.
115  te->setTimeStride(0.5);
116  TEST_FLOATING_EQUALITY(te->getTimeStart (), 1.0, 1.0e-14);
117  TEST_FLOATING_EQUALITY(te->getTimeStop (), 4.0, 1.0e-14);
118  TEST_FLOATING_EQUALITY(te->getTimeStride(), 0.5, 1.0e-14);
119  TEST_COMPARE(te->getNumEvents (), ==, 7);
120 }
121 
122 
123 // ************************************************************
124 // ************************************************************
125 TEUCHOS_UNIT_TEST(TimeEventRange, Stride)
126 {
127  auto te = rcp(new Tempus::TimeEventRange<double>());
128  te->setTimeStart(1.0);
129  te->setTimeStop(4.0);
130  te->setTimeStride(0.5);
131 
132  // Negative stride should be reset to stop_-start_.
133  te->setTimeStride(-0.5);
134  TEST_FLOATING_EQUALITY(te->getTimeStart (), 1.0, 1.0e-14);
135  TEST_FLOATING_EQUALITY(te->getTimeStop (), 4.0, 1.0e-14);
136  TEST_FLOATING_EQUALITY(te->getTimeStride(), 0.5, 1.0e-14);
137  TEST_COMPARE(te->getNumEvents (), ==, 7);
138 
139  // Large stride should be reset to stop_-start_.
140  te->setTimeStride(5.0);
141  TEST_FLOATING_EQUALITY(te->getTimeStart (), 1.0, 1.0e-14);
142  TEST_FLOATING_EQUALITY(te->getTimeStop (), 4.0, 1.0e-14);
143  TEST_FLOATING_EQUALITY(te->getTimeStride(), 3.0, 1.0e-14);
144  TEST_COMPARE(te->getNumEvents (), ==, 2);
145 
146  // Stride smaller than relative tolerance should be reset to stop_-start_.
147  te->setTimeStride(1.0e-14);
148  TEST_FLOATING_EQUALITY(te->getTimeStart (), 1.0, 1.0e-14);
149  TEST_FLOATING_EQUALITY(te->getTimeStop (), 4.0, 1.0e-14);
150  TEST_FLOATING_EQUALITY(te->getTimeStride(), 3.0, 1.0e-14);
151  TEST_COMPARE(te->getNumEvents (), ==, 2);
152 }
153 
154 
155 // ************************************************************
156 // ************************************************************
157 TEUCHOS_UNIT_TEST(TimeEventRange, setTimeRange)
158 {
159  auto te = rcp(new Tempus::TimeEventRange<double>());
160 
161  // Set with time range.
162  te->setTimeRange(0.0, PI, 1.0);
163  TEST_FLOATING_EQUALITY(te->getTimeStart (), 0.0, 1.0e-14);
164  TEST_FLOATING_EQUALITY(te->getTimeStop (), PI, 1.0e-14);
165  TEST_FLOATING_EQUALITY(te->getTimeStride(), 1.0, 1.0e-14);
166  TEST_COMPARE(te->getNumEvents (), ==, 4);
167 }
168 
169 
170 // ************************************************************
171 // ************************************************************
172 TEUCHOS_UNIT_TEST(TimeEventRange, isTime)
173 {
174  auto te = rcp(new Tempus::TimeEventRange<double>());
175  te->setTimeRange(0.0, PI, 1.0);
176  te->setRelTol(1.0e-14);
177 
178  // Before first event. (This is exactly one stride before range.)
179  TEST_COMPARE(te->isTime(-1.0 + -10.0e-14), ==, false); // Just outside tolerance.
180  TEST_COMPARE(te->isTime(-1.0 + -0.1e-14), ==, false); // Just inside tolerance.
181  TEST_COMPARE(te->isTime(-1.0 + 0.0 ), ==, false); // Right on timeEvent.
182  TEST_COMPARE(te->isTime(-1.0 + 0.1e-14), ==, false); // Just inside tolerance.
183  TEST_COMPARE(te->isTime(-1.0 + 10.0e-14), ==, false); // Just outside tolerance.
184 
185  // Around first event.
186  TEST_COMPARE(te->isTime(-10.0e-14), ==, false); // Just outside tolerance.
187  TEST_COMPARE(te->isTime( -0.1e-14), ==, true ); // Just inside tolerance.
188  TEST_COMPARE(te->isTime( 0.0 ), ==, true ); // Right on timeEvent.
189  TEST_COMPARE(te->isTime( 0.1e-14), ==, true ); // Just inside tolerance.
190  TEST_COMPARE(te->isTime( 10.0e-14), ==, false); // Just outside tolerance.
191 
192  // Around mid event.
193  TEST_COMPARE(te->isTime(1.0 + -10.0e-14), ==, false); // Just outside tolerance.
194  TEST_COMPARE(te->isTime(1.0 + -0.1e-14), ==, true ); // Just inside tolerance.
195  TEST_COMPARE(te->isTime(1.0 + 0.0 ), ==, true ); // Right on timeEvent.
196  TEST_COMPARE(te->isTime(1.0 + 0.1e-14), ==, true ); // Just inside tolerance.
197  TEST_COMPARE(te->isTime(1.0 + 10.0e-14), ==, false); // Just outside tolerance.
198 
199  // Around last event.
200  TEST_COMPARE(te->isTime(3.0 + -10.0e-14), ==, false); // Just outside tolerance.
201  TEST_COMPARE(te->isTime(3.0 + -0.1e-14), ==, true ); // Just inside tolerance.
202  TEST_COMPARE(te->isTime(3.0 + 0.0 ), ==, true ); // Right on timeEvent.
203  TEST_COMPARE(te->isTime(3.0 + 0.1e-14), ==, true ); // Just inside tolerance.
204  TEST_COMPARE(te->isTime(3.0 + 10.0e-14), ==, false); // Just outside tolerance.
205 
206  // After last event. (This is exactly one stride after range.)
207  TEST_COMPARE(te->isTime(4.0 + -10.0e-14), ==, false); // Just outside tolerance.
208  TEST_COMPARE(te->isTime(4.0 + -0.1e-14), ==, false); // Just inside tolerance.
209  TEST_COMPARE(te->isTime(4.0 + 0.0 ), ==, false); // Right on timeEvent.
210  TEST_COMPARE(te->isTime(4.0 + 0.1e-14), ==, false); // Just inside tolerance.
211  TEST_COMPARE(te->isTime(4.0 + 10.0e-14), ==, false); // Just outside tolerance.
212 
213 }
214 
215 
216 // ************************************************************
217 // ************************************************************
218 TEUCHOS_UNIT_TEST(TimeEventRange, timeToNextEvent)
219 {
220  auto te = rcp(new Tempus::TimeEventRange<double>());
221  te->setTimeRange(0.0, PI, 1.0);
222  te->setRelTol(1.0e-14);
223 
224  // Test timeToNextEvent.
225  // Around first event.
226  TEST_FLOATING_EQUALITY(te->timeToNextEvent( -10.0e-14), 10.0e-14, 1.0e-14); // Just outside tolerance.
227  TEST_FLOATING_EQUALITY(te->timeToNextEvent( -0.1e-14), 1.0+ 0.1e-14, 1.0e-14); // Just inside tolerance.
228  TEST_FLOATING_EQUALITY(te->timeToNextEvent( 0.0 ), 1.0+ 0.0 , 1.0e-14); // Right on timeEvent.
229  TEST_FLOATING_EQUALITY(te->timeToNextEvent( 0.1e-14), 1.0- 0.1e-14, 1.0e-14); // Just inside tolerance.
230  TEST_FLOATING_EQUALITY(te->timeToNextEvent( 10.0e-14), 1.0-10.0e-14, 1.0e-14); // Just outside tolerance.
231 
232  // Around mid event.
233  TEST_FLOATING_EQUALITY(te->timeToNextEvent(1.0+ -10.0e-14), 10.0e-14, 1.0e-02); // Just outside tolerance.
234  TEST_FLOATING_EQUALITY(te->timeToNextEvent(1.0+ -0.1e-14), 1.0+ 0.1e-14, 1.0e-01); // Just inside tolerance.
235  TEST_FLOATING_EQUALITY(te->timeToNextEvent(1.0+ 0.0 ), 1.0+ 0.0 , 1.0e-02); // Right on timeEvent.
236  TEST_FLOATING_EQUALITY(te->timeToNextEvent(1.0+ 0.1e-14), 1.0- 0.1e-14, 1.0e-01); // Just inside tolerance.
237  TEST_FLOATING_EQUALITY(te->timeToNextEvent(1.0+ 10.0e-14), 1.0-10.0e-14, 1.0e-14); // Just outside tolerance.
238 
239  // Around last event.
240  TEST_FLOATING_EQUALITY(te->timeToNextEvent(3.0+ -10.0e-14), 10.0e-14, 1.0e-02); // Just outside tolerance.
241  TEST_FLOATING_EQUALITY(te->timeToNextEvent(3.0+ -0.1e-14), te->getDefaultTime(), 1.0e-01); // Just inside tolerance.
242  TEST_FLOATING_EQUALITY(te->timeToNextEvent(3.0+ 0.0 ), te->getDefaultTime(), 1.0e-02); // Right on timeEvent.
243  TEST_FLOATING_EQUALITY(te->timeToNextEvent(3.0+ 0.1e-14), te->getDefaultTime(), 1.0e-01); // Just inside tolerance.
244  TEST_FLOATING_EQUALITY(te->timeToNextEvent(3.0+ 10.0e-14), te->getDefaultTime(), 1.0e-02); // Just outside tolerance.
245 }
246 
247 
248 // ************************************************************
249 // ************************************************************
250 TEUCHOS_UNIT_TEST(TimeEventRange, timeOfNextEvent)
251 {
252  auto te = rcp(new Tempus::TimeEventRange<double>());
253  te->setTimeRange(0.0, PI, 1.0);
254  te->setRelTol(1.0e-14);
255 
256  // Test timeOfNextEvent.
257  // Around first event.
258  TEST_FLOATING_EQUALITY(te->timeOfNextEvent( -10.0e-14), 0.0, 1.0e-14); // Just outside tolerance.
259  TEST_FLOATING_EQUALITY(te->timeOfNextEvent( -0.1e-14), 1.0, 1.0e-14); // Just inside tolerance.
260  TEST_FLOATING_EQUALITY(te->timeOfNextEvent( 0.0 ), 1.0, 1.0e-14); // Right on timeEvent.
261  TEST_FLOATING_EQUALITY(te->timeOfNextEvent( 0.1e-14), 1.0, 1.0e-14); // Just inside tolerance.
262  TEST_FLOATING_EQUALITY(te->timeOfNextEvent( 10.0e-14), 1.0, 1.0e-14); // Just outside tolerance.
263 
264  // Around mid event.
265  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(1.0+ -10.0e-14), 1.0, 1.0e-14); // Just outside tolerance.
266  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(1.0+ -0.1e-14), 2.0, 1.0e-14); // Just inside tolerance.
267  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(1.0+ 0.0 ), 2.0, 1.0e-14); // Right on timeEvent.
268  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(1.0+ 0.1e-14), 2.0, 1.0e-14); // Just inside tolerance.
269  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(1.0+ 10.0e-14), 2.0, 1.0e-14); // Just outside tolerance.
270 
271  // Around last event.
272  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(3.0+ -10.0e-14), 3.0, 1.0e-14); // Just outside tolerance.
273  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(3.0+ -0.1e-14), te->getDefaultTime(), 1.0e-14); // Just inside tolerance.
274  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(3.0+ 0.0 ), te->getDefaultTime(), 1.0e-14); // Right on timeEvent.
275  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(3.0+ 0.1e-14), te->getDefaultTime(), 1.0e-14); // Just inside tolerance.
276  TEST_FLOATING_EQUALITY(te->timeOfNextEvent(3.0+ 10.0e-14), te->getDefaultTime(), 1.0e-14); // Just outside tolerance.
277 }
278 
279 
280 // ************************************************************
281 // ************************************************************
282 TEUCHOS_UNIT_TEST(TimeEventRange, eventInRange)
283 {
284  auto te = rcp(new Tempus::TimeEventRange<double>());
285  te->setTimeRange(0.0, PI, 1.0);
286  te->setRelTol(1.0e-14);
287 
288  // Test eventInRange.
289  // Right end of input range.
290  // Around first event.
291  TEST_COMPARE(te->eventInRange(-1.0, -10.0e-14), ==, false); // Just outside tolerance.
292  TEST_COMPARE(te->eventInRange(-1.0, -0.1e-14), ==, true ); // Just inside tolerance.
293  TEST_COMPARE(te->eventInRange(-1.0, 0.0 ), ==, true ); // Right on timeEvent.
294  TEST_COMPARE(te->eventInRange(-1.0, 0.1e-14), ==, true ); // Just inside tolerance.
295  TEST_COMPARE(te->eventInRange(-1.0, 10.0e-14), ==, true ); // Just outside tolerance.
296 
297  // Around mid event.
298  TEST_COMPARE(te->eventInRange(0.5, 1.0 + -10.0e-14), ==, false); // Just outside tolerance.
299  TEST_COMPARE(te->eventInRange(0.5, 1.0 + -0.1e-14), ==, true ); // Just inside tolerance.
300  TEST_COMPARE(te->eventInRange(0.5, 1.0 + 0.0 ), ==, true ); // Right on timeEvent.
301  TEST_COMPARE(te->eventInRange(0.5, 1.0 + 0.1e-14), ==, true ); // Just inside tolerance.
302  TEST_COMPARE(te->eventInRange(0.5, 1.0 + 10.0e-14), ==, true ); // Just outside tolerance.
303 
304  // Around last event.
305  TEST_COMPARE(te->eventInRange(2.5, 3.0 + -10.0e-14), ==, false); // Just outside tolerance.
306  TEST_COMPARE(te->eventInRange(2.5, 3.0 + -0.1e-14), ==, true ); // Just inside tolerance.
307  TEST_COMPARE(te->eventInRange(2.5, 3.0 + 0.0 ), ==, true ); // Right on timeEvent.
308  TEST_COMPARE(te->eventInRange(2.5, 3.0 + 0.1e-14), ==, true ); // Just inside tolerance.
309  TEST_COMPARE(te->eventInRange(2.5, 3.0 + 10.0e-14), ==, true ); // Just outside tolerance.
310 
311  // Left end of input range.
312  // Around first event.
313  TEST_COMPARE(te->eventInRange(-10.0e-14, 0.5), ==, true ); // Just outside tolerance.
314  TEST_COMPARE(te->eventInRange( -0.1e-14, 0.5), ==, false); // Just inside tolerance.
315  TEST_COMPARE(te->eventInRange( 0.0 , 0.5), ==, false); // Right on timeEvent.
316  TEST_COMPARE(te->eventInRange( 0.1e-14, 0.5), ==, false); // Just inside tolerance.
317  TEST_COMPARE(te->eventInRange( 10.0e-14, 0.5), ==, false); // Just outside tolerance.
318 
319  // Around mid event.
320  TEST_COMPARE(te->eventInRange(1.0 + -10.0e-14, 1.5), ==, true ); // Just outside tolerance.
321  TEST_COMPARE(te->eventInRange(1.0 + -0.1e-14, 1.5), ==, false); // Just inside tolerance.
322  TEST_COMPARE(te->eventInRange(1.0 + 0.0 , 1.5), ==, false); // Right on timeEvent.
323  TEST_COMPARE(te->eventInRange(1.0 + 0.1e-14, 1.5), ==, false); // Just inside tolerance.
324  TEST_COMPARE(te->eventInRange(1.0 + 10.0e-14, 1.5), ==, false); // Just outside tolerance.
325 
326  // Around last event.
327  TEST_COMPARE(te->eventInRange(3.0 + -10.0e-14, 4.0), ==, true ); // Just outside tolerance.
328  TEST_COMPARE(te->eventInRange(3.0 + -0.1e-14, 4.0), ==, false); // Just inside tolerance.
329  TEST_COMPARE(te->eventInRange(3.0 + 0.0 , 4.0), ==, false); // Right on timeEvent.
330  TEST_COMPARE(te->eventInRange(3.0 + 0.1e-14, 4.0), ==, false); // Just inside tolerance.
331  TEST_COMPARE(te->eventInRange(3.0 + 10.0e-14, 4.0), ==, false); // Just outside tolerance.
332 }
333 
334 
335 // ************************************************************
336 // ************************************************************
337 TEUCHOS_UNIT_TEST(TimeEventRange, getValidParameters)
338 {
339  auto ter = rcp(new Tempus::TimeEventRange<double>());
340 
341  auto pl = ter->getValidParameters();
342 
343  TEST_COMPARE (pl->get<std::string>("Type"), ==, "Range");
344  TEST_COMPARE (pl->get<std::string>("Name"), ==, "TimeEventRange (0; 0; 0)");
345  TEST_FLOATING_EQUALITY(pl->get<double>("Start Time"), 0.0, 1.0e-14);
346  TEST_FLOATING_EQUALITY(pl->get<double>("Stop Time") , 0.0, 1.0e-14);
347  TEST_FLOATING_EQUALITY(pl->get<double>("Stride Time") , 0.0, 1.0e-14);
348  TEST_COMPARE (pl->get<int>("Number of Events"), ==, 1);
349  TEST_FLOATING_EQUALITY(pl->get<double>("Relative Tolerance"),
350  std::numeric_limits<double>::epsilon()*100.0, 1.0e-14);
351  TEST_COMPARE (pl->get<bool>("Land On Exactly"), ==, true);
352 
353  { // Ensure that parameters are "used", excluding sublists.
354  std::ostringstream unusedParameters;
355  pl->unused(unusedParameters);
356  TEST_COMPARE ( unusedParameters.str(), ==, "");
357  }
358 }
359 
360 
361 // ************************************************************
362 // ************************************************************
364 {
365  // Construct parameterList similar to getValidParameters().
366  Teuchos::RCP<Teuchos::ParameterList> pl = Teuchos::parameterList("Time Event Range");
367 
368  pl->set("Name", "Unit Test Time Event Range");
369  pl->set("Type", "Range");
370  pl->set("Start Time", -0.1);
371  pl->set("Stop Time", 1.1);
372  pl->set("Stride Time", 0.1);
373  pl->set("Relative Tolerance", 1.0e-10);
374  pl->set("Land On Exactly", false);
375 
376  // Construct TimeEventRange from ParameterList.
377  auto ter = Tempus::createTimeEventRange<double>(pl);
378 
379  //ter->describe(out, Teuchos::VERB_EXTREME);
380 
381  TEST_COMPARE ( ter->getName() , ==, "Unit Test Time Event Range");
382  TEST_COMPARE ( ter->getType() , ==, "Range" );
383  TEST_FLOATING_EQUALITY( ter->getTimeStart() , -0.1, 1.0e-14);
384  TEST_FLOATING_EQUALITY( ter->getTimeStop() , 1.1, 1.0e-14);
385  TEST_FLOATING_EQUALITY( ter->getTimeStride() , 0.1, 1.0e-14);
386  TEST_COMPARE ( ter->getNumEvents() , ==, 13 );
387  TEST_FLOATING_EQUALITY( ter->getRelTol() , 1.0e-10, 1.0e-14);
388  TEST_COMPARE ( ter->getLandOnExactly(), ==, false );
389 }
390 
391 
392 // ************************************************************
393 // ************************************************************
394 TEUCHOS_UNIT_TEST(TimeEventRange, SingleEventAtZero)
395 {
396  auto ter = rcp(new Tempus::TimeEventRange<double>(
397  0.0, 0.0, 0.0, "SingleEventAtZero", true));
398  ter->describe(out, Teuchos::VERB_EXTREME);
399 
400  TEST_COMPARE(ter->getNumEvents (), ==, 1);
401 
402  TEST_COMPARE(ter->isTime(0.0), ==, true);
403  TEST_FLOATING_EQUALITY(ter->timeToNextEvent(-1.0), 1.0, 1.0e-14);
404  TEST_FLOATING_EQUALITY(ter->timeOfNextEvent(-1.0), 0.0, 1.0e-14);
405  TEST_FLOATING_EQUALITY(ter->timeToNextEvent( 0.0), ter->getDefaultTime(), 1.0e-14);
406  TEST_FLOATING_EQUALITY(ter->timeOfNextEvent( 0.0), ter->getDefaultTime(), 1.0e-14);
407  TEST_COMPARE(ter->eventInRange(-1.0, 1.0), ==, true);
408  TEST_COMPARE(ter->eventInRange( 0.0, 1.0), ==, false);
409  TEST_COMPARE(ter->eventInRange( 0.0, 0.0), ==, false);
410 }
411 
412 
413 } // namespace Tempus_Unit_Test
ParameterList & set(std::string const &name, T const &value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
#define TEST_COMPARE(v1, comp, v2)
#define TEST_FLOATING_EQUALITY(v1, v2, tol)
TimeEventRange specifies a start, stop and stride time.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Teuchos::RCP< TimeEventRange< Scalar > > createTimeEventRange(Teuchos::RCP< Teuchos::ParameterList > pList)
Nonmember Constructor via ParameterList.
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)
static double PI