コード例 #1
0
ファイル: CfdCaseWriterFoam.py プロジェクト: hhc2tech/CfdFoam
    def __init__(self, analysis_obj):
        super(CfdCaseWriterFoam, self).__init__()
        """ analysis_obj should contains all the information needed,
        boundaryConditionList is a list of all boundary Conditions objects(FemConstraint)
        """

        self.analysis_obj = analysis_obj
        self.solver_obj = CfdTools.getSolver(analysis_obj)
        self.physics_model, isPresent = CfdTools.getPhysicsModel(analysis_obj)
        self.mesh_obj = CfdTools.getMesh(analysis_obj)
        self.material_objs = CfdTools.getMaterials(analysis_obj)
        self.bc_group = CfdTools.getCfdBoundaryGroup(analysis_obj)
        self.initial_conditions, isPresent = CfdTools.getInitialConditions(
            analysis_obj)
        self.porousZone_objs, self.porousZonePresent = CfdTools.getPorousObjects(
            analysis_obj)
        self.alphaZone_objs = CfdTools.getAlphaObjects(analysis_obj)
        self.zone_objs = CfdTools.getZoneObjects(analysis_obj)
        self.mesh_generated = False

        self.signals = CfdCaseWriterSignals()

        if len(self.alphaZone_objs) > 0:
            self.physics_model['Time'] = 'Transient'
            # TODO: remove this code and add GUI support for transient simulations
            self.solver_obj.TimeStep = 0.001
            self.solver_obj.WriteInterval = 0.05
            self.solver_obj.EndTime = 1
コード例 #2
0
 def __init__(self, analysis_obj):
     self.analysis_obj = analysis_obj
     self.solver_obj = CfdTools.getSolver(analysis_obj)
     self.physics_model = CfdTools.getPhysicsModel(analysis_obj)
     self.mesh_obj = CfdTools.getMesh(analysis_obj)
     self.material_objs = CfdTools.getMaterials(analysis_obj)
     self.bc_group = CfdTools.getCfdBoundaryGroup(analysis_obj)
     self.initial_conditions = CfdTools.getInitialConditions(analysis_obj)
     self.porousZone_objs = CfdTools.getPorousZoneObjects(analysis_obj)
     self.initialisationZone_objs = CfdTools.getInitialisationZoneObjects(analysis_obj)
     self.zone_objs = CfdTools.getZoneObjects(analysis_obj)
     self.mesh_generated = False
     self.working_dir = CfdTools.getOutputPath(self.analysis_obj)
コード例 #3
0
ファイル: CfdCaseWriterFoam.py プロジェクト: joefly850/CfdOF
 def __init__(self, analysis_obj):
     self.analysis_obj = analysis_obj
     self.solver_obj = CfdTools.getSolver(analysis_obj)
     self.physics_model, isPresent = CfdTools.getPhysicsModel(analysis_obj)
     self.mesh_obj = CfdTools.getMesh(analysis_obj)
     self.material_objs = CfdTools.getMaterials(analysis_obj)
     self.bc_group = CfdTools.getCfdBoundaryGroup(analysis_obj)
     self.initial_conditions, isPresent = CfdTools.getInitialConditions(analysis_obj)
     self.porousZone_objs = CfdTools.getPorousZoneObjects(analysis_obj)
     self.initialisationZone_objs = CfdTools.getInitialisationZoneObjects(analysis_obj)
     self.zone_objs = CfdTools.getZoneObjects(analysis_obj)
     self.conversion2D_obj,self.conversionObjPresent = CfdTools.get2DConversionObject(analysis_obj)
     self.mesh_generated = False
