示例#1
0
    def __init__(self, folder, meshInstance):
        print "AcdOptiRunConfig::__init__()"
        self.folder = folder
        self.meshInstance = meshInstance
        self.status = "not_initialized"
        
        #Construct the instance name from folder
        instname = folder
        if instname[-1] == "/":
            instname = instname[0:-1]
        self.instName = instname = os.path.split(instname)[1]
        
        #Load the param file
        try:
            print os.path.join(self.folder, "paramFile.set")
            self.__paramFile = AcdOptiFileParser_simple(\
                os.path.join(self.folder, "paramFile.set"), 'rw')
        except IOError:
            raise AcdOptiException_runConfig_loadFail("File paramFile.set not found")

        if self.__paramFile.dataDict.getValSingle("fileID") != "runConfigParamFile":
            raise AcdOptiException_runConfig_loadFail\
                ("Wrong fileID, got \""+ self.__paramFile.dataDict.getValSingle("fileID")+"\" while loading paramFile")                
        if self.instName != self.__paramFile.dataDict.getValSingle("instName"):
            raise AcdOptiException_runConfig_loadFail("instName doesn't match folder name, expected='"+self.instName+"', got '"+self.__paramFile.dataDict.getValSingle("instName")+"'")
        
        self.status = self.__paramFile.dataDict.getValSingle("status")
        if not self.status in self.statuses:
            raise AcdOptiException_runConfig_loadFail("Status '" + self.status + "' not valid")
        
        self.stageName = self.__paramFile.dataDict.getValSingle("stageName")
        if self.stageName == "":
            self.stageName = None
        if self.stageName and self.status == "initialized":
            raise AcdOptiException_runConfig_loadFail("StageName != None while status='" + self.status + "'")
        
        #Generate stageFolder, stageFile, finishedFolder from stageName and status
        if self.statuses.index(self.status) >= self.statuses.index("staged"): 
            self.stageFolder = os.path.join(self.folder,"stage",self.stageName)
            if not os.path.isdir(self.stageFolder):
                raise AcdOptiException_runConfig_loadFail("StageFolder '" + self.stageFolder + "' does not exist, but status='" + self.status + "'")
            
            self.stageFile = os.path.join(self.folder, "stage", self.stageName) + ".tar.gz"
            if not os.path.isfile(self.stageFile):
                raise AcdOptiException_runConfig_loadFail("StageFile '" + self.stageFile + "' does not exist, but status='" + self.status + "'")
        if self.status == "finished":
            self.finishedFolder = os.path.join(self.folder, "finished", self.stageName)
            if not os.path.isdir(self.finishedFolder):
                raise AcdOptiException_runConfig_loadFail("FinishedFolder '" + self.finishedFolder + "' does not exist, but status='" + self.status + "'")
            
#        self.stageFolder = self.__paramFile.dataDict.getValSingle("stageFolder")
#        if self.stageFolder == "":
#            self.stageFolder = None
#        
#        self.stageFile = self.__paramFile.dataDict.getValSingle("stageFile")
#        if self.stageFile == "":
#            self.stageFile = None
#        
#        self.finishedFolder = self.__paramFile.dataDict.getValSingle("finishedFolder")
#        if self.finishedFolder == "":
#            self.finishedFolder = None
#            assert self.status != "finished"
        
        #Sanity check on folders for staged- and finished data:
        if not os.path.isdir(os.path.join(self.folder, "stage")):
            raise AcdOptiException_runConfig_loadFail("stage folder not found")
        if not os.path.isdir(os.path.join(self.folder, "finished")):
            raise AcdOptiException_runConfig_loadFail("finished folder not found")
        if not os.path.isdir(os.path.join(self.folder, "analysis")):
            raise AcdOptiException_runConfig_loadFail("analysis folder not found")
        
        #Load the solverSetups
        solverSetupNames = self.__paramFile.dataDict.getVals("solverSetup")
        self.solverSetups = []
        for ssName in solverSetupNames:
            self.solverSetups.append(AcdOptiSolverSetup(ssName, self))
        
        #Load the runner
        runnerType  = self.__paramFile.dataDict["runnerType"]
        self.runner = AcdOptiRunner.getRunner(runnerType, self)
        
        #Load any analysis specified by the paramFile
        anaDict = self.__paramFile.dataDict["analysis"]
        self.analysis = {}
        for (anaName, anaOptions) in anaDict:
            print anaName, anaOptions
            if anaName in self.analysis:
                raise KeyError("Analysis name '" + anaName + "' encountered twice")
            self.analysis[anaName] = AnalysisInterface.loadAnalysisByDict(anaOptions, os.path.join(self.folder, "analysis"), self)
    
        #Refresh lockdowns
        for solver in self.solverSetups:
            solver.refreshLockdown()
        self.runner.refreshLockdown()
        
        self.runner.write()
        
        #Check if we have an old file format, and if so write() to convert to new format
        if len(self.__paramFile.dataDict.getVals("stageFolder")):
            print "Updating to new file format without full paths specified (relocatable projects!)"
            self.__paramFile.dataDict.delItem("stageFolder")
            self.__paramFile.dataDict.delItem("stageFile")
            self.__paramFile.dataDict.delItem("finishedFolder")
            self.__paramFile.write()
示例#2
0
 def addAnalysis(self, type, name=None):
     "Create and add an analysis of the given type and name"
     ana = AnalysisInterface.createAndLoadAnalysis(type, self, os.path.join(self.folder, "analysis"), name)
     self.analysis[ana.instName] = ana