Esempio n. 1
0
    def selectPredefine(self):
        index = self.form.PredefinedMaterialLibraryComboBox.currentIndex()

        mat_file_path = self.form.PredefinedMaterialLibraryComboBox.itemData(
            index)
        if mat_file_path:
            self.material = self.materials[mat_file_path]
            self.selecting_predefined = True
            try:
                for m in self.fields:
                    setQuantity(self.text_boxes[m], self.material.get(m, ''))
            finally:
                self.selecting_predefined = False
        self.form.fluidDescriptor.setText(self.material["Description"])
Esempio n. 2
0
    def load(self):
        """ fills the widgets """
        self.form.if_rellen.setValue(self.obj.RelativeLength)
        if not self.mesh_obj.MeshUtility == "gmsh":
            setQuantity(self.form.if_refinethick, self.obj.RefinementThickness)
            self.form.check_boundlayer.setChecked(self.obj.NumberLayers > 1)
            self.form.if_numlayer.setValue(self.obj.NumberLayers)
            self.form.if_expratio.setValue(self.obj.ExpansionRatio)
            setQuantity(self.form.if_firstlayerheight,
                        self.obj.FirstLayerHeight)

            self.form.if_edgerefinement.setValue(self.obj.RegionEdgeRefinement)
            if self.obj.Internal:
                self.form.volumeRefinementToggle.toggle()
Esempio n. 3
0
 def writeMesh(self):
     import importlib
     importlib.reload(CfdMeshTools)
     self.console_message_cart = ''
     self.Start = time.time()
     self.Timer.start()
     # Re-initialise CfdMeshTools with new parameters
     self.store()
     FreeCADGui.addModule("CfdMeshTools")
     FreeCADGui.addModule("CfdTools")
     FreeCADGui.doCommand(
         "FreeCAD.ActiveDocument." + self.mesh_obj.Name +
         ".Proxy.cart_mesh = "
         "CfdMeshTools.CfdMeshTools(FreeCAD.ActiveDocument." +
         self.mesh_obj.Name + ")")
     FreeCADGui.doCommand("cart_mesh = FreeCAD.ActiveDocument." +
                          self.mesh_obj.Name + ".Proxy.cart_mesh")
     cart_mesh = self.mesh_obj.Proxy.cart_mesh
     self.consoleMessage("Preparing meshing ...")
     try:
         QApplication.setOverrideCursor(Qt.WaitCursor)
         setQuantity(self.form.if_max, str(cart_mesh.getClmax()))
         print('Part to mesh:\n  Name: ' + cart_mesh.part_obj.Name +
               ', Label: ' + cart_mesh.part_obj.Label + ', ShapeType: ' +
               cart_mesh.part_obj.Shape.ShapeType)
         print('  CharacteristicLengthMax: ' + str(cart_mesh.clmax))
         analysis = CfdTools.getParentAnalysisObject(self.mesh_obj)
         FreeCADGui.doCommand(
             "cart_mesh.getFilePaths(CfdTools.getOutputPath(FreeCAD.ActiveDocument."
             + analysis.Name + "))")
         FreeCADGui.doCommand("cart_mesh.setupMeshCaseDir()")
         self.consoleMessage("Exporting mesh refinement data ...")
         FreeCADGui.doCommand("cart_mesh.processRefinements()"
                              )  # Writes stls so need file structure
         FreeCADGui.doCommand("cart_mesh.processDimension()")
         FreeCADGui.doCommand("cart_mesh.writeMeshCase()")
         self.consoleMessage("Exporting the part surfaces ...")
         FreeCADGui.doCommand("cart_mesh.writePartFile()")
         self.consoleMessage("Mesh case written to {}".format(
             self.cart_mesh.meshCaseDir))
     except Exception as ex:
         self.consoleMessage("Error " + type(ex).__name__ + ": " + str(ex),
                             '#FF0000')
         raise
     finally:
         self.Timer.stop()
         QApplication.restoreOverrideCursor()
     self.updateUI()
Esempio n. 4
0
 def createTextBoxesBasedOnPhysics(self):
     if self.physics_obj.Flow == 'Incompressible':
         self.fields = ['Density', 'DynamicViscosity']
     else:
         self.fields = [
             'MolarMass', 'Cp', 'SutherlandTemperature',
             'SutherlandRefTemperature', 'SutherlandRefViscosity'
         ]
     self.text_boxes = {}
     for name in self.fields:
         widget = FreeCADGui.UiLoader().createWidget("Gui::InputField")
         widget.setObjectName(name)
         widget.setProperty("format", "g")
         val = self.material.get(name, '0')
         widget.setProperty("unit", val)
         widget.setProperty("minimum", 0)
         widget.setProperty("singleStep", 0.1)
         self.form.propertiesLayout.addRow(name + ":", widget)
         self.text_boxes[name] = widget
         setQuantity(widget, val)
         widget.valueChanged.connect(self.manualEdit)
