Files
Atomizer/.claude/skills/modules/nx-docs-lookup.md
Antoine 602560c46a feat: Add MLP surrogate with Turbo Mode for 100x faster optimization
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>
2025-12-06 20:01:59 -05:00

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*