Example #1
0
 def resetCase(self):
     [self.timedir,self.fields,self.currtime] = currentFields(self.currentFolder,nproc=self.window().nproc)
     w = reset()
     result = w.exec_()
     if result:
         self.window().nproc = 1
         command = 'pyFoamClearCase.py %s %s'%(w.getParams(), self.currentFolder)
         os.system(command)
         #if w.deleteSnapshots():
         #    command = 'rm -rf %s/postProcessing/snapshots'%self.currentFolder
         #    os.system(command)
         if w.resetFigures():
             self.window().resetFigures(w.deletePostpro(),True)
         filename = '%s/system/controlDict'%self.currentFolder
         parsedData = ParsedParameterFile(filename,createZipped=False)
         parsedData['startFrom'] = 'startTime'            
         parsedData['startTime'] = '0'
         parsedData.writeFile()
         self.window().typeFile = {}
         self.window().pending_files = []
         self.window().pending_dirs = []
         self.window().updateLogFiles()
         
         self.type_serial.setChecked(True)
         self.type_parallel.setChecked(False)
         
         self.changeType()
                     
         self.window().save_config()
Example #2
0
    def setData(self, data):

        #self.spinBox.setValue(data['nsteps']) if 'nsteps' in data.keys() else None
        #self.nop.setValue(data['nop']) if 'nop' in data.keys() else None
        self.name.setText(data['name']) if 'name' in data.keys() else None

        #self.comboBox.setCurrentText(data['field']) if 'field' in data.keys()  else None
        #self.comboBox.setCurrentText(data['autorefreshing']) if 'autorefreshing' in data.keys() else None

        self.p1_x.setText(data['p1x']) if 'p1x' in data.keys() else None
        self.p1_y.setText(data['p1y']) if 'p1y' in data.keys() else None
        self.p1_z.setText(data['p1z']) if 'p1z' in data.keys() else None
        self.p2_x.setText(data['p2x']) if 'p2x' in data.keys() else None
        self.p2_y.setText(data['p2y']) if 'p2y' in data.keys() else None
        self.p2_z.setText(data['p2z']) if 'p2z' in data.keys() else None

        filename = '%s/system/controlDict' % (self.currentFolder)
        parsedData = ParsedParameterFile(filename, createZipped=False)
        if 'functions' in parsedData.getValueDict().keys():
            if data['name'] in parsedData['functions'].keys():
                dicc = parsedData['functions'][data['name']]
                if dicc['type'] == 'sets':
                    self.name.setText(data['name'])
                    self.spinBox.setValue(dicc['outputInterval'])

        return data
 def aplicar(self):
     filename = '%s/system/controlDict'%self.currentFolder
     parsedData = ParsedParameterFile(filename,createZipped=False)
     
     parsedData['startFrom'] = self.cb_start_from_iinv[self.cb_start_from.currentIndex()]
     parsedData['startTime'] = str(self.start_from.text())
     parsedData['endTime'] = str(self.end_time.text())
     parsedData['deltaT'] = str(self.delta_time.text())
     if self.adjustable.isChecked():
         parsedData['adjustTimeStep'] = 'yes'
     else:
         parsedData['adjustTimeStep'] = 'no'
     parsedData['maxCo'] = str(self.max_cfl.text())
     parsedData['maxAlphaCo'] = str(self.max_cfl_alpha.text())
     parsedData['maxDeltaT'] = str(self.max_deltat.text())
     parsedData['writeControl'] = self.cb_write_control_iinv[self.cb_write_control.currentIndex()]
     parsedData['writeInterval'] = str(self.write_control.text())
     parsedData['purgeWrite'] = str(self.purge.value())
     parsedData['writePrecision'] = str(self.precision.value())
     parsedData['writeFormat'] = self.format_iinv[self.format.currentIndex()]
     parsedData['timePrecision'] = str(self.precision_time.value())
     parsedData['writeCompression'] = self.compression_iinv[self.compression.currentIndex()]
     parsedData['stopAt'] = 'endTime'
     
     parsedData.writeFile()
     
     self.pushButton.setEnabled(False)
     
     self.window().updateLogFiles()
     
     return
Example #4
0
    def aplicar(self):
        filename = '%s/system/controlDict' % self.currentFolder
        parsedData = ParsedParameterFile(filename, createZipped=False)

        parsedData['startFrom'] = self.cb_start_from_iinv[
            self.cb_start_from.currentIndex()]
        parsedData['startTime'] = str(self.start_from.text())
        parsedData['endTime'] = str(self.end_time.text())
        parsedData['deltaT'] = str(self.delta_time.text())
        if self.adjustable.isChecked():
            parsedData['adjustTimeStep'] = 'yes'
        else:
            parsedData['adjustTimeStep'] = 'no'
        parsedData['maxCo'] = str(self.max_cfl.text())
        parsedData['maxAlphaCo'] = str(self.max_cfl_alpha.text())
        parsedData['maxDeltaT'] = str(self.max_deltat.text())
        parsedData['writeControl'] = self.cb_write_control_iinv[
            self.cb_write_control.currentIndex()]
        parsedData['writeInterval'] = str(self.write_control.text())
        parsedData['purgeWrite'] = str(self.purge.value())
        parsedData['writePrecision'] = str(self.precision.value())
        parsedData['writeFormat'] = self.format_iinv[
            self.format.currentIndex()]
        parsedData['timePrecision'] = str(self.precision_time.value())
        parsedData['writeCompression'] = self.compression_iinv[
            self.compression.currentIndex()]
        parsedData['stopAt'] = 'endTime'

        parsedData.writeFile()

        self.pushButton.setEnabled(False)

        self.window().updateLogFiles()

        return
Example #5
0
def setDict(dict_file, key, value):
    """all parameters are string type, accept, None or empty string
    dict_file: file must exist, checked by caller
    key: create the key if not existent
    value: None or empty string  will delet such key
    """

    if isinstance(key, string_types) and key.find('/')>=0:
        group = [k for k in key.split('/') if k]
    elif isinstance(key, list) or isinstance(key, tuple):
        group = [s for s in key if isinstance(s, string_types)]
    else:
        print("Warning: input key is not string or sequence type, so do nothing but return".format(key))
        return

    f = ParsedParameterFile(dict_file)        
    if len(group) == 3:
        d = f[group[0]][group[1]]  # at most 3 levels, assuming it will auto create not existent key
    elif len(group) == 2:
        d = f[group[0]]
    else:
        d = f
    k = group[-1]

    if value:  # 
        d[k] = value
    elif key in d:
        del d[k]  #if None, or empty string is specified, delete this key
    else:
        print('Warning: check parameters for set_dict() key={} value={}'.format(key, value))
    f.writeFile()
Example #6
0
 def saveBCs(self):
     
     ipatch = str(self.listWidget.currentItem().text())
     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]
         filename = '%s/%s'%(self.timedir,ifield)
         parsedData = ParsedParameterFile(filename,listLengthUnparsed=20,createZipped=False)
         parsedData['boundaryField'][ipatch] = {}
         parsedData['boundaryField'][ipatch]['type'] = itype
         #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:
                          parsedData['boundaryField'][ipatch][extraInfo[iExtra*4]] = '%s %s' %(layout2.itemAt(1).widget().currentText(),layout2.itemAt(2).widget().text())
                     else:
                          parsedData['boundaryField'][ipatch][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)
                     parsedData['boundaryField'][ipatch][extraInfo[iExtra*4]] = ('table',tabla)
                 iExtra = iExtra+1
         parsedData.writeFile()
     self.pushButton.setEnabled(False)
     return
