FEM: ccx input file, use even shorter elset names for the short names and raise exception if the elset name is still to long

This commit is contained in:
Bernd Hahnebach
2018-01-23 06:39:01 +01:00
committed by wmayer
parent 3824df2eba
commit 6811d528f6
3 changed files with 39 additions and 37 deletions

View File

@@ -401,15 +401,15 @@ def get_femelement_sets_from_group_data(femmesh, fem_objects):
def get_elset_short_name(obj, i):
if hasattr(obj, "Proxy") and obj.Proxy.Type == 'Fem::Material':
return 'Mat' + str(i)
return 'M' + str(i)
elif hasattr(obj, "Proxy") and obj.Proxy.Type == 'Fem::FemElementGeometry1D':
return 'Beam' + str(i)
return 'B' + str(i)
elif hasattr(obj, "Proxy") and obj.Proxy.Type == 'Fem::FemElementFluid1D':
return 'Fluid' + str(i)
return 'F' + str(i)
elif hasattr(obj, "Proxy") and obj.Proxy.Type == 'Fem::FemElementGeometry2D':
return 'Shell' + str(i)
return 'S' + str(i)
else:
print('Error: ', obj.Name, ' --> ', obj.Proxy.Type)
FreeCAD.Console.PrintError('Error in creating short elset name for obj: ' + obj.Name + ' --> Proxy.Type: ' + str(obj.Proxy.Type) + '\n')
def get_force_obj_vertex_nodeload_table(femmesh, frc_obj):

View File

@@ -1083,7 +1083,7 @@ 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'}]
names = [{'short': 'M0'}, {'short': 'B0'}]
ccx_elset = {}
ccx_elset['beamsection_obj'] = beamsec_obj
ccx_elset['ccx_elset'] = self.ccx_eedges
@@ -1096,7 +1096,7 @@ 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']}]
names = [{'short': 'M0'}, {'short': beamsec_data['ShortName']}]
ccx_elset = {}
ccx_elset['beamsection_obj'] = beamsec_obj
ccx_elset['ccx_elset'] = beamsec_data['FEMElements']
@@ -1109,7 +1109,7 @@ 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'}]
names = [{'short': mat_data['ShortName']}, {'short': 'B0'}]
ccx_elset = {}
ccx_elset['beamsection_obj'] = beamsec_obj
ccx_elset['ccx_elset'] = mat_data['FEMElements']
@@ -1140,7 +1140,7 @@ 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'}]
names = [{'short': 'M0'}, {'short': 'F0'}]
ccx_elset = {}
ccx_elset['fluidsection_obj'] = fluidsec_obj
ccx_elset['ccx_elset'] = self.ccx_eedges
@@ -1153,7 +1153,7 @@ 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']}]
names = [{'short': 'M0'}, {'short': fluidsec_data['ShortName']}]
ccx_elset = {}
ccx_elset['fluidsection_obj'] = fluidsec_obj
ccx_elset['ccx_elset'] = fluidsec_data['FEMElements']
@@ -1166,7 +1166,7 @@ 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'}]
names = [{'short': mat_data['ShortName']}, {'short': 'F0'}]
ccx_elset = {}
ccx_elset['fluidsection_obj'] = fluidsec_obj
ccx_elset['ccx_elset'] = mat_data['FEMElements']
@@ -1197,7 +1197,7 @@ 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'}]
names = [{'long': mat_obj.Name, 'short': 'M0'}, {'long': shellth_obj.Name, 'short': 'S0'}]
ccx_elset = {}
ccx_elset['shellthickness_obj'] = shellth_obj
ccx_elset['ccx_elset'] = self.ccx_efaces
@@ -1210,7 +1210,7 @@ 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']}]
names = [{'long': mat_obj.Name, 'short': 'M0'}, {'long': shellth_obj.Name, 'short': shellth_data['ShortName']}]
ccx_elset = {}
ccx_elset['shellthickness_obj'] = shellth_obj
ccx_elset['ccx_elset'] = shellth_data['FEMElements']
@@ -1223,7 +1223,7 @@ 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'}]
names = [{'long': mat_obj.Name, 'short': mat_data['ShortName']}, {'long': shellth_obj.Name, 'short': 'S0'}]
ccx_elset = {}
ccx_elset['shellthickness_obj'] = shellth_obj
ccx_elset['ccx_elset'] = mat_data['FEMElements']
@@ -1249,10 +1249,11 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
ccx_elset['mat_obj_name'] = mat_obj.Name
ccx_elset['ccx_mat_name'] = mat_obj.Material['Name']
self.ccx_elsets.append(ccx_elset)
# solid
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'}]
names = [{'long': mat_obj.Name, 'short': 'M0'}, {'long': 'Solid', 'short': 'Solid'}]
ccx_elset = {}
ccx_elset['ccx_elset'] = self.ccx_evolumes
ccx_elset['ccx_elset_name'] = get_ccx_elset_name_standard(names)
@@ -1273,6 +1274,7 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
# Helpers
# ccx elset names: M .. Material, B .. Beam, F .. Fluid, S .. Shell, TODO write comment into input file to elset ids and elset attributes
def get_ccx_elset_name_standard(names):
# standard max length = 80
ccx_elset_name = ''

