当前位置: 首页 > news >正文

【WRF理论第十三期】详细介绍 Registry 的作用、结构和内容

目录

  • 1. Introduction:介绍 Registry 的作用和功能。
  • 2. Registry Contents:详细描述 Registry 的结构和内容,包括各个部分的条目类型。
    • 2.1. DIMSPEC ENTRIES(维度规格条目)
    • 2.2. STATE ENTRIES(状态变量条目)
      • 2.2.1. State 条目的核心作用
      • 2.2.2. State 条目的字段说明
      • 2.2.3. State 条目的规则和限制
    • 2.3. I1 ENTRIES(局部变量条目)
      • 2.3.1 I1 数据的关键特点
      • 2.3.2 I1 数据的限制
    • 2.4. TYPEDEF ENTRIES(自定义派生类型条目)
      • 2.4.1. Typedef 条目的作用
      • 2.4.2. Typedef 条目的字段
      • 2.4.3. Typedef 条目使用规则
    • 2.5. RCONFIG ENTRIES(运行时配置条目)
      • 2.5.1 Rconfig 条目概述
      • Rconfig 条目的字段
    • 2.6. PACKAGE ENTRIES(物理包条目)
      • 2.6.1. Package 条目在 Registry 中的作用
      • 2.6.2. Package 条目的基本字段
    • 2.7. HALO AND PERIOD ENTRIES(Halo 和周期通信条目)
      • 2.7.1. HALO 和 PERIOD 条目的作用
      • 2.7.2. HALO 和 PERIOD 条目的基本格式
    • 2.8. XPOSE ENTRIES(变量重排列条目)
      • Xpose 条目的字段说明
  • APPENDIX: TABLE OF REGISTRY FILES(附录:Registry 文件一览表)

本博客主要对Registry文档-WRF Tiger Team Documentation: The Registry进行详细解释。

1. Introduction:介绍 Registry 的作用和功能。

WRF 软件框架的灵活性:WRF 模型支持多种计算机架构、动态核心(dynamical cores)、应用程序和外部库。

  • 动态核心:WRF 支持不同的动力学求解算法(如 ARW、NMM 等)。
  • 外部库:可以连接气象数据处理库或并行计算框架。

Registry 的作用:

  • 是一种 CASE 工具,用于管理 WRF 模型的复杂性。
  • 它通过一个数据库(registry 文件)和一个解释程序(Registry 工具)来组织代码的信息,并自动生成部分代码。

Registry 的核心功能:
Registry 提供了单点控制(Single Point of Control),简化了以下任务:

  • 声明、分配和初始化状态变量。
  • 跨函数的参数传递:通过生成接口代码简化子程序间变量传递。
  • 输入/输出:自动生成与初始条件、重启动、历史记录相关的 I/O 代码。
  • 并行通信:管理变量之间的 Halo 交换、周期边界条件更新和嵌套网格通信。

与 ASIDE 的关系:Registry 是 ASIDE(特定应用交互开发环境)在 WRF 中的早期原型。未来,ASIDE 可能会进一步扩展以支持更多复杂需求。

通过 Registry 修改代码的便捷性:只需在 Registry 文件中修改一行即可完成对模型状态变量的增删改操作,极大简化了代码维护。

Registry 的其他功能:
生成模块代码:如 module_domain.F、module_configure.F 等。
动态核心支持:根据不同的动力学核心生成不同的分配语句和参数列表。
支持包机制:可以定义物理包、4D 标量数组等。

2. Registry Contents:详细描述 Registry 的结构和内容,包括各个部分的条目类型。

Registry 文件包含多个表格,这些表格用于定义和组织 WRF 模型的各种变量和数据结构。每种表格类型对应模型中的特定功能或数据类别。

1、Dimspec 表
描述模型中数组所使用的维度信息。
这些维度是 WRF 模型各种数组的基础,定义了数组的大小和排列方式。

2、State 表
作用:
定义 WRF 模型中的状态变量(state variables),这些变量是模型核心计算的主要输入和输出。
状态变量存储在 domain 的派生数据类型(DDT,Derived Data Type)中。

内容:
包括基本变量(如温度、湿度、风速)和复杂的多维数组。
定义变量的类型(如 real、integer)、维度、时间层数、是否需要 I/O(输入/输出)、网格的空间位置(如是否在 X 或 Y 方向交错)。

3、I1 表
作用:
定义 solve 子程序中使用的局部变量和数组。
这些变量通常是临时的,用于存储中间计算结果,或特定时间步长的数据。

内容:
与 State 表不同,I1 表中的变量不需要跨时间步保存。
定义局部变量的类型、维度和用途。

4、Typedef 表
作用:
定义模型中 domain 数据类型的派生子类型(derived types)。
这些子类型可以用来组织复杂的数据结构。

内容:
WRF 模型本身不直接使用这些子类型。
该表是为未来扩展或与其他 Fortran90 程序集成而设计的。

