# 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?