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);
77 const std::vector<BoundaryName> & boundary_name,
78 bool generate_unknown,
79 const std::set<BoundaryID> & mesh_boundary_ids);
91 const std::vector<BoundaryName> & boundary_name,
92 bool generate_unknown);
105 const std::vector<BoundaryName> & boundary_name,
106 bool generate_unknown);
132 const std::vector<SubdomainName> & subdomain_name);
134 const std::set<SubdomainName> & subdomain_name);
169template <
typename P,
typename C>
184 "Must pass in a valid rz radial coordinate");
185 factor = 2 * M_PI * point(rz_radial_coord);
189 factor = 4 * M_PI * point(0) * point(0);
203template <
typename P,
typename C>
207 return (point - origin).cross(direction).norm();
218 const Point & origin,
219 const RealVectorValue & direction);
229template <
typename P,
typename C>
232 const std::pair<Point, RealVectorValue> & axis,
235 factor = 2 * M_PI * computeDistanceToAxis<P, C>(point, axis.first, axis.second);
260std::unordered_map<dof_id_type, dof_id_type>
262 const std::set<SubdomainID> & block_ids,
263 std::vector<ExtraElementIDName> extra_ids);
273bool isCoPlanar(
const std::vector<Point> & vec_pts,
const Point plane_nvec,
const Point fixed_pt);
281bool isCoPlanar(
const std::vector<Point> & vec_pts,
const Point plane_nvec);
356 std::vector<dof_id_type> & elem_id_list,
357 std::vector<dof_id_type> & midpoint_node_list,
358 std::vector<dof_id_type> & ordered_node_list,
359 std::vector<dof_id_type> & ordered_elem_id_list);
370 std::vector<dof_id_type> & elem_id_list,
371 std::vector<dof_id_type> & ordered_node_list,
372 std::vector<dof_id_type> & ordered_elem_id_list);
381template <
typename T,
typename Q>
385 if (!MooseUtils::isDigits(name))
387 "'name' ", name,
" should only contain digits that can be converted to a numerical type.");
388 long long id = std::stoll(name);
390 if (
id < std::numeric_limits<Q>::min() ||
id > std::numeric_limits<Q>::max())
391 mooseError(MooseUtils::prettyCppType<T>(&name),
394 " is not within the numeric limits of the expected ID type ",
395 MooseUtils::prettyCppType<Q>(&id_Q),
421 const std::string & id_name,
422 const std::vector<std::vector<T>> & id_swaps,
423 std::vector<std::unordered_map<T, T>> & id_swap_pairs,
424 const unsigned int row_index_shift = 0)
426 id_swap_pairs.resize(id_swaps.size());
427 for (
const auto i : index_range(id_swaps))
429 const auto & swaps = id_swaps[i];
430 auto & swap_pairs = id_swap_pairs[i];
432 if (swaps.size() % 2)
434 row_index_shift + i + 1,
439 " does not contain an even number of entries! Num entries: ",
442 swap_pairs.reserve(swaps.size() / 2);
443 for (
unsigned int j = 0; j < swaps.size(); j += 2)
444 swap_pairs[swaps[j]] = swaps[j + 1];
457 const std::string & class_name,
458 const unsigned int num_sections,
459 const unsigned int num_integers,
460 const std::vector<std::vector<std::vector<dof_id_type>>> & elem_integers_swaps,
461 std::vector<std::unordered_map<dof_id_type, dof_id_type>> & elem_integers_swap_pairs);
473 const boundary_id_type boundary_id);
484 const boundary_id_type boundary_id);
492std::unordered_map<dof_id_type, std::unordered_set<dof_id_type>>
514 std::vector<BoundaryName> boundary_names,
516 const SubdomainName new_subdomain_name,
517 const std::string type_name);
526 MeshBase & target_mesh,
527 const std::vector<SubdomainName> & target_blocks);
541 UnstructuredMesh & destination,
542 const UnstructuredMesh & source,
543 const bool avoid_merging_subdomains,
544 const bool avoid_merging_boundaries,
560 const std::vector<Point> & points,
562 const BoundaryName & start_boundary,
563 const BoundaryName & end_boundary,
564 const std::vector<unsigned int> & nums_edges_between_points);
584 const std::vector<Point> & points,
585 const std::vector<Point> & mid_points,
587 const BoundaryName & start_boundary,
588 const BoundaryName & end_boundary,
589 const std::vector<unsigned int> & nums_edges_between_points);
605 const std::vector<Point> & points,
607 const BoundaryName & start_boundary,
608 const BoundaryName & end_boundary,
609 const Real max_elem_size);
boundary_id_type BoundaryID
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)