簡(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é)果,如下: