예제 #1
0
    def __init__(self, obj):
        FreeCADGui.Selection.clearSelection()
        self.sel_server = None
        self.obj = obj
        self.mesh_obj = self.getMeshObject()

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

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

        # Face list selection panel - modifies obj.References passed to it
        self.faceSelector = CfdFaceSelectWidget.CfdFaceSelectWidget(
            self.form.referenceSelectWidget, self.obj, True, False,
            self.mesh_obj.MeshUtility == 'gmsh',
            self.mesh_obj.MeshUtility == 'gmsh')

        self.solidSelector = CfdFaceSelectWidget.CfdFaceSelectWidget(
            self.form.volReferenceSelectWidget, self.obj, False, True)

        self.form.baffle_check.stateChanged.connect(self.updateUI)

        self.form.check_boundlayer.stateChanged.connect(self.updateUI)

        tool_tip_mes = "Cell size relative to base cell size"
        self.form.if_rellen.setToolTip(tool_tip_mes)
        self.form.label_rellen.setToolTip(tool_tip_mes)

        self.load()

        self.form.surfaceRefinementToggle.toggled.connect(self.changeInternal)
        self.form.volumeRefinementToggle.toggled.connect(self.changeInternal)

        self.form.if_refinethick.setToolTip(
            "Distance the refinement region extends from the reference "
            "surface")
        self.form.if_numlayer.setToolTip(
            "Number of boundary layers if the reference surface is an external or "
            "mesh patch")
        self.form.if_expratio.setToolTip(
            "Expansion ratio of boundary layers (limited to be greater than 1.0 and "
            "smaller than 1.2)")
        self.form.if_firstlayerheight.setToolTip(
            "Maximum first cell height (ignored if set to 0.0)")
        self.form.if_edgerefinement.setToolTip(
            "Number of edge or feature refinement levels")
        self.form.baffle_check.setToolTip("Create a zero thickness baffle")

        self.updateUI()
