POM海洋模式简介、安装和运行

图片

一 POM模式简介

POM(Princeton Ocean Model)模式由G.Mello和Alan Blumberg于上世纪70年代开始开发。经过发展和维护,逐渐成为了可以胜任数值实验和业务化应用的经典模式。POM是一个很容易上手而且适用性很广的数值模型,河口、陆架、湖泊、半封闭海区和开阔大洋,用的是随地形变化的sigma坐标,还可以和波浪模型耦合,能模拟潮滩变边界,现被广泛运用在科学研究和实际应用中。尽管从2021年的今天来看,这个模式可能略微跟不上时代,但其经典型和代表性是模式学习者所绕不开,其代码简洁,结构清晰,模型初学者可以考虑从POM开始学起。

POM采用蛙跳有限差分格式和分裂算子技术, 水平和时间差分格式为显式, 垂向差分格式为隐式, 对慢过程(平流项等)和快过程(产生外重力波项)分开,分别用不同的时间步长积分,快过程的时间步长受严格的CFL判据的限制。 内外模分离技术比完全三维计算节省很大计算量。为消除蛙跳格式产生的计算解,POM在每一时间积分层次上采用了时间滤波。水平方向采用正交曲线网格,变量空间配置使用Arakawa C网格,可以较好的匹配岸界。与均匀网格相比,水平曲线正交网格是渐变的,能更好地拟合岸线侧边界, 减少锯齿效应。POM模式在垂向上采用了 σ 坐标变换, 可体现不规则的海底地形的变化特点, 便于引入大陆架地形。

POM模式伪代码,来源于知乎用户(Venney):

program POM
    Init Paramter        !初始化各种参数,如im,jm等
    Init Variable        !初始化T,S,U,V,W等
    do iint=1,iend       !内模态循环
        call advct()     !计算平流项
        call baropg()    !计算压强梯度力
        do iext=1,isplit !外模态循环
            compute el   !计算eta
            compute ua   !计算正压ua
            compute va   !计算正压va
            compute ut,vt!计算正压平均速度
        end do           !外模态循环结束
        adjust u,v       !
        call vertvl      !计算垂直速度
        call advq        !计算km,kh
        call profq
        call advt        !计算T和S
        call proft
        call dens        !计算密度
        call advu        !计算u
        call profu
        call advv        !计算v
        call profv
        print            !将结果输出
    end do               !内模态结束
end

二 POM安装和运行

1 获取源码

POM下载:http://www.ccpo.odu.edu/POMWEB/POM2K/

或者关注气海同途公众号,后台回复关键字POM源码获取。

2 使用NetCDF进行IO

安装NetCDF可以参考之前的文章,WRF模式安装

pom2k.f末尾,取消include 'pom2k.n'的注释。

图片

3 POM的安装和运行

POM模式相对简单,设置好参数后,运行runpom2k脚本即可编译,然后运行。

给runpom2k加执行权限:

chmod +x runpom2

根据编译器类型,修改编译命令,例如使用gfortran编译,并使用NetCDF,则编译命令如下:

gfortran -O3 -ffpe-summary='none' pom2k.f /home/app/netcdf-4.1.3/lib/libnetcdf.a

runpom2k中自带了两个个例,一个为pom2k.f中内置的个例,一个为读取IC.dat数据的个例。

图片

最后运行./runpom2k,生成fort.71数据。真实个例的运行,还要解决如何生成网格、制作初始和边界条件等问题。

4 发现的问题

此次使用的gfortran版本为9.3.0版本,可能是版本兼容性问题,runpom2k脚本中原来的编译命令,运行会出现如下错误:​​​​​​​

Note: The following floating-point exceptions are signalling: IEEE_OVERFLOW_FLAG IEEE_UNDERFLOW_FLAG IEEE_DENORMAL

解决方案为增加-ffpe-summary='none'编译选项:

gfortran -O3 -ffpe-summary='none' pom2k.f /home/gyy2020/app/netcdf-4.1.3/lib/libnetcdf.a

扫描下方二维码,关注气海同途,了解更多大气海洋数值模式相关内容。

图片

参考:

https://zhuanlan.zhihu.com/p/348486589

http://www.doc88.com/p-2921529746905.html

https://blog.csdn.net/SDAU_LY124/article/details/104479508

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值