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