5、Rconfig 表
作用:
定义模型运行时的配置变量(如 namelist 文件中的变量)。
配置变量用于控制模型的行为,例如网格大小、时间步长、物理参数化方案等。

内容:
包括标量(单一变量)或数组形式的配置变量。
Registry 会自动生成代码,处理这些变量的默认值、输入、广播(在并行处理器间共享)等。

6、Package 表
作用:
定义模型中的“包”(package),如物理过程模块、化学模块等。
包含有关包的属性和信息(例如,哪些变量属于该包)。

内容:
定义与包相关的变量和符号索引。
包的状态变量可以按需分配内存,并通过 namelist 文件启用或禁用。

7、Halo 表
作用:
定义 Halo 区域的更新规则。Halo 区域是网格分区之间重叠的“边界区域”,用于并行计算中处理子网格间的数据交换。

内容:
描述用于 Halo 区域的各类通信模式(如边界条件、变量值传递等)。

8、Period 表
作用:
定义周期性边界条件的通信规则。
周期性边界条件是指网格的一侧边界与另一侧边界相连(例如,在全球模式中经度方向通常是周期边界)。

内容:
描述如何在周期边界之间传递变量值。

9、Xpose 表
作用:
定义变量在不同网格分解方式之间的重排列规则(transposition)。
在并行计算中,不同的网格分解可能需要对变量进行重新排序或转置。

内容:
描述变量如何在不同分解方式之间进行通信和转换。

10、Initialization 表
作用:
定义嵌套网格(nested grid)初始化时的通信规则。
嵌套网格是指较高分辨率的子域网格,初始化时需要从粗网格(coarse domain)中获取数据。

内容:
描述如何将粗网格的数据传递到嵌套网格。

11. Force 表
作用:
定义嵌套网格边界强迫(forcing)时的通信规则。
强迫是指在嵌套网格的边界施加外部数据(例如来自粗网格或观测数据)。

12. Feedback 表
作用:
定义嵌套网格对粗网格的反馈通信规则。
嵌套网格的计算结果可能需要传递回粗网格,以影响粗网格的模拟。

2.1. DIMSPEC ENTRIES(维度规格条目)

Dimspec 表:定义模型中数组的维度信息。
作用:这些维度可以在后续的 State、I1 和 Typedef 条目中引用。

字段解释,每个 Dimspec 条目包含以下字段:

  • Entry: 关键字 dimspec,表明这是一个维度条目。
  • DimName: 维度名称(单字符)。
    用单个字符表示维度,例如 i、j、k 分别对应 X、Y、Z 坐标轴。
  • Order: 维度在模型框架中的顺序(整数:1、2、3 或 -)。
    定义维度在内部框架中的顺序。例如,1 表示该维度与 X 轴相关联。
  • HowDefined: 维度范围的定义方式(如 standard_domain、namelist 或常量)。
    维度范围的定义方式:
    standard_domain:表示使用标准的网格维度。
    namelist:范围由 namelist 文件中的变量指定。
    constant:范围是固定常数。
  • CoordAxis: 维度对应的坐标轴(X、Y、Z 或 C)。
  • DatName: 元数据名称(用于输出的数据文件中)。

2.2. STATE ENTRIES(状态变量条目)

State 条目 是 WRF 注册表(Registry)中的一部分,用于定义模型中的状态变量(state variables)。这些变量是域派生数据类型(TYPE(domain),定义在 module_domain.F 中)的字段,描述模型网格上的核心物理变量。

2.2.1. State 条目的核心作用

定义状态变量:
State 表用于定义模型运行中使用的状态变量。
这些变量可以是简单类型(如 real、integer 等)或派生类型(来自 Typedef 表的定义)。

支持派生类型:
State 变量可以嵌套派生类型(即包含其他派生类型的字段)。
注意:WRF 模型本身不推荐在 State 表中使用派生类型,但其他基于 WRF 框架的应用可能需要此功能。

时间层支持:
State 变量可以支持多时间层(time levels),用于表示上一个、当前或下一个时间步的变量值。

I/O 支持:
State 变量可以通过输入/输出(I/O)与文件交互(例如历史文件、重启文件等)。

2.2.2. State 条目的字段说明

State 条目包含以下字段,分别描述变量的属性:

1、Entry:
固定值 state,标识这是一个 State 条目。

2、Type:
描述变量的类型,可以是:

  • real(单精度实数)
  • double(双精度实数)
  • integer(整数)
  • logical(布尔值)
  • character(字符)
  • derived(派生类型,必须在 Typedef 表中定义)

3、Sym:
变量的符号名称(变量名)。
如果变量支持多时间层,则会自动生成 _1、_2 等名称。

