开边界设置1:仅生成潮汐以及潮汐和平均流量的开放边界强迫

2024-03-28 20:08

本文主要是介绍开边界设置1:仅生成潮汐以及潮汐和平均流量的开放边界强迫,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

开放边界设置

这里的大多数指令都依赖于FVCOM MATLAB工具箱(fvcom-toolbox)。为了在FVCOM中使用平均流量函数,必须使用make.inc中启用的平均流量标志重新编译FVCOM(从2013/02/26开始,这是FLAG_18 = -DMEAN_FLOW)。

1. 仅潮汐(光谱或表面高程)

使用MATLAB fvcom-toolbox生成边界强制的过程如下:

  • 读入SMS网格(read_sms_mesh)。
  • 提取开放边界节点(add_obc_nodes_list),为的参数中的ObcType分配值1 add_obc_nodes_list。有关ObcType选项,请参见FVCOM手册中的表6.1。
  • 使用保存打开边界节点文件write_FVCOM_obc

对于频谱涨潮:

  • 提取开放边界位置处的潮汐谐波振幅和相位(Mobj.read_obc_nodes用于识别边界处的节点)。TPXO和POLPRED已成功用于提取所需的值。将潮汐振幅和相位保存到Mobj.obc_amp和中,Mobj.obc_phase然后用于write_FVCOM_spectide输出到netCDF。

对于边界处的表面高程:

  • 使用Mobj.read_obc_nodes来识别开放的边界节点,使用TPXO工具tmd_tide_pred来生成时间序列的每个节点,保存到Mobj.surfaceElevationMobj.el_time与写出write_FVCOM_elevtide

&NML_OPEN_BOUNDARY_CONTROL名称列表的部分中,设置以下值:

    OBC_ON                     = T,OBC_NODE_LIST_FILE         = 'casename_obc.dat',OBC_ELEVATION_FORCING_ON   = T,OBC_ELEVATION_FILE         = 'casename_tide.nc',

其中 casename_tide.nc频谱或表面海拔潮汐的netCDF

2. 潮汐和平均流量

潮汐方面与上面的纯潮汐情况相似,但对于平均流量而言,变得更加复杂。

  1. 读入SMS网格(read_sms_mesh)。
  2. 提取开放边界节点(add_obc_nodes_list),为的参数中的ObcType赋值为2 add_obc_nodes_list(在Beardsley和Haidvogel(1981)之后被“钳制”)。有关ObcType选项,请参见FVCOM手册中的表6.1。
  3. 读取sigma坐标(用于read_sigma加载sigma.dat文件)。
  4. 用开放边界(find_boundary_elements)上的面识别元素。
  5. 在开放边界元素的质心处生成边界平均流量值。对于各种输出文件,我们需要u和v以及每个边界节点位置处的深度平均速度。get_POLCOMS_meanflow使用PML POLCOMS-ERSEM NetCDF文件将平均流插值到FVCOM开放边界元素和垂直网格。速度数据应该被保存在Mobj.velocity尺寸[nElements,n时间]和在U和V分量的Mobj.meanflow_uMobj.meanflow_v作为大小[nElements,nSiglay,n时间]的阵列。
  6. 可以使用来将开放边界节点处的深度平均速度数据写入netCDF write_FVCOM_meanflow。生成的NetCDF文件包括深度比例因子(MFDIST)以及平均流量(DMFQDIS)。
  7. 除了netCDF文件之外,FVCOM还具有许多硬编码的文件mod_obcs2.F,对于平均流量条件,还必须将其生成。为此,运行write_FVCOM_meanflow_ascii,提供与用于创建netCDF文件相同的速度数组(例如Mobj.velocityMobj.meanflow_uMobj.meanflow_v从POLCOMS数据生成)。

&NML_OPEN_BOUNDARY_CONTROL名称列表的部分中,设置以下值:

    OBC_ON                     = T,OBC_NODE_LIST_FILE         = 'casename_obc.dat',OBC_ELEVATION_FORCING_ON   = T,OBC_ELEVATION_FILE         = 'casename_spectide.nc',OBC_MEANFLOW               = T,OBC_MEANFLOW_FILE          = 'casename_mf.nc',

3. 多个开放边界

的维度Mobj.surfaceElevation必须为[nObc_nodes, nTime],其中nObc_nodes是用户指定的(OBC_TYPE=1)或任何其他开放边界类型的所有开放边界的节点总数,并且nTime是时间步的总数。因此,例如,在一个恒定宽度为11个节点的简单通道的情况下,上游端由用户指定开放边界,下游端封闭,则的大小Mobj.surfaceElevaton应为11 by nTimecasename_obc.dat文件将读取为:

  OBC Node Number = 111 n1 12 n2 1...

