目录
SPECFEM3D简介
SPECFEM3D Cartesian 用于在任何类型的六面体协调网格(结构化或非结构化)中模拟声学(流体)、弹性(固体)、耦合声学/弹性、多孔弹性或地震波传播。例如,它可以对地震后地震波在沉积盆地或任何其他区域地质模型中的传播进行建模。它也可用于非破坏性实验或海洋声学。
SPECFEM3D Cartesian可以模拟地震波在本地或区域范围内的传播,并基于频谱元素法(spectral-element method,SEM)进行全波形成像(full waveform imaging,FWI)或伴随层析成像(adjoint tomography)。SEM是一种连续Galerkin技术,可以很容易地离散化,可以认为是一种基于张量基函数优化的离散Galerkin技术的特例。它可以精确地处理变形非常严重的网格元素。
SPECFEM3D使用Fortran2003编写,并且具有完全的可移植性。它不使用Fortran的废弃特性。使用基于消息传递接口(MPI)进行并行编程。最新发布的3.0版本包括卷积或辅助微分方程完全匹配的吸收层(C-PML或ADE-PML)以及通过CUDA使用NVIDIA GPU进行加速。
SPECFEM3D在2003年美国亚利桑那州凤凰城举行的SuperComputing会议上获得了戈登贝尔奖的最佳性能奖。 2008年,凭借在美国橡树岭国家实验室的“Jaguar” Cray XT5系统的149,784个处理器上0.16 petaflops连续运行性能再次入围戈登贝尔奖最终名单。它还在2010年获得了BULL Joseph Fourier奖。
更多相关介绍参见其用户手册:https://geodynamics.org/cig/software/specfem3d/gitbranch/devel/doc/USER_MANUAL/manual_SPECFEM3D_Cartesian.pdf
DCU版本下载安装
在DTK-23.04环境下使用进行使用,二进制包可以从https://cancon.hpccube.com:65024/1/main/DTK-23.04_hpcapps-202304/NFS3.2_CentOS7.6获取
在DTK-23.10环境下使用进行使用,二进制包可以从https://cancon.hpccube.com:65024/1/main/DTK-23.10_hpcapps-20231120/NFS3.2_CentOS7.6获取
测试算例
SPECFEM3D顶层目录下的EXAMPLES目录下有许多同类型的算例示例,在README文件中有对各个算例的简单介绍。每个算例目录下都有run_this_example.sh脚本用来运行算例,部分算例下还有自己的README文件。参考各个README文件的说明一般可以成功运行算例。本文选取homogeneous_halfspace算例。
该算例属于较为简单的算例,使用CUBIT创建均匀的半空间,即具有恒定弹性材料属性的单个体积块,并运行正向仿真。这里直接使用预先生成的网格文件,不再使用CUBIT生成。DATA目录下的Par_file文件为算例的输入文件,其中的各个参数有较为明确的注释。NPROC为MPI进程数,默认为4,使用单节点4 DCU运行时,每个DCU分配一个进程,因此不需要修改。使用多个节点时,需将该参数改为节点数乘4。GPU_MODE参数设定是否使用GPU。run.sbatch为提交脚本文件,内容如下:
#!/bin/bash
#SBATCH -J SPECFEM3D
#SBATCH -p sugon
#SBATCH -N 1
#SBATCH --ntasks-per-node=32
#SBATCH --cpus-per-task=1
#SBATCH --gres=dcu:4
#SBATCH -o %j.loop
#SBATCH -e %j.loop
module purge
module add compiler/devtoolset/7.3.1 compiler/rocm/3.9 mpi/hpcx/2.4.1/gcc-7.3.1
INSTALL_DIR=/public/software/apps/SPECFEM3D/rocm-3.9
export PATH=${INSTALL_DIR}/bin:$PATH
srun hostname |sort |uniq |awk '{printf "%s\n",$1}'> hostfile
((num_procs=$SLURM_JOB_NUM_NODES*4))
./run_this_example.sh hostfile
该脚本申请1个节点进行计算。修改#SBATCH -p参数用户可以提交作业的队列名称,修改#SBATCH -N为实际申请的节点数量。注意如果使用超过1个节点,需修改DATA目录下的Par_file文件中的NPROC参数。修改INSTALL_DIR为实际的安装目录。使用如下命令提交该脚本:
sbatch run.sbatch
屏幕输出文件产生当前目录的*.loop文件中,可以在提交脚本中修改#SBATCH -o和#SBATCH -e参数进行改变。算例的结果文件写入到OUTPUT_FILES目录下,可以与REF_SEIS目录下的同名文件进行对比以检查正确性。REF_SEIS目录下还带有一个plot_these_seismograms_with_gnuplot.gnu脚本,可以使用参考数据进行绘图。使用该脚本对参考数据和测试结果数据绘图如下:
可见二者结果完全一致,测试结果正确。