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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user