예제 #2
0
    def __init__(self, obj):
        FreeCADGui.Selection.clearSelection()
        self.sel_server = None
        self.obj = obj
        self.mesh_obj = self.getMeshObject()

        self.form = FreeCADGui.PySideUic.loadUi(
            os.path.join(os.path.dirname(__file__),
                         "TaskPanelCfdMeshRegion.ui"))
        self.form.if_gmsh_rellen.valueChanged.connect(self.gmsh_rellen_changed)
        self.form.if_rellen.valueChanged.connect(self.rellen_changed)

        self.form.if_refinethick.valueChanged.connect(self.refinethick_changed)
        self.form.if_numlayer.valueChanged.connect(self.numlayer_changed)
        self.form.if_expratio.valueChanged.connect(self.expratio_changed)
        self.form.if_firstlayerheight.valueChanged.connect(
            self.firstlayerheight_changed)

        self.form.if_refinelevel.valueChanged.connect(self.refinelevel_changed)
        self.form.if_edgerefinement.valueChanged.connect(
            self.edgerefinement_changed)

        self.form.refinement_frame.setVisible(False)
        self.form.boundlayer_frame.setVisible(False)
        self.form.check_boundlayer.stateChanged.connect(
            self.boundary_layer_state_changed)

        tool_tip_mes = "Cell size relative to base cell size."
        self.form.if_gmsh_rellen.setToolTip(tool_tip_mes)
        self.form.if_rellen.setToolTip(tool_tip_mes)
        self.form.label_rellen.setToolTip(tool_tip_mes)
        self.get_meshregion_props()

        #for backward compatibility with pre-Internal refinementRegions
        try:
            self.obj.Internal
        except AttributeError:
            self.obj.addProperty("App::PropertyBool", "Internal",
                                 "MeshRegionProperties")
            self.obj.Internal = False
            self.obj.addProperty("App::PropertyPythonObject", "InternalRegion")
            self.obj.InternalRegion = {
                "Type": "Box",
                "Center": {
                    "x": 0,
                    "y": 0,
                    "z": 0
                },
                "BoxLengths": {
                    "x": 1e-3,
                    "y": 1e-3,
                    "z": 1e-3
                },
                "SphereRadius": 1e-3
            }

        self.InternalOrig = self.obj.Internal
        self.InternalRegionOrig = self.obj.InternalRegion.copy()

        self.validTypesOfInternalPrimitives = ["Box", "Sphere"]

        self.form.internalVolumePrimitiveSelection.addItems(
            self.validTypesOfInternalPrimitives)
        self.changePrimitiveType()

        self.form.internalVolumePrimitiveSelection.currentIndexChanged.connect(
            self.internalTypeChanged)
        self.form.surfaceRefinementToggle.toggled.connect(
            self.change_internal_surface)
        self.form.volumeRefinementToggle.toggled.connect(
            self.change_internal_surface)

        #Adding the following changed events to allow for real time update of the internal shape
        self.form.radius.textChanged.connect(self.radiusChanged)
        self.form.xCenter.valueChanged.connect(self.xCenterChanged)
        self.form.yCenter.textChanged.connect(self.yCenterChanged)
        self.form.zCenter.textChanged.connect(self.zCenterChanged)
        self.form.xLength.textChanged.connect(self.xLengthChanged)
        self.form.yLength.textChanged.connect(self.yLengthChanged)
        self.form.zLength.textChanged.connect(self.zLengthChanged)

        if self.mesh_obj.Proxy.Type == 'Fem::FemMeshGmsh':
            self.form.cartesianInternalVolumeFrame.setVisible(False)
            self.form.surfaceOrInernalVolume.setVisible(False)
            self.form.gmsh_frame.setVisible(True)
            self.form.cf_frame.setVisible(False)
            self.form.snappy_frame.setVisible(False)
        elif self.mesh_obj.Proxy.Type == 'CfdMeshCart':
            self.set_internal_surface()

        self.form.if_refinethick.setToolTip(
            "Thickness or distance of the refinement region from the reference "
            "surface.")
        self.form.if_numlayer.setToolTip(
            "Number of boundary layers if the reference surface is an external or "
            "mesh patch.")
        self.form.if_expratio.setToolTip(
            "Expansion ratio of boundary layers (limited to be greater than 1.0 and "
            "smaller than 1.2).")
        self.form.if_firstlayerheight.setToolTip(
            "Maximum first cell height (optional value and neglected if set "
            "to 0.0).")
        self.form.if_refinelevel.setToolTip(
            "Number of refinement levels relative to the base cell size")
        self.form.if_edgerefinement.setToolTip(
            "Number of edge or feature refinement levels.")
        self.form.baffle_check.setToolTip("Create a zero thickness baffle.")

        self.initialiseUponReload()

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

        # Face list selection panel - modifies obj.References passed to it
        self.faceSelector = CfdFaceSelectWidget.CfdFaceSelectWidget(
            self.form.referenceSelectWidget, self.obj,
            self.mesh_obj.Proxy.Type != 'Fem::FemMeshGmsh')
    def __init__(self, obj, physics_model, material_objs):
        self.selecting_direction = False
        self.obj = obj

        self.physics_model = physics_model
        self.turbModel = (physics_model.TurbulenceModel
                          if physics_model.Turbulence == 'RANS'
                          or physics_model.Turbulence == 'LES' else None)
        self.material_objs = material_objs

        self.BoundarySettings = self.obj.BoundarySettings.copy()

        self.ReferencesOrig = list(self.obj.References)
        self.BoundarySettingsOrig = self.obj.BoundarySettings.copy()

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

        self.form.comboBoundaryType.currentIndexChanged.connect(
            self.comboBoundaryTypeChanged)
        self.form.comboSubtype.currentIndexChanged.connect(
            self.comboSubtypeChanged)
        self.form.radioButtonCart.toggled.connect(
            self.radioButtonVelocityToggled)
        self.form.radioButtonMagNormal.toggled.connect(
            self.radioButtonVelocityToggled)
        self.form.inputCartX.valueChanged.connect(self.inputCartXChanged)
        self.form.inputCartY.valueChanged.connect(self.inputCartYChanged)
        self.form.inputCartZ.valueChanged.connect(self.inputCartZChanged)
        self.form.inputVelocityMag.valueChanged.connect(
            self.inputVelocityMagChanged)
        self.form.lineDirection.textChanged.connect(self.lineDirectionChanged)
        self.form.buttonDirection.clicked.connect(self.buttonDirectionClicked)
        self.form.buttonDirection.setCheckable(True)
        self.form.checkReverse.toggled.connect(self.checkReverseToggled)
        self.form.inputPressure.valueChanged.connect(self.inputPressureChanged)
        self.form.inputSlipRatio.valueChanged.connect(
            self.inputSlipRatioChanged)
        self.form.inputVolFlowRate.valueChanged.connect(
            self.inputVolFlowRateChanged)
        self.form.inputMassFlowRate.valueChanged.connect(
            self.inputMassFlowRateChanged)
        self.form.buttonGroupPorous.buttonClicked.connect(
            self.buttonGroupPorousClicked)
        # Annoyingly can't find a way to set ID's for button group from .ui file...
        self.form.buttonGroupPorous.setId(self.form.radioButtonPorousCoeff, 0)
        self.form.buttonGroupPorous.setId(self.form.radioButtonPorousScreen, 1)
        self.form.inputPressureDropCoeff.valueChanged.connect(
            self.inputPressureDropCoeffChanged)
        self.form.inputWireDiameter.valueChanged.connect(
            self.inputWireDiameterChanged)
        self.form.inputSpacing.valueChanged.connect(self.inputSpacingChanged)

        self.form.inputTemperature.valueChanged.connect(
            self.inputTemperatureChanged)
        self.form.inputHeatFlux.valueChanged.connect(self.inputHeatFluxChanged)
        self.form.inputHeatTransferCoeff.valueChanged.connect(
            self.inputHeatTransferCoeffChanged)

        self.form.comboTurbulenceSpecification.currentIndexChanged.connect(
            self.comboTurbulenceSpecificationChanged)
        self.form.inputKineticEnergy.valueChanged.connect(
            self.inputKineticEnergyChanged)
        self.form.inputSpecificDissipationRate.valueChanged.connect(
            self.inputSpecificDissipationRateChanged)
        self.form.inputIntensity.valueChanged.connect(
            self.inputIntensityChanged)
        self.form.inputLengthScale.valueChanged.connect(
            self.inputLengthScaleChanged)

        self.form.comboFluid.currentIndexChanged.connect(
            self.comboFluidChanged)
        self.form.inputVolumeFraction.valueChanged.connect(
            self.inputVolumeFractionChanged)

        self.form.comboThermalBoundaryType.currentIndexChanged.connect(
            self.comboThermalBoundaryTypeChanged)

        self.setInitialValues()

        # Face list selection panel - modifies obj.References passed to it
        self.faceSelector = CfdFaceSelectWidget.CfdFaceSelectWidget(
            self.form.faceSelectWidget, self.obj, True)
