Import("env", "alias", "parameters")

# Geometry
env.AbaqusJournal(
    target=["rectangle_geometry.cae", "rectangle_geometry.jnl"],
    source=["rectangle_geometry.py"],
    subcommand_options="--width ${width} --height ${height}",
    **parameters,
)

# Partition
env.AbaqusJournal(
    target=["rectangle_partition.cae", "rectangle_partition.jnl"],
    source=["rectangle_partition.py", "rectangle_geometry.cae"],
    subcommand_options="--width ${width} --height ${height}",
    **parameters,
)

# Mesh
env.AbaqusJournal(
    target=["rectangle_mesh.inp", "rectangle_mesh.cae", "rectangle_mesh.jnl"],
    source=["rectangle_mesh.py", "rectangle_partition.cae", "abaqus_utilities.py"],
    subcommand_options="--global-seed ${global_seed}",
    **parameters,
)

# SolverPrep
env.CopySubstfile(
    ["#/rectangle_compression.inp.in"],
    substitution_dictionary=env.SubstitutionSyntax(parameters),
)

# Abaqus Solve
env.AbaqusStandard(
    target=["rectangle_compression.odb"],
    source=["rectangle_compression.inp"],
    job="rectangle_compression",
    program_options="-double both",
    **parameters,
)

# Abaqus Extract
env.AbaqusExtract(
    target=["rectangle_compression.h5", "rectangle_compression_datasets.h5"],
    source=["rectangle_compression.odb"],
)

# Post-processing
target = env.PythonScript(
    target=["stress_strain.pdf", "stress_strain.csv"],
    source=["post_processing.py", "rectangle_compression_datasets.h5"],
    subcommand_options="--input-file ${SOURCES[1:].abspath} --output-file ${TARGET.file} --x-units mm/mm --y-units MPa",
)

# Collector alias named after the model simulation
env.Alias(alias, target)

if not env["unconditional_build"] and not env["ABAQUS_PROGRAM"]:
    print(f"Program 'abaqus' was not found in construction environment. Ignoring 'rectangle' target(s)")
    Ignore([".", alias], target)