コード例 #4
0
    def __init__(self, obj):

        self.obj = obj
        analysis_obj = CfdTools.getParentAnalysisObject(obj)
        solver_obj = CfdTools.getSolver(analysis_obj)
        material_objs = CfdTools.getMaterials(analysis_obj)

        self.boundaryWidget = CfdBoundaryWidget(obj, None, solver_obj,
                                                material_objs)
        # fill the table in each variable tab, saved from the previous setup, existing case if BC name, done in each widget

        # geometry selection widget, only face is needed as boundary for CFD
        # GeometryElementsSelection(ref, eltypes=[], multigeom=True)  # allow_multiple_geom_types = multigeom
        self.selectionWidget = FemSelectionWidgets.GeometryElementsSelection(
            obj.References, ['Face'], False)
        # check references, has to be after initialization of selectionWidget
        try:
            self.selectionWidget.has_equal_references_shape_types(
            )  # boundarySelector has no such method
        except:
            print(
                '`selectionWidget.has_equal_references_shape_types()` is only available in FreeCAD 0.18+'
            )

        #the magic to have two widgets in one taskpanel
        self.form = [self.selectionWidget, self.boundaryWidget]
        if True:  # todo: check if solver is 'OpenFOAM'
            from CfdFoamTools import getVariableList
            solverSettings = CfdTools.getSolverSettings(
                solver_obj)  # physical_model
            variable_list = getVariableList(solverSettings)

            # TODO: if boundary_settings is empty dict, default setting for each variable could be provided
            if "FoamBoundarySettings" in self.obj.PropertiesList and self.obj.FoamBoundarySettings:
                self.foam_boundary_conditions = self.obj.FoamBoundarySettings
            else:
                print("debug print: variable_list", variable_list)
                self.foam_boundary_conditions = {
                    var: {}
                    for var in variable_list
                }  # {varible: bc_dict, ...}

            from FoamCaseBuilder.FoamBoundaryWidget import FoamBoundaryWidget
            s = {"variables": self.foam_boundary_conditions}
            self.foamWidget = FoamBoundaryWidget(s)
            self.form.append(self.foamWidget)
コード例 #5
0
    def initialiseUponReload(self):
        if self.physicsModel['Time'] == 'Steady':
            self.form.radioButtonSteady.toggle()
        elif self.physicsModel['Time'] == 'Transient':
            self.form.radioButtonTransient.toggle()

        if self.physicsModel['Flow'] == 'Incompressible':
            self.form.radioButtonIncompressible.toggle()
        elif self.physicsModel['Flow'] == 'Compressible':
            self.form.radioButtonCompressible.toggle()

        if self.physicsModel['Turbulence'] == 'Laminar':
            self.form.turbulenceCheckBox.toggle()
            self.form.radioButtonLaminar.toggle()
        elif self.physicsModel['Turbulence'] == 'RANS':
            self.form.turbulenceCheckBox.toggle()
            self.form.radioButtonRANS.toggle()
        ti = CfdTools.indexOrDefault(RANS_MODELS,
                                     self.physicsModel.get('TurbulenceType'),
                                     0)
        self.form.turbulenceComboBox.setCurrentIndex(ti)

        if self.physicsModel['Thermal'] == "Energy":
            self.form.thermalCheckBox.toggle()
            self.form.radioButtonEnergy.toggle()
        elif self.physicsModel['Thermal'] == "Buoyancy":
            self.form.thermalCheckBox.toggle()
            self.form.radioButtonBuoyancy.toggle()

        material_objs = CfdTools.getMaterials(
            CfdTools.getParentAnalysisObject(self.obj))
        if len(material_objs) > 1:
            self.form.gravityFrame.setVisible(True)
            # Add if absent for backward file compatibility
            if not self.physicsModel.get('Gravity'):
                self.physicsModel['Gravity'] = {
                    'gx': 0.0,
                    'gy': -9.81,
                    'gz': 0.0
                }
            gx = self.physicsModel['Gravity']['gx']
            gy = self.physicsModel['Gravity']['gy']
            gz = self.physicsModel['Gravity']['gz']
            setInputFieldQuantity(self.form.gx, "{} m/s^2".format(gx))
            setInputFieldQuantity(self.form.gy, "{} m/s^2".format(gy))
            setInputFieldQuantity(self.form.gz, "{} m/s^2".format(gz))
コード例 #6
0
ファイル: CfdCaseWriterFoam.py プロジェクト: dwstephens/CfdOF
    def __init__(self, analysis_obj):
        super(CfdCaseWriterFoam, self).__init__()

        self.analysis_obj = analysis_obj
        self.solver_obj = CfdTools.getSolver(analysis_obj)
        self.physics_model, isPresent = CfdTools.getPhysicsModel(analysis_obj)
        self.mesh_obj = CfdTools.getMesh(analysis_obj)
        self.material_objs = CfdTools.getMaterials(analysis_obj)
        self.bc_group = CfdTools.getCfdBoundaryGroup(analysis_obj)
        self.initial_conditions, isPresent = CfdTools.getInitialConditions(
            analysis_obj)
        self.porousZone_objs = CfdTools.getPorousZoneObjects(analysis_obj)
        self.initialisationZone_objs = CfdTools.getInitialisationZoneObjects(
            analysis_obj)
        self.zone_objs = CfdTools.getZoneObjects(analysis_obj)
        self.mesh_generated = False

        self.signals = CfdCaseWriterSignals()
