diff --git a/src/Mod/Fem/MechanicalMaterial.py b/src/Mod/Fem/MechanicalMaterial.py index 8e40f959a8..3abf9f6786 100644 --- a/src/Mod/Fem/MechanicalMaterial.py +++ b/src/Mod/Fem/MechanicalMaterial.py @@ -133,6 +133,7 @@ class _MechanicalMaterialTaskPanel: QtCore.QObject.connect(self.form.cb_materials, QtCore.SIGNAL("activated(int)"), self.choose_material) QtCore.QObject.connect(self.form.input_fd_young_modulus, QtCore.SIGNAL("valueChanged(double)"), self.ym_changed) QtCore.QObject.connect(self.form.spinBox_poisson_ratio, QtCore.SIGNAL("valueChanged(double)"), self.pr_changed) + QtCore.QObject.connect(self.form.input_fd_density, QtCore.SIGNAL("valueChanged(double)"), self.density_changed) self.previous_material = self.obj.Material self.import_materials() previous_mat_path = self.get_material_path(self.previous_material) @@ -171,6 +172,14 @@ class _MechanicalMaterialTaskPanel: material['YoungsModulus'] = unicode(value) + " kPa" self.obj.Material = material + def density_changed(self, value): + import Units + old_density = Units.Quantity(self.obj.Material['Density']) + if old_density != value: + material = self.obj.Material + material['Density'] = unicode(value) + " kg/mm^3" + self.obj.Material = material + def pr_changed(self, value): import Units old_pr = Units.Quantity(self.obj.Material['PoissonRatio']) @@ -212,6 +221,8 @@ class _MechanicalMaterialTaskPanel: print ' YM = ', matmap['YoungsModulus'] if 'PoissonRatio' in matmap: print ' PR = ', matmap['PoissonRatio'] + if 'Density' in matmap: + print ' RO = ', matmap['Density'] def set_mat_params_in_combo_box(self, matmap): if 'YoungsModulus' in matmap: @@ -221,6 +232,11 @@ class _MechanicalMaterialTaskPanel: self.form.input_fd_young_modulus.setText("{} {}".format(ym_with_new_unit, ym_new_unit)) if 'PoissonRatio' in matmap: self.form.spinBox_poisson_ratio.setValue(float(matmap['PoissonRatio'])) + if 'Density' in matmap: + density_new_unit = "kg/m^3" + density = FreeCAD.Units.Quantity(matmap['Density']) + density_with_new_unit = density.getValueAs(density_new_unit) + self.form.input_fd_density.setText("{} {}".format(density_with_new_unit, density_new_unit)) def add_transient_material(self, material): material_name = self.get_material_name(material) diff --git a/src/Mod/Fem/MechanicalMaterial.ui b/src/Mod/Fem/MechanicalMaterial.ui index b708345d76..8607b012db 100644 --- a/src/Mod/Fem/MechanicalMaterial.ui +++ b/src/Mod/Fem/MechanicalMaterial.ui @@ -6,8 +6,8 @@ 0 0 - 188 - 124 + 253 + 275 @@ -36,6 +36,9 @@ + + QFormLayout::AllNonFixedFieldsGrow + @@ -60,18 +63,18 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + 2.000000000000000 + + + 2000000000.000000000000000 + Pa 3 - - 2000000000.000000000 - - - 2.000000000000000 - 0.000000000000000 @@ -115,6 +118,50 @@ + + + + Density + + + + + + + + 0 + 0 + + + + + 80 + 20 + + + + 0 kg/m^3 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2.000000000000000 + + + 2000000000.000000000000000 + + + kg/m^3 + + + 3 + + + 0.000000000000000 + + + diff --git a/src/Mod/Fem/ccxInpWriter.py b/src/Mod/Fem/ccxInpWriter.py index 0f4673b271..7a2c398ba7 100644 --- a/src/Mod/Fem/ccxInpWriter.py +++ b/src/Mod/Fem/ccxInpWriter.py @@ -122,8 +122,12 @@ class inp_writer: # write material properties f.write('*MATERIAL, NAME=' + mat_name + '\n') f.write('*ELASTIC \n') - f.write('{}, '.format(YM_in_MPa)) + f.write('{}, \n'.format(YM_in_MPa)) f.write('{0:.3f}\n'.format(PR)) + density = FreeCAD.Units.Quantity(mat_obj.Material['Density']) + density_in_kg_per_mm3 = density.getValueAs('t/mm^3') + f.write('*DENSITY \n') + f.write('{}, \n'.format(density_in_kg_per_mm3)) # write element properties if len(self.material_objects) == 1: f.write('*SOLID SECTION, ELSET=' + mat_obj_name + ', MATERIAL=' + mat_name + '\n') diff --git a/src/Mod/Material/StandardMaterial/ABS.FCMat b/src/Mod/Material/StandardMaterial/ABS.FCMat index ad7a923c7a..601438d554 100644 --- a/src/Mod/Material/StandardMaterial/ABS.FCMat +++ b/src/Mod/Material/StandardMaterial/ABS.FCMat @@ -24,6 +24,7 @@ SpecificPrice= 3 YoungsModulus=2320 MPa ; http://en.wikipedia.org/wiki/Ultimate_tensile_strength in UltimateTensileStrength= 38 MPa +Density=1070 kg/m^3 [FEM] PoissonRatio = 0.35 diff --git a/src/Mod/Material/StandardMaterial/CalculiX.FCMat b/src/Mod/Material/StandardMaterial/CalculiX.FCMat index f161e9c0c4..4eda172337 100644 --- a/src/Mod/Material/StandardMaterial/CalculiX.FCMat +++ b/src/Mod/Material/StandardMaterial/CalculiX.FCMat @@ -9,6 +9,7 @@ Father=Metal [Mechanical] ; youngs modulus (or E-Module) YoungsModulus=210000 MPa +Density=1000 kg/m^3 [FEM] PoissonRatio = 0.3 diff --git a/src/Mod/Material/StandardMaterial/Concrete-Generic.FCMat b/src/Mod/Material/StandardMaterial/Concrete-Generic.FCMat index db87a1c9f3..25ba107651 100644 --- a/src/Mod/Material/StandardMaterial/Concrete-Generic.FCMat +++ b/src/Mod/Material/StandardMaterial/Concrete-Generic.FCMat @@ -19,6 +19,7 @@ CompressiveStrength=25 MPa YoungsModulus=32000 MPa Elasticity= FractureToughness= +Density=2000 kg/m^3 [FEM] PoissonRatio=0.17 diff --git a/src/Mod/Material/StandardMaterial/None.FCMat b/src/Mod/Material/StandardMaterial/None.FCMat index 3ce480dc35..ca121de334 100644 --- a/src/Mod/Material/StandardMaterial/None.FCMat +++ b/src/Mod/Material/StandardMaterial/None.FCMat @@ -22,6 +22,7 @@ SpecificPrice = 0.0 YoungsModulus=0 MPa ; http://en.wikipedia.org/wiki/Ultimate_tensile_strength in UltimateTensileStrength= 0 MPa +Density=0 kg/m^3 [FEM] PoissonRatio = 0.0 diff --git a/src/Mod/Material/StandardMaterial/PLA.FCMat b/src/Mod/Material/StandardMaterial/PLA.FCMat index 2d577b5889..aa182dd1aa 100644 --- a/src/Mod/Material/StandardMaterial/PLA.FCMat +++ b/src/Mod/Material/StandardMaterial/PLA.FCMat @@ -24,6 +24,7 @@ SpecificPrice= 4 YoungsModulus=3640 MPa ; http://en.wikipedia.org/wiki/Ultimate_tensile_strength UltimateTensileStrength= 49.6 MPa +Density=1300 kg/m^3 [FEM] diff --git a/src/Mod/Material/StandardMaterial/Steel-Generic.FCMat b/src/Mod/Material/StandardMaterial/Steel-Generic.FCMat index 488df4b3a9..3f4bff1d52 100644 --- a/src/Mod/Material/StandardMaterial/Steel-Generic.FCMat +++ b/src/Mod/Material/StandardMaterial/Steel-Generic.FCMat @@ -30,6 +30,7 @@ CompressiveStrength= Elasticity= ; http://en.wikipedia.org/wiki/Fracture_toughness FractureToughness: +Density=7900 kg/m^3 [FEM] PoissonRatio = 0.3 diff --git a/src/Mod/Material/StandardMaterial/Wood-Generic.FCMat b/src/Mod/Material/StandardMaterial/Wood-Generic.FCMat index d6a600be8f..0a33ea9b32 100644 --- a/src/Mod/Material/StandardMaterial/Wood-Generic.FCMat +++ b/src/Mod/Material/StandardMaterial/Wood-Generic.FCMat @@ -18,6 +18,7 @@ CompressiveStrength= YoungsModulus=12000 MPa Elasticity= FractureToughness= +Density=0.7 kg/m^3 [FEM] PoissonRatio=0.05