## This file contains the template of the generic workflow
## It can be used as a reference to create a custom workflow.

JOBS:
  TRANSFER_PROJECT:
    FILE: templates/common/transfer_project.sh
    PLATFORM: LOCAL

  BUILD_ICON:
    FILE: templates/common/build_icon.sh
    DEPENDENCIES: TRANSFER_PROJECT
    WALLCLOCK: 04:00
    PROCESSORS: 16
    RETRIALS: 2 # retry because spack downloads sometimes timeout
    NODES: 1

  BUILD_PYTHON_ENVIRONMENT:
    FILE: templates/common/build_python_environment.sh
    # Right now we rely on spack for building icon and having a python interpreter, so we need this dependency:
    DEPENDENCIES: BUILD_ICON
    WALLCLOCK: 01:00
    PROCESSORS: 16
    NODES: 1

  PREPARE_EXPERIMENT:
    FILE: templates/common/prepare_experiment.sh # WARNING: Should be replaced in the specific workflow definition!
    DEPENDENCIES: BUILD_ICON
    RUNNING: once
    WALLCLOCK: 01:00

  PREPARE_MEMBER:
    FILE: templates/common/prepare_member.sh # WARNING: Should be replaced in the specific workflow definition!
    DEPENDENCIES: PREPARE_EXPERIMENT
    RUNNING: member
    WALLCLOCK: 01:00

  PREPARE_NAMELIST:
    FILE: templates/common/prepare_namelist.py # WARNING: Should be replaced in the specific workflow definition!
    DEPENDENCIES: TRANSFER_PROJECT BUILD_PYTHON_ENVIRONMENT PREPARE_MEMBER RUN_ICON-1
    WALLCLOCK: 00:05
    RUNNING: chunk
    TYPE: python
    EXECUTABLE: "%HPCROOTDIR%/%python_environment.folder_name%/bin/python3"

  RUN_ICON:
    FILE: templates/common/run_icon.sh
    DEPENDENCIES: PREPARE_NAMELIST
    WALLCLOCK: 04:00
    RUNNING: chunk
    PROCESSORS: 64
    MEMORY: 81920
    CUSTOM_DIRECTIVES: [ "#SBATCH --exclusive" ]

  COMPRESS:
    FILE: templates/common/compress.py
    DEPENDENCIES: RUN_ICON BUILD_PYTHON_ENVIRONMENT COMPRESS-1
    RUNNING: chunk
    TYPE: python
    EXECUTABLE: "%HPCROOTDIR%/%python_environment.folder_name%/bin/python3"
    PROCESSORS: 16
    MEMORY: 16384
    WALLCLOCK: 01:00

  TRANSFER:
    FILE: templates/common/transfer.sh
    DEPENDENCIES: COMPRESS
    # Since this is running locally, can simply leave a long wallclock.
    WALLCLOCK: 24:00
    RUNNING: member
    PLATFORM: LOCAL

  CLEAN:
    FILE: templates/common/clean.sh
    DEPENDENCIES: TRANSFER
    WALLCLOCK: 00:10
    RUNNING: member