0.Formulation of the RANS equations [1]

不可压缩流体控制方程

\[\begin{array}{l l}
\frac{\partial u}{\partial x}+\frac{\partial v}{\partial y}+\frac{\partial w}{\partial z}=0 \cr
\frac{Du}{Dt}-fv=-\frac{1}{\rho}\frac{\partial p}{\partial x}+\frac{\partial }{\partial z} N_z \frac{\partial u}{\partial z} + N_h\Delta u \cr
\frac{Dv}{Dt}+fu=-\frac{1}{\rho}\frac{\partial p}{\partial y}+\frac{\partial }{\partial z} N_z \frac{\partial v}{\partial z} + N_h\Delta v \cr
\frac{Dw}{Dt}=-\frac{1}{\rho}\frac{\partial p}{\partial z}-g+\frac{\partial }{\partial z} N_z \frac{\partial w}{\partial z} + N_h\Delta w \cr
\end{array}\]

其中\(N_z\)为垂向涡粘系数,\(N_h\)为水平涡粘系数,分子粘性系数已忽略。

1.Boussinesq approximation

Boussinesq 近似假定密度在参考密度附近变化不大,即

\[\rho(\vec{x},t) = \rho_0 + \rho'(\vec{x},t)
\]

将控制方程内除了重力之外,所有密度替换为参考密度\(\rho_0\),即

\[\begin{array}{l l}
\frac{\partial u}{\partial x}+\frac{\partial v}{\partial y}+\frac{\partial w}{\partial z}=0 \cr
\rho_0\frac{Du}{Dt}-fv=-\frac{\partial p}{\partial x}+\rho_0(\frac{\partial }{\partial z} N_z \frac{\partial u}{\partial z} + N_h\Delta u) \cr
\rho_0\frac{Dv}{Dt}+fu=-\frac{\partial p}{\partial y}+\rho_0(\frac{\partial }{\partial z} N_z \frac{\partial v}{\partial z} + N_h\Delta v) \cr
\rho_0\frac{Dw}{Dt}=-\frac{\partial p}{\partial z}-\rho g+\rho_0(\frac{\partial }{\partial z} N_z \frac{\partial w}{\partial z} + N_h\Delta w) \cr
\end{array}\]

2.Hydrostic approximation

静压假定包括

  1. 忽略垂向粘性
  2. 忽略垂向加速度

此时,垂向方程变为

\[\frac{\partial p}{\partial z} = -\rho g
\]

注意,此时密度并非为参考密度,而是水体总密度。将动量方程沿垂向进行积分,得

\[p(x,y,z=z_0) = p_a(x,y) + \int_{z=z_0}^{\zeta(x,y)}\rho gdz
\]

\(p_a(x,y)\)为自由表面处大气压强。

