Commit Graph

17 Commits

Author SHA1 Message Date
c534483043 Merge branch 'claude/project-summary-option-a-01At4mDLnfELXcMejPaKNhG5' 2025-11-15 10:24:20 -05:00
0a71435dcc feat: Add MCP build_optimization_config tool
Integrate OP2 data extraction with optimization config builder:
- Add build_optimization_config() MCP tool
- Add list_optimization_options() helper
- Add format_optimization_options_for_llm() formatter
- Update MCP tools documentation with full API details
- Test with bracket example, generates valid config

Features:
- Discovers design variables from FEA model
- Lists 4 available objectives (mass, stress, displacement, volume)
- Lists 4 available constraints (stress/displacement/mass limits)
- Validates user selections against model
- Generates complete optimization_config.json

Tested with examples/bracket/Bracket_sim1.sim:
- Found 4 design variables (support_angle, tip_thickness, p3, support_blend_radius)
- Created config with 2 objectives, 2 constraints, 150 trials

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 10:23:02 -05:00
Claude
4afb46327a feat: Add complete Bracket example with validated OP2 extraction
Added complete working example with all NX result files for testing
and validation of the OP2 result extractor.

Files Added (examples/bracket/):
- Bracket.prt: Part geometry with expressions
- Bracket_sim1.sim: Simulation definition (SOL 101 Linear Statics)
- Bracket_fem1.fem: Finite element mesh
- bracket_sim1-solution_1.op2: Binary results (666 KB)
- bracket_sim1-solution_1.f06: ASCII results log
- bracket_sim1-solution_1.dat: Nastran input deck
- Supporting files: .diag, .f04, .log, .html, .png

Validated Results from OP2:
✓ Max Displacement: 0.362 mm (node 91)
  - Primary direction: -Z (-0.354 mm)
  - Load application point

✓ Max von Mises Stress: 122.91 MPa (element 79, CHEXA)
  - Material: Aluminum 6061-T6 (yield = 276 MPa)
  - Safety Factor: 2.25  SAFE
  - Well below yield strength

Units Handling:
- NX units: mm, mN (milli-newton), kg
- Stress in OP2: mN/mm² = kPa
- Conversion required: kPa / 1000 = MPa
- Displacement: mm (direct)

Model Properties:
- Analysis Type: SOL 101 Linear Statics
- Elements: 585 (CHEXA hexahedral)
- Load: ~1000 N in -Z direction (3 application points)
- Constraints: Fixed supports at base
- Material: Al 6061-T6

Optimization Potential:
Current design has good margins:
- Displacement: 0.36 mm (could allow up to ~1.0 mm)
- Stress: 122.91 MPa (could allow up to ~200 MPa)
→ Weight reduction opportunity while maintaining safety!

This validates:
- pyNastran OP2 extraction works correctly
- Units conversion handling (mN → N, kPa → MPa)
- Multi-objective optimization is feasible
- Example ready for testing optimization workflow
2025-11-15 14:52:15 +00:00
4c5b12af19 Add NX solver output files to bracket example
- Include .op2, .f06, .f04, .log, .diag files
- Provide complete example with all solver outputs
- Override .gitignore for example files

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 09:46:46 -05:00
0fc2cd61ae Reorganize bracket files to examples directory
- Move bracket simulation files to examples/bracket/
- Remove misplaced files from tests directory
- Properly organize example NX files for reference

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 09:45:22 -05:00
Claude
159e530892 test: Add Nastran input file for result extractor testing
Added bracket_sim1-solution_1.dat (Nastran input file) to tests.
This is the SOL 101 Linear Statics input for the Bracket model.

Analysis Setup:
- Solution: SOL 101 Linear Statics
- Loads: ~1000N total force in -Z direction (3 application points)
- Constraints: Fixed supports at base (40+ nodes)
- Mesh: ~585 elements (CTETRA)
- Material: Aluminum 6061-T6
- Units: mm, mN (milli-newton), kg

Note: This is the INPUT file. To test the OP2 extractor, the
corresponding OUTPUT file (bracket_sim1-solution_1.op2) is needed,
which is generated by running the solver in NX Simcenter.
2025-11-15 14:19:35 +00:00
Claude
6c30b91a82 feat: Add optimization configuration builder with multi-objective support
Created interactive configuration builder that discovers available
options and helps users set up multi-objective optimization with constraints.

