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

相关文章

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

Pyserial设置缓冲区大小失败的问题解决

《Pyserial设置缓冲区大小失败的问题解决》本文主要介绍了Pyserial设置缓冲区大小失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录问题描述原因分析解决方案问题描述使用set_buffer_size()设置缓冲区大小后,buf

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

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

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