将\(\rho(\vec{x},t) = \rho_0 + \rho'(\vec{x},t)\)代入方程,便可得到压力表达式

\[p(x,y,z=z_0) = p_a(x,y) + (-\rho_0gz_0 + \rho_0g\zeta(x,y) + \int_{z=z_0}^{\zeta(x,y)}\rho' gdz)
\]

其中三项分别为正压项,动压项与斜压项。其中\(\rho'(x,y,z,t)\)根据状态方程求得。

Appendix A.Mode Splitting [1]

内外模分离方法主要目的是解决海洋模拟中水平计算最大时间步和垂向计算时间步不匹配的问题。

为了模拟表面重力波,根据CFL准则,最大时间步应满足

\[T_h\le \frac{\Delta x}{\sqrt{2gH}}
\]

而垂向计算所需时间步仅需满足

\[T_z\le \frac{h_z^2}{2N_z}
\]

一般情况下,T_z大约为T_z的10倍以上(FVCOM中推荐取10)。

因此,内外模分离方法主要是解决海洋模拟问题计算过程中,水平尺度和垂直尺度计算时间步不匹配问题。

在水平模拟过程中,由于表面重力波在沿水深方向变化不大,因此可采用垂向积分方程

\[\begin{array}{l l}
\frac{\partial D\bar{u}}{\partial x} + \frac{\partial D\bar{v}}{\partial y} + \frac{\partial \zeta}{\partial t}=0 \cr
\frac{\partial \bar{u}}{\partial t}+A_x -fv=-\frac{1}{\rho_0}\frac{\partial p_a}{\partial x} -g \frac{\partial \zeta}{\partial x} -B_x + C_x+ N_h\Delta \bar{u} \cr
\frac{\partial \bar{v}}{\partial t}+A_y -fv=-\frac{1}{\rho_0}\frac{\partial p_a}{\partial y} -g \frac{\partial \zeta}{\partial y} -B_y + C_y + N_h\Delta \bar{v} \cr
\end{array}\]

其中\(D=H+\zeta\)为总水深。

求解内模时将各层流速时将速度分解为

\[u = \bar{u}+u' ,\quad v = \bar{v}+v'
\]

将原始动量方程与垂向积分动量方程作差,可得

\[\begin{array}{l l}
\frac{\partial u}{\partial x}+\frac{\partial v}{\partial y}+\frac{\partial w}{\partial z}=0 \cr
\frac{\partial u'}{\partial t}+ u \frac{\partial u}{\partial x} + v \frac{\partial u}{\partial y}+ w \frac{\partial u}{\partial z} - A_x -fv' = B_x - \frac{g}{\rho_0}\frac{\partial}{\partial x}\int_z^{\zeta}\rho'dz -C_x + N_h\Delta u' \cr
\frac{\partial v'}{\partial t}+ u \frac{\partial v}{\partial x} + v \frac{\partial v}{\partial y}+ w \frac{\partial v}{\partial z} - A_y +fu' = B_y - \frac{g}{\rho_0}\frac{\partial}{\partial y}\int_z^{\zeta}\rho'dz -C_x + N_h\Delta v' \cr
\end{array}\]

根据三个方程,便可求解各层水体流速\(u,v,w\)

Reference

[1] Kowalik Z, Murty T S. Numerical modeling of ocean dynamics[M]. World Scientific, 1993.

Boussinesq 近似及静压假定,内外模分离方法(附录A)的更多相关文章

  1. CTF中图片隐藏文件分离方法

    CTF中图片隐藏文件分离方法   0x01 分析 这里我们以图片为载体,给了这样的一样图片:2.jpg 首先我们需要对图片进行分析,这里我们需要用到kali里面的一个工具 binwalk ,想要了解这 ...

  2. AsyncTask内的各个方法调用顺序

    |- AsyncTask内的各个方法调用顺序:|- 首先,用户调用execute方法,启动AsyncTask .然后在execute方法中:|- 首先调用onPreExecute方法,执行初始化操作. ...

  3. [C#解惑] #1 在构造函数内调用虚方法

    谜题 在C#中,用virtual关键字修饰的方法(属性.事件)称为虚方法(属性.事件),表示该方法可以由派生类重写(override).虚方法是.NET中的重要概念,可以说在某种程度上,虚方法使得多态 ...

  4. 在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性:

    在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性: var s = new MyString("hello"); s ...

  5. Flex Array内置排序方法的使用

    在Array类中,提供内置的排序方法.排序是在软件开发的过程中,经常遇到的问题.通过这些内置的方法,可以快速轻便的进行排序操作. Array类提供sort方法对Array实例进行排序.sort方法没有 ...

  6. PHP文章关键词相似短尾长尾内链替换方法介绍

    对于互联网程序来说,对文字正文内容做关键词内链优化是常态的工作之一.一方面有人手动来处理关键词内链,这个效率太低:一方面通过程序自动添加内链,这样子也省事而且便于管理: 今天我们探讨的就是给自动给文章 ...

  7. day29 类中的内置函数方法 __str__ __repr__ __call__ isinstance() issubclass()

    __str__()__repr__()__len__() str() 转字符串repr() 让字符原形毕露的方法len() 计算长度 内置的方法很多,但是并不是全部都在object中,比如len(), ...

  8. python - 类的内置 attr 方法

    类的内置 attr 方法 #类的内置 attr 方法: # __getattr__ # __setattr__ # __delattr__ # __getattr__ #到调用一个类不存在数参数时,将 ...

  9. Python3内置字符串方法详解

    官网文档地址:https://docs.python.org/3/library/stdtypes.html#string-methods基于 Python 3.X 版本 str.capitalize ...

随机推荐

  1. 是兄弟就来摸鱼 Scrum Meeting 博客汇总

    是兄弟就来摸鱼 Scrum Meeting 博客汇总 一.Alpha阶段 第一次Scrum meeting 第二次Scrum meeting 第三次Scrum meeting 第四次Scrum mee ...

  2. 第6次 Beta Scrum Meeting

    本次会议为Beta阶段第6次Scrum Meeting会议 会议概要 会议时间:2021年6月8日 会议地点:「腾讯会议」线上进行 会议时长:15min 会议内容简介:对完成工作进行阶段性汇报:对下一 ...

  3. AlertManager集群搭建

    AlertManager集群搭建 一.AlertManager集群搭建 1.背景 2.机器 3.集群可用配置 4.alertmanager启动脚本 1.127.0.0.1:9083 机器启动脚本 2. ...

  4. C++ string类型小结

    目录 构造函数 string.append() string.assign() string.at() string.back() string.begin() string.capasity() s ...

  5. Java并发:重入锁 ReentrantLock(二)

    一.理解锁的实现原理 1. 用wait()去实现一个lock方法,wait()要和synchronized同步关键字一起去使用的,直接使用wait方法会直接报IllegalMonitorStateEx ...

  6. cf 12B Correct Solution?(贪心)

    题意: 一个数a,一个数b. 现在要将a的每一位上的数字重新整理,生成一个新的不含前导0的数a'. 问a'是否等于b. 思路: a上每一位的数字从小到大排序,找到最小的非零数和第一位交换. 代码: c ...

  7. PWN二进制漏洞学习指南

    目录 PWN二进制漏洞学习指南 前言 前置技能 PWN概念 概述 发音 术语 PWN环境搭建 PWN知识学习途径 常见漏洞 安全机制 PWN技巧 PWN相关资源博客 Pwn菜鸡小分队 PWN二进制漏洞 ...

  8. .net core 和 WPF 开发升讯威在线客服系统:把 .Net Framework 打包进安装程序

    本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程. 系列文章目录: https://blog.shengxunwei.com/Home/Post/44a3 ...

  9. vue脚手架配置代理

    vue.config.js配置具体代理规则 module.exports = { devServer: { proxy: { '/api1': { // 匹配所有以 '/api1'开头的请求路径 ta ...

  10. sqlalchemy insert or ignore

    insert ignore # insert ignoreinsert_stmt = TimePoint.__table__.insert().prefix_with(" ignore&qu ...