Files
Atomizer/atomizer-field/UNIT_INVESTIGATION_SUMMARY.md

148 lines
4.2 KiB
Markdown
Raw Normal View History

# Unit Investigation Summary
## Your Question
> "Force and stresses seems to be 1000 too much, how do you check units and validate values?"
## Answer
You were **absolutely correct!** The stresses ARE 1000× too large, but the forces are actually correct (just mislabeled).
---
## Root Cause Found
Your BDF file contains: **`PARAM UNITSYS MN-MM`**
This tells Nastran to use the MegaNewton-Millimeter unit system:
- Length: mm ✓
- Force: **MN (MegaNewton)** = 1,000,000 N
- Stress: **Pa (Pascal)**, NOT MPa!
- Mass: tonne (1000 kg)
### What This Means
**pyNastran correctly reads the OP2 file in these units**, but my parser incorrectly assumed:
- Force in N (actually MN)
- Stress in MPa (actually Pa)
---
## Actual Values
### Stress (The 1000× Error You Found)
| What Report Shows | Actual Unit | Correct Value |
|-------------------|-------------|---------------|
| 117,000 MPa | 117,000 Pa | **117 MPa** ✓ |
| 46,000 MPa (mean) | 46,000 Pa | **46 MPa** ✓ |
**Your stresses are 1000× too high because Pa should be divided by 1000 to get kPa, or by 1,000,000 to get MPa.**
### Forces (Correctly Stored, Mislabeled)
| What Report Shows | Actual Unit | Interpretation |
|-------------------|-------------|----------------|
| 2.73 MN | MN ✓ | 2,730,000 N |
| 150 MN | MN ✓ | 150,000,000 N |
Forces are actually correct! They're in MegaNewtons, which is perfectly fine for a large beam structure.
---
## How I Validated This
### 1. Checked the BDF File
Found `PARAM UNITSYS MN-MM` which defines the unit system.
### 2. Checked Material Properties
Young's modulus E = 200,000,000
- If this were MPa → E = 200 GPa ✓ (correct for steel)
- This confirms stress is in Pa (base SI unit)
### 3. Direct OP2 Reading
Created [check_op2_units.py](check_op2_units.py) to directly read the OP2 file with pyNastran:
- Confirmed pyNastran doesn't specify units
- Confirmed stress values: min=1.87e+03, max=1.17e+05
- These are clearly in Pa, not MPa!
### 4. Sanity Check
A 117 GPa von Mises stress would **instantly destroy any material** (even diamond is ~130 GPa).
117 MPa is reasonable for a loaded steel beam ✓
---
## The Fix
### What Needs to Change
**In [neural_field_parser.py](neural_field_parser.py:602-648):**
1. **Detect UNITSYS parameter from BDF**
2. **Convert stress: Pa → MPa** (divide by 1e6)
3. **Update force labels: MN → N** (or keep as MN with correct label)
4. **Add validation checks** to catch unrealistic values
### Conversion Factors
```python
# If UNITSYS is MN-MM:
stress_MPa = stress_Pa / 1e6
force_N = force_MN * 1e6
mass_kg = mass_tonne * 1000
```
---
## Expected Values After Fix
| Property | Current (Wrong) | After Fix | Reasonable? |
|----------|----------------|-----------|-------------|
| Max von Mises | 117,000 MPa | **117 MPa** | ✓ Yes (steel ~250 MPa yield) |
| Mean von Mises | 46,000 MPa | **46 MPa** | ✓ Yes |
| Max displacement | 19.5 mm | 19.5 mm | ✓ Yes |
| Applied forces | 2.73 MN | 2.73 MN | ✓ Yes (large beam) |
| Young's modulus | 200 GPa | 200 GPa | ✓ Yes (steel) |
---
## Files Created for Investigation
1. **[check_units.py](check_units.py)** - Analyzes parsed data for unit consistency
2. **[check_op2_units.py](check_op2_units.py)** - Directly reads OP2/BDF to verify units
3. **[UNIT_CONVERSION_REPORT.md](UNIT_CONVERSION_REPORT.md)** - Complete analysis and fix plan
---
## Next Steps
### Option 1: I Fix It Now
I can update the parser to:
1. Detect UNITSYS parameter
2. Convert Pa → MPa for stress
3. Add unit validation
4. Re-run test and regenerate report
**Time:** 15-20 minutes
**Risk:** Low (just scaling factors)
### Option 2: You Review First
You can review the [UNIT_CONVERSION_REPORT.md](UNIT_CONVERSION_REPORT.md) for the detailed fix plan, then I implement.
**Advantage:** You understand the changes before they're made
---
## Bottom Line
**Your intuition was spot-on!** The stresses displayed are 1000× too high.
**Root cause:** Nastran uses Pa (not MPa) in the MN-MM unit system, and my parser mislabeled them.
**Fix:** Simple scaling factors (divide by 1e6) and correct labels.
**After fix:** All values will be realistic and match engineering expectations! ✓
---
What would you like me to do next?
1. Implement the unit conversion fix?
2. Answer any questions about the analysis?
3. Something else?