Smart isolation: backup/restore master model before each trial

- One-time backup of model files at study start (_model_backup/)
- Restore clean state before each trial (files stay in models/, NX refs intact)
- If a trial corrupts the model, next trial starts clean
- Best of both: NX reference integrity + trial isolation
This commit is contained in:
2026-02-11 14:42:07 +00:00
parent 4243a332a3
commit e8877429f8

View File

@@ -159,13 +159,26 @@ class AtomizerNXSolver:
self.use_iteration_folders = use_iteration_folders
self._iteration = 0
# Iteration outputs go inside the study folder, not models/
# study_dir = the directory where run_doe.py lives
# Iteration outputs go inside the study folder
self.study_dir = Path(__file__).parent.resolve()
self.iterations_dir = self.study_dir / "iterations"
self.iterations_dir.mkdir(parents=True, exist_ok=True)
logger.info("Iterations dir: %s", self.iterations_dir)
# Create one-time backup of master model files (clean state)
# Restored before each trial to ensure isolation
import shutil
self._backup_dir = self.study_dir / "_model_backup"
if not self._backup_dir.exists():
logger.info("Creating master model backup at %s", self._backup_dir)
self._backup_dir.mkdir(parents=True)
for ext in ("*.prt", "*.fem", "*.sim"):
for f in model_dir.glob(ext):
shutil.copy2(f, self._backup_dir / f.name)
logger.info("Backed up %d model files", len(list(self._backup_dir.iterdir())))
else:
logger.info("Using existing model backup at %s", self._backup_dir)
# Find the .sim file
sim_files = list(model_dir.glob("*.sim"))
if not sim_files:
@@ -285,7 +298,17 @@ class AtomizerNXSolver:
iter_dir.mkdir(parents=True, exist_ok=True)
try:
# Step 1: Solve directly on master model (no file copying)
# Step 0: Restore master model from backup (clean state each trial)
# Files stay in models/ so NX references are intact, but content is fresh
import shutil
restored = 0
for backup_file in self._backup_dir.iterdir():
dest = self.model_dir / backup_file.name
shutil.copy2(backup_file, dest)
restored += 1
logger.info("Restored %d model files from backup", restored)
# Step 1: Solve directly on master model
# NX file references stay intact — expressions updated in-place by journal
sim_file = self.sim_file
prt_file = self.prt_file