auto: daily sync

This commit is contained in:
2026-02-15 08:00:21 +00:00
parent 6218355dbf
commit d6a1d6eee1
376 changed files with 12864 additions and 5377 deletions

View File

@@ -1,148 +1,148 @@
# SOL 101 — Static Analysis
**Simulation:** Beam_sim1.sim
**Solver:** NX Nastran SOL 101 (Linear Static)
**Status:** ✅ Running — first real results obtained 2026-02-11. Automated DOE pipeline operational.
---
## Setup — Confirmed
| Item | Value | Source | Notes |
|------|-------|--------|-------|
| Solution type | **SOL 101** (Linear Static) | KBS session | "Solution 1 — static subcase" |
| Element type | **CQUAD4** (4-node quad shell) | KBS session | ✅ Confirmed — thin shell collectors |
| Property type | Thin shell | KBS session | Material inherited from "beam material" |
| Mesh density | Element size = **33.7 mm** (67.4 / 2) | KBS session | Subdivision-based. Future refinement planned. |
| Idealization | Promote body → mid-surface extraction | KBS session | Pair mid-surface function |
## Boundary Conditions — Confirmed
| BC | Location | Type | Value | Source |
|----|----------|------|-------|--------|
| **Fixed constraint** | Left side of beam (full edge) | SPC (all 6 DOF) | Fixed | ✅ KBS session — "left side fixed" |
| **Applied force** | Right side of beam (free end) | Point/edge force | **10,000 kgf downward** (Y) | ✅ KBS session — "project requirement" |
### Loading Details
- Force magnitude: 10,000 kgf = **98,066.5 N** (≈ 98.1 kN)
- Direction: Downward (Y in model coordinates)
- Application: Right side (free end) of beam
- Type: This is a **cantilever beam** with end loading — classic bending problem
## Result Extraction — Confirmed (Gen 003)
| Output | Method | Expression/Sensor | Status |
|--------|--------|-------------------|--------|
| Mass | NX expression | **`p173`** (`body_property147.mass` in kg) | ✅ Confirmed — journal extracts to `_temp_mass.txt` |
| Tip displacement | OP2 parse via pyNastran | Max Tz at free end | ✅ Working — 17.93 mm at baseline-ish DVs |
| Von Mises stress | OP2 parse via pyNastran | CQUAD4 shell max VM | ✅ Working — 111.9 MPa at baseline-ish DVs |
> **Mass extraction:** Journal extracts `p173` expression after solve and writes `_temp_mass.txt`. Python reads this file. Expression `p1` from KBS session was incorrect — `p173` confirmed via binary introspection.
>
> **pyNastran note:** Warns "nx version 2512 not supported" but reads OP2 files correctly. Stress output from pyNastran is in kPa — divide by 1000 for MPa.
## Mesh Details
| Property | Value | Notes |
|----------|-------|-------|
| Element type | CQUAD4 | 4-node quadrilateral, first-order |
| Element size | 33.7 mm | 67.4 / 2 — Antoine says refinement is "not for now" |
| Mesh method | Subdivision-based | Auto-mesh with size control |
| Shell formulation | Thin shell | Mid-surface extracted from solid |
| Convergence | ❓ **NOT VERIFIED** | Gap G8 partially closed (type known), but convergence check still needed |
### Mesh Estimate
- Beam length 5,000 mm / 33.7 mm ≈ 148 elements along length
- Perimeter of I-beam cross-section ≈ varies — but total mesh likely 10K50K elements
- Expected DOF: 60K300K → SOL 101 solve time: seconds to low minutes
## Solver Considerations
*From Technical Breakdown (Gen 001), updated with KBS data + Gen 003 run data:*
- **Linear assumption:** With 1,133 kg beam under 98 kN load, deflections are ~18 mm at 5,000 mm span. L/δ ≈ 280 — linear assumption is reasonable.
- **Mesh sensitivity:** Stress at hole edges is mesh-dependent. CQUAD4 at 33.7 mm may not fully resolve SCF at 300 mm diameter holes (~28 elements around circumference — probably adequate but needs verification).
- **Mesh morphing vs remesh:** Parametric NX models typically remesh on update. Need to confirm behavior across DV range (Gap G7).
- **Runtime:** ✅ Confirmed **~12 seconds per evaluation** (single beam, CQUAD4 thin shell on dalidou). Very fast.
- **Unit system:** NX model uses kg-mm-s (kgf for force). Nastran output stress in kPa → divide by 1000 for MPa.
## Validation Checklist
- [x] Baseline mass matches NX expression `p173` (1,133.01 kg)
- [x] Displacement measured — 17.93 mm at baseline-ish DVs (G10 closed)
- [x] Stress measured — 111.9 MPa at baseline-ish DVs (G11 closed)
- [ ] Mesh convergence verified at baseline
- [ ] Mesh quality acceptable at DV range extremes
- [ ] Model rebuilds cleanly at all 4 corners of design space (Gap G7)
- [ ] Stress at hole edges resolved with current mesh density
## NX Version & Environment — Confirmed (Gen 003)
| Item | Value | Notes |
|------|-------|-------|
| **NX Version** | **DesigncenterNX 2512** | Siemens rebranded NX to "DesigncenterNX" |
| **Install path** | `C:\Program Files\Siemens\DesigncenterNX2512` | On dalidou (Windows solver node) |
| **Previous config** | NX 2412 | ❌ Failed — "Part file is from a newer version" |
| **pyNastran compat** | Warns "nx version 2512 not supported" | ✅ But reads OP2 files correctly |
> ⚠️ **Critical lesson (2026-02-11):** Solver was originally configured for NX 2412 but model files are from DesigncenterNX 2512. NX refuses to load with "Part file is from a newer version." Must match version exactly.
### Path Resolution on Windows — Critical
**Bug discovered:** `Path.absolute()` on Windows does **NOT** resolve `..` components (unlike `Path.resolve()`).
```python
# WRONG — leaves ".." in path, NX can't find referenced parts
path = Path("../../models/Beam_sim1.sim").absolute()
# → C:\Users\antoi\Atomizer\projects\hydrotech-beam\studies\01_doe_landscape\..\..\models\Beam_sim1.sim
# CORRECT — fully resolves path
path = Path("../../models/Beam_sim1.sim").resolve()
# → C:\Users\antoi\Atomizer\projects\hydrotech-beam\models\Beam_sim1.sim
```
**Rule:** Use `.resolve()` everywhere when constructing paths for NX. NX cannot follow `..` references in paths.
### NX File References — In-Place Solving Required
NX `.sim` files store **absolute internal references** to `.fem` and `.prt` files. Copying model files to iteration folders breaks these references (`Parts.Open` returns `None`).
**Solution:** Solve on master model **in-place** (in the `models/` directory) with backup/restore for isolation:
1. Backup master model files before each trial
2. Write expressions, rebuild, solve in `models/`
3. Archive outputs (OP2, F06, params, results) to iteration folder
4. Restore master from backup
See DEC-HB-008 in DECISIONS.md.
## History
- **Gen 001** (2026-02-09): Initial documentation from technical breakdown. All solver details pending gap resolution.
- **Gen 002** (2026-02-10): Confirmed from KBS session — CQUAD4 thin shell, 33.7 mm element size, cantilever BCs (left fixed, right 10,000 kgf down), mass via `p173`. Material: AISI 1005.
- **Gen 003** (2026-02-11): First real results! DesigncenterNX 2512 version confirmed, path resolution bugs fixed, backup/restore in-place solving architecture, mass extraction via journal. Displacement=17.93mm, Stress=111.9MPa, Solve time ~12s/trial.
## NX Automation Workflow
**This model uses the SIMPLE workflow** (single-part, no assembly FEM).
### Simple Workflow Chain
```
Beam.prt (geometry) → Beam_fem1_i.prt (idealized/mid-surface) → Beam_fem1.fem (mesh) → Beam_sim1.sim (solve)
```
Steps:
1. Open `.sim` file (loads chain)
2. Switch to `Beam.prt` — import `.exp` file, update expressions, rebuild geometry
3. Switch to `Beam_fem1.fem` — update FE model (remesh)
4. Switch back to `.sim` — solve SOL 101
### Assembly FEM Workflow (NOT used here)
For multi-part models with `.afm` files (e.g., SAT3 mirror):
- Additional steps: load all components, update each FEM, merge duplicate nodes, resolve label conflicts
- Detected automatically by presence of `.afm` files in working directory
### Key Automation Notes
- `hole_count` expression unit = `Constant` (not MilliMeter)
- All length DVs = `MilliMeter`
- FEM part is `Beam_fem1` — NOT `Beam_fem1_i` (idealized)
- Journal: `solve_simulation.py` handles both workflows
# SOL 101 — Static Analysis
**Simulation:** Beam_sim1.sim
**Solver:** NX Nastran SOL 101 (Linear Static)
**Status:** ✅ Running — first real results obtained 2026-02-11. Automated DOE pipeline operational.
---
## Setup — Confirmed
| Item | Value | Source | Notes |
|------|-------|--------|-------|
| Solution type | **SOL 101** (Linear Static) | KBS session | "Solution 1 — static subcase" |
| Element type | **CQUAD4** (4-node quad shell) | KBS session | ✅ Confirmed — thin shell collectors |
| Property type | Thin shell | KBS session | Material inherited from "beam material" |
| Mesh density | Element size = **33.7 mm** (67.4 / 2) | KBS session | Subdivision-based. Future refinement planned. |
| Idealization | Promote body → mid-surface extraction | KBS session | Pair mid-surface function |
## Boundary Conditions — Confirmed
| BC | Location | Type | Value | Source |
|----|----------|------|-------|--------|
| **Fixed constraint** | Left side of beam (full edge) | SPC (all 6 DOF) | Fixed | ✅ KBS session — "left side fixed" |
| **Applied force** | Right side of beam (free end) | Point/edge force | **10,000 kgf downward** (Y) | ✅ KBS session — "project requirement" |
### Loading Details
- Force magnitude: 10,000 kgf = **98,066.5 N** (≈ 98.1 kN)
- Direction: Downward (Y in model coordinates)
- Application: Right side (free end) of beam
- Type: This is a **cantilever beam** with end loading — classic bending problem
## Result Extraction — Confirmed (Gen 003)
| Output | Method | Expression/Sensor | Status |
|--------|--------|-------------------|--------|
| Mass | NX expression | **`p173`** (`body_property147.mass` in kg) | ✅ Confirmed — journal extracts to `_temp_mass.txt` |
| Tip displacement | OP2 parse via pyNastran | Max Tz at free end | ✅ Working — 17.93 mm at baseline-ish DVs |
| Von Mises stress | OP2 parse via pyNastran | CQUAD4 shell max VM | ✅ Working — 111.9 MPa at baseline-ish DVs |
> **Mass extraction:** Journal extracts `p173` expression after solve and writes `_temp_mass.txt`. Python reads this file. Expression `p1` from KBS session was incorrect — `p173` confirmed via binary introspection.
>
> **pyNastran note:** Warns "nx version 2512 not supported" but reads OP2 files correctly. Stress output from pyNastran is in kPa — divide by 1000 for MPa.
## Mesh Details
| Property | Value | Notes |
|----------|-------|-------|
| Element type | CQUAD4 | 4-node quadrilateral, first-order |
| Element size | 33.7 mm | 67.4 / 2 — Antoine says refinement is "not for now" |
| Mesh method | Subdivision-based | Auto-mesh with size control |
| Shell formulation | Thin shell | Mid-surface extracted from solid |
| Convergence | ❓ **NOT VERIFIED** | Gap G8 partially closed (type known), but convergence check still needed |
### Mesh Estimate
- Beam length 5,000 mm / 33.7 mm ≈ 148 elements along length
- Perimeter of I-beam cross-section ≈ varies — but total mesh likely 10K50K elements
- Expected DOF: 60K300K → SOL 101 solve time: seconds to low minutes
## Solver Considerations
*From Technical Breakdown (Gen 001), updated with KBS data + Gen 003 run data:*
- **Linear assumption:** With 1,133 kg beam under 98 kN load, deflections are ~18 mm at 5,000 mm span. L/δ ≈ 280 — linear assumption is reasonable.
- **Mesh sensitivity:** Stress at hole edges is mesh-dependent. CQUAD4 at 33.7 mm may not fully resolve SCF at 300 mm diameter holes (~28 elements around circumference — probably adequate but needs verification).
- **Mesh morphing vs remesh:** Parametric NX models typically remesh on update. Need to confirm behavior across DV range (Gap G7).
- **Runtime:** ✅ Confirmed **~12 seconds per evaluation** (single beam, CQUAD4 thin shell on dalidou). Very fast.
- **Unit system:** NX model uses kg-mm-s (kgf for force). Nastran output stress in kPa → divide by 1000 for MPa.
## Validation Checklist
- [x] Baseline mass matches NX expression `p173` (1,133.01 kg)
- [x] Displacement measured — 17.93 mm at baseline-ish DVs (G10 closed)
- [x] Stress measured — 111.9 MPa at baseline-ish DVs (G11 closed)
- [ ] Mesh convergence verified at baseline
- [ ] Mesh quality acceptable at DV range extremes
- [ ] Model rebuilds cleanly at all 4 corners of design space (Gap G7)
- [ ] Stress at hole edges resolved with current mesh density
## NX Version & Environment — Confirmed (Gen 003)
| Item | Value | Notes |
|------|-------|-------|
| **NX Version** | **DesigncenterNX 2512** | Siemens rebranded NX to "DesigncenterNX" |
| **Install path** | `C:\Program Files\Siemens\DesigncenterNX2512` | On dalidou (Windows solver node) |
| **Previous config** | NX 2412 | ❌ Failed — "Part file is from a newer version" |
| **pyNastran compat** | Warns "nx version 2512 not supported" | ✅ But reads OP2 files correctly |
> ⚠️ **Critical lesson (2026-02-11):** Solver was originally configured for NX 2412 but model files are from DesigncenterNX 2512. NX refuses to load with "Part file is from a newer version." Must match version exactly.
### Path Resolution on Windows — Critical
**Bug discovered:** `Path.absolute()` on Windows does **NOT** resolve `..` components (unlike `Path.resolve()`).
```python
# WRONG — leaves ".." in path, NX can't find referenced parts
path = Path("../../models/Beam_sim1.sim").absolute()
# → C:\Users\antoi\Atomizer\projects\hydrotech-beam\studies\01_doe_landscape\..\..\models\Beam_sim1.sim
# CORRECT — fully resolves path
path = Path("../../models/Beam_sim1.sim").resolve()
# → C:\Users\antoi\Atomizer\projects\hydrotech-beam\models\Beam_sim1.sim
```
**Rule:** Use `.resolve()` everywhere when constructing paths for NX. NX cannot follow `..` references in paths.
### NX File References — In-Place Solving Required
NX `.sim` files store **absolute internal references** to `.fem` and `.prt` files. Copying model files to iteration folders breaks these references (`Parts.Open` returns `None`).
**Solution:** Solve on master model **in-place** (in the `models/` directory) with backup/restore for isolation:
1. Backup master model files before each trial
2. Write expressions, rebuild, solve in `models/`
3. Archive outputs (OP2, F06, params, results) to iteration folder
4. Restore master from backup
See DEC-HB-008 in DECISIONS.md.
## History
- **Gen 001** (2026-02-09): Initial documentation from technical breakdown. All solver details pending gap resolution.
- **Gen 002** (2026-02-10): Confirmed from KBS session — CQUAD4 thin shell, 33.7 mm element size, cantilever BCs (left fixed, right 10,000 kgf down), mass via `p173`. Material: AISI 1005.
- **Gen 003** (2026-02-11): First real results! DesigncenterNX 2512 version confirmed, path resolution bugs fixed, backup/restore in-place solving architecture, mass extraction via journal. Displacement=17.93mm, Stress=111.9MPa, Solve time ~12s/trial.
## NX Automation Workflow
**This model uses the SIMPLE workflow** (single-part, no assembly FEM).
### Simple Workflow Chain
```
Beam.prt (geometry) → Beam_fem1_i.prt (idealized/mid-surface) → Beam_fem1.fem (mesh) → Beam_sim1.sim (solve)
```
Steps:
1. Open `.sim` file (loads chain)
2. Switch to `Beam.prt` — import `.exp` file, update expressions, rebuild geometry
3. Switch to `Beam_fem1.fem` — update FE model (remesh)
4. Switch back to `.sim` — solve SOL 101
### Assembly FEM Workflow (NOT used here)
For multi-part models with `.afm` files (e.g., SAT3 mirror):
- Additional steps: load all components, update each FEM, merge duplicate nodes, resolve label conflicts
- Detected automatically by presence of `.afm` files in working directory
### Key Automation Notes
- `hole_count` expression unit = `Constant` (not MilliMeter)
- All length DVs = `MilliMeter`
- FEM part is `Beam_fem1` — NOT `Beam_fem1_i` (idealized)
- Journal: `solve_simulation.py` handles both workflows

