1 #ifndef NUMERIC_VECTOR_TEST_H 2 #define NUMERIC_VECTOR_TEST_H 8 #include <libmesh/parallel.h> 9 #include <libmesh/fuzzy_equals.h> 15 #define NUMERICVECTORTEST \ 16 CPPUNIT_TEST( testLocalize ); \ 17 CPPUNIT_TEST( testLocalizeBase ); \ 18 CPPUNIT_TEST( testLocalizeIndices ); \ 19 CPPUNIT_TEST( testLocalizeIndicesBase ); \ 20 CPPUNIT_TEST( testLocalizeToOne ); \ 21 CPPUNIT_TEST( testLocalizeToOneBase ); \ 22 CPPUNIT_TEST( testNorms ); \ 23 CPPUNIT_TEST( testNormsBase ); \ 24 CPPUNIT_TEST( testOperations ); \ 25 CPPUNIT_TEST( testOperationsBase ); \ 26 CPPUNIT_TEST( testWriteAndRead ); \ 27 CPPUNIT_TEST( testWriteAndReadBase ); 30 template <
class DerivedClass>
63 template <
class Base,
class Derived>
70 first = v.first_local_index(),
71 last = v.last_local_index();
74 v.set (n, static_cast<libMesh::Number>(n+1));
77 auto v_clone = v.clone();
78 auto & vorig = *v_clone;
87 LIBMESH_ASSERT_NUMBERS_EQUAL
94 LIBMESH_ASSERT_NUMBERS_EQUAL
101 LIBMESH_ASSERT_NUMBERS_EQUAL
108 LIBMESH_ASSERT_NUMBERS_EQUAL
114 LIBMESH_ASSERT_NUMBERS_EQUAL
120 LIBMESH_ASSERT_NUMBERS_EQUAL
126 LIBMESH_ASSERT_NUMBERS_EQUAL
132 LIBMESH_ASSERT_NUMBERS_EQUAL
138 LIBMESH_ASSERT_NUMBERS_EQUAL
144 LIBMESH_ASSERT_NUMBERS_EQUAL
148 LIBMESH_ASSERT_NUMBERS_EQUAL
153 template <
class Base,
class Derived>
160 first = v.first_local_index(),
161 last = v.last_local_index();
164 v.set (n, static_cast<libMesh::Number>(n+1));
175 #ifdef LIBMESH_USE_COMPLEX_NUMBERS 181 Base & v_new = *v_new_ptr;
187 CPPUNIT_ASSERT_EQUAL(v.l1_norm_diff(v_new),
libMesh::Real(0));
190 template <
class Base,
class Derived>
197 first = v.first_local_index(),
198 last = v.last_local_index();
201 v.set (n, -static_cast<libMesh::Number>(n));
204 v.add (n, -static_cast<libMesh::Number>(n));
213 LIBMESH_ASSERT_NUMBERS_EQUAL(v.sum(), -exact_l1,
215 LIBMESH_ASSERT_FP_EQUAL(v.l1_norm(), exact_l1,
217 LIBMESH_ASSERT_FP_EQUAL(v.l2_norm(), exact_l2,
225 u.set (n, -static_cast<libMesh::Number>(n * n));
229 Base & diff = diff_derived;
237 const auto diff_norm = diff.l2_norm();
238 const auto norm_diff = u.l2_norm_diff(v);
239 LIBMESH_ASSERT_FP_EQUAL(diff_norm, norm_diff,
240 (std::abs(diff_norm)+std::abs(norm_diff)) *
244 template <
class Base,
class Derived>
255 first = v.first_local_index(),
256 last = v.last_local_index();
259 v.set (n, static_cast<libMesh::Number>(n));
262 v.add (n, static_cast<libMesh::Number>(n));
268 v.localize_to_one(l,root_pid);
273 LIBMESH_ASSERT_NUMBERS_EQUAL
279 v.insert (&
value, std::vector<libMesh::numeric_index_type>({n}));
286 v.localize_to_one(l,root_pid);
291 LIBMESH_ASSERT_NUMBERS_EQUAL
297 template <
class Base,
class Derived>
306 std::vector<libMesh::dof_id_type> indices;
310 first = v.first_local_index(),
311 last = v.last_local_index();
314 v.set (n, static_cast<libMesh::Number>(n));
321 for (
unsigned int j = 0; j !=
block_size; ++j)
322 indices.push_back(end_index-j-1);
325 v.localize(values, indices);
331 for (
unsigned int j = 0; j !=
block_size; ++j)
332 LIBMESH_ASSERT_NUMBERS_EQUAL
343 Localize<DerivedClass,DerivedClass>();
350 Localize<libMesh::NumericVector<libMesh::Number>,DerivedClass>();
357 Localize<DerivedClass,DerivedClass >(
true);
364 Localize<libMesh::NumericVector<libMesh::Number>,DerivedClass>(
true);
371 LocalizeIndices<DerivedClass,DerivedClass >();
378 LocalizeIndices<libMesh::NumericVector<libMesh::Number>,DerivedClass>();
385 Norms<DerivedClass,DerivedClass >();
392 Norms<libMesh::NumericVector<libMesh::Number>,DerivedClass>();
399 Operations<DerivedClass,DerivedClass >();
406 Operations<libMesh::NumericVector<libMesh::Number>,DerivedClass>();
413 WriteAndRead<DerivedClass,DerivedClass >();
420 WriteAndRead<libMesh::NumericVector<libMesh::Number>,DerivedClass>();
void testLocalizeIndices()
libMesh::Parallel::Communicator * TestCommWorld
static constexpr Real TOLERANCE
processor_id_type rank() const
uint8_t processor_id_type
void Localize(bool to_one=false)
processor_id_type size() const
libMesh::Parallel::Communicator * my_comm
void testLocalizeIndicesBase()
void testOperationsBase()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void testLocalizeToOneBase()
void testWriteAndReadBase()
bool relative_fuzzy_equals(const T &var1, const T2 &var2, const Real tol=TOLERANCE *TOLERANCE)
Function to check whether two variables are equal within a relative tolerance.
std::string libmesh_suite_name