feat(meshGeneration): added mesh generation scripts and three res of spherical mesh

This commit is contained in:
2025-04-25 11:12:40 -04:00
parent cac22ab847
commit 9a76c447f1
6 changed files with 23 additions and 10 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,15 +1,25 @@
import pygmsh import pygmsh
import meshio import meshio
import numpy as np
from math import sqrt
import argparse import argparse
def generate_spherical_mesh(radius=1, meshSize=0.1): def mesh_size_callback(dim, tag, x, y, z, lc, a, b, k):
with pygmsh.geo.Geometry() as geo: r = np.sqrt(x**2 + y**2 + z**2)
# Create a spherical (ball) geometry centered at (0,0,0) size = a + (b-a) * (1-np.exp(-k*r))
sphere = geo.add_ball([0, 0, 0], radius) return size
# Generate a 2D mesh (i.e. surface mesh) of the sphere
myMesh = geo.generate_mesh(dim=3) def generate_spherical_mesh(radius=1.0, coreRes = 0.1, outRes = 0.1, k = 2):
return myMesh with pygmsh.occ.Geometry() as geom:
originPoint = geom.add_point([0.0, 0.0, 0.0], mesh_size=coreRes)
geom.add_ball([0.0, 0.0, 0.0], 1.0)
geom.set_mesh_size_callback(lambda dim, tag, x, y, z, lc: mesh_size_callback(dim, tag, x, y, z, lc, coreRes, outRes, k))
mesh = geom.generate_mesh(verbose=True)
return mesh
def write_mfem_mesh(meshData, filename): def write_mfem_mesh(meshData, filename):
meshio.write(filename, meshData, file_format='gmsh22') meshio.write(filename, meshData, file_format='gmsh22')
@@ -17,8 +27,11 @@ def write_mfem_mesh(meshData, filename):
if __name__ == '__main__': if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Generate a spherical mesh') parser = argparse.ArgumentParser(description='Generate a spherical mesh')
parser.add_argument('--radius', type=float, default=1.0, help='Radius of the sphere') parser.add_argument('--radius', type=float, default=1.0, help='Radius of the sphere')
parser.add_argument('--meshSize', type=float, default=0.1, help='Mesh size') parser.add_argument('--coreMeshRes', type=float, default=0.01, help='Core Mesh Resolution')
parser.add_argument('--outerMeshRes', type=float, default=0.1, help='Outer Mesh Resolution')
parser.add_argument('--k', type=float, default=2, help='Mesh size scaling factor')
parser.add_argument('--output', type=str, default='sphere.msh', help='Output file name')
args = parser.parse_args() args = parser.parse_args()
meshData = generate_spherical_mesh(args.radius, args.meshSize) meshData = generate_spherical_mesh(args.radius, args.coreMeshRes, args.outerMeshRes, args.k)
write_mfem_mesh(meshData, 'sphere.msh') write_mfem_mesh(meshData, args.output)