niOBC节点的节点ID 在哪里i。如果现在将通道的下游端更改为重力波辐射开放边界(OBC_TYPE=5),而上游端仍是用户指定的开放边界,则casename_obc.dat文件现在将读取:

  OBC Node Number = 221 n1 12 n2 1...12 n12 513 n13 5...

现在Mobj.surfaceElevationnTime即使用户未指定新的开放边界,的尺寸也必须为22 。因此,在此示例中,附加空间Mobj.surfaceElevation可能用零填充,但尺寸必须为,[nObc_nodes, nTime]否则FVCOM会导致致命错误。

平均流量注意事项

FVCOM的平均流量部分是FVCOM 2.7代码库中的残差。因此,存在一些粗糙的边缘。

首先,读入的文件mod_obcs2.F在源中被硬编码:

201      CALL FOPEN(INMF,   TRIM(INPUT_DIR)//TRIM(CASENAME)//'_meanflow.dat'  ,"cfr")
202      CALL FOPEN(INTCELL,TRIM(INPUT_DIR)//TRIM(CASENAME)//'_tide_cell.dat' ,"cfr")
203      CALL FOPEN(INTNODE,TRIM(INPUT_DIR)//TRIM(CASENAME)//'_tide_node.dat' ,"cfr")
204      CALL FOPEN(INTELEL,TRIM(INPUT_DIR)//TRIM(CASENAME)//'_tide_el.dat'   ,"cfr")
205      CALL FOPEN(INTUV,  TRIM(INPUT_DIR)//TRIM(CASENAME)//'_tide_uv.dat'   ,"cfr")

它们的格式相对简单(请参阅print_vals.Fmod_obcs2.F),概述如下。

casename_meanflow.dat

  nbelID(1)belID(2)...belID(m)1 mfdist(1, 1) mfdist(1, 2) ... mfdist(1, z)2 mfdist(2, 1) mfdist(2, 2) ... mfdist(2, z)...m mfdist(m, 1) mfdist(m, 2) ... mfdist(m, z)ttt(0)dmfqdis(1, 1) dmfqdis(1, 2) ... dmfqdis(1, m)t(1)dmfqdis(2, 2) dmfqdis(2, 2) ... dmfqdis(2, m)...t(n-1)dmfqdis(tt, 1) dmfqdis(tt, 2) ... dmfqdis(tt, m)

其中m是边界元素的数量,belID是边界元素ID,mfdist是平均流量的垂直分布,z是垂直层的数量,dmfqdis是平均流量,t是时间步数(不是时间),tt是时间步长。

casename_tide_el.dat

  tt(1) elev(1, 1) elev(1, 2) ... elev(1, m)tt(2) elev(2, 1) elev(2, 2) ... elev(2, m)...tt(t) elev(t, 1) elev(t, 2) ... elev(t, m)

其中tt是自模型开始以来的时间,以秒t为单位,是时间步长,m是边界节点的数量,elev是开放边界节点的表面高程。

casename_tide_node.dat

  nbndID(1)bndID(2)...bndID(n)

其中n是边界节点的数量,bndID是边界节点ID。

casename_tide_cell.dat

  ebelID(1)belID(2)...belID(e)

其中e是边界元素的数量,belID是边界元素ID。

casename_tide_uv.dat

tt(1) ubar(1, 1) ubar(1, 2) ... ubar(1, m)
tt(1) vbar(1, 1) vbar(1, 2) ... vbar(1, m)
tt(1) u(1, 1, 1) u(1, 1, 2) ... u(1, 1, m)
tt(1) v(1, 1, 1) v(1, 1, 2) ... v(1, 1, m)
tt(1) u(1, 2, 1) u(1, 2, 2) ... u(1, 2, m)
tt(1) v(1, 2, 1) v(1, 2, 2) ... v(1, 2, m)
...
tt(1) u(1, z, 1) u(1, z, 2) ... u(1, z, m)
tt(1) v(1, z, 1) v(1, z, 2) ... v(1, z, m)
tt(2) ubar(2, 1) ubar(2, 2) ... ubar(2, m)
tt(2) vbar(2, 1) vbar(2, 2) ... vbar(2, m)
tt(2) u(2, 1, 1) u(2, 1, 2) ... u(2, 1, m)
tt(2) v(2, 1, 1) v(2, 1, 2) ... v(2, 1, m)
tt(2) u(2, 2, 1) u(2, 2, 2) ... u(2, 2, m)
tt(2) v(2, 2, 1) v(2, 2, 2) ... v(2, 2, m)
...
tt(2) u(2, z, 1) u(2, z, 2) ... u(2, z, m)
tt(2) v(2, z, 1) v(2, z, 2) ... v(2, z, m)
...
...
tt(t) ubar(t, 1) ubar(t, 2) ... ubar(t, m)
tt(t) vbar(t, 1) vbar(t, 2) ... vbar(t, m)
tt(t) u(t, 1, 1) u(t, 1, 2) ... u(t, 1, m)
tt(t) v(t, 1, 1) v(t, 1, 2) ... v(t, 1, m)
tt(t) u(t, 2, 1) u(t, 2, 2) ... u(t, 2, m)
tt(t) v(t, 2, 1) v(t, 2, 2) ... v(t, 2, m)
...
tt(t) u(t, z, 1) u(t, z, 2) ... u(t, z, m)
tt(t) v(t, z, 1) v(t, z, 2) ... v(t, z, m)

其中tt是以秒为单位的时间(由于时间系列的开始?),t是时间索引,m是边界元件的数量,z是西格玛层的数量,uv与平均流量U和V分量(大小[吨, Z,M])和ubarvbar是深度平均平均流量U和v分量(大小[T,M])。

casename_elj_obc.datmod_obcs2.F在第235行中指定的额外文件:

235        CALL FOPEN(111,TRIM(INPUT_DIR)//TRIM(CASENAME)//'_elj_obc.dat',"cfr")

它的格式casename_tide_el.dat与第一列非常相似,只是它省略了第一列中的时间戳:

casename_elj_obc.dat

elev(1, 1) elev(1, 2) ... elev(1, m)
elev(2, 1) elev(2, 2) ... elev(2, m)
...
elev(tt, 1) elev(tt, 2) ... elev(tt, m)

其中,tt是时间步数,m是边界节点的数量,elev是开放边界节点处的表面高程。

这篇关于开边界设置1:仅生成潮汐以及潮汐和平均流量的开放边界强迫的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/856583

相关文章

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

PyCharm如何设置新建文件默认为LF换行符

《PyCharm如何设置新建文件默认为LF换行符》:本文主要介绍PyCharm如何设置新建文件默认为LF换行符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm设置新建文件默认为LF换行符设置换行符修改换行符总结PyCharm设置新建文件默认为LF

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

C/C++随机数生成的五种方法

《C/C++随机数生成的五种方法》C++作为一种古老的编程语言,其随机数生成的方法已经经历了多次的变革,早期的C++版本使用的是rand()函数和RAND_MAX常量,这种方法虽然简单,但并不总是提供... 目录C/C++ 随机数生成方法1. 使用 rand() 和 srand()2. 使用 <random

Flask 验证码自动生成的实现示例

《Flask验证码自动生成的实现示例》本文主要介绍了Flask验证码自动生成的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 目录生成图片以及结果处理验证码蓝图html页面展示想必验证码大家都有所了解,但是可以自己定义图片验证码

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

Nginx如何进行流量按比例转发

《Nginx如何进行流量按比例转发》Nginx可以借助split_clients指令或通过weight参数以及Lua脚本实现流量按比例转发,下面小编就为大家介绍一下两种方式具体的操作步骤吧... 目录方式一:借助split_clients指令1. 配置split_clients2. 配置后端服务器组3. 配

Python如何在Word中生成多种不同类型的图表

《Python如何在Word中生成多种不同类型的图表》Word文档中插入图表不仅能直观呈现数据,还能提升文档的可读性和专业性,本文将介绍如何使用Python在Word文档中创建和自定义各种图表,需要的... 目录在Word中创建柱形图在Word中创建条形图在Word中创建折线图在Word中创建饼图在Word

如何关闭 Mac 触发角功能或设置修饰键? mac电脑防止误触设置技巧

《如何关闭Mac触发角功能或设置修饰键?mac电脑防止误触设置技巧》从Windows换到iOS大半年来,触发角是我觉得值得吹爆的MacBook效率神器,成为一大说服理由,下面我们就来看看mac电... MAC 的「触发角」功能虽然提高了效率,但过于灵敏也让不少用户感到头疼。特别是在关键时刻,一不小心就可能触