Anto01 2729bd3278 feat: Add journal-based NX solver integration for optimization
Implements NX solver integration that connects to running Simcenter3D GUI
to solve simulations using the journal API. This approach handles licensing
properly and ensures fresh output files are generated for each iteration.

**New Components:**
- optimization_engine/nx_solver.py: Main solver wrapper with auto-detection
- optimization_engine/solve_simulation.py: NX journal script for batch solving
- examples/test_journal_optimization.py: Complete optimization workflow test
- examples/test_nx_solver.py: Solver integration tests
- tests/journal_*.py: Reference journal files for NX automation

**Key Features:**
- Auto-detects NX installation and version
- Connects to running NX GUI session (uses existing license)
- Closes/reopens .sim files to force reload of updated .prt files
- Deletes old output files to force fresh solves
- Waits for background solve completion
- Saves simulation to ensure all outputs are written
- ~4 second solve time per iteration

**Workflow:**
1. Update parameters in .prt file (nx_updater.py)
2. Close any open parts in NX session
3. Open .sim file fresh from disk (loads updated .prt)
4. Reload components and switch to FEM component
5. Solve in background mode
6. Save .sim file
7. Wait for .op2/.f06 to appear
8. Extract results from fresh .op2

**Tested:**
- Multiple iteration loop (3+ iterations)
- Files regenerated fresh each time (verified by timestamps)
- Complete parameter update -> solve -> extract workflow

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 12:23:57 -05:00
2025-11-15 08:12:32 -05:00
2025-11-15 08:12:32 -05:00

Atomizer

Advanced optimization platform for Siemens NX Simcenter with LLM-powered configuration

Python 3.10+ License Status

Overview

Atomizer is a next-generation optimization framework for Siemens NX that combines:

  • LLM-Driven Configuration: Use natural language to set up complex optimizations
  • Advanced Algorithms: Optuna-powered TPE, Gaussian Process surrogates, multi-fidelity optimization
  • Real-Time Monitoring: Interactive dashboards with live updates
  • Flexible Architecture: Pluggable result extractors for any FEA analysis type
  • MCP Integration: Extensible via Model Context Protocol

Architecture

┌─────────────────────────────────────────────────────────┐
│                 UI Layer                                │
│  Web Dashboard (React) + LLM Chat Interface (MCP)       │
└─────────────────────────────────────────────────────────┘
                          ↕
┌─────────────────────────────────────────────────────────┐
│                 MCP Server                              │
│  - Model Discovery     - Config Builder                 │
│  - Optimizer Control   - Result Analyzer                │
└─────────────────────────────────────────────────────────┘
                          ↕
┌─────────────────────────────────────────────────────────┐
│           Execution Layer                               │
│  NX Core (NXOpen) + Optuna Engine + Custom Scripts      │
└─────────────────────────────────────────────────────────┘

Quick Start

Prerequisites

  • Siemens NX 2412 with NX Nastran solver
  • Python 3.10+ (recommend Anaconda)
  • Node.js 18+ (for dashboard frontend)

Installation

  1. Clone the repository:

    git clone https://github.com/Anto01/Atomizer.git
    cd Atomizer
    
  2. Create Python environment:

    conda create -n atomizer python=3.10
    conda activate atomizer
    
  3. Install dependencies:

    pip install -e .
    # For development tools:
    pip install -e ".[dev]"
    # For MCP server:
    pip install -e ".[mcp]"
    
  4. Configure NX path (edit config/nx_config.json):

    {
      "nx_executable": "C:/Program Files/Siemens/NX2412/NXBIN/ugraf.exe",
      "python_env": "C:/Users/YourName/anaconda3/envs/atomizer/python.exe"
    }
    

Basic Usage

1. Conversational Setup (via MCP)

You: My FEA is in C:\Projects\Bracket\analysis.sim, please import its features.

