12 #include "libmesh/replicated_mesh.h" 13 #include "libmesh/boundary_info.h" 73 const std::vector<BoundaryName> & boundary_name,
74 bool generate_unknown,
75 const std::set<BoundaryID> & mesh_boundary_ids);
87 const std::vector<BoundaryName> & boundary_name,
88 bool generate_unknown);
101 const std::vector<BoundaryName> & boundary_name,
102 bool generate_unknown);
128 const std::vector<SubdomainName> & subdomain_name);
130 const std::set<SubdomainName> & subdomain_name);
149 template <
typename P,
typename C>
164 "Must pass in a valid rz radial coordinate");
165 factor = 2 * M_PI *
point(rz_radial_coord);
183 template <
typename P,
typename C>
187 return (
point - origin).cross(direction).norm();
198 template <
typename P,
typename C>
201 const std::pair<Point, RealVectorValue> & axis,
204 factor = 2 * M_PI * computeDistanceToAxis<P, C>(
point, axis.first, axis.second);
229 std::unordered_map<dof_id_type, dof_id_type>
231 const std::set<SubdomainID> & block_ids,
232 std::vector<ExtraElementIDName> extra_ids);
242 bool isCoPlanar(
const std::vector<Point> vec_pts,
const Point plane_nvec,
const Point fixed_pt);
250 bool isCoPlanar(
const std::vector<Point> vec_pts,
const Point plane_nvec);
257 bool isCoPlanar(
const std::vector<Point> vec_pts);
285 bool hasSubdomainName(
const MeshBase & input_mesh,
const SubdomainName & name);
299 bool hasBoundaryName(
const MeshBase & input_mesh,
const BoundaryName & name);
312 std::vector<dof_id_type> & elem_id_list,
313 std::vector<dof_id_type> & midpoint_node_list,
314 std::vector<dof_id_type> & ordered_node_list,
315 std::vector<dof_id_type> & ordered_elem_id_list);
326 std::vector<dof_id_type> & elem_id_list,
327 std::vector<dof_id_type> & ordered_node_list,
328 std::vector<dof_id_type> & ordered_elem_id_list);
337 template <
typename T,
typename Q>
341 if (!MooseUtils::isDigits(
name))
343 "'name' ",
name,
" should only contain digits that can be converted to a numerical type.");
344 long long id = std::stoll(
name);
350 " is not within the numeric limits of the expected ID type ",
351 MooseUtils::prettyCppType<Q>(&id_Q),
363 void swapNodesInElem(Elem & elem,
const unsigned int nd1,
const unsigned int nd2);
374 template <
typename T>
377 const std::string & id_name,
378 const std::vector<std::vector<T>> & id_swaps,
379 std::vector<std::unordered_map<T, T>> & id_swap_pairs,
380 const unsigned int row_index_shift = 0)
382 id_swap_pairs.resize(id_swaps.size());
385 const auto & swaps = id_swaps[i];
386 auto & swap_pairs = id_swap_pairs[i];
388 if (swaps.size() % 2)
390 row_index_shift + i + 1,
395 " does not contain an even number of entries! Num entries: ",
398 swap_pairs.reserve(swaps.size() / 2);
399 for (
unsigned int j = 0; j < swaps.size(); j += 2)
400 swap_pairs[swaps[j]] = swaps[j + 1];
413 const std::string & class_name,
414 const unsigned int num_sections,
415 const unsigned int num_integers,
416 const std::vector<std::vector<std::vector<dof_id_type>>> & elem_integers_swaps,
417 std::vector<std::unordered_map<dof_id_type, dof_id_type>> & elem_integers_swap_pairs);
428 std::unique_ptr<ReplicatedMesh>
buildBoundaryMesh(
const ReplicatedMesh & input_mesh,
441 std::vector<BoundaryName> boundary_names,
443 const SubdomainName new_subdomain_name,
444 const std::string type_name);
453 std::unique_ptr<MeshBase> & target_mesh,
454 const std::vector<SubdomainName> & target_blocks);
468 UnstructuredMesh & destination,
469 const UnstructuredMesh & source,
470 const bool avoid_merging_subdomains,
471 const bool avoid_merging_boundaries,
void swapNodesInElem(Elem &elem, const unsigned int nd1, const unsigned int nd2)
Swap two nodes within an element.
std::string name(const ElemQuality q)
void makeOrderedNodeList(std::vector< std::pair< dof_id_type, dof_id_type >> &node_assm, std::vector< dof_id_type > &elem_id_list, std::vector< dof_id_type > &midpoint_node_list, std::vector< dof_id_type > &ordered_node_list, std::vector< dof_id_type > &ordered_elem_id_list)
Convert a list of sides in the form of a vector of pairs of node ids into a list of ordered nodes bas...
std::unordered_map< dof_id_type, dof_id_type > getExtraIDUniqueCombinationMap(const MeshBase &mesh, const std::set< SubdomainID > &block_ids, std::vector< ExtraElementIDName > extra_ids)
Crate a new set of element-wise IDs by finding unique combinations of existing extra ID values...
std::set< BoundaryID > getBoundaryIDSet(const libMesh::MeshBase &mesh, const std::vector< BoundaryName > &boundary_name, bool generate_unknown)
Gets the boundary IDs into a set with their names.
std::unique_ptr< ReplicatedMesh > buildBoundaryMesh(const ReplicatedMesh &input_mesh, const boundary_id_type boundary_id)
Build a lower-dimensional mesh from a boundary of an input mesh Note: The lower-dimensional mesh will...
const unsigned int invalid_uint
bool hasBoundaryName(const MeshBase &input_mesh, const BoundaryName &name)
Whether a particular boundary name exists in the mesh.
void createSubdomainFromSidesets(std::unique_ptr< MeshBase > &mesh, std::vector< BoundaryName > boundary_names, const SubdomainID new_subdomain_id, const SubdomainName new_subdomain_name, const std::string type_name)
Create a new subdomain by generating new side elements from a list of sidesets in a given mesh...
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
void coordTransformFactor(const P &point, C &factor, const Moose::CoordinateSystemType coord_type, const unsigned int rz_radial_coord=libMesh::invalid_uint)
compute a coordinate transformation factor
const Point & faceCentroid() const
Returns the coordinates of the face centroid.
void coordTransformFactorRZGeneral(const P &point, const std::pair< Point, RealVectorValue > &axis, C &factor)
Computes a coordinate transformation factor for a general axisymmetric axis.
bool hasBoundaryID(const MeshBase &input_mesh, const BoundaryID id)
Whether a particular boundary ID exists in the mesh.
Real & faceCoord()
Sets/gets the coordinate transformation factor (for e.g.
std::vector< subdomain_id_type > getSubdomainIDs(const libMesh::MeshBase &mesh, const std::vector< SubdomainName > &subdomain_name)
Get the associated subdomainIDs for the subdomain names that are passed in.
SubdomainID getSubdomainID(const SubdomainName &subdomain_name, const MeshBase &mesh)
Gets the subdomain ID associated with the given SubdomainName.
auto max(const L &left, const R &right)
bool hasSubdomainID(const MeshBase &input_mesh, const SubdomainID &id)
Whether a particular subdomain ID exists in the mesh.
C computeDistanceToAxis(const P &point, const Point &origin, const RealVectorValue &direction)
Computes the distance to a general axis.
BoundaryID getBoundaryID(const BoundaryName &boundary_name, const MeshBase &mesh)
Gets the boundary ID associated with the given BoundaryName.
void computeFiniteVolumeCoords(FaceInfo &fi, const Moose::CoordinateSystemType coord_type, const unsigned int rz_radial_coord=libMesh::invalid_uint)
This data structure is used to store geometric and variable related metadata about each cell face in ...
ElemSidePair(Elem *elem_in, unsigned short int side_in)
boundary_id_type BoundaryID
void idSwapParametersProcessor(const std::string &class_name, const std::string &id_name, const std::vector< std::vector< T >> &id_swaps, std::vector< std::unordered_map< T, T >> &id_swap_pairs, const unsigned int row_index_shift=0)
Reprocess the swap related input parameters to make pairs out of them to ease further processing...
std::vector< BoundaryID > getBoundaryIDs(const libMesh::MeshBase &mesh, const std::vector< BoundaryName > &boundary_name, bool generate_unknown, const std::set< BoundaryID > &mesh_boundary_ids)
Gets the boundary IDs with their names.
void copyIntoMesh(MeshGenerator &mg, UnstructuredMesh &destination, const UnstructuredMesh &source, const bool avoid_merging_subdomains, const bool avoid_merging_boundaries, const Parallel::Communicator &communicator)
Helper function for copying one mesh into another.
bool isCoPlanar(const std::vector< Point > vec_pts, const Point plane_nvec, const Point fixed_pt)
Decides whether all the Points of a vector of Points are in a plane that is defined by a normal vecto...
bool hasSubdomainName(const MeshBase &input_mesh, const SubdomainName &name)
Whether a particular subdomain name exists in the mesh.
void changeSubdomainId(MeshBase &mesh, const subdomain_id_type old_id, const subdomain_id_type new_id)
Changes the old subdomain ID to a new ID in the mesh.
Provides a way for users to bail out of the current solve.
void extraElemIntegerSwapParametersProcessor(const std::string &class_name, const unsigned int num_sections, const unsigned int num_integers, const std::vector< std::vector< std::vector< dof_id_type >>> &elem_integers_swaps, std::vector< std::unordered_map< dof_id_type, dof_id_type >> &elem_integers_swap_pairs)
Reprocess the elem_integers_swaps into maps so they are easier to use.
Point meshCentroidCalculator(const MeshBase &mesh)
Calculates the centroid of a MeshBase.
void changeBoundaryId(MeshBase &mesh, const libMesh::boundary_id_type old_id, const libMesh::boundary_id_type new_id, bool delete_prev)
Changes the old boundary ID to a new ID in the mesh.
void mergeBoundaryIDsWithSameName(MeshBase &mesh)
Merges the boundary IDs of boundaries that have the same names but different IDs. ...
void convertBlockToMesh(std::unique_ptr< MeshBase > &source_mesh, std::unique_ptr< MeshBase > &target_mesh, const std::vector< SubdomainName > &target_blocks)
Convert a list of blocks in a given mesh to a standalone new mesh.
Q getIDFromName(const T &name)
Converts a given name (BoundaryName or SubdomainName) that is known to only contain digits into a cor...
SubdomainID getNextFreeSubdomainID(MeshBase &input_mesh)
Checks input mesh and returns max(block ID) + 1, which represents a block ID that is not currently in...
BoundaryID getNextFreeBoundaryID(MeshBase &input_mesh)
Checks input mesh and returns the largest boundary ID in the mesh plus one, which is a boundary ID in...
auto min(const L &left, const R &right)
MeshGenerators are objects that can modify or add to an existing mesh.
auto index_range(const T &sizable)