Skip to content

Commit

Permalink
FEM: fix, use uniqe names for materials in CalculiX input file
Browse files Browse the repository at this point in the history
  • Loading branch information
berndhahnebach committed Feb 2, 2016
1 parent 37b1bdb commit 60cdca0
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 19 deletions.
32 changes: 17 additions & 15 deletions src/Mod/Fem/ccxInpWriter.py
Expand Up @@ -198,8 +198,10 @@ def write_materials(self, f):
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))
Expand All @@ -218,22 +220,22 @@ def write_femelementsets(self, f):
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)
f.write(setion_geo)
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)

Expand Down Expand Up @@ -511,7 +513,7 @@ def write_footer(self, f):
# '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):
Expand All @@ -522,7 +524,7 @@ def get_ccx_elsets_single_mat_single_beam(self):
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):
Expand All @@ -533,7 +535,7 @@ def get_ccx_elsets_single_mat_single_shell(self):
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):
Expand All @@ -542,7 +544,7 @@ def get_ccx_elsets_single_mat_solid(self):
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):
Expand All @@ -555,7 +557,7 @@ def get_ccx_elsets_single_mat_multiple_beam(self):
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):
Expand All @@ -568,7 +570,7 @@ def get_ccx_elsets_single_mat_multiple_shell(self):
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):
Expand All @@ -581,7 +583,7 @@ def get_ccx_elsets_multiple_mat_single_beam(self):
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):
Expand All @@ -594,7 +596,7 @@ def get_ccx_elsets_multiple_mat_single_shell(self):
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):
Expand All @@ -605,7 +607,7 @@ def get_ccx_elsets_multiple_mat_solid(self):
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):
Expand All @@ -624,7 +626,7 @@ def get_ccx_elsets_multiple_mat_multiple_beam(self):
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):
Expand All @@ -643,7 +645,7 @@ def get_ccx_elsets_multiple_mat_multiple_shell(self):
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):
Expand Down
5 changes: 3 additions & 2 deletions src/Mod/Fem/test_files/ccx/cube_frequency.inp
Expand Up @@ -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
Expand All @@ -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
Expand Down
5 changes: 3 additions & 2 deletions src/Mod/Fem/test_files/ccx/cube_static.inp
Expand Up @@ -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
Expand All @@ -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
Expand Down

0 comments on commit 60cdca0

Please sign in to comment.