Example #7
0
 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, False)
     
     for ifield in fields:
         filename = '%s/%s'%(timedir,ifield)
         fieldData = ParsedParameterFile(filename,createZipped=False)
         
         fieldData['boundaryField'] = {}
         for ipatch in boundaries.getValueDict():
             if ipatch not in fieldData['boundaryField']:
                 if boundaries[ipatch]['nFaces']==0:
                     continue
                 patchDict={}
                 if ifield in unknowns:
                     patchDict['type'] = 'zeroGradient'
                 else:                    
                     patchDict['type'] = 'calculated'
                 fieldData['boundaryField'][ipatch] = patchDict
         
         fieldData.writeFile()
     
     return
Example #8
0
    def loadCaseData(self):
        filename = '%s/system/controlDict' % self.currentFolder
        backupFile(filename)
        self.parsedData = ParsedParameterFile(filename, createZipped=False)
        self.tracersData = []
        if 'functions' in self.parsedData.getValueDict().keys():
            for key in self.parsedData['functions'].keys():
                if self.parsedData['functions'][key][
                        'type'] == 'scalarTransport':
                    tracer = {}
                    tracer['name'] = key
                    tracer['patchName'] = self.parsedData['functions'][key][
                        'patchName']
                    tracer['startTime'] = self.parsedData['functions'][key][
                        'fvOptions']['S']['timeStart']
                    #TODO: cargar aca
                    if tracer['patchName'] == 'box':
                        tracer['p0'] = self.parsedData['functions'][key][
                            'fvOptions']['S']['p0']
                        tracer['p1'] = self.parsedData['functions'][key][
                            'fvOptions']['S']['p1']
                    self.tracersData.append(tracer)

        if self.patches == []:
            boundaries = BoundaryDict(str(self.currentFolder))
            self.patches = boundaries.patches()
            for ipatch in self.patches:
                if boundaries[ipatch]['type'] == 'empty':
                    self.emptys.append(ipatch)

        self.pushButton_3.setEnabled(True)
Example #9
0
    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, False)

        for ifield in fields:
            filename = '%s/%s' % (timedir, ifield)
            fieldData = ParsedParameterFile(filename, createZipped=False)

            fieldData['boundaryField'] = {}
            for ipatch in boundaries.getValueDict():
                if ipatch not in fieldData['boundaryField']:
                    if boundaries[ipatch]['nFaces'] == 0:
                        continue
                    patchDict = {}
                    if ifield in unknowns:
                        patchDict['type'] = 'zeroGradient'
                    else:
                        patchDict['type'] = 'calculated'
                    fieldData['boundaryField'][ipatch] = patchDict

            fieldData.writeFile()

        return
Example #10
0
    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()
            
            for ifield in self.fields:
                
                filename = '%s/%s'%(self.timedir,ifield)
                fieldData = ParsedParameterFile(filename,listLengthUnparsed=20,createZipped=False)

                newDict = {}
                if patchType == 'empty':
                    newDict['type'] = 'empty'
                else:
                    if ifield in unknowns:
                        newDict['type'] = 'zeroGradient'
                    else:
                        newDict['type'] = 'calculated'
                
                fieldData['boundaryField'][texto] = newDict

                fieldData.writeFile()

            self.loadData()
Example #11
0
 def exportData(self):
     if self.nproc > 1:
         w = QtGui.QMessageBox(
             QtGui.QMessageBox.Information, "Error", "Data only can be exported in reconstructed cases"
         )
         w.exec_()
         return
     tt = ""
     if self.time_4.currentText() == "Latest Time":
         tt = "-latestTime"
     opt = str(self.comboBox.currentText())
     filename = "%s/export.log" % self.currentFolder
     self.window().newLogTab("Export", filename)
     if opt == "VTK":
         action = "foamToVTK -case %s %s > %s &" % (self.currentFolder, tt, filename)
     elif opt == "Fluent":
         action = "foamMeshToFluent -case %s &" % (self.currentFolder)
         os.system(action)
         action = "cp %s/caseDicts/foamDataToFluentDict %s/system/foamDataToFluentDict" % (
             os.path.dirname(os.path.realpath(__file__)),
             self.currentFolder,
         )
         os.system(action)
         parsedData = ParsedParameterFile("%s/system/foamDataToFluentDict" % self.currentFolder, createZipped=False)
         ii = 10
         for ifield in self.fields:
             if ifield not in parsedData.getValueDict().keys():
                 parsedData[ifield] = ii
                 ii = ii + 1
         action = "foamDataToFluent -case %s %s > %s &" % (self.currentFolder, tt, filename)
     elif opt == "Ensight":
         action = "foamToEnsight -case %s %s > %s &" % (self.currentFolder, tt, filename)
     os.system(action)
     return
    def processABoundaryFile(self,func,targetDir):
        """
        @param func: the function that transforms the actual boundary file
        """
        boundaryPath=path.join(targetDir,self.opts.region,"polyMesh","boundary")
        try:
            boundary=ParsedParameterFile(boundaryPath,
                                         debug=False,
                                         boundaryDict=True,
                                         treatBinaryAsASCII=True)
        except IOError:
            self.warning("Problem opening boundary file",boundaryPath)
            return False

        bnd=boundary.content

        if type(bnd)!=list:
            self.warning("Problem with boundary file (not a list)")
            return False

        boundary.content=func(bnd,targetDir)

        if boundary.content:
            if self.opts.test:
                print_(boundary)
            else:
                boundary.writeFile()
                # self.addToCaseLog(boundaryPath)
            return True
        else:
            self.warning(boundaryPath,"unchanged")
            return False
Example #13
0
File: app.py Project: fbob/dice-dev
    def load(self):
        self.copy_template_folder()

        # Parsed files
        # ============
        self._mesh_dict = ParsedParameterFile(
            self.config_path('system/meshDict'))
        self.__decompose_par_dict = ParsedParameterFile(
            self.config_path('system/decomposeParDict'))
        self.__control_dict = ParsedParameterFile(
            self.config_path('system/controlDict'))

        # Registered files
        # ================
        self.register_foam_file('system/meshDict', self._mesh_dict)
        self.register_foam_file('system/decomposeParDict',
                                self.__decompose_par_dict)
        self.register_foam_file('system/controlDict', self.__control_dict)

        # Load refinementObjects
        # ======================
        self.object_refinements_load()

        # Load function from Visualization module
        # =======================================
        self.visualization_load()

        # Load output and vis objects when app finished
        # =============================================
        if self.status == FoamApp.FINISHED:
            self.__output_mesh = FoamMesh(self.current_run_path())
            self.__load_output_vis()

        self.update_tree_view()
Example #14
0
    def __init__(self, currentFolder):
        figureTracersUI.__init__(self)
        self.currentFolder = currentFolder
        self.buttonBox.button(QtGui.QDialogButtonBox.Ok).setEnabled(False)
        
        [self.timedir,self.fields,bas] = currentFields(self.currentFolder)
        
        filename = '%s/system/controlDict'%self.currentFolder
        self.parsedData = ParsedParameterFile(filename,createZipped=False)
        
        self.tracersData = []
        if 'functions' in self.parsedData.getValueDict().keys():
            for key in self.parsedData['functions'].keys():
                if self.parsedData['functions'][key]['type'] == 'scalarTransport':
                    tracer = {}
                    tracer['name'] = key
                    tracer['patchName'] = self.parsedData['functions'][key]['patchName']
                    tracer['startTime'] = self.parsedData['functions'][key]['fvOptions']['S']['timeStart']
                    self.tracersData.append(tracer)

        for tracer in self.tracersData:
            item = QtGui.QListWidgetItem()
            item.setCheckState(QtCore.Qt.Unchecked)
            item.setText(tracer['name'])
            self.listWidget.addItem(item)
            
        from PyFoam.RunDictionary.BoundaryDict import BoundaryDict
        boundaries = BoundaryDict(str(self.currentFolder))
        for ipatch in boundaries.getValueDict():
            if boundaries[ipatch]['type']  != 'empty':
                self.comboBox.addItem(ipatch)
Example #15
0
    def run(self):
        fName=self.parser.getArgs()[0]
        destPatches=self.parser.getArgs()[1:]
        if self.opts.patch==None and self.opts.value==None:
            self.error("Either a patch or a value must be specified")
        if self.opts.patch!=None and self.opts.value!=None:
            self.error("Only a patch or a value can be specified")

        try:
            fieldFile=ParsedParameterFile(fName,backup=False)
        except IOError:
            e = sys.exc_info()[1] # Needed because python 2.5 does not support 'as e'
            self.error("Problem with file",fName,":",e)

        value=""
        if self.opts.patch:
            value=fieldFile["boundaryField"][self.opts.patch][self.opts.srckey]
        else:
            value="uniform "+self.opts.value

        for destPatch in destPatches:
            fieldFile["boundaryField"][destPatch][self.opts.destkey]=value

        if self.opts.test:
            print_(str(fieldFile))
        else:
            fieldFile.writeFile()
Example #16
0
    def accept(self):
        filename = '%s/system/controlDict' % (self.currentFolder)
        parsedData = ParsedParameterFile(filename, createZipped=False)

        if 'functions' not in parsedData.getValueDict().keys():
            parsedData['functions'] = {}

        #Logica para evitar nombres repetidos
        for key in self.parsedData['functions'].keys():
            if key == str(self.name.text()):
                w = QtGui.QMessageBox(
                    QtGui.QMessageBox.Information, "Error",
                    "The name of the new figure and the name of the tracer must be different. Please select another name"
                )
                w.exec_()
                return

        dicc['outputInterval'] = self.spinBox.value()
        fields = []
        for i in range(self.listWidget.count()):
            if self.listWidget.item(i).checkState() == QtCore.Qt.Checked:
                fields.append(str(self.listWidget.item(i).text()))
        dicc['fields'] = fields
        dicc['sourceName'] = str(self.comboBox.currentText())
        parsedData['functions'][str(self.name.text())] = dicc
        parsedData.writeFile()

        self.done(self.Accepted)
 def accept(self):
     filename = '%s/system/controlDict'%(self.currentFolder)
     parsedData = ParsedParameterFile(filename,createZipped=False)
     if 'functions' not in parsedData.getValueDict().keys():
         parsedData['functions'] = {}
     if str(self.name.text()) not in parsedData['functions'].keys():
         parsedData['functions'][str(self.name.text())] = {}
     
     parsedData['functions'][str(self.name.text())]['type'] = 'sets'
     parsedData['functions'][str(self.name.text())]['outputControl'] = 'timeStep'
     parsedData['functions'][str(self.name.text())]['outputInterval'] = self.spinBox.value()
     parsedData['functions'][str(self.name.text())]['setFormat'] = 'raw'
     parsedData['functions'][str(self.name.text())]['interpolationScheme'] = 'cellPoint'
     ifield = self.comboBox.currentText()
     if ifield not in self.fields:
         #significa que es un vector
         axis = 'distance' #ifield[-1]
         ifield = ifield[0:-1]
     else:
         axis = 'distance' #por las dudas        
     parsedData['functions'][str(self.name.text())]['fields'] = [ifield]
     
     dicc = {}
     dicc['nPoints'] = self.nop.text()
     dicc['start'] = '(%s %s %s)'%(str(self.p1_x.text()),str(self.p1_y.text()),str(self.p1_z.text()))
     dicc['end'] = '(%s %s %s)'%(str(self.p2_x.text()),str(self.p2_y.text()),str(self.p2_z.text()))
     dicc['type'] = 'uniform'
     dicc['axis'] = axis
     parsedData['functions'][str(self.name.text())]['sets'] = ['data',dicc]
     
     parsedData.writeFile()
     
     self.done(self.Accepted)
Example #18
0
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()
Example #19
0
 def accept(self):
     filename = '%s/system/controlDict'%(self.currentFolder)
     parsedData = ParsedParameterFile(filename,createZipped=False)
     
     if 'functions' not in parsedData.getValueDict().keys():
         parsedData['functions'] = {}
     
     #Logica para evitar nombres repetidos
     for key in self.parsedData['functions'].keys():
         if key == str(self.name.text()):
             w = QtGui.QMessageBox(QtGui.QMessageBox.Information, "Error", "The name of the new figure and the name of the tracer must be different. Please select another name")
             w.exec_()
             return
     
     dicc['outputInterval'] = self.spinBox.value()
     fields = []
     for i in range(self.listWidget.count()):
         if self.listWidget.item(i).checkState() == QtCore.Qt.Checked:
             fields.append(str(self.listWidget.item(i).text()))
     dicc['fields'] = fields
     dicc['sourceName'] = str(self.comboBox.currentText())        
     parsedData['functions'][str(self.name.text())] = dicc
     parsedData.writeFile()
     
     self.done(self.Accepted)
Example #20
0
 def testReadTutorial(self):
     test=ParsedParameterFile(self.theFile,listLengthUnparsed=100)
     data1=deepcopy(test.content)
     open(self.theFile,"w").write(str(FoamFileGenerator(data1,header=test.header)))
     del test
     test2=ParsedParameterFile(self.theFile,listLengthUnparsed=100)
     self.assertEqual(data1,test2.content)
Example #21
0
    def run(self):
        fName=self.parser.getArgs()[0]
        bName=self.parser.getArgs()[1]
        tName=self.parser.getArgs()[2]

        boundaryPath=path.join(".",fName,self.opts.time,self.opts.region,"polyMesh","boundary")
        try:
            boundary=ParsedParameterFile(boundaryPath,debug=False,boundaryDict=True)
        except IOError:
            self.error("Problem opening boundary file",boundaryPath)

        bnd=boundary.content

        if type(bnd)!=list:
            self.error("Problem with boundary file (not a list)")

        found=False

        for val in bnd:
            if val==bName:
                found=True
            elif found:
                val["type"]=tName
                break

        if not found:
            self.error("Boundary",bName,"not found in",bnd[::2])

        if self.opts.test:
            print_(boundary)
        else:
            boundary.writeFile()
            self.addToCaseLog(fName)
Example #22
0
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 __init__(self, sol, libs, funs):
        self.control = ParsedParameterFile(path.join(sol.systemDir(),
                                                     "controlDict"),
                                           backup=True,
                                           doMacroExpansion=True)

        self.fresh = False

        try:
            if libs and ("libs" in self.control):
                warning(
                    "Temporarily removing the libs-entry from the controlDict")
                del self.control["libs"]
                self.fresh = True
            if funs and ("functions" in self.control):
                warning(
                    "Temporarily removing the functions-entry from the controlDict"
                )
                del self.control["functions"]
                self.fresh = True

            if self.fresh:
                self.control.writeFile()
            else:
                self.control.restore()

        except Exception:
            e = sys.exc_info()[
                1]  # Needed because python 2.5 does not support 'as e'
            warning("Restoring defaults")
            self.control.restore()
            raise e
