- Python Brain: density field, constrained Delaunay triangulation, pocket profiles, profile assembly, validation modules - NX Hands: skeleton scripts for geometry extraction, AFEM setup, per-iteration solve (require NX environment to develop) - Atomizer integration: 15-param space definition, objective function - Technical spec, README, sample test geometry, requirements.txt - Architecture: Python Brain + NX Hands + Atomizer Manager
76 lines
3.2 KiB
Markdown
76 lines
3.2 KiB
Markdown
# 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)
|
||
|
||
```bash
|
||
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.
|