发布于: Aug 9, 2022

云计算对生活的影响已覆盖许多方面,除了工业生产、智能家居外,云计算还对我们们的出行产生了很大的影响,比如说我们可以依靠云计算提高天气预测的效率,避免因为天气而耽误行程。本文将描述如何利用云计算处理天气数据。

在 /fsx 目录下新建文件夹 data,下载到其中,可从官方网站获取:http://www2.mmm.ucar.edu/wrf/users/download/get_sources_wps_geog.html

$ cd /fsx
$ mkdir data
$ cd data
$  wget https://www2.mmm.ucar.edu/wrf/src/wps_files/geog_high_res_mandatory.tar.gz

然后解压缩静态地理数据,并取消 tar 文件,2.6G 的文件最终会成为 29G 的文件。文件较大,需要等待一段时间。解压缩后的文件j夹名称为 WPS_GEOG

$ gunzip geog_high_res_mandatory.tar.gz
$ tar -xf geog_high_res_mandatory.tar

然后修改 namelist.wps 文件中的 &geogrid 部分,将静态文件目录提供给 geogrid 程序。

$ cd /fsx/wrf-arm/WPS-4.2
$ view namelist.wps
geog_data_path ='/fsx/data/WPS_GEOG/'

实时气象数据可从官方网站获取:ftp://ftpprd.ncep.noaa.gov/pub/data/nccf/com/gfs/prod

在 /fsx/data 目录下创建一个目录 weather_data,将实时数据下载到 weather_data 中。 本例中下载 2021 年 6 月 22 日的f000、f006、f012 三个数据作为测试数据,您可以根据自己的需求选择其他实时数据用于测试。

$ cd /fsx/data
$ mkdir weather_data
$ cd weather_data
$ wget ftp://ftpprd.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.20210622/00/atmos/gfs.t00z.pgrb2.0p25.f000
$ mv gfs.t00z.pgrb2.0p25.f000 GFS_00h
$ wget ftp://ftpprd.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.20210622/00/atmos/gfs.t00z.pgrb2.0p25.f006
$ mv gfs.t00z.pgrb2.0p25.f006 GFS_06h
$ wget ftp://ftpprd.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.20210622/00/atmos/gfs.t00z.pgrb2.0p25.f012
$ mv gfs.t00z.pgrb2.0p25.f012 GFS_12h

转到 WPS 目录中,运行 geogrid

$ cd /fsx/wrf-arm/WPS-4.2
$ ./geogrid.exe>&log.geogrid

这一步运行成功的标志是创建了 geo_em.* 文件,在本例中为 geo_em.d01.nc 和 geo_em.d02.nc

运行 ungrib,首先修改链接到 GFS 和 Vtables 的正确位置

$ ./link_grib.csh /fsx/data/weather_data/
$ ln -sf ungrib/Variable_Tables/Vtable.GFS Vtable

然后修改 namelist.wps 文件的 start_date 和 end_date,与实时数据相契合

start_date = '2021-06-22_00:00:00','2021-06-22_00:00:00',
end_date   = '2021-06-22_12:00:00','2021-06-22_12:00:00'

然后运行 ungrib

$ ./ungrib.exe

这一步运行成功的标志是创建了 FILE:* 文件,在本例中为FILE:2021-06-22_00、FILE:2021-06-22_06、FILE:2021-06-22_12

$ ./metgrid.exe>&log.metgrid

这一步运行成功的标志是创建了 met_em* 文件

进入 WRF 目录,将 met_em.* 文件复制到工作目录

$ cd ${WRF_INSTALL}/WRF-4.2.2
$ cp ${WRF_INSTALL}/WPS-4.2/met_em* ${WRF_INSTALL}/WRF-4.2.2/run/

修改 namelist.input 文件中的开始和结束时间,每一行三项设置为相同时间,开始和结束时间与实时数据相契合;修改 num_metgrid_levels 参数为 34,与实时数据相契合。

start_year                          = 2021, 2021, 2021,
start_month                         = 06,   06,   06,
start_day                           = 22,   22,   22,
start_hour                          = 00,   00,   00,
end_year                            = 2021, 2021, 2021,
end_month                           = 06,   06,   06,
end_day                             = 22,   22,   22,
end_hour                            = 12,   12,   12,
num_metgrid_levels                  = 34,
$ mpirun -np 1 ./real.exe

