Tempus Version of the Day
Time Integration
Loading...
Searching...
No Matches
Tempus_UnitTest_TimeEventRangeIndex.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#include "Tempus_TimeEventRangeIndex.hpp"
12
13
14namespace Tempus_Unit_Test {
15
16using Teuchos::RCP;
17using Teuchos::rcp;
18using Teuchos::rcp_const_cast;
19using Teuchos::rcp_dynamic_cast;
20
21
22// ************************************************************
23// ************************************************************
24TEUCHOS_UNIT_TEST(TimeEventRangeIndex, Default_Construction)
25{
26 auto te = rcp(new Tempus::TimeEventRangeIndex<double>());
27
28 TEST_COMPARE(te->getName(), ==, "TimeEventRangeIndex (0; 0; 1)");
29
30 // Test when everything is zero.
31 TEST_COMPARE(te->getIndexStart (), ==, 0);
32 TEST_COMPARE(te->getIndexStop (), ==, 0);
33 TEST_COMPARE(te->getIndexStride(), ==, 1);
34 TEST_COMPARE(te->getNumEvents (), ==, 1);
35
36 // Check base class defaults (functions not implemented in TimeEventRangeIndex).
37 TEST_COMPARE(te->isTime(1.0), ==, false);
38 TEST_COMPARE(te->timeToNextEvent(1.0), ==, te->getDefaultTime());
39 TEST_COMPARE(te->timeOfNextEvent(1.0), ==, te->getDefaultTime());
40 TEST_COMPARE(te->eventInRange(1.0, 4.0), ==, false);
41}
42
43
44// ************************************************************
45// ************************************************************
46TEUCHOS_UNIT_TEST(TimeEventRangeIndex, Construction)
47{
49 -1, 10, 2, "TestName"));
50
51 TEST_COMPARE(te->getName(), ==, "TestName");
52
53 // Test when everything is zero.
54 TEST_COMPARE(te->getIndexStart (), ==, -1);
55 TEST_COMPARE(te->getIndexStop (), ==, 10);
56 TEST_COMPARE(te->getIndexStride(), ==, 2);
57 TEST_COMPARE(te->getNumEvents (), ==, 6);
58}
59
60
61// ************************************************************
62// ************************************************************
63TEUCHOS_UNIT_TEST(TimeEventRangeIndex, Basic_Accesors)
64{
65 auto te = rcp(new Tempus::TimeEventRangeIndex<double>());
66
67 te->setName("TestName");
68 TEST_COMPARE(te->getName(), ==, "TestName");
69
70 // Reset start after stop.
71 te->setIndexStart(1);
72 TEST_COMPARE(te->getIndexStart (), ==, 1);
73 TEST_COMPARE(te->getIndexStop (), ==, 1);
74 TEST_COMPARE(te->getIndexStride(), ==, 1);
75 TEST_COMPARE(te->getNumEvents (), ==, 1);
76
77 // Reset stop.
78 te->setIndexStop(5);
79 TEST_COMPARE(te->getIndexStart (), ==, 1);
80 TEST_COMPARE(te->getIndexStop (), ==, 5);
81 TEST_COMPARE(te->getIndexStride(), ==, 1);
82 TEST_COMPARE(te->getNumEvents (), ==, 5);
83
84 // Reset stride.
85 te->setIndexStride(2);
86 TEST_COMPARE(te->getIndexStart (), ==, 1);
87 TEST_COMPARE(te->getIndexStop (), ==, 5);
88 TEST_COMPARE(te->getIndexStride(), ==, 2);
89 TEST_COMPARE(te->getNumEvents (), ==, 3);
90
91 // Set with index range.
92 te->setIndexRange(-5, 5, 3);
93 TEST_COMPARE(te->getIndexStart (), ==, -5);
94 TEST_COMPARE(te->getIndexStop (), ==, 5);
95 TEST_COMPARE(te->getIndexStride(), ==, 3);
96 TEST_COMPARE(te->getNumEvents (), ==, 4);
97}
98
99
100// ************************************************************
101// ************************************************************
102TEUCHOS_UNIT_TEST(TimeEventRangeIndex, Stride)
103{
104 auto te = rcp(new Tempus::TimeEventRangeIndex<double>());
105 te->setIndexStart(1);
106 te->setIndexStop (5);
107 TEST_COMPARE(te->getIndexStart (), ==, 1);
108 TEST_COMPARE(te->getIndexStop (), ==, 5);
109
110 // Negative stride should be reset to stop_-start_.
111 te->setIndexStride(-1);
112 TEST_COMPARE(te->getIndexStride(), ==, 1);
113 TEST_COMPARE(te->getNumEvents (), ==, 5);
114
115 // Large stride should be reset to stop_-start_.
116 te->setIndexStride(5);
117 TEST_COMPARE(te->getIndexStride(), ==, 4);
118 TEST_COMPARE(te->getNumEvents (), ==, 2);
119}
120
121
122// ************************************************************
123// ************************************************************
124TEUCHOS_UNIT_TEST(TimeEventRangeIndex, isIndex)
125{
126 auto te = rcp(new Tempus::TimeEventRangeIndex<double>());
127 te->setIndexRange(-5, 5, 3);
128
129 // Test isIndex.
130 TEST_COMPARE(te->isIndex(-6), ==, false); // Around first event.
131 TEST_COMPARE(te->isIndex(-5), ==, true );
132 TEST_COMPARE(te->isIndex(-4), ==, false);
133
134 TEST_COMPARE(te->isIndex(0), ==, false); // Around mid event.
135 TEST_COMPARE(te->isIndex(1), ==, true );
136 TEST_COMPARE(te->isIndex(2), ==, false);
137
138 TEST_COMPARE(te->isIndex(3), ==, false); // Around last event.
139 TEST_COMPARE(te->isIndex(4), ==, true );
140 TEST_COMPARE(te->isIndex(5), ==, false);
141}
142
143
144// ************************************************************
145// ************************************************************
146TEUCHOS_UNIT_TEST(TimeEventRangeIndex, indexToNextEvent)
147{
148 auto te = rcp(new Tempus::TimeEventRangeIndex<double>());
149 te->setIndexRange(-5, 5, 3);
150
151 // Test indexToNextEvent.
152 TEST_COMPARE(te->indexToNextEvent(-9), ==, 4); // Around first event.
153 TEST_COMPARE(te->indexToNextEvent(-5), ==, 3);
154 TEST_COMPARE(te->indexToNextEvent(-4), ==, 2);
155
156 TEST_COMPARE(te->indexToNextEvent(-1), ==, 2); // Around mid event.
157 TEST_COMPARE(te->indexToNextEvent( 1), ==, 3);
158 TEST_COMPARE(te->indexToNextEvent( 3), ==, 1);
159
160 TEST_COMPARE(te->indexToNextEvent( 2), ==, 2); // Around last event.
161 TEST_COMPARE(te->indexToNextEvent( 4), ==, te->getDefaultIndex()-4);
162 TEST_COMPARE(te->indexToNextEvent( 8), ==, te->getDefaultIndex()-8);
163}
164
165
166// ************************************************************
167// ************************************************************
168TEUCHOS_UNIT_TEST(TimeEventRangeIndex, indexOfNextEvent)
169{
170 auto te = rcp(new Tempus::TimeEventRangeIndex<double>());
171 te->setIndexRange(-5, 5, 3);
172
173 // Test indexOfNextEvent.
174 TEST_COMPARE(te->indexOfNextEvent(-9), ==, -5); // Around first event.
175 TEST_COMPARE(te->indexOfNextEvent(-5), ==, -2);
176 TEST_COMPARE(te->indexOfNextEvent(-4), ==, -2);
177
178 TEST_COMPARE(te->indexOfNextEvent(-1), ==, 1); // Around mid event.
179 TEST_COMPARE(te->indexOfNextEvent( 1), ==, 4);
180 TEST_COMPARE(te->indexOfNextEvent( 3), ==, 4);
181
182 TEST_COMPARE(te->indexOfNextEvent( 2), ==, 4); // Around last event.
183 TEST_COMPARE(te->indexOfNextEvent( 4), ==, te->getDefaultIndex());
184 TEST_COMPARE(te->indexOfNextEvent( 8), ==, te->getDefaultIndex());
185}
186
187
188// ************************************************************
189// ************************************************************
190TEUCHOS_UNIT_TEST(TimeEventRangeIndex, eventInRangeIndex)
191{
192 auto te = rcp(new Tempus::TimeEventRangeIndex<double>());
193 te->setIndexRange(-5, 5, 3);
194
195 // Test eventInRangeIndex.
196 // Right end.
197 TEST_COMPARE(te->eventInRangeIndex(-9, -6), ==, false); // Around first event.
198 TEST_COMPARE(te->eventInRangeIndex(-9, -5), ==, true );
199 TEST_COMPARE(te->eventInRangeIndex(-9, -4), ==, true );
200
201 TEST_COMPARE(te->eventInRangeIndex(-1, 0), ==, false); // Around mid event.
202 TEST_COMPARE(te->eventInRangeIndex(-1, 1), ==, true );
203 TEST_COMPARE(te->eventInRangeIndex(-1, 2), ==, true );
204
205 TEST_COMPARE(te->eventInRangeIndex(2, 3), ==, false); // Around last event.
206 TEST_COMPARE(te->eventInRangeIndex(2, 4), ==, true );
207 TEST_COMPARE(te->eventInRangeIndex(2, 5), ==, true );
208
209 // Left end.
210 TEST_COMPARE(te->eventInRangeIndex(-6.0, -3), ==, true ); // Around first event.
211 TEST_COMPARE(te->eventInRangeIndex(-5.0, -3), ==, false);
212 TEST_COMPARE(te->eventInRangeIndex(-4.0, -3), ==, false);
213
214 TEST_COMPARE(te->eventInRangeIndex(-3, 0), ==, true ); // Around mid event.
215 TEST_COMPARE(te->eventInRangeIndex(-2, 0), ==, false);
216 TEST_COMPARE(te->eventInRangeIndex(-1, 0), ==, false);
217
218 TEST_COMPARE(te->eventInRangeIndex(3, 8), ==, true ); // Around last event.
219 TEST_COMPARE(te->eventInRangeIndex(4, 8), ==, false);
220 TEST_COMPARE(te->eventInRangeIndex(5, 8), ==, false);
221}
222
223
224// ************************************************************
225// ************************************************************
226TEUCHOS_UNIT_TEST(TimeEventRangeIndex, getValidParameters)
227{
228 auto teri = rcp(new Tempus::TimeEventRangeIndex<double>());
229
230 auto pl = teri->getValidParameters();
231
232 TEST_COMPARE( pl->get<std::string>("Type"), ==, "Range Index");
233 TEST_COMPARE( pl->get<std::string>("Name"), ==, "TimeEventRangeIndex (0; 0; 1)");
234 TEST_COMPARE( pl->get<int>("Start Index") , ==, 0);
235 TEST_COMPARE( pl->get<int>("Stop Index") , ==, 0);
236 TEST_COMPARE( pl->get<int>("Stride Index"), ==, 1);
237
238 { // Ensure that parameters are "used", excluding sublists.
239 std::ostringstream unusedParameters;
240 pl->unused(unusedParameters);
241 TEST_COMPARE ( unusedParameters.str(), ==, "");
242 }
243}
244
245
246// ************************************************************
247// ************************************************************
248TEUCHOS_UNIT_TEST(TimeEventRangeIndex, createTimeEventRange)
249{
250 // Construct parameterList similar to getValidParameters().
251 Teuchos::RCP<Teuchos::ParameterList> pl =
252 Teuchos::parameterList("Time Event Range Index");
253
254 pl->set("Name", "Unit Test Time Event Range Index");
255 pl->set("Type", "Range Index");
256 pl->set("Start Index", -1);
257 pl->set("Stop Index", 11);
258 pl->set("Stride Index", 2);
259
260 // Construct TimeEventRangeIndex from ParameterList.
261 auto teri = Tempus::createTimeEventRangeIndex<double>(pl);
262
263 teri->describe(out, Teuchos::VERB_EXTREME);
264
265 TEST_COMPARE( teri->getName() , ==, "Unit Test Time Event Range Index");
266 TEST_COMPARE( teri->getType() , ==, "Range Index");
267 TEST_COMPARE( teri->getIndexStart() , ==, -1 );
268 TEST_COMPARE( teri->getIndexStop() , ==, 11 );
269 TEST_COMPARE( teri->getIndexStride(), ==, 2 );
270 TEST_COMPARE( teri->getNumEvents() , ==, 7 );
271}
272
273
274} // namespace Tempus_Test
TimeEventRangeIndex specifies a start, stop and stride index.
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)