4、Dims:
描述变量的维度(维度字符串或 - 表示标量)。
维度字符串由 DimSpec 表定义的维度名称(如 i、j、k)和修饰符组成。
修饰符包括:

  • f:变量是 4D 数组的成员,其 4D 数组名称在 Use 字段中指定。
  • t:变量是 4D 数组的成员,并且需要生成对应的 4D 倾向数组(tendency array)。
  • x:变量的 2D 分解使 X 维度的数据全在处理器上(仅适用于 3D 数组)。
  • y:变量的 2D 分解使 Y 维度的数据全在处理器上(仅适用于 3D 数组)。
  • b:变量是边界数组(2D 或 3D),只分配边界数据。

5、Use:
描述变量的用途:
可能表示变量与某个求解器的关联(如 dyn_)。
如果变量是 4D 数组的成员,此字段指定 4D 数组名称。
如果没有特殊用途,用 -。

6、NumTLev:
变量的时间层数:
对于数组,指定时间层的数量(如 1 表示单时间层)。
对于标量,使用 -。

7、Stagger:
描述变量的交错网格配置(staggering):
有效值为 X、Y、Z 表示交错方向。
如果没有交错,用 -。

8、IO:
描述变量的 I/O 操作:

  • i:参与输入。
  • r:参与重启文件。
  • h:参与历史文件。
  • -:不参与任何 I/O。

9、DName:
输入/输出时使用的元数据名称(必须唯一)。

10、Descrip:
变量的元数据描述。

11、Units:
变量的单位(例如 m/s、kg/m^3)。

2.2.3. State 条目的规则和限制

1、命名规则:
如果变量是 4D 数组的成员,其符号名称(Sym)会生成一个整型索引变量 P_,用于访问 4D 数组的特定字段。
如果变量与某个特定的动力核心相关联(dyn_),在 module_domain.F 中的名称将是 _name。

2、维度字符串(Dims):
维度字符串的维度顺序从左到右依次为最快变化到最慢变化。
示例:

  • ikj:3D 数组,维度顺序为 X、Z、Y。
  • -:标量变量,没有维度。

3、4D 数组成员:
如果变量是 4D 数组的成员,Dims 字段必须包含 f 修饰符,Use 字段必须指定 4D 数组的名称。
如果还包含 t 修饰符,会自动生成一个倾向(tendency)数组,命名为 _tend。

4、边界数组:
边界数组(b 修饰符)仅分配边界数据,排除内部数据。
当前 WRF 框架中,边界数组是 4D 数组,维度分别为:

  • 最大水平维度(X 或 Y);
  • 边界宽度(由 namelist 变量 spec_bdy_width 定义);
  • 垂直层数;
  • 边界索引(1=西边界,2=东边界,3=南边界,4=北边界)。

2.3. I1 ENTRIES(局部变量条目)

I1 条目(Intermediate Level 1,中间级别 1 数据)是一种特殊的数据类型,主要用于模型中的求解器(solver)阶段。与状态数据(state data)类似,但 I1 数据具有一些独特的特点和限制。

2.3.1 I1 数据的关键特点

临时性:
I1 数据并非持久数据,它们不会从一个时间步(time step)延续到下一个时间步。
它们是局部变量,通常在运行时堆栈中分配内存(stack allocated)。

区分方式:
在注册表(registry)中,通过关键词 i1(作为条目的第一项)来标识 I1 数据。
I1 数据没有以下字段,因为它们不进行输入/输出(I/O)操作:

  • IO(输入/输出标记)
  • DName(数据名称)
  • Descrip(描述)
  • Units(单位)

命名规则:
I1 数据可以是多时间层(multi-time level)的数据。
如果是多时间层数据,变量名称会像状态数据一样附加一个下划线(_)和时间层编号。例如:var_1 表示时间层 1 的数据。

2.3.2 I1 数据的限制

1、无修饰符:
I1 变量的维度字符串(Dims)不能包含以下修饰符:
b(边界方向)
f(前向)
t(时间方向)
x(x 方向)
y(y 方向)

2、不能是 4D 物种数组:
四维(4D)物种数组不能作为 I1 数据。

3、自动生成的倾向数组:
如果 4D 物种数组的某个成员在其维度字符串(DimString)中包含 t,则会自动生成一个对应的 4D 倾向(tendency)数组作为 I1 数据。
这种自动生成的 I1 数据无需在注册表的 I1 表格中显式指定。

2.4. TYPEDEF ENTRIES(自定义派生类型条目)

Typedef 条目 是 WRF 注册表(Registry)中的一种特殊条目,用于定义派生数据类型(Derived Data Types, DDT)。这些派生类型可以在 State 表 或 其他 Typedef 条目 中使用。它们类似于编程语言中的结构体定义,允许将多个变量或数组组织成一个复合类型。

2.4.1. Typedef 条目的作用

1、定义派生类型:
在 WRF 框架中,State 表 中的字段(变量)是 TYPE(domain) 类型的字段。
除了简单变量类型(如整数、实数等),这些字段还可以是派生数据类型(DDT)。
Typedef 表允许用户定义这些派生类型,并在 State 表或其他 Typedef 条目中使用。

