install roms in mac M1

官方教程,请查阅wikiROMS(https://www.myroms.org/wiki/ROMS_Mac)

查找安装roms所需要的支持软件及位置

  1. make, Xcode, Perl, svn
  2. gfortran
  3. mpi
  4. netcdf

安装支持软件

可直接在homebrew官网(https://formulae.brew.sh)搜索,用brew install的命令下载即可

查询位置

gfortran

which gfortran

电脑里如果已安装,则通过which查询路径即可,如果未安装,可直接通过brew进行安装,因为gfotran已经集成到gcc里,因此可参考一下代码

brew install gcc

我个人which到的gfortran在
img
但通过检索,可以发现在/opt/homebrew/Cellar/里有完整的一些含头文件、库文件的包,因此后面设置环境变量时用的是Cellar内的路径。建议有兴趣也可以自行检索。
imgimg

mpi

which mpirun

同理可查找mpi所在的路径
img
Cellar:
img

netcdf

which ncdump

img
Cellar:
img
重点更新
img

下载roms

在官网注册roms的账号

下载

  1. 创建并进入roms安装的文件夹
    cd ~
    mkdir ROMS
    cd ROMS    #我选择安装在主目录下的ROMS目录里
    
  2. 下载roms包
    svn checkout --username joeroms https://www.myroms.org/svn/src/trunk #把joeroms改成自己的roms账号用户名,下载好后会发现有一个ROMS下有一个trunk的目录
    svn checkout --username joeroms https://www.myroms.org/svn/src/trunk mydir #也可指定文件夹,下载好后会发现ROMS下有一个mydir的目录
    

自定义构建脚本

ROMS源代码在trunk/ROMS/Bin目录中附带一个构建脚本。提供了用sh(build_roms.sh)和csh(build.sh)编写的示例。接下来,将选择用sh脚本作示范

Upwelling示例创建和配置

  1. 新建upwelling算例
  2. 复制所需要的文件
  3. 修改build_roms.sh
  4. 修改my_build_paths.sh
  5. 修改Linux-gfortran.mk(它好像不起作用,请忽略)

在trunk同级目录下创建Projects的新文件夹,并在下面创建upwelling的算例

 mkdir Projects

img

cd Projects
mkdir Upwelling
cd Upwelling

复制所需要的文件

cp ../../trunk/ROMS/External/roms_upwelling.in .
cp ../../trunk/ROMS/Include/upwelling.h .
cp ../../trunk/ROMS/Bin/build_roms.sh .

修改build_roms.sh

export   ROMS_APPLICATION=UPWELLING 
export        MY_ROOT_DIR=/Users/username/ROMS 
export     MY_PROJECT_DIR=${MY_ROOT_DIR}/Projects/Upwelling
# export  MY_CPP_FLAGS=             #要把这行注释掉
export            USE_MPI=on  
export         USE_MPIF90=on 
export          which_MPI=openmpi   #可选择mpi方案openmpi,mpich...
export               FORT=gfortran  #可选择ifort,gfortran...
export        USE_NETCDF4=on        #选择netcdf4或者netcdf3
export        USE_MY_LIBS=yes       #使用自己安装的库

修改情况如上所示

修改my_build_paths.sh

如果在build_roms.sh中选择USE_MY_LIBS=yes,则需要修改my_build_paths.sh以配置自己的环境变量。注意需要修改的有:mpi,netcdf4,hdf5。
因为我选择的是gfortran,openmpi,故找到gfortran栏,修改openmpi,netcdf4,hdf5:

elif [ "${which_MPI}" = "openmpi" ]; then
export        MPI_SOFT=/opt/homebrew/Cellar/open-mpi/4.1.4_1        #mpi
export          NETCDF=/opt/homebrew/Cellar/netcdf/4.8.1_3          #netcdf4
export            HDF5=/opt/homebrew/Cellar/hdf5/1.12.2_1          #hdf5

修改Linux-gfortran.mk

ifdef USE_NETCDF4
#        NF_CONFIG ?= nf-config
#    NETCDF_INCDIR ?= $(shell $(NF_CONFIG) --prefix)/include
#             LIBS += $(shell $(NF_CONFIG) --flibs)
#           INCDIR += $(NETCDF_INCDIR) $(INCDIR)
    NETCDF_INCDIR ?= /opt/homebrew/Cellar/netcdf/4.8.1_3/include
    NETCDF_LIBDIR ?= /opt/homebrew/Cellar/netcdf/4.8.1_3/lib
      NETCDF_LIBS ?= -lnetcdf
             LIBS += -L$(NETCDF_LIBDIR) $(NETCDF_LIBS)
           INCDIR += $(NETCDF_INCDIR) $(INCDIR)
else
    NETCDF_INCDIR ?= /opt/gfortransoft/serial/netcdf3/include
    NETCDF_LIBDIR ?= /opt/gfortransoft/serial/netcdf3/lib
      NETCDF_LIBS ?= -lnetcdf
             LIBS += -L$(NETCDF_LIBDIR) $(NETCDF_LIBS)
           INCDIR += $(NETCDF_INCDIR) $(INCDIR)
endif

ifdef USE_HDF5
      HDF5_INCDIR ?= /opt/homebrew/Cellar/hdf5/1.12.2_1/include
      HDF5_LIBDIR ?= /opt/homebrew/Cellar/hdf5/1.12.2_1/lib
#      HDF5_INCDIR ?= $(HDF5_INC)
#      HDF5_LIBDIR ?= $(HDF5_LIBDIR)
        HDF5_LIBS ?= -lhdf5_fortran -lhdf5hl_fortran -lhdf5 -lz
             LIBS += -L$(HDF5_LIBDIR) $(HDF5_LIBS)
           INCDIR += $(HDF5_INCDIR)
endif

Upwelling示例编译

cd ~/ROMS/Projects/Upwelling
./build.bash

编译成功后可以看到romsM的可执行文件

Upwelling示例运行

  1. 对oms_upwelling.in进行修改
    !    VARNAME = ROMS/External/varinfo.yaml
    VARNAME = /Users/dan_chen/ROMS/trunk/ROMS/External/varinfo.yaml
    NtileI == 2                               ! I-direction partition
    NtileJ == 2                               ! J-direction partition
    ! 如果需要多核并行,还需修改 NtileI 和 NtileJ:确保并行使用的核数 =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
    
  3. 运行成功可在log日志看到ROMS/TOMS: DONE...,此时upweilling目录下出现生成的nc文件
    img

参考

  1. https://www.myroms.org/wiki/ROMS_Mac
  2. https://www.myroms.org/forum/viewtopic.php?t=5713
  3. https://zhuanlan.zhihu.com/p/545513615
posted @ 2022-08-30 19:21  dan-chen  阅读(196)  评论(1编辑  收藏  举报