学习一个数值模拟的心得体会 POM(Princeton Ocean Model)是由美国普林斯顿大学于1977年共同建立起来的一个三维斜压原始方程数值海洋模式,后经过多次修改成为今天的样本,是被当今国内外应用较为广泛的河口、近岸海洋模式。POM在国内较多人使用,在天津、上海、厦门等多个沿海地区均有人使用POM模式进行风暴潮的模拟和预报。 POM采用蛙跳有限差分格式和分裂算子技术,水平和时间差分格式为显式,垂向差分格式为隐式,对慢过程(平流项等)和快过程(产生外重力波项)分开,分别用不同的时间步长积分,快过程的时间步长受严格的CFL判据的限制。我认为这是一个介于二维和三维之间的计算过程,这个过程计算精度比二维计算高,考虑了时间的影响,但对比三维计算来说可以很大的节省计算量,加快计算速度。 为消除蛙跳格式产生的计算解,POM在每一时间积分层次上采用了时间滤波。水平方向采用正交曲线网格,变量空间配置使用“Arakawa C”网格,可以较好的匹配岸界。与均匀网格相比,水平曲线正交网格是渐变的,能更好地拟合岸线侧边界,减少“锯齿”效应。POM模式在垂向上采用了σ坐标变换,可体现不规则的海底地形的变化特点,便于引入大陆架地形 并且引入了干湿网格动边界技术,既可更好地处理三维水动力环境模拟中大量浅滩的“干出”与“淹没”等难点问题,也可很好地处理复杂地形水域的模拟问题,因此被广泛地应用于河口近岸海域的潮流数值模拟中。基于POM模式源程序代码的公开性,便于学者交流与学习,并可根据实际工作问题的需要进行改进,应用到不同的领域,因而具有很强的生命力和适用性。 POM模式要求解描述海洋运动的原始方程组,原始方程组的数值差分求解是最关键的,这部分正是POM提供给我们的,能够简化我们的许多工作。但是仅仅有差分求解方程组的程序是不够的,对于微分方程组,我们需要初始条件、边界条件来确定方程组的数值解,要正确使用POM模拟海洋运动,我们需要提供的正是这些边界条件。我们要做的工作主要包括提供驱动模式上下边界条件,侧边界条件,以及初始的海洋的三维温盐场。用户在建立自己的模型时要设置自己的模型网格,收集细化资料如:地形、温盐、表面风场及热能量等。通过将数据插值到网格点来生成模型初始重要条件、强迫条件。在GRID-DATA中的代码是用来做插值处理的有效工具,可帮助我们生成IC文件,作为模型输入。注意当使用曲线网格时,风应力和模型流速矢量不再是x-y方向,需要进行相应转换。 网格的概念这里有两个,一个是POM模式的网格,也就是模拟的区域内微分方程离散出的网格点,这些网格点上的经纬度、温度、盐度等数据是我们需要输入到POM模式里的。这个网格叫做计算网格,是我们人为设定的。第二个网格,就是我们使用的原始数据的网格,比如我们从网上下载的WOA09数据,它的网格是全球1度乘1度的,WOA09的数据都是分布在这些网格点上的。如果我们要模拟0.5度乘0.5度的精度,那么我们要做的就是将原始数据网格点上的数据通过特定的插值方法插值到我们的计算网格点上去。 在建立了计算网格之后,下一步工作是将需要的数据都插值到计算网格上去。主要包括地形数据、风场数据、辐射数据、初始的温盐数据。地形数据对应着求解方程组的下表面边界条件,通过实验以及阅读前人的文献,发现地形会对模拟结果产生很重要的结果,所以这是第一步,也是很重要的一部。首先,确定自己的模拟区域后,我们需要的自然是描述研究区域的地形数据了,通常用的是etopo5地形数据,这在网上可以自行下载。另外在高精度的模拟中,也可以使用etopo2和etopo1数据。接着,为了进行插值,我们需要在Matlab中按照第一步的方法,再把原始地形数据的经纬度网格也建立起来。有时候处理地形复杂的区域为了保持计算结果的稳定需要对地形进行平滑处理,对地形的处理就在此处进行。接着要对地形进行修改,由于使用etopo数据陆地为正值,海洋为负值,这里需要将正值(陆地)设置为0,将海洋里的水深设置为正(POM中水深为正值)。接着为了保持计算稳定,要设置地形数据的最大最小值,一般最大值根据实际情况确定,最小值确定为1或者5或者10米。对地形数据做的其他修改也在此处进行,比如人为地修改边界,特定点的地形等等。 将上述处理后得到的计算网格点上的地形数据存储,读如到POM中的h(im.jm)变量中即可。地形数据输入设定完毕。 POM模式的计算流程如下图所示: 本文来源:https://www.wddqw.com/doc/5258843066ec102de2bd960590c69ec3d5bbdb5b.html