Example #24
0
    def __init__(self,sol,correctors,tolerance,relTol,pRefValue=None,pRefCell=None):
        self.solution=ParsedParameterFile(path.join(sol.systemDir(),"fvSolution"),backup=True)
        self.schemes=ParsedParameterFile(path.join(sol.systemDir(),"fvSchemes"),backup=True)
        self.control=ParsedParameterFile(path.join(sol.systemDir(),"controlDict"),backup=True)
        self.controlOrig=ParsedParameterFile(path.join(sol.systemDir(),"controlDict"),backup=False)
        
        pre=environ["FOAM_TUTORIALS"]
        if not oldTutorialStructure():
            pre=path.join(pre,"basic")
        pot=SolutionDirectory(path.join(pre,"potentialFoam","cylinder"),archive=None,paraviewLink=False)
        
        self.fresh=True
        
        try:
            if "SIMPLE" not in self.solution:
                self.solution["SIMPLE"]=ParsedParameterFile(path.join(pot.systemDir(),"fvSolution"),backup=False)["SIMPLE"]

            if "nNonOrthogonalCorrectors" not in self.solution["SIMPLE"] and correctors==None:
                correctors=3
                warning("Setting number of correctors to default value",correctors)
            if correctors!=None:
                self.solution["SIMPLE"]["nNonOrthogonalCorrectors"]=correctors

            if pRefCell!=None:
                self.solution["SIMPLE"]["pRefCell"]=pRefCell
            if pRefValue!=None:
                self.solution["SIMPLE"]["pRefValue"]=pRefValue
                
            if tolerance!=None:
                try:
                    self.solution["solvers"]["p"][1]["tolerance"]=tolerance
                except KeyError:
                    # 1.6 format
                    self.solution["solvers"]["p"]["tolerance"]=tolerance
                    
            if relTol!=None:
                try:
                    self.solution["solvers"]["p"][1]["relTol"]=relTol
                except KeyError:
                    # 1.6 format
                    self.solution["solvers"]["p"]["relTol"]=relTol
                    
            self.schemes.content=ParsedParameterFile(path.join(pot.systemDir(),"fvSchemes"),backup=False).content
            self.control.content=ParsedParameterFile(path.join(pot.systemDir(),"controlDict"),backup=False).content
            if "functions" in self.controlOrig:
                print "Copying functions over"
                self.control["functions"]=self.controlOrig["functions"]
            if "libs" in self.controlOrig:
                print "Copying libs over"
                self.control["libs"]=self.controlOrig["libs"]
                
            self.solution.writeFile()
            self.schemes.writeFile()
            self.control.writeFile()
        except Exception,e:
            warning("Restoring defaults")
            self.solution.restore()
            self.schemes.restore()
            self.control.restore()
            raise e
Example #25
0
    def __init__(self, sol, writeAll, purge, until):
        self.control = ParsedParameterFile(path.join(sol.systemDir(),
                                                     "controlDict"),
                                           backup=True,
                                           doMacroExpansion=True)

        self.fresh = True

        try:
            if writeAll:
                self.control["writeControl"] = "timeStep"
                self.control["writeInterval"] = "1"
                if purge != None:
                    self.control["purgeWrite"] = purge

            if until != None:
                self.control["endTime"] = until

            self.control.writeFile()
        except Exception:
            e = sys.exc_info()[
                1]  # Needed because python 2.5 does not support 'as e'
            warning("Restoring defaults")
            self.control.restore()
            raise e
Example #26
0
    def run(self):
        fName = self.parser.getArgs()[0]
        destPatches = self.parser.getArgs()[1:]
        if self.opts.patch == None and self.opts.value == None:
            self.error("Either a patch or a value must be specified")
        if self.opts.patch != None and self.opts.value != None:
            self.error("Only a patch or a value can be specified")

        try:
            fieldFile = ParsedParameterFile(fName, backup=False)
        except IOError:
            e = sys.exc_info()[
                1]  # Needed because python 2.5 does not support 'as e'
            self.error("Problem with file", fName, ":", e)

        value = ""
        if self.opts.patch:
            value = fieldFile["boundaryField"][self.opts.patch][
                self.opts.srckey]
        else:
            value = "uniform " + self.opts.value

        for destPatch in destPatches:
            fieldFile["boundaryField"][destPatch][self.opts.destkey] = value

        if self.opts.test:
            print_(str(fieldFile))
        else:
            fieldFile.writeFile()
Example #27
0
    def changePatchType(self, item):
        w = bcPatch(self.boundaries[item.text()]['type'])
        result = w.exec_()
        if result:
            patchType = w.getPatchType()
            self.boundaries[item.text()]['type'] = patchType
            self.boundaries.writeFile()

            for ifield in self.fields:

                filename = '%s/%s' % (self.timedir, ifield)
                fieldData = ParsedParameterFile(filename, createZipped=False)

                newDict = {}
                if patchType == 'empty':
                    newDict['type'] = 'empty'
                else:
                    if ifield in unknowns:
                        newDict['type'] = 'zeroGradient'
                    else:
                        newDict['type'] = 'calculated'

                fieldData['boundaryField'][item.text()] = newDict

                fieldData.writeFile()

            self.loadData()
Example #28
0
    def processABoundaryFile(self,func,targetDir):
        """
        :param func: the function that transforms the actual boundary file
        """
        boundaryPath=path.join(targetDir,"polyMesh","boundary")
        try:
            boundary=ParsedParameterFile(boundaryPath,
                                         debug=False,
                                         boundaryDict=True,
                                         treatBinaryAsASCII=True)
        except IOError:
            self.warning("Problem opening boundary file",boundaryPath)
            return False

        bnd=boundary.content

        if type(bnd)!=list:
            self.warning("Problem with boundary file (not a list)")
            return False

        boundary.content=func(bnd,targetDir)

        if boundary.content:
            if self.opts.test:
                print_(boundary)
            else:
                boundary.writeFile()
                # self.addToCaseLog(boundaryPath)
            return True
        else:
            self.warning(boundaryPath,"unchanged")
            return False
Example #29
0
    def execute(self, para, log):
        f = replaceValues(self.filename, para)
        v = replaceValues(self.value, para)
        s = replaceValues(self.subexpression, para)
        k = replaceValues(self.key, para)

        try:
            dictFile = ParsedParameterFile(f, backup=True)
            val = dictFile[k]
        except KeyError:
            self.error("Key: ", k, "not existing in File", f)
        except IOError:
            e = sys.exc_info()[
                1]  # Needed because python 2.5 does not support 'as e'
            self.error("Problem with file", k, ":", e)

        try:
            exec_("dictFile[k]" + s + "=v")
        except Exception:
            e = sys.exc_info()[
                1]  # Needed because python 2.5 does not support 'as e'
            error("Problem with subexpression:", sys.exc_info()[0], ":", e)

        dictFile.writeFile()

        return True, None
