ROMS(Regional Ocean Model System) 是一个区域海洋模式,被广泛应用于各种尺度运动(大至全球尺度环流,小至河川渠道的水体运动)的模拟,以及各个领域如海气耦合、海洋生物、海洋地质以及海冰领域的研究等。这篇文章主要面向初学者,介绍 ROMS 的安装以及 upwelling 个例的运行。
一 源码获取
ROMS需要注册获取,需要在官网注册账号并填写用途和单位的信息。
(1)ROMS 官网注册
http://www.myroms.org/上找到register,填一个表,记住username和password,填完提交后马上会给你发邮件告诉你提交成功,等1个工作日后左右会再发一个确认邮件(收到第二次邮件才是注册成功)。
(2)安装SVN并获取源码
sudo apt-get install subversionmkdir myROMScd myROMS# 默认下载到当前文件夹, 更改username为自己的,并且根据运行提示输入密码svn checkout --username username https://www.myroms.org/svn/src/trunk# 或者指定文件夹(ROMS_dir)svn checkout --username username https://www.myroms.org/svn/src/trunk ROME_dir
此次下载版本为:version 4.0。
二 安装ROMS
(1)准备工作
安装 NetCDF 和 mpich2,这个可以参考之前的文章 WRF的安装教程。
(2)新建安装目录并复制相关文件
# 在与trunk的同级目录新建Projects文件夹,用于存放ROMS的各种应用mkdir Projectscd Projects# 在Projects文件夹下建立Upwelling文件夹mkdir Upwellingcd Upwelling# 复制所需的文件到Upwelling文件夹cp ../../trunk/ROMS/External/roms_upwelling.in .cp ../../trunk/ROMS/Include/upwelling.h .cp ../../trunk/ROMS/Bin/build_roms.sh .
(3)变量设置
根据个人的需要和配置,修改build_roms.sh中的环境变量。网上很多教程都是最基础的安装,一般而言,是需要MPI分布式内存并行的,并且使用NetCDF进行IO。
以下的设置为编译器使用 gfortran,MPI 分布式并行的发行版本使用mpich2,NetCDF 使用4.2以上的版本(C和Fortran部分分开编译)。
修改build_roms.sh
# ROMS根目录和Upwelling路径export MY_ROOT_DIR=${HOME}/apps/myROMSexport MY_PROJECT_DIR=${MY_ROOT_DIR}/Projects/Upwelling
# trunk目录(默认不用改)export MY_ROMS_SRC=${MY_ROOT_DIR}/trunk
# 注释掉MY_CPP_FLAGS变量#export MY_CPP_FLAGS=
# 使用MPI分布式内存的并行方式export USE_MPI=on export USE_MPIF90=on # MPI的发行版选择mpich2export which_MPI=mpich2
# Fortran编译器选择gfortranexport FORT=gfortran
# 使用NETCDF4作为IOexport USE_NETCDF4=on
# 由于使用了第三方库,需要打开这个开关export USE_MY_LIBS=yes
由于使用了 mpich2 分布式内存并行,且使用 NetCDF4 作为 IO,因此需要设置它们的路径,库文件的路径设置在my_build_paths.sh 文件中。
vi myROMS/trunk/Compilers/my_build_paths.sh
找到 USE_MPIF90 部分,根据使用的编译器(intel pgi gfortran)以及MPI 发行版(mpich2 openmpi mvapich2)修改对应行的 MPI_ROOT,例如使用 gfortran 编译器和 mpich2,则根据 mpich2 安装路径(mpich2 安装路径可以使用 whihc mpirun 命令查看)修改如下:
类似的,需要修改 NetCDF 库的路径,根据编译器(intel pgi gfortran)、以及是否并行 IO(USE_PARALLEL_IO,这里是不需要并行IO),以及 USE_NETCDF4 部分,修改 NETCDF 变量的路径(which nf-config 或 which ncdump 可以查看 NETCDF 的路径)。
(4)编译安装
直接运行脚本即可安装./build_roms.sh./build_roms.sh -j 4 #也可以使用多线程编译# 编译完成后没报错并且出现romsM执行文件即可,老版本为oceanS#
三 运行ROMS
下面运行的个例是官网自带的一个 case,运行成功即可。未来的应用应该学会如何制作网格点、初始场文件和大气驱动文件等。
(1)修改roms_upwelling.in
修改VARNAME
VARNAME = ../../trunk/ROMS/External/varinfo.dat
如果需要多核并行,还需修改 NtileI 和 NtileJ:
NtileI == 2 ! I-direction partition NtileJ == 2 ! J-direction partition
确保并行使用的核数 = NtileI × NtileJ
(2)运行
./romsM < roms_upwelling.in # 使用串行编译mpirun -n 1 ./romsM roms_upwelling.in # 并行编译单核运行,相当于串行mpirun -n 4 ./romsM roms_upwelling.in # 并行编译4核运行mpirun -n 4 ./romsM roms_upwelling.in > log.roms # 保存运行信息到log.roms
log 文件出现 DONE 字样即运行成功:
运行成功出现这些 NC 文件:
roms_avg.nc roms_dia.nc roms_his.nc roms_rst.nc
扫描下方二维码,关注气海同途,了解更多大气海洋数值模式相关内容。
参考:
https://www.myroms.org/wiki/ROMS_Cygwin
http://madiris.altervista.org/?p=248
https://www.cnblogs.com/keegentang/p/11142368.html
http://blog.sina.com.cn/s/blog_c104a6a50101acyo.html