libMesh
Loading...
Searching...
No Matches
Public Member Functions | List of all members
RBParametersTest Class Reference
Inheritance diagram for RBParametersTest:
[legend]

Public Member Functions

 LIBMESH_CPPUNIT_TEST_SUITE (RBParametersTest)
 
 CPPUNIT_TEST (testScalar)
 
 CPPUNIT_TEST (testOldConstructor)
 
 CPPUNIT_TEST (testIterators)
 
 CPPUNIT_TEST (testIteratorsWithSamples)
 
 CPPUNIT_TEST (testAppend)
 
 CPPUNIT_TEST (testNSamples)
 
 CPPUNIT_TEST (testMultiValued)
 
 CPPUNIT_TEST (testRBParametrized)
 
 CPPUNIT_TEST_SUITE_END ()
 
void testScalar ()
 
void testOldConstructor ()
 
void testIterators ()
 
void testIteratorsWithSamples ()
 
void testAppend ()
 
void testNSamples ()
 
void testMultiValued ()
 
void testRBParametrized ()
 

Detailed Description

Definition at line 14 of file rb_parameters_test.C.

Member Function Documentation

◆ CPPUNIT_TEST() [1/8]

RBParametersTest::CPPUNIT_TEST ( testAppend  )

◆ CPPUNIT_TEST() [2/8]

RBParametersTest::CPPUNIT_TEST ( testIterators  )

◆ CPPUNIT_TEST() [3/8]

RBParametersTest::CPPUNIT_TEST ( testIteratorsWithSamples  )

◆ CPPUNIT_TEST() [4/8]

RBParametersTest::CPPUNIT_TEST ( testMultiValued  )

◆ CPPUNIT_TEST() [5/8]

RBParametersTest::CPPUNIT_TEST ( testNSamples  )

◆ CPPUNIT_TEST() [6/8]

RBParametersTest::CPPUNIT_TEST ( testOldConstructor  )

◆ CPPUNIT_TEST() [7/8]

RBParametersTest::CPPUNIT_TEST ( testRBParametrized  )

◆ CPPUNIT_TEST() [8/8]

RBParametersTest::CPPUNIT_TEST ( testScalar  )

◆ CPPUNIT_TEST_SUITE_END()

RBParametersTest::CPPUNIT_TEST_SUITE_END ( )

◆ LIBMESH_CPPUNIT_TEST_SUITE()

RBParametersTest::LIBMESH_CPPUNIT_TEST_SUITE ( RBParametersTest  )

◆ testAppend()

void RBParametersTest::testAppend ( )
inline

Definition at line 137 of file rb_parameters_test.C.

138 {
139 LOG_UNIT_TEST;
140
141 // Create first multi-sample RBParameters object
142 RBParameters params1;
143 for (int i=0; i<3; ++i)
144 params1.push_back_value("a", Real(i));
145
146 // Create second multi-sample RBParameters object
147 // (must have same number of samples)
148 RBParameters params2;
149 for (int i=0; i<3; ++i)
150 {
151 params2.push_back_value("b", Real(i+3));
152 params2.push_back_extra_value("c", Real(i*i));
153 }
154
155 // Append second onto first
156 params1 += params2;
157
158 // Print result
159 // params1.print();
160
161 // Check that the desired appending happened
162 CPPUNIT_ASSERT(params1.has_value("b"));
163 CPPUNIT_ASSERT(params1.has_extra_value("c"));
164 for (int i=0; i<3; ++i)
165 {
166 CPPUNIT_ASSERT_EQUAL(params1.get_sample_value("b", i), static_cast<Real>(i+3));
167 CPPUNIT_ASSERT_EQUAL(params1.get_extra_sample_value("c", i), static_cast<Real>(i*i));
168 }
169 }
This class is part of the rbOOmit framework.
Real get_extra_sample_value(const std::string &param_name, std::size_t sample_idx) const
Get the value of the specified "extra" parameter at the specified sample index, throwing an error if ...
bool has_value(const std::string &param_name) const
bool has_extra_value(const std::string &param_name) const
Real get_sample_value(const std::string &param_name, std::size_t sample_idx) const
Get the value of the specified parameter at the specified sample, throwing an error if it does not ex...
void push_back_extra_value(const std::string &param_name, Real value)
Same as push_back_value(), but for "extra" parameters.
void push_back_value(const std::string &param_name, Real value)
Similar to set_value(name, index, value) but instead of specifying a particular index,...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

