Tempus Version of the Day
Time Integration
Loading...
Searching...
No Matches
Tempus_UnitTest_TimeEventRange.cpp
Go to the documentation of this file.
1//@HEADER
2// *****************************************************************************
3// Tempus: Time Integration and Sensitivity Analysis Package
4//
5// Copyright 2017 NTESS and the Tempus contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8//@HEADER
9
11#include "Tempus_TimeEventRange.hpp"
12
13static double PI = M_PI;
14
15namespace Tempus_Unit_Test {
16
17using Teuchos::RCP;
18using Teuchos::rcp;
19using Teuchos::rcp_const_cast;
20using Teuchos::rcp_dynamic_cast;
21
22// ************************************************************
23// ************************************************************
24TEUCHOS_UNIT_TEST(TimeEventRange, Default_Construction)
25{
26 auto te = rcp(new Tempus::TimeEventRange<double>());
27
28 TEST_COMPARE(te->getName(), ==, "TimeEventRange (0; 0; 0)");
29 te->setName("TestName");
30 TEST_COMPARE(te->getName(), ==, "TestName");
31
32 TEST_FLOATING_EQUALITY(te->getTimeStart(), 0.0, 1.0e-14);
33 TEST_FLOATING_EQUALITY(te->getTimeStop(), 0.0, 1.0e-14);
34 TEST_FLOATING_EQUALITY(te->getTimeStride(), 0.0, 1.0e-14);
35 TEST_COMPARE(te->getNumEvents(), ==, 1);
36
37 TEST_FLOATING_EQUALITY(
38 te->getRelTol(), std::numeric_limits<double>::epsilon() * 100.0, 1.0e-14);
39 TEST_FLOATING_EQUALITY(
40 te->getAbsTol(), std::numeric_limits<double>::epsilon() * 100.0, 1.0e-14);
41
42 TEST_COMPARE(te->getLandOnExactly(), ==, true);
43}
44
45// ************************************************************
46// ************************************************************
47TEUCHOS_UNIT_TEST(TimeEventRange, Full_Construction_Stride)
48{
49 auto te = rcp(new Tempus::TimeEventRange<double>(0.0, PI, 1.0, "TestName",
50 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,
66 1.0e-14);
67}
68
69// ************************************************************
70// ************************************************************
71TEUCHOS_UNIT_TEST(TimeEventRange, Full_Construction_NumEvents)
72{
73 auto te = rcp(new Tempus::TimeEventRange<double>(0.0, PI, 5, "TestName", true,
74 1.0e-14));
75
76 TEST_COMPARE(te->getName(), ==, "TestName");
77
78 // Test when everything is zero.
79 TEST_FLOATING_EQUALITY(te->getTimeStart(), 0.0, 1.0e-14);
80 TEST_FLOATING_EQUALITY(te->getTimeStop(), PI, 1.0e-14);
81 TEST_FLOATING_EQUALITY(te->getTimeStride(), PI / 4.0, 1.0e-14);
82 TEST_COMPARE(te->getNumEvents(), ==, 5);
83}
84
85// ************************************************************
86// ************************************************************
87TEUCHOS_UNIT_TEST(TimeEventRange, Basic_Accessors)
88{
89 auto te = rcp(new Tempus::TimeEventRange<double>());
90
91 te->setRelTol(0.1);
92 TEST_FLOATING_EQUALITY(te->getRelTol(), 0.1, 1.0e-14);
93 te->setRelTol(1.0e-14);
94 te->setLandOnExactly(false);
95 TEST_COMPARE(te->getLandOnExactly(), ==, false);
96 te->setLandOnExactly(true);
97
98 // Reset start after stop.
99 te->setTimeStart(1.0);
100 TEST_FLOATING_EQUALITY(te->getTimeStart(), 1.0, 1.0e-14);
101 TEST_FLOATING_EQUALITY(te->getTimeStop(), 1.0, 1.0e-14);
102 TEST_FLOATING_EQUALITY(te->getTimeStride(), 0.0, 1.0e-14);
103 TEST_COMPARE(te->getNumEvents(), ==, 1);
104
105 // Reset stop.
106 te->setTimeStop(4.0);
107 TEST_FLOATING_EQUALITY(te->getTimeStart(), 1.0, 1.0e-14);
108 TEST_FLOATING_EQUALITY(te->getTimeStop(), 4.0, 1.0e-14);
109 TEST_FLOATING_EQUALITY(te->getTimeStride(), 3.0, 1.0e-14);
110 TEST_COMPARE(te->getNumEvents(), ==, 2);
111
112 // Reset stride.
113 te->setTimeStride(0.5);
114 TEST_FLOATING_EQUALITY(te->getTimeStart(), 1.0, 1.0e-14);
115 TEST_FLOATING_EQUALITY(te->getTimeStop(), 4.0, 1.0e-14);
116 TEST_FLOATING_EQUALITY(te->getTimeStride(), 0.5, 1.0e-14);
117 TEST_COMPARE(te->getNumEvents(), ==, 7);
118}
119
120// ************************************************************
121// ************************************************************
122TEUCHOS_UNIT_TEST(TimeEventRange, Stride)
123{
124 auto te = rcp(new Tempus::TimeEventRange<double>());
125 te->setTimeStart(1.0);
126 te->setTimeStop(4.0);
127 te->setTimeStride(0.5);
128
129 // Negative stride should be reset to stop_-start_.
130 te->setTimeStride(-0.5);
131 TEST_FLOATING_EQUALITY(te->getTimeStart(), 1.0, 1.0e-14);
132 TEST_FLOATING_EQUALITY(te->getTimeStop(), 4.0, 1.0e-14);
133 TEST_FLOATING_EQUALITY(te->getTimeStride(), 0.5, 1.0e-14);
134 TEST_COMPARE(te->getNumEvents(), ==, 7);
135
136 // Large stride should be reset to stop_-start_.
137 te->setTimeStride(5.0);
138 TEST_FLOATING_EQUALITY(te->getTimeStart(), 1.0, 1.0e-14);
139 TEST_FLOATING_EQUALITY(te->getTimeStop(), 4.0, 1.0e-14);
140 TEST_FLOATING_EQUALITY(te->getTimeStride(), 3.0, 1.0e-14);
141 TEST_COMPARE(te->getNumEvents(), ==, 2);
142
143 // Stride smaller than relative tolerance should be reset to stop_-start_.
144 te->setTimeStride(1.0e-14);
145 TEST_FLOATING_EQUALITY(te->getTimeStart(), 1.0, 1.0e-14);
146 TEST_FLOATING_EQUALITY(te->getTimeStop(), 4.0, 1.0e-14);
147 TEST_FLOATING_EQUALITY(te->getTimeStride(), 3.0, 1.0e-14);
148 TEST_COMPARE(te->getNumEvents(), ==, 2);
149}
150
151// ************************************************************
152// ************************************************************
153TEUCHOS_UNIT_TEST(TimeEventRange, setTimeRange)
154{
155 auto te = rcp(new Tempus::TimeEventRange<double>());
156
157 // Set with time range with stride.
158 te->setTimeRange(0.0, PI, 1.0);
159 TEST_FLOATING_EQUALITY(te->getTimeStart(), 0.0, 1.0e-14);
160 TEST_FLOATING_EQUALITY(te->getTimeStop(), PI, 1.0e-14);
161 TEST_FLOATING_EQUALITY(te->getTimeStride(), 1.0, 1.0e-14);
162 TEST_COMPARE(te->getNumEvents(), ==, 4);
163
164 // Set with time range number of events.
165 te->setTimeRange(0.0, PI, 5);
166 TEST_FLOATING_EQUALITY(te->getTimeStart(), 0.0, 1.0e-14);
167 TEST_FLOATING_EQUALITY(te->getTimeStop(), PI, 1.0e-14);
168 TEST_FLOATING_EQUALITY(te->getTimeStride(), PI / 4.0, 1.0e-14);
169 TEST_COMPARE(te->getNumEvents(), ==, 5);
170}
171
172// ************************************************************
173// ************************************************************
174TEUCHOS_UNIT_TEST(TimeEventRange, setNumEvents)
175{
176 auto te = rcp(new Tempus::TimeEventRange<double>());
177
178 // Set with time range with stride, then set number of events.
179 te->setTimeRange(0.0, PI, 1.0);
180 te->setNumEvents(5);
181 TEST_FLOATING_EQUALITY(te->getTimeStart(), 0.0, 1.0e-14);
182 TEST_FLOATING_EQUALITY(te->getTimeStop(), PI, 1.0e-14);
183 TEST_FLOATING_EQUALITY(te->getTimeStride(), PI / 4.0, 1.0e-14);
184 TEST_COMPARE(te->getNumEvents(), ==, 5);
185}
186
187// ************************************************************
188// ************************************************************
189TEUCHOS_UNIT_TEST(TimeEventRange, isTime)
190{
191 auto te = rcp(new Tempus::TimeEventRange<double>());
192 te->setTimeRange(0.0, PI, 1.0);
193 te->setRelTol(1.0e-14);
194
195 // Before first event. (This is exactly one stride before range.)
196 TEST_COMPARE(te->isTime(-1.0 + -10.0e-14), ==,
197 false); // Just outside tolerance.
198 TEST_COMPARE(te->isTime(-1.0 + -0.1e-14), ==,
199 false); // Just inside tolerance.
200 TEST_COMPARE(te->isTime(-1.0 + 0.0), ==, false); // Right on timeEvent.
201 TEST_COMPARE(te->isTime(-1.0 + 0.1e-14), ==,
202 false); // Just inside tolerance.
203 TEST_COMPARE(te->isTime(-1.0 + 10.0e-14), ==,
204 false); // Just outside tolerance.
205
206 // Around first event.
207 TEST_COMPARE(te->isTime(-10.0e-14), ==, false); // Just outside tolerance.
208 TEST_COMPARE(te->isTime(-0.1e-14), ==, true); // Just inside tolerance.
209 TEST_COMPARE(te->isTime(0.0), ==, true); // Right on timeEvent.
210 TEST_COMPARE(te->isTime(0.1e-14), ==, true); // Just inside tolerance.
211 TEST_COMPARE(te->isTime(10.0e-14), ==, false); // Just outside tolerance.
212
213 // Around mid event.
214 TEST_COMPARE(te->isTime(1.0 + -10.0e-14), ==,
215 false); // Just outside tolerance.
216 TEST_COMPARE(te->isTime(1.0 + -0.1e-14), ==, true); // Just inside tolerance.
217 TEST_COMPARE(te->isTime(1.0 + 0.0), ==, true); // Right on timeEvent.
218 TEST_COMPARE(te->isTime(1.0 + 0.1e-14), ==, true); // Just inside tolerance.
219 TEST_COMPARE(te->isTime(1.0 + 10.0e-14), ==,
220 false); // Just outside tolerance.
221
222 // Around last event.
223 TEST_COMPARE(te->isTime(3.0 + -10.0e-14), ==,
224 false); // Just outside tolerance.
225 TEST_COMPARE(te->isTime(3.0 + -0.1e-14), ==, true); // Just inside tolerance.
226 TEST_COMPARE(te->isTime(3.0 + 0.0), ==, true); // Right on timeEvent.
227 TEST_COMPARE(te->isTime(3.0 + 0.1e-14), ==, true); // Just inside tolerance.
228 TEST_COMPARE(te->isTime(3.0 + 10.0e-14), ==,
229 false); // Just outside tolerance.
230
231 // After last event. (This is exactly one stride after range.)
232 TEST_COMPARE(te->isTime(4.0 + -10.0e-14), ==,
233 false); // Just outside tolerance.
234 TEST_COMPARE(te->isTime(4.0 + -0.1e-14), ==,
235 false); // Just inside tolerance.
236 TEST_COMPARE(te->isTime(4.0 + 0.0), ==, false); // Right on timeEvent.
237 TEST_COMPARE(te->isTime(4.0 + 0.1e-14), ==, false); // Just inside tolerance.
238 TEST_COMPARE(te->isTime(4.0 + 10.0e-14), ==,
239 false); // Just outside tolerance.
240}
241
242// ************************************************************
243// ************************************************************
244TEUCHOS_UNIT_TEST(TimeEventRange, timeToNextEvent)
245{
246 auto te = rcp(new Tempus::TimeEventRange<double>());
247 te->setTimeRange(0.0, PI, 1.0);
248 te->setRelTol(1.0e-14);
249
250 // Test timeToNextEvent.
251 // Around first event.
252 TEST_FLOATING_EQUALITY(te->timeToNextEvent(-10.0e-14), 10.0e-14,
253 1.0e-14); // Just outside tolerance.
254 TEST_FLOATING_EQUALITY(te->timeToNextEvent(-0.1e-14), 1.0 + 0.1e-14,
255 1.0e-14); // Just inside tolerance.
256 TEST_FLOATING_EQUALITY(te->timeToNextEvent(0.0), 1.0 + 0.0,
257 1.0e-14); // Right on timeEvent.
258 TEST_FLOATING_EQUALITY(te->timeToNextEvent(0.1e-14), 1.0 - 0.1e-14,
259 1.0e-14); // Just inside tolerance.
260 TEST_FLOATING_EQUALITY(te->timeToNextEvent(10.0e-14), 1.0 - 10.0e-14,
261 1.0e-14); // Just outside tolerance.
262
263 // Around mid event.
264 TEST_FLOATING_EQUALITY(te->timeToNextEvent(1.0 + -10.0e-14), 10.0e-14,
265 1.0e-02); // Just outside tolerance.
266 TEST_FLOATING_EQUALITY(te->timeToNextEvent(1.0 + -0.1e-14), 1.0 + 0.1e-14,
267 1.0e-01); // Just inside tolerance.
268 TEST_FLOATING_EQUALITY(te->timeToNextEvent(1.0 + 0.0), 1.0 + 0.0,
269 1.0e-02); // Right on timeEvent.
270 TEST_FLOATING_EQUALITY(te->timeToNextEvent(1.0 + 0.1e-14), 1.0 - 0.1e-14,
271 1.0e-01); // Just inside tolerance.
272 TEST_FLOATING_EQUALITY(te->timeToNextEvent(1.0 + 10.0e-14), 1.0 - 10.0e-14,
273 1.0e-14); // Just outside tolerance.
274
275 // Around last event.
276 TEST_FLOATING_EQUALITY(te->timeToNextEvent(3.0 + -10.0e-14), 10.0e-14,
277 1.0e-02); // Just outside tolerance.
278 TEST_FLOATING_EQUALITY(te->timeToNextEvent(3.0 + -0.1e-14),
279 te->getDefaultTime(),
280 1.0e-01); // Just inside tolerance.
281 TEST_FLOATING_EQUALITY(te->timeToNextEvent(3.0 + 0.0), te->getDefaultTime(),
282 1.0e-02); // Right on timeEvent.
283 TEST_FLOATING_EQUALITY(te->timeToNextEvent(3.0 + 0.1e-14),
284 te->getDefaultTime(),
285 1.0e-01); // Just inside tolerance.
286 TEST_FLOATING_EQUALITY(te->timeToNextEvent(3.0 + 10.0e-14),
287 te->getDefaultTime(),
288 1.0e-02); // Just outside tolerance.
289}
290
291// ************************************************************
292// ************************************************************
293TEUCHOS_UNIT_TEST(TimeEventRange, timeOfNextEvent)
294{
295 auto te = rcp(new Tempus::TimeEventRange<double>());
296 te->setTimeRange(0.0, PI, 1.0);
297 te->setRelTol(1.0e-14);
298
299 // Test timeOfNextEvent.
300 // Around first event.
301 TEST_FLOATING_EQUALITY(te->timeOfNextEvent(-10.0e-14), 0.0,
302 1.0e-14); // Just outside tolerance.
303 TEST_FLOATING_EQUALITY(te->timeOfNextEvent(-0.1e-14), 1.0,
304 1.0e-14); // Just inside tolerance.
305 TEST_FLOATING_EQUALITY(te->timeOfNextEvent(0.0), 1.0,
306 1.0e-14); // Right on timeEvent.
307 TEST_FLOATING_EQUALITY(te->timeOfNextEvent(0.1e-14), 1.0,
308 1.0e-14); // Just inside tolerance.
309 TEST_FLOATING_EQUALITY(te->timeOfNextEvent(10.0e-14), 1.0,
310 1.0e-14); // Just outside tolerance.
311
312 // Around mid event.
313 TEST_FLOATING_EQUALITY(te->timeOfNextEvent(1.0 + -10.0e-14), 1.0,
314 1.0e-14); // Just outside tolerance.
315 TEST_FLOATING_EQUALITY(te->timeOfNextEvent(1.0 + -0.1e-14), 2.0,
316 1.0e-14); // Just inside tolerance.
317 TEST_FLOATING_EQUALITY(te->timeOfNextEvent(1.0 + 0.0), 2.0,
318 1.0e-14); // Right on timeEvent.
319 TEST_FLOATING_EQUALITY(te->timeOfNextEvent(1.0 + 0.1e-14), 2.0,
320 1.0e-14); // Just inside tolerance.
321 TEST_FLOATING_EQUALITY(te->timeOfNextEvent(1.0 + 10.0e-14), 2.0,
322 1.0e-14); // Just outside tolerance.
323
324 // Around last event.
325 TEST_FLOATING_EQUALITY(te->timeOfNextEvent(3.0 + -10.0e-14), 3.0,
326 1.0e-14); // Just outside tolerance.
327 TEST_FLOATING_EQUALITY(te->timeOfNextEvent(3.0 + -0.1e-14),
328 te->getDefaultTime(),
329 1.0e-14); // Just inside tolerance.
330 TEST_FLOATING_EQUALITY(te->timeOfNextEvent(3.0 + 0.0), te->getDefaultTime(),
331 1.0e-14); // Right on timeEvent.
332 TEST_FLOATING_EQUALITY(te->timeOfNextEvent(3.0 + 0.1e-14),
333 te->getDefaultTime(),
334 1.0e-14); // Just inside tolerance.
335 TEST_FLOATING_EQUALITY(te->timeOfNextEvent(3.0 + 10.0e-14),
336 te->getDefaultTime(),
337 1.0e-14); // Just outside tolerance.
338}
339
340// ************************************************************
341// ************************************************************
342TEUCHOS_UNIT_TEST(TimeEventRange, eventInRange)
343{
344 auto te = rcp(new Tempus::TimeEventRange<double>());
345 te->setTimeRange(0.0, PI, 1.0);
346 te->setRelTol(1.0e-14);
347
348 // Test eventInRange.
349 // Right end of input range.
350 // Around first event.
351 TEST_COMPARE(te->eventInRange(-1.0, -10.0e-14), ==,
352 false); // Just outside tolerance.
353 TEST_COMPARE(te->eventInRange(-1.0, -0.1e-14), ==,
354 true); // Just inside tolerance.
355 TEST_COMPARE(te->eventInRange(-1.0, 0.0), ==, true); // Right on timeEvent.
356 TEST_COMPARE(te->eventInRange(-1.0, 0.1e-14), ==,
357 true); // Just inside tolerance.
358 TEST_COMPARE(te->eventInRange(-1.0, 10.0e-14), ==,
359 true); // Just outside tolerance.
360
361 // Around mid event.
362 TEST_COMPARE(te->eventInRange(0.5, 1.0 + -10.0e-14), ==,
363 false); // Just outside tolerance.
364 TEST_COMPARE(te->eventInRange(0.5, 1.0 + -0.1e-14), ==,
365 true); // Just inside tolerance.
366 TEST_COMPARE(te->eventInRange(0.5, 1.0 + 0.0), ==,
367 true); // Right on timeEvent.
368 TEST_COMPARE(te->eventInRange(0.5, 1.0 + 0.1e-14), ==,
369 true); // Just inside tolerance.
370 TEST_COMPARE(te->eventInRange(0.5, 1.0 + 10.0e-14), ==,
371 true); // Just outside tolerance.
372
373 // Around last event.
374 TEST_COMPARE(te->eventInRange(2.5, 3.0 + -10.0e-14), ==,
375 false); // Just outside tolerance.
376 TEST_COMPARE(te->eventInRange(2.5, 3.0 + -0.1e-14), ==,
377 true); // Just inside tolerance.
378 TEST_COMPARE(te->eventInRange(2.5, 3.0 + 0.0), ==,
379 true); // Right on timeEvent.
380 TEST_COMPARE(te->eventInRange(2.5, 3.0 + 0.1e-14), ==,
381 true); // Just inside tolerance.
382 TEST_COMPARE(te->eventInRange(2.5, 3.0 + 10.0e-14), ==,
383 true); // Just outside tolerance.
384
385 // Left end of input range.
386 // Around first event.
387 TEST_COMPARE(te->eventInRange(-10.0e-14, 0.5), ==,
388 true); // Just outside tolerance.
389 TEST_COMPARE(te->eventInRange(-0.1e-14, 0.5), ==,
390 false); // Just inside tolerance.
391 TEST_COMPARE(te->eventInRange(0.0, 0.5), ==, false); // Right on timeEvent.
392 TEST_COMPARE(te->eventInRange(0.1e-14, 0.5), ==,
393 false); // Just inside tolerance.
394 TEST_COMPARE(te->eventInRange(10.0e-14, 0.5), ==,
395 false); // Just outside tolerance.
396
397 // Around mid event.
398 TEST_COMPARE(te->eventInRange(1.0 + -10.0e-14, 1.5), ==,
399 true); // Just outside tolerance.
400 TEST_COMPARE(te->eventInRange(1.0 + -0.1e-14, 1.5), ==,
401 false); // Just inside tolerance.
402 TEST_COMPARE(te->eventInRange(1.0 + 0.0, 1.5), ==,
403 false); // Right on timeEvent.
404 TEST_COMPARE(te->eventInRange(1.0 + 0.1e-14, 1.5), ==,
405 false); // Just inside tolerance.
406 TEST_COMPARE(te->eventInRange(1.0 + 10.0e-14, 1.5), ==,
407 false); // Just outside tolerance.
408
409 // Around last event.
410 TEST_COMPARE(te->eventInRange(3.0 + -10.0e-14, 4.0), ==,
411 true); // Just outside tolerance.
412 TEST_COMPARE(te->eventInRange(3.0 + -0.1e-14, 4.0), ==,
413 false); // Just inside tolerance.
414 TEST_COMPARE(te->eventInRange(3.0 + 0.0, 4.0), ==,
415 false); // Right on timeEvent.
416 TEST_COMPARE(te->eventInRange(3.0 + 0.1e-14, 4.0), ==,
417 false); // Just inside tolerance.
418 TEST_COMPARE(te->eventInRange(3.0 + 10.0e-14, 4.0), ==,
419 false); // Just outside tolerance.
420}
421
422// ************************************************************
423// ************************************************************
424TEUCHOS_UNIT_TEST(TimeEventRange, getValidParameters)
425{
426 auto ter = rcp(new Tempus::TimeEventRange<double>());
427
428 auto pl = ter->getValidParameters();
429
430 TEST_COMPARE(pl->get<std::string>("Type"), ==, "Range");
431 TEST_COMPARE(pl->get<std::string>("Name"), ==, "TimeEventRange (0; 0; 0)");
432 TEST_FLOATING_EQUALITY(pl->get<double>("Start Time"), 0.0, 1.0e-14);
433 TEST_FLOATING_EQUALITY(pl->get<double>("Stop Time"), 0.0, 1.0e-14);
434 TEST_FLOATING_EQUALITY(pl->get<double>("Stride Time"), 0.0, 1.0e-14);
435 TEST_COMPARE(pl->get<int>("Number of Events"), ==, 1);
436 TEST_FLOATING_EQUALITY(pl->get<double>("Relative Tolerance"),
437 std::numeric_limits<double>::epsilon() * 100.0,
438 1.0e-14);
439 TEST_COMPARE(pl->get<bool>("Land On Exactly"), ==, true);
440
441 { // Ensure that parameters are "used", excluding sublists.
442 std::ostringstream unusedParameters;
443 pl->unused(unusedParameters);
444 TEST_COMPARE(unusedParameters.str(), ==, "");
445 }
446}
447
448// ************************************************************
449// ************************************************************
450TEUCHOS_UNIT_TEST(TimeEventRange, createTimeEventRange)
451{
452 // Construct parameterList similar to getValidParameters().
453 Teuchos::RCP<Teuchos::ParameterList> pl =
454 Teuchos::parameterList("Time Event Range");
455
456 pl->set("Name", "Unit Test Time Event Range");
457 pl->set("Type", "Range");
458 pl->set("Start Time", -0.1);
459 pl->set("Stop Time", 1.1);
460 pl->set("Stride Time", 0.1);
461 pl->set("Relative Tolerance", 1.0e-10);
462 pl->set("Land On Exactly", false);
463
464 // Construct TimeEventRange from ParameterList.
465 auto ter = Tempus::createTimeEventRange<double>(pl);
466
467 // ter->describe(out, Teuchos::VERB_EXTREME);
468
469 TEST_COMPARE(ter->getName(), ==, "Unit Test Time Event Range");
470 TEST_COMPARE(ter->getType(), ==, "Range");
471 TEST_FLOATING_EQUALITY(ter->getTimeStart(), -0.1, 1.0e-14);
472 TEST_FLOATING_EQUALITY(ter->getTimeStop(), 1.1, 1.0e-14);
473 TEST_FLOATING_EQUALITY(ter->getTimeStride(), 0.1, 1.0e-14);
474 TEST_COMPARE(ter->getNumEvents(), ==, 13);
475 TEST_FLOATING_EQUALITY(ter->getRelTol(), 1.0e-10, 1.0e-14);
476 TEST_COMPARE(ter->getLandOnExactly(), ==, false);
477}
478
479// ************************************************************
480// ************************************************************
481TEUCHOS_UNIT_TEST(TimeEventRange, SingleEventAtZero)
482{
483 auto ter = rcp(new Tempus::TimeEventRange<double>(0.0, 0.0, 0.0,
484 "SingleEventAtZero", true));
485 ter->describe(out, Teuchos::VERB_EXTREME);
486
487 TEST_COMPARE(ter->getNumEvents(), ==, 1);
488
489 TEST_COMPARE(ter->isTime(0.0), ==, true);
490 TEST_FLOATING_EQUALITY(ter->timeToNextEvent(-1.0), 1.0, 1.0e-14);
491 TEST_FLOATING_EQUALITY(ter->timeOfNextEvent(-1.0), 0.0, 1.0e-14);
492 TEST_FLOATING_EQUALITY(ter->timeToNextEvent(0.0), ter->getDefaultTime(),
493 1.0e-14);
494 TEST_FLOATING_EQUALITY(ter->timeOfNextEvent(0.0), ter->getDefaultTime(),
495 1.0e-14);
496 TEST_COMPARE(ter->eventInRange(-1.0, 1.0), ==, true);
497 TEST_COMPARE(ter->eventInRange(0.0, 1.0), ==, false);
498 TEST_COMPARE(ter->eventInRange(0.0, 0.0), ==, false);
499}
500
501} // namespace Tempus_Unit_Test
static double PI
TimeEventRange specifies a start, stop and stride time.
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)