Files
Atomizer/docs/archive/NX_SOLVER_INTEGRATION.md
Anto01 5b67965db5 fix: Correct all NX installation paths from Simcenter3D_2412 to NX2412
CRITICAL PATH CORRECTION:
- Updated all documentation to use NX2412 installation
- Fixed README.md, dashboard/api/app.py, NXOPEN_INTELLISENSE_SETUP.md
- Updated archived NX_SOLVER_INTEGRATION.md for consistency
- Added SYSTEM_CONFIGURATION.md to document correct paths

Files Changed:
- README.md: NX path corrected to NX2412\NXBIN\run_journal.exe
- dashboard/api/app.py: NX executable path updated
- docs/NXOPEN_INTELLISENSE_SETUP.md: Stub path corrected
- docs/archive/NX_SOLVER_INTEGRATION.md: Example paths updated
- docs/SYSTEM_CONFIGURATION.md: NEW - Critical system path documentation

Key Configuration:
- Python Environment: atomizer (NOT test_env)
- NX Installation: C:\Program Files\Siemens\NX2412
- Material Library: NX2412\UGII\materials\physicalmateriallibrary.xml
- Python Stubs: NX2412\ugopen\pythonStubs

Reason: Simcenter3D_2412 is a separate installation and should not be used.
NX2412 is the correct primary CAD/CAE environment.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 14:18:12 -05:00

295 lines
6.7 KiB
Markdown

# NX Solver Integration Guide
## Overview
The NX solver integration allows Atomizer to automatically run Siemens NX Nastran simulations in batch mode during optimization loops.
## Architecture
```
Optimization Loop:
1. Update parameters in .prt file → nx_updater.py
2. Run NX solver in batch mode → nx_solver.py ← NEW!
3. Extract results from OP2 → op2_extractor_example.py
4. Evaluate objectives/constraints → runner.py
5. Optuna suggests next parameters → repeat
```
## Quick Start
### Test 1: Verify Solver Integration
```bash
conda activate test_env
python examples/test_nx_solver.py
```
This tests:
- NX installation detection
- Batch solver execution
- OP2 file generation
- Error handling
**Expected**: Solver runs and produces .op2 file in ~1-2 minutes
### Test 2: Run Optimization with Real Solver
```bash
conda activate test_env
python examples/test_optimization_with_solver.py
```
This runs 3 optimization trials with REAL simulations!
**Expected time**: ~5-10 minutes (depends on model complexity)
## Usage in Your Code
### Simple Usage (Convenience Function)
```python
from optimization_engine.nx_solver import run_nx_simulation
from pathlib import Path
sim_file = Path("path/to/model.sim")
op2_file = run_nx_simulation(
sim_file=sim_file,
nastran_version="2412",
timeout=600, # 10 minutes
cleanup=True # Remove temp files
)
# op2_file now contains path to results
```
### Advanced Usage (Full Control)
```python
from optimization_engine.nx_solver import NXSolver
solver = NXSolver(
nastran_version="2412",
timeout=600
)
result = solver.run_simulation(
sim_file=sim_file,
working_dir=None, # Defaults to sim file directory
cleanup=True
)
if result['success']:
print(f"OP2: {result['op2_file']}")
print(f"Time: {result['elapsed_time']:.1f}s")
else:
print(f"Errors: {result['errors']}")
```
### Integration with Optimization Runner
```python
from optimization_engine.nx_solver import run_nx_simulation
def my_simulation_runner() -> Path:
"""Simulation runner for optimization."""
sim_file = Path("my_model.sim")
# Run solver
op2_file = run_nx_simulation(
sim_file=sim_file,
nastran_version="2412",
timeout=600,
cleanup=True
)
return op2_file
# Use in OptimizationRunner
runner = OptimizationRunner(
config_path=config_path,
model_updater=my_model_updater,
simulation_runner=my_simulation_runner, # Uses real solver!
result_extractors=extractors
)
```
## Configuration
### Auto-Detection
By default, NXSolver auto-detects NX installation:
```python
solver = NXSolver(nastran_version="2412")
# Searches:
# - C:/Program Files/Siemens/NX2412
# - C:/Program Files/Siemens/NX2412
# - C:/Program Files (x86)/Siemens/NX2412
```
### Manual Configuration
```python
from pathlib import Path
solver = NXSolver(
nx_install_dir=Path("C:/Program Files/Siemens/NX2412"),
nastran_version="2412",
timeout=1200 # 20 minutes
)
```
## Solver Output Files
### Files Created
- `model.op2` - Binary results (kept)
- `model.f06` - Text output (kept)
- `model.log` - Solver log (kept)
- `model.f04` - Intermediate (cleaned up)
- `model.dat` - Intermediate (cleaned up)
- `model.diag` - Diagnostic (cleaned up)
### Cleanup Behavior
With `cleanup=True` (recommended):
- Keeps: .op2, .f06, .log
- Removes: .f04, .dat, .diag, .master, .dball, plots
With `cleanup=False`:
- Keeps all files for debugging
## Error Handling
### Common Issues
**Issue**: `FileNotFoundError: NX Nastran solver not found`
**Solution**:
- Check NX is installed at standard location
- Specify `nx_install_dir` manually
- Verify nastran.exe exists in NXNASTRAN/bin/
**Issue**: `RuntimeError: NX simulation failed`
**Solution**:
- Check .f06 file for error messages
- Verify .sim file is valid
- Check NX license is available
- Ensure model can solve in NX GUI first
**Issue**: `TimeoutExpired`
**Solution**:
- Increase `timeout` parameter
- Simplify model (fewer elements, linear analysis)
- Check solver isn't stuck (memory issues)
### Checking Solver Success
The solver checks for completion by:
1. Looking for "NORMAL TERMINATION" in .f06
2. Checking for "FATAL MESSAGE" errors
3. Verifying .op2 file was created recently
## Performance Tips
### Speed Up Optimization
1. **Reduce Model Complexity**
- Use coarser mesh for initial exploration
- Simplify geometry in non-critical areas
- Use linear analysis if possible
2. **Parallel Trials (Future)**
- Run multiple trials simultaneously
- Requires separate working directories
- Use Optuna's parallelization features
3. **Smart Sampling**
- Use TPE sampler (default) for efficiency
- Increase `n_startup_trials` for better initial sampling
- Use constraints to avoid infeasible regions
4. **Cleanup Strategy**
- Use `cleanup=True` to save disk space
- Only keep .op2 and .log files
- Archive results after optimization
### Typical Solve Times
| Model Size | Analysis Type | Time per Trial |
|------------|---------------|----------------|
| Small (<10k nodes) | Linear Static | 30-60s |
| Medium (10-50k) | Linear Static | 1-3 min |
| Large (>50k) | Linear Static | 3-10 min |
| Any | Nonlinear | 5-30 min |
## Batch Processing
For running many optimizations:
```python
# Save solver instance to reuse
solver = NXSolver(nastran_version="2412", timeout=600)
for trial_params in parameter_sets:
# Update model
update_nx_model(prt_file, trial_params)
# Solve
result = solver.run_simulation(sim_file, cleanup=True)
if result['success']:
# Extract and analyze
results = extract_all_results(result['op2_file'])
```
## Troubleshooting
### Enable Debug Output
```python
solver = NXSolver(nastran_version="2412")
result = solver.run_simulation(
sim_file=sim_file,
cleanup=False # Keep all files
)
# Check detailed output
print(result['errors'])
# Manually inspect files
# - Check .f06 for solver messages
# - Check .log for execution details
# - Check .f04 for input deck
```
### Verify NX Installation
```python
from optimization_engine.nx_solver import NXSolver
solver = NXSolver(nastran_version="2412")
print(f"NX Dir: {solver.nx_install_dir}")
print(f"Solver: {solver.solver_exe}")
print(f"Exists: {solver.solver_exe.exists()}")
```
## Next Steps
1. **Test solver integration**: Run `test_nx_solver.py`
2. **Test optimization loop**: Run `test_optimization_with_solver.py`
3. **Customize for your model**: Modify simulation_runner function
4. **Run real optimization**: Increase n_trials to 50-150
5. **Analyze results**: Use history.csv to understand parameter sensitivity
## Support
For issues:
1. Check this guide
2. Verify NX installation
3. Test .sim file in NX GUI first
4. Check solver logs (.f06, .log files)
5. Review error messages in result['errors']