Atomizer NX Open Automation Roadmap
Date: 2025-12-06
Version: 2.0 (merged with ATOMIZER_NXOPEN_MASTER_PLAN.md)
Objectif: Définir l'ensemble des fonctionnalités NX Open à implémenter pour un framework d'optimisation structurelle/thermique complet, basé sur la règle 80/20.
Quick Reference: NX Open API Index
Core Classes (verified via MCP)
| Class |
Page ID |
Primary Use |
NXOpen.Session |
a03318.html |
Session singleton, part access |
NXOpen.Part |
a02434.html |
Part operations, expressions |
NXOpen.BasePart |
a00266.html |
Base class, common methods |
NXOpen.CAE.CaeSession |
a10510.html |
CAE session, utilities |
NXOpen.CAE.FemPart |
- |
FEM part, mesh access |
NXOpen.CAE.SimPart |
- |
Simulation part, solutions |
Key Collections & Managers (from NXOpen.Part)
| Manager |
Access |
Purpose |
Expressions |
part.Expressions |
Expression management |
MeasureManager |
part.MeasureManager() |
Mass properties |
Bodies |
part.Bodies() |
Body collection |
Features |
part.Features() |
Feature collection |
MaterialManager |
part.MaterialManager() |
Material assignment |
CAE Managers (from NXOpen.CAE.CaeSession)
| Manager |
Access |
Purpose |
MaterialUtils |
cae_session.MaterialUtils() |
CAE material utilities |
AssociationUtils |
cae_session.AssociationUtils() |
Geometry-FEM association |
PenetrationCheckManager |
cae_session.PenetrationCheckManager() |
Contact check |
1. Analyse de l'Industrie MDO
Fonctionnalités Standard (ce que font les concurrents)
| Fonctionnalité |
HyperStudy |
modeFRONTIER |
HEEDS |
OpenMDAO |
Atomizer (actuel) |
| DOE (LHS, Sobol, etc.) |
✓ |
✓ |
✓ |
✓ |
✓ |
| Optimisation mono-objectif |
✓ |
✓ |
✓ |
✓ |
✓ |
| Multi-objectif (Pareto) |
✓ |
✓ |
✓ |
✓ |
✓ |
| Surrogate Models |
✓ |
✓ |
✓ |
✓ |
✓ (NN) |
| Kriging/Gaussian Process |
✓ |
✓ |
✓ |
✓ |
❌ |
| Robustesse/Fiabilité (RBDO) |
✓ |
✓ |
❌ |
✓ |
❌ |
| Sensibilité paramétrique |
✓ |
✓ |
✓ |
✓ |
Partiel |
| Topology Optimization |
✓ |
❌ |
❌ |
❌ |
❌ |
| Workflow visuel |
✓ |
✓ |
✓ |
❌ |
❌ |
| Interface NX native |
❌ |
❌ |
✓ |
❌ |
✓ |
Sources
2. Capacités Simcenter 13500
Modules Disponibles avec ta Licence
| Module |
Description |
Utilisable pour Optimisation |
| NX Nastran Basic |
Static, Modal, Buckling |
✓ Priorité haute |
| NX Nastran Dynamic |
Frequency/Transient Response |
✓ Priorité moyenne |
| NX Nastran Thermal |
Heat Transfer (steady/transient) |
✓ Priorité haute |
| NX Nastran Optimization |
SOL 200 (taille, forme) |
✓ Priorité moyenne |
| Simcenter 3D Pre/Post |
Meshing, Results |
✓ Indispensable |
Types d'Analyses Supportées
-
Structurel Linéaire (SOL 101)
- Static stress/displacement
- Reaction forces
-
Modal (SOL 103)
- Natural frequencies
- Mode shapes
- Modal effective mass
-
Buckling (SOL 105)
- Critical load factors
- Buckling mode shapes
-
Thermique (SOL 153/159)
- Steady-state heat transfer
- Transient thermal
- Thermal stress coupling
-
Dynamique (SOL 108/109/111/112)
- Frequency response
- Transient response
- Random response
3. Architecture des Hooks NX Open
3.1 Hooks de Manipulation CAD (Priorité 1)
| Hook |
Description |
API NX Open |
Priorité |
open_part(path) |
Ouvrir une pièce |
Session.Parts.OpenBase() |
P1 |
close_part(save=False) |
Fermer une pièce |
Part.Close() |
P1 |
set_expression(name, value) |
Modifier expression |
Expression.SetValue() |
P1 |
get_expression(name) |
Lire expression |
Expression.Value |
P1 |
update_model() |
Mettre à jour le modèle |
Session.UpdateManager.DoUpdate() |
P1 |
suppress_feature(name) |
Supprimer feature |
Feature.Suppress() |
P2 |
get_mass_properties() |
Masse, CG, inertie |
MeasureManager.NewMassProperties() |
P1 |
export_parasolid(path) |
Exporter géométrie |
Part.SaveAs() |
P2 |
3.2 Hooks FEM/Meshing (Priorité 2)
| Hook |
Description |
API NX Open |
Priorité |
create_tet_mesh(body, size) |
Mailler en tétra |
MeshManager.CreateMesh3d() |
P1 |
update_mesh() |
Régénérer maillage |
FEModel.UpdateMesh() |
P1 |
set_material(mesh, mat_name) |
Assigner matériau |
PhysicalProperty.SetMaterial() |
P1 |
create_shell_property(t) |
Propriété shell |
PhysicalPropertyCollection.CreateShellProperty() |
P2 |
apply_force(nodes, vector) |
Appliquer force |
LoadCollection.CreateForce() |
P1 |
apply_constraint(nodes, dof) |
Appliquer contrainte |
ConstraintCollection.CreateConstraint() |
P1 |
create_contact(faces1, faces2) |
Contact surfaces |
ConnectionCollection.CreateSurfaceContact() |
P2 |
3.3 Hooks Simulation/Solve (Priorité 1)
| Hook |
Description |
API NX Open |
Priorité |
create_solution(type, name) |
Créer solution |
SimSolutionCollection.CreateSolution() |
P1 |
solve(solution) |
Lancer solveur |
SimSolution.Solve() |
P1 |
solve_batch(bdf_path) |
Nastran en batch |
subprocess + run_nastran |
P1 |
get_solve_status() |
Statut du solve |
SimSolution.SolveStatus |
P1 |
export_bdf(path) |
Exporter deck Nastran |
SimSolution.ExportSolver() |
P1 |
4.0 Current Implementation Status (as of 2025-12-06)
| Extractor |
Output |
Source |
Priorité |
Status |
File |
extract_displacement(op2, subcase) |
mm |
OP2 |
P1 |
✓ |
extract_displacement.py |
extract_solid_stress(op2, subcase, elem_type) |
MPa |
OP2 |
P1 |
✓ |
extract_von_mises_stress.py |
extract_mass_from_bdf(bdf) |
kg |
BDF |
P1 |
✓ |
bdf_mass_extractor.py |
extract_mass_from_op2(op2) |
kg |
OP2 |
P1 |
✓ |
op2_extractor.py |
extract_grid_point_forces(op2) |
N |
OP2 |
P1 |
✓ |
op2_extractor.py |
extract_displacement_field(op2) |
[mm] |
OP2 |
P1 |
✓ |
field_data_extractor.py |
extract_principal_stress(elem) |
MPa |
OP2 |
P2 |
❌ |
- |
extract_strain(elem) |
- |
OP2 |
P2 |
❌ |
- |
extract_strain_energy(elem) |
J |
OP2 |
P2 |
❌ |
- |
| Extractor |
Output |
Source |
Priorité |
Status |
File |
extract_frequency(op2, subcase, mode) |
Hz |
OP2 |
P1 |
✓ |
extract_frequency.py |
extract_modal_mass(mode) |
kg |
F06 |
P2 |
❌ |
- |
extract_mode_shape(mode, nodes) |
[mm] |
OP2 |
P3 |
❌ |
- |
extract_mac_matrix(modes) |
[0-1] |
Calc |
P3 |
❌ |
- |
| Extractor |
Output |
Source |
Priorité |
Status |
File |
extract_temperature(node) |
°C/K |
OP2/F06 |
P2 |
❌ |
- |
extract_max_temperature() |
°C/K |
OP2/F06 |
P2 |
❌ |
- |
extract_heat_flux(elem) |
W/m² |
OP2/F06 |
P2 |
❌ |
- |
extract_thermal_stress(elem) |
MPa |
OP2/F06 |
P2 |
❌ |
- |
| Extractor |
Output |
Source |
Priorité |
Status |
File |
extract_part_mass_material(prt) |
kg, material |
NX Open |
P1 |
✓ |
extract_part_mass_material.py |
extract_part_mass(prt) |
kg |
NX Open |
P1 |
✓ |
extract_part_mass_material.py |
extract_part_material(prt) |
string |
NX Open |
P1 |
✓ |
extract_part_mass_material.py |
extract_mass_from_expression(prt) |
kg |
NX Open |
P1 |
✓ |
extract_mass_from_expression.py |
extract_volume() |
mm³ |
NX Open |
P2 |
❌ |
- |
extract_surface_area() |
mm² |
NX Open |
P2 |
❌ |
- |
extract_center_of_gravity() |
[mm] |
NX Open |
P2 |
❌ |
- |
extract_inertia_tensor() |
kg·mm² |
NX Open |
P3 |
❌ |
- |
NX Open APIs for CAD Extraction:
part.MeasureManager() - Main entry point for mass properties
MeasureManager.NewMassProperties() - Create mass measurement
MasProperties.Mass, .CenterOfGravity, .MomentsOfInertia
| Extractor |
Output |
Source |
Priorité |
Status |
File |
extract_buckling_factor(mode) |
- |
F06 |
P3 |
❌ |
- |
extract_critical_load() |
N |
F06 |
P3 |
❌ |
- |
| Extractor |
Output |
Source |
Priorité |
Status |
File |
ZernikeExtractor.extract_subcase() |
coeffs |
OP2 |
P1 |
✓ |
extract_zernike.py |
ZernikeExtractor.extract_relative() |
delta_coeffs |
OP2 |
P1 |
✓ |
extract_zernike.py |
extract_zernike_from_op2() |
coeffs |
OP2 |
P1 |
✓ |
extract_zernike.py |
extract_zernike_filtered_rms() |
RMS(nm) |
OP2 |
P1 |
✓ |
extract_zernike.py |
SurfaceZernikeExtractor.extract_from_op2() |
coeffs |
OP2 |
P1 |
✓ |
extract_zernike_surface.py |
Usage: Mirror/lens deformation optimization using Zernike polynomial decomposition
5. Manipulateurs Avancés
5.1 Manipulateurs de Forme (Shape Optimization)
| Manipulator |
Description |
Priorité |
morph_nodes(nodes, displacements) |
Morphing direct |
P3 |
ffd_box(control_points) |
Déformation FFD |
P3 |
offset_faces(faces, distance) |
Offset paramétrique |
P2 |
5.2 Manipulateurs Topologiques (Future)
| Manipulator |
Description |
Priorité |
apply_density_filter(elements) |
SIMP filtering |
P4 |
extract_iso_surface(density) |
Topology to geometry |
P4 |
create_lattice_infill(region) |
Lattice génération |
P4 |
6. Plan d'Implémentation 80/20
Phase 1: Fondations ✓ COMPLETED
Objectif: Stabiliser le workflow de base
| # |
Tâche |
Fichier |
Status |
| 1.1 |
Expression manipulation via .exp file |
nx_updater.py |
✓ |
| 1.2 |
Mass extraction from BDF |
bdf_mass_extractor.py |
✓ |
| 1.3 |
Mass extraction from NX Open |
extract_part_mass_material.py |
✓ |
| 1.4 |
Displacement extraction |
extract_displacement.py |
✓ |
| 1.5 |
Von Mises stress extraction |
extract_von_mises_stress.py |
✓ |
| 1.6 |
Frequency extraction |
extract_frequency.py |
✓ |
Phase 1b: NX Open Hooks ✓ COMPLETED (2025-12-06)
Objectif: Create direct NX Open Python hooks for CAD/FEM operations
Location: optimization_engine/hooks/nx_cad/
| # |
Tâche |
API (verified via MCP) |
Status |
File |
| 1b.1 |
Hook: open_part / close_part / save_part |
Session.Parts.OpenBase(), Part.Close(), Part.Save() |
✓ |
part_manager.py |
| 1b.2 |
Hook: get_expression / set_expression / set_expressions |
part.Expressions, Expressions.Edit() |
✓ |
expression_manager.py |
| 1b.3 |
Hook: update_model (integrated) |
Session.UpdateManager.DoUpdate() |
✓ |
expression_manager.py |
| 1b.4 |
Hook: get_mass_properties / get_bodies / get_volume |
MeasureManager.NewMassProperties() |
✓ |
geometry_query.py |
| 1b.5 |
Hook: suppress_feature / unsuppress_feature |
Feature.Suppress(), Feature.Unsuppress() |
✓ |
feature_manager.py |
| 1b.6 |
Hook: save_part_as (export) |
Part.SaveAs() |
✓ |
part_manager.py |
Phase 2: Workflow Complet ✓ COMPLETED
Objectif: Automatiser le cycle CAD → FEM → Results
| # |
Tâche |
API / Fichier |
Status |
| 2.1 |
BDF export via NX Open |
solver_manager.export_bdf() |
✓ |
| 2.2 |
Batch solver launch |
subprocess + NX run_solver |
✓ (external) |
| 2.3 |
Principal stress extraction |
extract_principal_stress() |
✓ |
| 2.4 |
Strain energy extraction |
extract_strain_energy() |
✓ |
| 2.5 |
Reaction force extraction |
extract_spc_forces() |
✓ |
| 2.6 |
Model Introspection |
model_introspection.py |
✓ |
Files Created (2025-12-06):
optimization_engine/hooks/nx_cae/solver_manager.py - BDF export & solve hooks
optimization_engine/extractors/extract_principal_stress.py - Principal stress (σ1, σ2, σ3)
optimization_engine/extractors/extract_strain_energy.py - Element strain energy
optimization_engine/extractors/extract_spc_forces.py - Reaction forces at BCs
optimization_engine/hooks/nx_cad/model_introspection.py - Comprehensive model introspection
Phase 2 Introspection Feature (2025-12-06):
The model introspection module provides comprehensive extraction of:
- Part (.prt): Expressions, bodies, mass properties, features, materials
- Simulation (.sim): Solutions, boundary conditions, loads, materials, mesh info, output requests
- Results (.op2): Available results (displacement, stress, strain, SPC forces, frequencies), subcases
Usage:
Objectif: Support thermique et dynamique
Priority: P1 (High) - Extends optimization to thermal/dynamic domains
| # |
Tâche |
API / Fichier |
Status |
Priority |
| 3.1 |
Temperature extraction |
extract_temperature.py |
✓ |
P1 |
| 3.2 |
Thermal gradient extraction |
extract_temperature_gradient() |
✓ |
P1 |
| 3.3 |
Thermal stress extraction |
OP2 + thermal subcase |
✓ (via E3) |
P1 |
| 3.4 |
Modal mass extraction |
extract_modal_mass.py |
✓ |
P1 |
| 3.5 |
Heat flux extraction |
extract_heat_flux() |
✓ |
P2 |
| 3.6 |
Thermal BC setup hook |
NXOpen.CAE.LoadCollection |
❌ |
P2 |
| 3.7 |
Thermo-mechanical coupling |
Multi-step solve |
❌ |
P3 |
Files Created (2025-12-06):
optimization_engine/extractors/extract_temperature.py - Temperature, gradient, heat flux (E15-E17)
optimization_engine/extractors/extract_modal_mass.py - Modal effective mass from F06 (E18)
optimization_engine/extractors/test_phase3_extractors.py - Phase 3 test suite
Phase 3 Implementation Guide:
Expected Outputs After Phase 3:
- New extractors:
extract_temperature.py, extract_thermal_gradient.py, extract_modal_mass.py
- Updated protocol SYS_12: Add E15-E18 for thermal extractors
- New study templates: Thermal optimization, thermo-mechanical optimization
Phase 4: AtomizerField Integration (from Master Plan)
Objectif: Neural network surrogate for field prediction
| # |
Tâche |
Description |
Status |
| 4.1 |
Mesh Graph Builder |
GNN graph from FEM mesh |
❌ |
| 4.2 |
Training Data Exporter |
Mesh + BC + results package |
❌ |
| 4.3 |
Field Mapper |
GNN predictions → NX format |
❌ |
| 4.4 |
Sample Validation |
Check convergence/quality |
❌ |
Phase 5: Surrogates & Advanced
Objectif: Kriging, topology, lattice
| # |
Tâche |
Status |
| 5.1 |
Gaussian Process / Kriging surrogate |
❌ |
| 5.2 |
SOL 200 interface (native topo) |
❌ |
| 5.3 |
Lattice infill generation |
❌ |
| 5.4 |
FFD morphing |
❌ |
7. Classes NX Open Clés (Verified via MCP)
Session & Part Access
Expression Manipulation
Mass Properties
CAE/FEM Access
Feature Manipulation
8. Structure de Fichiers Finale
9. Métriques de Succès
Phase 1 Complete When: ✓ ACHIEVED
Phase 2 Complete When: ✓ ACHIEVED (2025-12-06)
Phase 3 Complete When: ✓ CORE ACHIEVED (2025-12-06)
10. Références
Documentation NX Open (via MCP)
MCP Tools for NX Open Documentation:
Key Page IDs:
| Class |
Page ID |
URL Path |
| Session |
a03318.html |
/nxopen_python_ref/a03318.html |
| Part |
a02434.html |
/nxopen_python_ref/a02434.html |
| BasePart |
a00266.html |
/nxopen_python_ref/a00266.html |
| CaeSession |
a10510.html |
/nxopen_python_ref/a10510.html |
| Class Index |
classes.html |
/nxopen_python_ref/classes.html |
| Function Index |
functions_*.html |
/nxopen_python_ref/functions_m.html (etc.) |
Ressources Externes
Papers & Academic
Related Atomizer Documentation
11. Version History
| Version |
Date |
Changes |
| 1.0 |
2025-12-06 |
Initial roadmap from industry research |
| 2.0 |
2025-12-06 |
Merged with ATOMIZER_NXOPEN_MASTER_PLAN.md, added verified MCP API mappings, updated extractor status |
| 2.1 |
2025-12-06 |
Phase 1b Complete: NX Open hooks implemented (part_manager, expression_manager, geometry_query, feature_manager) |
| 2.2 |
2025-12-06 |
Phase 2 Complete: Principal stress, strain energy, SPC forces extractors + solver_manager |
| 2.3 |
2025-12-06 |
Model Introspection: Added comprehensive model_introspection.py for full part/sim/op2 analysis |
| 2.4 |
2025-12-06 |
Phase 3 Prepared: Detailed roadmap for thermal/dynamic extractors with implementation guide |
| 2.5 |
2025-12-06 |
Phase 3 Core Complete: Temperature (E15-E17) and modal mass (E18) extractors implemented |
Generated with assistance from Claude Code using MCP Siemens Documentation tools