コード例 #7
0
    def setEdit(self, vobj, mode):
        analysis_object = CfdTools.getParentAnalysisObject(self.Object)
        if analysis_object is None:
            CfdTools.cfdError("No parent analysis object found")
            return False
        physics_model, is_present = CfdTools.getPhysicsModel(analysis_object)
        if not is_present:
            CfdTools.cfdError("Analysis object must have a physics object")
            return False
        boundaries = CfdTools.getCfdBoundaryGroup(analysis_object)
        material_objs = CfdTools.getMaterials(analysis_object)

        import _TaskPanelCfdInitialiseInternalFlowField
        taskd = _TaskPanelCfdInitialiseInternalFlowField._TaskPanelCfdInitialiseInternalFlowField(
            self.Object, physics_model, boundaries, material_objs)
        taskd.obj = vobj.Object
        FreeCADGui.Control.showDialog(taskd)
        return True
コード例 #8
0
ファイル: CfdFluidBoundary.py プロジェクト: kliberty/CfdOF
    def setEdit(self, vobj, mode):
        analysis_object = CfdTools.getParentAnalysisObject(self.Object)
        if analysis_object is None:
            CfdTools.cfdError("Boundary must have a parent analysis object")
            return False
        physics_model = CfdTools.getPhysicsModel(analysis_object)
        if not physics_model:
            CfdTools.cfdError("Analysis object must have a physics object")
            return False
        material_objs = CfdTools.getMaterials(analysis_object)

        import _TaskPanelCfdFluidBoundary
        taskd = _TaskPanelCfdFluidBoundary.TaskPanelCfdFluidBoundary(self.Object, physics_model, material_objs)
        for obj in FreeCAD.ActiveDocument.Objects:
            if obj.isDerivedFrom("Fem::FemMeshObject"):
                obj.ViewObject.hide()
        self.Object.ViewObject.show()
        taskd.obj = vobj.Object
        FreeCADGui.Control.showDialog(taskd)
        return True
コード例 #9
0
    def createInletBoundary(self):
        self.inlet_boundary = CfdFluidBoundary.makeCfdFluidBoundary('inlet')
        bc_set = self.inlet_boundary.BoundarySettings
        bc_set['BoundaryType'] = 'inlet'
        bc_set['BoundarySubtype'] = 'uniformVelocity'
        bc_set['Ux'] = 1
        bc_set['Uy'] = 0
        bc_set['Uz'] = 0

        # Test addSelection and rebuild_list_references
        doc = FreeCAD.getDocument(self.__class__.__doc_name)
        obj = doc.getObject('inlet')
        vobj = obj.ViewObject
        import _TaskPanelCfdFluidBoundary
        physics_model, is_present = CfdTools.getPhysicsModel(self.analysis)
        material_objs = CfdTools.getMaterials(self.analysis)
        taskd = _TaskPanelCfdFluidBoundary.TaskPanelCfdFluidBoundary(obj, physics_model, material_objs)
        taskd.obj = vobj.Object
        taskd.selecting_references = True
        taskd.addSelection(doc.Name, doc.getObject(self.__class__.__part_name).Name, 'Face1')
        taskd.accept()