Esempio n. 5
0
    def load(self):
        """ Fills the widgets """
        setQuantity(self.form.if_max, self.mesh_obj.CharacteristicLengthMax)
        point_in_mesh = self.mesh_obj.PointInMesh.copy()
        setQuantity(self.form.if_pointInMeshX, point_in_mesh.get('x'))
        setQuantity(self.form.if_pointInMeshY, point_in_mesh.get('y'))
        setQuantity(self.form.if_pointInMeshZ, point_in_mesh.get('z'))
        self.form.if_cellsbetweenlevels.setValue(self.mesh_obj.CellsBetweenLevels)
        self.form.if_edgerefine.setValue(self.mesh_obj.EdgeRefinement)

        index_dimension = self.form.cb_dimension.findText(self.mesh_obj.ElementDimension)
        self.form.cb_dimension.setCurrentIndex(index_dimension)
        index_utility = self.form.cb_utility.findText(self.mesh_obj.MeshUtility)
        self.form.cb_utility.setCurrentIndex(index_utility)
Esempio n. 6
0
 def searchPointInMesh(self):
     print("Searching for an internal vector point ...")
     # Apply latest mesh size
     self.store()
     pointCheck = self.cart_mesh.automaticInsidePointDetect()
     iMPx, iMPy, iMPz = pointCheck
     setQuantity(self.form.if_pointInMeshX, str(iMPx) + "mm")
     setQuantity(self.form.if_pointInMeshY, str(iMPy) + "mm")
     setQuantity(self.form.if_pointInMeshZ, str(iMPz) + "mm")
    def load(self):
        if self.obj.Time == 'Steady':
            self.form.radioButtonSteady.toggle()
        elif self.obj.Time == 'Transient':
            self.form.radioButtonTransient.toggle()

        if self.obj.Phase == 'Single':
            self.form.radioButtonSinglePhase.toggle()
        elif self.obj.Phase == 'FreeSurface':
            self.form.radioButtonFreeSurface.toggle()
        if self.obj.Flow == 'Incompressible':
            self.form.radioButtonIncompressible.toggle()
        elif self.obj.Flow == 'Compressible':
            self.form.radioButtonCompressible.toggle()
            self.form.checkBoxHighMach.setChecked(False)
        elif self.obj.Flow == 'HighMachCompressible':
            self.form.radioButtonCompressible.toggle()
            self.form.checkBoxHighMach.setChecked(True)

        if self.obj.Turbulence == 'Inviscid':
            self.form.viscousCheckBox.setChecked(False)
            self.form.radioButtonLaminar.toggle()
        if self.obj.Turbulence == 'Laminar':
            self.form.viscousCheckBox.setChecked(True)
            self.form.radioButtonLaminar.toggle()
        elif self.obj.Turbulence == 'RANS':
            self.form.viscousCheckBox.setChecked(True)
            self.form.radioButtonRANS.toggle()
        ti = CfdTools.indexOrDefault(RANS_MODELS, self.obj.TurbulenceModel, 0)
        self.form.turbulenceComboBox.setCurrentIndex(ti)

        setQuantity(self.form.gx, self.obj.gx)
        setQuantity(self.form.gy, self.obj.gy)
        setQuantity(self.form.gz, self.obj.gz)

        self.updateUI()
Esempio n. 8
0
    def load(self):
        potential_foam = self.obj.PotentialFoam
        use_inlet_UP = self.obj.UseInletUPValues
        if potential_foam:
            self.form.radioButtonPotentialFlow.toggle()
        elif use_inlet_UP:
            self.form.radioButtonUseInletValuesUP.toggle()
        else:
            self.form.radioButtonSpecifyValues.toggle()

        setQuantity(self.form.Ux, self.obj.Ux)
        setQuantity(self.form.Uy, self.obj.Uy)
        setQuantity(self.form.Uz, self.obj.Uz)
        setQuantity(self.form.pressure, self.obj.Pressure)

        # Add volume fraction fields
        self.alphas = self.obj.VolumeFractions
        if self.physicsModel.Phase != 'Single':
            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()

        use_inlet_turb = self.obj.UseInletTurbulenceValues
        self.form.checkUseInletValues.setChecked(use_inlet_turb)
        setQuantity(self.form.inputk, self.obj.k)
        setQuantity(self.form.inputOmega, self.obj.omega)

        use_inlet_temp = self.obj.UseInletTemperatureValues
        self.form.checkUseInletValuesThermal.setChecked(use_inlet_temp)
        setQuantity(self.form.inputTemperature, self.obj.Temperature)

        # Add any inlets to the list
        for b in self.boundaries:
            if b.BoundaryType in ['inlet', 'open']:
                self.form.comboInlets.addItem(b.Label, b.Name)
        self.form.comboInlets.setCurrentIndex(self.form.comboInlets.findData(self.obj.Inlet))

        self.updateUi()
