JAX 3D Modal Analysis

SkillDev tools

3D tetrahedral FEM modal analysis of a membrane STL. Takes a binary STL (mm units) + material properties JSON, repairs surface mesh, generates tetrahedral volume mesh via TetGen, assembles 3D stiffness/mass matrices with jax-fem, solves the generalised eigenvalue problem, and reports eigenfrequencies + mode shapes. Returns artifact JSON with eigenfrequencies_hz, eigenfrequencies_khz, modes_in_range, target_range_pass, and paths to summary PNG and CSV.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the JAX 3D Modal Analysis skill

What this skill tells your AI

The instructions your AI receives, as published by lamm-mit/scienceclaw in skills/jax-modal-analysis/SKILL.md and read by ahel’s review.

Full 3D tetrahedral FEM eigenvalue solver for ribbed membrane resonators. Complements fem-analysis (2D Kirchhoff plate approximation) by accounting for 3D volumetric effects, frame stiffness, and out-of-plane deformation.

Usage

python3 {baseDir}/scripts/jax_modal_analysis.py \
  --stl /path/to/membrane.stl \
  --material '{"E_Pa":3e9,"nu":0.35,"rho_kg_m3":1500}' \
  --num-modes 12 \
  --solver-backend jax-iterative \
  --stl-length-scale 1e-3 \
  --target-freq-min 2000 \
  --target-freq-max 8000 \
  --output-dir /tmp/jax_modal_results

Arguments

FlagTypeDefaultDescription
--stlpathrequiredBinary STL file (mm units assumed)
--materialJSON strrequired{"E_Pa":3e9,"nu":0.35,"rho_kg_m3":1500}
--num-modesint12Number of modes to compute
--solver-backendstrjax-iterativearpack, jax-iterative, or jax-xla
--stl-length-scalefloat1e-3Scale factor to convert STL units → metres
--target-freq-minfloat2000Lower bound of target frequency band (Hz)
--target-freq-maxfloat8000Upper bound of target frequency band (Hz)
--output-dirpathautoDirectory for all output files

Output JSON

{
  "stl_path": "/path/to/membrane.stl",
  "topology": "v1_cricket_fine",
  "num_modes_computed": 12,
  "eigenfrequencies_hz":  [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2153.0, 2388.1, ...],
  "eigenfrequencies_khz": [0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 2.153, 2.388, ...],
  "modes_in_range_hz":  [2153.0, 2388.1, 5401.2, 6890.3],
  "modes_in_range_khz": [2.153, 2.388, 5.401, 6.890],
  "target_range_hz": [2000, 8000],
  "target_range_khz": [2.0, 8.0],
  "target_range_pass": true,
  "solver_backend": "arpack",
  "output_dir": "/tmp/jax_modal_results/v1_cricket_fine_...",
  "summary_png": "/tmp/.../summary_figures/modal_run_summary.png",
  "csv_path": "/tmp/.../modal_comprehensive_report.csv",
  "mesh_vtu": "/tmp/.../mesh/volume_mesh.vtu"
}

Chaining with fem-analysis

fem-analysis and jax-modal-analysis are complementary, not alternatives:

SkillModelSpeedBest for
fem-analysis2D Kirchhoff plate~1 sFast screening, flat membranes
jax-modal-analysis3D tetrahedral FEM30–120 sFull 3D validation, ribbed/curved geometries

Recommended workflow:

  1. Run fem-analysis to shortlist candidates (fast 2D pass/fail)
  2. Run jax-modal-analysis on shortlisted STLs for full 3D validation

Signals

GitHub stars
242
Forks
42
Last commit
Aug 2026
Advanced
Catalog kind
skill
Gateway key
jax-modal-analysis
Source
github.com/lamm-mit/scienceclaw