AI: I've analyzed your model:
    - Solution: Static Analysis (NX Nastran)
    - Expressions: wall_thickness (5mm), hole_diameter (10mm)
    - Mesh: 8234 nodes, 4521 elements

    Which parameters would you like to optimize?

You: Optimize wall_thickness and hole_diameter to minimize max stress while keeping mass low.

AI: Configuration created! Ready to start optimization with 100 iterations.
    Would you like to review the config or start now?

You: Start it!

AI: Optimization launched! 🚀
    Dashboard: http://localhost:8080/dashboard

2. Manual Configuration (JSON)

Create optimization_config.json:

{
  "design_variables": {
    "wall_thickness": {
      "low": 3.0,
      "high": 8.0,
      "enabled": true
    }
  },
  "objectives": {
    "metrics": {
      "max_stress": {
        "weight": 10,
        "target": 200,
        "extractor": "nastran_stress"
      }
    }
  },
  "nx_settings": {
    "sim_path": "C:/Projects/Bracket/analysis.sim",
    "solution_name": "Solution 1"
  }
}

Run optimization:

python -m optimization_engine.run_optimizer --config optimization_config.json

Features

Core Capabilities

  • Multi-Objective Optimization: Weighted sum, Pareto front analysis
  • Smart Sampling: TPE, Latin Hypercube, Gaussian Process surrogates
  • Result Extraction: Nastran (OP2/F06), NX Mass Properties, custom parsers
  • Crash Recovery: Automatic resume from interruptions
  • Parallel Evaluation: Multi-core FEA solving (coming soon)

📊 Visualization

  • Real-time progress monitoring
  • 3D Pareto front plots (Plotly)
  • Parameter importance charts
  • Convergence history
  • FEA result overlays

🔧 Extensibility

  • Pluggable result extractors: Add custom metrics easily
  • Custom post-processing scripts: Python integration
  • MCP tools: Extend via protocol
  • NXOpen API access: Full NX automation

Project Structure

Atomizer/
├── mcp_server/              # MCP server implementation
│   ├── tools/               # MCP tool definitions
│   ├── schemas/             # JSON schemas for validation
│   └── prompts/             # LLM system prompts
├── optimization_engine/     # Core optimization logic
│   ├── result_extractors/   # Pluggable metric extractors
│   ├── multi_optimizer.py   # Optuna integration
│   ├── config_loader.py     # Configuration parser
│   └── history_manager.py   # CSV/SQLite persistence
├── nx_journals/             # NXOpen Python scripts
│   ├── update_and_solve.py  # CAD update + solver
│   ├── post_process.py      # Result extraction
│   └── utils/               # Helper functions
├── dashboard/               # Web UI
│   ├── frontend/            # React app
│   └── backend/             # FastAPI server
├── tests/                   # Unit tests
├── examples/                # Example projects
└── docs/                    # Documentation

Configuration Schema

See docs/configuration.md for full schema documentation.

Key sections:

  • design_variables: Parameters to optimize
  • objectives: Metrics to minimize/maximize
  • nx_settings: NX/FEA solver configuration
  • optimization: Optuna sampler settings
  • post_processing: Result extraction pipelines

Development

Running Tests

pytest

Code Formatting

black .
ruff check .

Building Documentation

cd docs
mkdocs build

Roadmap

  • MCP server foundation
  • Basic optimization engine
  • NXOpen integration
  • Web dashboard
  • Multi-fidelity optimization
  • Parallel evaluations
  • Sensitivity analysis tools
  • Export to engineering reports

Contributing

This is a private repository. Contact contact@atomaste.com for access.

License

Proprietary - Atomaste © 2025

Support

Resources

NXOpen References

Optimization


Built with ❤️ by Atomaste | Powered by Optuna, NXOpen, and Claude

Description
Main atomizer project (GitHub mirror)
Readme 3.8 GiB
Languages
Python 82.9%
TypeScript 16%
Shell 0.6%
Batchfile 0.3%
PowerShell 0.1%