12#include "libmesh/replicated_mesh.h"
13#include "libmesh/boundary_info.h"
65changeSubdomainId(MeshBase & mesh,
const subdomain_id_type old_id,
const subdomain_id_type new_id);
81 const std::vector<BoundaryName> & boundary_name,
82 bool generate_unknown,
83 const std::set<BoundaryID> & mesh_boundary_ids);
99 const std::vector<BoundaryName> & boundary_name,
100 bool generate_unknown);
117 const std::vector<BoundaryName> & boundary_name,
118 bool generate_unknown);
133std::set<std::pair<BoundaryName, BoundaryID>>
152 const std::vector<SubdomainName> & subdomain_name);
154 const std::set<SubdomainName> & subdomain_name);
161std::set<std::pair<SubdomainName, SubdomainID>>
197template <
typename P,
typename C>
212 "Must pass in a valid rz radial coordinate");
213 factor = 2 * M_PI * point(rz_radial_coord);
217 factor = 4 * M_PI * point(0) * point(0);
231template <
typename P,
typename C>
235 return (point - origin).cross(direction).norm();
246 const Point & origin,
247 const RealVectorValue & direction);
257template <
typename P,
typename C>
260 const std::pair<Point, RealVectorValue> & axis,
263 factor = 2 * M_PI * computeDistanceToAxis<P, C>(point, axis.first, axis.second);
288std::unordered_map<dof_id_type, dof_id_type>
290 const std::set<SubdomainID> & block_ids,
291 std::vector<ExtraElementIDName> extra_ids);
301bool isCoPlanar(
const std::vector<Point> & vec_pts,
const Point plane_nvec,
const Point fixed_pt);
309bool isCoPlanar(
const std::vector<Point> & vec_pts,
const Point plane_nvec);
316bool isCoPlanar(
const std::vector<Point> & vec_pts);
344bool hasSubdomainName(
const MeshBase & input_mesh,
const SubdomainName & name);
384 std::vector<dof_id_type> & elem_id_list,
385 std::vector<dof_id_type> & midpoint_node_list,
386 std::vector<dof_id_type> & ordered_node_list,
387 std::vector<dof_id_type> & ordered_elem_id_list);
398 std::vector<dof_id_type> & elem_id_list,
399 std::vector<dof_id_type> & ordered_node_list,
400 std::vector<dof_id_type> & ordered_elem_id_list);
409template <
typename T,
typename Q>
413 if (!MooseUtils::isDigits(name))
415 "'name' ", name,
" should only contain digits that can be converted to a numerical type.");
416 long long id = std::stoll(name);
418 if (
id < std::numeric_limits<Q>::min() ||
id > std::numeric_limits<Q>::max())
419 mooseError(MooseUtils::prettyCppType<T>(&name),
422 " is not within the numeric limits of the expected ID type ",
423 MooseUtils::prettyCppType<Q>(&id_Q),
435void swapNodesInElem(Elem & elem,
const unsigned int nd1,
const unsigned int nd2);
449 const std::string & id_name,
450 const std::vector<std::vector<T>> & id_swaps,
451 std::vector<std::unordered_map<T, T>> & id_swap_pairs,
452 const unsigned int row_index_shift = 0)
454 id_swap_pairs.resize(id_swaps.size());
455 for (
const auto i : index_range(id_swaps))
457 const auto & swaps = id_swaps[i];
458 auto & swap_pairs = id_swap_pairs[i];
460 if (swaps.size() % 2)
462 row_index_shift + i + 1,
467 " does not contain an even number of entries! Num entries: ",
470 swap_pairs.reserve(swaps.size() / 2);
471 for (
unsigned int j = 0; j < swaps.size(); j += 2)
472 swap_pairs[swaps[j]] = swaps[j + 1];
485 const std::string & class_name,
486 const unsigned int num_sections,
487 const unsigned int num_integers,
488 const std::vector<std::vector<std::vector<dof_id_type>>> & elem_integers_swaps,
489 std::vector<std::unordered_map<dof_id_type, dof_id_type>> & elem_integers_swap_pairs);
501 const boundary_id_type boundary_id);
512 const boundary_id_type boundary_id);
520std::unordered_map<dof_id_type, std::unordered_set<dof_id_type>>
542 std::vector<BoundaryName> boundary_names,
544 const SubdomainName & new_subdomain_name);
553 MeshBase & target_mesh,
554 const std::vector<SubdomainName> & target_blocks);
568 UnstructuredMesh & destination,
569 const UnstructuredMesh & source,
570 const bool avoid_merging_subdomains,
571 const bool avoid_merging_boundaries,
587 const std::vector<Point> & points,
589 const BoundaryName & start_boundary,
590 const BoundaryName & end_boundary,
591 const std::vector<unsigned int> & nums_edges_between_points);
611 const std::vector<Point> & points,
612 const std::vector<Point> & mid_points,
614 const BoundaryName & start_boundary,
615 const BoundaryName & end_boundary,
616 const std::vector<unsigned int> & nums_edges_between_points);
632 const std::vector<Point> & points,
634 const BoundaryName & start_boundary,
635 const BoundaryName & end_boundary,
636 const Real max_elem_size);
658 const std::vector<Point> & q_points);
boundary_id_type BoundaryID
subdomain_id_type SubdomainID
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
This data structure is used to store geometric and variable related metadata about each cell face in ...
Real & faceCoord()
Sets/gets the coordinate transformation factor (for e.g.
const Point & faceCentroid() const
Returns the coordinates of the face centroid.
MeshGenerators are objects that can modify or add to an existing mesh.
Provides a way for users to bail out of the current solve.
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.
std::set< std::pair< BoundaryName, BoundaryID > > getAllBoundaryNamesAndIDs(const libMesh::MeshBase &mesh)
Get all boundary names and IDs from a mesh.
bool hasBoundaryID(const MeshBase &input_mesh, const BoundaryID id)
Whether a particular boundary ID exists in the mesh.
Point boundaryCentroidCalculator(const BoundaryName &boundary, MeshBase &mesh)
Calculates the centroid of a boundary on a mesh.
bool hasBoundaryName(const MeshBase &mesh, const BoundaryName &name)
Whether a particular boundary name exists in the mesh.
void computeFiniteVolumeCoords(FaceInfo &fi, const Moose::CoordinateSystemType coord_type, const unsigned int rz_radial_coord=libMesh::invalid_uint)
void coordTransformFactorRZGeneral(const P &point, const std::pair< Point, RealVectorValue > &axis, C &factor)
Computes a coordinate transformation factor for a general axisymmetric axis.
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.
bool hasSubdomainName(const MeshBase &input_mesh, const SubdomainName &name)
Whether a particular subdomain name exists in the mesh.
std::set< std::pair< SubdomainName, SubdomainID > > getAllSubdomainNamesAndIDs(const libMesh::MeshBase &mesh)
Get all subdomain names and ids from a mesh.
void buildPolyLineMesh(MeshBase &mesh, const std::vector< Point > &points, const bool loop, const BoundaryName &start_boundary, const BoundaryName &end_boundary, const std::vector< unsigned int > &nums_edges_between_points)
Generates meshes from edges connecting a list of points.
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.
bool hasSubdomainID(const MeshBase &input_mesh, const SubdomainID &id)
Whether a particular subdomain ID exists in the mesh.
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.
Q getIDFromName(const T &name)
Converts a given name (BoundaryName or SubdomainName) that is known to only contain digits into a cor...
std::unique_ptr< ReplicatedMesh > buildBoundaryMesh(const MeshBase &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...
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.
std::unordered_map< dof_id_type, std::unordered_set< dof_id_type > > buildBoundaryNodeToElemMap(const MeshBase &input_mesh, const boundary_id_type boundary_id)
Build a map from the node ids to all element ids they are part of for the nodes on a particular nodes...
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.
std::vector< unsigned int > nodalQuadraturePointToNodeMap(const Elem &elem, const std::vector< Point > &q_points)
Match the points of a nodal quadrature rule (e.g.
void createSubdomainFromSidesets(MeshBase &mesh, std::vector< BoundaryName > boundary_names, const SubdomainID new_subdomain_id, const SubdomainName &new_subdomain_name)
Create a new subdomain by generating new side elements from a list of sidesets in a given mesh.
std::set< dof_id_type > getBoundaryNodes(const MeshBase &mesh, const BoundaryID boundary_id)
Get all the nodes on that particular boundary, whether a nodeset or a sideset.
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...
void addExternalBoundary(MeshBase &mesh, const BoundaryID extern_bid, bool &has_external_bid)
Adds a sideset for the external boundary of the mesh (e.g.
void swapNodesInElem(Elem &elem, const unsigned int nd1, const unsigned int nd2)
Swap two nodes within an element.
void convertBlockToMesh(MeshBase &source_mesh, MeshBase &target_mesh, const std::vector< SubdomainName > &target_blocks)
Convert a list of blocks in a given mesh to a standalone new mesh.
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::unordered_map< dof_id_type, dof_id_type > getExtraIDUniqueCombinationMap(const MeshBase &mesh, const std::set< SubdomainID > &block_ids, std::vector< ExtraElementIDName > extra_ids)
Create a new set of element-wise IDs by finding unique combinations of existing extra ID values.
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.
void mergeBoundaryIDsWithSameName(MeshBase &mesh)
Merges the boundary IDs of boundaries that have the same names but different IDs.
C computeDistanceToAxis(const P &point, const Point &origin, const RealVectorValue &direction)
Computes the distance to a general axis.
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 getBoundaryID(const BoundaryName &boundary_name, const MeshBase &mesh)
Gets the boundary ID associated with the given BoundaryName.
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...
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 volume integration factor.
std::unique_ptr< ReplicatedMesh > buildLoopBoundaryOf2DMesh(const MeshBase &input_mesh, const boundary_id_type boundary_id)
Build a loop mesh of edges from the contiguous 2D boundary of 2D input mesh Note: The lower-dimension...
RealVectorValue boundaryWeightedNormal(const BoundaryName &boundary, MeshBase &mesh)
Calculates the side-volume weighted (side-vertex) average normal of a boundary on a mesh.
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...
SubdomainID getSubdomainID(const SubdomainName &subdomain_name, const MeshBase &mesh)
Gets the subdomain ID associated with the given SubdomainName.
Point meshCentroidCalculator(const MeshBase &mesh)
Calculates the centroid of a MeshBase.
bool hasBoundaryNameOrID(const MeshBase &mesh, const BoundaryName &name_or_id)
Whether a particular boundary name or ID exists in the mesh.
Real computeMaxDistanceToAxis(const MeshBase &mesh, const Point &origin, const RealVectorValue &direction)
Computes the maximum distance from all nodes of a mesh to a general axis.
const unsigned int invalid_uint
ElemSidePair(Elem *elem_in, unsigned short int side_in)