예제 #4
0
    def __init__(self, obj):
        FreeCADGui.Selection.clearSelection()
        self.sel_server = None
        self.obj = obj
        self.mesh_obj = self.getMeshObject()

        self.form = FreeCADGui.PySideUic.loadUi(
            os.path.join(os.path.dirname(__file__),
                         "TaskPanelCfdMeshRegion.ui"))
        self.form.if_gmsh_rellen.valueChanged.connect(self.gmsh_rellen_changed)
        self.form.if_rellen.valueChanged.connect(self.rellen_changed)

        self.form.if_refinethick.valueChanged.connect(self.refinethick_changed)
        self.form.if_numlayer.valueChanged.connect(self.numlayer_changed)
        self.form.if_expratio.valueChanged.connect(self.expratio_changed)
        self.form.if_firstlayerheight.valueChanged.connect(
            self.firstlayerheight_changed)

        self.form.if_refinelevel.valueChanged.connect(self.refinelevel_changed)
        self.form.if_edgerefinement.valueChanged.connect(
            self.edgerefinement_changed)

        self.form.refinement_frame.setVisible(False)
        self.form.boundlayer_frame.setVisible(False)
        self.form.check_boundlayer.stateChanged.connect(
            self.boundary_layer_state_changed)

        tool_tip_mes = "Cell size relative to base cell size."
        self.form.if_gmsh_rellen.setToolTip(tool_tip_mes)
        self.form.if_rellen.setToolTip(tool_tip_mes)
        self.form.label_rellen.setToolTip(tool_tip_mes)
        self.get_meshregion_props()

        if self.mesh_obj.Proxy.Type == 'FemMeshGmsh':
            self.form.gmsh_frame.setVisible(True)
            self.form.cf_frame.setVisible(False)
            self.form.snappy_frame.setVisible(False)
        elif self.mesh_obj.Proxy.Type == 'CfdMeshCart' and self.mesh_obj.MeshUtility == 'cfMesh':
            self.form.gmsh_frame.setVisible(False)
            self.form.cf_frame.setVisible(True)
            self.form.snappy_frame.setVisible(False)
            self.form.refinement_frame.setVisible(True)
        elif self.mesh_obj.Proxy.Type == 'CfdMeshCart' and self.mesh_obj.MeshUtility == 'snappyHexMesh':
            self.form.gmsh_frame.setVisible(False)
            self.form.cf_frame.setVisible(False)
            self.form.snappy_frame.setVisible(True)

        self.form.if_refinethick.setToolTip(
            "Thickness or distance of the refinement region from the reference "
            "surface.")
        self.form.if_numlayer.setToolTip(
            "Number of boundary layers if the reference surface is an external or "
            "mesh patch.")
        self.form.if_expratio.setToolTip(
            "Expansion ratio of boundary layers (limited to be greater than 1.0 and "
            "smaller than 1.2).")
        self.form.if_firstlayerheight.setToolTip(
            "Maximum first cell height (optional value and neglected if set "
            "to 0.0).")
        self.form.if_refinelevel.setToolTip(
            "Number of refinement levels relative to the base cell size")
        self.form.if_edgerefinement.setToolTip(
            "Number of edge or feature refinement levels.")
        self.form.baffle_check.setToolTip("Create a zero thickness baffle.")

        self.initialiseUponReload()

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

        # Face list selection panel - modifies obj.References passed to it
        self.faceSelector = CfdFaceSelectWidget.CfdFaceSelectWidget(
            self.form.referenceSelectWidget, self.obj,
            self.mesh_obj.Proxy.Type != 'FemMeshGmsh')