References libMesh::RBParameters::get_extra_sample_value(), libMesh::RBParameters::get_sample_value(), libMesh::RBParameters::has_extra_value(), libMesh::RBParameters::has_value(), libMesh::RBParameters::push_back_extra_value(), libMesh::RBParameters::push_back_value(), and libMesh::Real.

◆ testIterators()

void RBParametersTest::testIterators ( )
inline

Definition at line 82 of file rb_parameters_test.C.

83 {
84 LOG_UNIT_TEST;
85
86 // Test creating a std::map using RBParameters iterators
87 RBParameters params;
88 params.set_value("a", 1.);
89 params.set_value("b", 2.);
90 params.set_value("c", 3.);
91
92 std::map<std::string, Real> m;
93 m.insert(params.begin_serialized(), params.end_serialized());
94
95 // Expected result
96 // a: 1.000000e+00
97 // b: 2.000000e+00
98 // c: 3.000000e+00
99 CPPUNIT_ASSERT(m.count("a"));
100 CPPUNIT_ASSERT(m.count("b"));
101 CPPUNIT_ASSERT(m.count("c"));
102 CPPUNIT_ASSERT_EQUAL(m["a"], Real(1));
103 CPPUNIT_ASSERT_EQUAL(m["b"], Real(2));
104 CPPUNIT_ASSERT_EQUAL(m["c"], Real(3));
105 }
const_iterator end_serialized() const
const_iterator begin_serialized() const
Get const_iterator access to the parameters stored in this RBParameters object.
void set_value(const std::string &param_name, Real value)
Set the value of the specified parameter.

References libMesh::RBParameters::begin_serialized(), libMesh::RBParameters::end_serialized(), libMesh::Real, and libMesh::RBParameters::set_value().

◆ testIteratorsWithSamples()

void RBParametersTest::testIteratorsWithSamples ( )
inline

Definition at line 107 of file rb_parameters_test.C.

108 {
109 LOG_UNIT_TEST;
110
111 RBParameters params;
112 params.set_value("a", 2, 1.); // "a" : [0,0,1]
113 params.set_value("b", 2, 2.); // "b" : [0,0,2]
114 params.set_value("c", 2, 3.); // "c" : [0,0,3]
115
116 // The iterators work on a serialized version of the map, meaning we see an
117 // iterator for each sample of each parameter, e.g. {a,0}, {a,0}, {a,1}.
118 // map.insert(begin(),end()) says "it is unspecified which element is inserted" in this case,
119 // so instead we manually iterate and overwrite with the value from the latest sample.
120 std::map<std::string, Real> m;
121 // m.insert(params.begin(), params.end()); // unspecified behavior
122 for (const auto & [key,val] : as_range(params.begin_serialized(), params.end_serialized()))
123 m[key] = val;
124
125 // Expected result
126 // a: 1.000000e+00
127 // b: 2.000000e+00
128 // c: 3.000000e+00
129 CPPUNIT_ASSERT(m.count("a"));
130 CPPUNIT_ASSERT(m.count("b"));
131 CPPUNIT_ASSERT(m.count("c"));
132 CPPUNIT_ASSERT_EQUAL(m["a"], Real(1));
133 CPPUNIT_ASSERT_EQUAL(m["b"], Real(2));
134 CPPUNIT_ASSERT_EQUAL(m["c"], Real(3));
135 }
SimpleRange< IndexType > as_range(const std::pair< IndexType, IndexType > &p)
Helper function that allows us to treat a homogenous pair as a range.

References libMesh::as_range(), libMesh::RBParameters::begin_serialized(), libMesh::RBParameters::end_serialized(), libMesh::Real, and libMesh::RBParameters::set_value().

