# 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 | 8–10 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 |