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