diff --git a/src/Mod/Fem/FemInputWriterCcx.py b/src/Mod/Fem/FemInputWriterCcx.py
index 94df5c31b..fc04f9d98 100644
--- a/src/Mod/Fem/FemInputWriterCcx.py
+++ b/src/Mod/Fem/FemInputWriterCcx.py
@@ -155,12 +155,22 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
f.write('** Materials\n')
f.write('** written by {} function\n'.format(sys._getframe().f_code.co_name))
f.write('** Young\'s modulus unit is MPa = N/mm2\n')
+ f.write('** Density\'s unit is t/mm^3\n')
for femobj in self.material_objects: # femobj --> dict, FreeCAD document object is femobj['Object']
mat_obj = femobj['Object']
- # get material properties
- YM = FreeCAD.Units.Quantity(mat_obj.Material['YoungsModulus'])
- YM_in_MPa = YM.getValueAs('MPa')
- PR = float(mat_obj.Material['PoissonRatio'])
+ # get material properties - Currently in SI units: M/kg/s/Kelvin
+ YM_in_MPa = 1
+ PR = 1
+ density_in_tonne_per_mm3 = 1
+ try:
+ YM = FreeCAD.Units.Quantity(mat_obj.Material['YoungsModulus'])
+ YM_in_MPa = YM.getValueAs('MPa')
+ except:
+ FreeCAD.Console.PrintError("No YoungsModulus defined for material: default used\n")
+ try:
+ PR = float(mat_obj.Material['PoissonRatio'])
+ except:
+ FreeCAD.Console.PrintError("No PoissonRatio defined for material: default used\n")
mat_info_name = mat_obj.Material['Name']
mat_name = mat_obj.Name
# write material properties
@@ -168,10 +178,13 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
f.write('*MATERIAL, NAME=' + mat_name + '\n')
f.write('*ELASTIC \n')
f.write('{0}, {1:.3f}\n'.format(YM_in_MPa, PR))
- density = FreeCAD.Units.Quantity(mat_obj.Material['Density'])
- density_in_tone_per_mm3 = float(density.getValueAs('t/mm^3'))
+ try:
+ density = FreeCAD.Units.Quantity(mat_obj.Material['Density'])
+ density_in_tonne_per_mm3 = float(density.getValueAs('t/mm^3'))
+ except:
+ FreeCAD.Console.PrintError("No Density defined for material: default used\n")
f.write('*DENSITY \n')
- f.write('{0:.3e}, \n'.format(density_in_tone_per_mm3))
+ f.write('{0:.3e}, \n'.format(density_in_tonne_per_mm3))
def write_femelementsets(self, f):
f.write('\n***********************************************************\n')
diff --git a/src/Mod/Fem/TaskPanelMechanicalMaterial.ui b/src/Mod/Fem/TaskPanelMechanicalMaterial.ui
index c56ac2c79..9d443ef3d 100644
--- a/src/Mod/Fem/TaskPanelMechanicalMaterial.ui
+++ b/src/Mod/Fem/TaskPanelMechanicalMaterial.ui
@@ -93,7 +93,7 @@
- Properties
+ Material Properties
-
@@ -122,6 +122,9 @@
20
+
+ 200 GPa
+
Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
@@ -176,7 +179,7 @@
0.100000000000000
- 0.000000000000000
+ 0.300000000000000
@@ -202,7 +205,7 @@
-
+ 8000 kg/m^3
Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
@@ -214,7 +217,7 @@
2000000000.000000000000000
- kg/mm^3
+ kg/m^3
3
diff --git a/src/Mod/Fem/_TaskPanelMechanicalMaterial.py b/src/Mod/Fem/_TaskPanelMechanicalMaterial.py
index 9ba8bc752..958eb1522 100644
--- a/src/Mod/Fem/_TaskPanelMechanicalMaterial.py
+++ b/src/Mod/Fem/_TaskPanelMechanicalMaterial.py
@@ -122,7 +122,7 @@ class _TaskPanelMechanicalMaterial:
def ym_changed(self, value):
import Units
# FreeCADs standard unit for stress is kPa
- old_ym = Units.Quantity(self.material['YoungsModulus'])
+ old_ym = Units.Quantity(self.material['YoungsModulus']).getValueAs("kPa")
variation = 0.001
if value:
if not (1 - variation < float(old_ym) / value < 1 + variation):
@@ -134,15 +134,14 @@ class _TaskPanelMechanicalMaterial:
def density_changed(self, value):
import Units
# FreeCADs standard unit for density is kg/mm^3
- old_density = Units.Quantity(self.material['Density'])
+ old_density = Units.Quantity(self.material['Density']).getValueAs("kg/m^3")
variation = 0.001
if value:
if not (1 - variation < float(old_density) / value < 1 + variation):
# density has changed
material = self.material
value_in_kg_per_m3 = value * 1e9
- material['Density'] = unicode(value_in_kg_per_m3) + " kg/m^3"
- # material['Density'] = unicode(value) + " kg/mm^3"
+ material['Density'] = unicode(value_in_kg_per_m3) + " kg/m^3" # SvdW:Keep density in SI units for easier readability
self.material = material
def pr_changed(self, value):