通过将FVCOM与水生生物地球化学模型框架(FABM)结合使用

FVCOM-FABM

 

介绍

通过将FVCOM水生生物地球化学模型框架(FABM)结合使用,可以与 包括ERSEM在内的多种生物地球化学模型一起使用。该FVCOM-FABM耦合器由PML开发。有兴趣的用户可以通过PML的建模网站注册访问代码。

FABM Wiki 中详细描述了FABM配置的主要方面。FVCOM特定的选项在下面详细说明。

ERSEM的设计和实现在《地球科学模型开发》论文中有详细介绍。有关配置ERSEM的更多详细说明,请参见其代码存储库(需要注册)。

名单

 

在线FVCOM-FABM

要启用FVCOM-FABM,请编辑主FVCOM名称列表&NML_ADDITIONAL_MODELS部分以包括以下内容:

 FABM_MODEL = T,

要保存瞬时FABM输出,请在本&NML_NETCDF节中添加:

 NC_FABM = T

要保存时间平均的FABM输出,请在该&NML_NETCDF_AV部分中添加:

 NCAV_FABM = T

最后,添加一个新&NML_FABM部分:

&NML_FABM
 STARTUP_FABM_TYPE = 'constant', ! 'constant' or 'set values'
 USE_FABM_BOTTOM_THICKNESS = F, ! allow precipitation of salts on the bathymetry in hypersaline environments
 USE_FABM_SALINITY = F, ! use FABM's internal salinity routines for hypersaline environments
 FABM_DEBUG        = F, ! outputs debugging information to the FVCOM log file
 FABM_DIAG_OUT     = F  ! outputs diagnostic ERSEM variables
/

如果您已经构建了FVCOM-FABM来进行离线模拟(请参阅编译FVCOM-ERSEM),则还需要添加OFFLINE_FABM_FILENML_FABM名称列表中;此变量必须设置为具有脱机强制信息的NetCDF文件的路径。

离线FVCOM-FABM

对于离线运行,在离线设置中不会解决所有具有强CFL约束的流体力学变量。要使FVCOM生成脱机FVCOM-FABM运行所需的所有变量,请像上面的在线运行一样配置名称列表,但将其设置FABM_MODELF。所有需要离线FVCOM-FABM变量可以从FVCOM-FABM运行通过设置保存NC_OFFLINE设置为TNML_NETCDF该FVCOM名称列表的部分。由于某些变量需要有关边界的信息,OBC_ON因此T即使使用嵌套,也必须确保将其设置为。在PML,我们尽可能使用NESTING_ONwith NESTING_TYPE = 3

&NML_NETCDF
 NC_ON              = T,
 NC_FIRST_OUT       = '2005-06-01 00:00:00',
 NC_OUT_INTERVAL    = 'seconds = 900.',
 NC_OUTPUT_STACK    = 0,
 NC_SUBDOMAIN_FILES = 'FVCOM',
 NC_GRID_METRICS    = T,
 NC_FILE_DATE       = T,
 NC_VELOCITY        = F,
 NC_SALT_TEMP       = F,
 NC_TURBULENCE      = F,
 NC_AVERAGE_VEL     = T,
 NC_VERTICAL_VEL    = F,
 NC_WIND_VEL        = F,
 NC_WIND_STRESS     = F,
 NC_EVAP_PRECIP     = F,
 NC_SURFACE_HEAT    = F,
 NC_GROUNDWATER     = F,
 NC_BIO             = F,
 NC_WQM             = F,
 NC_VORTICITY       = F,
 NC_OFFLINE         = T
/

注:如果NC_OFFLINE设置为T,那么NC_VELOCITYNC_SALT_TEMP并且NC_VERTICAL_VEL 必须设置为F(该模型将与错误崩溃,它不能创建一个变量,因为它已被定义)。

随后的运行必须在脱机支持下进行编译,并且其中指定的NetCDF文件OFFLINE_FABM_FILE必须存在于主FVCOM输入目录(INPUT_DIR)中。

已修改文件以启用脱机模拟的列表为

mod_fabm_data.F
mod_fabm_3D.F
mod_ncdio.F
mod_input.F
mod_obcs.F
mod_force.F
mod_main.F
bcond_gcn.F
bcond_gcy.F
internal_step.F

输入项

FVCOM-FABM需要额外的输入来指定生物地球化学模型的配置和初始条件。它也可以读取河流和开放边界中上层生物地球化学变量的浓度。

生物地球化学模型配置

FABM配置存储为YAML文件。testcasesFABM和ERSEM目录中提供了许多示例配置。fabm.yaml运行FVCOM时,必须命名该文件并将其放置在主FVCOM名称列表旁边。