Esempio n. 9
0
 def comboFluidChanged(self, index):
     setQuantity(self.form.inputVolumeFraction, self.alphas.get(self.getMaterialName(index), '0.0'))
Esempio n. 10
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 comboFluidChanged(self):
     alphaName = self.form.comboFluid.currentText()
     if alphaName in self.alphas:
         setQuantity(self.form.inputVolumeFraction,
                     self.alphas.get(alphaName, 0.0))
 def comboAspectRatioChanged(self):
     i = self.form.comboAspectRatio.currentIndex()
     setQuantity(self.form.inputAspectRatio, CfdZone.ASPECT_RATIOS[i])
     self.form.comboAspectRatio.setToolTip(CfdZone.ASPECT_RATIO_TIPS[i])
    def eDone(self, index):
        e = [[
            self.form.e1x.property('quantity').getValueAs('1').Value,
            self.form.e1y.property('quantity').getValueAs('1').Value,
            self.form.e1z.property('quantity').getValueAs('1').Value
        ],
             [
                 self.form.e2x.property('quantity').getValueAs('1').Value,
                 self.form.e2y.property('quantity').getValueAs('1').Value,
                 self.form.e2z.property('quantity').getValueAs('1').Value
             ],
             [
                 self.form.e3x.property('quantity').getValueAs('1').Value,
                 self.form.e3y.property('quantity').getValueAs('1').Value,
                 self.form.e3z.property('quantity').getValueAs('1').Value
             ]]
        for i in range(3):
            e[i] = CfdTools.normalise(e[i])

        # Keep this one fixed. Make the other two orthogonal. The previous one edited gets to stay in its plane; the
        # one edited longest ago just gets recomputed
        if self.lastEVectorChanged == index:
            prevIndex = self.lastLastEVectorChanged
        else:
            prevIndex = self.lastEVectorChanged
        indexplus = (index + 1) % 3
        indexminus = (index - 1) % 3
        if indexplus == prevIndex:  # indexminus must be the one changed longest ago
            e[indexminus] = numpy.cross(e[index], e[indexplus])
            e[indexplus] = numpy.cross(e[indexminus], e[index])
        else:
            e[indexplus] = numpy.cross(e[indexminus], e[index])
            e[indexminus] = numpy.cross(e[index], e[indexplus])
        e[indexplus] = CfdTools.normalise(e[indexplus])
        e[indexminus] = CfdTools.normalise(e[indexminus])

        setQuantity(self.form.e1x, str(e[0][0]))
        setQuantity(self.form.e1y, str(e[0][1]))
        setQuantity(self.form.e1z, str(e[0][2]))
        setQuantity(self.form.e2x, str(e[1][0]))
        setQuantity(self.form.e2y, str(e[1][1]))
        setQuantity(self.form.e2z, str(e[1][2]))
        setQuantity(self.form.e3x, str(e[2][0]))
        setQuantity(self.form.e3y, str(e[2][1]))
        setQuantity(self.form.e3z, str(e[2][2]))
    def load(self):
        if self.obj.Name.startswith('PorousZone'):
            ci = indexOrDefault(CfdZone.POROUS_CORRELATIONS,
                                self.obj.PorousCorrelation, 0)
            self.form.comboBoxCorrelation.setCurrentIndex(ci)
            setQuantity(self.form.dx, self.obj.D1)
            setQuantity(self.form.dy, self.obj.D2)
            setQuantity(self.form.dz, self.obj.D3)
            setQuantity(self.form.fx, self.obj.F1)
            setQuantity(self.form.fy, self.obj.F2)
            setQuantity(self.form.fz, self.obj.F3)
            e1 = self.obj.e1
            setQuantity(self.form.e1x, str(e1[0]))
            setQuantity(self.form.e1y, str(e1[1]))
            setQuantity(self.form.e1z, str(e1[2]))
            e2 = self.obj.e2
            setQuantity(self.form.e2x, str(e2[0]))
            setQuantity(self.form.e2y, str(e2[1]))
            setQuantity(self.form.e2z, str(e2[2]))
            e3 = self.obj.e3
            setQuantity(self.form.e3x, str(e3[0]))
            setQuantity(self.form.e3y, str(e3[1]))
            setQuantity(self.form.e3z, str(e3[2]))
            setQuantity(self.form.inputOuterDiameter, self.obj.OuterDiameter)
            tubeAxis = self.obj.TubeAxis
            setQuantity(self.form.inputTubeAxisX, str(tubeAxis[0]))
            setQuantity(self.form.inputTubeAxisY, str(tubeAxis[1]))
            setQuantity(self.form.inputTubeAxisZ, str(tubeAxis[2]))
            setQuantity(self.form.inputTubeSpacing, self.obj.TubeSpacing)
            normalAxis = self.obj.SpacingDirection
            setQuantity(self.form.inputBundleLayerNormalX, str(normalAxis[0]))
            setQuantity(self.form.inputBundleLayerNormalY, str(normalAxis[1]))
            setQuantity(self.form.inputBundleLayerNormalZ, str(normalAxis[2]))
            setQuantity(self.form.inputAspectRatio, self.obj.AspectRatio)
            setQuantity(self.form.inputVelocityEstimate,
                        self.obj.VelocityEstimate)

        elif self.obj.Name.startswith('InitialisationZone'):
            self.form.checkVelocity.setChecked(self.obj.VelocitySpecified)
            setQuantity(self.form.inputUx, self.obj.Ux)
            setQuantity(self.form.inputUy, self.obj.Uy)
            setQuantity(self.form.inputUz, self.obj.Uz)
            self.form.checkPressure.setChecked(self.obj.PressureSpecified)
            setQuantity(self.form.inputPressure, self.obj.Pressure)
            self.form.checkAlpha.setChecked(self.obj.VolumeFractionSpecified)
            self.alphas = self.obj.VolumeFractions
    def load(self):
        potential_u = self.obj.PotentialFlow
        potential_p = self.obj.PotentialFlowP
        use_inlet_U = self.obj.UseInletUValues
        use_outlet_P = self.obj.UseOutletPValue
        if potential_u:
            self.form.radioButtonPotentialFlowU.toggle()
        elif use_inlet_U:
            self.form.radioButtonUseInletValuesU.toggle()
        else:
            self.form.radioButtonSpecifyValuesU.toggle()
        if potential_p:
            self.form.radioButtonPotentialFlowP.toggle()
        elif use_outlet_P:
            self.form.radioButtonUseInletValuesP.toggle()
        else:
            self.form.radioButtonSpecifyValuesP.toggle()

        setQuantity(self.form.Ux, self.obj.Ux)
        setQuantity(self.form.Uy, self.obj.Uy)
        setQuantity(self.form.Uz, self.obj.Uz)
        setQuantity(self.form.pressure, self.obj.Pressure)

        # Add volume fraction fields
        self.alphas = self.obj.VolumeFractions
        if self.physicsModel.Phase != 'Single':
            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()

        use_inlet_turb = self.obj.UseInletTurbulenceValues
        self.form.checkUseInletValuesTurb.setChecked(use_inlet_turb)
        setQuantity(self.form.inputk, self.obj.k)
        setQuantity(self.form.inputOmega, self.obj.omega)

        use_inlet_temp = self.obj.UseInletTemperatureValue
        self.form.checkUseInletValuesThermal.setChecked(use_inlet_temp)
        setQuantity(self.form.inputTemperature, self.obj.Temperature)

        # Add any inlets to the lists
        for b in self.boundaries:
            if b.BoundaryType in ['inlet', 'open']:
                self.form.comboBoundaryU.addItem(b.Label, b.Name)
                self.form.comboBoundaryT.addItem(b.Label, b.Name)
                self.form.comboBoundaryTurb.addItem(b.Label, b.Name)
            if b.BoundaryType in ['outlet', 'open']:
                self.form.comboBoundaryP.addItem(b.Label, b.Name)
        if self.obj.BoundaryU is not None:
            self.form.comboBoundaryU.setCurrentIndex(
                self.form.comboBoundaryU.findData(self.obj.BoundaryU.Name))
        if self.obj.BoundaryP is not None:
            self.form.comboBoundaryP.setCurrentIndex(
                self.form.comboBoundaryP.findData(self.obj.BoundaryP.Name))
        if self.obj.BoundaryT is not None:
            self.form.comboBoundaryT.setCurrentIndex(
                self.form.comboBoundaryT.findData(self.obj.BoundaryT.Name))
        if self.obj.BoundaryTurb is not None:
            self.form.comboBoundaryTurb.setCurrentIndex(
                self.form.comboBoundaryTurb.findData(
                    self.obj.BoundaryTurb.Name))

        self.updateUi()