Example #30
0
 def __init__(self,
              templateDict='',
              interval=1,
              field='p',
              point=[0., 0., 0.]):
     super(Probe, self).__init__(name='probe')
     try:
         if (str(templateDict).split("/")[-1] != "controlDict"):
             raise ValueError
         check_file(templateDict)
     except ValueError:
         raise ValueError('File controlDict should be provided by user')
     try:
         if (int(interval) <= 0):
             raise ValueError
         #todo field check
         #if(str(field)!=("p"))
         if (len(point) != 3):
             raise ValueError
     except ValueError:
         raise ValueError('Not valid parameters for Probe')
     #all checks passed
     self.controlDict = ParsedParameterFile(templateDict)
     self.interval = interval
     self.field = field
     self.probeCoords = []
     strPoint = str('(' + ' '.join(map(str, point)) + ')')
     self.probeCoords.append(strPoint)
Example #31
0
def case_setup(ci):
    template_case = SolutionDirectory("template",
                                      archive=None,
                                      paraviewLink=False)
    case = template_case.cloneCase("{0}{1}".format(ci.name, ci.nr_classes))

    phase_properties = ParsedParameterFile(
        path.join("./diffs", ci.phase_properties_name))
    phase_properties["air"]["PBEDiameterCoeffs"]["MOCCoeffs"][
        "numberOfClasses"] = ci.nr_classes
    phase_properties["air"]["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"))

    v = ci.dv + ci.dv * arange(ci.nr_classes)
    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(v[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["endTime"] = ci.end_time
    controlDict["deltaT"] = ci.delta_t
    controlDict.writeFile()
 def setData(self,data):
     
     #self.spinBox.setValue(data['nsteps']) if 'nsteps' in data.keys() else None
     #self.nop.setValue(data['nop']) if 'nop' in data.keys() else None
     self.name.setText(data['name']) if 'name' in data.keys() else None
     
     #self.comboBox.setCurrentText(data['field']) if 'field' in data.keys()  else None
     #self.comboBox.setCurrentText(data['autorefreshing']) if 'autorefreshing' in data.keys() else None
     
     self.p1_x.setText(data['p1x']) if 'p1x' in data.keys() else None
     self.p1_y.setText(data['p1y']) if 'p1y' in data.keys() else None
     self.p1_z.setText(data['p1z']) if 'p1z' in data.keys() else None
     self.p2_x.setText(data['p2x']) if 'p2x' in data.keys() else None
     self.p2_y.setText(data['p2y']) if 'p2y' in data.keys() else None
     self.p2_z.setText(data['p2z']) if 'p2z' in data.keys() else None
     
     filename = '%s/system/controlDict'%(self.currentFolder)
     parsedData = ParsedParameterFile(filename,createZipped=False)
     if 'functions' in parsedData.getValueDict().keys():
         if data['name'] in parsedData['functions'].keys():
             dicc = parsedData['functions'][data['name']]
             if dicc['type']=='sets':
                 self.name.setText(data['name'])
                 self.spinBox.setValue(dicc['outputInterval'])
     
     return data
Example #33
0
    def write(self):
        """
        Updates the values for the turbulent flow properties and writes all
        **turbulent** boundary files. Wallfunctions, if used, are updated as
        well.
        """
        for bcI in self.turbBC:
            for inletPatchI in self.case.inletPatch:
                bcFile = ParsedParameterFile(
                                            join(
                                                self.case.name,
                                                self.case.first,
                                                bcI
                                                )
                                            )
                # Set the internal field and the inlet patch at first
                bcFile['internalField'] = "uniform %f" %(self.vars[bcI])
                bcFile['boundaryField'][inletPatchI]['value'] = \
                                                "uniform %f" %(self.vars[bcI])

                # Update the wallfunctions if they are used
                for patchI in bcFile['boundaryField']:

                    if "allFunction" in bcFile['boundaryField'][patchI]['type']:
                        bcFile['boundaryField'][patchI]['value'] = \
                                                "uniform %f" %(self.vars[bcI])

                # Write the current boundary file
                bcFile.writeFile()
Example #34
0
    def accept(self):
        filename = '%s/system/controlDict' % (self.currentFolder)
        parsedData = ParsedParameterFile(filename, createZipped=False)
        if 'functions' not in parsedData.getValueDict().keys():
            parsedData['functions'] = {}
        if str(self.name.text()) not in parsedData['functions'].keys():
            parsedData['functions'][str(self.name.text())] = {}

        parsedData['functions'][str(self.name.text())]['type'] = 'residuals'
        parsedData['functions'][str(
            self.name.text())]['outputControl'] = 'timeStep'
        parsedData['functions'][str(
            self.name.text())]['outputInterval'] = self.spinBox.value()
        parsedData['functions'][str(
            self.name.text())]['functionObjectLibs'] = [
                '"libutilityFunctionObjects.so"'
            ]
        fields = []
        for i in range(self.listWidget.count()):
            if self.listWidget.item(i).checkState() == QtCore.Qt.Checked:
                fields.append(str(self.listWidget.item(i).text()))
        parsedData['functions'][str(self.name.text())]['fields'] = fields

        parsedData.writeFile()

        self.done(self.Accepted)
Example #35
0
 def writeOFBoundaries(self):
     """Write boundary conditions to 0/<field> file in case directory."""
     for field in self.boundaries:
         f = ParsedParameterFile(os.path.join(self.casename, "0/" + field))
         for boundary in self.boundaries[field]:
             f["boundaryField"][boundary] = self.boundaries[field][boundary]
         f.writeFile()
    def accept(self):
        filename = '%s/system/controlDict'%(self.currentFolder)
        parsedData = ParsedParameterFile(filename,createZipped=False)

        if 'functions' not in parsedData.getValueDict().keys():
            parsedData['functions'] = {}
            
        #Logica para evitar que se llamen T* (como los tracers)
#        if len(str(self.name.text()))>=2 and self.name.text()[0]=='T':
#            for i in range(1,len(str(self.name.text()))):
#                if ()
            
        #Logica para evitar nombres repetidos
        for key in parsedData['functions'].keys():
            if key == str(self.name.text()):
                w = QtGui.QMessageBox(QtGui.QMessageBox.Information, "Error", "The name of the new figure and the name of the field must be different. Please select another name")
                w.exec_()
                return
            
        if str(self.name.text()) not in parsedData['functions'].keys():
            parsedData['functions'][str(self.name.text())] = {}
        
        parsedData['functions'][str(self.name.text())]['type'] = 'residuals'
        parsedData['functions'][str(self.name.text())]['outputControl'] = 'timeStep'
        parsedData['functions'][str(self.name.text())]['outputInterval'] = self.spinBox.value()
        parsedData['functions'][str(self.name.text())]['functionObjectLibs'] = ['"libutilityFunctionObjects.so"']
        fields = []        
        for i in range(self.listWidget.count()):
            if self.listWidget.item(i).checkState() == QtCore.Qt.Checked:
                fields.append(str(self.listWidget.item(i).text()))
        parsedData['functions'][str(self.name.text())]['fields'] = fields
        
        parsedData.writeFile()
        
        self.done(self.Accepted)
Example #37
0
 def saveUserLibrary(self):
     filename = 'caseDicts/materialProperties.incompressible'
     parsedData = ParsedParameterFile(filename,createZipped=False)
     parsedData['userLibrary'] = self.userLibrary
     parsedData.writeFile()
     
     return
    def run(self):
        fName=self.parser.getArgs()[0]
        bName=self.parser.getArgs()[1]
        tName=self.parser.getArgs()[2]

        boundaryPath=path.join(".",fName,self.opts.time,self.opts.region,"polyMesh","boundary")
        try:
            boundary=ParsedParameterFile(boundaryPath,debug=False,boundaryDict=True)
        except IOError:
            self.error("Problem opening boundary file",boundaryPath)

        bnd=boundary.content

        if type(bnd)!=list:
            self.error("Problem with boundary file (not a list)")

        found=False

        for val in bnd:
            if val==bName:
                found=True
            elif found:
                val["type"]=tName
                break

        if not found:
            self.error("Boundary",bName,"not found in",bnd[::2])

        if self.opts.test:
            print_(boundary)
        else:
            boundary.writeFile()
            self.addToCaseLog(fName)
Example #39
0
	def writeOFBoundaries(self):
		"""Write boundary conditions to 0/<field> file in case directory."""
		for field in self.boundaries:
			f = ParsedParameterFile(os.path.join(self.casename, "0/" + field))
			for boundary in self.boundaries[field]:
				f["boundaryField"][boundary] = self.boundaries[field][boundary]
			f.writeFile()
Example #40
0
    def __init__(self,sol,factor):
        self.solution=ParsedParameterFile(path.join(sol.systemDir(),"fvSolution"),backup=True)
        self.schemes=ParsedParameterFile(path.join(sol.systemDir(),"fvSchemes"),backup=True)

        self.fresh=True

        try:
            relax=self.solution["relaxationFactors"]
            for var in relax:
                relax[var]*=factor

            cExp=re.compile("div\((.+),(.+)\)")
            conv=self.schemes["divSchemes"]
            for nm in conv:
                if cExp.match(nm) or nm=="default":
                    conv[nm]="Gauss upwind"

            self.solution.writeFile()
            self.schemes.writeFile()
        except Exception:
            e = sys.exc_info()[1] # Needed because python 2.5 does not support 'as e'
            warning("Restoring defaults")
            self.solution.restore()
            self.schemes.restore()
            raise e
Example #41
0
    def saveUserLibrary(self):
        filename = 'caseDicts/materialProperties.incompressible'
        parsedData = ParsedParameterFile(filename, createZipped=False)
        parsedData['userLibrary'] = self.userLibrary
        parsedData.writeFile()

        return
Example #42
0
 def saveUserLibrary(self):
     filename = '%s/.config/petroSym/materialProperties.incompressible'%self.home #Path en home
     parsedData = ParsedParameterFile(filename,createZipped=False)
     parsedData['userLibrary'] = self.userLibrary
     parsedData.writeFile()
     
     return
Example #43
0
    def __init__(self, sol, factor):
        self.solution = ParsedParameterFile(path.join(sol.systemDir(),
                                                      "fvSolution"),
                                            backup=True)
        self.schemes = ParsedParameterFile(path.join(sol.systemDir(),
                                                     "fvSchemes"),
                                           backup=True)

        self.fresh = True

        try:
            relax = self.solution["relaxationFactors"]
            for var in relax:
                relax[var] *= factor

            cExp = re.compile("div\((.+),(.+)\)")
            conv = self.schemes["divSchemes"]
            for nm in conv:
                if cExp.match(nm) or nm == "default":
                    conv[nm] = "Gauss upwind"

            self.solution.writeFile()
            self.schemes.writeFile()
        except Exception:
            e = sys.exc_info()[
                1]  # Needed because python 2.5 does not support 'as e'
            warning("Restoring defaults")
            self.solution.restore()
            self.schemes.restore()
            raise e
Example #44
0
def edit_velocity(dictionary, domain_json, velocity=1):
    """
	Edit the initial velocity file for CFD simulation

	:param str dictionary: File path of the velocity dictionary, (0/U)
	:param str domain_json: File path of vessel inlet description json
	:param float velocity: Inlet velocity magnitude (cm/s)
	"""

    try:
        tqdm.write("{}: Editing velocity file: {}".format(
            datetime.datetime.now(), dictionary))
        velocityDict = ParsedParameterFile(dictionary)

        with open(domain_json, 'r') as f:
            domain_dict = json.load(f)

        boundaryField = {
            "vessel": {
                "type": "noSlip"
            },
            "walls": {
                "type": "empty"
            }
        }
        for key, value in domain_dict.items():
            try:
                if value["type"] == "inlet":
                    boundaryField.update({key: {
                     "type": "fixedValue",
                     "value": "uniform (" +\
                      str(value["tangent"][0]/100*velocity) + " " + \
                      str(value["tangent"][1]/100*velocity) + " " + \
                      str(value["tangent"][2]/100*velocity) + ")"}})
                elif value["type"] == "outlet":
                    boundaryField.update({
                        key: {
                            "type": "inletOutlet",
                            "inletValue": "uniform (0 0 0)",
                            "value": "uniform (0 0 0)"
                        }
                    })
                else:
                    continue
            except:
                continue

        velocityDict["boundaryField"] = boundaryField

        try:
            velocityDict.writeFile()
        except IOError:
            tqdm.write("Can't write file. Content would have been:")
            tqdm.write(velocityDict)

    except IOError:
        tqdm.write(dictionary, " does not exist")
        return 1
Example #45
0
 def testReadTutorialWithMacros(self):
     test=ParsedParameterFile(self.theFile,
                              listLengthUnparsed=100,
                              doMacroExpansion=True)
     data1=deepcopy(test.content)
     open(self.theFile,"w").write(str(FoamFileGenerator(data1,header=test.header)))
     del test
     test2=ParsedParameterFile(self.theFile,listLengthUnparsed=100,doMacroExpansion=True)
     self.compareData(data1,test2.content)
Example #46
0
def compareFile(file1, file2, name1="1", name2="2", valName=""):
    f1 = ParsedParameterFile(file1)
    f2 = ParsedParameterFile(file2)

    comparePyFoam(f1.content,
                  f2.content,
                  name1=name1,
                  name2=name2,
                  valName=valName)
Example #47
0
 def testBasicInclude(self):
     if foamVersionNumber()<(2,):
         return
     test=ParsedParameterFile(self.theFile)
     data1=deepcopy(test.content)
     open(self.theFile,"w").write(str(FoamFileGenerator(data1,header=test.header)))
     del test
     test2=ParsedParameterFile(self.theFile)
     self.assertEqual(data1,test2.content)
Example #48
0
 def aplicar(self):
     filename = '%s/system/fvSolution'%self.currentFolder
     parsedData = ParsedParameterFile(filename,createZipped=False)
     
     #modify data
     parsedData.writeFile()
     
     self.pushButton.setEnabled(False)
     return
Example #49
0
 def testReadTutorial(self):
     test=ParsedParameterFile(self.theFile)
     data1=deepcopy(test.content)
     open(self.theFile,"w").write(str(FoamFileGenerator(data1,header=test.header)))
     del test
     test2=ParsedParameterFile(self.theFile)
     self.assertEqual(data1,test2.content)
     test3=ParsedParameterFile(self.theFile+".gz")
     self.assertEqual(data1,test3.content)
Example #50
0
    def saveCaseData(self, doTopoSet=False):

        for dd in self.tracersData:
            del self.parsedData["functions"][dd["name"]]

        if "functions" not in self.parsedData.getValueDict().keys():
            self.parsedData["functions"] = {}

        patches = []
        for i in range(self.tableWidget.rowCount()):
            patchName = str(self.tableWidget.cellWidget(i, 1).currentText())
            newkey = "T%s" % str(i)
            tracer = copy.deepcopy(dicc)
            cellsetname = "%s_c" % patchName

            tracer["fvOptions"]["S"]["timeStart"] = str(self.tableWidget.cellWidget(i, 0).text())
            tracer["fvOptions"]["S"]["cellSet"] = cellsetname
            tracer["patchName"] = patchName
            del tracer["fvOptions"]["S"]["scalarExplicitSetValueCoeffs"]["injectionRate"]["T0"]
            tracer["fvOptions"]["S"]["scalarExplicitSetValueCoeffs"]["injectionRate"][newkey] = "1"
            self.parsedData["functions"][newkey] = tracer
            patches.append(patchName)
        self.parsedData.writeFile()
        # self.parsedData.closeFile()

        if doTopoSet:
            spatches = set(patches)
            ii = 0
            cmd = "cp caseDicts/topoSetDict %s/system/." % self.currentFolder
            os.system(cmd)

            filename = "%s/system/topoSetDict" % self.currentFolder
            topoSetData = ParsedParameterFile(filename, createZipped=False)

            # armo el topoSet de manera de generar los cellSet deseados
            for ipatch in spatches:
                cellsetname = "%s_c" % ipatch
                facesetname = "%s_f" % ipatch
                if not os.path.isfile("%s/constant/polyMesh/sets/%s" % (self.currentFolder, cellsetname)):
                    if ii > 0:
                        topoSetData["actions"].append(topoSetData["actions"][0])
                        topoSetData["actions"].append(topoSetData["actions"][1])
                    topoSetData["actions"][ii]["name"] = facesetname
                    topoSetData["actions"][ii]["sourceInfo"]["name"] = ipatch
                    topoSetData["actions"][ii + 1]["name"] = cellsetname
                    topoSetData["actions"][ii + 1]["sourceInfo"]["set"] = facesetname
                    ii = ii + 2
            topoSetData.writeFile()

            cmd = "topoSet -case %s > run_topoSet.log &" % self.currentFolder
            os.system(cmd)
        else:
            self.loadCaseData()
            self.refreshTable()
            self.refreshTimeline()
        return
Example #51
0
    def stopRun(self):
            
        filename = '%s/system/controlDict'%self.currentFolder
        parsedData = ParsedParameterFile(filename,createZipped=False)
        parsedData['stopAt'] = 'writeNow'
        parsedData.writeFile()
        time.sleep(0.1)
        
        self.findChild(QtGui.QPushButton,'pushButton_3').setEnabled(False)

#        while 1:
#            command = 'ps | cut -d " " -f 7 | grep Foam > %s/runningNow'%self.currentFolder
#            os.system(command)
#            f = open('%s/runningNow'%self.currentFolder, 'r')
#            if not f.read():
#                break
#            f.close()
#            time.sleep(0.1)
        
        import psutil
        import utils
        self.progress = QtGui.QProgressBar()
        self.progress.setWindowTitle("Saving the current data... Hold tight")        
        resolution = utils.get_screen_resolutions()
        self.progress.setGeometry(int(resolution[0])/2 - 175,int(resolution[1])/2,350,30)
        self.progress.show()

        i=0
        while psutil.pid_exists(self.window().runningpid):
            #retraso un minuto la edicion del control dict
            tt = list(localtime())
            tt[4] = (tt[4]+1)%60 #Agrego el modulo porque cuando el min es 0, 0-1 = -1
            command = 'touch -d "%s" %s'%(strftime("%Y-%m-%d %H:%M:%S", struct_time(tuple(tt))),filename)
            os.system(command)
            
            self.progress.setValue(i)
            QtGui.QApplication.processEvents()
            i=i+0.1
            time.sleep(0.1)

        self.progress.setValue(100)
        self.progress.close()
        if psutil.pid_exists(self.window().runningpid):
            command = 'kill %s'%self.window().runningpid
            os.system(command)

        self.window().runningpid = -1
        self.window().save_config()
        self.window().runW.pushButton_run.setEnabled(True)
        self.window().runW.pushButton_reset.setEnabled(True)
        self.window().tab_mesh.setEnabled(True)
        self.window().refresh_pushButton.setEnabled(True)
        leave = [1,5]
        for i in range(self.window().treeWidget.topLevelItemCount()):
            if i not in leave:
                self.window().treeWidget.topLevelItem(i).setDisabled(False)
Example #52
0
    def saveCaseData(self, doTopoSet=False):

        for dd in self.tracersData:
            del self.parsedData['functions'][dd['name']]
        
        if 'functions' not in self.parsedData.getValueDict().keys():
            self.parsedData['functions'] = {}
            
        patches = []
        for i in range(self.tableWidget.rowCount()):
            patchName = str(self.tableWidget.cellWidget(i,1).currentText())
            newkey = 'T%s'%str(i)
            tracer = copy.deepcopy(dicc)
            cellsetname = '%s_c'%patchName
            
            tracer['fvOptions']['S']['timeStart'] = str(self.tableWidget.cellWidget(i,0).text())
            tracer['fvOptions']['S']['cellSet'] = cellsetname
            tracer['patchName'] = patchName
            del tracer['fvOptions']['S']['scalarExplicitSetValueCoeffs']['injectionRate']['T0']
            tracer['fvOptions']['S']['scalarExplicitSetValueCoeffs']['injectionRate'][newkey] = '1'            
            self.parsedData['functions'][newkey] = tracer
            patches.append(patchName)
        self.parsedData.writeFile()
        #self.parsedData.closeFile()
        
        if doTopoSet:
            spatches = set(patches)
            ii = 0
            cmd = 'cp %s/caseDicts/topoSetDict %s/system/.'%(os.path.dirname(__file__),self.currentFolder)
            os.system(cmd)
            
            filename = '%s/system/topoSetDict'%self.currentFolder
            topoSetData = ParsedParameterFile(filename,createZipped=False)        
            
            #armo el topoSet de manera de generar los cellSet deseados
            for ipatch in spatches:
                cellsetname = '%s_c'%ipatch
                facesetname = '%s_f'%ipatch
                if not os.path.isfile('%s/constant/polyMesh/sets/%s'%(self.currentFolder,cellsetname)):
                    if ii>0:
                        topoSetData['actions'].append(topoSetData['actions'][0])
                        topoSetData['actions'].append(topoSetData['actions'][1])
                    topoSetData['actions'][ii]['name'] = facesetname
                    topoSetData['actions'][ii]['sourceInfo']['name'] = ipatch
                    topoSetData['actions'][ii+1]['name'] = cellsetname
                    topoSetData['actions'][ii+1]['sourceInfo']['set'] = facesetname                
                    ii = ii+2
            topoSetData.writeFile()
                        
            cmd = 'topoSet -case %s > run_topoSet.log &'%self.currentFolder
            os.system(cmd)
        else:
            self.loadCaseData()
            self.refreshTable()
            self.refreshTimeline()
        return
Example #53
0
    def runCase(self):
    
        [self.timedir,self.fields,self.currtime] = currentFields(self.currentFolder,nproc=self.window().nproc)
        
#        if self.window().nproc>1:        
#            w = QtGui.QMessageBox(QtGui.QMessageBox.Information, "Is the case decomposed?", "Simulation will be done only if case decompositione was done previously. Continue?", QtGui.QMessageBox.Yes|QtGui.QMessageBox.No)
#            ret = w.exec_()
#            if(QtGui.QMessageBox.No == ret):
#                return
        
        #modifico el control dict porque pude haber parado la simulacion        
        filename = '%s/system/controlDict'%self.currentFolder
        parsedData = ParsedParameterFile(filename,createZipped=False)
        parsedData['stopAt'] = 'endTime'
        parsedData.writeFile()
        
        self.window().removeFilesPostPro()
        
        #retraso un minuto la edicion del control dict
        tt = list(localtime())
        tt[4] = (tt[4]-1)%60 #Agrego el modulo porque cuando el min es 0, 0-1 = -1
        command = 'touch -d "%s" %s'%(strftime("%Y-%m-%d %H:%M:%S", struct_time(tuple(tt))),filename)
        os.system(command)
        
        filename1 = '%s/run.log'%self.currentFolder
        filename2 = '%s/error.log'%self.currentFolder
        self.window().newLogTab('Run',filename1)
        if self.window().nproc<=1:
            command = '%s -case %s 1> %s 2> %s &'%(self.solvername,self.currentFolder,filename1,filename2)
        else:
            command = 'mpirun -np %s %s -case %s -parallel 1> %s 2> %s & '%(str(self.window().nproc),self.solvername,self.currentFolder,filename1, filename2)
        os.system(command)
        
        if self.window().nproc<=1:
            command = 'pidof %s'%self.solvername
        else:
            command = 'pidof mpirun'

        import subprocess
        self.window().runningpid = subprocess.check_output(command, shell=True)
        self.window().runningpid.replace('\n','') #Me lo devuelve con un espacio al final
        self.window().runningpid = int(self.window().runningpid) #Y como string
        self.window().save_config()
        
        self.pushButton_run.setEnabled(False)
        self.pushButton_reset.setEnabled(False)
        self.window().tab_mesh.setEnabled(False)
        self.window().refresh_pushButton.setEnabled(False)
        leave = [1,5]
        for i in range(self.window().treeWidget.topLevelItemCount()):
            if i not in leave:
                self.window().treeWidget.topLevelItem(i).setDisabled(True)
        self.window().findChild(logTab,'%s/run.log'%self.currentFolder).findChild(QtGui.QPushButton,'pushButton_3').setEnabled(True)
        self.window().updateLogFiles()
Example #54
0
def case_setup(ci):
    template_case = SolutionDirectory(
        "template", archive=None, paraviewLink=False)
    case = template_case.cloneCase("{0}".format(ci.name))

    stfproperties = ParsedParameterFile(path.join(
        case.name, "constant", "STFProperties"))

    stfproperties["apparentMass"] = ci.ma
    stfproperties["mass"] = ci.m
    stfproperties.writeFile()
Example #55
0
 def loadCaseData(self):
     filename = '%s/constant/g'%self.currentFolder
     if os.path.isfile(filename):
         self.parsedData = ParsedParameterFile(filename,createZipped=False)
     else:
         command = 'cp %s/templates/template_%s/constant/g %s/constant/.'% (os.path.dirname(os.path.realpath(__file__)),self.currentSolver,self.currentFolder)
         os.system(command)
         self.parsedData = ParsedParameterFile(filename,createZipped=False)
     self.gx.setText(str(self.parsedData['value'][0]))
     self.gy.setText(str(self.parsedData['value'][1]))
     self.gz.setText(str(self.parsedData['value'][2]))
Example #56
0
    def sampleDictionaries(self, cases, work, wind_dict):
        # TODO - at the moment for 90 degrees phi only and in line instead of in a function
        for case in cases:
            self._r.status('preparing Sample file for case '+case.name)
            sampleFile = ParsedParameterFile(path.join(case.systemDir(), "sampleDict"))
            del sampleFile.content['sets'][:]
            if len(wind_dict["Measurements"]) > 0:
                self._r.status("creating sample locations for measurements")
                for metMast in wind_dict["Measurements"]:
                    self._r.status("adding met mast " + metMast)
                    # creating sub directory entry
                    sampleFile.content['sets'].append(metMast)
                    # creating another fictional sub directory entry - so that i can run it over in a second
                    sampleFile.content['sets'].append([metMast])
                    sampleFile['sets'][len(sampleFile['sets'])-1] = \
                    {'type':'uniform', 'axis':'z',\
                    'start':'('+str(wind_dict["Measurements"][metMast]["x"])+" "\
                               +str(wind_dict["Measurements"][metMast]["y"])+" "\
                               +str(wind_dict["Measurements"][metMast]["gl"])+")",\
                    'end':  '('+str(wind_dict["Measurements"][metMast]["x"])+" "\
                               +str(wind_dict["Measurements"][metMast]["y"])+" "\
                               +str(wind_dict["Measurements"][metMast]["gl"]+\
                                    wind_dict["Measurements"][metMast]["h"])+")",\
                    'nPoints':wind_dict['sampleParams']['nPoints']}
            if len(wind_dict['sampleParams']['metMasts'])>0:
               self._r.status("creating sample locations for sampleParams")
               for metMast in wind_dict['sampleParams']['metMasts']:
                    # creating sub directory entry
                    sampleFile.content['sets'].append(metMast)
                    # creating another fictional sub directory entry - so that i can run it over in a second
                    sampleFile.content['sets'].append([metMast])
                    sampleFile['sets'][len(sampleFile['sets'])-1] = \
                    {'type':'uniform', 'axis':'z',\
                    'start':'('+str(wind_dict["sampleParams"]["metMasts"][metMast]["x"])+" "\
                               +str(wind_dict["sampleParams"]["metMasts"][metMast]["y"])+" "\
                               +str(wind_dict["sampleParams"]["metMasts"][metMast]["gl"])+")",\
                    'end':  '('+str(wind_dict["sampleParams"]["metMasts"][metMast]["x"])+" "\
                               +str(wind_dict["sampleParams"]["metMasts"][metMast]["y"])+" "\
                               +str(wind_dict["sampleParams"]["metMasts"][metMast]["gl"]+\
                                    wind_dict["sampleParams"]["metMasts"][metMast]["h"])+")",\
                    'nPoints':wind_dict['sampleParams']['nPoints']}

            del sampleFile.content['surfaces'][:]
            for i,h in enumerate(wind_dict['sampleParams']['hSample']):
                self._r.status('preparing sampling surface at '+str(h)+' meters agl')
                translateSTL.stl_shift_z_filenames(path.join(case.name,'constant/triSurface/terrain.stl'), path.join(case.name,'constant/triSurface/terrain_agl_'+str(h)+'.stl'), h)
                # creating sub directory entry
                sampleFile.content['surfaces'].append('agl_'+str(h))
                # creating another fictional sub directory entry - so that i can run it over in a second
                sampleFile.content['surfaces'].append(['agl_'+str(h)])
                sampleFile['surfaces'][len(sampleFile['surfaces'])-1]={'type':'sampledTriSurfaceMesh','surface':'terrain_agl_'+str(h)+'.stl','source':'cells'}
            sampleFile.writeFile()
            self._r.status('Sampling case '+case.name)
            Runner(args=["sample" ,"-latestTime", "-case" ,case.name])
Example #57
0
 def __init__(self,
              name,
              backup=False,
              debug=False,
              doMacroExpansion=False):
     ParsedParameterFile.__init__(self,
                                  name,
                                  backup=backup,
                                  debug=debug,
                                  longListOutputThreshold=None,
                                  doMacroExpansion=doMacroExpansion)