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()
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)
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')
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)