FEM: Rename variables f->elem, inpfile->f

The reason behind that change is that auxiliary variables,
like a file handle, should not be too visible. inpfile was
a good description, but we're handling only one file and there
is no need to use a descriptive variable name for it in every function.
It's enough that is used in write_calculix_input_file

Signed-off-by: Przemo Firszt <przemo@firszt.eu>
This commit is contained in:
Przemo Firszt 2015-04-27 16:02:19 +01:00 committed by wmayer
parent dd2b39ddd6
commit a99a897ae8

View File

@ -34,78 +34,78 @@ class inp_writer:
inpfile.close() inpfile.close()
return self.base_name return self.base_name
def write_material_element_sets(self, inpfile): def write_material_element_sets(self, f):
inpfile.write('\n\n***********************************************************\n') f.write('\n\n***********************************************************\n')
inpfile.write('** element sets for materials\n') f.write('** element sets for materials\n')
for material_object in self.material_objects: for material_object in self.material_objects:
print material_object['Object'].Name, ': ', material_object['Object'].Material['Name'] print material_object['Object'].Name, ': ', material_object['Object'].Material['Name']
inpfile.write('*ELSET,ELSET=' + material_object['Object'].Name + '\n') f.write('*ELSET,ELSET=' + material_object['Object'].Name + '\n')
if len(self.material_objects) == 1: if len(self.material_objects) == 1:
inpfile.write('Eall\n') f.write('Eall\n')
else: else:
if material_object['Object'].Name == 'MechanicalMaterial': if material_object['Object'].Name == 'MechanicalMaterial':
inpfile.write('Eall\n') f.write('Eall\n')
inpfile.write('\n\n') f.write('\n\n')
def write_fixed_node_sets(self, inpfile): def write_fixed_node_sets(self, f):
inpfile.write('\n\n***********************************************************\n') f.write('\n\n***********************************************************\n')
inpfile.write('** node set for fixed constraint\n') f.write('** node set for fixed constraint\n')
for fixed_object in self.fixed_objects: for fixed_object in self.fixed_objects:
print fixed_object['Object'].Name print fixed_object['Object'].Name
inpfile.write('*NSET,NSET=' + fixed_object['Object'].Name + '\n') f.write('*NSET,NSET=' + fixed_object['Object'].Name + '\n')
for o, f in fixed_object['Object'].References: for o, elem in fixed_object['Object'].References:
fo = o.Shape.getElement(f) fo = o.Shape.getElement(elem)
n = [] n = []
if fo.ShapeType == 'Face': if fo.ShapeType == 'Face':
print ' Face Support (fixed face) on: ', f print ' Face Support (fixed face) on: ', elem
n = self.mesh_object.FemMesh.getNodesByFace(fo) n = self.mesh_object.FemMesh.getNodesByFace(fo)
elif fo.ShapeType == 'Edge': elif fo.ShapeType == 'Edge':
print ' Line Support (fixed edge) on: ', f print ' Line Support (fixed edge) on: ', elem
n = self.mesh_object.FemMesh.getNodesByEdge(fo) n = self.mesh_object.FemMesh.getNodesByEdge(fo)
elif fo.ShapeType == 'Vertex': elif fo.ShapeType == 'Vertex':
print ' Point Support (fixed vertex) on: ', f print ' Point Support (fixed vertex) on: ', elem
n = self.mesh_object.FemMesh.getNodesByVertex(fo) n = self.mesh_object.FemMesh.getNodesByVertex(fo)
for i in n: for i in n:
inpfile.write(str(i) + ',\n') f.write(str(i) + ',\n')
inpfile.write('\n\n') f.write('\n\n')
def write_load_node_sets(self, inpfile): def write_load_node_sets(self, f):
inpfile.write('\n\n***********************************************************\n') f.write('\n\n***********************************************************\n')
inpfile.write('** node sets for loads\n') f.write('** node sets for loads\n')
for force_object in self.force_objects: for force_object in self.force_objects:
print force_object['Object'].Name print force_object['Object'].Name
inpfile.write('*NSET,NSET=' + force_object['Object'].Name + '\n') f.write('*NSET,NSET=' + force_object['Object'].Name + '\n')
NbrForceNodes = 0 NbrForceNodes = 0
for o, f in force_object['Object'].References: for o, elem in force_object['Object'].References:
fo = o.Shape.getElement(f) fo = o.Shape.getElement(elem)
n = [] n = []
if fo.ShapeType == 'Face': if fo.ShapeType == 'Face':
print ' AreaLoad (face load) on: ', f print ' AreaLoad (face load) on: ', elem
n = self.mesh_object.FemMesh.getNodesByFace(fo) n = self.mesh_object.FemMesh.getNodesByFace(fo)
elif fo.ShapeType == 'Edge': elif fo.ShapeType == 'Edge':
print ' Line Load (edge load) on: ', f print ' Line Load (edge load) on: ', elem
n = self.mesh_object.FemMesh.getNodesByEdge(fo) n = self.mesh_object.FemMesh.getNodesByEdge(fo)
elif fo.ShapeType == 'Vertex': elif fo.ShapeType == 'Vertex':
print ' Point Load (vertex load) on: ', f print ' Point Load (vertex load) on: ', elem
n = self.mesh_object.FemMesh.getNodesByVertex(fo) n = self.mesh_object.FemMesh.getNodesByVertex(fo)
for i in n: for i in n:
inpfile.write(str(i) + ',\n') f.write(str(i) + ',\n')
NbrForceNodes = NbrForceNodes + 1 # NodeSum of mesh-nodes of ALL reference shapes from force_object NbrForceNodes = NbrForceNodes + 1 # NodeSum of mesh-nodes of ALL reference shapes from force_object
# calculate node load # calculate node load
if NbrForceNodes == 0: if NbrForceNodes == 0:
print ' Warning --> no FEM-Mesh-node to apply the load to was found?' print ' Warning --> no FEM-Mesh-node to apply the load to was found?'
else: else:
force_object['NodeLoad'] = (force_object['Object'].Force) / NbrForceNodes force_object['NodeLoad'] = (force_object['Object'].Force) / NbrForceNodes
inpfile.write('** concentrated load [N] distributed on all mesh nodes of the given shapes\n') f.write('** concentrated load [N] distributed on all mesh nodes of the given shapes\n')
inpfile.write('** ' + str(force_object['Object'].Force) + ' N / ' + str(NbrForceNodes) + ' Nodes = ' + str(force_object['NodeLoad']) + ' N on each node\n') f.write('** ' + str(force_object['Object'].Force) + ' N / ' + str(NbrForceNodes) + ' Nodes = ' + str(force_object['NodeLoad']) + ' N on each node\n')
if force_object['Object'].Force == 0: if force_object['Object'].Force == 0:
print ' Warning --> Force = 0' print ' Warning --> Force = 0'
inpfile.write('\n\n') f.write('\n\n')
def write_materials(self, inpfile): def write_materials(self, f):
inpfile.write('\n\n***********************************************************\n') f.write('\n\n***********************************************************\n')
inpfile.write('** materials\n') f.write('** materials\n')
inpfile.write('** youngs modulus unit is MPa = N/mm2\n') f.write('** youngs modulus unit is MPa = N/mm2\n')
for material_object in self.material_objects: for material_object in self.material_objects:
# get material properties # get material properties
YM = FreeCAD.Units.Quantity(material_object['Object'].Material['YoungsModulus']) YM = FreeCAD.Units.Quantity(material_object['Object'].Material['YoungsModulus'])
@ -113,79 +113,79 @@ class inp_writer:
PR = float(material_object['Object'].Material['PoissonRatio']) PR = float(material_object['Object'].Material['PoissonRatio'])
material_name = material_object['Object'].Material['Name'][:80] material_name = material_object['Object'].Material['Name'][:80]
# write material properties # write material properties
inpfile.write('*MATERIAL, NAME=' + material_name + '\n') f.write('*MATERIAL, NAME=' + material_name + '\n')
inpfile.write('*ELASTIC \n') f.write('*ELASTIC \n')
inpfile.write('{}, '.format(YM_in_MPa)) f.write('{}, '.format(YM_in_MPa))
inpfile.write('{0:.3f}\n'.format(PR)) f.write('{0:.3f}\n'.format(PR))
# write element properties # write element properties
if len(self.material_objects) == 1: if len(self.material_objects) == 1:
inpfile.write('*SOLID SECTION, ELSET=' + material_object['Object'].Name + ', MATERIAL=' + material_name + '\n\n') f.write('*SOLID SECTION, ELSET=' + material_object['Object'].Name + ', MATERIAL=' + material_name + '\n\n')
else: else:
if material_object['Object'].Name == 'MechanicalMaterial': if material_object['Object'].Name == 'MechanicalMaterial':
inpfile.write('*SOLID SECTION, ELSET=' + material_object['Object'].Name + ', MATERIAL=' + material_name + '\n\n') f.write('*SOLID SECTION, ELSET=' + material_object['Object'].Name + ', MATERIAL=' + material_name + '\n\n')
def write_step_begin(self, inpfile): def write_step_begin(self, f):
inpfile.write('\n\n\n\n***********************************************************\n') f.write('\n\n\n\n***********************************************************\n')
inpfile.write('** one step is needed to calculate the mechanical analysis of FreeCAD\n') f.write('** one step is needed to calculate the mechanical analysis of FreeCAD\n')
inpfile.write('** loads are applied quasi-static, means without involving the time dimension\n') f.write('** loads are applied quasi-static, means without involving the time dimension\n')
inpfile.write('*STEP\n') f.write('*STEP\n')
inpfile.write('*STATIC\n\n') f.write('*STATIC\n\n')
def write_constraints_fixed(self, inpfile): def write_constraints_fixed(self, f):
inpfile.write('\n** constaints\n') f.write('\n** constaints\n')
for fixed_object in self.fixed_objects: for fixed_object in self.fixed_objects:
inpfile.write('*BOUNDARY\n') f.write('*BOUNDARY\n')
inpfile.write(fixed_object['Object'].Name + ',1\n') f.write(fixed_object['Object'].Name + ',1\n')
inpfile.write(fixed_object['Object'].Name + ',2\n') f.write(fixed_object['Object'].Name + ',2\n')
inpfile.write(fixed_object['Object'].Name + ',3\n\n') f.write(fixed_object['Object'].Name + ',3\n\n')
def write_constraints_force(self, inpfile): def write_constraints_force(self, f):
inpfile.write('\n** loads\n') f.write('\n** loads\n')
inpfile.write('** node loads, see load node sets for how the value is calculated!\n') f.write('** node loads, see load node sets for how the value is calculated!\n')
for force_object in self.force_objects: for force_object in self.force_objects:
if 'NodeLoad' in force_object: if 'NodeLoad' in force_object:
vec = force_object['Object'].DirectionVector vec = force_object['Object'].DirectionVector
inpfile.write('*CLOAD\n') f.write('*CLOAD\n')
inpfile.write('** force: ' + str(force_object['NodeLoad']) + ' N, direction: ' + str(vec) + '\n') f.write('** force: ' + str(force_object['NodeLoad']) + ' N, direction: ' + str(vec) + '\n')
v1 = "{:.15}".format(repr(vec.x * force_object['NodeLoad'])) v1 = "{:.15}".format(repr(vec.x * force_object['NodeLoad']))
v2 = "{:.15}".format(repr(vec.y * force_object['NodeLoad'])) v2 = "{:.15}".format(repr(vec.y * force_object['NodeLoad']))
v3 = "{:.15}".format(repr(vec.z * force_object['NodeLoad'])) v3 = "{:.15}".format(repr(vec.z * force_object['NodeLoad']))
inpfile.write(force_object['Object'].Name + ',1,' + v1 + '\n') f.write(force_object['Object'].Name + ',1,' + v1 + '\n')
inpfile.write(force_object['Object'].Name + ',2,' + v2 + '\n') f.write(force_object['Object'].Name + ',2,' + v2 + '\n')
inpfile.write(force_object['Object'].Name + ',3,' + v3 + '\n\n') f.write(force_object['Object'].Name + ',3,' + v3 + '\n\n')
def write_outputs_types(self, inpfile): def write_outputs_types(self, f):
inpfile.write('\n** outputs --> frd file\n') f.write('\n** outputs --> frd file\n')
inpfile.write('*NODE FILE\n') f.write('*NODE FILE\n')
inpfile.write('U\n') f.write('U\n')
inpfile.write('*EL FILE\n') f.write('*EL FILE\n')
inpfile.write('S, E\n') f.write('S, E\n')
inpfile.write('** outputs --> dat file\n') f.write('** outputs --> dat file\n')
inpfile.write('*NODE PRINT , NSET=Nall \n') f.write('*NODE PRINT , NSET=Nall \n')
inpfile.write('U \n') f.write('U \n')
inpfile.write('*EL PRINT , ELSET=Eall \n') f.write('*EL PRINT , ELSET=Eall \n')
inpfile.write('S \n') f.write('S \n')
inpfile.write('\n\n') f.write('\n\n')
def write_step_end(self, inpfile): def write_step_end(self, f):
inpfile.write('*END STEP \n') f.write('*END STEP \n')
def write_footer(self, inpfile): def write_footer(self, f):
FcVersionInfo = FreeCAD.Version() FcVersionInfo = FreeCAD.Version()
inpfile.write('\n\n\n\n***********************************************************\n') f.write('\n\n\n\n***********************************************************\n')
inpfile.write('**\n') f.write('**\n')
inpfile.write('** CalculiX Inputfile\n') f.write('** CalculiX Inputfile\n')
inpfile.write('**\n') f.write('**\n')
inpfile.write('** written by --> FreeCAD ' + FcVersionInfo[0] + '.' + FcVersionInfo[1] + '.' + FcVersionInfo[2] + '\n') f.write('** written by --> FreeCAD ' + FcVersionInfo[0] + '.' + FcVersionInfo[1] + '.' + FcVersionInfo[2] + '\n')
inpfile.write('** written on --> ' + time.ctime() + '\n') f.write('** written on --> ' + time.ctime() + '\n')
inpfile.write('** file name --> ' + os.path.basename(FreeCAD.ActiveDocument.FileName) + '\n') f.write('** file name --> ' + os.path.basename(FreeCAD.ActiveDocument.FileName) + '\n')
inpfile.write('** analysis name --> ' + FemGui.getActiveAnalysis().Name + '\n') f.write('** analysis name --> ' + FemGui.getActiveAnalysis().Name + '\n')
inpfile.write('**\n') f.write('**\n')
inpfile.write('**\n') f.write('**\n')
inpfile.write('** Units\n') f.write('** Units\n')
inpfile.write('**\n') f.write('**\n')
inpfile.write('** Geometry (mesh data) --> mm\n') f.write('** Geometry (mesh data) --> mm\n')
inpfile.write("** Materials (Young's modulus) --> N/mm2 = MPa\n") f.write("** Materials (Young's modulus) --> N/mm2 = MPa\n")
inpfile.write('** Loads (nodal loads) --> N\n') f.write('** Loads (nodal loads) --> N\n')
inpfile.write('**\n') f.write('**\n')
inpfile.write('**\n') f.write('**\n')