name: mesh-generation
description: >
Plan and evaluate mesh generation for numerical simulations — estimate grid
resolution from physics scales (interface width, boundary layers, wavelengths),
check aspect ratios and skewness against quality thresholds, choose between
structured, unstructured, and adaptive mesh refinement strategies, and compute
grid sizing for 1D/2D/3D domains. Use when setting up a new mesh, diagnosing
poor solver convergence caused by mesh quality, deciding how many points to
place across a phase-field interface or boundary layer, or preparing a mesh
convergence study, even if the user only asks "what resolution do I need"
or "why is my solver failing."
allowed-tools: Read, Write, Grep, Glob
metadata:
author: HeshamFS
version: "1.1.0"
security_tier: medium
security_reviewed: true
tested_with:
- claude-code
- gemini-cli
- vs-code-copilot
eval_cases: 2
last_reviewed: "2026-03-26"
Mesh Generation
Goal
Provide a consistent workflow for selecting mesh resolution and checking mesh quality for PDE simulations.
Requirements
- Python 3.8+
- No external dependencies (uses stdlib)
Inputs to Gather
| Input | Description | Example |
|---|
| Domain size | Physical dimensions | 1.0 × 1.0 m |
| Feature size | Smallest feature to resolve | 0.01 m |
| Points per feature | Resolution requirement | 10 points |
| Aspect ratio limit | Maximum dx/dy ratio | 5:1 |
| Quality threshold | Skewness limit | < 0.8 |
Decision Guidance
Resolution Selection
What is the smallest feature size?
├── Interface width → dx ≤ width / 5
├── Boundary layer → dx ≤ layer_thickness / 10
├── Wave length → dx ≤ lambda / 20
└── Diffusion length → dx ≤ sqrt(D × dt) / 2
Mesh Type Selection
| Problem | Recommended Mesh |
|---|
| Simple geometry, uniform | Structured Cartesian |
| Complex geometry | Unstructured triangular/tetrahedral |
| Boundary layers | Hybrid (structured near walls) |
| Adaptive refinement | Quadtree/Octree or AMR |
Script Outputs (JSON Fields)
| Script | Key Outputs |
|---|
scripts/grid_sizing.py | dx, nx, ny, nz, notes |
scripts/mesh_quality.py | aspect_ratio, skewness, quality_flags |
Workflow
- Estimate resolution - From physics scales
- Compute grid sizing - Run
scripts/grid_sizing.py
- Check quality metrics - Run
scripts/mesh_quality.py
- Adjust if needed - Fix aspect ratios, reduce skewness
- Validate - Mesh convergence study
Conversational Workflow Example
User: I need to mesh a 1mm × 1mm domain for a phase-field simulation with interface width of 10 μm.
Agent workflow:
- Compute grid sizing:
python3 scripts/grid_sizing.py --length 0.001 --resolution 200 --json
- Verify interface is resolved: dx = 5 μm, interface width = 10 μm → 2 points per interface width.
- Recommend: Increase to 500 points (dx = 2 μm) for 5 points across interface.
Pre-Mesh Checklist
CLI Examples
# Compute grid sizing for 1D domain
python3 scripts/grid_sizing.py --length 1.0 --resolution 200 --json
# Check mesh quality
python3 scripts/mesh_quality.py --dx 1.0 --dy 0.5 --dz 0.5 --json
# High aspect ratio check
python3 scripts/mesh_quality.py --dx 1.0 --dy 0.1 --json
Error Handling
| Error | Cause | Resolution |
|---|
length must be positive | Invalid domain size | Use positive value |
resolution must be > 1 | Insufficient points | Use at least 2 |
dx, dy must be positive | Invalid spacing | Use positive values |
Interpretation Guidance
Aspect Ratio
| Aspect Ratio | Quality | Impact |
|---|
| 1:1 | Excellent | Optimal accuracy |
| 1:1 - 3:1 | Good | Acceptable |
| 3:1 - 5:1 | Fair | May affect accuracy |
| > 5:1 | Poor | Solver issues likely |
Skewness
| Skewness | Quality | Impact |
|---|
| 0 - 0.25 | Excellent | Optimal |
| 0.25 - 0.50 | Good | Acceptable |
| 0.50 - 0.80 | Fair | May affect accuracy |
| > 0.80 | Poor | Likely problems |
Resolution Guidelines
| Application | Points per Feature |
|---|
| Phase-field interface | 5-10 |
| Boundary layer | 10-20 |
| Shock | 3-5 (with capturing) |
| Wave propagation | 10-20 per wavelength |
| Smooth gradients | 5-10 |
Security
Input Validation
- All inputs (
length, resolution, dx, dy, dz) are validated as finite positive numbers with upper bounds to prevent resource exhaustion
dims is restricted to {1, 2, 3}
argparse type parameters reject non-numeric input at the CLI boundary before any processing occurs
File Access
- Scripts read no external files; all inputs are provided via CLI arguments
- Scripts write only to stdout (JSON output); no files are created unless the agent explicitly uses the Write tool
Tool Restrictions
- Read: Used to inspect script source, references, and user configuration files
- Write: Used to save grid sizing results or mesh quality reports; writes are scoped to the user's working directory
- Grep/Glob: Used to locate relevant files and search references
- The skill's
allowed-tools excludes Bash to prevent the agent from executing arbitrary commands when processing user-provided inputs
Safety Measures
- No
eval(), exec(), or dynamic code generation
- All subprocess calls use explicit argument lists (no
shell=True)
- Reduced tool surface (no Bash) means the agent should use
Read and Write to prepare inputs and capture outputs rather than constructing shell commands from user text
- All output is deterministic JSON with no shell-interpretable content
Limitations
- 2D/3D only: No unstructured mesh generation
- Quality metrics: Basic aspect ratio and skewness only
- No mesh generation: Sizing recommendations only
References
references/mesh_types.md - Structured vs unstructured
references/quality_metrics.md - Aspect ratio/skewness thresholds
Version History
- v1.1.0 (2024-12-24): Enhanced documentation, decision guidance, examples
- v1.0.0: Initial release with 2 mesh quality scripts