【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(状态变量条目…...
使用Kimi开发自己的问答应用
概述 Kimi是大家常用的一个人工智能助手,本文使用Kimi开发文档,以node作为后端,开发与一个问答系统 实现效果 Kimi简介 Kimi是由Moonshot AI开发的人工智能助手,擅长中文和英文对话。目标是帮助用户解决问题、提供信息和执行任…...
Vue前端开发-路由其他配置
在路由文件中,除了跳转配置外,还可以进行路径重定向配置,如果没有找到对应的地址,还可以实现404的配置,同时,如果某个页面需要权限登录,还可以进行路由守卫配置,接下来,分…...
AI与遥感的融合:构建新一代智能监测作业平台
在测绘地理信息与遥感领域,人工智能(AI)技术的融合正推动着一场监测作业模式的革命。AI不仅提升了数据处理的效率,还极大地扩展了遥感技术的应用范围和深度。 遥感监测的智能化趋势 随着遥感数据量的激增,传统的人工…...
3D 视觉定位技术:汽车零部件制造的智能变革引擎
在汽车零部件制造领域,传统工艺正面临着前所未有的挑战。市场对于零部件精度与生产效率近乎苛刻的要求,促使企业寻求突破之道。而 3D 视觉定位技术,为汽车零部件制造开启了精准定位与智能化生产的新纪元。 3D 视觉定位系统的核心技术原理 3…...
git提交时出现merge branch main of xxx
git提交时出现merge branch main of xxx 原因: 1、同事commit了一个修改A,push到remote 2、我把这个修改直接pull了下来(pull是fetchmerge的操作,自动合并到本地workspace) 3、同事因为后续的commit有冲突,…...
重生之我在异世界学编程之C语言:深入结构体篇(上)
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文《1》 结构体的两种声明一、结构…...
到达率和服务率在python中实现
到达率和服务率在python中实现 概念理解 到达率(Arrival Rate):是指顾客(或任务、事件等)到达服务系统的平均速率,通常用单位时间内到达的数量来表示。例如,在一个客服中心,每小时平均有10个客户来电咨询,这里的每小时10个客户就是到达率。服务率(Service Rate):是…...
重视猫艾滋:宠物健康的隐秘挑战
猫艾滋,全称为猫获得性免疫缺陷综合征(Feline Acquired Immunodeficiency Syndrome),是由猫免疫缺陷病毒(FIV)感染引起的一种严重危害猫类健康的疾病。虽然其名称与人类艾滋病相似,但猫艾滋仅在…...
使用长轮询解决某些场景的实时消息推送需求
需求来源 最近做一个需求实现在移动端通过按钮,远程控制大屏幕上展示的资源进行实时切换,可以展示一个大屏页面,可以展示一段视频,也可以展示一张图片。 解决思路 大屏幕上打开一个游览器,访问指定动态资源展示页面…...
uniapp-内部项目使用文档
uniapp-内部项目使用文档 目录 uniapp-内部项目使用文档阶段1自行实现内容:阶段1问题记录: 阶段2自行实现内容: 阶段3 APP项目介绍及规范阶段4 公共组件方法UseList 列表页面HooksListItem 列表项uni-load-more 列表加载更多组件CardTitle 列…...
linux搭建NFS服务和autofs自动挂载NFS
文章目录 1、nfs服务1、nfs原理2、RPC和NFS通讯原理3、RPC和NFS流程4、NFS工作流程5、服务端搭建6、客户端搭建7、autofs自动挂载 1、nfs服务 1、nfs原理 是一个NAS的存储,通过网络来进行文件的共享,表现出来的形式就是一个文件夹 可以支持多个linux挂…...
springboot415社区网格化管理平台的构建-(论文+源码)_kaic
摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本社区网格化管理平台就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据…...
ubuntu下open-webui + ollama本地大模型部署
文章目录 nvidia gpu驱动安装 安装卸载 ollama 部署 添加docker秘钥docker配置添加国内镜像源ollama安装 从源拉取ollama镜像。启动一个ollama容器 通过ollama下载模型到本地检验本地模型 open-webui 部署 安装容器和镜像下载webui使用查看模型运行时内存、cpu、gpu占用 业余…...
自动化运维-配置Mysql、emqx、redis、nginx等通用性Linux日志分割工具 - logrotate
前言:logrotate 是一个在 Linux 系统中用于管理和轮转日志文件的工具。它的主要目的是帮助系统管理员自动执行日志文件的轮转、压缩、删除和邮件通知等任务,以防止日志文件占用过多的磁盘空间,同时保持日志文件的可管理性。 参考命令&#x…...
71、docker镜像制作上传/下载到阿里云
基本思想:简单学习一下如何制作镜像和上传下载到私有阿里云,然后构建一个gpu的训练/推理环境,以备后续使用 一、配置环境 ubuntu@ubuntu:~$ sudo apt-get install docker.ioubuntu@ubuntu:~$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS P…...
力扣--LCR 178.训练计划VI
题目 教学过程中,教练示范一次,学员跟做三次。该过程被混乱剪辑后,记录于数组 actions,其中 actions[i] 表示做出该动作的人员编号。请返回教练的编号。 示例 1: 输入:actions [5, 7, 5, 5] 输出&#…...
独孤思维:又有一个副业项目降价了
不要过早量出底牌,不然会变得低贱且廉价。 昨天在一个群里,看到有个博主,没有成交订单。 她把和用户的聊天对话发出来,我们大致看了下。 发现人家是有意向付费的。 但是这个博主过于心急,说今天加入可以优惠&#…...
【笔记】分布式任务调度平台XXL-JOB
这篇笔记主要记录以下内容: (1)第一次启动xxl-job的过程 (2)模块、文件、数据库(表和字段)的作用 (3)极少的源码解读(XxlJobConfig) 有点像实…...
Java基础总结上(Ref:JavaGuide)
基础概念与常识 Java语言有哪些特点,优点? 简单易学,是一门面向对象的语言,有封装继承多态三大特性,而且有多重防护机制保证安全性,例如权限修饰符,限制程序直接访问操作系统资源。通过JIT编译…...
嘉誉府5区共有产权看房记
特地工作日来看下嘉誉府5区的网红共有产权的房子,主要是冲着均价2.1万/平才来看。说实话从塘尾地铁步行到嘉誉府5区还挺需要时间的哈。可能以后需要电驴代步到地铁?确实楼盘现在是现楼,今年买明年住。鸿荣源确实很666哈。 今天来不需要排队&a…...
PostgreSQL函数中使用now()或current_timestamp的异同
在PostgreSQL函数中使用now()或current_timestamp可以获取当前的日期和时间。 now()函数返回当前的日期和时间,包括时区信息。它可以用于记录操作的时间戳或在查询中进行时间比较。 current_timestamp函数也返回当前的日期和时间,但不包括时区信息。它…...
跟李笑来学美式俚语(Most Common American Idioms): Part 56
Most Common American Idioms: Part 56 前言 本文是学习李笑来的Most Common American Idioms这本书的学习笔记,自用。 Github仓库链接:https://github.com/xiaolai/most-common-american-idioms 使用方法: 直接下载下来(或者clone到本地…...
类和对象一
目录 1.类的引入 2.类的定义 3.访问限定符 4.类的作用域 5.类对象模型 6.类的大小 1.类的引入 C语言结构体中只能定义变量,在C中,结构体不仅可以定义变量,也可以定义函数。 C兼容C语言,结构用法可以继续使用 同时sruct也升…...
两个数的和最小
两个数的和最小 C 代码C 代码Java 代码Python 代码 💐The Begin💐点点关注,收藏不迷路💐 给你n个整数,你可以从中任意取两个数a和b,问a加上b的和的绝对值最小可能是多少? 输入 有多组测试数据…...
Mac mini m4本地跑大模型(ollama + llama + ComfyUI + Stable Diffusion | flux)
安装chat大模型(不推荐,本地运行的大模型只能聊废话,不如网页版使用openAI等高效) 首先下载ollama的安装包 https://ollama.com/ 点击启动访问:http://localhost:11434 Ollama is running 代表已经运行起来了&#x…...
IoTDB AINode 报错,call inference 301: Error ocurred while executing inference
问题及现象 使用时序数据库 IoTDB 的 AINode 的 call inference 语句后报错: Msg: org.apache.iotdb.jdbc.IoTDBSOLException:301: Error ocurred while executing inference:[tuple object has no attribute inference]解决方法 可以替换 venv 里面的…...
Linux网络 UDP socket
背景知识 我们知道, IP 地址用来标识互联网中唯一的一台主机, port 用来标识该主机上唯一的一个网络进程,IPPort 就能表示互联网中唯一的一个进程。所以通信的时候,本质是两个互联网进程代表人来进行通信,{srcIp&…...
Day2——需求分析与设计
教师端签到应用软件的需求分析; 产品经理如何写好产品需求文档(附模板) 需求分析是软件开发过程中的关键步骤,它确保了开发的软件能够满足用户的需求。以下是进行需求分析的具体步骤: 1. 确定分析目标 明确教师端签到…...
aosp15上winscope离线html如何使用?
背景: aosp15上的如何使用Winscope前面已经有分享过相关的blog,这块其实和aosp14没啥大的差别,具体可以看如下2个文章: 手把手教你aosp14编译Winscope 安卓aosp15手机上如何离线获取winscope文件 文章中也说明在aosp15如果直接使…...
AttributeError: module numpy has no attribute int .报错解决
AttributeError: module numpy has no attribute int .报错解决方案_attributeerror: module numpy has no attribute i-CSDN博客 以上为参考教程,试了卸载再安装,不行,报错: Found existing installation: numpy 1.24.3 error: …...
python爬虫常用数据保存模板(Excel、CSV、mysql)——scrapy中常用数据提取方法(CSS、XPATH、正则)(23)
文章目录 1、常用数据保存模板2.1 保存为Excel格式2.2 保存为CSV格式2.3 保存至mysql数据库2、scrapy中常用数据提取方法2.1 XPath选择器2.2 CSS选择器2.3 正则表达式1、常用数据保存模板 2.1 保存为Excel格式 # 1、导入模块 from openpyxl import workbook# 2、创建一个exce…...
【面试题】简述rabbitmq的组织架构
[面试题]简述rabbitmq的组织架构 RabbitMQ 是一种流行的消息中间件,其架构设计围绕消息生产者, 消息消费者和消息中转(Broker)展开。以下是 RabbitMQ 的主要组织架构组件和它们之间的关系: 1. 核心组件 1.1 Producer࿰…...
C#-WPF 常见类型转换方法(持续更新)
目录 一、普通类型转换 1、Convert类 2、Parse(转String) 3、TryParse(转String) 4、ToString(转String) 5、int转double 6、String转DateTime 7、自定义类型的显示/隐式转换 二、byte[]转ImageSource 方法一 方法二 一、普通类型转换 1、Convert类 提供了一种安全…...
c基础加堆练习题
1】思维导图: 2】在堆区空间连续申请5个int类型大小空间,用来存放从终端输入的5个学生成绩,然后显示5个学生成绩,再将学生成绩升序排序,排序后,再次显示学生成绩。显示和排序分别用函数完成 要求ÿ…...
做了一份前端面试复习计划,保熟~
前言 以前我看到面试贴就直接刷掉的,从不会多看一眼,直到去年 9 月份我开始准备面试时,才发现很多面试经验贴特别有用,看这些帖子(我不敢称之为文章,怕被杠)的过程中对我的复习思维形成影响很大…...
虚幻引擎开发命名规则
UE的命名规则如下: 模版类以T作为前缀,例如TArray, TMap, TSet。UObject派生类都以U前缀。AActor派生类都以A前缀。SWidget派生类都以S前缀。全局对象使用G开头,如GEngine。抽象接口以I前缀。枚举以E开头。bool变量以b前缀,如bPe…...
【蓝桥杯每日一题】砍竹子
砍竹子 2024-12-7 蓝桥杯每日一题 砍竹子 STL 贪心 题目大意 这天, 小明在砍竹子, 他面前有 nn 棵竹子排成一排, 一开始第 ii 棵竹子的 高度为 h i h_i hi. 他觉得一棵一棵砍太慢了, 决定使用魔法来砍竹子。魔法可以对连续的一 段相同高度的竹子使用, 假设这一段竹子的高度为…...
Lambda表达式随记
学习链接 目录 作用定义[capture list] 捕获列表(paramter) 参数列表mutable 可变规格throw() 异常说明-> return-type 返回类型{function statement} lambda函数体 Lambda表达式的优缺点Lambda表达式工作原理适用场景STL算法库短小不需要复用函数场景 作用 Lambda表达式&…...
Vulhub:Log4j[漏洞复现]
CVE-2017-5645(Log4j反序列化) 启动靶场环境 docker-compose up -d 靶机IPV4地址 ifconfig | grep eth0 -A 5 ┌──(root㉿kali)-[/home/kali/Desktop/temp] └─# ifconfig | grep eth0 -A 5 eth0: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 in…...
ubuntu系统生成SSL证书配置https
自签名【Lets Encrypt】的测试证书,有效期三个月。 第一步:安装acme,如果没有安装git,需要提前安装 下载came资源 git clone https://github.com/Neilpang/acme.sh.git 无法访问,可以试用gitee的资源,安…...
记录 idea 启动 tomcat 控制台输出乱码问题解决
文章目录 问题现象解决排查过程1. **检查 idea 编码设置**2. **检查 tomcat 配置**3.检查 idea 配置文件4.在 Help 菜单栏中,修改Custom VM Options完成后保存,并重启 idea 问题现象 运行 tomcat 后,控制台输出乱码 解决排查过程 1. 检查 id…...
C++ unordered_map和unordered_set的使用
1.unordered_set系列的使用 1.1unordered_set和unordered_multiset参考文档 unordered_set和unordered_multiset参考文档 1.2unordered_set类的介绍 • unordered_set的声明如下,Key就是unordered_set底层关键字的类型 • unordered_set默认要求Key⽀持转换为整…...
【探商宝】OpenAI 发布 Sora:视频生成领域的重大突破
2024 年 12 月 10 日,OpenAI 正式推出了备受瞩目的人工智能视频生成模型 Sora,这一举措在科技界引起了轩然大波,为视频创作领域带来了全新的可能性和变革. 一、Sora 的功能与特性 1. 强大的视频生成能力 Sora 能够根据用户输入的文本描述生…...
[代码随想录Day32打卡] 理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
理论基础 题型 动归基础(这一节就是基础题)背包问题打家劫舍股票问题子序列问题 动态规划五部曲 确定dp数组及其下标的含义确定递推公式dp数组如何初始化遍历顺序打印dp数组 509. 斐波那契数 简单~ dp数组及下标含义: dp[i]表示第i各斐…...
【实操GPT-SoVits】声音克隆模型图文版教程
项目github地址:https://github.com/RVC-Boss/GPT-SoVITS.git官方教程:https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/tkemqe8vzhadfpeu本文旨在迅速实操GPT-SoVits项目,不阐述技术原理(后期如果有时间研究&#…...
开发一套SDK 第一弹
自动安装依赖包 添加条件使能 #ex: filetypesh bash_ls 识别 达到预期,多个硬件环境 等待文件文件系统挂在完成 或者创建 /sys/class/ 属性文件灌入配置操作 AI 提供的 netlink 调试方法,也是目前主流调用方法,socket yyds #include <linux/module.h> #include <linux…...
2024149读书笔记|Hans的阿狸五部曲——成长的路上分离在所难免
2024149读书笔记|Hans的阿狸五部曲——成长的路上分离在所难免 1. 《阿狸和小小云》2. 《阿狸和小玉》3. 《阿狸呓语》4. [202480读书笔记|《阿狸和弯月亮》——生的再普通,也是限量版](https://blog.csdn.net/qq_40985985/article/details/139731131)5. 《阿狸永远…...
外包干了5天,技术明显退步。。。。。
先说一下自己的情况,本科生,19年通过校招进入南京某软件公司,干了接近3年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试&…...
Ubuntu22.04 安装Isaac Lab
目录 1.1 安装IsaacLab 1.1.1 下载文件 1.1.2 创建Isaac Sim符号链接 1.1.3 创建并激活conda环境 1.1.4 安装依赖 1.1.5 安装IsaacLab扩展 1.1.6 安装完成,要source一下 1.2 验证IsaacLab安装 1.1 安装IsaacLab 1.1.1 下载文件 将 Isaac Lab 仓库克隆到您的…...