Serac  0.1
Serac is an implicit thermal strucural mechanics simulation code.
mesh_utils_base.hpp
Go to the documentation of this file.
1 // Copyright (c) 2019-2024, Lawrence Livermore National Security, LLC and
2 // other Serac Project Developers. See the top-level LICENSE file for
3 // details.
4 //
5 // SPDX-License-Identifier: (BSD-3-Clause)
6 
14 #pragma once
15 
16 #include <memory>
17 #include <variant>
18 #include "mfem.hpp"
19 
21 
22 namespace serac {
23 
33 mfem::Mesh buildMeshFromFile(const std::string& mesh_file);
34 
44 mfem::Mesh buildDiskMesh(int approx_number_of_elements);
45 
55 mfem::Mesh buildBallMesh(int approx_number_of_elements);
56 
66 mfem::Mesh buildRectangleMesh(int elements_in_x, int elements_in_y, double size_x = 1., double size_y = 1.);
67 
79 mfem::Mesh buildCuboidMesh(int elements_in_x, int elements_in_y, int elements_in_z, double size_x = 1.,
80  double size_y = 1., double size_z = 1.);
81 
92 mfem::Mesh buildCylinderMesh(int radial_refinement, int elements_lengthwise, double radius, double height);
93 
107 mfem::Mesh buildHollowCylinderMesh(int radial_refinement, int elements_lengthwise, double inner_radius,
108  double outer_radius, double height, double total_angle = M_PI, int sectors = 8);
109 
122 mfem::Mesh build_hollow_quarter_cylinder(std::size_t radial_divisions, std::size_t angular_divisions,
123  std::size_t vertical_divisions, double inner_radius, double outer_radius,
124  double height);
125 
137 mfem::Mesh buildRingMesh(int radial_refinement, double inner_radius, double outer_radius, double total_angle = M_PI,
138  int sectors = 8);
139 
144 namespace mesh {
145 
156  static void defineInputFileSchema(axom::inlet::Container& container);
157 
162 
166  mutable std::string absolute_mesh_file_name{};
167 };
168 
179  static void defineInputFileSchema(axom::inlet::Container& container);
180 
185  std::vector<int> elements;
186 
191  std::vector<double> overall_size;
192 };
193 
203 
208 };
209 
223 std::unique_ptr<mfem::ParMesh> refineAndDistribute(mfem::Mesh&& serial_mesh, const int refine_serial = 0,
224  const int refine_parallel = 0, const MPI_Comm comm = MPI_COMM_WORLD);
225 
226 } // namespace mesh
227 
228 } // namespace serac
This file contains the all the necessary functions for reading input files.
std::unique_ptr< mfem::ParMesh > refineAndDistribute(mfem::Mesh &&serial_mesh, const int refine_serial, const int refine_parallel, const MPI_Comm comm)
Finalizes a serial mesh into a refined parallel mesh.
Definition: mesh_utils.cpp:452
Accelerator functionality.
Definition: serac.cpp:38
mfem::Mesh buildHollowCylinderMesh(int radial_refinement, int elements_lengthwise, double inner_radius, double outer_radius, double height, double total_angle, int sectors)
Constructs a 3D MFEM mesh of a hollow cylinder.
Definition: mesh_utils.cpp:350
mfem::Mesh buildBallMesh(int approx_number_of_elements)
Constructs a 3D MFEM mesh of a unit ball, centered at the origin.
Definition: mesh_utils.cpp:107
mfem::Mesh buildMeshFromFile(const std::string &mesh_file)
Constructs an MFEM mesh from a file.
Definition: mesh_utils.cpp:19
mfem::Mesh buildCylinderMesh(int radial_refinement, int elements_lengthwise, double radius, double height)
Constructs a 3D MFEM mesh of a cylinder.
Definition: mesh_utils.cpp:156
mfem::Mesh buildRectangleMesh(int elements_in_x, int elements_in_y, double size_x, double size_y)
Constructs a 2D MFEM mesh of a rectangle.
Definition: mesh_utils.cpp:144
mfem::Mesh buildRingMesh(int radial_refinement, double inner_radius, double outer_radius, double total_angle, int sectors)
Constructs a 2D MFEM mesh of a ring.
Definition: mesh_utils.cpp:344
mfem::Mesh buildCuboidMesh(int elements_in_x, int elements_in_y, int elements_in_z, double size_x, double size_y, double size_z)
Constructs a 3D MFEM mesh of a cuboid.
Definition: mesh_utils.cpp:149
mfem::Mesh buildDiskMesh(int approx_number_of_elements)
Constructs a 2D MFEM mesh of a unit disk, centered at the origin.
Definition: mesh_utils.cpp:74
mfem::Mesh build_hollow_quarter_cylinder(std::size_t radial_divisions, std::size_t angular_divisions, std::size_t vertical_divisions, double inner_radius, double outer_radius, double height)
Constructs an MFEM mesh of a hollow cylinder restricted to the first orthant.
Definition: mesh_utils.cpp:358
Input options for generated meshes.
std::vector< double > overall_size
The physical size in each direction.
static void defineInputFileSchema(axom::inlet::Container &container)
Input file parameters for mesh generation.
std::vector< int > elements
The number of elements in each direction.
Input options for meshes read from files.
static void defineInputFileSchema(axom::inlet::Container &container)
Input file parameters specific to this class.
std::string relative_mesh_file_name
The relative path for the mesh file.
std::string absolute_mesh_file_name
The absolute path for the mesh file, intended to be populated by the user directly.
Input options for generated meshes.
int dimension
The space dimension of the n-ball.
int approx_elements
The approximate total number of desired elements.