开边界设置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

相关文章

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

Java实现为PDF设置背景色和背景图片

《Java实现为PDF设置背景色和背景图片》在日常的文档处理中,PDF格式因其稳定性和跨平台兼容性而广受欢迎,本文将深入探讨如何利用Spire.PDFforJava库,以简洁高效的方式为你的PDF文档... 目录库介绍与安装步骤Java 给 PDF 设置背景颜色Java 给 PDF 设置背景图片总结在日常的

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

Java利用Spire.XLS for Java设置Excel表格边框

《Java利用Spire.XLSforJava设置Excel表格边框》在日常的业务报表和数据处理中,Excel表格的美观性和可读性至关重要,本文将深入探讨如何利用Spire.XLSforJava库... 目录Spire.XLS for Java 简介与安装Maven 依赖配置手动安装 JAR 包核心API介

Vue3 如何通过json配置生成查询表单

《Vue3如何通过json配置生成查询表单》本文给大家介绍Vue3如何通过json配置生成查询表单,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录功能实现背景项目代码案例功能实现背景通过vue3实现后台管理项目一定含有表格功能,通常离不开表单

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