from upxo.ggrowth.mcgs import mcgs
from upxo.interfaces.io.expop import ArrExp2d as arex2
import os
[docs]
class mcgs2d_Surrogate():
"""
Usage
-----
from upxo.surrModelOps.SModelJobs import mcgs2d_Surrogate as smod2d
"""
__slots__ = ('input_dashboard', 'dim', 'Nsim', 'basePath',
'baseFilename', 'fileType', 'tslices', 'currentExportDirs',
'fileNamePadLength'
)
def __init__(self, input_dashboard: str):
"""Initialise the instance."""
self.input_dashboard = input_dashboard
self.dim = 2
self.currentExportDirs = dict()
[docs]
def set_NumberOfSimulations(self, Nsim: int):
"""Set or update NumberOfSimulations."""
self.Nsim = Nsim
[docs]
def set_export_parameters(self, basePath: str, baseFilename: str,
fileType: str, fileNamePadLength: int = 4):
"""Set or update export parameters."""
self.basePath = basePath
self.baseFilename = baseFilename
self.fileType = fileType
self.fileNamePadLength = fileNamePadLength
[docs]
def makeImages(self, TemporalOrSimFolders='temporal',
compression=False, fileLevelCompression=False):
"""Makeimages."""
for simCount in range(self.Nsim):
UPXO_PXTAL = mcgs(input_dashboard=self.input_dashboard)
UPXO_PXTAL.simulate()
UPXO_PXTAL.detect_grains(library='connected_components_3d')
if TemporalOrSimFolders.lower() == 'temporal':
self.saveInTemporalFolders(simCount, UPXO_PXTAL,
fileLevelCompression=fileLevelCompression)
elif TemporalOrSimFolders.lower() == 'sim':
self.saveInSimulationFolders(simCount, UPXO_PXTAL,
fileLevelCompression=fileLevelCompression)
else:
raise ValueError("TemporalOrSimFolders must be either 'temporal' or 'sim'.")
[docs]
def saveInSimulationFolders(self, simCount, UPXO_PXTAL, fileLevelCompression=False):
"""Saveinsimulationfolders."""
sim_dir_name = f"Path_{simCount+1:0{self.fileNamePadLength}d}"
self.currentExportDirs[simCount] = os.path.join(self.basePath, sim_dir_name)
os.makedirs(self.currentExportDirs[simCount], exist_ok=True)
# -----------------------------------------------
for ts in UPXO_PXTAL.gs.keys():
# Apply dynamic padding to Time Slice file name
filename = f"Ensemble_{ts:0{self.fileNamePadLength}d}.{self.fileType}"
full_export_path = os.path.join(self.currentExportDirs[simCount], filename)
arex2.save(UPXO_PXTAL.gs[ts].lfi, full_export_path,
compression=fileLevelCompression)
[docs]
def saveInTemporalFolders(self, simCount, UPXO_PXTAL, fileLevelCompression=False):
"""Saveintemporalfolders."""
for ts in UPXO_PXTAL.gs.keys():
# Apply dynamic padding to Time Slice Directory name
ts_dir_name = f"EnsembleSet_{ts:0{self.fileNamePadLength}d}"
self.currentExportDirs[ts] = os.path.join(self.basePath, ts_dir_name)
os.makedirs(self.currentExportDirs[ts], exist_ok=True)
# Apply dynamic padding to Simulation file name
filename = f"Realization_{simCount+1:0{self.fileNamePadLength}d}.{self.fileType}"
full_export_path = os.path.join(self.currentExportDirs[ts], filename)
arex2.save(UPXO_PXTAL.gs[ts].lfi, full_export_path,
compression=fileLevelCompression)