View File

@@ -1,46 +1,46 @@
# SOL 101 — Static Analysis
**Simulation:** Beam_sim1.sim
**Solver:** NX Nastran SOL 101 (Linear Static)
**Status:** Pending gap resolution
---
## Setup
| Item | Value | Notes |
|------|-------|-------|
| Solution type | SOL 101 (Linear Static) | Appropriate for this problem |
| Element type | ❓ TBD | Gap G8: CQUAD4/CQUAD8 (shell) or CTETRA/CHEXA (solid)? |
| Mesh density | ❓ TBD | Gap G8: convergence checked? |
| Loading | ❓ TBD | Gap G2: point load? distributed? self-weight? |
| BCs | ❓ TBD | Gap G1: cantilever? simply-supported? |
## Result Extraction
| Output | Method | Expression/Sensor | Status |
|--------|--------|-------------------|--------|
| Mass | NX expression | `p173` | ✅ Known |
| Tip displacement | ❓ Sensor or .f06 parse | TBD | Gap G3, G6 |
| Von Mises stress | ❓ Sensor or .f06 parse | TBD | Gap G4, G6 |
## Solver Considerations
*From Technical Breakdown:*
- **Linear assumption:** 22 mm displacement on likely 2+ m beam → L/δ probably OK. Verify.
- **Mesh sensitivity:** Stress at hole edges is mesh-dependent. Need convergence check (Gap G8).
- **Mesh morphing vs remesh:** Parametric NX models typically remesh on update. Need to confirm behavior across DV range (Gap G7).
- **Runtime estimate:** Single beam, ~10K100K DOF → probably seconds to low minutes per evaluation.
## Validation Checklist
- [ ] Baseline mass matches NX expression `p173`
- [ ] Baseline displacement matches reported ~22 mm
- [ ] Mesh convergence verified at baseline
- [ ] Mesh quality acceptable at DV range extremes
- [ ] Model rebuilds cleanly at all 4 corners of design space
## History
- **Gen 001** (2026-02-09): Initial documentation from technical breakdown. All solver details pending gap resolution.
# SOL 101 — Static Analysis
**Simulation:** Beam_sim1.sim
**Solver:** NX Nastran SOL 101 (Linear Static)
**Status:** Pending gap resolution
---
## Setup
| Item | Value | Notes |
|------|-------|-------|
| Solution type | SOL 101 (Linear Static) | Appropriate for this problem |
| Element type | ❓ TBD | Gap G8: CQUAD4/CQUAD8 (shell) or CTETRA/CHEXA (solid)? |
| Mesh density | ❓ TBD | Gap G8: convergence checked? |
| Loading | ❓ TBD | Gap G2: point load? distributed? self-weight? |
| BCs | ❓ TBD | Gap G1: cantilever? simply-supported? |
## Result Extraction
| Output | Method | Expression/Sensor | Status |
|--------|--------|-------------------|--------|
| Mass | NX expression | `p173` | ✅ Known |
| Tip displacement | ❓ Sensor or .f06 parse | TBD | Gap G3, G6 |
| Von Mises stress | ❓ Sensor or .f06 parse | TBD | Gap G4, G6 |
## Solver Considerations
*From Technical Breakdown:*
- **Linear assumption:** 22 mm displacement on likely 2+ m beam → L/δ probably OK. Verify.
- **Mesh sensitivity:** Stress at hole edges is mesh-dependent. Need convergence check (Gap G8).
- **Mesh morphing vs remesh:** Parametric NX models typically remesh on update. Need to confirm behavior across DV range (Gap G7).
- **Runtime estimate:** Single beam, ~10K100K DOF → probably seconds to low minutes per evaluation.
## Validation Checklist
- [ ] Baseline mass matches NX expression `p173`
- [ ] Baseline displacement matches reported ~22 mm
- [ ] Mesh convergence verified at baseline
- [ ] Mesh quality acceptable at DV range extremes
- [ ] Model rebuilds cleanly at all 4 corners of design space
## History
- **Gen 001** (2026-02-09): Initial documentation from technical breakdown. All solver details pending gap resolution.

