FEM: rewriting some defs in CalculiX input file writer

This commit is contained in:
Bernd Hahnebach 2015-09-24 08:20:09 +02:00 committed by wmayer
parent d86b0e8f76
commit f19d4c44df

View File

@ -61,6 +61,8 @@ class inp_writer:
self.base_name = self.mesh_object.Name
self.file_name = self.dir_name + '/' + self.base_name + '.inp'
self.fc_ver = FreeCAD.Version()
self.ccx_eall = 'Eall'
self.ccx_elsets = []
def write_calculix_input_file(self):
self.mesh_object.FemMesh.writeABAQUS(self.file_name)
@ -87,116 +89,39 @@ class inp_writer:
return self.file_name
def write_element_sets_material_and_femelement_type(self, f):
if len(self.material_objects) == 1:
if self.beamsection_objects and len(self.beamsection_objects) == 1: # single mat, single beam
self.get_ccx_elsets_single_mat_single_beam()
elif self.beamsection_objects and len(self.beamsection_objects) > 1: # single mat, multiple beams
self.get_ccx_elsets_single_mat_multiple_beam()
elif self.shellthickness_objects and len(self.shellthickness_objects) == 1: # single mat, single shell
self.get_ccx_elsets_single_mat_single_shell()
elif self.shellthickness_objects and len(self.shellthickness_objects) > 1: # single mat, multiple shells
self.get_ccx_elsets_single_mat_multiple_shell()
else: # single mat, solid
self.get_ccx_elsets_single_mat_solid()
else:
if self.beamsection_objects and len(self.beamsection_objects) == 1: # multiple mats, single beam
self.get_ccx_elsets_multiple_mat_single_beam()
elif self.beamsection_objects and len(self.beamsection_objects) > 1: # multiple mats, multiple beams
self.get_ccx_elsets_multiple_mat_multiple_beam()
if self.shellthickness_objects and len(self.shellthickness_objects) == 1: # multiple mats, single shell
self.get_ccx_elsets_multiple_mat_single_shell()
elif self.shellthickness_objects and len(self.shellthickness_objects) > 1: # multiple mats, multiple shells
self.get_ccx_elsets_multiple_mat_multiple_shell()
else: # multiple mats, solid
self.get_ccx_elsets_multiple_mat_solid()
f.write('\n***********************************************************\n')
f.write('** Element sets for materials and FEM element type (solid, shell, beam)\n')
f.write('** written by {} function\n'.format(sys._getframe().f_code.co_name))
if len(self.material_objects) > 1:
FreeCAD.Console.PrintError('Multiple materials defined, this could result in a broken CalculiX input file!\n')
if len(self.shellthickness_objects) > 1 or len(self.beamsection_objects) > 1:
if not hasattr(self, 'fem_element_table'):
self.fem_element_table = getFemElementTable(self.mesh_object.FemMesh)
for mi, m in enumerate(self.material_objects):
mat_obj = m['Object']
if self.beamsection_objects: # all fem_elements are beamsection_obj --> beam mesh
remaining_material_beam_elementset_line = None
e_count = 0
e_referenced = []
e_not_referenced = []
for bi, b in enumerate(self.beamsection_objects):
beamsection_obj = b['Object']
material_elementset_name = mat_obj.Name + beamsection_obj.Name
# max identifier length in CalculiX for beam sections see http://forum.freecadweb.org/viewtopic.php?f=18&t=12509
if len(material_elementset_name) > 20:
material_elementset_name = 'Mat' + str(mi) + 'Beam' + str(bi)
b['MaterialElementsetName'] = material_elementset_name # the last material is taken in def write_femelementsets()
material_elementset_line = '*ELSET,ELSET=' + material_elementset_name + '\n'
if not beamsection_obj.References:
if len(self.beamsection_objects) == 1: # all beam elements have the section of this beamsection_obj
f.write(material_elementset_line)
f.write('Eall\n')
else: # remaining beam elements have the beamsection_obj of this beamsection_obj
remaining_material_beam_elementset_line = material_elementset_line
else: # use reference shapes for the beamsection_obj of this beamsection_obj
f.write(material_elementset_line)
for ref in beamsection_obj.References:
no = []
el = []
r = ref[0].Shape.getElement(ref[1])
if r.ShapeType == 'Edge':
# print ' BeamSectionReferenceEdge : ', ref[0].Name, ', ', ref[0].Label, ' --> ', ref[1]
no = self.mesh_object.FemMesh.getNodesByEdge(r)
el = getFemElementsByNodes(self.fem_element_table, no)
else:
print ' No Edge, but BeamSection needs Edges as reference shapes!'
for e in sorted(el):
f.write(str(e) + ',\n')
e_count += len(el)
e_referenced += el
# write remaining beamsection elements
if remaining_material_beam_elementset_line:
f.write(remaining_material_beam_elementset_line)
f.write('**remaining elements\n')
for e in self.fem_element_table:
if e not in e_referenced:
e_not_referenced.append(e)
for e in sorted(e_not_referenced):
f.write(str(e) + ',\n')
e_count += len(e_not_referenced)
f.write('\n')
elif self.shellthickness_objects: # all fem_elements are shells --> shell mesh
remaining_material_shellthicknes_elementset_line = None
e_count = 0
e_referenced = []
e_not_referenced = []
for si, s in enumerate(self.shellthickness_objects):
shellthickness_obj = s['Object']
material_elementset_name = mat_obj.Name + shellthickness_obj.Name
if len(material_elementset_name) > 80: # standard max identifier lenght in CalculiX
material_elementset_name = 'Mat' + str(mi) + 'Shell' + str(si)
s['MaterialElementsetName'] = material_elementset_name # the last material is taken in def write_femelementsets()
material_elementset_line = '*ELSET,ELSET=' + material_elementset_name + '\n'
if not shellthickness_obj.References:
if len(self.shellthickness_objects) == 1: # all shell elements have the thickness of this shellthickness_obj
f.write(material_elementset_line)
f.write('Eall\n')
else: # remaining shell elements have the thickness of this shellthickness_obj
remaining_material_shellthicknes_elementset_line = material_elementset_line
else: # use reference shapes for the thickness of this shellthickness_obj
f.write(material_elementset_line)
for ref in shellthickness_obj.References:
no = []
el = []
r = ref[0].Shape.getElement(ref[1])
if r.ShapeType == 'Face':
# print ' ShellThicknessReferenceFace : ', ref[0].Name, ', ', ref[0].Label, ' --> ', ref[1]
no = self.mesh_object.FemMesh.getNodesByFace(r)
el = getFemElementsByNodes(self.fem_element_table, no)
else:
print ' No Face, but ShellThickness needs Faces as reference shapes!'
for e in sorted(el):
f.write(str(e) + ',\n')
e_count += len(el)
e_referenced += el
# write remaining shellthickness elements
if remaining_material_shellthicknes_elementset_line:
f.write(remaining_material_shellthicknes_elementset_line)
f.write('**remaining elements\n')
for e in self.fem_element_table:
if e not in e_referenced:
e_not_referenced.append(e)
for e in sorted(e_not_referenced):
f.write(str(e) + ',\n')
e_count += len(e_not_referenced)
f.write('\n')
else: # all fem_elements are solids --> volume mesh
material_elementset_name = 'MechanicalMaterialSolid'
f.write('*ELSET,ELSET=' + material_elementset_name + '\n')
f.write('Eall\n')
if hasattr(self, 'fem_element_table'):
if e_count != len(self.fem_element_table):
print 'ERROR: self.fem_element_table != e_count'
print 'Elements written to CalculiX file: ', e_count
print 'Elements of the FreeCAD FEM Mesh: ', len(self.fem_element_table)
for ccx_elset in self.ccx_elsets:
# print(ccx_elset)
f.write('*ELSET,ELSET=' + ccx_elset['ccx_elset_name'] + '\n')
if ccx_elset['ccx_elset'] == self.ccx_eall:
f.write(self.ccx_eall + '\n')
else:
for elid in ccx_elset['ccx_elset']:
f.write(str(elid) + ',\n')
def write_node_sets_constraints_fixed(self, f):
f.write('\n***********************************************************\n')
@ -272,34 +197,28 @@ class inp_writer:
f.write('\n***********************************************************\n')
f.write('** Sections\n')
f.write('** written by {} function\n'.format(sys._getframe().f_code.co_name))
for m in self.material_objects:
mat_obj = m['Object']
mat_name = mat_obj.Material['Name'][:80]
if self.beamsection_objects: # all fem_elements are beams
for b in self.beamsection_objects:
beamsection_obj = b['Object']
material_elementset_name = b['MaterialElementsetName']
el_set = 'ELSET=' + material_elementset_name + ', '
material = 'MATERIAL=' + mat_name
el_prop = '*BEAM SECTION, ' + el_set + material + ', SECTION=RECT\n'
sc_prop = str(beamsection_obj.Hight.getValueAs('mm')) + ', ' + str(beamsection_obj.Width.getValueAs('mm')) + '\n'
f.write(el_prop)
f.write(sc_prop)
elif self.shellthickness_objects: # all fem_elements are shells
for s in self.shellthickness_objects:
shellthickness_obj = s['Object']
material_elementset_name = s['MaterialElementsetName']
el_set = 'ELSET=' + material_elementset_name + ', '
material = 'MATERIAL=' + mat_name
el_prop = '*SHELL SECTION, ' + el_set + material + '\n'
sc_prop = str(shellthickness_obj.Thickness.getValueAs('mm')) + '\n'
f.write(el_prop)
f.write(sc_prop)
else: # all fem_elements are solids
el_set = 'ELSET=' + 'MechanicalMaterialSolid' + ', '
material = 'MATERIAL=' + mat_name
el_prop = '*SOLID SECTION, ' + el_set + material + '\n'
f.write(el_prop)
for ccx_elset in self.ccx_elsets:
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']
setion_def = '*BEAM SECTION, ' + elsetdef + material + ', SECTION=RECT\n'
setion_geo = str(beamsec_obj.Hight.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']
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']
setion_def = '*SOLID SECTION, ' + elsetdef + material + '\n'
f.write(setion_def)
def write_step_begin(self, f):
f.write('\n***********************************************************\n')
@ -550,6 +469,244 @@ class inp_writer:
f.write('** Loads (nodal loads) --> N\n')
f.write('**\n')
# self.ccx_elsets = [ {
# 'beamsection_obj' : 'beamsection_obj' if exists
# 'shellthickness_obj' : shellthickness_obj' if exists
# '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 !!!
# },
# {}, ... , {} ]
def get_ccx_elsets_single_mat_single_beam(self):
mat_obj = self.material_objects[0]['Object']
beamsec_obj = self.beamsection_objects[0]['Object']
ccx_elset = {}
ccx_elset['beamsection_obj'] = beamsec_obj
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]
self.ccx_elsets.append(ccx_elset)
def get_ccx_elsets_single_mat_single_shell(self):
mat_obj = self.material_objects[0]['Object']
shellth_obj = self.shellthickness_objects[0]['Object']
ccx_elset = {}
ccx_elset['shellthickness_obj'] = shellth_obj
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]
self.ccx_elsets.append(ccx_elset)
def get_ccx_elsets_single_mat_solid(self):
mat_obj = self.material_objects[0]['Object']
ccx_elset = {}
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]
self.ccx_elsets.append(ccx_elset)
def get_ccx_elsets_single_mat_multiple_beam(self):
mat_obj = self.material_objects[0]['Object']
self.get_beamsection_element_sets()
for beamsec_data in self.beamsection_objects:
beamsec_obj = beamsec_data['Object']
ccx_elset = {}
ccx_elset['beamsection_obj'] = beamsec_obj
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]
self.ccx_elsets.append(ccx_elset)
def get_ccx_elsets_single_mat_multiple_shell(self):
mat_obj = self.material_objects[0]['Object']
self.get_shellthickness_element_sets()
for shellth_data in self.shellthickness_objects:
shellth_obj = shellth_data['Object']
ccx_elset = {}
ccx_elset['shellthickness_obj'] = shellth_obj
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]
self.ccx_elsets.append(ccx_elset)
def get_ccx_elsets_multiple_mat_single_beam(self):
beamsec_obj = self.beamsection_objects[0]['Object']
self.get_material_element_sets()
for mat_data in self.material_objects:
mat_obj = mat_data['Object']
ccx_elset = {}
ccx_elset['beamsection_obj'] = beamsec_obj
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]
self.ccx_elsets.append(ccx_elset)
def get_ccx_elsets_multiple_mat_single_shell(self):
shellth_obj = self.shellthickness_objects[0]['Object']
self.get_material_element_sets()
for mat_data in self.material_objects:
mat_obj = mat_data['Object']
ccx_elset = {}
ccx_elset['shellthickness_obj'] = shellth_obj
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]
self.ccx_elsets.append(ccx_elset)
def get_ccx_elsets_multiple_mat_solid(self):
self.get_material_element_sets()
for mat_data in self.material_objects:
mat_obj = mat_data['Object']
ccx_elset = {}
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]
self.ccx_elsets.append(ccx_elset)
def get_ccx_elsets_multiple_mat_multiple_beam(self):
self.get_beamsection_element_sets()
self.get_material_element_sets()
for beamsec_data in self.beamsection_objects:
beamsec_obj = beamsec_data['Object']
for mat_data in self.material_objects:
mat_obj = mat_data['Object']
ccx_elset = {}
ccx_elset['beamsection_obj'] = beamsec_obj
elemids = []
for elemid in beamsec_data['FEMElements']:
if elemid in mat_data['FEMElements']:
elemids.append(elemid)
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]
self.ccx_elsets.append(ccx_elset)
def get_ccx_elsets_multiple_mat_multiple_shell(self):
self.get_shellthickness_element_sets()
self.get_material_element_sets()
for shellth_data in self.shellthickness_objects:
shellth_obj = shellth_data['Object']
for mat_data in self.material_objects:
mat_obj = mat_data['Object']
ccx_elset = {}
ccx_elset['shellthickness_obj'] = shellth_obj
elemids = []
for elemid in shellth_data['FEMElements']:
if elemid in mat_data['FEMElements']:
elemids.append(elemid)
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]
self.ccx_elsets.append(ccx_elset)
def get_material_element_sets(self):
# get femelements for reference shapes of each material_obj
FreeCAD.Console.PrintError('Multiple materials defined, this could result in a broken CalculiX input file!\n')
# TODO get the elset nodeids and write them to mat_data['FEMElements']
# if not hasattr(self, 'fem_element_table'):
# self.fem_element_table = getFemElementTable(self.mesh_object.FemMesh)
for mat_data_i, mat_data in enumerate(self.material_objects):
mat_data['ShortName'] = 'Mat' + str(mat_data_i) # unique short ccx_identifier
# mat_obj = mat_data['Object']
mat_data['FEMElements'] = self.ccx_eall
def get_beamsection_element_sets(self):
# get femelements for reference shapes of each beamsec_obj
if not hasattr(self, 'fem_element_table'):
self.fem_element_table = getFemElementTable(self.mesh_object.FemMesh)
count_femelements_beamsection = 0
referenced_femelements_beamsection = []
has_remaining_femelements_beamsection = None
for beamsec_data_i, beamsec_data in enumerate(self.beamsection_objects):
beamsec_data['ShortName'] = 'Beam' + str(beamsec_data_i) # unique short ccx_identifier
beamsec_obj = beamsec_data['Object']
if beamsec_obj.References:
ref_shape_femelements = []
for ref in beamsec_obj.References:
nodeids = []
elemids = []
r = ref[0].Shape.getElement(ref[1])
if r.ShapeType == 'Edge':
# print(' BeamSectionReferenceEdge : ', ref[0].Name, ', ', ref[0].Label, ' --> ', ref[1])
nodeids = self.mesh_object.FemMesh.getNodesByEdge(r)
elemids = getFemElementsByNodes(self.fem_element_table, nodeids)
else:
print(' No Edge, but BeamSection needs Edges as reference shapes!')
ref_shape_femelements += elemids
referenced_femelements_beamsection += elemids
count_femelements_beamsection += len(elemids)
beamsec_data['FEMElements'] = ref_shape_femelements
else:
has_remaining_femelements_beamsection = beamsec_obj.Name
# get remaining femelements for the beamsection objects
if has_remaining_femelements_beamsection:
remaining_femelements_beamsection = []
for elemid in self.fem_element_table:
if elemid not in referenced_femelements_beamsection:
remaining_femelements_beamsection.append(elemid)
count_femelements_beamsection += len(remaining_femelements_beamsection)
for beamsec_data in self.beamsection_objects:
beamsec_obj = beamsec_data['Object']
if beamsec_obj.Name == has_remaining_femelements_beamsection:
beamsec_data['FEMElements'] = sorted(remaining_femelements_beamsection)
# check if all worked out well
if not femelements_count_ok(self.fem_element_table, count_femelements_beamsection):
FreeCAD.Console.PrintError('Error in BeamSection -- > femelements_count_ok failed!\n')
def get_shellthickness_element_sets(self):
# get femelements for reference shapes of each shellth_obj
if not hasattr(self, 'fem_element_table'):
self.fem_element_table = getFemElementTable(self.mesh_object.FemMesh)
count_femelements_shellthickness = 0
referenced_femelements_shellthickness = []
has_remaining_femelements_shellthickness = None
for shellth_data_i, shellth_data in enumerate(self.shellthickness_objects):
shellth_data['ShortName'] = 'Shell' + str(shellth_data_i) # unique short ccx_identifier
shellth_obj = shellth_data['Object']
if shellth_obj.References:
ref_shape_femelements = []
for ref in shellth_obj.References:
nodeids = []
elemids = []
r = ref[0].Shape.getElement(ref[1])
if r.ShapeType == 'Face':
# print (' ShellThicknessReferenceFace : ', ref[0].Name, ', ', ref[0].Label, ' --> ', ref[1])
nodeids = self.mesh_object.FemMesh.getNodesByFace(r)
elemids = getFemElementsByNodes(self.fem_element_table, nodeids)
else:
print(' No Face, but ShellThickness needs Faces as reference shapes!')
ref_shape_femelements += elemids
referenced_femelements_shellthickness += elemids
count_femelements_shellthickness += len(elemids)
shellth_data['FEMElements'] = ref_shape_femelements
else:
has_remaining_femelements_shellthickness = shellth_obj.Name
# get remaining femelements for the shellthickness objects
if has_remaining_femelements_shellthickness:
remaining_femelements_shellthickness = []
for elemid in self.fem_element_table:
if elemid not in referenced_femelements_shellthickness:
remaining_femelements_shellthickness.append(elemid)
count_femelements_shellthickness += len(remaining_femelements_shellthickness)
for shellth_data in self.shellthickness_objects:
shellth_obj = shellth_data['Object']
if shellth_obj.Name == has_remaining_femelements_shellthickness:
shellth_data['FEMElements'] = sorted(remaining_femelements_shellthickness)
# check if all worked out well
if not femelements_count_ok(self.fem_element_table, count_femelements_shellthickness):
FreeCAD.Console.PrintError('Error in ShellThickness -- > femelements_count_ok failed!\n')
# Helpers
def getTriangleArea(P1, P2, P3):
@ -610,3 +767,48 @@ def is_shell_mesh(fem_mesh):
def is_beam_mesh(fem_mesh):
if fem_mesh.VolumeCount == 0 and fem_mesh.FaceCount == 0 and fem_mesh.EdgeCount > 0: # beam mesh
return True
def femelements_count_ok(fem_element_table, count_femelements):
if count_femelements == len(fem_element_table):
# print('Count Elements written to CalculiX file: ', count_femelements)
# print('Count Elements of the FreeCAD FEM Mesh: ', len(fem_element_table))
return True
else:
print('ERROR: self.fem_element_table != count_femelements')
print('Count Elements written to CalculiX file: ', count_femelements)
print('Count Elements of the FreeCAD FEM Mesh: ', len(fem_element_table))
return False
def get_ccx_elset_beam_name(mat_name, beamsec_name, mat_short_name=None, beamsec_short_name=None):
if not mat_short_name:
mat_short_name = 'Mat0'
if not beamsec_short_name:
beamsec_short_name = 'Beam0'
if len(mat_name + beamsec_name) > 20: # max identifier lenght in CalculiX for beam elsets
return mat_short_name + beamsec_short_name
else:
return mat_name + beamsec_name
def get_ccx_elset_shell_name(mat_name, shellth_name, mat_short_name=None, shellth_short_name=None):
if not mat_short_name:
mat_short_name = 'Mat0'
if not shellth_short_name:
shellth_short_name = 'Shell0'
if len(mat_name + shellth_name) > 80: # standard max identifier lenght in CalculiX
return mat_short_name + shellth_short_name
else:
return mat_name + shellth_name
def get_ccx_elset_solid_name(mat_name, solid_name=None, mat_short_name=None):
if not solid_name:
solid_name = 'Solid'
if not mat_short_name:
mat_short_name = 'Mat0'
if len(mat_name + solid_name) > 80: # standard max identifier lenght in CalculiX
return mat_short_name + solid_name
else:
return mat_name + solid_name