2、嵌套派生类型:
Typedef 表支持嵌套类型。一个 Typedef 条目可以引用之前定义的派生类型。
但必须注意:派生类型必须在使用之前被完全定义。

3、不分配数据:
Typedef 条目本身并不会导致任何数据被分配或定义。
只有 State 条目或 I1 条目会实际分配数据。因此,派生类型最终必须出现在 State 条目中,才能真正被使用。

4、避免命名冲突:
Typedef 条目中的字段名称在程序中作为派生类型的字段引用(例如:grid%typename%fieldname),因此不会与普通变量发生命名空间冲突。
但如果派生类型的字段需要进行 I/O 操作(通过 IO 字段指定),则它们的 DName 字符串必须唯一。

5、限制:
如果 State 条目使用派生类型作为其变量类型(Type 字段),那么该 State 条目不能进行 I/O 操作(IO 字段必须是 -)。

2.4.2. Typedef 条目的字段

Typedef 表的条目格式与 State 表类似,但有以下不同和额外字段:

1、Entry:
表示这是一个 Typedef 条目,固定值为 typedef。

2、TypeSym:
表示正在定义的派生类型的名称。例如 xb_type。

3、Type:
字段的基本类型,可以是以下之一:

  • real(实数)
  • double(双精度实数)
  • integer(整数)
  • logical(逻辑值)
  • character(字符)
  • derived(派生类型,必须是之前定义的 Typedef 类型)

4、Sym:
字段的符号名称(变量或数组的名称)。

5、Dims:
表示字段的维度信息:
维度字符串,例如 ij 代表二维数组。
如果字段是标量,使用 -。

6、Use:
表示字段的用途,例如与求解器的关联,或者是否为 4D 标量数组。
如果没有特殊用途,用 -。

7、NumTLev:
表示时间层的数量(仅对数组有效)。
对于标量,使用 -。

8、Stagger:
表示字段的交错(staggered)维度:
有效值为 X、Y、Z 表示交错方向。
如果没有交错,用 -。

9、IO:
表示字段是否参与 I/O 操作:

  • i:输入
  • r:重启
  • h:历史文件
  • -:不参与 I/O

10、DName:
字段的元数据名称,用于 I/O 操作。如果字段需要进行 I/O,必须提供唯一的名称。

11、Descrip:
字段的元数据描述。

12、Units:
字段的元数据单位。

2.4.3. Typedef 条目使用规则

定义顺序:
派生类型必须在使用之前完成定义。
一旦一个派生类型被引用(在 State 表或其他 Typedef 表中),后续不能再为这个类型添加字段。

I/O 限制:
如果 State 条目的 Type 是派生类型,那么该 State 条目不能进行 I/O(IO 字段必须是 -)。

与核心关联:
虽然 Typedef 条目可以给字段指定核心关联,但通常不推荐这么做。
如果派生类型仅与特定核心有关,核心关联应在对应的 State 表条目中指定。

Typedef 示例
以下是一个 Typedef 定义的示例:

# BEGIN XB_TYPE DEFINITION
typedef xb_type integer map
typedef xb_type real grid_box_area ij - 1 -
typedef xb_type real dnw
# END XB_TYPE DEFINITIONstate xb_type xb - -

解释:
1、定义派生类型 xb_type:
xb_type 是一个派生类型,包含以下字段:
map:一个整数标量。
grid_box_area:一个二维实数数组,维度为 ij。
dnw:一个实数标量。

2、State 表条目:
定义了一个类型为 xb_type 的变量 xb。
该变量没有参与 I/O(IO 字段为 -)。

2.5. RCONFIG ENTRIES(运行时配置条目)

Rconfig 是一种用于模型运行时的配置机制,这些条目用于指定模型运行所需的变量和数组的相关信息。

2.5.1 Rconfig 条目概述

Rconfig 条目定义了在模型运行时的配置变量(变量或数组)。这些变量在模型运行开始时输入,并具有以下特点:

变量或数组的作用范围:

  • 如果是 变量,则其作用范围是整个模型(全局适用)。
  • 如果是 数组,则其作用范围是具体的域(嵌套层级)。数组的维度从 1 到运行中的域数量(嵌套域数量)。

模型当前实现方式:
当前(截至 2004 年 6 月)的实现方式是通过 namelist(一种配置文件格式)。
为了便于讨论,本文假设所有配置通过 namelist 实现。

Rconfig 条目的字段

Rconfig 条目包含以下几个字段:

1、Entry:
定义关键词,用于声明这是一个 Rconfig 条目。关键词为 rconfig。

2、Type:
定义 namelist 变量的类型。支持以下变量类型:

  • integer(整数)
  • real(实数)
  • logical(布尔值)

(注意:目前不支持字符串类型的变量)

3、Sym:
指定 namelist 变量或数组的名称。

4、How set:
定义变量的设置方式,说明变量如何被赋值。例如:
如果通过 namelist 设置,说明变量在哪个 namelist 块中定义(例如:time_control 或 domains 块)。
如果是派生值(derived),说明变量值由程序自动计算得出,而不是手动设置。

