2 #include "libmesh/distributed_mesh.h" 3 #include "libmesh/equation_systems.h" 4 #include "libmesh/exodusII_io.h" 5 #include "libmesh/explicit_system.h" 6 #include "libmesh/mesh_generation.h" 7 #include "libmesh/nemesis_io.h" 8 #include "libmesh/node.h" 9 #include "libmesh/numeric_vector.h" 10 #include "libmesh/replicated_mesh.h" 11 #include "libmesh/string_to_enum.h" 29 #if defined(LIBMESH_HAVE_EXODUS_API) && defined(LIBMESH_HAVE_NEMESIS_API) 30 CPPUNIT_TEST(testWriteExodusDistributed);
31 CPPUNIT_TEST(testWriteExodusReplicated);
32 CPPUNIT_TEST(testWriteNemesisDistributed);
33 CPPUNIT_TEST(testWriteNemesisReplicated);
37 CPPUNIT_TEST_SUITE_END();
48 Utility::string_to_enum<ElemType>(
"TRI6"));
55 equation_systems.
init();
59 std::vector<Real> initial_vector({10, 0, 12, 8, 4, 2, 16, 6, 14});
62 for (
const auto & node :
mesh.node_ptr_range())
65 if (node->n_comp(0,0))
67 dof_id = node->dof_number(0,0,0);
71 CPPUNIT_ASSERT(node->n_comp(0,1));
72 dof_id = node->dof_number(0,1,0);
74 if (dof_id >= sys_solution.first_local_index() &&
75 dof_id < sys_solution.last_local_index())
76 sys_solution.
set(dof_id, initial_vector[node->id()]);
78 CPPUNIT_ASSERT_EQUAL(initial_vector[node->id()], dof_id*
Real(2));
90 const std::vector<Real> gold_vector = {-1, 3, 10,
102 const std::vector<dof_id_type>
103 node_reordering({0, 3, 1, 8, 5, 4, 6, 7, 2});
107 for (
const auto & node : read_mesh.node_ptr_range())
114 #ifdef LIBMESH_USE_COMPLEX_NUMBERS 115 const unsigned int v2 = 3;
117 const unsigned int v2 = 1;
119 CPPUNIT_ASSERT_EQUAL(node->n_vars(0), 3*v2);
121 CPPUNIT_ASSERT_LESS(node_reordering.size(), std::size_t(node->id()));
122 const dof_id_type gold_i_ux = node_reordering[node->id()] * 3;
125 CPPUNIT_ASSERT_LESS(gold_vector.size(), std::size_t(gold_i_v));
127 LIBMESH_ASSERT_NUMBERS_EQUAL(sys2_soln(node->dof_number(0,0,0)),
128 gold_vector[gold_i_ux], tol);
129 LIBMESH_ASSERT_NUMBERS_EQUAL(sys2_soln(node->dof_number(0,v2,0)),
130 gold_vector[gold_i_uy], tol);
131 LIBMESH_ASSERT_NUMBERS_EQUAL(sys2_soln(node->dof_number(0,2*v2,0)),
132 gold_vector[gold_i_v], tol);
135 #ifdef LIBMESH_USE_COMPLEX_NUMBERS 136 LIBMESH_ASSERT_NUMBERS_EQUAL(sys2_soln(node->dof_number(0,1,0)),
138 LIBMESH_ASSERT_NUMBERS_EQUAL(sys2_soln(node->dof_number(0,2,0)),
139 std::abs(gold_vector[gold_i_ux]), tol);
140 LIBMESH_ASSERT_NUMBERS_EQUAL(sys2_soln(node->dof_number(0,4,0)),
142 LIBMESH_ASSERT_NUMBERS_EQUAL(sys2_soln(node->dof_number(0,5,0)),
143 std::abs(gold_vector[gold_i_uy]), tol);
144 LIBMESH_ASSERT_NUMBERS_EQUAL(sys2_soln(node->dof_number(0,7,0)),
146 LIBMESH_ASSERT_NUMBERS_EQUAL(sys2_soln(node->dof_number(0,8,0)),
147 std::abs(gold_vector[gold_i_v]), tol);
153 template <
typename MeshType>
159 setupTests(
mesh, equation_systems);
161 #ifdef LIBMESH_HAVE_EXODUS_API 176 read_mesh.prepare_for_use();
182 for (
const auto & var_name : nodal_vars)
187 for (
const auto & var_name : nodal_vars)
190 testSolution(read_mesh, sys2);
191 #endif // #ifdef LIBMESH_HAVE_EXODUS_API 199 template <
typename MeshType>
205 setupTests(
mesh, equation_systems);
207 #ifdef LIBMESH_HAVE_NEMESIS_API 220 nemio.
read(filename);
222 read_mesh.prepare_for_use();
228 for (
const auto & var_name : nodal_vars)
233 for (
const auto & var_name : nodal_vars)
240 #endif // #ifdef LIBMESH_HAVE_NEMESIS_API
void testWriteNemesisReplicated()
This is the EquationSystems class.
virtual void read(const std::string &base_filename) override
Implements reading the mesh from several different files.
void allow_renumbering(bool allow)
If false is passed in then this mesh will no longer be renumbered when being prepared for use...
virtual void write_equation_systems(const std::string &, const EquationSystems &, const std::set< std::string > *system_names=nullptr)
This method implements writing a mesh with data to a specified file where the data is taken from the ...
libMesh::Parallel::Communicator * TestCommWorld
void copy_nodal_solution(System &system, std::string system_var_name, std::string exodus_var_name, unsigned int timestep=1)
If we read in a nodal solution while reading in a mesh, we can attempt to copy that nodal solution in...
The ExodusII_IO class implements reading meshes in the ExodusII file format from Sandia National Labs...
void testWriteNemesis(const std::string &filename)
The libMesh namespace provides an interface to certain functionality in the library.
This is the MeshBase class.
CPPUNIT_TEST_SUITE_REGISTRATION(WriteVecAndScalar)
processor_id_type n_processors() const
void libmesh_ignore(const Args &...)
The Nemesis_IO class implements reading parallel meshes in the Nemesis file format from Sandia Nation...
void testWriteExodusDistributed()
The UnstructuredMesh class is derived from the MeshBase class.
virtual void write_equation_systems(const std::string &fname, const EquationSystems &es, const std::set< std::string > *system_names=nullptr) override
Writes out the solution for no specific time or timestep.
Manages consistently variables, degrees of freedom, and coefficient vectors.
void testWriteExodus(const std::string &filename)
void copy_nodal_solution(System &system, std::string system_var_name, std::string exodus_var_name, unsigned int timestep=1)
If we read in a nodal solution while reading in a mesh, we can attempt to copy that nodal solution in...
void testWriteExodusReplicated()
void testSolution(const MeshBase &read_mesh, const System &sys2)
std::unique_ptr< NumericVector< Number > > solution
Data structure to hold solution values.
void setupTests(UnstructuredMesh &mesh, EquationSystems &equation_systems)
const std::vector< std::string > & get_nodal_var_names()
Return list of the nodal variable names.
unsigned int add_variable(std::string_view var, const FEType &type, const std::set< subdomain_id_type > *const active_subdomains=nullptr)
Adds the variable var to the list of variables for this system.
virtual void read(const std::string &name) override
This method implements reading a mesh from a specified file.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual void set(const numeric_index_type i, const T value)=0
Sets v(i) = value.
virtual void init()
Initialize all the systems.
virtual System & add_system(std::string_view system_type, std::string_view name)
Add the system of type system_type named name to the systems array.
processor_id_type processor_id() const
const std::vector< std::string > & get_nodal_var_names()
Return list of the nodal variable names.
void testWriteNemesisDistributed()
Manages consistently variables, degrees of freedom, and coefficient vectors for explicit systems...