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: 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
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// ************************************************************
24// ************************************************************
25TEUCHOS_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// ************************************************************
47TEUCHOS_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// ************************************************************
72TEUCHOS_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// ************************************************************
89TEUCHOS_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// ************************************************************
125TEUCHOS_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// ************************************************************
157TEUCHOS_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// ************************************************************
172TEUCHOS_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// ************************************************************
218TEUCHOS_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// ************************************************************
250TEUCHOS_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// ************************************************************
282TEUCHOS_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// ************************************************************
337TEUCHOS_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// ************************************************************
363TEUCHOS_UNIT_TEST(TimeEventRange, createTimeEventRange)
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// ************************************************************
394TEUCHOS_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_Test
static double PI
TimeEventRange specifies a start, stop and stride time.
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)