feat: Add Studio UI, intake system, and extractor improvements
Dashboard: - Add Studio page with drag-drop model upload and Claude chat - Add intake system for study creation workflow - Improve session manager and context builder - Add intake API routes and frontend components Optimization Engine: - Add CLI module for command-line operations - Add intake module for study preprocessing - Add validation module with gate checks - Improve Zernike extractor documentation - Update spec models with better validation - Enhance solve_simulation robustness Documentation: - Add ATOMIZER_STUDIO.md planning doc - Add ATOMIZER_UX_SYSTEM.md for UX patterns - Update extractor library docs - Add study-readme-generator skill Tools: - Add test scripts for extraction validation - Add Zernike recentering test Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -110,31 +110,48 @@ frequency = result['frequency'] # Hz
|
||||
```python
|
||||
from optimization_engine.extractors.extract_von_mises_stress import extract_solid_stress
|
||||
|
||||
# For shell elements (CQUAD4, CTRIA3)
|
||||
result = extract_solid_stress(op2_file, subcase=1, element_type='cquad4')
|
||||
# RECOMMENDED: Check ALL solid element types (returns max across all)
|
||||
result = extract_solid_stress(op2_file, subcase=1)
|
||||
|
||||
# For solid elements (CTETRA, CHEXA)
|
||||
result = extract_solid_stress(op2_file, subcase=1, element_type='ctetra')
|
||||
# Or specify single element type
|
||||
result = extract_solid_stress(op2_file, subcase=1, element_type='chexa')
|
||||
|
||||
# Returns: {
|
||||
# 'max_von_mises': float, # MPa
|
||||
# 'max_stress_element': int
|
||||
# 'max_von_mises': float, # MPa (auto-converted from kPa)
|
||||
# 'max_stress_element': int,
|
||||
# 'element_type': str, # e.g., 'CHEXA', 'CTETRA'
|
||||
# 'units': 'MPa'
|
||||
# }
|
||||
|
||||
max_stress = result['max_von_mises'] # MPa
|
||||
```
|
||||
|
||||
**IMPORTANT (Updated 2026-01-22):**
|
||||
- By default, checks ALL solid types: CTETRA, CHEXA, CPENTA, CPYRAM
|
||||
- CHEXA elements often have highest stress (not CTETRA!)
|
||||
- Auto-converts from kPa to MPa (NX kg-mm-s unit system outputs kPa)
|
||||
- Returns Elemental Nodal stress (peak), not Elemental Centroid (averaged)
|
||||
|
||||
### E4: BDF Mass Extraction
|
||||
|
||||
**Module**: `optimization_engine.extractors.bdf_mass_extractor`
|
||||
**Module**: `optimization_engine.extractors.extract_mass_from_bdf`
|
||||
|
||||
```python
|
||||
from optimization_engine.extractors.bdf_mass_extractor import extract_mass_from_bdf
|
||||
from optimization_engine.extractors import extract_mass_from_bdf
|
||||
|
||||
mass_kg = extract_mass_from_bdf(str(bdf_file)) # kg
|
||||
result = extract_mass_from_bdf(bdf_file)
|
||||
# Returns: {
|
||||
# 'total_mass': float, # kg (primary key)
|
||||
# 'mass_kg': float, # kg
|
||||
# 'mass_g': float, # grams
|
||||
# 'cg': [x, y, z], # center of gravity
|
||||
# 'num_elements': int
|
||||
# }
|
||||
|
||||
mass_kg = result['mass_kg'] # kg
|
||||
```
|
||||
|
||||
**Note**: Reads mass directly from BDF/DAT file material and element definitions.
|
||||
**Note**: Uses `BDFMassExtractor` internally. Reads mass from element geometry and material density in BDF/DAT file. NX kg-mm-s unit system - mass is directly in kg.
|
||||
|
||||
### E5: CAD Expression Mass
|
||||
|
||||
|
||||
Reference in New Issue
Block a user