H~~~ello!我是热爱海洋的Marine!总算来更新Regional Ocean Modeling System(ROMS)模式相关的东西了! 这一篇仅仅是给大家过一遍ROMS模式的配置与运行流程,有小细节但只有一点点;更为详细的ROMS教程我会在后面分期分主题给大家带来自己的体会、技巧和心得,大家敬请期待吧! 也希望大家能够触类旁通举一反三哈,以后在使用LICOM、MITgcm、HYCOM等等其他基于Fortran底层的模式,整个流程都是非常相似的,把握使用的主线就不至于无从下手。 1.ROMS源码ROMS模式源码的获取需注册账户并通过SVN方式(或者通过GIT,个人没尝试过)获得,网址: , 注册成功后通过SVN软件(例如:TortoiseSVN)获取最新或指定版本的源码。 注意:源码一定直接放到Linux环境里,如果从windows上传到Linux,会出现格式不同导致后续运行时报错(一般是报MPI communication error)。 2.编译文件(build.sh/bash)因为我一直使用超算跑模式,图片为超算配置的例子。个人电脑安装虚拟机以及各种库,可以百度一下有很多的例子。如果大家需要的话,我也可以整理一下单独出一篇文章,因为这一步骤真的容易卡住。 编译前需要指定编译器、MPI环境、NetCDF库、HDF5库(四个最基本的库)等创建编译环境,一定一定一定使用同种同版本的编译器进行编译、安装各种库(例如intel compiler 2017.5.239我最常用也是最稳定的版本),否则编译即使通过,运行也会报MPI的error(个人遇到是buffer size相关)。 ROMS编译一般使用源码路径/ROMS/Bin/内的build_roms.sh(.bash)文件,需指定源码路径、头文件(.h)路径以及项目路径等路径项,同时需选择MPI环境、是否使用Netcdf-4、是否并行HDF库等选择项,主要更改的地方见图2所示。 旧版ROMS支持MPICH、MPICH2、OPENMPI三种,新版build文件也支持IntelMPI和mvapich2了!!!(目前常用884版本支持前三种,1034已经支持mvapich2,最新的1087也已经支持IntelMPI,再也不用和工程师对线,要求安装各种MPI了);在build.bash中一般也需要用export指定netcdf库的路径以及mpi库的路径(主要是不指定经常报错,多加几行命令也省心)。其他更详细的build文件介绍,参照: 3.头文件(.h)头文件内包括了定义特定应用程序的所有C预处理选项,包括动量方程选项、垂向混合选项(KPP,GLS,MY2.5)、示踪粒子选项、是否加入潮汐作用,耦合海浪SWAN、生态CoNiSE其他模块等等等等诸多控制选项。.h文件是模式控制的灵魂,我一般都是沿用亲爱的导师的配置,具体需要的一些通用配置以及各种混合方案以后单独拎出来讲。详细的头文件选项内容可参考(非常,非常,非常多): 需要注意的是,头文件的命名要与build文件内的application名称一致。 完成build文件与.h文件修改后,即可执行编译,编译成功后生成Build文件夹以及oceanM或romsM文件(一般大小5~10MB,没见过太大的,oceanM太小了很可能有问题)。 4.输入参数文件(.in).in文件设置许多无需重新编译即可更改的参数值、边界条件的选择、指定输入文件路径、指定输出变量以及输出路径;一般选择源码路径/ROMS/External/内的.in文件进行更改(我都是用http://upwelling.in进行更改)。详细的.in文件内容可参照.in文件后面针对各项参数、输入输出文件的解释说明(ROMS注释算是很清楚、贴心了)。 后续考虑会出一篇专门针对.in文件参数的中文解释的文章,供大家查阅参考。 5.输入输出文件(.nc)ROMS输入文件一般采用NetCDF格式,官方提供了Matlab工具包来制作各种输入文件,可以通过SVN网址 获得(RNT和AGRIF的工具包下载了,但完全没用过)。前处理文件目前还有Pyroms工具包,习惯python的同学可以尝试使用,网址: 输入文件图4包括格点文件、初始场、开边界场、气候态文件、河流场、潮汐场(最新的1087版本ROMS官方更新加入了天文潮!!!普天同庆)、强迫场(净水通量、净热通量、SST、SSS、风应力),这些都是我最经常输入和更改的文件。可输出多种文件种类(见图5)。具体官方matlab工具包的使用,我现在也没有系统的掌握,只参考其中的一部分写到自己的script里,后续我自行掌握完整配一套模式的过程后,再来系统的给大家讲一下工具包的使用以及文件制作的详细事宜。 5.运行修改完成.in文件后,模式就可以进入运行阶段。以“天河二号”超算平台为例:使用 ./yhrun -N 1 -n 64 ./oceanM ./http://upwelling.in命令运行,使用tail -f slurm-任务号.out 命令查看运行状态,成功界面如图6。 后记大家刚开始入门,WikiROMS是很好的查阅材料(虽然有些页面内容有缺失) 如果遇到问题,可以去ROMS官方的FAQ里查看前人的问题帖子以及arango、kate等大佬的解决方案(最近有一个读取变量时间的问题就是阅读FAQ解决的,很赞) ROMS模式整体的使用大致流程就是这样,我也仅仅入门模式满打满算两年时间,期间上课、阅读文献知识积累占用很多的时间,基本很难有做项目以外的时间去碰ROMS其他的东西,更多的是沿用课题组里的配置做一些细微的改动,这也导致我现在停留在“能用”的这个阶段,距离“会用”还有很长的路要走。
5 O. k* D( F8 C# C' }* d" l |