Neural Acceleration (MLP Surrogate): - Add run_nn_optimization.py with hybrid FEA/NN workflow - MLP architecture: 4-layer (64->128->128->64) with BatchNorm/Dropout - Three workflow modes: - --all: Sequential export->train->optimize->validate - --hybrid-loop: Iterative Train->NN->Validate->Retrain cycle - --turbo: Aggressive single-best validation (RECOMMENDED) - Turbo mode: 5000 NN trials + 50 FEA validations in ~12 minutes - Separate nn_study.db to avoid overloading dashboard Performance Results (bracket_pareto_3obj study): - NN prediction errors: mass 1-5%, stress 1-4%, stiffness 5-15% - Found minimum mass designs at boundary (angle~30deg, thick~30mm) - 100x speedup vs pure FEA exploration Protocol Operating System: - Add .claude/skills/ with Bootstrap, Cheatsheet, Context Loader - Add docs/protocols/ with operations (OP_01-06) and system (SYS_10-14) - Update SYS_14_NEURAL_ACCELERATION.md with MLP Turbo Mode docs NX Automation: - Add optimization_engine/hooks/ for NX CAD/CAE automation - Add study_wizard.py for guided study creation - Fix FEM mesh update: load idealized part before UpdateFemodel() New Study: - bracket_pareto_3obj: 3-objective Pareto (mass, stress, stiffness) - 167 FEA trials + 5000 NN trials completed - Demonstrates full hybrid workflow 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
210 lines
5.9 KiB
Markdown
210 lines
5.9 KiB
Markdown
# NX Documentation Lookup Module
|
|
|
|
## Overview
|
|
|
|
This module provides on-demand access to Siemens NX Open and Simcenter documentation via the Dalidou MCP server. Use these tools when building new extractors, NX automation scripts, or debugging NX-related issues.
|
|
|
|
## CRITICAL: When to AUTO-SEARCH Documentation
|
|
|
|
**You MUST call `siemens_docs_search` BEFORE writing any code that uses NX Open APIs.**
|
|
|
|
### Automatic Search Triggers
|
|
|
|
| User Request | Action Required |
|
|
|--------------|-----------------|
|
|
| "Create extractor for {X}" | → `siemens_docs_search("{X} NXOpen")` |
|
|
| "Get {property} from part" | → `siemens_docs_search("{property} NXOpen.Part")` |
|
|
| "Extract {data} from FEM" | → `siemens_docs_search("{data} NXOpen.CAE")` |
|
|
| "How do I {action} in NX" | → `siemens_docs_search("{action} NXOpen")` |
|
|
| Any code with `NXOpen.*` | → Search before writing |
|
|
|
|
### Example: User asks "Create an extractor for inertia values"
|
|
|
|
```
|
|
STEP 1: Immediately search
|
|
→ siemens_docs_search("inertia mass properties NXOpen")
|
|
|
|
STEP 2: Review results, fetch details
|
|
→ siemens_docs_fetch("NXOpen.MeasureManager")
|
|
|
|
STEP 3: Now write code with correct API calls
|
|
```
|
|
|
|
**DO NOT guess NX Open API names.** Always search first.
|
|
|
|
## When to Load
|
|
|
|
Load this module when:
|
|
- Creating new NX Open scripts or extractors
|
|
- Working with `NXOpen.*` namespaces
|
|
- Debugging NX automation errors
|
|
- User mentions "NX API", "NX Open", "Simcenter docs"
|
|
- Building features that interact with NX/Simcenter
|
|
|
|
## Available MCP Tools
|
|
|
|
### `siemens_docs_search`
|
|
|
|
**Purpose**: Search across NX Open, Simcenter, and Teamcenter documentation
|
|
|
|
**When to use**:
|
|
- Finding which class/method performs a specific task
|
|
- Discovering available APIs for a feature
|
|
- Looking up Nastran card references
|
|
|
|
**Examples**:
|
|
```
|
|
siemens_docs_search("get node coordinates FEM")
|
|
siemens_docs_search("CQUAD4 element properties")
|
|
siemens_docs_search("NXOpen.CAE mesh creation")
|
|
siemens_docs_search("extract stress results OP2")
|
|
```
|
|
|
|
### `siemens_docs_fetch`
|
|
|
|
**Purpose**: Fetch a specific documentation page with full content
|
|
|
|
**When to use**:
|
|
- Need complete class reference
|
|
- Getting detailed method signatures
|
|
- Reading full examples
|
|
|
|
**Examples**:
|
|
```
|
|
siemens_docs_fetch("NXOpen.CAE.FemPart")
|
|
siemens_docs_fetch("Nastran Quick Reference CQUAD4")
|
|
```
|
|
|
|
### `siemens_auth_status`
|
|
|
|
**Purpose**: Check if the Siemens SSO session is valid
|
|
|
|
**When to use**:
|
|
- Before a series of documentation lookups
|
|
- When fetch requests fail
|
|
- Debugging connection issues
|
|
|
|
### `siemens_login`
|
|
|
|
**Purpose**: Re-authenticate with Siemens if session expired
|
|
|
|
**When to use**:
|
|
- After `siemens_auth_status` shows expired
|
|
- When documentation fetches return auth errors
|
|
|
|
## Workflow: Building New Extractor
|
|
|
|
When creating a new extractor that uses NX Open APIs:
|
|
|
|
### Step 1: Search for Relevant APIs
|
|
```
|
|
→ siemens_docs_search("element stress results OP2")
|
|
```
|
|
Review results to identify candidate classes/methods.
|
|
|
|
### Step 2: Fetch Detailed Documentation
|
|
```
|
|
→ siemens_docs_fetch("NXOpen.CAE.Result")
|
|
```
|
|
Get full class documentation with method signatures.
|
|
|
|
### Step 3: Understand Data Formats
|
|
```
|
|
→ siemens_docs_search("CQUAD4 stress output format")
|
|
```
|
|
Understand Nastran output structure.
|
|
|
|
### Step 4: Build Extractor
|
|
Following EXT_01 template, create the extractor with:
|
|
- Proper API calls based on documentation
|
|
- Docstring referencing the APIs used
|
|
- Error handling for common NX exceptions
|
|
|
|
### Step 5: Document API Usage
|
|
In the extractor docstring:
|
|
```python
|
|
def extract_element_stress(op2_path: Path) -> Dict:
|
|
"""
|
|
Extract element stress results from OP2 file.
|
|
|
|
NX Open APIs Used:
|
|
- NXOpen.CAE.Result.AskElementStress
|
|
- NXOpen.CAE.ResultAccess.AskResultValues
|
|
|
|
Nastran Cards:
|
|
- CQUAD4, CTRIA3 (shell elements)
|
|
- STRESS case control
|
|
"""
|
|
```
|
|
|
|
## Workflow: Debugging NX Errors
|
|
|
|
When encountering NX Open errors:
|
|
|
|
### Step 1: Search for Correct API
|
|
```
|
|
Error: AttributeError: 'FemPart' object has no attribute 'GetNodes'
|
|
|
|
→ siemens_docs_search("FemPart get nodes")
|
|
```
|
|
|
|
### Step 2: Fetch Correct Class Reference
|
|
```
|
|
→ siemens_docs_fetch("NXOpen.CAE.FemPart")
|
|
```
|
|
Find the actual method name and signature.
|
|
|
|
### Step 3: Apply Fix
|
|
Document the correction:
|
|
```python
|
|
# Wrong: femPart.GetNodes()
|
|
# Right: femPart.BaseFEModel.FemMesh.Nodes
|
|
```
|
|
|
|
## Common Search Patterns
|
|
|
|
| Task | Search Query |
|
|
|------|--------------|
|
|
| Mesh operations | `siemens_docs_search("NXOpen.CAE mesh")` |
|
|
| Result extraction | `siemens_docs_search("CAE result OP2")` |
|
|
| Geometry access | `siemens_docs_search("NXOpen.Features body")` |
|
|
| Material properties | `siemens_docs_search("Nastran MAT1 material")` |
|
|
| Load application | `siemens_docs_search("CAE load force")` |
|
|
| Constraint setup | `siemens_docs_search("CAE boundary condition")` |
|
|
| Expressions/Parameters | `siemens_docs_search("NXOpen Expression")` |
|
|
| Part manipulation | `siemens_docs_search("NXOpen.Part")` |
|
|
|
|
## Key NX Open Namespaces
|
|
|
|
| Namespace | Domain |
|
|
|-----------|--------|
|
|
| `NXOpen.CAE` | FEA, meshing, results |
|
|
| `NXOpen.Features` | Parametric features |
|
|
| `NXOpen.Assemblies` | Assembly operations |
|
|
| `NXOpen.Part` | Part-level operations |
|
|
| `NXOpen.UF` | User Function (legacy) |
|
|
| `NXOpen.GeometricUtilities` | Geometry helpers |
|
|
|
|
## Integration with Extractors
|
|
|
|
All extractors in `optimization_engine/extractors/` should:
|
|
|
|
1. **Search before coding**: Use `siemens_docs_search` to find correct APIs
|
|
2. **Document API usage**: List NX Open APIs in docstring
|
|
3. **Handle NX exceptions**: Catch `NXOpen.NXException` appropriately
|
|
4. **Follow 20-line rule**: If extraction is complex, check if existing extractor handles it
|
|
|
|
## Troubleshooting
|
|
|
|
| Issue | Solution |
|
|
|-------|----------|
|
|
| Auth errors | Run `siemens_auth_status`, then `siemens_login` if needed |
|
|
| No results | Try broader search terms, check namespace spelling |
|
|
| Incomplete docs | Fetch the parent class for full context |
|
|
| Network errors | Verify Dalidou is accessible: `ping dalidou.local` |
|
|
|
|
---
|
|
|
|
*Module Version: 1.0*
|
|
*MCP Server: dalidou.local:5000*
|