◆ testMultiValued()

void RBParametersTest::testMultiValued ( )
inline

Definition at line 216 of file rb_parameters_test.C.

217 {
218 LOG_UNIT_TEST;
219
220 RBParameters params;
221 std::vector<Real> test_vec1 = {2.1, 2.2, 2.3};
222 params.set_value("a", 0, {1.1, 1.2, 1.3});
223 params.set_value("a", 1, test_vec1);
224 params.set_value("a", 2, {3.1, 3.2, 3.3});
225 params.set_value("b", 2, {3.1, 3.2, 3.3});
226
227#ifdef LIBMESH_ENABLE_EXCEPTIONS
228 // Test some errors.
229 CPPUNIT_ASSERT_THROW(params.get_sample_value("b", 0), libMesh::LogicError); // single-value requested, but multi-valued.
230 CPPUNIT_ASSERT_THROW(params.get_sample_value("b", 5), libMesh::LogicError); // sample_idx 5 does not exist.
231 CPPUNIT_ASSERT_THROW(params.get_sample_value("c", 0), libMesh::LogicError); // parameter "c" does not exist.
232 CPPUNIT_ASSERT_THROW(params.get_value("a"), libMesh::LogicError); // a has multiple samples.
233 CPPUNIT_ASSERT_THROW(params.get_value("a", 1.0), libMesh::LogicError); // a has multiple samples.
234 CPPUNIT_ASSERT_THROW(params.get_sample_vector_value("a", 3), libMesh::LogicError); // sample_idx 3 does not exist.
235 CPPUNIT_ASSERT_THROW(params.get_sample_vector_value("c", 0), libMesh::LogicError); // parameter "c" does not exist.
236#endif
237
238 const auto & vector_value_1 = params.get_sample_vector_value("a", 1);
239 for (const auto index : index_range(vector_value_1))
240 CPPUNIT_ASSERT_EQUAL(vector_value_1[index], test_vec1[index]);
241 const auto & vector_value_2 = params.get_sample_vector_value("a", 3, test_vec1);
242 for (const auto index : index_range(vector_value_2))
243 CPPUNIT_ASSERT_EQUAL(vector_value_2[index], test_vec1[index]);
244
245 std::vector<Real> test_vec2 = {5.1, 5.2, 5.3};
246 params.push_back_value("a", test_vec2);
247 params.push_back_value("b", test_vec2);
248 const auto & vector_value_3 = params.get_sample_vector_value("a", 3);
249 for (const auto index : index_range(vector_value_3))
250 CPPUNIT_ASSERT_EQUAL(vector_value_3[index], test_vec2[index]);
251 }
A class to represent the internal "this should never happen" errors, to be thrown by "libmesh_error()...
const RBParameter & get_sample_vector_value(const std::string &param_name, std::size_t sample_idx) const
Real get_value(const std::string &param_name) const
Get the value of the specified parameter, throw an error if it does not exist.
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition int_range.h:153

References libMesh::RBParameters::get_sample_value(), libMesh::RBParameters::get_sample_vector_value(), libMesh::RBParameters::get_value(), libMesh::index_range(), libMesh::RBParameters::push_back_value(), and libMesh::RBParameters::set_value().

◆ testNSamples()

void RBParametersTest::testNSamples ( )
inline

Definition at line 171 of file rb_parameters_test.C.