5、Nentries:
定义 namelist 变量或数组的维度。可能的选项包括:
1:变量对所有嵌套域具有相同的值(模型全局共享)。
max_domains:变量值随不同域而变化,维度为 max_domains(max_domains 是在 module_driver_constants.F 文件中定义的一个整数参数,用于表示最大域数)。

6、Default:
指定变量的默认值。如果 namelist 中没有显式设置该变量,则使用默认值。
如果没有默认值,则用 - 表示。

2.6. PACKAGE ENTRIES(物理包条目)

Package 条目用于定义模型中的包(package),如微物理方案(microphysics schemes),并关联到一个 rconfig 变量,用于在运行时切换包。以下是逐步解释,以帮助理解其具体内容和用法。

2.6.1. Package 条目在 Registry 中的作用

定义包(Package)
Package 条目用于定义一个包(例如一个 cumulus 物理包或微物理方案),并通过一个配置变量(rconfig)与其他包进行切换。
这些包决定了模型中运行的具体方案(例如选择哪种微物理参数化方案)。

与 4D 数组的关联
每个包会使用模型状态变量中定义的 4D 数组(这些数组定义在 Registry 的 state 条目中)。
通过 Package 条目,模型能够动态地根据运行时选择的包来调整 4D 数组的维度和内容(即只分配当前包需要使用的字段)。

2.6.2. Package 条目的基本字段

每个条目包含以下字段:

1、Entry:
固定关键字 “package”,表示这是一个包条目。

2、Package name:
包的名字,用于标识这个包。
例如:kesslerscheme 或 linscheme。

3、Associated rconfig choice:
与包关联的 rconfig 变量及其值。
例如:mp_physics==1 表示当 mp_physics 配置变量为 1 时,选择此包。

4、Package state vars:
当前未使用,指定为 -。

5、Associated 4D scalars:
定义该包使用的 4D 数组及其字段。格式为:

array_name:field1,field2,...

如果包使用多个 4D 数组,可以用分号分隔多个数组定义,例如:

moist:qv,qc,qr;chem:no2,o3

这里:

  • moist 是 4D 数组的名称,qv、qc、qr 是该数组的字段。
  • chem 是另一个 4D 数组,no2 和 o3 是其字段。

以下是一个微物理方案的 Package 条目示例:

package passiveqv mp_physics==0 - moist:qv
package kesslerscheme mp_physics==1 - moist:qv,qc,qr
package linscheme mp_physics==2 - moist:qv,qc,qr,qi,qs,qg
rconfig integer mp_physics namelist,namelist_04 max_domains 0

第一行:
定义了一个名为 passiveqv 的包。
当 mp_physics=0 时选择此包(即没有微物理方案)。
即使没有微物理方案,这个包仍然会确保 qv(比湿)字段存在于 4D 数组 moist 中。

第二行:
定义了一个名为 kesslerscheme 的包(Kessler 微物理方案)。
当 mp_physics=1 时选择此包。
这个包会使用 moist 数组中的 qv、qc(云水)和 qr(雨水)字段。

第三行:
定义了一个名为 linscheme 的包(Lin 微物理方案)。
当 mp_physics=2 时选择此包。
这个包会使用 moist 数组中的 qv、qc、qr、qi(冰晶)、qs(雪粒)和 qg(霰)字段。

第四行:
定义了 rconfig 变量 mp_physics,它是一个整型变量。
它可以通过 namelist 输入文件进行设置,用于选择不同的微物理方案。
例如,mp_physics=1 选择 Kessler 微物理方案,mp_physics=2 选择 Lin 微物理方案。

2.7. HALO AND PERIOD ENTRIES(Halo 和周期通信条目)

在 WRF 模型中,Halo 和 Period 条目 用于定义模型中与网格通信相关的操作。具体来说,这些条目用于描述如何更新网格边界上的数据,以支持并行计算中的分区网格之间的通信,以及处理周期性边界条件的数据交换。

2.7.1. HALO 和 PERIOD 条目的作用

Halo 条目:
Halo(光晕)更新是指在分区网格(patch)周围的“光晕区域”中进行的数据交换。
光晕区域:每个网格的边界会与相邻网格共享一部分重叠区域(称为光晕),用于保证分区之间的计算一致性。
Halo 的更新操作仅适用于 水平维度(X 和 Y 方向),不涉及垂直方向(Z 方向)。

Period 条目:
Period(周期边界条件)更新用于处理周期性边界条件。
例如:在全球数值模式中,地球经度方向可以被认为是周期性的(东西两端相连)。
Period 更新操作同样只适用于 水平维度(X 和 Y 方向)。

2.7.2. HALO 和 PERIOD 条目的基本格式

每个条目包含以下三个字段:

第一个字段:关键字 “halo” 或 “period”。
指定这是一个 Halo 或 Period 条目。

第二个字段:通信操作的名字,用于标识该操作。
例如:halo_update_4pt 或 periodic_bc.

