From 60cdca01a8b83bf2d39fe00495b762be8276c63d Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Thu, 21 Jan 2016 19:16:40 +0100 Subject: [PATCH] FEM: fix, use uniqe names for materials in CalculiX input file --- src/Mod/Fem/ccxInpWriter.py | 32 ++++++++++--------- src/Mod/Fem/test_files/ccx/cube_frequency.inp | 5 +-- src/Mod/Fem/test_files/ccx/cube_static.inp | 5 +-- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/Mod/Fem/ccxInpWriter.py b/src/Mod/Fem/ccxInpWriter.py index 2ca3258ae..3a0ac42c0 100644 --- a/src/Mod/Fem/ccxInpWriter.py +++ b/src/Mod/Fem/ccxInpWriter.py @@ -198,8 +198,10 @@ class inp_writer: YM = FreeCAD.Units.Quantity(mat_obj.Material['YoungsModulus']) YM_in_MPa = YM.getValueAs('MPa') PR = float(mat_obj.Material['PoissonRatio']) - mat_name = mat_obj.Material['Name'][:80] + mat_info_name = mat_obj.Material['Name'] + mat_name = mat_obj.Name # write material properties + f.write('**FreeCAD material name: ' + mat_info_name + '\n') f.write('*MATERIAL, NAME=' + mat_name + '\n') f.write('*ELASTIC \n') f.write('{}, \n'.format(YM_in_MPa)) @@ -218,7 +220,7 @@ class inp_writer: if 'beamsection_obj'in ccx_elset: # beam mesh beamsec_obj = ccx_elset['beamsection_obj'] elsetdef = 'ELSET=' + ccx_elset['ccx_elset_name'] + ', ' - material = 'MATERIAL=' + ccx_elset['ccx_mat_name'] + material = 'MATERIAL=' + ccx_elset['mat_obj_name'] setion_def = '*BEAM SECTION, ' + elsetdef + material + ', SECTION=RECT\n' setion_geo = str(beamsec_obj.Height.getValueAs('mm')) + ', ' + str(beamsec_obj.Width.getValueAs('mm')) + '\n' f.write(setion_def) @@ -226,14 +228,14 @@ class inp_writer: elif 'shellthickness_obj'in ccx_elset: # shell mesh shellth_obj = ccx_elset['shellthickness_obj'] elsetdef = 'ELSET=' + ccx_elset['ccx_elset_name'] + ', ' - material = 'MATERIAL=' + ccx_elset['ccx_mat_name'] + material = 'MATERIAL=' + ccx_elset['mat_obj_name'] setion_def = '*SHELL SECTION, ' + elsetdef + material + '\n' setion_geo = str(shellth_obj.Thickness.getValueAs('mm')) + '\n' f.write(setion_def) f.write(setion_geo) else: # solid mesh elsetdef = 'ELSET=' + ccx_elset['ccx_elset_name'] + ', ' - material = 'MATERIAL=' + ccx_elset['ccx_mat_name'] + material = 'MATERIAL=' + ccx_elset['mat_obj_name'] setion_def = '*SOLID SECTION, ' + elsetdef + material + '\n' f.write(setion_def) @@ -511,7 +513,7 @@ class inp_writer: # 'ccx_elset' : [e1, e2, e3, ... , en] or string self.ccx_eall # 'ccx_elset_name' : 'ccx_identifier_elset' # 'mat_obj_name' : 'mat_obj.Name' - # 'ccx_mat_name' : 'mat_obj.Material['Name'][:80]' !!! not unique !!! + # 'ccx_mat_name' : 'mat_obj.Material['Name']' !!! not unique !!! # }, # {}, ... , {} ] def get_ccx_elsets_single_mat_single_beam(self): @@ -522,7 +524,7 @@ class inp_writer: ccx_elset['ccx_elset'] = self.ccx_eall ccx_elset['ccx_elset_name'] = get_ccx_elset_beam_name(mat_obj.Name, beamsec_obj.Name) ccx_elset['mat_obj_name'] = mat_obj.Name - ccx_elset['ccx_mat_name'] = mat_obj.Material['Name'][:80] + ccx_elset['ccx_mat_name'] = mat_obj.Material['Name'] self.ccx_elsets.append(ccx_elset) def get_ccx_elsets_single_mat_single_shell(self): @@ -533,7 +535,7 @@ class inp_writer: ccx_elset['ccx_elset'] = self.ccx_eall ccx_elset['ccx_elset_name'] = get_ccx_elset_shell_name(mat_obj.Name, shellth_obj.Name) ccx_elset['mat_obj_name'] = mat_obj.Name - ccx_elset['ccx_mat_name'] = mat_obj.Material['Name'][:80] + ccx_elset['ccx_mat_name'] = mat_obj.Material['Name'] self.ccx_elsets.append(ccx_elset) def get_ccx_elsets_single_mat_solid(self): @@ -542,7 +544,7 @@ class inp_writer: ccx_elset['ccx_elset'] = self.ccx_eall ccx_elset['ccx_elset_name'] = get_ccx_elset_solid_name(mat_obj.Name) ccx_elset['mat_obj_name'] = mat_obj.Name - ccx_elset['ccx_mat_name'] = mat_obj.Material['Name'][:80] + ccx_elset['ccx_mat_name'] = mat_obj.Material['Name'] self.ccx_elsets.append(ccx_elset) def get_ccx_elsets_single_mat_multiple_beam(self): @@ -555,7 +557,7 @@ class inp_writer: ccx_elset['ccx_elset'] = beamsec_data['FEMElements'] ccx_elset['ccx_elset_name'] = get_ccx_elset_beam_name(mat_obj.Name, beamsec_obj.Name, None, beamsec_data['ShortName']) ccx_elset['mat_obj_name'] = mat_obj.Name - ccx_elset['ccx_mat_name'] = mat_obj.Material['Name'][:80] + ccx_elset['ccx_mat_name'] = mat_obj.Material['Name'] self.ccx_elsets.append(ccx_elset) def get_ccx_elsets_single_mat_multiple_shell(self): @@ -568,7 +570,7 @@ class inp_writer: ccx_elset['ccx_elset'] = shellth_data['FEMElements'] ccx_elset['ccx_elset_name'] = get_ccx_elset_shell_name(mat_obj.Name, shellth_obj.Name, None, shellth_data['ShortName']) ccx_elset['mat_obj_name'] = mat_obj.Name - ccx_elset['ccx_mat_name'] = mat_obj.Material['Name'][:80] + ccx_elset['ccx_mat_name'] = mat_obj.Material['Name'] self.ccx_elsets.append(ccx_elset) def get_ccx_elsets_multiple_mat_single_beam(self): @@ -581,7 +583,7 @@ class inp_writer: ccx_elset['ccx_elset'] = mat_data['FEMElements'] ccx_elset['ccx_elset_name'] = get_ccx_elset_beam_name(mat_obj.Name, beamsec_obj.Name, mat_data['ShortName']) ccx_elset['mat_obj_name'] = mat_obj.Name - ccx_elset['ccx_mat_name'] = mat_obj.Material['Name'][:80] + ccx_elset['ccx_mat_name'] = mat_obj.Material['Name'] self.ccx_elsets.append(ccx_elset) def get_ccx_elsets_multiple_mat_single_shell(self): @@ -594,7 +596,7 @@ class inp_writer: ccx_elset['ccx_elset'] = mat_data['FEMElements'] ccx_elset['ccx_elset_name'] = get_ccx_elset_shell_name(mat_obj.Name, shellth_obj.Name, mat_data['ShortName']) ccx_elset['mat_obj_name'] = mat_obj.Name - ccx_elset['ccx_mat_name'] = mat_obj.Material['Name'][:80] + ccx_elset['ccx_mat_name'] = mat_obj.Material['Name'] self.ccx_elsets.append(ccx_elset) def get_ccx_elsets_multiple_mat_solid(self): @@ -605,7 +607,7 @@ class inp_writer: ccx_elset['ccx_elset'] = mat_data['FEMElements'] ccx_elset['ccx_elset_name'] = get_ccx_elset_solid_name(mat_obj.Name, None, mat_data['ShortName']) ccx_elset['mat_obj_name'] = mat_obj.Name - ccx_elset['ccx_mat_name'] = mat_obj.Material['Name'][:80] + ccx_elset['ccx_mat_name'] = mat_obj.Material['Name'] self.ccx_elsets.append(ccx_elset) def get_ccx_elsets_multiple_mat_multiple_beam(self): @@ -624,7 +626,7 @@ class inp_writer: ccx_elset['ccx_elset'] = elemids ccx_elset['ccx_elset_name'] = get_ccx_elset_beam_name(mat_obj.Name, beamsec_obj.Name, mat_data['ShortName'], beamsec_data['ShortName']) ccx_elset['mat_obj_name'] = mat_obj.Name - ccx_elset['ccx_mat_name'] = mat_obj.Material['Name'][:80] + ccx_elset['ccx_mat_name'] = mat_obj.Material['Name'] self.ccx_elsets.append(ccx_elset) def get_ccx_elsets_multiple_mat_multiple_shell(self): @@ -643,7 +645,7 @@ class inp_writer: ccx_elset['ccx_elset'] = elemids ccx_elset['ccx_elset_name'] = get_ccx_elset_shell_name(mat_obj.Name, shellth_obj.Name, mat_data['ShortName'], shellth_data['ShortName']) ccx_elset['mat_obj_name'] = mat_obj.Name - ccx_elset['ccx_mat_name'] = mat_obj.Material['Name'][:80] + ccx_elset['ccx_mat_name'] = mat_obj.Material['Name'] self.ccx_elsets.append(ccx_elset) def get_femelement_sets(self, fem_objects): diff --git a/src/Mod/Fem/test_files/ccx/cube_frequency.inp b/src/Mod/Fem/test_files/ccx/cube_frequency.inp index 955529d9f..39646c25d 100644 --- a/src/Mod/Fem/test_files/ccx/cube_frequency.inp +++ b/src/Mod/Fem/test_files/ccx/cube_frequency.inp @@ -468,7 +468,8 @@ Eall ** Materials ** written by write_materials function ** Young's modulus unit is MPa = N/mm2 -*MATERIAL, NAME=Steel +**FreeCAD material name: Steel +*MATERIAL, NAME=MechanicalMaterial *ELASTIC 200000 , 0.300 @@ -478,7 +479,7 @@ Eall *********************************************************** ** Sections ** written by write_femelementsets function -*SOLID SECTION, ELSET=MechanicalMaterialSolid, MATERIAL=Steel +*SOLID SECTION, ELSET=MechanicalMaterialSolid, MATERIAL=MechanicalMaterial *********************************************************** ** One step is needed to calculate the mechanical analysis of FreeCAD diff --git a/src/Mod/Fem/test_files/ccx/cube_static.inp b/src/Mod/Fem/test_files/ccx/cube_static.inp index bb6a101e1..ee743b551 100644 --- a/src/Mod/Fem/test_files/ccx/cube_static.inp +++ b/src/Mod/Fem/test_files/ccx/cube_static.inp @@ -473,7 +473,8 @@ Eall ** Materials ** written by write_materials function ** Young's modulus unit is MPa = N/mm2 -*MATERIAL, NAME=Steel +**FreeCAD material name: Steel +*MATERIAL, NAME=MechanicalMaterial *ELASTIC 200000 , 0.300 @@ -483,7 +484,7 @@ Eall *********************************************************** ** Sections ** written by write_femelementsets function -*SOLID SECTION, ELSET=MechanicalMaterialSolid, MATERIAL=Steel +*SOLID SECTION, ELSET=MechanicalMaterialSolid, MATERIAL=MechanicalMaterial *********************************************************** ** One step is needed to calculate the mechanical analysis of FreeCAD