检查输出文件以确保运行成功,运行成功后会看到每个域的 wrfbdy_d01 和 wrfinput_d0* 文件。如果有错误,根据文件中的提示修改 namelist.input 文件中的参数。

$ tail rsl.error.0000

可自行修改 np 参数,但要小于主节点实例的物理核数。

$ mpirun -np 8 ./wrf.exe

运行成功的标志是 rsl.out.0000 文件中有 SUCCESS 结尾,并生成 wrfout* 文件。

$ cd /fsx/data
$ wget https://dcn1tgfn79vvj.cloudfront.net/conus_2.5km_v4.tar.gz
$ tar -xzvf conus_2.5km_v4.tar.gz

为方便执行 wrf.exe 测试,将 wrf.exe 软链接到数据目录下

$ ln -s ${WRF_INSTALL}/WRF-4.2.2/main/wrf.exe /fsx/data/conus_2.5km_v4/wrf.exe
$ vi wrf.sbatch
#!/bin/bash
#SBATCH --wait-all-nodes=1
#SBATCH --ntasks-per-node=8
#SBATCH --cpus-per-task=8
#SBATCH --nodes=2
#SBATCH --ntasks-per-core=1
#SBATCH --export=ALL
#SBATCH --partition=od-queue
#SBATCH --exclusive
#SBATCH -o /fsx/slurm.out
#ENV VARIABLES#
#---------------------Run-time env-----------------------------------------
ulimit -s unlimited
export OMP_STACKSIZE=12G
export OMP_NUM_THREADS=8
export KMP_AFFINITY=scatter,verbose
#WRF ENV
export WRF_INSTALL=/fsx/wrf-arm
export GCC_VERSION=10.2.0
export OPENMPI_VERSION=4.1.0
export PATH=${WRF_INSTALL}/gcc-${GCC_VERSION}/bin:$PATH
export LD_LIBRARY_PATH=${WRF_INSTALL}/gcc-${GCC_VERSION}/lib64:$LD_LIBRARY_PATH
export PATH=${WRF_INSTALL}/openmpi-${OPENMPI_VERSION}/bin:$PATH
export LD_LIBRARY_PATH=${WRF_INSTALL}/openmpi-${OPENMPI_VERSION}/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=${WRF_INSTALL}/netcdf/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=${WRF_INSTALL}/pnetcdf/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=${WRF_INSTALL}/hdf5/lib:$LD_LIBRARY_PATH
#--------------------------------------------------------------------------
echo "Running WRF on $(date)"
cd /fsx/data/conus_2.5km_v4/
mpirun --report-bindings ./wrf.exe &>> wrf.out
echo nstasks=$SLURM_NTASKS
date -u +%Y-%m-%d_%H:%M:%S >> wrf.times

在主节点上使用以下命令提交您的作业:

$ sbatch wrf.sbatch

使用命令 squeue 检查队列的状态。作业将首先标记为 pending (PD 状态) ,因为正在创建资源(或处于 down/drained 状态)。如果您检查 EC2 仪表板,您应该会看到节点正在启动。

$ squeue

您还可以使用 sinfo 命令检查集群中可用节点的数量。

$ sinfo

您还可以使用 scontrol 命令查看详细作业信息。

$ scontrol show jobid -dd

WRF 计算结果默认保存在目录数据集目录 /fsx/data/conus_2.5km_v4。

$ cd /fsx/data/conus_2.5km_v4/
$ tail -f rsl.out.0000

运行完成后,查看输出结果文件:

$ ls -lh wrfout*
-rw-rw-r-- 1 ec2-user ec2-user 2.1G Apr 1 14:01 wrfout_d01_2018-06-17_00:00:00

采用 ncview 或者 Panoply 等软件查看结果文件的输出变量和可视化化展示,以下是模拟三小时后的 10m 风速的图形:

任务提交后,ParallelCluster 会根据任务需求自动启动计算实例,添加到集群中,并行执行任务;任务完成后,一段时间内如果没有任务运行在计算节点,ParallelCluster 会将计算节点终止,节约成本。

综上所述,WRF 模式系统全流程组件都可以在基于 Graviton2 的 ARM 架构实例上运行,同时使用 ParallelCluster 的灵活管理,使得WRF任务的运行既高效,又经济。在云上使用 WRF 做气象分析和预测不仅可以使您的效率大大提高,成本灵活可控,也使得成果的展示和使用更加便捷。

相关文章