简介
ROMs(Regional Ocean Modeling System)是海洋研究机构常用的区域和大洋环流模式,已经在CO-OPS开始得到大量使用,并且将其列为业务化海洋模式之一。R OMS 模式采用F90/F95编写,代码结构依据网格特点编写,支持共享存储和消息传递两种多处理器体系架构,其对集群性能要求较高,具有计算密集、IO读写量较大、网络延迟带宽要求高的特点。模式依据问题规模可达到较好扩展性,规模较小时可加速到将近100core,较大时可达到400-1000core。同时,该应用也可跟气象海洋上其他模式组成耦合模式,或者作为其他气象海洋应用的驱动程序,在国内海洋机构中的应用也比较多。
配置流程
1.获取源代码和测试数据
本文档所测试版本为:ROMs 916
软件获取路径为:官网注册申请通过后使用SVN检出(https://www.myroms.org/svn/src/trunk),如下:
svn checkout https://www.myroms.org/svn/src/trunk ROMs_916
根据提示输入本机root密码,官网注册通过的用户名、用户名对应的密码。
上述命令执行完成后,变更版本至916,如下:
cd ROMs_916 svn update-r 916 cd- ROMs官网:https://www.myroms.org/
本文以ROMs 916为例,编译安装ROMs。
2.基础环境安装
1)执行如下命令,安装必要的系统组件
yum install-y curl-devel libcurl-devel zlib-devel dos2unix
2)执行如下命令下载基础环境软件包
wget https://ftp.gnu.org/gnu/gcc/gcc-9.1.0/gcc-9.1.0.tar.gz wget https://download.open-mpi.org/release/open-mpi/v3.1/openmpi-3.1.4.tar.gz wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.5/src/hdf5-1.10.5.tar.gz wget ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-c-4.7.0.tar.gz wget ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-fortran-4.4.5.tar.gz
3)依次执行如下命令升级安装最新版gcc编译器(当前为gcc v9.1.0)
tar-zxvf gcc-9.1.0.tar.gz cd gcc-9.1.0 ./contrib/download_prerequisites ./configure--prefix=/usr/local/gcc/9.1.0 make-j 4 make install cd-
4)依次执行如下命令安装并行库OpenMPI(v3.1.4)
export GCC_HOME=/usr/local/gcc/9.1.0/ export PATH=$GCC_HOME/bin:$PATH export LD_LIBRARY_PATH=$GCC_HOME/lib:$GCC_HOME/lib64:$LD_LIBRARY_PATH export INCLUDE=$GCC_HOME/include:$INCLUDE tar-zxvf openmpi-3.1.4.tar.gz cd openmpi-3.1.4 ./configure--prefix=/usr/local/openmpi3--enable-orterun-prefix-by-default make-j 4 make install cd-
5)依次执行如下命令安装数据格式库HDF5(v1.10.5)
export MPI_HOME=/usr/local/openmpi3 export PATH=$MPI_HOME/bin:$PATH export LD_LIBRARY_PATH=$MPI_HOME/lib:$LD_LIBRARY_PATH export INCLUDE=$MPI_HOME/include:$INCLUDE tar-zxvf hdf5-1.10.5.tar.gz cd hdf5-1.10.5 ./configure--prefix=/usr/local//hdf5--enable-fortran--enable-parallel CC=mpicc FC=mpif90 CXX=mpicxx make-j 4 make install cd-
6)依次执行如下命令安装数据格式库NetCDF(v4.x.x)
export HDF5=/usr/local/hdf5 export PATH=$HDF5/bin:$PATH export LD_LIBRARY_PATH=$HDF5/lib:$LD_LIBRARY_PATH export INCLUDE=$HDF5/include:$INCLUDE tar-zxvf netcdf-c-4.7.0.tar.gz cd netcdf-c-4.7.0 ./configure--prefix=/usr/local/netcdf LDFLAGS="-L$HDF5/lib"CPPFLAGS="-I$HDF5/include"CC=mpicc--disable-dap make-j 4 make install cd- export NETCDF=/usr/local/netcdf export PATH=$NETCDF/bin:$PATH export LD_LIBRARY_PATH=$NETCDF/lib:$LD_LIBRARY_PATH export INCLUDE=$NETCDF/include:$INCLUDE tar-zxvf netcdf-fortran-4.4.5.tar.gz cd netcdf-fortran-4.4.5 ./configure--prefix=/usr/local/netcdf CPPFLAGS="-I$HDF5/include-I$NETCDF/include"LDFLAGS="-L$HDF5/lib-L$NETCDF/lib"CC=mpicc FC=mpif90 F77=mpif90 make-j 4 make install cd-
3.主程序编译
1)依次执行如下命令,建立安装目录、拷贝源码并进入安装目录
mkdir-p/usr/local/ROMs/ cp-r ROMs_916/usr/local/ROMs/ cd/usr/local/ROMs/
2)依次使用如下命令,创建依赖组件环境变量加载脚本
vim env-ROMs.sh
依次输入如下行:
export GCC_HOME=/usr/local/gcc/9.1.0/ export PATH=$GCC_HOME/bin:$PATH export LD_LIBRARY_PATH=$GCC_HOME/lib:$GCC_HOME/lib64:$LD_LIBRARY_PATH export INCLUDE=$GCC_HOME/include:$INCLUDE export MPI_HOME=/usr/local/openmpi3 export PATH=$MPI_HOME/bin:$PATH export LD_LIBRARY_PATH=$MPI_HOME/lib:$LD_LIBRARY_PATH export INCLUDE=$MPI_HOME/include:$INCLUDE export HDF5=/usr/local/hdf5 export PATH=$HDF5/bin:$PATH export LD_LIBRARY_PATH=$HDF5/lib:$LD_LIBRARY_PATH export INCLUDE=$HDF5/include:$INCLUDE export NETCDF=/usr/local/netcdf export PATH=$NETCDF/bin:$PATH export LD_LIBRARY_PATH=$NETCDF/lib:$LD_LIBRARY_PATH export INCLUDE=$NETCDF/include:$INCLUDE
保存并退出vim。
3)使用如下命令,加载环境变量
source/usr/local/ROMs/env-ROMs.sh
4)执行如下命令,将ROMs_916所有源码文件转换为Linux格式
find.-type f-exec dos2unix{};
5)依次执行如下命令,建立编译测试目录,并拷贝测试所需输入文件
mkdir test cp ROMs_916/ROMS/Bin/build.bash test/ cp ROMs_916/ROMS/External/ocean_upwelling.in test cp ROMs_916/ROMS/External/varinfo.dat test/ cp ROMs_916/ROMS/Include/upwelling.h test/
6)依次执行如下命令,进入编译测试目录,配置编译脚本
cd test/ vim build.bash
修改ROMS_APPLICATION变量值,本次算例采用upweilling(默认无需修改),如下:
export ROMS_APPLICATION=UPWELLING
修改MY_ROOT_DIR变量值,配置为安装目录绝对路径,如下:
export MY_ROOT_DIR=/usr/local/ROMs/
修改MY_ROMS_SRC变量值,配置为ROMs源码目录,如下:
export MY_ROMS_SRC=${MY_ROOT_DIR}/ROMS_916
配置基础MPI环境和编译器等信息,如下:
export USE_MPI=on export USE_MPIF90=on export which_MPI=openmpi export FORT=gfortran export USE_LARGE=on export USE_NETCDF4=on export USE_PARALLEL_IO=on
在“if[-n"${USE_MPIF90:+1}"];then”段落配置gfortran对应的“openmpi”路径,如下:
export PATH=/usr/local/openmpi3/bin:$PATH
在NetCDF配置段落的最后指定NetCDF环境变量,如下:
export NF_CONFIG=/usr/local/netcdf/bin/nf-config export NETCDF_INCDIR=/usr/local/netcdf/include export NETCDF_LIBDIR=/usr/local/netcdf/lib
保存并退出vim。
7)执行如下命令,配置算例输入文件
vim ocean_upwelling.in
配置VARNAME值为测试目录的输入文件,如:
VARNAME=/usr/local/ROMs/test/varinfo.dat
配置“NtileI”和“NtileJ”值为并行核心数,二者的乘积应与运行时设置的并行核心数相等,例如当云主机核心数为4时,配置如下:
NtileI==2 NtileJ==2
需要注意的是,NtileI、NtileJ的值需要与Lm、Mm的值相匹配,不然会导致计算异常。
保存并退出vim。
8)执行如下命令,编译ROMs主程序
./build.bash-j 4
正确编译完成后,当前目录生成oceanM可执行程序。
9)依次执行如下命令,开始ROMs测试(根据云主机配置,本次使用4个处理核心执行测试)
source/usr/local/ROMs/env-ROMs.sh mpirun-np 4./oceanM ocean_upwelling.in
如果当前账户为root账户,则mpirun还需加入允许root运行的参数“mpirun–allow-run-as-root-np 4./oceanM ocean_upwelling.in”
正确执行完成后当前目录生成计算结果,如下: