#!/bin/bash
# submit_qm7x_enns.bsub , ENN baselines on QM7-X polarizability components.
#
# Array 1..18 = 3 methods × 2 targets × 3 seeds.
# method ∈ {mace, schnet, e3nn}
# target ∈ {alpha_E, alpha_T2}
# seed ∈ {42, 43, 44}
#
# index mapping (1-based):
# method_idx = (idx - 1) // 6 -> 0..2
# target_idx = ((idx - 1) % 6) // 3 -> 0..1
# seed_idx = (idx - 1) % 3 -> 0..2
#BSUB -J starg_qm7x[1-18]
#BSUB -o logs/qm7x_%I_%J.out
#BSUB -e logs/qm7x_%I_%J.err
#BSUB -q normal
#BSUB -n 16
#BSUB -gpu "num=1:mode=exclusive_process"
#BSUB -W 24:00
#BSUB -M 128GB
set -uo pipefail
export TORCH_FORCE_NO_WEIGHTS_ONLY_LOAD=1
mkdir -p logs results
METHODS=(mace schnet e3nn)
TARGETS=(alpha_E alpha_T2)
SEEDS=(42 43 44)
METHOD="${METHODS[$(( (LSB_JOBINDEX - 1) / 6 ))]}"
TARGET="${TARGETS[$(( ((LSB_JOBINDEX - 1) % 6) / 3 ))]}"
SEED="${SEEDS[$(( (LSB_JOBINDEX - 1) % 3 ))]}"
WORKDIR=$HOME/starg/python/large_scale
QM7X_DIR=${QM7X_DIR:-/u/$USER/data/qm7x}
cd "$WORKDIR"
export PYTHONPATH=".:${PYTHONPATH:-}"
echo "[$(date)] host=$(hostname) array=$LSB_JOBINDEX method=$METHOD target=$TARGET seed=$SEED"
nvidia-smi --query-gpu=name,memory.total --format=csv,noheader || true
case "$METHOD" in
mace)
python3 train_baseline_mace.py \
--dataset qm7x \
--target "$TARGET" \
--qm7x_dir "$QM7X_DIR" \
--seed "$SEED" \
--out_dir results/ \
--device cuda
;;
schnet)
python3 train_baseline_pyg_schnet.py \
--dataset qm7x \
--target "$TARGET" \
--qm7x_dir "$QM7X_DIR" \
--seed "$SEED" \
--out_dir results/ \
--device cuda
;;
e3nn)
python3 train_baseline_e3nn.py \
--dataset qm7x \
--target "$TARGET" \
--qm7x_dir "$QM7X_DIR" \
--seed "$SEED" \
--out_dir results/ \
--device cuda
;;
*)
echo "unknown method: $METHOD"
exit 1
;;
esac
echo "[$(date)] done"