2025-11-16 21:29:54 -05:00
|
|
|
"""Quick test to verify expression updates are working"""
|
|
|
|
|
import sys
|
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
|
|
sys.path.insert(0, str(Path(__file__).parent.parent.parent))
|
|
|
|
|
|
2026-01-13 15:53:55 -05:00
|
|
|
from optimization_engine.nx.solver import NXSolver
|
|
|
|
|
from optimization_engine.nx.updater import NXParameterUpdater
|
2025-11-16 21:29:54 -05:00
|
|
|
|
|
|
|
|
study_dir = Path(__file__).parent
|
|
|
|
|
prt_file = study_dir / "model" / "Bracket.prt"
|
|
|
|
|
sim_file = study_dir / "model" / "Bracket_sim1.sim"
|
|
|
|
|
|
|
|
|
|
print("Testing expression update workflow...")
|
|
|
|
|
print()
|
|
|
|
|
|
|
|
|
|
# Test with two different parameter sets
|
|
|
|
|
test_params = [
|
|
|
|
|
{'tip_thickness': 15.0, 'support_angle': 25.0},
|
|
|
|
|
{'tip_thickness': 25.0, 'support_angle': 35.0},
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
updater = NXParameterUpdater(prt_file_path=prt_file)
|
|
|
|
|
solver = NXSolver(nastran_version='2412', use_journal=True)
|
|
|
|
|
|
|
|
|
|
for i, params in enumerate(test_params):
|
|
|
|
|
print(f"Trial {i}: tip_thickness={params['tip_thickness']}, support_angle={params['support_angle']}")
|
|
|
|
|
|
|
|
|
|
# Update .prt file
|
|
|
|
|
updater.update_expressions(params)
|
|
|
|
|
updater.save()
|
|
|
|
|
|
|
|
|
|
# Run simulation WITH expression_updates
|
|
|
|
|
result = solver.run_simulation(sim_file, expression_updates=params)
|
|
|
|
|
|
|
|
|
|
if result['success']:
|
|
|
|
|
print(f" SUCCESS: OP2 generated")
|
|
|
|
|
|
|
|
|
|
# Read OP2 to check displacement
|
|
|
|
|
from pyNastran.op2.op2 import OP2
|
|
|
|
|
model = OP2()
|
|
|
|
|
model.read_op2(str(result['op2_file']))
|
|
|
|
|
|
|
|
|
|
if hasattr(model, 'displacements') and model.displacements:
|
|
|
|
|
disp = model.displacements[1]
|
|
|
|
|
max_disp = abs(disp.data[:, :3]).max()
|
|
|
|
|
print(f" Max displacement: {max_disp:.6f} mm")
|
|
|
|
|
print()
|
|
|
|
|
else:
|
|
|
|
|
print(f" FAILED")
|
|
|
|
|
print()
|
|
|
|
|
|
|
|
|
|
print("If the two displacement values are DIFFERENT, the fix worked!")
|