20#ifndef LIBMESH_UNSTRUCTURED_MESH_H
21#define LIBMESH_UNSTRUCTURED_MESH_H
24#include "libmesh/mesh_base.h"
109 virtual void read (
const std::string & name,
110 void * mesh_data=
nullptr,
111 bool skip_renumber_nodes_and_elements=
false,
112 bool skip_find_neighbors=
false,
113 bool skip_detect_interior_parents=
false)
override;
118 virtual void write (
const std::string & name)
const override;
124 void write (
const std::string & name,
125 const std::vector<Number> & values,
126 const std::vector<std::string> & variable_names)
const;
148 const bool full_ordered=
true)
override;
233 bool clear_stitched_boundary_ids=
false,
235 bool use_binary_search=
true,
236 bool enforce_all_nodes_match_on_boundaries=
false,
237 bool merge_boundary_nodes_all_or_nothing=
false,
238 bool remap_subdomain_ids=
false,
239 bool prepare_after_stitching=
true);
247 bool clear_stitched_boundary_ids=
false,
249 bool use_binary_search=
true,
250 bool enforce_all_nodes_match_on_boundaries=
false,
251 bool merge_boundary_nodes_all_or_nothing=
false,
252 bool prepare_after_stitching=
true);
279 const bool skip_find_neighbors =
false,
283 std::unordered_map<subdomain_id_type, subdomain_id_type> *
284 id_remapping =
nullptr,
285 const bool skip_preparation =
false);
296 virtual void find_neighbors (
const bool reset_remote_elements =
false,
297 const bool reset_current_list =
true,
298 const bool assert_valid =
true)
override;
300#ifdef LIBMESH_ENABLE_AMR
319 bool clear_stitched_boundary_ids,
321 bool use_binary_search,
322 bool enforce_all_nodes_match_on_boundaries,
323 bool skip_find_neighbors,
324 bool merge_boundary_nodes_all_or_nothing,
325 bool remap_subdomain_ids,
326 bool prepare_after_stitching);
This is the MeshBase class.
The SimpleRange templated class is intended to make it easy to construct ranges from pairs of iterato...
The UnstructuredMesh class is derived from the MeshBase class.
UnstructuredMesh(UnstructuredMesh &&)=delete
Move-constructor deleted in MeshBase.
virtual void all_second_order_range(const SimpleRange< element_iterator > &range, const bool full_ordered=true) override
Converts a (conforming, non-refined) mesh with linear elements into a mesh with second-order elements...
virtual void all_first_order() override
Converts a mesh with higher-order elements into a mesh with linear elements.
void create_pid_mesh(UnstructuredMesh &pid_mesh, const processor_id_type pid) const
Generates a new mesh containing all the elements which are assigned to processor pid.
virtual void copy_nodes_and_elements(const MeshBase &other_mesh, const bool skip_find_neighbors=false, dof_id_type element_id_offset=0, dof_id_type node_id_offset=0, unique_id_type unique_id_offset=0, std::unordered_map< subdomain_id_type, subdomain_id_type > *id_remapping=nullptr, const bool skip_preparation=false)
Deep copy of nodes and elements from another mesh object (used by subclass copy constructors and by m...
virtual void write(const std::string &name) const override
Write the file specified by name.
std::size_t stitch_meshes(const MeshBase &other_mesh, boundary_id_type this_mesh_boundary, boundary_id_type other_mesh_boundary, Real tol=TOLERANCE, bool clear_stitched_boundary_ids=false, bool verbose=true, bool use_binary_search=true, bool enforce_all_nodes_match_on_boundaries=false, bool merge_boundary_nodes_all_or_nothing=false, bool remap_subdomain_ids=false, bool prepare_after_stitching=true)
Stitch other_mesh to this mesh so that this mesh is the union of the two meshes.
virtual void read(const std::string &name, void *mesh_data=nullptr, bool skip_renumber_nodes_and_elements=false, bool skip_find_neighbors=false, bool skip_detect_interior_parents=false) override
Reads the file specified by name.
virtual void all_complete_order_range(const SimpleRange< element_iterator > &range) override
Converts a (conforming, non-refined) mesh with linear elements into a mesh with "complete" order elem...
UnstructuredMesh & operator=(const UnstructuredMesh &)=delete
Copy assignment is not allowed.
virtual bool contract() override
Delete subactive (i.e.
virtual void find_neighbors(const bool reset_remote_elements=false, const bool reset_current_list=true, const bool assert_valid=true) override
Other functions from MeshBase requiring re-definition.
virtual MeshBase & assign(MeshBase &&other_mesh) override=0
Shim to allow operator = (&&) to behave like a virtual function without having to be one.
std::size_t stitching_helper(const MeshBase *other_mesh, boundary_id_type boundary_id_1, boundary_id_type boundary_id_2, Real tol, bool clear_stitched_boundary_ids, bool verbose, bool use_binary_search, bool enforce_all_nodes_match_on_boundaries, bool skip_find_neighbors, bool merge_boundary_nodes_all_or_nothing, bool remap_subdomain_ids, bool prepare_after_stitching)
Helper function for stitch_meshes and stitch_surfaces that does the mesh stitching.
void create_submesh(UnstructuredMesh &new_mesh, const const_element_iterator &it, const const_element_iterator &it_end) const
Constructs a mesh called "new_mesh" from the current mesh by iterating over the elements between it a...
UnstructuredMesh(const UnstructuredMesh &)=default
UnstructuredMesh uses a defaulted copy constructor.
virtual ~UnstructuredMesh()
Destructor.
std::size_t stitch_surfaces(boundary_id_type boundary_id_1, boundary_id_type boundary_id_2, Real tol=TOLERANCE, bool clear_stitched_boundary_ids=false, bool verbose=true, bool use_binary_search=true, bool enforce_all_nodes_match_on_boundaries=false, bool merge_boundary_nodes_all_or_nothing=false, bool prepare_after_stitching=true)
Similar to stitch_meshes, except that we stitch two adjacent surfaces within this mesh.
virtual void move_nodes_and_elements(MeshBase &&other_mesh)=0
Move node and elements from other_mesh to this mesh.
The libMesh namespace provides an interface to certain functionality in the library.
static constexpr Real TOLERANCE
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
uint8_t processor_id_type
The definition of the const_element_iterator struct.