第三个字段:描述更新操作的具体信息,格式如下:
Halo 条目:

npts:f1,f2,...[;npts:f1,f2,...]*
  • npts 表示用于更新的 stencil(模板)点数,即每个网格点需要从相邻网格交换的点数。
  • f1,f2,… 是需要更新的状态变量列表。

如果不同变量使用不同的 npts,可以用分号分隔多个更新操作。

Period 条目:

width:f1,f2,...[;width:f1,f2,...]*
  • width 表示需要更新的周期边界的网格单元数量。
  • f1,f2,… 是需要更新的状态变量列表。

在这里插入图片描述

  • npts=4:仅更新网格点的四个直接邻居(N、S、E、W)。
  • npts=8:更新网格点的四个直接邻居和四个角点(NW、NE、SW、SE)。
  • npts=12:更新网格点的四个直接邻居、四个角点,以及第二层的 N、S、E、W 邻居。

灰色区域表示需要更新的 Halo 点。

2.8. XPOSE ENTRIES(变量重排列条目)

XPOSE ENTRIES主要用于定义变量在不同网格分解方式之间的转置(transposition)。

在 WRF 模型中,网格分解(decomposition) 是并行计算的核心,通常将计算域划分为多个子域,并分配到不同的处理器上进行计算。
然而,不同的计算任务可能需要不同的网格分解方式。例如:

  • Z 非分解(Z non-decomposed):变量在 Z 方向上没有分解,意味着 Z 维度的数据保留在同一个处理器上。
  • X 非分解(X non-decomposed):变量在 X 方向上没有分解。
  • Y 非分解(Y non-decomposed):变量在 Y 方向上没有分解。

在某些计算过程中,需要将变量从一种分解方式转换为另一种分解方式。这种转换称为 变量转置(transposition),而 Xpose 条目用于定义这些转置操作。
在这里插入图片描述

Xpose 条目的字段说明

Xpose 条目包含以下字段,每个字段的作用如下:

Entry:
固定关键字 “xpose”,表明这是一个转置条目。

XposeName:
定义转置操作的名字。
这个名字将在代码中用作标识,用于包含(include)相关的转置代码片段。

Use:
一个字符串,用来关联转置操作与特定的动态核心(如 dyn_em)或提供额外的描述信息。
例如:dyn_em 表示这个转置操作与 dyn_em 动态核心相关。

XposeVariables:
一个变量列表,定义参与转置操作的状态变量。
变量的顺序具有重要意义:

  • 第一个变量必须是 Z 非分解 的变量。
  • 第二个变量必须是 X 非分解 的变量。
  • 第三个变量必须是 Y 非分解 的变量。

这样,转置操作可以按照顺序完成:从 Z 非分解 → X 非分解 → Y 非分解。

Xpose 示例分析

Xpose TRANS_A dyn_em U_z, U_x, U_y

XposeName: TRANS_A:定义了这组转置操作的名字。
Use: dyn_em:表示这组转置操作与 dyn_em 动态核心相关。
XposeVariables: U_z, U_x, U_y:

  • U_z 是 Z 非分解 的变量。
  • U_x 是 X 非分解 的变量。
  • U_y 是 Y 非分解 的变量。

APPENDIX: TABLE OF REGISTRY FILES(附录:Registry 文件一览表)

相关文章:

【WRF理论第十三期】详细介绍 Registry 的作用、结构和内容