コード例 #10
0
    def __init__(self, obj):

        self.obj = obj
        analysis_obj = CfdTools.getParentAnalysisObject(obj)
        solver_obj = CfdTools.getSolver(analysis_obj)
        material_objs = CfdTools.getMaterials(analysis_obj)

        from CfdBoundaryWidget import CfdBoundaryWidget
        self.boundaryWidget = CfdBoundaryWidget(obj, None, solver_obj, material_objs)
        # fill the table in each variable tab, saved from the previous setup, existing case if BC name, done in each widget

        # geometry selection widget, only face is needed as boundary
        self.selectionWidget = FemSelectionWidgets.BoundarySelector()
        self.selectionWidget.setReferences(obj.References)
        # check references, has to be after initialisation of selectionWidget
        try:
            self.selectionWidget.has_equal_references_shape_types()
        except:
            RuntimeError('this function only works for FreeCAD 0.18')

        #the magic to have two widgets in one taskpanel
        self.form = [self.selectionWidget, self.boundaryWidget]
        if True:  # todo: check if solver is 'OpenFOAM'
            from CfdFoamTools import getVariableList
            solverSettings = CfdTools.getSolverSettings(solver_obj)  # physical_model
            variable_list = getVariableList(solverSettings)

            # build a parameterTabWidget, with each tab has a tableView
            # TODO: if boundary_settings is empty dict, default setting for each variable could be provided
            if not self.obj.FoamBoundarySettings:
                self.foam_boundary_conditions = {'U': {"key": "value"}, 'p':{"key": "value"}}  # {varible: bc_dict, ...}
            else:
                self.foam_boundary_conditions = self.obj.FoamBoundarySettings
            from FoamCaseBuilder.FoamBoundaryWidget import FoamBoundaryWidget
            self.foamWidget = FoamBoundaryWidget(self.foam_boundary_conditions)
            self.form.append(self.foamWidget)
コード例 #11
0
ファイル: _TaskPanelCfdZone.py プロジェクト: zhishang80/CfdOF
    def __init__(self, obj):
        FreeCADGui.Selection.clearSelection()
        self.sel_server = None
        self.obj = obj
        self.shapeListOrig = list(self.obj.shapeList)
        self.partNameList = list(self.obj.partNameList)
        self.partNameListOrig = list(self.obj.partNameList)

        self.form = FreeCADGui.PySideUic.loadUi(os.path.join(os.path.dirname(__file__), "TaskPanelCfdZone.ui"))

        self.form.selectReference.clicked.connect(self.selectReference)
        self.form.listWidget.itemPressed.connect(self.setSelection)
        self.form.pushButtonDelete.clicked.connect(self.deleteFeature)

        if self.obj.Name.startswith('PorousZone'):
            self.p = dict(self.obj.porousZoneProperties)
            self.form.stackedWidgetZoneType.setCurrentIndex(0)

            self.form.comboBoxCorrelation.currentIndexChanged.connect(self.comboBoxCorrelationChanged)

            self.form.e1x.textEdited.connect(self.e1Changed)
            self.form.e1y.textEdited.connect(self.e1Changed)
            self.form.e1z.textEdited.connect(self.e1Changed)
            self.form.e2x.textEdited.connect(self.e2Changed)
            self.form.e2y.textEdited.connect(self.e2Changed)
            self.form.e2z.textEdited.connect(self.e2Changed)
            self.form.e3x.textEdited.connect(self.e3Changed)
            self.form.e3y.textEdited.connect(self.e3Changed)
            self.form.e3z.textEdited.connect(self.e3Changed)
            self.form.e1x.editingFinished.connect(self.e1Done)
            self.form.e1y.editingFinished.connect(self.e1Done)
            self.form.e1z.editingFinished.connect(self.e1Done)
            self.form.e2x.editingFinished.connect(self.e2Done)
            self.form.e2y.editingFinished.connect(self.e2Done)
            self.form.e2z.editingFinished.connect(self.e2Done)
            self.form.e3x.editingFinished.connect(self.e3Done)
            self.form.e3y.editingFinished.connect(self.e3Done)
            self.form.e3z.editingFinished.connect(self.e3Done)
            self.lastEVectorChanged = 1
            self.lastLastEVectorChanged = 2

            self.form.comboAspectRatio.currentIndexChanged.connect(self.comboAspectRatioChanged)

            self.form.pushButtonDelete.setEnabled(False)

            self.form.comboBoxCorrelation.addItems(POROUS_CORRELATION_NAMES)
            self.form.comboAspectRatio.addItems(ASPECT_RATIO_NAMES)

        elif self.obj.Name.startswith('InitialisationZone'):
            self.p = dict(self.obj.initialisationZoneProperties)
            self.form.stackedWidgetZoneType.setCurrentIndex(1)

            self.form.comboFluid.currentIndexChanged.connect(self.comboFluidChanged)
            self.form.checkAlpha.stateChanged.connect(self.checkAlphaChanged)
            self.form.checkVelocity.stateChanged.connect(self.checkVelocityChanged)
            self.form.checkPressure.stateChanged.connect(self.checkPressureChanged)
            self.form.inputVolumeFraction.valueChanged.connect(self.inputVolumeFractionChanged)
            self.form.inputUx.valueChanged.connect(self.inputUxChanged)
            self.form.inputUy.valueChanged.connect(self.inputUyChanged)
            self.form.inputUz.valueChanged.connect(self.inputUzChanged)
            self.form.inputPressure.valueChanged.connect(self.inputPressureChanged)

            material_objs = CfdTools.getMaterials(CfdTools.getParentAnalysisObject(obj))
            self.form.frameVolumeFraction.setVisible(len(material_objs) > 1)
            if len(material_objs) > 1:
                fluid_names = [m.Label for m in material_objs]
                self.form.comboFluid.addItems(fluid_names[:-1])

        self.setInitialValues()
