def write( self, name, scratch_dir=None, metadata=None, execute=False, run_ext=False, overwrite=False, ): analysis_dir = _folder_prep(scratch_dir, name, overwrite) head = """ HEAD\n\n\n""" # Need to create these before beams and shell in order to # sec_str = self.sections_str # mat_str = self.materials_str with open(os.path.join(analysis_dir, r"ufo_bulk.fem"), "w") as d: d.write(head) d.write(self.nodal_str + "\n") d.write(self.beam_str + "\n") d.write(shell_str(self.part) + "\n") d.write(self.eccent_str + "\n") d.write(self.sections_str + "\n") d.write(materials_str(self._gmaterials) + "\n") d.write(self.mass_str + "\n") d.write(self.create_usfos_set_str + "\n") if metadata["control_file"] is not None: with open(os.path.join(analysis_dir, r"usfos.fem"), "w") as d: d.write(metadata["control_file"] + "\n") # d.write(self.nonstru_str + '\n') print(f'Created an Usfos input deck at "{analysis_dir}"')
def write( self, name, scratch_dir=None, description=None, execute=False, run_ext=False, cpus=2, gpus=None, overwrite=False, ): analysis_dir = _folder_prep(scratch_dir, name, overwrite) import datetime now = datetime.datetime.now() date_str = now.strftime("%d-%b-%Y") clock_str = now.strftime("%H:%M:%S") user = get_current_user() units = "UNITS 5.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00\n 1.00000000E+00\n" with open((analysis_dir / "T100").with_suffix(".FEM"), "w") as d: d.write( f"""IDENT 1.00000000E+00 1.00000000E+02 3.00000000E+00 0.00000000E+00 DATE 1.00000000E+00 0.00000000E+00 4.00000000E+00 7.20000000E+01 DATE: {date_str} TIME: {clock_str} PROGRAM: ADA python VERSION: Not Applicable COMPUTER: X86 Windows INSTALLATION: USER: {user} ACCOUNT: \n""") d.write(units) d.write(self._materials_str) d.write(self._sections_str) d.write(self._nodes_str) d.write(self._mass_str) d.write(self._bc_str) d.write(self._hinges_str) d.write(self._univec_str) d.write(self._elem_str) d.write(self._loads_str) d.write( "IEND 0.00 0.00 0.00 0.00" ) print(f'Created an Sesam input deck at "{analysis_dir}"')
def to_fem( assembly, name, scratch_dir=None, description=None, execute=False, run_ext=False, cpus=2, gpus=None, overwrite=False, exit_on_complete=True, ): """ Write a Calculix input file stack :param assembly: :param name: :param scratch_dir: :param description: :param execute: :param run_ext: :param cpus: :param gpus: :param overwrite: :param exit_on_complete: :return: """ analysis_dir = _folder_prep(scratch_dir, name, overwrite) inp_file = (analysis_dir / name).with_suffix(".inp") p = get_fem_model_from_assembly(assembly) with open(inp_file, "w") as f: # Header f.write(main_header_str.format(username=get_current_user())) # Part level information f.write(nodes_str(p.fem.nodes) + "\n") f.write(elements_str(p.fem.elements) + "\n") f.write(elsets_str(p.fem.elsets) + "\n") f.write(elsets_str(assembly.fem.elsets) + "\n") f.write(nsets_str(p.fem.nsets) + "\n") f.write(nsets_str(assembly.fem.nsets) + "\n") f.write(solid_sec_str(p) + "\n") f.write(shell_sec_str(p) + "\n") f.write(beam_sec_str(p) + "\n") # Assembly Level information f.write("\n".join([material_str(mat) for mat in p.materials]) + "\n") f.write("\n".join([bc_str(x) for x in p.fem.bcs + assembly.fem.bcs]) + "\n") f.write(step_str(assembly.fem.steps[0])) # f.write(mass_str) # f.write(surfaces_str) # f.write(constraints_str) # f.write(springs_str) print(f'Created a Calculix input deck at "{analysis_dir}"') # Create run batch files and if execute=True run the analysis if execute: run_calculix( (analysis_dir / name).with_suffix(".inp"), cpus=cpus, gpus=gpus, run_ext=run_ext, manifest=assembly.metadata, execute=execute, exit_on_complete=exit_on_complete, )