# Define scan ranges (encoded as strings) SCATTERING_LENGTH_RANGE="85" POLAR_ANGLE_RANGE="0" AZIMUTHAL_ANGLE_RANGE="0" NUM_ATOMS_LIST="[90000]" CHUNK_SIZE=1 # Convert parameter ranges into arrays scatteringLengths=($(eval echo {$SCATTERING_LENGTH_RANGE})) polarAngles=($(eval echo {$POLAR_ANGLE_RANGE})) azimuthalAngles=($(eval echo {$AZIMUTHAL_ANGLE_RANGE})) numAtoms=($(eval echo {$NUM_ATOMS_LIST})) # Calculate the total number of jobs (combinations of parameters) totalJobs=$((${#scatteringLengths[@]} * ${#polarAngles[@]} * ${#azimuthalAngles[@]} * ${#numAtoms[@]})) # Calculate the number of array jobs based on total jobs and chunk size numArrayJobs=$(( (totalJobs + CHUNK_SIZE - 1) / CHUNK_SIZE )) # Print the total number of jobs and array jobs for debugging echo "Total number of jobs: $totalJobs" echo "Number of SLURM array jobs: $numArrayJobs" # Create the SLURM job submission command 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 ########### Begin SLURM header ########### #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=00:40:00 #SBATCH --job-name=simulation #SBATCH --error=simulation_%A_%a.err #SBATCH --output=simulation_%A_%a.out #SBATCH --array=1-${numArrayJobs} ########### End SLURM header ########## echo "Working Directory: $PWD" echo "Running on host $HOSTNAME" echo "Job id: $SLURM_JOB_ID" echo "Job name: $SLURM_JOB_NAME" echo "Number of nodes allocated to job: $SLURM_JOB_NUM_NODES" echo "Number of GPUs allocated to job: $SLURM_GPUS" # Load module module load math/matlab/R2023a echo Directory is `pwd` echo "Initiating Job..." # Inside SLURM job array echo "Running SLURM job array from 1 to ${numArrayJobs}" # Start MATLAB job with the batch index matlab -nodisplay -nosplash -r "Scripts.run_hybrid_worker_wrapper(\$SLURM_ARRAY_TASK_ID)" # notice for tests echo "Job terminated successfully" exit EOF