| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| __title__ = "Mystran Writer" |
| __author__ = "Bernd Hahnebach" |
| __url__ = "https://www.freecad.org" |
|
|
| |
| |
|
|
| import time |
| from os.path import join |
|
|
| import FreeCAD |
|
|
| |
| try: |
| from pyNastran.bdf.bdf import BDF |
| except Exception: |
| FreeCAD.Console.PrintError( |
| "Module pyNastran not found. Writing Mystran solver input will not work.\n" |
| ) |
|
|
| from . import add_mesh |
| from . import add_femelement_material |
| from . import add_femelement_geometry |
| from . import add_con_force |
| from . import add_con_fixed |
| from . import add_solver_control |
| from .. import writerbase |
|
|
|
|
| class FemInputWriterMystran(writerbase.FemInputWriter): |
| def __init__( |
| self, analysis_obj, solver_obj, mesh_obj, member, dir_name=None, mat_geo_sets=None |
| ): |
| writerbase.FemInputWriter.__init__( |
| self, analysis_obj, solver_obj, mesh_obj, member, dir_name, mat_geo_sets |
| ) |
| |
| |
| |
| if self.mesh_object is not None: |
| self.basename = self.mesh_object.Name |
| else: |
| self.basename = "Mesh" |
| self.solverinput_file = join(self.dir_name, self.basename + ".bdf") |
| self.pynasinput_file = join(self.dir_name, self.basename + ".py") |
| FreeCAD.Console.PrintLog(f"FemInputWriterMystran --> self.dir_name --> {self.dir_name}\n") |
| FreeCAD.Console.PrintMessage( |
| "FemInputWriterMystra --> self.solverinput_file --> {}\n".format( |
| self.solverinput_file |
| ) |
| ) |
| FreeCAD.Console.PrintMessage( |
| f"FemInputWriterMystra --> self.pynasf_name --> {self.pynasinput_file}\n" |
| ) |
|
|
| def write_solver_input(self): |
|
|
| timestart = time.process_time() |
|
|
| model = BDF() |
|
|
| pynasf = open(self.pynasinput_file, "w") |
|
|
| |
| pynasf.write("# written by FreeCAD\n\n") |
| pynasf.write("from pyNastran.bdf.bdf import BDF\n") |
| pynasf.write("model = BDF()\n\n") |
|
|
| model = add_mesh.add_mesh(pynasf, model, self) |
| model = add_femelement_material.add_femelement_material(pynasf, model, self) |
| model = add_femelement_geometry.add_femelement_geometry(pynasf, model, self) |
| model = add_con_force.add_con_force(pynasf, model, self) |
| model = add_con_fixed.add_con_fixed(pynasf, model, self) |
| model = add_solver_control.add_solver_control(pynasf, model, self) |
|
|
| pynasf.write( |
| "\n\nmodel.write_bdf('{}', enddata=True)\n".format( |
| join(self.dir_name, self.basename + "_pyNas.bdf") |
| ) |
| ) |
|
|
| pynasf.close() |
|
|
| |
| model.write_bdf(self.solverinput_file, enddata=True) |
|
|
| writing_time_string = "Writing time input file: {} seconds".format( |
| round((time.process_time() - timestart), 2) |
| ) |
| FreeCAD.Console.PrintMessage(writing_time_string + " \n\n") |
|
|
| return self.solverinput_file |
|
|
|
|
| |
|
|