ROMs是什么

簡(jiǎn)介

ROMs(Regional Ocean Modeling System)是海洋研究機(jī)構(gòu)常用的區(qū)域和大洋環(huán)流模式,已經(jīng)在CO-OPS開(kāi)始得到大量使用,并且將其列為業(yè)務(wù)化海洋模式之一。R OMS 模式采用F90/F95編寫(xiě),代碼結(jié)構(gòu)依據(jù)網(wǎng)格特點(diǎn)編寫(xiě),支持共享存儲(chǔ)和消息傳遞兩種多處理器體系架構(gòu),其對(duì)集群性能要求較高,具有計(jì)算密集、IO讀寫(xiě)量較大、網(wǎng)絡(luò)延遲帶寬要求高的特點(diǎn)。模式依據(jù)問(wèn)題規(guī)模可達(dá)到較好擴(kuò)展性,規(guī)模較小時(shí)可加速到將近100core,較大時(shí)可達(dá)到400-1000core。同時(shí),該應(yīng)用也可跟氣象海洋上其他模式組成耦合模式,或者作為其他氣象海洋應(yīng)用的驅(qū)動(dòng)程序,在國(guó)內(nèi)海洋機(jī)構(gòu)中的應(yīng)用也比較多。

配置流程

1.獲取源代碼和測(cè)試數(shù)據(jù)

本文檔所測(cè)試版本為:ROMs 916

軟件獲取路徑為:官網(wǎng)注冊(cè)申請(qǐng)通過(guò)后使用SVN檢出(https://www.myroms.org/svn/src/trunk),如下:

svn checkout https://www.myroms.org/svn/src/trunk ROMs_916

根據(jù)提示輸入本機(jī)root密碼,官網(wǎng)注冊(cè)通過(guò)的用戶名、用戶名對(duì)應(yīng)的密碼。

上述命令執(zhí)行完成后,變更版本至916,如下:

cd ROMs_916
svn update-r 916
cd-
ROMs官網(wǎng):https://www.myroms.org/

本文以ROMs 916為例,編譯安裝ROMs。

2.基礎(chǔ)環(huán)境安裝

1)執(zhí)行如下命令,安裝必要的系統(tǒng)組件

yum install-y curl-devel libcurl-devel zlib-devel dos2unix

2)執(zhí)行如下命令下載基礎(chǔ)環(huán)境軟件包

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)依次執(zhí)行如下命令升級(jí)安裝最新版gcc編譯器(當(dāng)前為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)依次執(zhí)行如下命令安裝并行庫(kù)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)依次執(zhí)行如下命令安裝數(shù)據(jù)格式庫(kù)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)依次執(zhí)行如下命令安裝數(shù)據(jù)格式庫(kù)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)依次執(zhí)行如下命令,建立安裝目錄、拷貝源碼并進(jìn)入安裝目錄

mkdir-p/usr/local/ROMs/
cp-r ROMs_916/usr/local/ROMs/
cd/usr/local/ROMs/

2)依次使用如下命令,創(chuàng)建依賴組件環(huán)境變量加載腳本

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)使用如下命令,加載環(huán)境變量

source/usr/local/ROMs/env-ROMs.sh

4)執(zhí)行如下命令,將ROMs_916所有源碼文件轉(zhuǎn)換為L(zhǎng)inux格式

find.-type f-exec dos2unix{};

5)依次執(zhí)行如下命令,建立編譯測(cè)試目錄,并拷貝測(cè)試所需輸入文件

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)依次執(zhí)行如下命令,進(jìn)入編譯測(cè)試目錄,配置編譯腳本

cd test/
vim build.bash

修改ROMS_APPLICATION變量值,本次算例采用upweilling(默認(rèn)無(wú)需修改),如下:

export ROMS_APPLICATION=UPWELLING

修改MY_ROOT_DIR變量值,配置為安裝目錄絕對(duì)路徑,如下:

export MY_ROOT_DIR=/usr/local/ROMs/

修改MY_ROMS_SRC變量值,配置為ROMs源碼目錄,如下:

export MY_ROMS_SRC=${MY_ROOT_DIR}/ROMS_916

配置基礎(chǔ)MPI環(huán)境和編譯器等信息,如下:

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對(duì)應(yīng)的“openmpi”路徑,如下:

export PATH=/usr/local/openmpi3/bin:$PATH

在NetCDF配置段落的最后指定NetCDF環(huán)境變量,如下:

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)執(zhí)行如下命令,配置算例輸入文件

vim ocean_upwelling.in

配置VARNAME值為測(cè)試目錄的輸入文件,如:

VARNAME=/usr/local/ROMs/test/varinfo.dat

配置“NtileI”和“NtileJ”值為并行核心數(shù),二者的乘積應(yīng)與運(yùn)行時(shí)設(shè)置的并行核心數(shù)相等,例如當(dāng)云主機(jī)核心數(shù)為4時(shí),配置如下:

NtileI==2
NtileJ==2

需要注意的是,NtileI、NtileJ的值需要與Lm、Mm的值相匹配,不然會(huì)導(dǎo)致計(jì)算異常。

保存并退出vim。

8)執(zhí)行如下命令,編譯ROMs主程序

./build.bash-j 4

正確編譯完成后,當(dāng)前目錄生成oceanM可執(zhí)行程序。

9)依次執(zhí)行如下命令,開(kāi)始ROMs測(cè)試(根據(jù)云主機(jī)配置,本次使用4個(gè)處理核心執(zhí)行測(cè)試)

source/usr/local/ROMs/env-ROMs.sh
mpirun-np 4./oceanM ocean_upwelling.in

如果當(dāng)前賬戶為root賬戶,則mpirun還需加入允許root運(yùn)行的參數(shù)“mpirun–allow-run-as-root-np 4./oceanM ocean_upwelling.in”

正確執(zhí)行完成后當(dāng)前目錄生成計(jì)算結(jié)果,如下: