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