初始状态

可以使用恒定值或从重新启动文件读取的空间变化字段来初始化生物地球化学变量。初始化行为是通过STARTUP_FABM_TYPEnamelist中的变量配置的NML_FABM

  • 要使用默认值初始化整个域中的每个FABM变量fabm.yaml,请将其设置STARTUP_FABM_TYPE'constant'
  • 要使用重新启动文件中的空间显式值进行初始化(其路径通过STARTUP_FILEnamelist中的变量NML_STARTUP设置),请设置STARTUP_FABM_TYPE'set values'。一个样品MATLAB脚本使用FVCOM MATLAB工具箱从一个更大的定期网格模型输出阅读和书写出新的价值,以一个新的启动文件之前,他们插值到FVCOM电网。

河流

要规定河流排放中的中上层生物地球化学变量的值,无需设置特定于FABM的选项。FVCOM将仅在其河流文件中查找每个FABM变量。如果存在,将使用规定的时间序列。如果不存在,则假定该变量的值在河流流量中为零。此NetCDF结构中详细说明了一个包含ERSEM营养素的强迫河流文件示例。write_FVCOM_river_ERSEM存在MATLAB函数以在FVCOM MATLAB工具箱中创建河流强制文件。

开放边界

要指定FABM变量在开放边界处的集中度,请OBC_FABM_NUDGING=T在namelist中设置NML_OPEN_BOUNDARY_CONTROL。默认情况下,FVCOM将在file中查找规定的边界值<CASENAME>_obc.nc。可以使用OBC_FABM_FILEnamelist中的变量配置此路径NML_OPEN_BOUNDARY_CONTROL。FABM变量向其边界值放宽的速率(仅在跨界流入的情况下才如此)由OBC_FABM_NUDGING_TIMESCALEnamelist中的变量控制NML_OPEN_BOUNDARY_CONTROL。请注意,在模型启动阶段,此松弛从关闭增加到完全激活,以内部时间步长(IRAMPin)定义NML_INTEGRATION

FVCOM-FABM耦合器不要求为所有中上层生物地球化学变量规定边界条件。对于强制文件中不存在的变量,将不应用边界强制。这实际上为该变量跨边界假设了零梯度条件。

以下示例NetCDF结构指示所需的结构。MATLAB FVCOM工具箱函数write_FVCOM_tsobcERSEM可以创建此文件。

生物地球化学的附加强迫

一些生物地球化学模型配置(fabm.yaml文件)可能取决于FVCOM未提供的环境领域。例如,ERSEM取决于CO 2的大气分压(pCO2; 2D场)和悬浮泥沙引起的光衰减(3D场)。在这种情况下,您可以通过将条目添加到来为这些字段规定常量值fabm.yaml。例如,要将pCO 2设置为385 ppm,并且将淤泥的光吸收设置为0.07 m -1,则需要添加以下内容:

  pCO2a:
    model: horizontal_constant
    parameters:
      standard_name: mole_fraction_of_carbon_dioxide_in_air
      value: 385.0
  silt_absorption:
    model: interior_constant
    parameters:
      standard_name: absorption_of_silt
      value: 0.07

(实例名称pCO2asilt_absorption是任意的)

也可以规定随时间和/或空间变化的值。为此,请fabm_input.nml在您的设置中提供一个文件,其中包含以下内容:

&NML_FABM_INPUT
  VARIABLE_NAME='mole_fraction_of_carbon_dioxide_in_air'
  FILE='co2.nc'
/

这将使FVCOM在中查找名为“ mole_fraction_of_carbon_dioxide_in_air”的2D变量co2.nc。如果变量在该文件中具有不同的名称,则可以通过添加NC_VARIABLE_NAME='<NAME>'NML_FABM_INPUT名称列表来指定该名称。

要从NetCDF读取数据,耦合器依赖于FVCOM本身提供的基础结构。因此,在空间和时间维度,变量属性等方面,您的NetCDF文件必须遵循与任何其他2D或3D FVCOM输入相同的约定。

如果要使用多个强制变量,可以将其他名称列表添加到中fabm_input.nml

输出量

默认情况下,FVCOM的瞬时输出(如果为NC_FABM = Tin NML_NETCDF)和其时间平均输出(如果为NCAV_FABM = Tin NML_NETCDF_AV)中包含的一组生物地球化学变量,包括由中列出的FABM模块注册的每个变量fabm.yaml。这包括状态变量(例如浓度)和诊断变量(例如比率),尽管可以通过FABM_DIAG_OUT = F在名称列表中进行设置来排除后者NML_FABM

