コード例 #1
0
    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}"')
コード例 #2
0
ファイル: writer.py プロジェクト: haavahk/adapy
    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}"')
コード例 #3
0
ファイル: writer.py プロジェクト: haavahk/adapy
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,
        )