ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

install roms in mac M1

2022-08-30 19:31:46  阅读:202  来源: 互联网

标签:roms ROMS HDF5 mac NETCDF M1 export INCDIR


官方教程,请查阅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

下载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

标签:roms,ROMS,HDF5,mac,NETCDF,M1,export,INCDIR
来源: https://www.cnblogs.com/dan-chen/p/16640546.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有