View File

@@ -58,29 +58,29 @@ Eedges
***********************************************************
** Element sets for materials and FEM element type (solid, shell, beam, fluid)
** written by write_element_sets_material_and_femelement_type function
*ELSET,ELSET=Mat0Fluid0
*ELSET,ELSET=M0F0
1,
*ELSET,ELSET=Mat0Fluid1
*ELSET,ELSET=M0F1
2,
*ELSET,ELSET=Mat0Fluid2
*ELSET,ELSET=M0F2
3,
5,
*ELSET,ELSET=Mat0Fluid3
*ELSET,ELSET=M0F3
4,
*ELSET,ELSET=Mat0Fluid4
*ELSET,ELSET=M0F4
6,
*ELSET,ELSET=Mat0Fluid5
*ELSET,ELSET=M0F5
7,
*ELSET,ELSET=Mat0Fluid6
*ELSET,ELSET=M0F6
8,
*ELSET,ELSET=Mat0Fluid7
*ELSET,ELSET=M0F7
9,
11,
*ELSET,ELSET=Mat0Fluid8
*ELSET,ELSET=M0F8
10,
*ELSET,ELSET=Mat0Fluid9
*ELSET,ELSET=M0F9
12,
*ELSET,ELSET=Mat0Fluid10
*ELSET,ELSET=M0F10
13,
***********************************************************
@@ -101,26 +101,26 @@ Eedges
***********************************************************
** Sections
** written by write_femelementsets function
*FLUID SECTION, ELSET=Mat0Fluid0, TYPE=PIPE INOUT, MATERIAL=FluidMaterial
*FLUID SECTION, ELSET=Mat0Fluid1, TYPE=PIPE ENTRANCE, MATERIAL=FluidMaterial
*FLUID SECTION, ELSET=M0F0, TYPE=PIPE INOUT, MATERIAL=FluidMaterial
*FLUID SECTION, ELSET=M0F1, TYPE=PIPE ENTRANCE, MATERIAL=FluidMaterial
31416.0,25133.0
*FLUID SECTION, ELSET=Mat0Fluid2, TYPE=PIPE MANNING, MATERIAL=FluidMaterial
*FLUID SECTION, ELSET=M0F2, TYPE=PIPE MANNING, MATERIAL=FluidMaterial
31416.0,50 ,0.002
*FLUID SECTION, ELSET=Mat0Fluid3, TYPE=PIPE BEND, MATERIAL=FluidMaterial
*FLUID SECTION, ELSET=M0F3, TYPE=PIPE BEND, MATERIAL=FluidMaterial
31416.0,1.5,45.0,0.4
*FLUID SECTION, ELSET=Mat0Fluid4, TYPE=PIPE ENLARGEMENT, MATERIAL=FluidMaterial
*FLUID SECTION, ELSET=M0F4, TYPE=PIPE ENLARGEMENT, MATERIAL=FluidMaterial
31416.0,70686.0
*FLUID SECTION, ELSET=Mat0Fluid5, TYPE=PIPE MANNING, MATERIAL=FluidMaterial
*FLUID SECTION, ELSET=M0F5, TYPE=PIPE MANNING, MATERIAL=FluidMaterial
70686.0,75 ,0.002
*FLUID SECTION, ELSET=Mat0Fluid6, TYPE=PIPE CONTRACTION, MATERIAL=FluidMaterial
*FLUID SECTION, ELSET=M0F6, TYPE=PIPE CONTRACTION, MATERIAL=FluidMaterial
70686.0,17671.0
*FLUID SECTION, ELSET=Mat0Fluid7, TYPE=PIPE MANNING, MATERIAL=FluidMaterial
*FLUID SECTION, ELSET=M0F7, TYPE=PIPE MANNING, MATERIAL=FluidMaterial
17671.0,37.5 ,0.002
*FLUID SECTION, ELSET=Mat0Fluid8, TYPE=PIPE GATE VALVE, MATERIAL=FluidMaterial
*FLUID SECTION, ELSET=M0F8, TYPE=PIPE GATE VALVE, MATERIAL=FluidMaterial
17671.0,0.5
*FLUID SECTION, ELSET=Mat0Fluid9, TYPE=PIPE ENLARGEMENT, MATERIAL=FluidMaterial
*FLUID SECTION, ELSET=M0F9, TYPE=PIPE ENLARGEMENT, MATERIAL=FluidMaterial
17671.0,1e+12
*FLUID SECTION, ELSET=Mat0Fluid10, TYPE=PIPE INOUT, MATERIAL=FluidMaterial
*FLUID SECTION, ELSET=M0F10, TYPE=PIPE INOUT, MATERIAL=FluidMaterial
***********************************************************
** At least one step is needed to run an CalculiX analysis of FreeCAD