Files
Atomizer/tools/adaptive-isogrid
Antoine e6f98ac921 feat(extrude): symmetric extrude using part expression
- Uses ISOGRID_RIB_sandbox_N_thk expression for thickness
- Creates expression if missing, uses existing if present
- Symmetric extrude: ±thk/2 from sketch plane
- Fallback to literal value if expression fails
2026-02-17 01:12:16 +00: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 → Constrained Delaunay → rib profile ~1-3 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.