Files
Atomizer/projects/isogrid-dev-plate/CONTEXT.md
2026-02-19 08:00:36 +00:00

140 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CONTEXT.md — ACS Stack Main Plate — Isogrid Lightweighting
**Project:** Isogrid Dev Plate
**Client:** ACS (Attitude Control System) — Spacecraft structural assembly
**Author:** Antoine + Atomizer
**Created:** 2026-02-18
**Status:** Campaign 01 running — TPE v1
---
## Mandate
Minimize the mass of the ACS spacecraft structural plate by replacing solid material with an adaptive triangular isogrid rib pattern. The rib density adapts to bolt-hole proximity, perimeter reinforcement, and FEA stress feedback from the previous trial.
**Objective (single):** Minimize total plate mass (kg)
**Constraint (hard):** Max von Mises stress ≤ 100.6 MPa (AL7075-T6, SF = 5)
**No displacement constraint** — confirmed by Antoine 2026-02-18
---
## Material — AL7075-T6
| Property | Value | Source |
|----------|-------|--------|
| Density | 2810 kg/m³ (2.810×10⁻⁶ kg/mm³) | Material standard |
| Young's modulus | 71.7 GPa | Material standard |
| Poisson's ratio | 0.33 | Material standard |
| Yield strength (σ_yield) | 503 MPa | Material standard |
| Safety factor | 5 | Antoine (confirmed 2026-02-18) |
| **σ_allow = σ_yield / SF** | **100.6 MPa** | Derived |
> ⚠️ **Material discrepancy**: The NX FEM model (MAT1 card in DAT file) uses E = 68.98 GPa and ρ = 2.711×10⁻⁶ kg/mm³, which corresponds to **AL6061-T6** properties. Optimization calculations (stress allowable, mass target) are based on AL7075-T6 as confirmed by Antoine. Model update to AL7075-T6 properties is tracked as a gap below.
---
## Load Case
From baseline FEA (`acs_stack_main_plate_iso_project_sim2-solution_1.f06`):
| Parameter | Value | Notes |
|-----------|-------|-------|
| Solver | NX Nastran SOL 101 | Linear static |
| Subcase | 1 | Single load case |
| Load | FZ = 1,372.9 N | 1.372931×10⁶ mN in kg-mm-s |
| Units | kg-mm-s | Stress output in kPa → ÷1000 → MPa |
> ⚠️ **BCs gap**: Exact boundary condition details (which nodes are fixed, where load is applied) not yet extracted. Confirm by opening the model in NX or parsing the BDF for SPC/FORCE cards. Tracked below.
---
## NX Model Map
### Files
| File | Role | Location |
|------|------|----------|
| `ACS_Stack_Main_Plate_Iso_Project.prt` | Geometry part (CAD) | `models/` |
| `ACS_Stack_Main_Plate_Iso_project_fem2_i.prt` | Idealized part — **CRITICAL: must be loaded before UpdateFemodel()** | `models/` |
| `ACS_Stack_Main_Plate_Iso_project_fem2.fem` | FEM — 3D solid mesh | `models/` |
| `ACS_Stack_Main_Plate_Iso_project_sim2.sim` | Simulation — SOL 101 | `models/` |
| `*_sim2-solution_1.op2` | Baseline FEA results | `models/` (447 MB) |
**NX Version:** DesigncenterNX2512
**FEM type:** 3D solid (CHEXA, CPENTA, CPYRAM, CTETRA)
**Simulation name:** sim2 / solution_1
### Baseline Mesh Stats (from F06)
| Stat | Value |
|------|-------|
| Grid points | 207,450 |
| CHEXA elements | 93,359 |
| CPENTA elements | 3,021 |
| CPYRAM elements | 125,954 |
| CTETRA elements | 232,206 |
### Isogrid Sandbox Regions
| Sandbox | Size | File |
|---------|------|------|
| sandbox_1 | Larger region | `adaptive_isogrid_data/geometry_sandbox_1.json` |
| sandbox_2 | Smaller patch | `adaptive_isogrid_data/geometry_sandbox_2.json` |
---
## Baseline Performance
| Metric | Value | Confidence |
|--------|-------|------------|
| Solid plate mass | [TBD — run `extract_part_mass_material` on baseline _i.prt] | ⚠️ Pending |
| Max von Mises (baseline solid) | [TBD — parse baseline OP2] | ⚠️ Pending |
| Max displacement (baseline) | [TBD — parse baseline OP2] | ⚠️ Pending |
> To establish baseline: run `extract_part_mass_material` on the idealized part at baseline configuration, and `extract_solid_stress` on the baseline OP2. Record results here.
---
## Known Gaps / Pending Items
| ID | Gap | Priority | Resolution |
|----|-----|----------|-----------|
| G-01 | NX model uses AL6061 material properties — should be updated to AL7075-T6 | MED | Update MAT1 card in NX before next FEA campaign |
| G-02 | Baseline plate mass not yet extracted | HIGH | Run `extract_part_mass_material` on baseline model |
| G-03 | Boundary conditions not fully documented (which nodes fixed, load application point) | MED | Parse BDF SPC/FORCE cards or read from NX |
| G-04 | Plate thickness not confirmed (sandbox geometry has `thickness: null`) | LOW | Not needed since mass extracted from NX directly |
| G-05 | Max allowable displacement — no constraint for now | — | Confirmed N/A by Antoine 2026-02-18 |
---
## Optimization Setup Summary
| Field | Value |
|-------|-------|
| Objective | Minimize mass (kg) |
| Constraint | σ_max ≤ 100.6 MPa |
| Penalty formula | mass + 1e4 × ((σ/σ_allow) 1)² when violated |
| Design space | 8 continuous variables (see BREAKDOWN.md §2) |
| Algorithm | Optuna TPE — seed 42 |
| Trial budget | 200 (Campaign 01) |
| Estimated runtime | 810 hours |
| Trial logging | `studies/01_v1_tpe/2_iterations/trial_NNNN/` |
| Results DB | `studies/01_v1_tpe/3_results/study.db` |
---
## Status
| Phase | Status |
|-------|--------|
| NX geometry extraction (sandboxes) | ✅ Done |
| Python Brain implementation | ✅ Done |
| NX import journal (update-in-place) | ✅ Done |
| Baseline FEA (manual) | ✅ Done |
| Stress field extraction (OP2 → 2D) | ✅ Done |
| Stress feedback field | ✅ Done |
| Atomizer study wiring (`run_optimization.py`) | ✅ Done |
| **Campaign 01 execution** | 🔴 Not started |
| Baseline mass/stress documented | ⚠️ G-02 |
| Material alignment (AL7075 vs AL6061 in model) | ⚠️ G-01 |