Skip to content

Commit

Permalink
FEM: beam rotation object, start to implement ccx writer
Browse files Browse the repository at this point in the history
  • Loading branch information
berndhahnebach committed Oct 27, 2017
1 parent 7d8f69b commit 8bc7d3f
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 2 deletions.
9 changes: 9 additions & 0 deletions src/Mod/Fem/FemInputWriter.py
Expand Up @@ -78,6 +78,7 @@ def __init__(self,
self.ccx_efaces = 'Efaces'
self.ccx_eedges = 'Eedges'
self.ccx_elsets = []
self.theshape = self.mesh_object.Shape
self.femmesh = self.mesh_object.FemMesh
self.femnodes_mesh = {}
self.femelement_table = {}
Expand Down Expand Up @@ -185,6 +186,14 @@ def get_element_geometry1D_elements(self):
self.femelement_table = FemMeshTools.get_femelement_table(self.femmesh)
FemMeshTools.get_femelement_sets(self.femmesh, self.femelement_table, self.beamsection_objects)

def get_element_rotation1D_elements(self):
# get for each geometry edge direction the element ids and write all into the objects
if not self.femelement_table:
self.femelement_table = FemMeshTools.get_femelement_table(self.femmesh)
FemMeshTools.get_femelement_direction1D_set(self.femmesh, self.femelement_table, self.beamrotation_objects, self.theshape)
# TODO we need an aditional parameter, if no reference shapes are defined it mean all edges
# if no reference shape is given we use all edges of the shape that was meshed, thus we pass theshape, ATM we gone pass it in any call

def get_element_fluid1D_elements(self):
# get element ids and write them into the objects
if not self.femelement_table:
Expand Down
11 changes: 9 additions & 2 deletions src/Mod/Fem/FemInputWriterCcx.py
Expand Up @@ -348,8 +348,7 @@ def write_element_sets_material_and_femelement_type(self, f):
elif len(self.beamsection_objects) >= 1:
self.get_element_geometry1D_elements()
# we will need to split the beams even for one beamobj
# because no beam in z-direction can be used in ccx without a special adjustment
# thus they need an own ccx_elset --> but this is ccx specific and thus should not be in input writer!
self.get_element_rotation1D_elements()
elif len(self.fluidsection_objects) > 1:
self.get_element_fluid1D_elements()

Expand Down Expand Up @@ -1109,6 +1108,11 @@ def get_ccx_elsets_single_mat_single_beam(self):
ccx_elset['mat_obj_name'] = mat_obj.Name
ccx_elset['ccx_mat_name'] = mat_obj.Material['Name']
self.ccx_elsets.append(ccx_elset)
'''
ATM we have one elset for all elements because all elements have the same cs and the same material
new we need to split this elset as follows
one elset for each beamrotation for each beamdirechtion of all modell
'''

#------------------------------------------------------------------------------------------------------------
def get_ccx_elsets_single_mat_single_beam_edit(self):
Expand Down Expand Up @@ -1170,6 +1174,7 @@ def get_ccx_elsets_single_mat_multiple_beam(self):
ccx_elset['mat_obj_name'] = mat_obj.Name
ccx_elset['ccx_mat_name'] = mat_obj.Material['Name']
self.ccx_elsets.append(ccx_elset)
# TODO split elset in the regard of beam rotations and beam directions
#------------------------------------------------------------------------------------------------------------

def get_ccx_elsets_single_mat_multiple_fluid(self):
Expand Down Expand Up @@ -1207,6 +1212,7 @@ def get_ccx_elsets_multiple_mat_single_beam(self):
ccx_elset['mat_obj_name'] = mat_obj.Name
ccx_elset['ccx_mat_name'] = mat_obj.Material['Name']
self.ccx_elsets.append(ccx_elset)
# TODO split elset in the regard of beam rotations and beam directions

def get_ccx_elsets_multiple_mat_single_fluid(self):
fluidsec_obj = self.fluidsection_objects[0]['Object']
Expand Down Expand Up @@ -1258,6 +1264,7 @@ def get_ccx_elsets_multiple_mat_multiple_beam(self):
ccx_elset['mat_obj_name'] = mat_obj.Name
ccx_elset['ccx_mat_name'] = mat_obj.Material['Name']
self.ccx_elsets.append(ccx_elset)
# TODO split elset in the regard of beam rotations and beam directions

def get_ccx_elsets_multiple_mat_multiple_fluid(self):
for fluidsec_data in self.fluidsection_objects:
Expand Down
6 changes: 6 additions & 0 deletions src/Mod/Fem/FemMeshTools.py
Expand Up @@ -357,6 +357,12 @@ def get_femelement_sets(femmesh, femelement_table, fem_objects, femnodes_ele_tab
FreeCAD.Console.PrintError('Error in get_femelement_sets -- > femelements_count_ok() failed!\n')


def get_femelement_direction1D_set(emmesh, femelement_table, beamrotation_objects, theshape=None)
# get for each geometry edge direction the element ids and write all into the beamrotation_objects
# means no return value, we gone write into the beamrotation_objects
# if no reference shape is given, all edges from thepart are used. Means in this case the Shape which was meshed has to be passed.


def get_femnode_set_from_group_data(femmesh, fem_object):
# get femnodes from femmesh groupdata for reference shapes of each obj.References
# we assume the mesh group data fits with the reference shapes, no check is done in this regard !!!
Expand Down

0 comments on commit 8bc7d3f

Please sign in to comment.