172 {
173 LOG_UNIT_TEST;
174
175 // A default-constructed RBparameters object has 1 sample by definition
176 RBParameters params;
177 CPPUNIT_ASSERT_EQUAL(params.n_samples(), static_cast<unsigned int>(1));
178
179 // Set the number of samples to use in the no-parameters case
180 params.set_n_samples(10);
181 CPPUNIT_ASSERT_EQUAL(params.n_samples(), static_cast<unsigned int>(10));
182
183 // Define multiple samples for a single parameter. Now we no longer
184 // use the set_n_samples() value, since we have actual samples.
185 params.push_back_value("a", 0.);
186 params.push_back_value("a", 1.);
187 params.push_back_value("a", 2.);
188 params.push_back_value("a", 3.);
189 CPPUNIT_ASSERT_EQUAL(params.n_samples(), static_cast<unsigned int>(4));
190 CPPUNIT_ASSERT_EQUAL(params.get_sample_value("a", 2), static_cast<Real>(2.));
191
192 // Test set_value() with an index.
193 params.set_value("b", 3, 0.);
194 params.set_value("b", 2, 1.);
195 params.set_value("b", 1, 2.);
196 params.set_value("b", 0, 3.);
197 CPPUNIT_ASSERT_EQUAL(params.n_samples(), static_cast<unsigned int>(4));
198 CPPUNIT_ASSERT_EQUAL(params.n_parameters(), static_cast<unsigned int>(2));
199 CPPUNIT_ASSERT_EQUAL(params.get_sample_value("a", 2), static_cast<Real>(2.));
200 CPPUNIT_ASSERT_EQUAL(params.get_sample_value("b", 2), static_cast<Real>(1.));
201
202 // Test the default getters.
203 CPPUNIT_ASSERT_EQUAL(params.get_sample_value("a", 5, 100.), static_cast<Real>(100.));
204 CPPUNIT_ASSERT_EQUAL(params.get_sample_value("b", 5, 200.), static_cast<Real>(200.));
205 CPPUNIT_ASSERT_EQUAL(params.get_sample_value("c", 5, 300.), static_cast<Real>(300.));
206
207 // Test some errors.
208#ifdef LIBMESH_ENABLE_EXCEPTIONS
209 CPPUNIT_ASSERT_THROW(params.get_sample_value("b", 5), libMesh::LogicError); // sample_idx 5 does not exist.
210 CPPUNIT_ASSERT_THROW(params.get_sample_value("c", 0), libMesh::LogicError); // parameter "c" does not exist.
211 CPPUNIT_ASSERT_THROW(params.get_value("a"), libMesh::LogicError); // a has multiple samples.
212 CPPUNIT_ASSERT_THROW(params.get_value("a", 1.0), libMesh::LogicError); // a has multiple samples.
213#endif
214 }
unsigned int n_parameters() const
Get the number of parameters that have been added.
unsigned int n_samples() const
Returns the number of samples stored for all parameters.
void set_n_samples(unsigned int n_samples)
Set the number of samples this RBParameters object is intended to represent, in the case that there a...

References libMesh::RBParameters::get_sample_value(), libMesh::RBParameters::get_value(), libMesh::RBParameters::n_parameters(), libMesh::RBParameters::n_samples(), libMesh::RBParameters::push_back_value(), libMesh::Real, libMesh::RBParameters::set_n_samples(), and libMesh::RBParameters::set_value().

◆ testOldConstructor()

void RBParametersTest::testOldConstructor ( )
inline

Definition at line 58 of file rb_parameters_test.C.

59 {
60 LOG_UNIT_TEST;
61
62 // Test constructing an RBParameters object from a std::map
63 std::map<std::string, Real> in = {{"a", 1.}, {"b", 2.}, {"c", 3.}};
64 RBParameters params(in);
65
66 // Expected result
67 // a: 1.000000e+00
68 // b: 2.000000e+00
69 // c: 3.000000e+00
70 CPPUNIT_ASSERT(params.has_value("a"));
71 CPPUNIT_ASSERT(params.has_value("b"));
72 CPPUNIT_ASSERT(params.has_value("c"));
73 CPPUNIT_ASSERT_EQUAL(params.get_value("a"), Real(1));
74 CPPUNIT_ASSERT_EQUAL(params.get_value("b"), Real(2));
75 CPPUNIT_ASSERT_EQUAL(params.get_value("c"), Real(3));
76
77 // Test that RBParameters objects constructed with the old
78 // constructor have the correct number of samples.
79 CPPUNIT_ASSERT_EQUAL(params.n_samples(), 1u);
80 }

References libMesh::RBParameters::get_value(), libMesh::RBParameters::has_value(), libMesh::RBParameters::n_samples(), and libMesh::Real.

