Files
Atomizer/docs/archive/NX_SOLVER_INTEGRATION.md
Anto01 0ce9ddf3e2 feat: Add LLM-native development roadmap and reorganize documentation
- Add DEVELOPMENT_ROADMAP.md with 7-phase plan for LLM-driven optimization
  - Phase 1: Plugin system with lifecycle hooks
  - Phase 2: Natural language configuration interface
  - Phase 3: Dynamic code generation for custom objectives
  - Phase 4: Intelligent analysis and decision support
  - Phase 5: Automated HTML/PDF reporting
  - Phase 6: NX MCP server integration
  - Phase 7: Self-improving feature registry

- Update README.md to reflect LLM-native philosophy
  - Emphasize natural language workflows
  - Link to development roadmap
  - Update architecture diagrams
  - Add future capability examples

- Reorganize documentation structure
  - Move old dev docs to docs/archive/
  - Clean up root directory
  - Preserve all working optimization engine code

This sets the foundation for transforming Atomizer into an AI-powered
engineering assistant that can autonomously configure optimizations,
generate custom analysis code, and provide intelligent recommendations.
2025-11-15 14:34:16 -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/Simcenter3D_2412
# - 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']