예제 #5
0
    def __init__(self, obj, physics_model, material_objs):
        self.selecting_direction = False
        self.obj = obj

        self.physics_model = physics_model
        self.turbModel = (physics_model.TurbulenceModel
                          if physics_model.Turbulence == 'RANS'
                          or physics_model.Turbulence == 'LES' else None)
        self.material_objs = material_objs

        # Store values which are changed on the fly for visual update
        self.ReferencesOrig = list(self.obj.References)
        self.BoundaryTypeOrig = str(self.obj.BoundaryType)
        self.BoundarySubTypeOrig = str(self.obj.BoundarySubType)

        self.alphas = {}

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

        self.form.buttonDirection.setCheckable(True)
        # Annoyingly can't find a way to set ID's for button group from .ui file...
        self.form.buttonGroupPorous.setId(self.form.radioButtonPorousCoeff, 0)
        self.form.buttonGroupPorous.setId(self.form.radioButtonPorousScreen, 1)

        self.form.comboBoundaryType.addItems(CfdFluidBoundary.BOUNDARY_NAMES)
        bi = indexOrDefault(CfdFluidBoundary.BOUNDARY_TYPES,
                            self.obj.BoundaryType, 0)
        self.form.comboBoundaryType.currentIndexChanged.connect(
            self.comboBoundaryTypeChanged)
        self.form.comboBoundaryType.setCurrentIndex(bi)
        self.comboBoundaryTypeChanged()

        si = indexOrDefault(CfdFluidBoundary.SUBTYPES[bi],
                            self.obj.BoundarySubType, 0)
        self.form.comboSubtype.currentIndexChanged.connect(
            self.comboSubtypeChanged)
        self.form.comboSubtype.setCurrentIndex(si)
        self.comboSubtypeChanged()

        cart = self.obj.VelocityIsCartesian
        self.form.radioButtonCart.setChecked(cart)
        self.form.radioButtonMagNormal.setChecked(not cart)
        setQuantity(self.form.inputCartX, self.obj.Ux)
        setQuantity(self.form.inputCartY, self.obj.Uy)
        setQuantity(self.form.inputCartZ, self.obj.Uz)
        setQuantity(self.form.inputVelocityMag, self.obj.VelocityMag)
        self.form.lineDirection.setText(self.obj.DirectionFace)
        self.form.checkReverse.setChecked(self.obj.ReverseNormal)
        setQuantity(self.form.inputPressure, self.obj.Pressure)
        setQuantity(self.form.inputSlipRatio, self.obj.SlipRatio)
        setQuantity(self.form.inputVolFlowRate, self.obj.VolFlowRate)
        setQuantity(self.form.inputMassFlowRate, self.obj.MassFlowRate)

        buttonId = indexOrDefault(CfdFluidBoundary.POROUS_METHODS,
                                  self.obj.PorousBaffleMethod, 0)
        selButton = self.form.buttonGroupPorous.button(buttonId)
        if selButton is not None:
            selButton.setChecked(True)
        setQuantity(self.form.inputPressureDropCoeff,
                    self.obj.PressureDropCoeff)
        setQuantity(self.form.inputWireDiameter, self.obj.ScreenWireDiameter)
        setQuantity(self.form.inputSpacing, self.obj.ScreenSpacing)

        self.form.comboThermalBoundaryType.addItems(
            CfdFluidBoundary.THERMAL_BOUNDARY_NAMES)
        thi = indexOrDefault(CfdFluidBoundary.THERMAL_BOUNDARY_TYPES,
                             self.obj.ThermalBoundaryType, 0)
        self.form.comboThermalBoundaryType.setCurrentIndex(thi)
        setQuantity(self.form.inputTemperature, self.obj.Temperature)
        setQuantity(self.form.inputHeatFlux, self.obj.HeatFlux)
        setQuantity(self.form.inputHeatTransferCoeff,
                    self.obj.HeatTransferCoeff)

        if self.turbModel is not None:
            self.form.comboTurbulenceSpecification.addItems(
                CfdFluidBoundary.TURBULENT_INLET_SPEC[self.turbModel][0])
            ti = indexOrDefault(
                CfdFluidBoundary.TURBULENT_INLET_SPEC[self.turbModel][1],
                self.obj.TurbulenceInletSpecification, 0)
            self.form.comboTurbulenceSpecification.setCurrentIndex(ti)

        # Add volume fraction fields
        self.alphas = self.obj.VolumeFractions
        if len(self.material_objs) > 1:
            mat_names = []
            for m in self.material_objs:
                mat_names.append(m.Label)
            self.form.comboFluid.clear()
            self.form.comboFluid.addItems(mat_names[:-1])
            self.comboFluidChanged(self.form.comboFluid.currentIndex())
        else:
            self.form.comboFluid.clear()

        setQuantity(self.form.inputKineticEnergy,
                    self.obj.TurbulentKineticEnergy)
        setQuantity(self.form.inputSpecificDissipationRate,
                    self.obj.SpecificDissipationRate)
        setQuantity(self.form.inputIntensity, self.obj.TurbulenceIntensity)
        setQuantity(self.form.inputLengthScale, self.obj.TurbulenceLengthScale)

        self.form.radioButtonCart.toggled.connect(self.updateUI)
        self.form.radioButtonMagNormal.toggled.connect(self.updateUI)
        self.form.lineDirection.textChanged.connect(self.lineDirectionChanged)
        self.form.buttonDirection.clicked.connect(self.buttonDirectionClicked)
        self.form.buttonGroupPorous.buttonClicked.connect(self.updateUI)
        self.form.comboTurbulenceSpecification.currentIndexChanged.connect(
            self.updateUI)
        self.form.comboFluid.currentIndexChanged.connect(
            self.comboFluidChanged)
        self.form.inputVolumeFraction.valueChanged.connect(
            self.inputVolumeFractionChanged)
        self.form.comboThermalBoundaryType.currentIndexChanged.connect(
            self.updateUI)

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

        self.updateUI()
    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)