diff --git a/src/Mod/Fem/Gui/Resources/ui/Material.ui b/src/Mod/Fem/Gui/Resources/ui/Material.ui index 41bdf99b9a..60913293b5 100755 --- a/src/Mod/Fem/Gui/Resources/ui/Material.ui +++ b/src/Mod/Fem/Gui/Resources/ui/Material.ui @@ -338,13 +338,53 @@ + + + Expansion Reference Temperature: + + + + + + + false + + + + 0 + 0 + + + + + 80 + + + + Qt::AlignLeft|Qt::AlignTrailing|Qt::AlignVCenter + + + 1.000000000000000 + + + 100000000000.00000000000000 + + + K + + + 0.000000000000000 + + + + Specific Heat Capacity: - + false @@ -413,150 +453,4 @@ - - - chbu_allow_edit - toggled(bool) - qsb_density - setEnabled(bool) - - - 272 - 162 - - - 250 - 364 - - - - - chbu_allow_edit - toggled(bool) - qsb_young_modulus - setEnabled(bool) - - - 272 - 162 - - - 242 - 425 - - - - - chbu_allow_edit - toggled(bool) - qsb_poisson_ratio - setEnabled(bool) - - - 272 - 162 - - - 242 - 451 - - - - - chbu_allow_edit - toggled(bool) - qsb_kinematic_viscosity - setEnabled(bool) - - - 272 - 162 - - - 247 - 512 - - - - - chbu_allow_edit - toggled(bool) - qsb_thermal_conductivity - setEnabled(bool) - - - 272 - 162 - - - 254 - 573 - - - - - chbu_allow_edit - toggled(bool) - qsb_expansion_coefficient - setEnabled(bool) - - - 272 - 162 - - - 254 - 599 - - - - - chbu_allow_edit - toggled(bool) - qsb_specific_heat - setEnabled(bool) - - - 272 - 162 - - - 254 - 625 - - - - - chbu_allow_edit - toggled(bool) - label_vol_expansion_coefficient - setEnabled(bool) - - - 272 - 162 - - - 67 - 651 - - - - - chbu_allow_edit - toggled(bool) - pushButton_editMat - setDisabled(bool) - - - 272 - 162 - - - 91 - 162 - - - - diff --git a/src/Mod/Fem/femexamples/thermomech_bimetal.py b/src/Mod/Fem/femexamples/thermomech_bimetal.py index 8b7a61d85c..a83b79d65f 100644 --- a/src/Mod/Fem/femexamples/thermomech_bimetal.py +++ b/src/Mod/Fem/femexamples/thermomech_bimetal.py @@ -159,6 +159,7 @@ def setup(doc=None, solvertype="ccxtools"): mat["SpecificHeat"] = "385 J/kg/K" mat["ThermalConductivity"] = "398 W/m/K" mat["ThermalExpansionCoefficient"] = "0.0000165 m/m/K" + mat["ThermalExpansionReferenceTemperature"] = "273 K" mat["Density"] = "8960.0 kg/m^3" material_obj_bottom.Material = mat material_obj_bottom.References = [(geom_obj, "Solid1")] @@ -173,6 +174,7 @@ def setup(doc=None, solvertype="ccxtools"): mat["SpecificHeat"] = "515 J/kg/K" mat["ThermalConductivity"] = "13.5 W/m/K" mat["ThermalExpansionCoefficient"] = "0.00000125 m/m/K" + mat["ThermalExpansionReferenceTemperature"] = "273 K" material_obj_top.Material = mat material_obj_top.References = [(geom_obj, "Solid2")] analysis.addObject(material_obj_top) diff --git a/src/Mod/Fem/femsolver/calculix/write_femelement_material.py b/src/Mod/Fem/femsolver/calculix/write_femelement_material.py index c289f8d62c..ac930b1a43 100644 --- a/src/Mod/Fem/femsolver/calculix/write_femelement_material.py +++ b/src/Mod/Fem/femsolver/calculix/write_femelement_material.py @@ -81,6 +81,10 @@ def write_femelement_material(f, ccxwriter): if mat_obj.Category == "Solid": TEC = FreeCAD.Units.Quantity(mat_obj.Material["ThermalExpansionCoefficient"]) TEC_in_mmK = TEC.getValueAs("mm/mm/K").Value + RT = FreeCAD.Units.Quantity( + mat_obj.Material["ThermalExpansionReferenceTemperature"] + ) + RT_in_K = RT.getValueAs("K").Value elif mat_obj.Category == "Fluid": KV = FreeCAD.Units.Quantity(mat_obj.Material["KinematicViscosity"]) KV_in_mm2s = KV.getValueAs("mm^2/s").Value @@ -100,7 +104,7 @@ def write_femelement_material(f, ccxwriter): if mat_obj.Category == "Solid": f.write("*CONDUCTIVITY\n") f.write(f"{TC_in_WmK:.13G}\n") - f.write("*EXPANSION\n") + f.write(f"*EXPANSION, ZERO={RT_in_K:.13G}\n") f.write(f"{TEC_in_mmK:.13G}\n") f.write("*SPECIFIC HEAT\n") f.write(f"{SH_in_JkgK:.13G}\n") diff --git a/src/Mod/Fem/femtaskpanels/task_material_common.py b/src/Mod/Fem/femtaskpanels/task_material_common.py index e1c9498632..fc3fac6386 100644 --- a/src/Mod/Fem/femtaskpanels/task_material_common.py +++ b/src/Mod/Fem/femtaskpanels/task_material_common.py @@ -98,6 +98,11 @@ class _TaskPanel(base_femtaskpanel._BaseTaskPanel): QtCore.SIGNAL("editingFinished()"), self.tec_changed, ) + QtCore.QObject.connect( + self.parameterWidget.qsb_expansion_reference_temperature, + QtCore.SIGNAL("editingFinished()"), + self.tec_changed, + ) QtCore.QObject.connect( self.parameterWidget.qsb_specific_heat, QtCore.SIGNAL("editingFinished()"), @@ -154,13 +159,6 @@ class _TaskPanel(base_femtaskpanel._BaseTaskPanel): self.selectionWidget.finish_selection() return super().reject() - def isfloat(self, num): - try: - float(num) - return True - except ValueError: - return False - # choose material **************************************************************************** def filter_models(self, category): material_filter = Materials.MaterialFilter() @@ -172,24 +170,26 @@ class _TaskPanel(base_femtaskpanel._BaseTaskPanel): def toggleInputFieldsReadOnly(self): if self.parameterWidget.chbu_allow_edit.isChecked(): - self.parameterWidget.qsb_density.setReadOnly(False) - self.parameterWidget.qsb_young_modulus.setReadOnly(False) - self.parameterWidget.qsb_poisson_ratio.setReadOnly(False) - self.parameterWidget.qsb_thermal_conductivity.setReadOnly(False) - self.parameterWidget.qsb_expansion_coefficient.setReadOnly(False) - self.parameterWidget.qsb_specific_heat.setReadOnly(False) - self.parameterWidget.qsb_kinematic_viscosity.setReadOnly(False) + self.parameterWidget.qsb_density.setDisabled(False) + self.parameterWidget.qsb_young_modulus.setDisabled(False) + self.parameterWidget.qsb_poisson_ratio.setDisabled(False) + self.parameterWidget.qsb_thermal_conductivity.setDisabled(False) + self.parameterWidget.qsb_expansion_coefficient.setDisabled(False) + self.parameterWidget.qsb_expansion_reference_temperature.setDisabled(False) + self.parameterWidget.qsb_specific_heat.setDisabled(False) + self.parameterWidget.qsb_kinematic_viscosity.setDisabled(False) self.parameterWidget.wgt_material_tree.setEnabled(False) self.uuid = "" self.mat_from_input_fields() else: - self.parameterWidget.qsb_density.setReadOnly(True) - self.parameterWidget.qsb_young_modulus.setReadOnly(True) - self.parameterWidget.qsb_poisson_ratio.setReadOnly(True) - self.parameterWidget.qsb_thermal_conductivity.setReadOnly(True) - self.parameterWidget.qsb_expansion_coefficient.setReadOnly(True) - self.parameterWidget.qsb_specific_heat.setReadOnly(True) - self.parameterWidget.qsb_kinematic_viscosity.setReadOnly(True) + self.parameterWidget.qsb_density.setDisabled(True) + self.parameterWidget.qsb_young_modulus.setDisabled(True) + self.parameterWidget.qsb_poisson_ratio.setDisabled(True) + self.parameterWidget.qsb_thermal_conductivity.setDisabled(True) + self.parameterWidget.qsb_expansion_coefficient.setDisabled(True) + self.parameterWidget.qsb_expansion_reference_temperature.setDisabled(True) + self.parameterWidget.qsb_specific_heat.setDisabled(True) + self.parameterWidget.qsb_kinematic_viscosity.setDisabled(True) self.parameterWidget.wgt_material_tree.setEnabled(True) self.set_from_editor(self.material_tree.UUID) @@ -224,6 +224,14 @@ class _TaskPanel(base_femtaskpanel._BaseTaskPanel): self.parameterWidget.qsb_expansion_coefficient.property("value").UserString ) + def tec_changed(self): + if self.parameterWidget.chbu_allow_edit.isChecked(): + self.material["ThermalExpansionReferenceTemperature"] = ( + self.parameterWidget.qsb_expansion_reference_temperature.property( + "value" + ).UserString + ) + def sh_changed(self): if self.parameterWidget.chbu_allow_edit.isChecked(): self.material["SpecificHeat"] = self.parameterWidget.qsb_specific_heat.property( @@ -277,6 +285,12 @@ class _TaskPanel(base_femtaskpanel._BaseTaskPanel): self.parameterWidget.qsb_expansion_coefficient.setProperty("value", v) else: self.parameterWidget.qsb_expansion_coefficient.setProperty("rawValue", 0.0) + if "ThermalExpansionReferenceTemperature" in matmap: + self.parameterWidget.qsb_expansion_reference_temperature.setProperty( + "value", Units.Quantity(matmap["ThermalExpansionReferenceTemperature"]) + ) + else: + self.parameterWidget.qsb_expansion_reference_temperature.setProperty("rawValue", 0.0) if "SpecificHeat" in matmap: self.parameterWidget.qsb_specific_heat.setProperty( "value", Units.Quantity(matmap["SpecificHeat"]) @@ -299,6 +313,9 @@ class _TaskPanel(base_femtaskpanel._BaseTaskPanel): d["Density"] = p.qsb_density.property("value").UserString d["ThermalConductivity"] = p.qsb_thermal_conductivity.property("value").UserString d["ThermalExpansionCoefficient"] = p.qsb_expansion_coefficient.property("value").UserString + d["ThermalExpansionReferenceTemperature"] = p.qsb_expansion_reference_temperature.property( + "value" + ).UserString d["SpecificHeat"] = p.qsb_specific_heat.property("value").UserString if self.obj.Category == "Solid": d["YoungsModulus"] = p.qsb_young_modulus.property("value").UserString diff --git a/src/Mod/Fem/femtest/data/calculix/thermomech_bimetal.inp b/src/Mod/Fem/femtest/data/calculix/thermomech_bimetal.inp index a898812b47..1267d1aa0b 100644 --- a/src/Mod/Fem/femtest/data/calculix/thermomech_bimetal.inp +++ b/src/Mod/Fem/femtest/data/calculix/thermomech_bimetal.inp @@ -7053,7 +7053,7 @@ Evolumes 119000,0.343 *CONDUCTIVITY 398 -*EXPANSION +*EXPANSION, ZERO=273 1.65E-05 *SPECIFIC HEAT 385000000 @@ -7064,7 +7064,7 @@ Evolumes 140000,0.29 *CONDUCTIVITY 13.5 -*EXPANSION +*EXPANSION, ZERO=273 1.25E-06 *SPECIFIC HEAT 515000000