Calculations/Dipolar-Gas-Simulator/submit_jobs_for_phase_boundary.sh

59 lines
2.1 KiB
Bash

# ----------- Define scan ranges -----------
# Use space-separated floating-point/integer values
SCATTERING_LENGTH_RANGE="[82.0 84.0 86.0 88.0 90.0 92.0 94.0 96.0 98.0 100.0]"
POLAR_ANGLE_RANGE="[0.0]"
AZIMUTHAL_ANGLE_RANGE="[0.0]"
NUM_ATOMS_LIST="[50000 500000 950000 1400000 1850000 2300000 2750000 3200000 3650000 4100000 4550000 5000000]"
CHUNK_SIZE=4
# ----------- Count total combinations for SLURM array -----------
# Strip brackets for Bash processing (for counting only)
scatteringLengths=($(echo "$SCATTERING_LENGTH_RANGE" | tr -d '[],'))
polarAngles=($(echo "$POLAR_ANGLE_RANGE" | tr -d '[],'))
azimuthalAngles=($(echo "$AZIMUTHAL_ANGLE_RANGE" | tr -d '[],'))
numAtoms=($(echo "$NUM_ATOMS_LIST" | tr -d '[],'))
# Ensure SCATTERING_LENGTH_RANGE and NUM_ATOMS_LIST have the same number of elements
if [ ${#scatteringLengths[@]} -ne ${#numAtoms[@]} ]; then
echo "Error: SCATTERING_LENGTH_RANGE and NUM_ATOMS_LIST must have the same number of elements."
exit 1
fi
# Calculate the total number of jobs
totalJobs=$((${#scatteringLengths[@]} * ${#polarAngles[@]} * ${#azimuthalAngles[@]}))
numArrayJobs=$(( (totalJobs + CHUNK_SIZE - 1) / CHUNK_SIZE ))
echo "Total number of jobs: $totalJobs"
echo "Number of SLURM array jobs: $numArrayJobs"
echo "Running SLURM job array from 1 to ${numArrayJobs}"
# ----------- Submit SLURM array job -----------
sbatch --export=SCATTERING_LENGTH_RANGE="$SCATTERING_LENGTH_RANGE",POLAR_ANGLE_RANGE="$POLAR_ANGLE_RANGE",AZIMUTHAL_ANGLE_RANGE="$AZIMUTHAL_ANGLE_RANGE",NUM_ATOMS_LIST="$NUM_ATOMS_LIST",CHUNK_SIZE=$CHUNK_SIZE << EOF
#!/bin/bash
#SBATCH --partition=gpu-single
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=8
#SBATCH --gres=gpu:1
#SBATCH --mem=16G
#SBATCH --time=04:00:00
#SBATCH --job-name=simulation
#SBATCH --error=simulation_%A_%a.err
#SBATCH --output=simulation_%A_%a.out
#SBATCH --array=1-${numArrayJobs}
# Load MATLAB
module load math/matlab/R2023a
echo "Initiating Job..."
# Run MATLAB wrapper with this batch index
matlab -nodisplay -nosplash -r "Scripts.run_hybrid_worker_wrapper(\$SLURM_ARRAY_TASK_ID)"
echo "Job terminated successfully"
exit
EOF