def case_setup(ci): template_case = SolutionDirectory( "template", archive=None, paraviewLink=False) case = template_case.cloneCase( "{0}{1}".format(ci.name, ci.quadrature_order) ) phase_properties = ParsedParameterFile( path.join("./diffs", ci.phase_properties_name)) phase_properties["air"]["PBEDiameterCoeffs"]["QMOMCoeffs"]["quadratureOrder"] = ci.quadrature_order # manually fix bad pyfoam parsing phase_properties["blending"]["default"]["type"] = "none" phase_properties["drag"][1]["swarmCorrection"]["type"] = "none" phase_properties.writeFileAs(path.join( case.name, "constant", "phaseProperties" )) m0 = ParsedParameterFile(path.join(template_case.name, "0", "m0")) for i in range(ci.number_of_moments): m0.header["object"] = "m" + str(i) m0["internalField"].setUniform(ci.initial_moments[i]) m0["dimensions"] = "[0 {0} 0 0 0 0 0]".format(3 * i) m0.writeFileAs(path.join(case.name, "0", "m" + str(i))) controlDict = ParsedParameterFile( path.join(case.name, "system", "controlDict") ) controlDict["functions"]["probes"]["fields"] = [ "m{0}".format(m) for m in range(ci.number_of_moments)] controlDict["endTime"] = ci.end_time controlDict["deltaT"] = ci.delta_t controlDict.writeFile()
def case_setup(ci): template_case = SolutionDirectory( "template", archive=None, paraviewLink=False) case = template_case.cloneCase( "{0}NC{1}".format(ci.name, ci.nr_classes) ) phase_properties = ParsedParameterFile( path.join(template_case.name, "constant", "phaseProperties")) phase_properties["oil"]["PBEDiameterCoeffs"]["MOCCoeffs"]["numberOfClasses"] = ci.nr_classes phase_properties["oil"]["PBEDiameterCoeffs"]["MOCCoeffs"]["xi1"] = ci.dv # manually fix bad pyfoam parsing phase_properties["blending"]["default"]["type"] = "none" phase_properties["drag"][1]["swarmCorrection"]["type"] = "none" phase_properties.writeFileAs(path.join( case.name, "constant", "phaseProperties" )) n0 = ParsedParameterFile(path.join(template_case.name, "0", "n0")) for i in range(ci.nr_classes): n0.header["object"] = "n" + str(i) n0["internalField"].setUniform(ci.Ninit[i]) n0.writeFileAs(path.join(case.name, "0", "n" + str(i))) controlDict = ParsedParameterFile( path.join(case.name, "system", "controlDict") ) controlDict["functions"]["probes"]["fields"] = [ "n{0}".format(n) for n in range(ci.nr_classes)] controlDict.writeFile()
def changePatchType(self, item): texto = str(item.text()) w = bcPatch(self.boundaries[texto]['type']) result = w.exec_() if result: patchType = w.getPatchType() self.boundaries[texto]['type'] = patchType self.boundaries.writeFile() fileDict = '%s/system/changeDictionaryPetroSym' % self.currentFolder dictDict = [] if os.path.isfile(fileDict): dictDict = ParsedParameterFile(fileDict, createZipped=False) for ifield in self.fields: if dictDict == []: filename = '%s/%s' % (self.timedir, ifield) fieldData = ParsedParameterFile(filename, listLengthUnparsed=20, createZipped=False) else: fieldData = dictDict['dictionaryReplacement'][ifield] newDict = {} if patchType == 'empty': newDict['type'] = 'empty' newDict['ZZvalue'] = '0' else: if ifield in unknowns: newDict['type'] = 'zeroGradient' newDict['ZZvalue'] = '0' else: newDict['type'] = 'calculated' newDict['ZZvalue'] = '0' fieldData['boundaryField'][texto] = newDict if dictDict == []: fieldData.writeFile() else: dictDict['dictionaryReplacement'][ifield] = fieldData if dictDict != []: dictDict.writeFile() dictDictBak = ParsedParameterFile(fileDict, createZipped=False) keysDict = dictDict['dictionaryReplacement'].keys() dictDictBak['dictionaryReplacement'] = {} for ikey in keysDict: if ikey in self.fields: dictDictBak['dictionaryReplacement'][ikey] = {} dictDictBak['dictionaryReplacement'][ikey][ 'boundaryField'] = dictDict[ 'dictionaryReplacement'][ikey]['boundaryField'] dictDictBak.writeFileAs( '%s/system/changeDictionaryPetroSym.bak' % self.currentFolder) command = 'sed -i "s/ZZ/~/g" %s/system/changeDictionaryPetroSym.bak' % ( self.currentFolder) os.system(command) #chequear que no bloquee if self.nproc <= 1: command = 'changeDictionary -case %s -dict %s/system/changeDictionaryPetroSym.bak 1> %s/changeDictionary.log 2> %s/error.log &' % ( self.currentFolder, self.currentFolder, self.currentFolder, self.currentFolder) else: command = 'mpirun -np %s changeDictionary -case %s -dict %s/system/changeDictionaryPetroSym.bak -parallel 1> %s/changeDictionary.log 2> %s/error.log &' % ( str(self.nproc), self.currentFolder, self.currentFolder, self.currentFolder, self.currentFolder) os.system(command) self.loadData()
def saveBCs(self): ipatch = str(self.listWidget.currentItem().text()) fileDict = '%s/system/changeDictionaryPetroSym' % self.currentFolder dictDict = [] if os.path.isfile(fileDict): dictDict = ParsedParameterFile(fileDict, createZipped=False) for itab in range(self.tabWidget.count()): ifield = str(self.tabWidget.tabText(itab)) itype = str( self.tabWidget.widget(itab).findChildren( QtGui.QComboBox)[0].currentText()) layout = self.tabWidget.widget(itab).findChildren( QtGui.QVBoxLayout)[0] if dictDict == []: filename = '%s/%s' % (self.timedir, ifield) parsedData = ParsedParameterFile(filename, listLengthUnparsed=20, createZipped=False) thisPatch = parsedData['boundaryField'][ipatch] else: thisPatch = dictDict['dictionaryReplacement'][ifield][ 'boundaryField'][ipatch] thisPatch = {} thisPatch['type'] = itype if itype == 'zeroGradient': thisPatch['ZZvalue'] = '0' #debo tomar los valores extras, si los tiene extraInfo = extras[ifield][itype] L = range(layout.count()) L = L[1:-1] iExtra = 0 #print ipatch for l in L: layout2 = layout.itemAt(l).layout() if layout2: if layout2.itemAt(1).widget().currentText() != 'table': if layout2.count() == 3: thisPatch[extraInfo[iExtra * 4]] = '%s %s' % ( layout2.itemAt(1).widget().currentText(), layout2.itemAt(2).widget().text()) else: thisPatch[extraInfo[ iExtra * 4]] = '%s (%s %s %s)' % ( layout2.itemAt(1).widget().currentText(), layout2.itemAt(2).widget().text(), layout2.itemAt(3).widget().text(), layout2.itemAt(4).widget().text()) else: #determinar que hacer si quiero cargar una table!!! #('table', [[0, 0.0], [1e6-0.01, 0.0], [1e6, 1.0], [1e6, 1.0]]) tabla = self.getTabla(itab) thisPatch[extraInfo[iExtra * 4]] = ('table', tabla) iExtra = iExtra + 1 if dictDict == []: parsedData['boundaryField'][ipatch] = thisPatch parsedData.writeFile() else: dictDict['dictionaryReplacement'][ifield]['boundaryField'][ ipatch] = thisPatch dictDict.writeFile() dictDictBak = ParsedParameterFile(fileDict, createZipped=False) keysDict = dictDict['dictionaryReplacement'].keys() dictDictBak['dictionaryReplacement'] = {} for ikey in keysDict: if ikey in self.fields: dictDictBak['dictionaryReplacement'][ikey] = {} dictDictBak['dictionaryReplacement'][ikey][ 'boundaryField'] = dictDict[ 'dictionaryReplacement'][ikey]['boundaryField'] dictDictBak.writeFileAs( '%s/system/changeDictionaryPetroSym.bak' % self.currentFolder) command = 'sed -i "s/ZZ/~/g" %s/system/changeDictionaryPetroSym.bak' % ( self.currentFolder) os.system(command) #chequear que no bloquee if self.nproc <= 1: command = 'changeDictionary -case %s -dict %s/system/changeDictionaryPetroSym.bak 1> %s/changeDictionary.log 2> %s/error.log &' % ( self.currentFolder, self.currentFolder, self.currentFolder, self.currentFolder) else: command = 'mpirun -np %s changeDictionary -case %s -dict %s/system/changeDictionaryPetroSym.bak -parallel 1> %s/changeDictionary.log 2> %s/error.log &' % ( str(self.nproc), self.currentFolder, self.currentFolder, self.currentFolder, self.currentFolder) os.system(command) self.pushButton.setEnabled(False) return
def updateFieldFiles(self): #tengo que releer cada uno de los campos en el directorio actual, #pisar los boundaries por los que aparece en constant/polyMesh/boundary #imponerles alguna CB por defecto dependiendo del tipo de patch boundaries = BoundaryDict(self.currentFolder) #veo los campos que tengo en el directorio inicial [timedir, fields, currtime] = currentFields(self.currentFolder, nproc=self.window().nproc, filterTurb=False) fileDict = '%s/system/changeDictionaryPetroSym' % self.currentFolder dictDict = [] if os.path.isfile(fileDict): dictDict = ParsedParameterFile(fileDict, createZipped=False) for ifield in fields: if dictDict == []: filename = '%s/%s' % (timedir, ifield) fieldData = ParsedParameterFile(filename, createZipped=False) else: fieldData = dictDict['dictionaryReplacement'][ifield] oldKeys = fieldData['boundaryField'].keys() fieldData['boundaryField'] = {} for ipatch in boundaries.getValueDict(): if ipatch not in fieldData['boundaryField']: if boundaries[ipatch]['nFaces'] == 0: continue patchDict = {} if ifield in unknowns: if boundaries[ipatch]['type'] == 'empty': patchDict['type'] = 'empty' if ipatch in oldKeys: patchDict['ZZvalue'] = '0' else: patchDict['type'] = 'zeroGradient' if ipatch in oldKeys: patchDict['ZZvalue'] = '0' else: patchDict['type'] = 'calculated' if ipatch in oldKeys: patchDict['ZZvalue'] = '0' fieldData['boundaryField'][ipatch] = patchDict # poner el campo interno uniforme en cero if types[ifield] == 'scalar': fieldData['internalField'] = 'uniform 0' elif types[ifield] == 'vector': fieldData['internalField'] = 'uniform (0 0 0)' if dictDict == []: fieldData.writeFile() if dictDict != []: dictDict.writeFile() dictDictBak = ParsedParameterFile(fileDict, createZipped=False) keysDict = dictDict['dictionaryReplacement'].keys() dictDictBak['dictionaryReplacement'] = {} for ikey in keysDict: if ikey in self.fields: dictDictBak['dictionaryReplacement'][ikey] = dictDict[ 'dictionaryReplacement'][ikey] dictDictBak.writeFileAs('%s/system/changeDictionaryPetroSym.bak' % self.currentFolder) command = 'sed -i "s/ZZ/~/g" %s/system/changeDictionaryPetroSym.bak' % ( self.currentFolder) os.system(command) #chequear que no bloquee if self.window().nproc <= 1: command = 'changeDictionary -case %s -dict %s/system/changeDictionaryPetroSym.bak 1> %s/changeDictionary.log 2> %s/error.log &' % ( self.currentFolder, self.currentFolder, self.currentFolder, self.currentFolder) else: command = 'mpirun -np %s changeDictionary -case %s -dict %s/system/changeDictionaryPetroSym.bak -parallel 1> %s/changeDictionary.log 2> %s/error.log &' % ( str(self.nproc), self.currentFolder, self.currentFolder, self.currentFolder, self.currentFolder) os.system(command) return
v = dv + dv * arange(class_number) if __name__ == "__main__": template_case = SolutionDirectory( "MOC-template", archive=None, paraviewLink=False) case = template_case.cloneCase( "{0}{1}".format("MOC", class_number) ) n0 = ParsedParameterFile(path.join(template_case.name, "0", "n0")) for i in range(class_number): n0.header["object"] = "n" + str(i) n0["internalField"].setUniform( m0 * (prob.cdf(v[i]) - prob.cdf(v[i] - dv)) ) n0.writeFileAs(path.join(case.name, "0", "n" + str(i))) phase_properties = ParsedParameterFile( path.join(case.name, "constant", "phaseProperties") ) phase_properties["air"]["PBEDiameterCoeffs"]["MOCCoeffs"]["numberOfClasses"] = class_number phase_properties["air"]["PBEDiameterCoeffs"]["MOCCoeffs"]["xi1"] = dv phase_properties["blending"]["default"]["type"] = "none" phase_properties["drag"][1]["swarmCorrection"]["type"] = "none" phase_properties.writeFile() control_dict = ParsedParameterFile( path.join(case.name, "system", "controlDict") ) control_dict["functions"]["probes"]["fields"] = [
def updateFieldFiles(self): #tengo que releer cada uno de los campos en el directorio actual, #pisar los boundaries por los que aparece en constant/polyMesh/boundary #imponerles alguna CB por defecto dependiendo del tipo de patch boundaries = BoundaryDict(self.currentFolder) #veo los campos que tengo en el directorio inicial [timedir,fields,currtime] = currentFields(self.currentFolder, nproc = self.window().nproc, filterTurb=False) fileDict = '%s/system/changeDictionaryPetroSym'%self.currentFolder dictDict = [] if os.path.isfile(fileDict): dictDict = ParsedParameterFile(fileDict,createZipped=False) for ifield in fields: if dictDict==[]: filename = '%s/%s'%(timedir,ifield) fieldData = ParsedParameterFile(filename,createZipped=False) else: fieldData = dictDict['dictionaryReplacement'][ifield] oldKeys = fieldData['boundaryField'].keys() fieldData['boundaryField'] = {} for ipatch in boundaries.getValueDict(): if ipatch not in fieldData['boundaryField']: if boundaries[ipatch]['nFaces']==0: continue patchDict={} if ifield in unknowns: if boundaries[ipatch]['type']=='empty': patchDict['type'] = 'empty' if ipatch in oldKeys: patchDict['ZZvalue'] = '0' else: patchDict['type'] = 'zeroGradient' if ipatch in oldKeys: patchDict['ZZvalue'] = '0' else: patchDict['type'] = 'calculated' if ipatch in oldKeys: patchDict['ZZvalue'] = '0' fieldData['boundaryField'][ipatch] = patchDict # poner el campo interno uniforme en cero if types[ifield] == 'scalar': fieldData['internalField'] = 'uniform 0' elif types[ifield] == 'vector': fieldData['internalField'] = 'uniform (0 0 0)' if dictDict==[]: fieldData.writeFile() if dictDict!=[]: dictDict.writeFile() dictDictBak = ParsedParameterFile(fileDict,createZipped=False) keysDict = dictDict['dictionaryReplacement'].keys() dictDictBak['dictionaryReplacement'] = {} for ikey in keysDict: if ikey in self.fields: dictDictBak['dictionaryReplacement'][ikey] = dictDict['dictionaryReplacement'][ikey] dictDictBak.writeFileAs('%s/system/changeDictionaryPetroSym.bak'%self.currentFolder) command = 'sed -i "s/ZZ/~/g" %s/system/changeDictionaryPetroSym.bak'%(self.currentFolder) os.system(command) #chequear que no bloquee if self.window().nproc<=1: command = 'changeDictionary -case %s -dict %s/system/changeDictionaryPetroSym.bak 1> %s/changeDictionary.log 2> %s/error.log &'%(self.currentFolder,self.currentFolder,self.currentFolder,self.currentFolder) else: command = 'mpirun -np %s changeDictionary -case %s -dict %s/system/changeDictionaryPetroSym.bak -parallel 1> %s/changeDictionary.log 2> %s/error.log &'%(str(self.nproc),self.currentFolder,self.currentFolder,self.currentFolder,self.currentFolder) os.system(command) return
def changePatchType(self,item): texto = str(item.text()) w = bcPatch(self.boundaries[texto]['type']) result = w.exec_() if result: patchType = w.getPatchType() self.boundaries[texto]['type'] = patchType self.boundaries.writeFile() fileDict = '%s/system/changeDictionaryPetroSym'%self.currentFolder dictDict = [] if os.path.isfile(fileDict): dictDict = ParsedParameterFile(fileDict,createZipped=False) for ifield in self.fields: if dictDict==[]: filename = '%s/%s'%(self.timedir,ifield) fieldData = ParsedParameterFile(filename,listLengthUnparsed=20,createZipped=False) else: fieldData = dictDict['dictionaryReplacement'][ifield] newDict = {} if patchType == 'empty': newDict['type'] = 'empty' newDict['ZZvalue'] = '0' else: if ifield in unknowns: newDict['type'] = 'zeroGradient' newDict['ZZvalue'] = '0' else: newDict['type'] = 'calculated' newDict['ZZvalue'] = '0' fieldData['boundaryField'][texto] = newDict if dictDict==[]: fieldData.writeFile() else: dictDict['dictionaryReplacement'][ifield] = fieldData if dictDict!=[]: dictDict.writeFile() dictDictBak = ParsedParameterFile(fileDict,createZipped=False) keysDict = dictDict['dictionaryReplacement'].keys() dictDictBak['dictionaryReplacement'] = {} for ikey in keysDict: if ikey in self.fields: dictDictBak['dictionaryReplacement'][ikey] = {} dictDictBak['dictionaryReplacement'][ikey]['boundaryField'] = dictDict['dictionaryReplacement'][ikey]['boundaryField'] dictDictBak.writeFileAs('%s/system/changeDictionaryPetroSym.bak'%self.currentFolder) command = 'sed -i "s/ZZ/~/g" %s/system/changeDictionaryPetroSym.bak'%(self.currentFolder) os.system(command) #chequear que no bloquee if self.nproc<=1: command = 'changeDictionary -case %s -dict %s/system/changeDictionaryPetroSym.bak 1> %s/changeDictionary.log 2> %s/error.log &'%(self.currentFolder,self.currentFolder,self.currentFolder,self.currentFolder) else: command = 'mpirun -np %s changeDictionary -case %s -dict %s/system/changeDictionaryPetroSym.bak -parallel 1> %s/changeDictionary.log 2> %s/error.log &'%(str(self.nproc),self.currentFolder,self.currentFolder,self.currentFolder,self.currentFolder) os.system(command) self.loadData()
def saveBCs(self): ipatch = str(self.listWidget.currentItem().text()) fileDict = '%s/system/changeDictionaryPetroSym'%self.currentFolder dictDict = [] if os.path.isfile(fileDict): dictDict = ParsedParameterFile(fileDict,createZipped=False) for itab in range(self.tabWidget.count()): ifield = str(self.tabWidget.tabText(itab)) itype = str(self.tabWidget.widget(itab).findChildren(QtGui.QComboBox)[0].currentText()) layout = self.tabWidget.widget(itab).findChildren(QtGui.QVBoxLayout)[0] if dictDict == []: filename = '%s/%s'%(self.timedir,ifield) parsedData = ParsedParameterFile(filename,listLengthUnparsed=20,createZipped=False) thisPatch = parsedData['boundaryField'][ipatch] else: thisPatch = dictDict['dictionaryReplacement'][ifield]['boundaryField'][ipatch] thisPatch = {} thisPatch['type'] = itype if itype == 'zeroGradient': thisPatch['ZZvalue'] = '0' #debo tomar los valores extras, si los tiene extraInfo = extras[ifield][itype] L = range(layout.count()) L = L[1:-1] iExtra = 0 #print ipatch for l in L: layout2 = layout.itemAt(l).layout() if layout2: if layout2.itemAt(1).widget().currentText() != 'table': if layout2.count()==3: thisPatch[extraInfo[iExtra*4]] = '%s %s' %(layout2.itemAt(1).widget().currentText(),layout2.itemAt(2).widget().text()) else: thisPatch[extraInfo[iExtra*4]] = '%s (%s %s %s)' %(layout2.itemAt(1).widget().currentText(),layout2.itemAt(2).widget().text(),layout2.itemAt(3).widget().text(),layout2.itemAt(4).widget().text()) else: #determinar que hacer si quiero cargar una table!!! #('table', [[0, 0.0], [1e6-0.01, 0.0], [1e6, 1.0], [1e6, 1.0]]) tabla = self.getTabla(itab) thisPatch[extraInfo[iExtra*4]] = ('table',tabla) iExtra = iExtra+1 if dictDict == []: parsedData['boundaryField'][ipatch] = thisPatch parsedData.writeFile() else: dictDict['dictionaryReplacement'][ifield]['boundaryField'][ipatch] = thisPatch dictDict.writeFile() dictDictBak = ParsedParameterFile(fileDict,createZipped=False) keysDict = dictDict['dictionaryReplacement'].keys() dictDictBak['dictionaryReplacement'] = {} for ikey in keysDict: if ikey in self.fields: dictDictBak['dictionaryReplacement'][ikey] = {} dictDictBak['dictionaryReplacement'][ikey]['boundaryField'] = dictDict['dictionaryReplacement'][ikey]['boundaryField'] dictDictBak.writeFileAs('%s/system/changeDictionaryPetroSym.bak'%self.currentFolder) command = 'sed -i "s/ZZ/~/g" %s/system/changeDictionaryPetroSym.bak'%(self.currentFolder) os.system(command) #chequear que no bloquee if self.nproc<=1: command = 'changeDictionary -case %s -dict %s/system/changeDictionaryPetroSym.bak 1> %s/changeDictionary.log 2> %s/error.log &'%(self.currentFolder,self.currentFolder,self.currentFolder,self.currentFolder) else: command = 'mpirun -np %s changeDictionary -case %s -dict %s/system/changeDictionaryPetroSym.bak -parallel 1> %s/changeDictionary.log 2> %s/error.log &'%(str(self.nproc),self.currentFolder,self.currentFolder,self.currentFolder,self.currentFolder) os.system(command) self.pushButton.setEnabled(False) return