FEM: ccx writer, adapt constraint fixed to the mixed meshes
This commit is contained in:
@@ -433,9 +433,19 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
|
||||
for femobj in self.fixed_objects: # femobj --> dict, FreeCAD document object is femobj['Object']
|
||||
fix_obj = femobj['Object']
|
||||
f.write('** ' + fix_obj.Label + '\n')
|
||||
f.write('*NSET,NSET=' + fix_obj.Name + '\n')
|
||||
for n in femobj['Nodes']:
|
||||
f.write(str(n) + ',\n')
|
||||
if self.femmesh.Volumes and (len(self.shellthickness_objects) > 0 or len(self.beamsection_objects) > 0):
|
||||
if len(femobj['NodesSolid']) > 0:
|
||||
f.write('*NSET,NSET=' + fix_obj.Name + 'Solid\n')
|
||||
for n in femobj['NodesSolid']:
|
||||
f.write(str(n) + ',\n')
|
||||
if len(femobj['NodesFaceEdge']) > 0:
|
||||
f.write('*NSET,NSET=' + fix_obj.Name + 'FaceEdge\n')
|
||||
for n in femobj['NodesFaceEdge']:
|
||||
f.write(str(n) + ',\n')
|
||||
else:
|
||||
f.write('*NSET,NSET=' + fix_obj.Name + '\n')
|
||||
for n in femobj['Nodes']:
|
||||
f.write(str(n) + ',\n')
|
||||
|
||||
def write_node_sets_constraints_displacement(self, f):
|
||||
# get nodes
|
||||
@@ -770,15 +780,32 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
|
||||
for femobj in self.fixed_objects: # femobj --> dict, FreeCAD document object is femobj['Object']
|
||||
f.write('** ' + femobj['Object'].Label + '\n')
|
||||
fix_obj_name = femobj['Object'].Name
|
||||
f.write('*BOUNDARY\n')
|
||||
f.write(fix_obj_name + ',1\n')
|
||||
f.write(fix_obj_name + ',2\n')
|
||||
f.write(fix_obj_name + ',3\n')
|
||||
if self.beamsection_objects or self.shellthickness_objects:
|
||||
f.write(fix_obj_name + ',4\n')
|
||||
f.write(fix_obj_name + ',5\n')
|
||||
f.write(fix_obj_name + ',6\n')
|
||||
f.write('\n')
|
||||
if self.femmesh.Volumes and (len(self.shellthickness_objects) > 0 or len(self.beamsection_objects) > 0):
|
||||
if len(femobj['NodesSolid']) > 0:
|
||||
f.write('*BOUNDARY\n')
|
||||
f.write(fix_obj_name + 'Solid' + ',1\n')
|
||||
f.write(fix_obj_name + 'Solid' + ',2\n')
|
||||
f.write(fix_obj_name + 'Solid' + ',3\n')
|
||||
f.write('\n')
|
||||
if len(femobj['NodesFaceEdge']) > 0:
|
||||
f.write('*BOUNDARY\n')
|
||||
f.write(fix_obj_name + 'FaceEdge' + ',1\n')
|
||||
f.write(fix_obj_name + 'FaceEdge' + ',2\n')
|
||||
f.write(fix_obj_name + 'FaceEdge' + ',3\n')
|
||||
f.write(fix_obj_name + 'FaceEdge' + ',4\n')
|
||||
f.write(fix_obj_name + 'FaceEdge' + ',5\n')
|
||||
f.write(fix_obj_name + 'FaceEdge' + ',6\n')
|
||||
f.write('\n')
|
||||
else:
|
||||
f.write('*BOUNDARY\n')
|
||||
f.write(fix_obj_name + ',1\n')
|
||||
f.write(fix_obj_name + ',2\n')
|
||||
f.write(fix_obj_name + ',3\n')
|
||||
if self.beamsection_objects or self.shellthickness_objects:
|
||||
f.write(fix_obj_name + ',4\n')
|
||||
f.write(fix_obj_name + ',5\n')
|
||||
f.write(fix_obj_name + ',6\n')
|
||||
f.write('\n')
|
||||
|
||||
def write_constraints_displacement(self, f):
|
||||
f.write('\n***********************************************************\n')
|
||||
|
||||
@@ -101,6 +101,25 @@ class FemInputWriter():
|
||||
# add nodes to constraint_conflict_nodes, needed by constraint plane rotation
|
||||
for node in femobj['Nodes']:
|
||||
self.constraint_conflict_nodes.append(node)
|
||||
# if mixed mesh with solids the node set needs to be split because solid nodes do not have rotational degree of freedom
|
||||
if self.femmesh.Volumes and (len(self.shellthickness_objects) > 0 or len(self.beamsection_objects) > 0):
|
||||
print('We need to find the solid nodes.')
|
||||
if not self.femelement_volumes_table:
|
||||
self.femelement_volumes_table = FemMeshTools.get_femelement_volumes_table(self.femmesh)
|
||||
for femobj in self.fixed_objects: # femobj --> dict, FreeCAD document object is femobj['Object']
|
||||
nds_solid = []
|
||||
nds_faceedge = []
|
||||
for n in femobj['Nodes']:
|
||||
solid_node = False
|
||||
for ve in self.femelement_volumes_table:
|
||||
if n in self.femelement_volumes_table[ve]:
|
||||
solid_node = True
|
||||
nds_solid.append(n)
|
||||
break
|
||||
if not solid_node:
|
||||
nds_faceedge.append(n)
|
||||
femobj['NodesSolid'] = set(nds_solid)
|
||||
femobj['NodesFaceEdge'] = set(nds_faceedge)
|
||||
|
||||
def get_constraints_displacement_nodes(self):
|
||||
# get nodes
|
||||
|
||||
Reference in New Issue
Block a user