您可以通过提供fabm_output.yaml与安装程序一起命名的文件来进一步控制变量的选择。这是YAML格式的文件,它明确指定要在输出中包括哪些变量。该文件中未提及的变量将被省略。它具有以下格式:

variables:
  <VARIABLE1>: true
  <VARIABLE2>: true
  <VARIABLE3>: true

这里,变量名如<VARIABLE1>可以是因为它会出现在创建NetCDF输出变量的名称(例如,N3_nP1_c对于ERSEM硝酸盐和硅藻碳),或者有星号符号结束表达式(*)以包括与一个名字的所有变量以星号之前的字符开头(例如,P1_*对于ERSEM中的所有硅藻变量)。

套料

FVCOM-FABM支持读取和写入生物地球化学变量的嵌套数据:

  • 当FVCOM配置写出来的边界数据嵌套的结构域(NCNEST_ON = TNML_NCNEST),书面文件将包括所有FABM的浮游状态变量。
  • 如果要使用FVCOM的嵌套功能在边界处提供生物地球化学变量的值(例如,从配置为写出嵌套数据的较大FVCOM设置派生的值),则需要添加FABM_NESTING_ON = Tnamelist NML_NESTING。这将导致FVCOM(以As设定为寻找在嵌套文件中的每个远洋生物地球化学变量数据NESTING_FILE_NAMENML_NESTING)。

ERSEM和CSTM泥沙输送

FVCOM可以在FABM(ERSEM)和CSTM处于活动状态时同时运行。使FABM看到CSTM数组CSED的钩子已经到位,mod_fabm_3D.F并且在同时使用-DFABM和-DSEDIMENT编译FVCOM时启用了这些钩子。就目前而言,生物地球化学与沉积物之间的唯一相互作用是通过ERSEM中水下光衰减的附加成分。这些仅存light_iop.F90在于ERSEM代码中。

在 mod_fabm_3D.F整个CSED阵列中,泥沙的质量浓度相关联,这意味着正在运行的沉积物模块只有一个尺寸类别(假定为带有的泥沙)d_50 < 62.5 micro m。该变量mass_concentration_of_silt需要以mg / m3为单位。ERSEM light_iop.F90期望特定吸收率和反向散射的系数,并在此刻对其进行计算,mod_fabm_3D.F并对特定吸收率和反向散射值进行硬编码。在不久的将来,我们将增加淤泥吸收并将其silt_bbscatter作为可选输入添加到fabm.yaml中

现在light_ady.F90已经合并light_iop_withBB.F90到,light_ady_spm.F90因此可以同时考虑CDOM吸收和SPM。light_ady_spm.F90必须添加到ERSEM目录中的CMakelist.txt中。目前,这些文件不在git ERSEM分支中,但可以通过FVCOM-FABM列表进行请求。