Features:
- Lists all available design variables from discovered model
- Provides catalog of objectives (minimize mass, stress, displacement, volume)
- Provides catalog of constraints (max stress, max displacement, mass limits)
- Suggests reasonable bounds for design variables based on type
- Supports multi-objective optimization with configurable weights
- Validates and builds complete optimization_config.json

Available Objectives:
- minimize_mass: Weight reduction (weight: 5.0)
- minimize_max_stress: Failure prevention (weight: 10.0)
- minimize_max_displacement: Stiffness (weight: 3.0)
- minimize_volume: Material usage (weight: 4.0)

Available Constraints:
- max_stress_limit: Stress <= limit (typical: 200 MPa)
- max_displacement_limit: Displacement <= limit (typical: 1.0 mm)
- min_mass_limit: Mass >= limit (structural integrity)
- max_mass_limit: Mass <= limit (weight budget)

Example Configuration:
- Design Variables: tip_thickness, support_angle, support_blend_radius
- Objectives: Minimize mass (5.0) + Minimize stress (10.0)
- Constraints: max_displacement <= 1.0 mm, max_stress <= 200 MPa
- Settings: 150 trials, TPE sampler

Usage:
  python optimization_engine/optimization_config_builder.py

Output: optimization_config.json with complete multi-objective setup

Integration:
- Works with discover_fea_model() to find design variables
- Links to result extractors (stress, displacement, mass)
- Ready for MCP build_optimization_config tool
- Supports LLM-driven configuration building

This enables the workflow:
1. User: "Minimize weight and stress with max displacement < 1mm"
2. LLM discovers model → lists options → builds config
3. Optimization engine executes with multi-objective + constraints
2025-11-15 13:56:41 +00:00
Claude
16cddd5243 feat: Comprehensive expression extraction and OP2 result extractor example
Enhanced expression extraction to find ALL named expressions in .prt files,
not just specific format. Added pyNastran-based result extraction example.

