Source code for modsim_package.cubit.cube_mesh
import sys
import shutil
import pathlib
import argparse
import cubit
[docs]
def main(input_file, output_file, global_seed, element_type="QUAD", solver="abaqus"):
"""Mesh the simple cube geometry partitioned by ``cube_partition.py``
This script meshes a simple Cubit model with a single cube part.
**Feature labels:**
* ``NODES`` - all part nodes
* ``ELEMENTS`` - all part elements
:param str input_file: The Cubit model file created by ``cube_partition.py``. Will be stripped of the extension
and ``.cub`` will be used.
:param str output_file: The output file for the Cubit model. Will be stripped of the extension and ``.cub`` and
``.inp`` will be used for the model and orphan mesh output files, respectively.
:param float global_seed: The global mesh seed size
:param str element_type: The model element type. Must be a supported Cubit 4 node element type.
:param str solver: The solver type to use when exporting the mesh
:returns: writes ``output_file``.cub and ``output_file``.inp
:raises RuntimeError: If the solver is not supported
"""
input_file = pathlib.Path(input_file).with_suffix(".cub")
output_file = pathlib.Path(output_file).with_suffix(".cub")
abaqus_mesh_file = output_file.with_suffix(".inp")
sierra_mesh_file = output_file.with_suffix(".g")
# Avoid modifying the contents or timestamp on the input file.
# Required to get conditional re-builds with a build system such as GNU Make, CMake, or SCons
if input_file != output_file:
shutil.copyfile(input_file, output_file)
cubit.init(["cubit", "-noecho", "-nojournal", "-nographics", "-batch"])
cubit.cmd("new")
cubit.cmd("reset")
cubit.cmd(f"open '{output_file}'")
cubit.cmd(f"volume 1 size {global_seed}")
cubit.cmd("mesh volume 1")
cubit.cmd("set duplicate block elements off")
cubit.cmd("nodeset 9 add volume 1")
cubit.cmd("nodeset 9 name 'NODES'")
cubit.cmd("block 1 add volume 1")
cubit.cmd(f"block 1 name 'ELEMENTS' Element type {element_type}")
cubit.cmd(f"save as '{output_file}' overwrite")
if solver.lower() == "abaqus":
# Export Abaqus orphan mesh for Abaqus workflow
cubit.cmd(f"export abaqus '{abaqus_mesh_file}' partial dimension 2 block 1 overwrite everything")
elif solver.lower() in ["sierra", "adagio"]:
# Export Genesis file for Sierra workflow
cubit.cmd(f"export mesh '{sierra_mesh_file}' overwrite")
else:
raise RuntimeError(f"Uknown solver '{solver}'")
def get_parser():
script_name = pathlib.Path(__file__)
# Set default parameter values
default_input_file = script_name.with_suffix(".cub").name.replace("_mesh", "_partition")
default_output_file = script_name.with_suffix(".cub").name
default_global_seed = 1.0
default_element_type = "HEX"
default_solver = "abaqus"
prog = f"python {script_name.name} "
cli_description = (
"Mesh the simple cube geometry partitioned by ``cube_partition.py`` "
"and write an ``output_file``.cub Cubit model file and ``output_file``.inp orphan mesh file."
)
parser = argparse.ArgumentParser(description=cli_description, prog=prog)
parser.add_argument(
"--input-file",
type=str,
default=default_input_file,
# fmt: off
help="The Cubit model file created by ``cube_partition.py``. "
"Will be stripped of the extension and ``.cub`` will be used, e.g. ``input_file``.cub "
"(default: %(default)s",
# fmt: on
)
parser.add_argument(
"--output-file",
type=str,
default=default_output_file,
# fmt: off
help="The output file for the Cubit model. "
"Will be stripped of the extension and ``.cub`` will be used, e.g. ``output_file``.cub",
# fmt: on
)
parser.add_argument(
"--global-seed",
type=float,
default=default_global_seed,
help="The global mesh seed size (default: %(default)s)",
)
parser.add_argument(
"--element-type",
type=str,
default=default_element_type,
help="The model element type. Must be a supported Cubit 4 node element type. " "(default: %(default)s)",
)
parser.add_argument(
"--solver",
type=str,
default=default_solver,
choices=["abaqus", "sierra", "adagio"],
help="The target solver for the mesh file. (default: %(default)s)",
)
return parser
if __name__ == "__main__":
parser = get_parser()
args = parser.parse_args()
sys.exit(
main(
input_file=args.input_file,
output_file=args.output_file,
global_seed=args.global_seed,
element_type=args.element_type,
solver=args.solver,
)
)