コード例 #12
0
    def __init__(self, obj):
        FreeCADGui.Selection.clearSelection()
        self.sel_server = None
        self.obj = obj

        self.ReferencesOrig = list(self.obj.References)

        self.form = FreeCADGui.PySideUic.loadUi(
            os.path.join(os.path.dirname(__file__), "TaskPanelCfdZone.ui"))

        self.form.framePorousZone.setVisible(False)
        self.form.frameInitialisationZone.setVisible(False)

        self.alphas = {}

        if self.obj.Name.startswith('PorousZone'):
            self.form.framePorousZone.setVisible(True)

            self.form.comboBoxCorrelation.currentIndexChanged.connect(
                self.updateUI)

            self.form.e1x.textEdited.connect(self.e1Changed)
            self.form.e1y.textEdited.connect(self.e1Changed)
            self.form.e1z.textEdited.connect(self.e1Changed)
            self.form.e2x.textEdited.connect(self.e2Changed)
            self.form.e2y.textEdited.connect(self.e2Changed)
            self.form.e2z.textEdited.connect(self.e2Changed)
            self.form.e3x.textEdited.connect(self.e3Changed)
            self.form.e3y.textEdited.connect(self.e3Changed)
            self.form.e3z.textEdited.connect(self.e3Changed)
            self.form.e1x.editingFinished.connect(self.e1Done)
            self.form.e1y.editingFinished.connect(self.e1Done)
            self.form.e1z.editingFinished.connect(self.e1Done)
            self.form.e2x.editingFinished.connect(self.e2Done)
            self.form.e2y.editingFinished.connect(self.e2Done)
            self.form.e2z.editingFinished.connect(self.e2Done)
            self.form.e3x.editingFinished.connect(self.e3Done)
            self.form.e3y.editingFinished.connect(self.e3Done)
            self.form.e3z.editingFinished.connect(self.e3Done)
            self.lastEVectorChanged = 1
            self.lastLastEVectorChanged = 2

            self.form.comboAspectRatio.currentIndexChanged.connect(
                self.comboAspectRatioChanged)

            self.form.comboBoxCorrelation.addItems(
                CfdZone.POROUS_CORRELATION_NAMES)
            self.form.comboAspectRatio.addItems(CfdZone.ASPECT_RATIO_NAMES)

        elif self.obj.Name.startswith('InitialisationZone'):
            self.form.frameInitialisationZone.setVisible(True)

            self.form.comboFluid.currentIndexChanged.connect(
                self.comboFluidChanged)
            self.form.checkAlpha.stateChanged.connect(self.updateUI)
            self.form.checkVelocity.stateChanged.connect(self.updateUI)
            self.form.checkPressure.stateChanged.connect(self.updateUI)
            self.form.inputVolumeFraction.valueChanged.connect(
                self.inputVolumeFractionChanged)

            material_objs = CfdTools.getMaterials(
                CfdTools.getParentAnalysisObject(obj))
            self.form.frameVolumeFraction.setVisible(len(material_objs) > 1)
            if len(material_objs) > 1:
                fluid_names = [m.Label for m in material_objs]
                self.form.comboFluid.addItems(fluid_names[:-1])

        self.load()
        self.comboFluidChanged()
        self.updateUI()

        # Face list selection panel - modifies obj.References passed to it
        self.faceSelector = CfdFaceSelectWidget.CfdFaceSelectWidget(
            self.form.faceSelectWidget, self.obj, False, True)