Expression Extraction Improvements:
- Updated regex to handle all NX expression format variations:
  * #(Type [units]) name: value;
  * (Type [units]) name: value;
  * *(Type [units]) name: value;
  * ((Type [units]) name: value;
- Added Root:expression_name: pattern detection
- Finds expressions even when value is not immediately available
- Deduplication to avoid duplicates
- Filters out NX internal names

Test Results with Bracket.prt:
- Previously: 1 expression (tip_thickness only)
- Now: 5 expressions found:
  * support_angle = 30.0 degrees
  * tip_thickness = 20.0 mm
  * p3 = 10.0 mm
  * support_blend_radius = 10.0 mm
  * p11 (reference found, value unknown)

OP2 Result Extraction (pyNastran):
- Created example extractor: op2_extractor_example.py
- Functions for common optimization metrics:
  * extract_max_displacement() - max displacement magnitude on any node
  * extract_max_stress() - von Mises or max principal stress
  * extract_mass() - total mass and center of gravity
- Handles multiple element types (CQUAD4, CTRIA3, CTETRA, etc.)
- Returns structured JSON for optimization engine integration
- Command-line tool for testing with real OP2 files

Usage:
  python optimization_engine/result_extractors/op2_extractor_example.py <file.op2>

Integration Ready:
- pyNastran already in requirements.txt
- Result extractor pattern established
- Can be used as template for custom metrics

Next Steps:
- Integrate result extractors into MCP tool framework
- Add safety factor calculations
- Support for thermal, modal results
2025-11-15 13:49:16 +00:00
Claude
063439af43 feat: Update model discovery to handle real binary NX files
Updated the parser to work with actual NX .sim/.prt files which are
binary format (not XML) in NX 12+.

Key Changes:
- Added dual-mode parser: XML for test files, binary for real NX files
- Implemented string extraction from binary .sim files
- Updated solution detection to recognize Nastran SOL types
- Fixed expression extraction with proper NX format pattern:
  #(Type [units]) name: value;
- Added multiple .prt file naming pattern support
- Added .fem file parsing for FEM information

Parser Capabilities:
- Extracts expressions from .prt files (binary parsing)
- Detects solution types (Linear Statics, Modal, etc.)
- Finds element types from .fem files
- Handles multiple file naming conventions

Validation with Real Files:
- Successfully parsed tests/Bracket_sim1.sim (6.2 MB binary file)
- Extracted 1 expression: tip_thickness = 20.0 mm
- Detected 18 solution types (including Nastran SOL codes)
- Works with both XML test files and binary production files

Technical Details:
- Binary files: latin-1 decoding + regex pattern matching
- Expression pattern: #(\w+\s*\[([^\]]*)\])\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*:\s*([-+]?\d*\.?\d+)
- Multiple .prt file search: exact match → base name → _i suffix
- FEM parsing: extracts mesh, materials, element types from .fem files

Next Steps:
- Refine solution filtering (reduce false positives)
- Add load/constraint extraction from .fem files
- Test with more complex models
2025-11-15 13:44:42 +00:00
73cf339e1b Add NX test files for bracket simulation
- Add bracket part and FEM model files
- Include simulation results and solver outputs
- Add test data for development and validation

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 08:34:35 -05:00
Claude
96ed53e3d7 feat: Implement Option A - MCP Model Discovery tool
This commit implements the first phase of the MCP server as outlined
in PROJECT_SUMMARY.md Option A: Model Discovery.

New Features:
- Complete .sim file parser (XML-based)
- Expression extraction from .sim and .prt files
- Solution, FEM, materials, loads, constraints extraction
- Structured JSON output for LLM consumption
- Markdown formatting for human-readable output

Implementation Details:
- mcp_server/tools/model_discovery.py: Core parser and discovery logic
  - SimFileParser class: Handles XML parsing of .sim files
  - discover_fea_model(): Main MCP tool function
  - format_discovery_result_for_llm(): Markdown formatter
- mcp_server/tools/__init__.py: Updated to export new functions
- mcp_server/tools/README.md: Complete documentation for MCP tools

Testing & Examples:
- examples/test_bracket.sim: Sample .sim file for testing
- tests/mcp_server/tools/test_model_discovery.py: Comprehensive unit tests
- Manual testing verified: Successfully extracts 4 expressions, solution
  info, mesh data, materials, loads, and constraints

Validation:
- Command-line tool works: python mcp_server/tools/model_discovery.py examples/test_bracket.sim
- Output includes both Markdown and JSON formats
- Error handling for missing files and invalid formats

Next Steps (Phase 2):
- Port optimization engine from P04 Atomizer
- Implement build_optimization_config tool
- Create pluggable result extractor system

References:
- PROJECT_SUMMARY.md: Option A (lines 339-350)
- mcp_server/prompts/system_prompt.md: Model Discovery workflow
2025-11-15 13:23:05 +00:00
39919059cf docs: Add comprehensive project summary 2025-11-15 08:14:20 -05:00
f359d4e5c8 chore: Update NX version to 2412 2025-11-15 08:12:32 -05:00
14d2b67e4a docs: Add NXOpen resources guide and MCP system prompt
- Create comprehensive NXOpen resources documentation
- Document NXOpenTSE as reference (not dependency)
- Add MCP system prompt with NXOpen guidance
- Include best practices from The Scripting Engineer
- Update README with resource links
- Define LLM workflow for NXOpen code generation

Resources:
- Official Siemens NXOpen API docs
- NXOpenTSE documentation and examples
- Attribution and licensing guidelines

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 08:10:05 -05:00
d1cbeb75a5 Rebrand project from nx-optimaster to Atomizer
- Update project name in all documentation files
- Update GitHub repository references to Anto01/Atomizer
- Update Python package name to 'atomizer'
- Update conda environment name references
- Update all module docstrings with new branding

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 08:05:19 -05:00
2201aeee77 docs: Add GitHub setup and development guides 2025-11-15 07:57:58 -05:00
aa3dafbe4b Initial commit: NX OptiMaster project structure
- Set up Python package structure with pyproject.toml
- Created MCP server, optimization engine, and NX journals modules
- Added configuration templates
- Implemented pluggable result extractor architecture
- Comprehensive README with architecture overview
- Project ready for GitHub push

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 07:56:35 -05:00