Skip to content

Commit

Permalink
FEM: input writer ccx, most constraints, use nodes from group data if…
Browse files Browse the repository at this point in the history
… available
  • Loading branch information
berndhahnebach committed Oct 17, 2016
1 parent 1329857 commit 6ab0937
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 6 deletions.
10 changes: 5 additions & 5 deletions src/Mod/Fem/FemInputWriter.py
Expand Up @@ -87,33 +87,33 @@ def __init__(self,
def get_constraints_fixed_nodes(self):
# get nodes
for femobj in self.fixed_objects: # femobj --> dict, FreeCAD document object is femobj['Object']
femobj['Nodes'] = FemMeshTools.get_femnodes_by_references(self.femmesh, femobj['Object'].References)
femobj['Nodes'] = FemMeshTools.get_femnodes_by_femobj_with_references(self.femmesh, femobj)
# add nodes to constraint_conflict_nodes, needed by constraint plane rotation
for node in femobj['Nodes']:
self.constraint_conflict_nodes.append(node)

def get_constraints_displacement_nodes(self):
# get nodes
for femobj in self.displacement_objects: # femobj --> dict, FreeCAD document object is femobj['Object']
femobj['Nodes'] = FemMeshTools.get_femnodes_by_references(self.femmesh, femobj['Object'].References)
femobj['Nodes'] = FemMeshTools.get_femnodes_by_femobj_with_references(self.femmesh, femobj)
# add nodes to constraint_conflict_nodes, needed by constraint plane rotation
for node in femobj['Nodes']:
self.constraint_conflict_nodes.append(node)

def get_constraints_planerotation_nodes(self):
# get nodes
for femobj in self.planerotation_objects: # femobj --> dict, FreeCAD document object is femobj['Object']
femobj['Nodes'] = FemMeshTools.get_femnodes_by_references(self.femmesh, femobj['Object'].References)
femobj['Nodes'] = FemMeshTools.get_femnodes_by_femobj_with_references(self.femmesh, femobj)

def get_constraints_transform_nodes(self):
# get nodes
for femobj in self.transform_objects: # femobj --> dict, FreeCAD document object is femobj['Object']
femobj['Nodes'] = FemMeshTools.get_femnodes_by_references(self.femmesh, femobj['Object'].References)
femobj['Nodes'] = FemMeshTools.get_femnodes_by_femobj_with_references(self.femmesh, femobj)

def get_constraints_temperature_nodes(self):
# get nodes
for femobj in self.temperature_objects: # femobj --> dict, FreeCAD document object is femobj['Object']
femobj['Nodes'] = FemMeshTools.get_femnodes_by_references(self.femmesh, femobj['Object'].References)
femobj['Nodes'] = FemMeshTools.get_femnodes_by_femobj_with_references(self.femmesh, femobj)

def get_constraints_force_nodeloads(self):
# check shape type of reference shape
Expand Down
27 changes: 26 additions & 1 deletion src/Mod/Fem/FemMeshTools.py
Expand Up @@ -29,6 +29,17 @@
import FreeCAD


def get_femnodes_by_femobj_with_references(femmesh, femobj):
node_set = []
if femmesh.GroupCount:
node_set = get_femnode_set_from_group_data(femmesh, femobj)
# print 'node_set_group: ', node_set
if not node_set:
node_set = get_femnodes_by_references(femmesh, femobj['Object'].References)
# print 'node_set_nogroup: ', node_set
return node_set


def get_femelements_by_references(femmesh, femelement_table, references):
'''get the femelements for a list of references
'''
Expand Down Expand Up @@ -195,9 +206,23 @@ def get_femelement_sets(femmesh, femelement_table, fem_objects): # fem_objects
FreeCAD.Console.PrintError('Error in get_femelement_sets -- > femelements_count_ok() failed!\n')


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 !!!
# what happens if a reference shape was changed, but the mesh and the mesh groups were not created new !?!
obj = fem_object['Object']
if femmesh.GroupCount:
for g in femmesh.Groups:
grp_name = femmesh.getGroupName(g)
if grp_name.startswith(obj.Name + '_'):
if femmesh.getGroupElementType(g) == "Node":
print("Constraint: " + obj.Name + " --> " + "mesh group: " + grp_name)
group_nodes = femmesh.getGroupElements(g) # == ref_shape_femelements
return group_nodes


def get_femelement_sets_from_group_data(femmesh, fem_objects):
# get femelements from femmesh groupdata for reference shapes of each obj.References
print("")
count_femelements = 0
sum_group_elements = []
# we assume the mesh group data fits with the reference shapes, no check is done in this regard !!!
Expand Down

0 comments on commit 6ab0937

Please sign in to comment.