diff --git a/data/examples/FemCalculixCantilever2D.FCStd b/data/examples/FemCalculixCantilever2D.FCStd index 23d38ed91..5981b4e27 100644 Binary files a/data/examples/FemCalculixCantilever2D.FCStd and b/data/examples/FemCalculixCantilever2D.FCStd differ diff --git a/data/examples/FemCalculixCantilever3D.FCStd b/data/examples/FemCalculixCantilever3D.FCStd index 7fdd5dd34..ad7a9ebaf 100644 Binary files a/data/examples/FemCalculixCantilever3D.FCStd and b/data/examples/FemCalculixCantilever3D.FCStd differ diff --git a/src/Mod/Fem/FemTools.py b/src/Mod/Fem/FemTools.py index 1458f7c86..258829e5b 100644 --- a/src/Mod/Fem/FemTools.py +++ b/src/Mod/Fem/FemTools.py @@ -302,9 +302,9 @@ class FemTools(QtCore.QRunnable, QtCore.QObject): if not self.mesh: message += "No mesh object defined in the analysis\n" if self.mesh: - if self.mesh.FemMesh.VolumeCount == 0 and self.mesh.FemMesh.FaceCount > 0: + if self.mesh.FemMesh.VolumeCount == 0 and self.mesh.FemMesh.FaceCount > 0 and not self.shell_thicknesses: message += "FEM mesh has no volume elements, either define a shell thicknesses or provide a FEM mesh with volume elements.\n" - if self.mesh.FemMesh.VolumeCount == 0 and self.mesh.FemMesh.FaceCount == 0 and self.mesh.FemMesh.EdgeCount > 0: + if self.mesh.FemMesh.VolumeCount == 0 and self.mesh.FemMesh.FaceCount == 0 and self.mesh.FemMesh.EdgeCount > 0 and not self.beam_sections: message += "FEM mesh has no volume and no shell elements, either define a beam section or provide a FEM mesh with volume elements.\n" if self.mesh.FemMesh.VolumeCount == 0 and self.mesh.FemMesh.FaceCount == 0 and self.mesh.FemMesh.EdgeCount == 0: message += "FEM mesh has neither volume nor shell or edge elements. Provide a FEM mesh with elements!\n" diff --git a/src/Mod/Fem/_TaskPanelMechanicalMaterial.py b/src/Mod/Fem/_TaskPanelMechanicalMaterial.py index 2c1725afb..25faa9d5b 100644 --- a/src/Mod/Fem/_TaskPanelMechanicalMaterial.py +++ b/src/Mod/Fem/_TaskPanelMechanicalMaterial.py @@ -29,6 +29,7 @@ import FreeCAD import FreeCADGui from PySide import QtGui from PySide import QtCore +import Units class _TaskPanelMechanicalMaterial: @@ -81,6 +82,7 @@ class _TaskPanelMechanicalMaterial: self.rebuild_list_References() def accept(self): + # print(self.material) self.remove_active_sel_server() if self.has_equal_references_shape_types(): self.obj.Material = self.material @@ -123,8 +125,27 @@ class _TaskPanelMechanicalMaterial: import webbrowser webbrowser.open("http://matweb.com") + def check_material_keys(self): + if not 'YoungsModulus' in self.material: + print('YoungsModulus not found in material data of: ' + self.material['Name']) + self.material['YoungsModulus'] = '0 MPa' + if not 'Density' in self.material: + print('Density not found in material data of: ' + self.material['Name']) + self.material['Density'] = '0 kg/m^3' + if not 'PoissonRatio' in self.material: + print('PoissonRatio not found in material data of: ' + self.material['Name']) + self.material['PoissonRatio'] = '0' + if not 'ThermalConductivity' in self.material: + print('ThermalConductivity not found in material data of: ' + self.material['Name']) + self.material['ThermalConductivity'] = '0 W/m/K' + if not 'ThermalExpansionCoefficient' in self.material: + print('ThermalExpansionCoefficient not found in material data of: ' + self.material['Name']) + self.material['ThermalExpansionCoefficient'] = '0 um/m/K' + if not 'SpecificHeat' in self.material: + print('SpecificHeat not found in material data of: ' + self.material['Name']) + self.material['SpecificHeat'] = '0 J/kg/K' + def ym_changed(self, value): - import Units # FreeCADs standard unit for stress is kPa old_ym = Units.Quantity(self.material['YoungsModulus']).getValueAs("kPa") variation = 0.001 @@ -136,7 +157,6 @@ class _TaskPanelMechanicalMaterial: self.material = material def density_changed(self, value): - import Units # FreeCADs standard unit for density is kg/mm^3 old_density = Units.Quantity(self.material['Density']).getValueAs("kg/m^3") variation = 0.001 @@ -149,7 +169,6 @@ class _TaskPanelMechanicalMaterial: self.material = material def pr_changed(self, value): - import Units old_pr = Units.Quantity(self.material['PoissonRatio']) variation = 0.001 if value: @@ -160,7 +179,6 @@ class _TaskPanelMechanicalMaterial: self.material = material def tc_changed(self, value): - import Units old_tc = Units.Quantity(self.material['ThermalConductivity']).getValueAs("W/m/K") variation = 0.001 if value: @@ -172,7 +190,6 @@ class _TaskPanelMechanicalMaterial: self.material = material def tec_changed(self, value): - import Units old_tec = Units.Quantity(self.material['ThermalExpansionCoefficient']).getValueAs("um/m/K") variation = 0.001 if value: @@ -184,7 +201,6 @@ class _TaskPanelMechanicalMaterial: self.material = material def sh_changed(self, value): - import Units old_sh = Units.Quantity(self.material['SpecificHeat']).getValueAs("J/kg/K") variation = 0.001 if value: @@ -201,6 +217,7 @@ class _TaskPanelMechanicalMaterial: mat_file_path = self.form.cb_materials.itemData(index) self.material = self.materials[mat_file_path] self.form.cb_materials.setCurrentIndex(index) + self.check_material_keys() self.set_mat_params_in_combo_box(self.material) gen_mat_desc = "" if 'Description' in self.material: