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);
144 const std::vector<SubdomainName> & subdomain_name);
146 const std::set<SubdomainName> & subdomain_name);
181template <
typename P,
typename C>
196 "Must pass in a valid rz radial coordinate");
197 factor = 2 * M_PI * point(rz_radial_coord);
201 factor = 4 * M_PI * point(0) * point(0);
215template <
typename P,
typename C>
219 return (point - origin).cross(direction).norm();
230 const Point & origin,
231 const RealVectorValue & direction);
241template <
typename P,
typename C>
244 const std::pair<Point, RealVectorValue> & axis,
247 factor = 2 * M_PI * computeDistanceToAxis<P, C>(point, axis.first, axis.second);
272std::unordered_map<dof_id_type, dof_id_type>
274 const std::set<SubdomainID> & block_ids,
275 std::vector<ExtraElementIDName> extra_ids);
285bool isCoPlanar(
const std::vector<Point> & vec_pts,
const Point plane_nvec,
const Point fixed_pt);
293bool isCoPlanar(
const std::vector<Point> & vec_pts,
const Point plane_nvec);
300bool isCoPlanar(
const std::vector<Point> & vec_pts);
328bool hasSubdomainName(
const MeshBase & input_mesh,
const SubdomainName & name);
368 std::vector<dof_id_type> & elem_id_list,
369 std::vector<dof_id_type> & midpoint_node_list,
370 std::vector<dof_id_type> & ordered_node_list,
371 std::vector<dof_id_type> & ordered_elem_id_list);
382 std::vector<dof_id_type> & elem_id_list,
383 std::vector<dof_id_type> & ordered_node_list,
384 std::vector<dof_id_type> & ordered_elem_id_list);
393template <
typename T,
typename Q>
397 if (!MooseUtils::isDigits(name))
399 "'name' ", name,
" should only contain digits that can be converted to a numerical type.");
400 long long id = std::stoll(name);
402 if (
id < std::numeric_limits<Q>::min() ||
id > std::numeric_limits<Q>::max())
403 mooseError(MooseUtils::prettyCppType<T>(&name),
406 " is not within the numeric limits of the expected ID type ",
407 MooseUtils::prettyCppType<Q>(&id_Q),
419void swapNodesInElem(Elem & elem,
const unsigned int nd1,
const unsigned int nd2);
433 const std::string & id_name,
434 const std::vector<std::vector<T>> & id_swaps,
435 std::vector<std::unordered_map<T, T>> & id_swap_pairs,
436 const unsigned int row_index_shift = 0)
438 id_swap_pairs.resize(id_swaps.size());
439 for (
const auto i : index_range(id_swaps))
441 const auto & swaps = id_swaps[i];
442 auto & swap_pairs = id_swap_pairs[i];
444 if (swaps.size() % 2)
446 row_index_shift + i + 1,
451 " does not contain an even number of entries! Num entries: ",
454 swap_pairs.reserve(swaps.size() / 2);
455 for (
unsigned int j = 0; j < swaps.size(); j += 2)
456 swap_pairs[swaps[j]] = swaps[j + 1];
469 const std::string & class_name,
470 const unsigned int num_sections,
471 const unsigned int num_integers,
472 const std::vector<std::vector<std::vector<dof_id_type>>> & elem_integers_swaps,
473 std::vector<std::unordered_map<dof_id_type, dof_id_type>> & elem_integers_swap_pairs);
485 const boundary_id_type boundary_id);
496 const boundary_id_type boundary_id);
504std::unordered_map<dof_id_type, std::unordered_set<dof_id_type>>
526 std::vector<BoundaryName> boundary_names,
528 const SubdomainName new_subdomain_name,
529 const std::string type_name);
538 MeshBase & target_mesh,
539 const std::vector<SubdomainName> & target_blocks);
553 UnstructuredMesh & destination,
554 const UnstructuredMesh & source,
555 const bool avoid_merging_subdomains,
556 const bool avoid_merging_boundaries,
572 const std::vector<Point> & points,
574 const BoundaryName & start_boundary,
575 const BoundaryName & end_boundary,
576 const std::vector<unsigned int> & nums_edges_between_points);
596 const std::vector<Point> & points,
597 const std::vector<Point> & mid_points,
599 const BoundaryName & start_boundary,
600 const BoundaryName & end_boundary,
601 const std::vector<unsigned int> & nums_edges_between_points);
617 const std::vector<Point> & points,
619 const BoundaryName & start_boundary,
620 const BoundaryName & end_boundary,
621 const Real max_elem_size);
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.
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.
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::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 createSubdomainFromSidesets(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 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)