Files
Atomizer/tools/adaptive-isogrid
Anto01 5c63d877f0 feat: Switch isogrid to Gmsh Frontal-Delaunay meshing (production default)
Replaces Triangle library with Gmsh as the default triangulation engine for
adaptive isogrid generation. Gmsh's Frontal-Delaunay algorithm provides:

- Better adaptive density response (concentric rings around holes)
- Superior triangle quality (min angles 30-35° vs 25-30°)
- Single-pass meshing with background size fields (vs iterative refinement)
- More equilateral triangles → uniform rib widths, better manufacturability
- Natural boundary conformance → cleaner frame edges

Comparison results (mixed hole weights plate):
- Min angle improvement: +5.1° (25.7° → 30.8°)
- Density field accuracy: Excellent vs Poor
- Visual quality: Concentric hole refinement vs random patterns

Changes:
- Updated src/brain/__main__.py to import triangulation_gmsh
- Added gmsh>=4.11 to requirements.txt (Triangle kept as fallback)
- Updated README and technical-spec.md
- Added comparison script and test results

Triangle library remains available as fallback option.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-17 17:05:19 -05:00
..

Adaptive Isogrid — Plate Lightweighting Tool

Status: Foundation / Pre-Implementation
Architecture: Python Brain + NX Hands + Atomizer Manager

What It Does

Takes a plate with holes → generates an optimally lightweighted isogrid pattern → produces manufacturing-ready geometry. Isogrid density varies across the plate based on hole importance, edge proximity, and optimization-driven meta-parameters.

Architecture

Component Role Runtime
Python Brain Density field → Gmsh Frontal-Delaunay → rib profile ~1-2 sec
NX Hands Import profile → mesh → AFEM merge → Nastran solve → extract results ~60-90 sec
Atomizer Manager Optuna TPE sampling → objective evaluation → convergence 500-2000 trials

Key Insight: Assembly FEM with Superposed Models

  • Model A (permanent): Spider elements at holes + edge BC nodes. All loads/BCs applied here.
  • Model B (variable): 2D shell mesh of ribbed plate. Rebuilt each iteration.
  • Node merge at fixed interface locations connects them reliably every time.

Loads and BCs never need re-association. Only the rib pattern changes.

Directory Structure

adaptive-isogrid/
├── README.md
├── requirements.txt
├── docs/
│   └── technical-spec.md          # Full architecture spec
├── src/
│   ├── brain/                     # Python geometry generator
│   │   ├── __init__.py
│   │   ├── density_field.py       # η(x) evaluation
│   │   ├── triangulation.py       # Constrained Delaunay + refinement
│   │   ├── pocket_profiles.py     # Pocket inset + filleting
│   │   ├── profile_assembly.py    # Final plate - pockets - holes
│   │   └── validation.py          # Manufacturing constraint checks
│   ├── nx/                        # NXOpen journal scripts
│   │   ├── extract_geometry.py    # One-time: face → geometry.json
│   │   ├── build_interface_model.py  # One-time: Model A + spiders
│   │   └── iteration_solve.py     # Per-trial: rebuild Model B + solve
│   └── atomizer_study.py          # Atomizer/Optuna integration
└── tests/
    └── test_geometries/           # Sample geometry.json files

Implementation Phases

  1. Python Brain standalone (1-2 weeks) — geometry generator with matplotlib viz
  2. NX extraction + AFEM setup (1-2 weeks) — one-time project setup scripts
  3. NX iteration script (1-2 weeks) — per-trial mesh/solve/extract loop
  4. Atomizer integration (1 week) — wire objective function + study management
  5. Validation + first real project (1-2 weeks) — production run on client plate

Quick Start (Phase 1)

cd tools/adaptive-isogrid
pip install -r requirements.txt
python -m src.brain --geometry tests/test_geometries/sample_bracket.json --params default

Parameter Space

15 continuous parameters optimized by Atomizer (Optuna TPE):

  • Density field: η₀, α, R₀, κ, p, β, R_edge
  • Spacing: s_min, s_max
  • Rib thickness: t_min, t₀, γ
  • Manufacturing: w_frame, r_f, d_keep

See docs/technical-spec.md for full formulation.