1、注册

获得源码的第一步是去官网注册,人工审核大概需要一天的时间。

ROMS> start

2、准备工作

2.1 安装HDF5

下载安装包:以1.8.10版本为例

HDF5 1.8.10 Source Code

解压后进入控制台,移动到压缩包所在目录,输入以下指令完成安装,这里要记得安装的位置。注意,有时make不成功需要先运行make clean,再重新make。

./configure --prefix=/usr/local/hdf5 # 指定安装路径

make

make check    # 验证安装是否成功

make install  

2.2 安装NetCDF4

2.2.0 安装依赖库

依赖库主要有三个:

numpy

cftime

HDF5

刚才已安装HDF5,剩下两个按照网上的教程,可以去下载wheel文件安装。

另一个省事的办法:直接在ubuntu控制台输入numpy、cftime,在未安装该库时控制台会给出对应的安装指令。

NetCDF不版本的安装有些区别,旧版的相对比较简单。如果没有特殊需求推荐安装旧版,如果后续demo运行有误则可尝试安装新版。

2.2.1安装旧版(4.3.1之前的版本)

下载链接:

https://pypi.org/project/netCDF4/%23files

最简单的办法是输入以下指令:

pip install netCDF4

该指令可以直接从官网复制。

2.2.2安装新版

下载链接:

NetCDF: Building the NetCDF-4.2 and later Fortran libraries

新版需要分别编译和安装c文件和fortran文件。首先解压c文件的压缩包,阅读其中的INSTALL.md文件,可知编译NetCDF-c之前需要先编译zlib和HDF5两个库,HDF5前文已经提到,zlib似乎时ubuntu自带的,没有的话可以输入:

sudo apt-get install -y zlib* 

然后在控制台进入netcdf-c解压产生的文件夹中,输入以下指令

CPPFLAGS=-I/home/username/local/include LDFLAGS=-L/home/username/local/lib ./configure --prefix=/home/username/local
make check install

HDF5、zlib、szip的头文件库文件的位置应该根据实际情况修改,不一定都是以上写的位置。prefix后写的安装位置最好也修改到一个便于管理的位置。

netcdf-fortran部分的编译与安装步骤如下,这一部分也可以在官网找到

1、找到netCDF-c的安装路径,我设置为:

NCDIR=/usr/local

2、设置Fortran和c编译器(确认编译器的指令:which gcc; which gfortran)

CC=gcc
FC=gfortran

3、安装netCDF-F

NFDIR=/usr/local #安装路径
CPPFLAGS=-I${NCDIR}/include LDFLAGS=L${NCDIR}/lib \
./configure --prefix=${NFDIR}
make check
make install #如果出现权限的报错,则在前面加sudo

3、安装ROMS

输入以下指令安装mpich2


sudo apt-get -y install mpich 

输入以下指令即可获得ROMS源码,提醒linux使用不熟练的同学:mkdir之前应先cd进入事先准备好的文件夹,建议将ROMS下载至指定文件夹便于以后的管理。

sudo apt-get install subversion

mkdir myROMS

cd 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

4、Upwelling例程运行

以upwelling(上翻流)为例验证安装结果。

4.1新建目录

新建文件夹并将以下三个文件复制到相应的目录,直接复制粘贴就行。有些版本的ROMS里build_roms.sh的后缀为bash。

# 在与刚才安装的trunk的同级目录新建Projects文件夹,用于存放ROMS的各种应用
mkdir Projects
cd Projects
# 在Projects文件夹下建立Upwelling文件夹
mkdir Upwelling
cd Upwelling
# 复制所需的文件到Upwelling文件夹
trunk/ROMS/External/roms_upwelling.in
trunk/ROMS/Include/upwelling.h
trunk/ROMS/Bin/build_roms.sh
trunk/ROMS/External/varinfo.dat

4.2变量设置

1、修改build_roms.sh

将build_roms.sh原有对应位置的内容替换为以下代码

# ROMS根目录和Upwelling路径
export  MY_ROOT_DIR=${HOME}/apps/myROMS
export  MY_PROJECT_DIR=${MY_ROOT_DIR}/Projects/Upwelling
export  MY_ROMS_SRC=${MY_ROOT_DIR}/trunk # trunk目录
#export  MY_CPP_FLAGS=     # 注释掉MY_CPP_FLAGS变量
export  USE_MPI=on          
export  USE_MPIF90=on   # 使用MPI分布式内存的并行方式      
export  which_MPI=mpich2   # MPI的发行版选择mpich2   
export  FORT=gfortran    # Fortran编译器选择gfortran
export  USE_NETCDF4=on    # 使用NETCDF4作为IO
export USE_MY_LIBS=yes     # 由于使用了第三方库,需要打开这个开关

2、修改my_build_paths.sh

打开myROMS/trunk/Compilers/my_build_paths.sh找到 USE_MPIF90 部分,根据使用的编译器(本文用gfortran)以及MPI 发行版(本文为mpich2)修改对应行的 MPI_ROOT(mpich2 安装路径可以使用 whihc mpirun 指令查看)。

找到USE_NETCDF4 部分,根据编译器(gfortran)、以及是否并行 (IO),修改 NETCDF 变量的路径(NETCDF 的路径可以用 which nf-config 或 which ncdump 指令查看)。

如果这三步存在错误,运行时会出现以下错误:

4.3编译安装

直接运行脚本即可安装
./build_roms.sh
./build_roms.sh -j 4 #或者使用多线程编译

这个过程比较久,结束后生成romsM文件即为成功。附一张运行过程中的图:

4.4模式运行

1、修改VARNAME等参数

在romsM文件所在目录,修改roms_upwelling.in文件,把VARNAME设置为varinfo.dat文件夹所在的位置,/home/我的用户名/myROMS/trunk/ROMS/External/varinfo.dat,修改运行核数为4(也可以不改):

VARNAME = /home/我的用户名/myROMS/trunk/ROMS/External/varinfo.dat
NtileI  = 2
NitleJ  = 2
#NtileI*NtileJ=4

2、运行mpirun

用mpirun指令运行roms:

mpirun -np 4 ./romsM roms_upwelling.in

结果为:

 注意,可能是由于设置了多核的原因,运行以下指令会出错

./romsM roms_upwelling.in

成功运行后,文件夹中多了roms_avg.nc  roms_dia.nc  roms_his.nc  roms_rst.nc这些文件。

5、Reference

HDF5

HDF5 1.8.10 Source Code

Linux安装hdf5_yaoyz105-CSDN博客_hdf5安装

NETCDF4

netCDF4 · PyPI

cftime · PyPI

linux下netCDF4安装笔记_domotokoi的博客-CSDN博客_linux netcdf4安装

NetCDF: Building the NetCDF-4.2 and later Fortran librarieshttps://docs.unidata.ucar.edu/netcdf-c/current/building_netcdf_fortran.html

ROMS

ROMS海洋模式安装攻略 - 知乎

ROMS区域海洋模式的安装和运行_islandowner2017的博客-CSDN博客_roms模式

ROMS 编译upwelling.h_joseph_hsu的博客-CSDN博客

Logo

更多推荐