FEM: ccx writer, better elset name def and raise exception if name is too long

This commit is contained in:
Bernd Hahnebach
2018-01-23 06:38:53 +01:00
committed by wmayer
parent c78504e6eb
commit c8e87a039e

View File

@@ -1081,10 +1081,11 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
def get_ccx_elsets_single_mat_single_beam(self):
mat_obj = self.material_objects[0]['Object']
beamsec_obj = self.beamsection_objects[0]['Object']
names = [{'short': 'Mat0'}, {'short': 'Beam0'}]
ccx_elset = {}
ccx_elset['beamsection_obj'] = beamsec_obj
ccx_elset['ccx_elset'] = self.ccx_eedges
ccx_elset['ccx_elset_name'] = get_ccx_elset_beam_name(mat_obj.Name, beamsec_obj.Name)
ccx_elset['ccx_elset_name'] = get_ccx_elset_name_short(names)
ccx_elset['mat_obj_name'] = mat_obj.Name
ccx_elset['ccx_mat_name'] = mat_obj.Material['Name']
self.ccx_elsets.append(ccx_elset)
@@ -1092,10 +1093,11 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
def get_ccx_elsets_single_mat_single_fluid(self):
mat_obj = self.material_objects[0]['Object']
fluidsec_obj = self.fluidsection_objects[0]['Object']
names = [{'short': 'Mat0'}, {'short': 'Fluid0'}]
ccx_elset = {}
ccx_elset['fluidsection_obj'] = fluidsec_obj
ccx_elset['ccx_elset'] = self.ccx_eedges
ccx_elset['ccx_elset_name'] = get_ccx_elset_fluid_name(mat_obj.Name, fluidsec_obj.Name)
ccx_elset['ccx_elset_name'] = get_ccx_elset_name_short(names)
ccx_elset['mat_obj_name'] = mat_obj.Name
ccx_elset['ccx_mat_name'] = mat_obj.Material['Name']
self.ccx_elsets.append(ccx_elset)
@@ -1103,19 +1105,21 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
def get_ccx_elsets_single_mat_single_shell(self):
mat_obj = self.material_objects[0]['Object']
shellth_obj = self.shellthickness_objects[0]['Object']
names = [{'long': mat_obj.Name, 'short': 'Mat0'}, {'long': shellth_obj.Name, 'short': 'Shell0'}]
ccx_elset = {}
ccx_elset['shellthickness_obj'] = shellth_obj
ccx_elset['ccx_elset'] = self.ccx_efaces
ccx_elset['ccx_elset_name'] = get_ccx_elset_shell_name(mat_obj.Name, shellth_obj.Name)
ccx_elset['ccx_elset_name'] = get_ccx_elset_name_standard(names)
ccx_elset['mat_obj_name'] = mat_obj.Name
ccx_elset['ccx_mat_name'] = mat_obj.Material['Name']
self.ccx_elsets.append(ccx_elset)
def get_ccx_elsets_single_mat_solid(self):
mat_obj = self.material_objects[0]['Object']
names = [{'long': mat_obj.Name, 'short': 'Mat0'}, {'long': 'Solid', 'short': 'Solid'}]
ccx_elset = {}
ccx_elset['ccx_elset'] = self.ccx_evolumes
ccx_elset['ccx_elset_name'] = get_ccx_elset_solid_name(mat_obj.Name)
ccx_elset['ccx_elset_name'] = get_ccx_elset_name_standard(names)
ccx_elset['mat_obj_name'] = mat_obj.Name
ccx_elset['ccx_mat_name'] = mat_obj.Material['Name']
self.ccx_elsets.append(ccx_elset)
@@ -1124,10 +1128,11 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
mat_obj = self.material_objects[0]['Object']
for beamsec_data in self.beamsection_objects:
beamsec_obj = beamsec_data['Object']
names = [{'short': 'Mat0'}, {'short': beamsec_data['ShortName']}]
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['ccx_elset_name'] = get_ccx_elset_name_short(names)
ccx_elset['mat_obj_name'] = mat_obj.Name
ccx_elset['ccx_mat_name'] = mat_obj.Material['Name']
self.ccx_elsets.append(ccx_elset)
@@ -1136,10 +1141,11 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
mat_obj = self.material_objects[0]['Object']
for fluidsec_data in self.fluidsection_objects:
fluidsec_obj = fluidsec_data['Object']
names = [{'short': 'Mat0'}, {'short': fluidsec_data['ShortName']}]
ccx_elset = {}
ccx_elset['fluidsection_obj'] = fluidsec_obj
ccx_elset['ccx_elset'] = fluidsec_data['FEMElements']
ccx_elset['ccx_elset_name'] = get_ccx_elset_fluid_name(mat_obj.Name, fluidsec_obj.Name, None, fluidsec_data['ShortName'])
ccx_elset['ccx_elset_name'] = get_ccx_elset_name_short(names)
ccx_elset['mat_obj_name'] = mat_obj.Name
ccx_elset['ccx_mat_name'] = mat_obj.Material['Name']
self.ccx_elsets.append(ccx_elset)
@@ -1148,10 +1154,11 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
mat_obj = self.material_objects[0]['Object']
for shellth_data in self.shellthickness_objects:
shellth_obj = shellth_data['Object']
names = [{'long': mat_obj.Name, 'short': 'Mat0'}, {'long': shellth_obj.Name, 'short': shellth_data['ShortName']}]
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['ccx_elset_name'] = get_ccx_elset_name_standard(names)
ccx_elset['mat_obj_name'] = mat_obj.Name
ccx_elset['ccx_mat_name'] = mat_obj.Material['Name']
self.ccx_elsets.append(ccx_elset)
@@ -1160,10 +1167,11 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
beamsec_obj = self.beamsection_objects[0]['Object']
for mat_data in self.material_objects:
mat_obj = mat_data['Object']
names = [{'short': mat_data['ShortName']}, {'short': 'Beam0'}]
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['ccx_elset_name'] = get_ccx_elset_name_short(names)
ccx_elset['mat_obj_name'] = mat_obj.Name
ccx_elset['ccx_mat_name'] = mat_obj.Material['Name']
self.ccx_elsets.append(ccx_elset)
@@ -1172,10 +1180,11 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
fluidsec_obj = self.fluidsection_objects[0]['Object']
for mat_data in self.material_objects:
mat_obj = mat_data['Object']
names = [{'short': mat_data['ShortName']}, {'short': 'Fluid0'}]
ccx_elset = {}
ccx_elset['fluidsection_obj'] = fluidsec_obj
ccx_elset['ccx_elset'] = mat_data['FEMElements']
ccx_elset['ccx_elset_name'] = get_ccx_elset_fluid_name(mat_obj.Name, fluidsec_obj.Name, mat_data['ShortName'])
ccx_elset['ccx_elset_name'] = get_ccx_elset_name_short(names)
ccx_elset['mat_obj_name'] = mat_obj.Name
ccx_elset['ccx_mat_name'] = mat_obj.Material['Name']
self.ccx_elsets.append(ccx_elset)
@@ -1184,10 +1193,11 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
shellth_obj = self.shellthickness_objects[0]['Object']
for mat_data in self.material_objects:
mat_obj = mat_data['Object']
names = [{'long': mat_obj.Name, 'short': mat_data['ShortName']}, {'long': shellth_obj.Name, 'short': 'Shell0'}]
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['ccx_elset_name'] = get_ccx_elset_name_standard(names)
ccx_elset['mat_obj_name'] = mat_obj.Name
ccx_elset['ccx_mat_name'] = mat_obj.Material['Name']
self.ccx_elsets.append(ccx_elset)
@@ -1195,9 +1205,10 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
def get_ccx_elsets_multiple_mat_solid(self):
for mat_data in self.material_objects:
mat_obj = mat_data['Object']
names = [{'long': mat_obj.Name, 'short': mat_data['ShortName']}, {'long': 'Solid', 'short': 'Solid'}]
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['ccx_elset_name'] = get_ccx_elset_name_standard(names)
ccx_elset['mat_obj_name'] = mat_obj.Name
ccx_elset['ccx_mat_name'] = mat_obj.Material['Name']
self.ccx_elsets.append(ccx_elset)
@@ -1207,6 +1218,7 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
beamsec_obj = beamsec_data['Object']
for mat_data in self.material_objects:
mat_obj = mat_data['Object']
names = [{'short': mat_data['ShortName']}, {'short': beamsec_data['ShortName']}]
ccx_elset = {}
ccx_elset['beamsection_obj'] = beamsec_obj
elemids = []
@@ -1214,7 +1226,7 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
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['ccx_elset_name'] = get_ccx_elset_name_short(names)
ccx_elset['mat_obj_name'] = mat_obj.Name
ccx_elset['ccx_mat_name'] = mat_obj.Material['Name']
self.ccx_elsets.append(ccx_elset)
@@ -1224,6 +1236,7 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
fluidsec_obj = fluidsec_data['Object']
for mat_data in self.material_objects:
mat_obj = mat_data['Object']
names = [{'short': mat_data['ShortName']}, {'short': fluidsec_data['ShortName']}]
ccx_elset = {}
ccx_elset['fluidsection_obj'] = fluidsec_obj
elemids = []
@@ -1231,7 +1244,7 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
if elemid in mat_data['FEMElements']:
elemids.append(elemid)
ccx_elset['ccx_elset'] = elemids
ccx_elset['ccx_elset_name'] = get_ccx_elset_fluid_name(mat_obj.Name, fluidsec_obj.Name, mat_data['ShortName'], fluidsec_data['ShortName'])
ccx_elset['ccx_elset_name'] = get_ccx_elset_name_short(names)
ccx_elset['mat_obj_name'] = mat_obj.Name
ccx_elset['ccx_mat_name'] = mat_obj.Material['Name']
self.ccx_elsets.append(ccx_elset)
@@ -1241,6 +1254,7 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
shellth_obj = shellth_data['Object']
for mat_data in self.material_objects:
mat_obj = mat_data['Object']
names = [{'long': mat_obj.Name, 'short': mat_data['ShortName']}, {'long': shellth_obj.Name, 'short': shellth_data['ShortName']}]
ccx_elset = {}
ccx_elset['shellthickness_obj'] = shellth_obj
elemids = []
@@ -1248,55 +1262,41 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
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['ccx_elset_name'] = get_ccx_elset_name_standard(names)
ccx_elset['mat_obj_name'] = mat_obj.Name
ccx_elset['ccx_mat_name'] = mat_obj.Material['Name']
self.ccx_elsets.append(ccx_elset)
# Helpers
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 length in CalculiX for beam elsets
return mat_short_name + beamsec_short_name
def get_ccx_elset_name_standard(names):
# standard max length = 80
ccx_elset_name = ''
for name in names:
ccx_elset_name += name['long']
if len(ccx_elset_name) < 81:
return ccx_elset_name
else:
return mat_name + beamsec_name
ccx_elset_name = ''
for name in names:
ccx_elset_name += name['short']
if len(ccx_elset_name) < 81:
return ccx_elset_name
else:
error = 'FEM: Touble in ccx input file, because a elset name is longer than 80 character!' + ' ' + ccx_elset_name + '\n'
raise Exception(error)
def get_ccx_elset_fluid_name(mat_name, fluidsec_name, mat_short_name=None, fluidsec_short_name=None):
if not mat_short_name:
mat_short_name = 'Mat0'
if not fluidsec_short_name:
fluidsec_short_name = 'Fluid0'
if len(mat_name + fluidsec_name) > 20: # max identifier length in CalculiX for beam elsets
return mat_short_name + fluidsec_short_name
def get_ccx_elset_name_short(names):
# restricted max lenght = 20 (beam elsets)
ccx_elset_name = ''
for name in names:
ccx_elset_name += name['short']
if len(ccx_elset_name) < 21:
return ccx_elset_name
else:
return mat_name + fluidsec_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 length 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 length in CalculiX
return mat_short_name + solid_name
else:
return mat_name + solid_name
error = 'FEM: Touble in ccx input file, because a beam elset name is longer than 20 character!' + ' ' + ccx_elset_name + '\n'
raise Exception(error)
def is_fluid_section_inlet_outlet(ccx_elsets):