开边界设置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使用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 批量操作的优雅

MySQL设置密码复杂度策略的完整步骤(附代码示例)

《MySQL设置密码复杂度策略的完整步骤(附代码示例)》MySQL密码策略还可能包括密码复杂度的检查,如是否要求密码包含大写字母、小写字母、数字和特殊字符等,:本文主要介绍MySQL设置密码复杂度... 目录前言1. 使用 validate_password 插件1.1 启用 validate_passwo

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

Python实现数据可视化图表生成(适合新手入门)

《Python实现数据可视化图表生成(适合新手入门)》在数据科学和数据分析的新时代,高效、直观的数据可视化工具显得尤为重要,下面:本文主要介绍Python实现数据可视化图表生成的相关资料,文中通过... 目录前言为什么需要数据可视化准备工作基本图表绘制折线图柱状图散点图使用Seaborn创建高级图表箱线图热

SQLServer中生成雪花ID(Snowflake ID)的实现方法

《SQLServer中生成雪花ID(SnowflakeID)的实现方法》:本文主要介绍在SQLServer中生成雪花ID(SnowflakeID)的实现方法,文中通过示例代码介绍的非常详细,... 目录前言认识雪花ID雪花ID的核心特点雪花ID的结构(64位)雪花ID的优势雪花ID的局限性雪花ID的应用场景

Django HTTPResponse响应体中返回openpyxl生成的文件过程

《DjangoHTTPResponse响应体中返回openpyxl生成的文件过程》Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的sa... 目录Django返回文件流时使用指定文件名Django HTTPResponse响应体中返回openp