View File

@@ -0,0 +1,148 @@
# SOL 101 — Static Analysis
**Simulation:** Beam_sim1.sim
**Solver:** NX Nastran SOL 101 (Linear Static)
**Status:** ✅ Running — first real results obtained 2026-02-11. Automated DOE pipeline operational.
---
## Setup — Confirmed
| Item | Value | Source | Notes |
|------|-------|--------|-------|
| Solution type | **SOL 101** (Linear Static) | KBS session | "Solution 1 — static subcase" |
| Element type | **CQUAD4** (4-node quad shell) | KBS session | ✅ Confirmed — thin shell collectors |
| Property type | Thin shell | KBS session | Material inherited from "beam material" |
| Mesh density | Element size = **33.7 mm** (67.4 / 2) | KBS session | Subdivision-based. Future refinement planned. |
| Idealization | Promote body → mid-surface extraction | KBS session | Pair mid-surface function |
## Boundary Conditions — Confirmed
| BC | Location | Type | Value | Source |
|----|----------|------|-------|--------|
| **Fixed constraint** | Left side of beam (full edge) | SPC (all 6 DOF) | Fixed | ✅ KBS session — "left side fixed" |
| **Applied force** | Right side of beam (free end) | Point/edge force | **10,000 kgf downward** (Y) | ✅ KBS session — "project requirement" |
### Loading Details
- Force magnitude: 10,000 kgf = **98,066.5 N** (≈ 98.1 kN)
- Direction: Downward (Y in model coordinates)
- Application: Right side (free end) of beam
- Type: This is a **cantilever beam** with end loading — classic bending problem
## Result Extraction — Confirmed (Gen 003)
| Output | Method | Expression/Sensor | Status |
|--------|--------|-------------------|--------|
| Mass | NX expression | **`p173`** (`body_property147.mass` in kg) | ✅ Confirmed — journal extracts to `_temp_mass.txt` |
| Tip displacement | OP2 parse via pyNastran | Max Tz at free end | ✅ Working — 17.93 mm at baseline-ish DVs |
| Von Mises stress | OP2 parse via pyNastran | CQUAD4 shell max VM | ✅ Working — 111.9 MPa at baseline-ish DVs |
> **Mass extraction:** Journal extracts `p173` expression after solve and writes `_temp_mass.txt`. Python reads this file. Expression `p1` from KBS session was incorrect — `p173` confirmed via binary introspection.
>
> **pyNastran note:** Warns "nx version 2512 not supported" but reads OP2 files correctly. Stress output from pyNastran is in kPa — divide by 1000 for MPa.
## Mesh Details
| Property | Value | Notes |
|----------|-------|-------|
| Element type | CQUAD4 | 4-node quadrilateral, first-order |
| Element size | 33.7 mm | 67.4 / 2 — Antoine says refinement is "not for now" |
| Mesh method | Subdivision-based | Auto-mesh with size control |
| Shell formulation | Thin shell | Mid-surface extracted from solid |
| Convergence | ❓ **NOT VERIFIED** | Gap G8 partially closed (type known), but convergence check still needed |
### Mesh Estimate
- Beam length 5,000 mm / 33.7 mm ≈ 148 elements along length
- Perimeter of I-beam cross-section ≈ varies — but total mesh likely 10K50K elements
- Expected DOF: 60K300K → SOL 101 solve time: seconds to low minutes
## Solver Considerations
*From Technical Breakdown (Gen 001), updated with KBS data + Gen 003 run data:*
- **Linear assumption:** With 1,133 kg beam under 98 kN load, deflections are ~18 mm at 5,000 mm span. L/δ ≈ 280 — linear assumption is reasonable.
- **Mesh sensitivity:** Stress at hole edges is mesh-dependent. CQUAD4 at 33.7 mm may not fully resolve SCF at 300 mm diameter holes (~28 elements around circumference — probably adequate but needs verification).
- **Mesh morphing vs remesh:** Parametric NX models typically remesh on update. Need to confirm behavior across DV range (Gap G7).
- **Runtime:** ✅ Confirmed **~12 seconds per evaluation** (single beam, CQUAD4 thin shell on dalidou). Very fast.
- **Unit system:** NX model uses kg-mm-s (kgf for force). Nastran output stress in kPa → divide by 1000 for MPa.
## Validation Checklist
- [x] Baseline mass matches NX expression `p173` (1,133.01 kg)
- [x] Displacement measured — 17.93 mm at baseline-ish DVs (G10 closed)
- [x] Stress measured — 111.9 MPa at baseline-ish DVs (G11 closed)
- [ ] Mesh convergence verified at baseline
- [ ] Mesh quality acceptable at DV range extremes
- [ ] Model rebuilds cleanly at all 4 corners of design space (Gap G7)
- [ ] Stress at hole edges resolved with current mesh density
## NX Version & Environment — Confirmed (Gen 003)
| Item | Value | Notes |
|------|-------|-------|
| **NX Version** | **DesigncenterNX 2512** | Siemens rebranded NX to "DesigncenterNX" |
| **Install path** | `C:\Program Files\Siemens\DesigncenterNX2512` | On dalidou (Windows solver node) |
| **Previous config** | NX 2412 | ❌ Failed — "Part file is from a newer version" |
| **pyNastran compat** | Warns "nx version 2512 not supported" | ✅ But reads OP2 files correctly |
> ⚠️ **Critical lesson (2026-02-11):** Solver was originally configured for NX 2412 but model files are from DesigncenterNX 2512. NX refuses to load with "Part file is from a newer version." Must match version exactly.
### Path Resolution on Windows — Critical
**Bug discovered:** `Path.absolute()` on Windows does **NOT** resolve `..` components (unlike `Path.resolve()`).
```python
# WRONG — leaves ".." in path, NX can't find referenced parts
path = Path("../../models/Beam_sim1.sim").absolute()
# → C:\Users\antoi\Atomizer\projects\hydrotech-beam\studies\01_doe_landscape\..\..\models\Beam_sim1.sim
# CORRECT — fully resolves path
path = Path("../../models/Beam_sim1.sim").resolve()
# → C:\Users\antoi\Atomizer\projects\hydrotech-beam\models\Beam_sim1.sim
```
**Rule:** Use `.resolve()` everywhere when constructing paths for NX. NX cannot follow `..` references in paths.
### NX File References — In-Place Solving Required
NX `.sim` files store **absolute internal references** to `.fem` and `.prt` files. Copying model files to iteration folders breaks these references (`Parts.Open` returns `None`).
**Solution:** Solve on master model **in-place** (in the `models/` directory) with backup/restore for isolation:
1. Backup master model files before each trial
2. Write expressions, rebuild, solve in `models/`
3. Archive outputs (OP2, F06, params, results) to iteration folder
4. Restore master from backup
See DEC-HB-008 in DECISIONS.md.
## History
- **Gen 001** (2026-02-09): Initial documentation from technical breakdown. All solver details pending gap resolution.
- **Gen 002** (2026-02-10): Confirmed from KBS session — CQUAD4 thin shell, 33.7 mm element size, cantilever BCs (left fixed, right 10,000 kgf down), mass via `p173`. Material: AISI 1005.
- **Gen 003** (2026-02-11): First real results! DesigncenterNX 2512 version confirmed, path resolution bugs fixed, backup/restore in-place solving architecture, mass extraction via journal. Displacement=17.93mm, Stress=111.9MPa, Solve time ~12s/trial.
## NX Automation Workflow
**This model uses the SIMPLE workflow** (single-part, no assembly FEM).
### Simple Workflow Chain
```
Beam.prt (geometry) → Beam_fem1_i.prt (idealized/mid-surface) → Beam_fem1.fem (mesh) → Beam_sim1.sim (solve)
```
Steps:
1. Open `.sim` file (loads chain)
2. Switch to `Beam.prt` — import `.exp` file, update expressions, rebuild geometry
3. Switch to `Beam_fem1.fem` — update FE model (remesh)
4. Switch back to `.sim` — solve SOL 101
### Assembly FEM Workflow (NOT used here)
For multi-part models with `.afm` files (e.g., SAT3 mirror):
- Additional steps: load all components, update each FEM, merge duplicate nodes, resolve label conflicts
- Detected automatically by presence of `.afm` files in working directory
### Key Automation Notes
- `hole_count` expression unit = `Constant` (not MilliMeter)
- All length DVs = `MilliMeter`
- FEM part is `Beam_fem1` — NOT `Beam_fem1_i` (idealized)
- Journal: `solve_simulation.py` handles both workflows