目录 1. Introduction:介绍 Registry 的作用和功能。2. Registry Contents:详细描述 Registry 的结构和内容,包括各个部分的条目类型。2.1. DIMSPEC ENTRIES(维度规格条目)2.2. STATE ENTRIES(状态变量条目…...

Android启动优化指南

文章目录 前言一、启动分类与优化目标1、冷启动1.1 优化思路1.2 延迟初始化与按需加载1.3 并行加载与异步执行1.4 资源优化与懒加载1.5 内存优化与垃圾回收控制 2. 温启动2.1 优化应用的生命周期管理2.2 数据缓存与懒加载2.3 延迟渲染与视图优化 3. 热启动3.1 保持应用的状态3.…...

【ETCD】【源码阅读】configureClientListeners () 函数解析

逐步解析 configureClientListeners 函数 configureClientListeners 是 ETCD 的一个重要函数,用于配置客户端通信的监听器(Client Listeners)。这些监听器主要负责处理外部客户端与 ETCD 服务之间的通信,包括 HTTP 和 gRPC 请求。…...

IO进程学习笔记

man手册 普通命令。系统调用的函数。库函数。特殊文件。文件格式。游戏。附加的一些变量 IO介绍 I:input 输入 O:output 输出 对文件的输入和输出 输入-》写文件,将文件中的内容写到内存中去 输出-》读文件,将内存中的内容读取到文…...

智能手机回暖:华为点火,小米荣耀OV拱火

进入11月中下旬,智能手机圈再度热闹起来。包括华为、小米、OPPO、vivo等诸多手机厂商,都在陆续预热发布新机,其中就包括华为Mate 70、小米Redmi K80、vivo的S20,IQOO Neo10等热门新机,这些热门新机的集中上市迅速吸引了…...

Sqoop导入数据(mysql---->>hive)

目录 数据传输流程脚本报错和异常说明1. Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf2. 数据导入hive后显示NULL 数据传输流程 mysql---->>hdfs---->>hive 数据从mysql表中取出,放到hdfs上(由targ…...

实验3-实时数据流处理-Flink

1.前期准备 (1)Flink基础环境安装 参考文章: 利用docker-compose来搭建flink集群-CSDN博客 显示为这样就成功了 (2)把docker,docker-compose,kafka集群安装配置好 参考文章: …...

深度学习实验十四 循环神经网络(1)——测试简单循环网络的记忆能力

目录 一、数据集构建 1.1数据集的构建函数 1.2加载数据集并划分 1.3 构建Dataset类 二、模型构建 2.1嵌入层 2.2SRN层 2.3模型汇总 三、模型训练 3.1 训练指定长度的数字预测模型 3.2 损失曲线展示 四、模型评价 五、修改 附完整可运行代码 实验大体步骤&#x…...

k8s部署odoo18(kubeshpere面板)

Postgresql部署 链接: kubesphere搭建 postgres15 因为我的是在另一台服务器使用kubesphere进行部署的,如果有和我一样情况的,可以参考上面的文档部署postgreasql。 注意事项: 因为odoo不允许使用postgresql的默认用户,也就是po…...

【模型对比】ChatGPT vs Kimi vs 文心一言那个更好用?数据详细解析,找出最适合你的AI辅助工具!

在这个人工智能迅猛发展的时代,AI聊天助手已经深入我们的工作与生活。你是否曾在选择使用ChatGPT、Kimi或是百度的文心一言时感到一头雾水?每款AI都有其独特的魅力与优势,那么,究竟哪一款AI聊天助手最适合你呢?本文将带…...

Java——容器(单例集合)(上)

一 容器介绍 容器,是用来容纳物体、管理物体。生活中,我们会用到各种各样的容器。如锅碗瓢盆、箱子和包等 程序中的“容器”也有类似的功能,用来容纳和管理数据。比如,如下新闻网站的新闻列表、教育网站的课程列表就是用“容器”来管理 视频…...

如何配置Github并在本地提交代码

前提: 可以流畅访问github, 需要一些上网技巧, 这就自行处理了 申请一个github账号 Github官网地址 首先就是邮箱注册啦, github没有对邮箱的限制, 只要是能收邮件的就ok, qq邮箱, 163等都可以使用. 然后和普通注册账号一样, 一路填写需要的信息, 验证邮箱即可. 如何新增代…...

工作bug,keil5编译器,理解int 类型函数返回值问题,详解!!!

编写不易,禁止搬运,仅供学习,感谢理解 问题现象 下面是一个在keil5里面写的一个,int类型的返回值函数,这个函数里面,只有if else if else这三个判断条件语句,正常来说任何情况下,…...

简明速通Java接口

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文从代码层面直接整理Java接口 让老油子们无需再理解繁杂的概念了。 Java接口在代码层面是做什么的 说白了老铁,Java的接口就是一个类,这个类中只能声明属性和方法,属性需要…...

MVC基础——市场管理系统(二)

文章目录 项目地址三、Produtcts的CRUD3.1 Products列表的展示页面(Read)3.1.1 给Product的Model里添加Category的属性3.1.2 View视图里展示Product List3.2 增加Product数据(Add)3.2.1 创建ViewModel用来组合多个Model3.2.2 在_ViewImposts里引入ViewModels3.2.3 添加Add的…...

java------------常用API preiod duration 计算时间差

1,preiod 如果末天数比初天数小,需要进一位 package API;import java.time.LocalDate; import java.time.Period;public class preiod {public static void main(String[] args) {// 计算时间差// LocalDate获取对象其中的一个方法LocalDate d1 LocalD…...

使用 FAISS 进行高效相似性搜索:从文本检索到动态数据处理

在现代数据科学和人工智能应用中,处理大量高维数据并从中找到相似项是一个常见任务。无论是在推荐系统、搜索引擎,还是在自然语言处理应用中,如何高效地进行相似性搜索(Similarity Search)一直是一个挑战。为了解决这个…...

执行“go mod tidy”遇到“misbehavior”错误

执行“go mod tidy”报错下错误,执行“go clean -modcache”和删除“go env GOMODCACHE”指定目录均无效: SECURITY ERROR go.sum database server misbehavior detected!old database:go.sum database tree3397826xyyhzdyAOat5li/EXx/MK1gONQf3LAGqArh…...

深入详解人工智能机器学习:强化学习

目录 强化学习概述 强化学习的基本概念 定义 关键组件 强化学习过程 常用算法 应用示例 示例代码 代码解释 应用场景 强化学习核心概念和底层原理 核心概念 底层原理 总结 强化学习概述 强化学习(Reinforcement Learning, RL)是机器学习中的…...

力扣打卡11:合并区间(比较器内联,引用传参的优化)

链接&#xff1a;56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 这道题可以用贪心。 首先将intervals的left&#xff08;intervals[i][0]&#xff09;排序。 然后拿出第一个区间&#xff0c;比较后面相邻的区间&#xff1a; 当前right<后left&#xff0c;表示下一…...

【建筑学研究降维打击】:为什么顶尖事务所已禁用传统文献管理?NotebookLM智能溯源+跨语言规范比对实战拆解

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM建筑学研究辅助的范式革命 NotebookLM 作为 Google 推出的基于用户自有文档的 AI 助手&#xff0c;正悄然重塑建筑学研究的方法论边界。它不再依赖通用知识库的泛化回答&#xff0c;而是以建…...

AI图像生成预设库:开源项目kaushalrao/ai-editor-presets使用指南

1. 项目概述&#xff1a;AI驱动的编辑预设库如果你和我一样&#xff0c;经常在各类AI图像生成工具里“炼丹”&#xff0c;那你一定对“预设”&#xff08;Presets&#xff09;这个概念不陌生。简单来说&#xff0c;预设就是一套预先配置好的参数组合&#xff0c;它能让你一键复…...

从零解析ST电机库FOC:核心算法与工程实现

1. FOC技术基础&#xff1a;从三相电流到旋转磁场 我第一次接触FOC&#xff08;Field Oriented Control&#xff09;时&#xff0c;被那些复杂的数学公式搞得头晕目眩。直到有一天&#xff0c;我把无刷电机想象成小时候玩的磁铁小车&#xff0c;突然就明白了其中的奥妙。FOC本质…...

spoof 与网络安全:如何利用 MAC 地址伪造增强企业安全防护

spoof 与网络安全&#xff1a;如何利用 MAC 地址伪造增强企业安全防护 【免费下载链接】spoof Easily spoof your MAC address in macOS, Windows, & Linux! 项目地址: https://gitcode.com/gh_mirrors/sp/spoof 在当今数字化时代&#xff0c;网络安全已成为企业运营…...

java微服务驱动的社区平台:友猫社区的功能模块与实现逻辑

一、项目概述 友猫社区平台是由宠友信息技术有限公司研发的一体化社区生态系统&#xff0c;结合了内容分享、即时通讯、社交关系链与商城电商等功能。平台采用前后端分离架构&#xff0c;以高可扩展性、灵活配置与多端兼容性为设计核心&#xff0c;能够适应不同类型的企业及创…...

基于AI宏观流动性监测框架的黄金三日连跌研究:美联储加息预期按兵不动后的市场重定价逻辑

摘要&#xff1a;本文通过AI宏观利率模型、美元流动性监测系统与黄金波动率因子分析&#xff0c;结合美通胀数据、美债收益率变化及市场利率预期重定价过程&#xff0c;分析黄金连续三日回落背后的核心驱动逻辑&#xff0c;并探讨当前“高利率持续”环境下黄金资产的阶段性压力…...

英矽智能对标宁德时代,AI 制药规模化复制难题待解!

AI 制药巨头“朋友圈”扩大AI 制药巨头的“朋友圈”越来越大了。“港股 AI 制药一哥”英矽智能日前宣布与谷歌云达成战略合作&#xff0c;要把 Gemini 大模型塞进自家 Pharma.AI 平台。这意味着英矽智能已不再满足于做一家“卖算法的”公司&#xff0c;而是要把自己变成药物发现…...

从压测到瓶颈定位:一次完整的性能分析思路

很多人刚接触压测时&#xff0c;会产生一种错觉&#xff1a;“压测不就是看 QPS 吗&#xff1f;”但压测的本质&#xff0c;从来不是“跑数字”&#xff0c;而是&#xff1a;找到系统的性能极限&#xff0c;以及限制系统性能的真正瓶颈。 本文会围绕下面几个核心问题&#xff0…...

深度解析开源专杀工具openclaw-killer:从恶意软件持久化机制到实战清理

1. 项目概述&#xff1a;一个开源安全工具的诞生最近在安全圈和开源社区里&#xff0c;一个名为nkzprod/openclaw-killer的项目引起了我的注意。乍一看这个标题&#xff0c;你可能会觉得有点“中二”&#xff0c;又是“爪子”又是“杀手”的&#xff0c;但作为一名在安全领域摸…...

别再被VS2019的CMake报错劝退!从‘RC命令失败’看Windows C++开发环境那些坑

破解Windows C开发环境迷局&#xff1a;从CMake报错到系统级解决方案 当你在Visual Studio 2019中满怀期待地点击"生成解决方案"&#xff0c;却看到控制台突然弹出"RC命令失败"的红色错误时&#xff0c;那种挫败感每个C开发者都深有体会。这不仅仅是一个简…...