比吸收值已从不同文献来源中得出,它们仅基于英国研究,可能偏向海峡地区。

  • 蒂尔斯通(Tilstone,GH),彼得斯(Peters),SWM,范德沃尔德(van der Woerd),HJ,埃弗莱德(Eleveld),马萨诸塞州(Ruddick),堪萨斯州(Schönfeld),西恩菲尔德(W.),克拉瑟曼(H.),马丁内斯-维森特(V. 。,Sørensen,K.,Jørgensen,PV,Shutler,JD,2012。比吸收特性的变异性及其在北海和西英吉利海峡沿岸水域MERIS的半分析海洋颜色算法中的使用。环境遥感118,320–338。https://doi.org/10.1016/j.rse.2011.11.019Specific absorption values between 0.01-0.02 m2/g. These are for Total Suspended Matter (TSM) and include organic and non-organic particulates. These values are probably a bit too low but they are comparable to the absorption default values used in ERSEM for R4-R8.
  • Babin,M.,Stramski,D.,Ferrari,GM,Claustre,H.,Bricaud,A.,Obolensky,G.,Hoepffner,N.,nd浮游植物,非藻类颗粒和溶解有机物的光吸收系数的变化在欧洲沿海水域中起着重要作用。地球物理学研究杂志:海洋108 https://doi.org/10.1029/2001JC000882。 Here relevant values for absorption are 0.035 (m2/g) (similar values for irish sea and channel areas) and only relate to inorganic silt particulates. Babin reports a dependency of the specific absorption coefficient with Particulate Inorganic Matter concentrations (PIM) as abs(443) = 0.031 x PIM (all units in m g). Bowers et al 1996 (in the same paper) gives a slightly different one: abs(443) = 0.0235 x PIM

    * Martinez-Vicente,V.,Land,PE,Tilstone,GH,Widdicombe,C.,Fishwick,JR,2010年。颗粒物的散射和反向散射与西英吉利海峡的水成分和季节变化有关。J浮游生物研究32,603–619。https://doi.org/10.1093/plankt/fbq013 Victor here has also a bbp equation as a function of PIM: bbp(532) = PIM x 0.0055(+-0.0012) + 0.0002 (+- 0.0007). The constant was not statistically significant though.

笔记

模型仿真的所有其他方面均保持不变,即仍然使用ERSEM的地表强迫,河流和边界条件。目前还没有一个快速解决方案的一个突出方面是在ERSEM中包括一个内部循环,以完善下沉颗粒垂直传输的时间积分(已在FVCOM的沉积物法规中实现)。

从理论上讲,应该可以同时运行离线沉积物和ERSEM,因为变量的名称不同。但是就目前而言,每个脱机选项(沉积物和ERSEM)都需要一个netCDF文件,并且可以读取和更新FVCOM状态变量。理想情况下,应将它们合并,以便在其中一个或两个都正确时update_offline_forcing使用一个。

输出示例:FVCOM-FABM-ERSEM

下图系列显示了2006年6月英国西海岸的ERSEM输出变量范围。

         

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
以下是基于Vue3+Ts版本的配置化表单基础组件的实现方式: 1. 在组件中引入表单配置项和表单数据对象: ```vue <template> <el-form :model="formData" :rules="rules" ref="form" label-width="100px"> <el-row :gutter="20"> <el-col :span="item.span" v-for="(item, index) in formConfig" :key="index"> <component :is="item.type" :config="item" :formData="formData"></component> </el-col> </el-row> </el-form> </template> <script> import { defineComponent, ref } from 'vue'; import { ElForm, ElRow, ElCol } from 'element-plus'; import { FormConfig, FormData } from './types'; import FormItem from './FormItem.vue'; export default defineComponent({ name: 'ConfigForm', components: { ElForm, ElRow, ElCol, FormItem, }, props: { formConfig: { type: Array as () => FormConfig[], required: true, }, formData: { type: Object as () => FormData, required: true, }, rules: { type: Object, default: () => ({}), }, }, }); </script> ``` 2. 在表单配置项中定义每个表单项的类型、名称、校验规则等信息: ```vue <script lang="ts"> import { defineComponent } from 'vue'; import { FormItemConfig } from './types'; import { ElInput, ElSelect } from 'element-plus'; export default defineComponent({ name: 'FormItem', components: { ElInput, ElSelect, }, props: { config: { type: Object as () => FormItemConfig, required: true, }, formData: { type: Object, required: true, }, }, computed: { isSelect() { return this.config.type === 'select'; }, }, methods: { handleChange(value: any) { this.$emit('change', value); }, }, }); </script> ``` 3. 在表单项组件中根据表单配置项的类型渲染不同的表单项: ```vue <template> <component :is="isSelect ? 'el-select' : 'el-input'" v-model="formData[config.name]" :placeholder="config.placeholder" :disabled="config.disabled" :options="config.options" @change="handleChange"></component> </template> ``` 4. 在父组件中使用表单组件并传入表单配置项和表单数据对象: ```vue <template> <config-form :form-config="formConfig" :form-data="formData" :rules="rules"></config-form> </template> <script lang="ts"> import { defineComponent, ref } from 'vue'; import ConfigForm from './ConfigForm.vue'; import { FormConfig, FormData } from './types'; export default defineComponent({ name: 'App', components: { ConfigForm, }, setup() { const formData = ref({ name: '', age: '', gender: '', }); const formConfig: FormConfig[] = [ { type: 'input', name: 'name', label: '姓名', placeholder: '请输入姓名', span: 8, rules: [{ required: true, message: '请输入姓名', trigger: 'blur' }], }, { type: 'input', name: 'age', label: '年龄', placeholder: '请输入年龄', span: 8, rules: [{ required: true, message: '请输入年龄', trigger: 'blur' }], }, { type: 'select', name: 'gender', label: '性别', placeholder: '请选择性别', span: 8, options: [ { label: '男', value: 'male' }, { label: '女', value: 'female' }, ], rules: [{ required: true, message: '请选择性别', trigger: 'change' }], }, ]; const rules = { name: [{ required: true, message: '请输入姓名', trigger: 'blur' }], age: [{ required: true, message: '请输入年龄', trigger: 'blur' }], gender: [{ required: true, message: '请选择性别', trigger: 'change' }], }; return { formData, formConfig, rules, }; }, }); </script> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值