FEM: fix, use uniqe names for materials in CalculiX input file
This commit is contained in:
parent
37b1bdbe27
commit
60cdca01a8
|
@ -198,8 +198,10 @@ class inp_writer:
|
||||||
YM = FreeCAD.Units.Quantity(mat_obj.Material['YoungsModulus'])
|
YM = FreeCAD.Units.Quantity(mat_obj.Material['YoungsModulus'])
|
||||||
YM_in_MPa = YM.getValueAs('MPa')
|
YM_in_MPa = YM.getValueAs('MPa')
|
||||||
PR = float(mat_obj.Material['PoissonRatio'])
|
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
|
# write material properties
|
||||||
|
f.write('**FreeCAD material name: ' + mat_info_name + '\n')
|
||||||
f.write('*MATERIAL, NAME=' + mat_name + '\n')
|
f.write('*MATERIAL, NAME=' + mat_name + '\n')
|
||||||
f.write('*ELASTIC \n')
|
f.write('*ELASTIC \n')
|
||||||
f.write('{}, \n'.format(YM_in_MPa))
|
f.write('{}, \n'.format(YM_in_MPa))
|
||||||
|
@ -218,7 +220,7 @@ class inp_writer:
|
||||||
if 'beamsection_obj'in ccx_elset: # beam mesh
|
if 'beamsection_obj'in ccx_elset: # beam mesh
|
||||||
beamsec_obj = ccx_elset['beamsection_obj']
|
beamsec_obj = ccx_elset['beamsection_obj']
|
||||||
elsetdef = 'ELSET=' + ccx_elset['ccx_elset_name'] + ', '
|
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_def = '*BEAM SECTION, ' + elsetdef + material + ', SECTION=RECT\n'
|
||||||
setion_geo = str(beamsec_obj.Height.getValueAs('mm')) + ', ' + str(beamsec_obj.Width.getValueAs('mm')) + '\n'
|
setion_geo = str(beamsec_obj.Height.getValueAs('mm')) + ', ' + str(beamsec_obj.Width.getValueAs('mm')) + '\n'
|
||||||
f.write(setion_def)
|
f.write(setion_def)
|
||||||
|
@ -226,14 +228,14 @@ class inp_writer:
|
||||||
elif 'shellthickness_obj'in ccx_elset: # shell mesh
|
elif 'shellthickness_obj'in ccx_elset: # shell mesh
|
||||||
shellth_obj = ccx_elset['shellthickness_obj']
|
shellth_obj = ccx_elset['shellthickness_obj']
|
||||||
elsetdef = 'ELSET=' + ccx_elset['ccx_elset_name'] + ', '
|
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_def = '*SHELL SECTION, ' + elsetdef + material + '\n'
|
||||||
setion_geo = str(shellth_obj.Thickness.getValueAs('mm')) + '\n'
|
setion_geo = str(shellth_obj.Thickness.getValueAs('mm')) + '\n'
|
||||||
f.write(setion_def)
|
f.write(setion_def)
|
||||||
f.write(setion_geo)
|
f.write(setion_geo)
|
||||||
else: # solid mesh
|
else: # solid mesh
|
||||||
elsetdef = 'ELSET=' + ccx_elset['ccx_elset_name'] + ', '
|
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'
|
setion_def = '*SOLID SECTION, ' + elsetdef + material + '\n'
|
||||||
f.write(setion_def)
|
f.write(setion_def)
|
||||||
|
|
||||||
|
@ -511,7 +513,7 @@ class inp_writer:
|
||||||
# 'ccx_elset' : [e1, e2, e3, ... , en] or string self.ccx_eall
|
# 'ccx_elset' : [e1, e2, e3, ... , en] or string self.ccx_eall
|
||||||
# 'ccx_elset_name' : 'ccx_identifier_elset'
|
# 'ccx_elset_name' : 'ccx_identifier_elset'
|
||||||
# 'mat_obj_name' : 'mat_obj.Name'
|
# '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):
|
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'] = self.ccx_eall
|
||||||
ccx_elset['ccx_elset_name'] = get_ccx_elset_beam_name(mat_obj.Name, beamsec_obj.Name)
|
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['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)
|
self.ccx_elsets.append(ccx_elset)
|
||||||
|
|
||||||
def get_ccx_elsets_single_mat_single_shell(self):
|
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'] = self.ccx_eall
|
||||||
ccx_elset['ccx_elset_name'] = get_ccx_elset_shell_name(mat_obj.Name, shellth_obj.Name)
|
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['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)
|
self.ccx_elsets.append(ccx_elset)
|
||||||
|
|
||||||
def get_ccx_elsets_single_mat_solid(self):
|
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'] = self.ccx_eall
|
||||||
ccx_elset['ccx_elset_name'] = get_ccx_elset_solid_name(mat_obj.Name)
|
ccx_elset['ccx_elset_name'] = get_ccx_elset_solid_name(mat_obj.Name)
|
||||||
ccx_elset['mat_obj_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)
|
self.ccx_elsets.append(ccx_elset)
|
||||||
|
|
||||||
def get_ccx_elsets_single_mat_multiple_beam(self):
|
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'] = 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['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['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)
|
self.ccx_elsets.append(ccx_elset)
|
||||||
|
|
||||||
def get_ccx_elsets_single_mat_multiple_shell(self):
|
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'] = 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['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['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)
|
self.ccx_elsets.append(ccx_elset)
|
||||||
|
|
||||||
def get_ccx_elsets_multiple_mat_single_beam(self):
|
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'] = mat_data['FEMElements']
|
||||||
ccx_elset['ccx_elset_name'] = get_ccx_elset_beam_name(mat_obj.Name, beamsec_obj.Name, mat_data['ShortName'])
|
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['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)
|
self.ccx_elsets.append(ccx_elset)
|
||||||
|
|
||||||
def get_ccx_elsets_multiple_mat_single_shell(self):
|
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'] = mat_data['FEMElements']
|
||||||
ccx_elset['ccx_elset_name'] = get_ccx_elset_shell_name(mat_obj.Name, shellth_obj.Name, mat_data['ShortName'])
|
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['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)
|
self.ccx_elsets.append(ccx_elset)
|
||||||
|
|
||||||
def get_ccx_elsets_multiple_mat_solid(self):
|
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'] = mat_data['FEMElements']
|
||||||
ccx_elset['ccx_elset_name'] = get_ccx_elset_solid_name(mat_obj.Name, None, mat_data['ShortName'])
|
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['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)
|
self.ccx_elsets.append(ccx_elset)
|
||||||
|
|
||||||
def get_ccx_elsets_multiple_mat_multiple_beam(self):
|
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'] = 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['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['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)
|
self.ccx_elsets.append(ccx_elset)
|
||||||
|
|
||||||
def get_ccx_elsets_multiple_mat_multiple_shell(self):
|
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'] = 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['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['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)
|
self.ccx_elsets.append(ccx_elset)
|
||||||
|
|
||||||
def get_femelement_sets(self, fem_objects):
|
def get_femelement_sets(self, fem_objects):
|
||||||
|
|
|
@ -468,7 +468,8 @@ Eall
|
||||||
** Materials
|
** Materials
|
||||||
** written by write_materials function
|
** written by write_materials function
|
||||||
** Young's modulus unit is MPa = N/mm2
|
** Young's modulus unit is MPa = N/mm2
|
||||||
*MATERIAL, NAME=Steel
|
**FreeCAD material name: Steel
|
||||||
|
*MATERIAL, NAME=MechanicalMaterial
|
||||||
*ELASTIC
|
*ELASTIC
|
||||||
200000 ,
|
200000 ,
|
||||||
0.300
|
0.300
|
||||||
|
@ -478,7 +479,7 @@ Eall
|
||||||
***********************************************************
|
***********************************************************
|
||||||
** Sections
|
** Sections
|
||||||
** written by write_femelementsets function
|
** 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
|
** One step is needed to calculate the mechanical analysis of FreeCAD
|
||||||
|
|
|
@ -473,7 +473,8 @@ Eall
|
||||||
** Materials
|
** Materials
|
||||||
** written by write_materials function
|
** written by write_materials function
|
||||||
** Young's modulus unit is MPa = N/mm2
|
** Young's modulus unit is MPa = N/mm2
|
||||||
*MATERIAL, NAME=Steel
|
**FreeCAD material name: Steel
|
||||||
|
*MATERIAL, NAME=MechanicalMaterial
|
||||||
*ELASTIC
|
*ELASTIC
|
||||||
200000 ,
|
200000 ,
|
||||||
0.300
|
0.300
|
||||||
|
@ -483,7 +484,7 @@ Eall
|
||||||
***********************************************************
|
***********************************************************
|
||||||
** Sections
|
** Sections
|
||||||
** written by write_femelementsets function
|
** 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
|
** One step is needed to calculate the mechanical analysis of FreeCAD
|
||||||
|
|
Loading…
Reference in New Issue
Block a user