A mesh generator for cylindrical multilayer structures using Gmsh, designed for finite element simulations.
- Complete mesh information: Returns vertex counts, element counts, and physical group details
- Clean naming: Surfaces named as
FM1_bottom,FM1_top; volumes asFM1,Spacer, etc. - Multiple interfaces: Python API and command-line tool
- Flexible configuration: JSON config files or direct parameters
Requires Gmsh to be installed.
git clone https://github.com/afanto/cylmesh.git
cd cylmesh
pip install . # or ./install.shfrom cylmesh import create_mesh, print_mesh_summary
# Create mesh with layer names
result = create_mesh(
ml=2.0,
radius=10.0,
layers=[2.0, 1.0, 1.5],
layer_names=["FM1", "MgO", "FM2"],
output_name="device"
)
# Display comprehensive mesh information
print_mesh_summary(result)# Generate mesh with detailed output
cylmesh --ml 2.0 --radius 8.0 --layers 1.0 0.9 1.5 \
--layer-names FM1 MgO FM2 --mesh device.mshBoth interfaces display:
- Vertex count (number of degrees of freedom for FEM)
- Element count (tetrahedral elements)
- Physical groups (surfaces and volumes with tags)
Parameters:
ml(float): Characteristic mesh length (nm)radius(float): Cylinder radius (nm)layers(list): Layer thicknesses (nm)layer_names(list, optional): Names for layerssubdivisions(list, optional): Vertical subdivisions per layeroutput_name(str, optional): Base name for output files
Returns: Dictionary containing:
success(bool): Whether mesh generation succeededparameters(dict): All input parameters usedgeo_file,msh_file(str): Output file pathsgeo_size,msh_size(int): File sizes in bytesmesh_info(dict): Mesh statistics including:num_vertices(int): Number of vertices/nodesnum_elements(int): Number of tetrahedral elementsphysical_groups(dict): Surface and volume information
Load parameters from JSON configuration file.
Config file format:
{
"ml": 3.0,
"radius": 15.0,
"layers": [3.0, 1.0, 2.0],
"layer_names": ["FM1", "MgO", "FM2"],
"subdivisions": [2, 1, 1]
}Pretty-print mesh generation results with organized output showing surfaces, volumes, and mesh statistics.
Surfaces:
- Bottom:
{first_layer}_bottom(e.g.,FM1_bottom) - Tops:
{layer}_top(e.g.,FM1_top,MgO_top,FM2_top) - Default (no names):
1_bottom,1_top,2_top, etc.
Volumes:
- Named:
FM1,MgO,FM2 - Default:
1,2,3
cylmesh --ml FLOAT --radius FLOAT --layers FLOAT [FLOAT ...]
[--layer-names STR [STR ...]]
[--subdivisions INT [INT ...]]
[--config FILE] [--mesh FILE] [--geo FILE]
[--no-run] [--gui] [--verbose]
Use cylmesh --help for complete option details.
- Python 3.8+
- Gmsh 4.8+
MIT License