2 #include "libmesh/equation_systems.h" 3 #include "libmesh/exodusII_io.h" 4 #include "libmesh/nemesis_io.h" 5 #include "libmesh/mesh.h" 6 #include "libmesh/mesh_generation.h" 7 #include "libmesh/parallel.h" 8 #include "libmesh/string_to_enum.h" 9 #include "libmesh/boundary_info.h" 10 #include "libmesh/utility.h" 28 #ifdef LIBMESH_HAVE_EXODUS_API 29 CPPUNIT_TEST(testWriteExodus);
30 #endif // #ifdef LIBMESH_HAVE_EXODUS_API 31 #ifdef LIBMESH_HAVE_NEMESIS_API 36 CPPUNIT_TEST_SUITE_END();
38 template <
typename IOClass>
57 std::vector<std::string> var_names;
58 std::vector<std::set<boundary_id_type>> side_ids;
59 std::vector<std::map<BoundaryInfo::BCTuple, Real>> bc_vals;
64 std::vector<BoundaryInfo::BCTuple> all_bc_tuples =
68 var_names = {
"var1",
"var2",
"var3"};
78 bc_vals.resize(var_names.size());
81 for (
unsigned int i=0; i<var_names.size(); ++i)
84 auto & vals = bc_vals[i];
86 for (
const auto & t : all_bc_tuples)
92 if (side_ids[i].count(b_id))
112 IOClass writer(
mesh);
113 writer.write(filename);
114 writer.write_sideset_data (1, var_names, side_ids, bc_vals);
123 IOClass reader(read_mesh);
124 reader.read(filename);
128 std::vector<std::string> read_in_var_names;
129 std::vector<std::set<boundary_id_type>> read_in_side_ids;
130 std::vector<std::map<BoundaryInfo::BCTuple, Real>> read_in_bc_vals;
131 reader.read_sideset_data
132 (1, read_in_var_names, read_in_side_ids, read_in_bc_vals);
135 CPPUNIT_ASSERT(read_in_var_names == var_names);
136 CPPUNIT_ASSERT(read_in_side_ids == side_ids);
137 CPPUNIT_ASSERT(read_in_bc_vals == bc_vals);
141 std::map<BoundaryInfo::BCTuple, unsigned int> bc_array_indices;
142 reader.get_sideset_data_indices(bc_array_indices);
181 for (
unsigned int i=0; i<5; ++i)
183 (static_cast<unsigned int>(i),
184 libmesh_map_find(bc_array_indices,
185 std::make_tuple(cast_int<dof_id_type>(i),
190 for (
unsigned int i=0; i<5; ++i)
192 (static_cast<unsigned int>(i),
193 libmesh_map_find(bc_array_indices,
194 std::make_tuple(cast_int<dof_id_type>(5*i + 4),
199 for (
unsigned int i=0; i<5; ++i)
201 (static_cast<unsigned int>(i),
202 libmesh_map_find(bc_array_indices,
203 std::make_tuple(cast_int<dof_id_type>(20+i),
208 for (
unsigned int i=0; i<5; ++i)
210 (static_cast<unsigned int>(i),
211 libmesh_map_find(bc_array_indices,
212 std::make_tuple(cast_int<dof_id_type>(5*i),
221 testWriteImpl<ExodusII_IO>(
"write_sideset_data.e",
true);
222 testWriteImpl<ExodusII_IO>(
"write_sideset_data.e",
false);
void allow_renumbering(bool allow)
If false is passed in then this mesh will no longer be renumbered when being prepared for use...
libMesh::Parallel::Communicator * TestCommWorld
CPPUNIT_TEST_SUITE_REGISTRATION(WriteSidesetData)
The libMesh namespace provides an interface to certain functionality in the library.
const BoundaryInfo & get_boundary_info() const
The information about boundary ids on the mesh.
void build_side_list(std::vector< dof_id_type > &element_id_list, std::vector< unsigned short int > &side_list, std::vector< boundary_id_type > &bc_id_list) const
Creates a list of element numbers, sides, and ids for those sides.
virtual bool is_serial() const
void testWriteImpl(const std::string &filename, bool write_vars)
std::string & sideset_name(boundary_id_type id)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
The Mesh class is a thin wrapper, around the ReplicatedMesh class by default.
void set_union(T &data, const unsigned int root_id) const