Files
Atomizer/projects/hydrotech-beam/kb/fea/models/sol101-static.md
Antoine 2fde08daab docs: update KB and project docs with 2026-02-11 progress
- KB Gen 003: NX version (DesigncenterNX 2512), first real results
- sol101-static.md: path resolution lessons, in-place solving, result extraction confirmed
- CONTEXT.md: solver pipeline operational, first results (disp=17.93mm, stress=111.9MPa)
- DECISIONS.md: DEC-HB-008 to DEC-HB-011 (backup/restore, iteration arch, history DB, git workflow)
- optimization_engine/README.md: created (DesigncenterNX support, path resolution, NX file refs)
- studies/01_doe_landscape/README.md: updated architecture, iteration folders, history DB
- _index.md: closed gaps G3,G4,G6,G10-G14, updated generation to 003
2026-02-11 16:39:21 +00:00

149 lines
7.7 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.
# 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