FEM: constraint pressure, move geting the faces from FemInputwriterCcx to FemInputWriter and FemMeshTools module
This commit is contained in:
parent
6ab0937ea0
commit
746ee873aa
|
@ -153,3 +153,11 @@ class FemInputWriter():
|
||||||
femobj['NodeLoadTable'] = FemMeshTools.get_force_obj_edge_nodeload_table(self.femmesh, self.femelement_table, self.femnodes_mesh, frc_obj)
|
femobj['NodeLoadTable'] = FemMeshTools.get_force_obj_edge_nodeload_table(self.femmesh, self.femelement_table, self.femnodes_mesh, frc_obj)
|
||||||
elif femobj['RefShapeType'] == 'Face': # area load on faces
|
elif femobj['RefShapeType'] == 'Face': # area load on faces
|
||||||
femobj['NodeLoadTable'] = FemMeshTools.get_force_obj_face_nodeload_table(self.femmesh, self.femelement_table, self.femnodes_mesh, frc_obj)
|
femobj['NodeLoadTable'] = FemMeshTools.get_force_obj_face_nodeload_table(self.femmesh, self.femelement_table, self.femnodes_mesh, frc_obj)
|
||||||
|
|
||||||
|
def get_constraints_pressure_faces(self):
|
||||||
|
# TODO see comments in get_constraints_force_nodeloads(), it applies here too. Mhh it applies to all constraints ...
|
||||||
|
|
||||||
|
# get the faces and face numbers
|
||||||
|
for femobj in self.pressure_objects: # femobj --> dict, FreeCAD document object is femobj['Object']
|
||||||
|
femobj['PressureFaces'] = FemMeshTools.get_pressure_obj_faces(self.femmesh, femobj)
|
||||||
|
# print femobj['PressureFaces']
|
||||||
|
|
|
@ -607,21 +607,20 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
|
||||||
f.write('\n')
|
f.write('\n')
|
||||||
|
|
||||||
def write_constraints_pressure(self, f):
|
def write_constraints_pressure(self, f):
|
||||||
|
# get the faces and face numbers
|
||||||
|
self.get_constraints_pressure_faces()
|
||||||
|
# write face loads to file
|
||||||
f.write('\n***********************************************************\n')
|
f.write('\n***********************************************************\n')
|
||||||
f.write('** Element + CalculiX face + load in [MPa]\n')
|
f.write('** Element + CalculiX face + load in [MPa]\n')
|
||||||
f.write('** written by {} function\n'.format(sys._getframe().f_code.co_name))
|
f.write('** written by {} function\n'.format(sys._getframe().f_code.co_name))
|
||||||
for femobj in self.pressure_objects: # femobj --> dict, FreeCAD document object is femobj['Object']
|
for femobj in self.pressure_objects: # femobj --> dict, FreeCAD document object is femobj['Object']
|
||||||
prs_obj = femobj['Object']
|
prs_obj = femobj['Object']
|
||||||
|
rev = -1 if prs_obj.Reversed else 1
|
||||||
f.write('*DLOAD\n')
|
f.write('*DLOAD\n')
|
||||||
for o, elem_tup in prs_obj.References:
|
for ref_shape in femobj['PressureFaces']:
|
||||||
rev = -1 if prs_obj.Reversed else 1
|
f.write('** ' + ref_shape[0] + '\n')
|
||||||
for elem in elem_tup:
|
for face, fno in ref_shape[1]:
|
||||||
ref_shape = o.Shape.getElement(elem)
|
f.write("{},P{},{}\n".format(face, fno, rev * prs_obj.Pressure))
|
||||||
if ref_shape.ShapeType == 'Face':
|
|
||||||
v = self.femmesh.getccxVolumesByFace(ref_shape)
|
|
||||||
f.write("** Load on face {}\n".format(elem))
|
|
||||||
for i in v:
|
|
||||||
f.write("{},P{},{}\n".format(i[0], i[1], rev * prs_obj.Pressure))
|
|
||||||
|
|
||||||
def write_constraints_temperature(self, f):
|
def write_constraints_temperature(self, f):
|
||||||
f.write('\n***********************************************************\n')
|
f.write('\n***********************************************************\n')
|
||||||
|
|
|
@ -370,6 +370,18 @@ def get_force_obj_edge_nodeload_table(femmesh, femelement_table, femnodes_mesh,
|
||||||
return force_obj_node_load_table
|
return force_obj_node_load_table
|
||||||
|
|
||||||
|
|
||||||
|
def get_pressure_obj_faces(femmesh, femobj):
|
||||||
|
pressure_faces = []
|
||||||
|
for o, elem_tup in femobj['Object'].References:
|
||||||
|
for elem in elem_tup:
|
||||||
|
ref_shape = o.Shape.getElement(elem)
|
||||||
|
elem_info_string = 'face load on shape: ' + o.Name + ':' + elem
|
||||||
|
print(elem_info_string)
|
||||||
|
if ref_shape.ShapeType == 'Face':
|
||||||
|
pressure_faces.append((elem_info_string, femmesh.getccxVolumesByFace(ref_shape)))
|
||||||
|
return pressure_faces
|
||||||
|
|
||||||
|
|
||||||
def get_force_obj_face_nodeload_table(femmesh, femelement_table, femnodes_mesh, frc_obj):
|
def get_force_obj_face_nodeload_table(femmesh, femelement_table, femnodes_mesh, frc_obj):
|
||||||
# force_obj_node_load_table = [('refshape_name.elemname',node_load_table), ..., ('refshape_name.elemname',node_load_table)]
|
# force_obj_node_load_table = [('refshape_name.elemname',node_load_table), ..., ('refshape_name.elemname',node_load_table)]
|
||||||
force_obj_node_load_table = []
|
force_obj_node_load_table = []
|
||||||
|
|
|
@ -547,7 +547,7 @@ FemConstraintFixed,3
|
||||||
** Element + CalculiX face + load in [MPa]
|
** Element + CalculiX face + load in [MPa]
|
||||||
** written by write_constraints_pressure function
|
** written by write_constraints_pressure function
|
||||||
*DLOAD
|
*DLOAD
|
||||||
** Load on face Face2
|
** face load on shape: Box:Face2
|
||||||
635,P1,1000.0
|
635,P1,1000.0
|
||||||
638,P3,1000.0
|
638,P3,1000.0
|
||||||
641,P2,1000.0
|
641,P2,1000.0
|
||||||
|
|
Loading…
Reference in New Issue
Block a user