◆ testRBParametrized()

void RBParametersTest::testRBParametrized ( )
inline

Definition at line 253 of file rb_parameters_test.C.

254 {
255 LOG_UNIT_TEST;
256
257 RBParameters mu_min, mu_max;
258
259 mu_min.set_value("a", -10.);
260 mu_max.set_value("a", -11.);
261
262 RBParametrized rb_parametrized;
263 // rb_parametrized.verbose_mode = true; // Enable for more printed details.
264
265#ifdef LIBMESH_ENABLE_EXCEPTIONS
266 // Throw an error due to invalid min/max.
267 CPPUNIT_ASSERT_THROW(rb_parametrized.initialize_parameters(mu_min, mu_max, {}), libMesh::LogicError);
268#endif
269
270 // Define an invalid max RBParameter with multiple steps.
271 mu_max.set_value("a", 2, -40.);
272
273#ifdef LIBMESH_ENABLE_EXCEPTIONS
274 // Throw an error due to invalid max value.
275 CPPUNIT_ASSERT_THROW(rb_parametrized.initialize_parameters(mu_min,mu_max, {}), libMesh::LogicError);
276#endif
277
278 // Set the max value correctly and initialize the RBParametrized object
279 mu_max = RBParameters();
280 mu_max.set_value("a", 10.);
281 rb_parametrized.initialize_parameters(mu_min, mu_max, {});
282
283 RBParameters params;
284
285 // Value == min --> OK.
286 params.set_value("a", 0, 0.);
287 params.set_value("a", 1, -10.);
288 CPPUNIT_ASSERT(rb_parametrized.set_parameters(params));
289
290 // Value == max --> OK.
291 params.set_value("a", 2, 10.);
292 CPPUNIT_ASSERT(rb_parametrized.set_parameters(params));
293
294 // Value < min --> not OK.
295 params.set_value("a", 3, -40.);
296 CPPUNIT_ASSERT(!rb_parametrized.set_parameters(params));
297
298#ifdef LIBMESH_ENABLE_EXCEPTIONS
299 // Throw an error due to different number of parameters.
300 mu_max.set_value("b", 3, 40.);
301 CPPUNIT_ASSERT_THROW(rb_parametrized.initialize_parameters(mu_min, mu_max, {}), libMesh::LogicError);
302#endif
303 }
This class is part of the rbOOmit framework.
bool set_parameters(const RBParameters &params)
Set the current parameters to params The parameters are checked for validity; an error is thrown if t...
void initialize_parameters(const RBParameters &mu_min_in, const RBParameters &mu_max_in, const std::map< std::string, std::vector< Real > > &discrete_parameter_values)
Initialize the parameter ranges and set current_parameters.

References libMesh::RBParametrized::initialize_parameters(), libMesh::RBParametrized::set_parameters(), and libMesh::RBParameters::set_value().

◆ testScalar()

void RBParametersTest::testScalar ( )
inline

Definition at line 36 of file rb_parameters_test.C.

37 {
38 LOG_UNIT_TEST;
39
40 // Test scalar-valued interfaces
41 RBParameters params;
42 params.set_value("a", 1.);
43 params.set_value("b", 2.);
44 params.set_value("c", 3.);
45
46 // Expected result
47 // a: 1.000000e+00
48 // b: 2.000000e+00
49 // c: 3.000000e+00
50 CPPUNIT_ASSERT(params.has_value("a"));
51 CPPUNIT_ASSERT(params.has_value("b"));
52 CPPUNIT_ASSERT(params.has_value("c"));
53 CPPUNIT_ASSERT_EQUAL(params.get_value("a"), Real(1));
54 CPPUNIT_ASSERT_EQUAL(params.get_value("b"), Real(2));
55 CPPUNIT_ASSERT_EQUAL(params.get_value("c"), Real(3));
56 }

References libMesh::RBParameters::get_value(), libMesh::RBParameters::has_value(), libMesh::Real, and libMesh::RBParameters::set_value().


The documentation for this class was generated from the following file: