#!/bin/bash
#PBS -N fluent
#PBS -l nodes=2:ppn=64
#PBS -o output
#PBS -e error
#PBS -q normal
module load apps/ansys/2022R1
module load compiler/intel/2021.3.0
module load mpi/openmpi/intel/4.0.3
cd $PBS_O_WORKDIR
ulimit -s unlimited
echo "job start at $(date)" >> job_time
FLUENT=/public/software/apps/ansys/2022R1/v221/fluent/bin/fluent
if [ "$PBS_O_WORKDIR" == "$PBS_O_WORKDIR" ]; then
cat $PBS_NODEFILE > .hostlist-job$PBS_JOBID
fi
mpirun -np $PBS_NP -machinefile .hostlist-job$PBS_JOBID $FLUENT -t $PBS_NP -ssh -g 2ddp -i projectile.jou
rm -f .hostlist-job$PBS_JOBID
echo "job end at $(date)" >> job_time
上述代码使用 PBS(Portable Batch System)脚本在集群环境中提交 ANSYS Fluent 的作业。下面是对脚本各部分的解释:
1. #!/bin/bash
- 告诉系统使用 Bash 解释器执行脚本。
2. #PBS -N fluent
- 为作业命名为 "fluent"。
3. #PBS -l nodes=2:ppn=64
- 请求使用 2 个节点,每个节点上有 64 个处理器核心(ppn=64)。
4. #PBS -o output
- 指定标准输出文件的名称为 "output"。
5. #PBS -e error
- 指定标准错误文件的名称为 "error"。
6. #PBS -q normal
- 指定作业提交到 "normal" 队列。
7. module load apps/ansys/2022R1
- 载入 ANSYS Fluent 软件模块,版本为 2022R1。
8. module load compiler/intel/2021.3.0
- 载入 Intel 编译器模块,版本为 2021.3.0。
9. module load mpi/openmpi/intel/4.0.3
- 载入 Intel MPI 模块,版本为 Open MPI 4.0.3。
10. cd $PBS_O_WORKDIR
- 切换到脚本所在的工作目录。
11. ulimit -s unlimited
- 设置堆栈大小为无限制。
12. echo "job start at $(date)" >> job_time
- 将作业开始的时间写入名为 "job_time" 的文件。
13. FLUENT=/public/software/apps/ansys/2022R1/v221/fluent/bin/fluent
- 设置 FLUENT 变量为 ANSYS Fluent 可执行文件的路径。
14. if [ "$PBS_O_WORKDIR" == "$PBS_O_WORKDIR" ]; then ... fi
- 检查当前工作目录是否为 PBS 工作目录,如果是,则将节点列表写入名为 ".hostlist-job$PBS_JOBID" 的文件。
15. mpirun -np $PBS_NP -machinefile .hostlist-job$PBS_JOBID $FLUENT -t $PBS_NP -ssh -g 2ddp -i projectile.jou
- 使用 `mpirun` 启动 Fluent,使用 `-np` 指定进程数, `-machinefile` 指定节点列表文件,`-t` 指定进程数,`-ssh` 指定使用 SSH 进行通信,`-g 2ddp` 指定并行模式,`-i projectile.jou` 指定 Fluent 输入文件。
16. rm -f .hostlist-job$PBS_JOBID
- 删除节点列表文件。
17. echo "job end at $(date)" >> job_time
- 将作业结束的时间写入名为 "job_time" 的文件。