FEM: Add separate definitions for split AND non-split input writer files to FemInputWriterCcx.py

This commit is contained in:
vdwalts 2016-11-02 18:09:06 +01:00 committed by Bernd Hahnebach
parent 890b42a5d4
commit 0d8f42637c
2 changed files with 176 additions and 1 deletions

View File

@ -61,6 +61,14 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
print('FemInputWriterCcx --> self.dir_name --> ' + self.dir_name)
print('FemInputWriterCcx --> self.file_name --> ' + self.file_name)
def select_input_writer_mode(self):
if self.solver_obj.SplitInputWriter == True:
self.write_calculix_splitted_input_file()
else:
self.write_calculix_input_file()
return self.file_name
def write_calculix_input_file(self):
timestart = time.clock()
self.femmesh.writeABAQUS(self.file_name)
@ -146,6 +154,173 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
print("Writing time input file: " + str(time.clock() - timestart) + ' \n')
return self.file_name
def write_calculix_splitted_input_file(self):
timestart = time.clock()
# reopen file with "append" and add the analysis definition
# first open file with "write" to ensure that each new iteration of writing of inputfile starts in new file
# first open file with "write" to ensure that the .writeABAQUS also writes in inputfile
inpfileMain = open(self.file_name, 'w')
inpfileMain.close
inpfileMain = open(self.file_name, 'a')
inpfileMain.write('\n\n')
# write nodes and elements
name = ""
for i in range(len(self.file_name)-4):
name = name + self.file_name[i]
inpfileNodesElem = open(name + "_Node_Elem_sets.inp", 'w')
self.femmesh.writeABAQUS(name + "_Node_Elem_sets.inp")
inpfileNodesElem.close
inpfileMain.write('\n***********************************************************\n')
inpfileMain.write('**Nodes and Elements\n')
inpfileMain.write('** written by femmesh.writeABAQUS\n')
inpfileMain.write('*INCLUDE,INPUT=' + name + "_Node_Elem_sets.inp \n")
# create seperate inputfiles for each node set or constraint
if self.fixed_objects or self.displacement_objects or self.planerotation_objects:
inpfileNodes = open(name + "_Node_sets.inp", 'w')
if self.analysis_type == "thermomech" and self.temperature_objects:
inpfileNodeTemp = open(name + "_Node_Temp.inp", 'w')
if self.force_objects:
inpfileForce = open(name + "_Node_Force.inp", 'w')
if self.pressure_objects:
inpfilePressure = open(name + "_Pressure.inp", 'w')
if self.analysis_type == "thermomech" and self.heatflux_objects:
inpfileHeatflux = open(name + "_Node_Heatlfux.inp", 'w')
if self.contact_objects:
inpfileContact = open(name + "_Surface_Contact.inp", 'w')
if self.transform_objects:
inpfileTransform = open(name + "_Node_Transform.inp", 'w')
# node and element sets
self.write_element_sets_material_and_femelement_type(inpfileMain)
if self.fixed_objects:
self.write_node_sets_constraints_fixed(inpfileNodes)
if self.displacement_objects:
self.write_node_sets_constraints_displacement(inpfileNodes)
if self.planerotation_objects:
self.write_node_sets_constraints_planerotation(inpfileNodes)
if self.contact_objects:
self.write_surfaces_contraints_contact(inpfileContact)
if self.transform_objects:
self.write_node_sets_constraints_transform(inpfileTransform)
# write commentary and include statement for static case node sets
inpfileMain.write('\n***********************************************************\n')
inpfileMain.write('**Node sets for constraints\n')
inpfileMain.write('** written by write_node_sets_constraints_fixed\n')
inpfileMain.write('** written by write_node_sets_constraints_displacement\n')
inpfileMain.write('** written by write_node_sets_constraints_planerotation\n')
if self.fixed_objects:
inpfileMain.write('*INCLUDE,INPUT=' + name + "_Node_sets.inp \n")
inpfileMain.write('\n***********************************************************\n')
inpfileMain.write('** Surfaces for contact constraint\n')
inpfileMain.write('** written by write_surfaces_contraints_contact\n')
if self.contact_objects:
inpfileMain.write('*INCLUDE,INPUT=' + name + "_Surface_Contact.inp \n")
inpfileMain.write('\n***********************************************************\n')
inpfileMain.write('** Node sets for transform constraint\n')
inpfileMain.write('** written by write_node_sets_constraints_transform\n')
if self.transform_objects:
inpfileMain.write('*INCLUDE,INPUT=' + name + "_Node_Transform.inp \n")
if self.analysis_type == "thermomech" and self.temperature_objects:
self.write_node_sets_constraints_temperature(inpfileNodeTemp)
# include seperately written temperature constraint in input file
if self.analysis_type == "thermomech":
inpfileMain.write('\n***********************************************************\n')
inpfileMain.write('**Node sets for temperature constraint\n')
inpfileMain.write('** written by write_node_sets_constraints_temperature\n')
if self.temperature_objects:
inpfileMain.write('*INCLUDE,INPUT=' + name + "_Node_Temp.inp \n")
# materials and fem element types
self.write_materials(inpfileMain)
if self.analysis_type == "thermomech" and self.initialtemperature_objects:
self.write_constraints_initialtemperature(inpfileMain)
self.write_femelementsets(inpfileMain)
# constraints independent from steps
if self.planerotation_objects:
self.write_constraints_planerotation(inpfileMain)
if self.contact_objects:
self.write_constraints_contact(inpfileMain)
if self.transform_objects:
self.write_constraints_transform(inpfileMain)
# step begin
if self.analysis_type == "frequency":
self.write_step_begin_static_frequency(inpfileMain)
self.write_analysis_frequency(inpfileMain)
elif self.analysis_type == "static":
self.write_step_begin_static_frequency(inpfileMain)
elif self.analysis_type == "thermomech":
self.write_step_begin_thermomech(inpfileMain)
self.write_analysis_thermomech(inpfileMain)
# constraints depend on step used in all analysis types
if self.fixed_objects:
self.write_constraints_fixed(inpfileMain)
if self.displacement_objects:
self.write_constraints_displacement(inpfileMain)
# constraints depend on step and depending on analysis type
if self.analysis_type == "frequency":
pass
elif self.analysis_type == "static":
if self.selfweight_objects:
self.write_constraints_selfweight(inpfileMain)
if self.force_objects:
self.write_constraints_force(inpfileForce)
if self.pressure_objects:
self.write_constraints_pressure(inpfilePressure)
elif self.analysis_type == "thermomech":
if self.selfweight_objects:
self.write_constraints_selfweight(inpfileMain)
if self.force_objects:
self.write_constraints_force(inpfileForce)
if self.pressure_objects:
self.write_constraints_pressure(inpfilePressure)
if self.temperature_objects:
self.write_constraints_temperature(inpfileMain)
if self.heatflux_objects:
self.write_constraints_heatflux(inpfileHeatflux)
# include seperately written constraints in input file
inpfileMain.write('\n***********************************************************\n')
inpfileMain.write('** Node loads\n')
inpfileMain.write('** written by write_constraints_force\n')
if self.force_objects:
inpfileMain.write('*INCLUDE,INPUT=' + name + "_Node_Force.inp \n")
inpfileMain.write('\n***********************************************************\n')
inpfileMain.write('** Element + CalculiX face + load in [MPa]\n')
inpfileMain.write('** written by write_constraints_pressure\n')
if self.pressure_objects:
inpfileMain.write('*INCLUDE,INPUT=' + name + "_Pressure.inp \n")
if self.analysis_type == "thermomech":
inpfileMain.write('\n***********************************************************\n')
inpfileMain.write('** Convective heat transfer (heat flux)\n')
inpfileMain.write('** written by write_constraints_heatflux\n')
if self.heatflux_objects:
inpfileMain.write('*INCLUDE,INPUT=' + name + "_Node_Heatlfux.inp \n")
# output and step end
self.write_outputs_types(inpfileMain)
self.write_step_end(inpfileMain)
# footer
self.write_footer(inpfileMain)
inpfileMain.close()
print("Writing time input file: " + str(time.clock() - timestart) + ' \n')
# return self.file_name
def write_element_sets_material_and_femelement_type(self, f):
f.write('\n***********************************************************\n')
f.write('** Element sets for materials and FEM element type (solid, shell, beam)\n')

View File

@ -97,7 +97,7 @@ class FemToolsCcx(FemTools.FemTools):
self.temperature_constraints, self.heatflux_constraints, self.initialtemperature_constraints,
self.beam_sections, self.shell_thicknesses,
self.analysis_type, self.working_dir)
self.inp_file_name = inp_writer.write_calculix_input_file()
self.inp_file_name = inp_writer.select_input_writer_mode()
except:
print("Unexpected error when writing CalculiX input file:", sys.exc_info()[0])
raise