跳转到内容

HydroGeoSphere/通用指南

来自维基教科书,开放世界中的开放书籍

在详细介绍数值模拟所需的输入数据之前,首先给出一些关于输入数据格式和性质的通用信息。

输入/输出过程

[编辑 | 编辑源代码]

解决给定问题涉及两个步骤。首先,为预处理器(称为grok [1])准备一个数据文件,然后运行该文件以生成HydroGeoSphere的输入数据文件。其次,运行HydroGeoSphere以解决问题并生成输出数据文件。

grok输入文件名由最多 40 个字符的有意义的前缀组成,后面追加扩展名.grok该前缀将确定输入和输出文件名。grok列表文件名将是问题前缀,后面追加字母o和文件扩展名.eco例如,如果用户指定的问题前缀是test,则用户创建的通用输入文件将为test.grok预处理器生成的输出列表或回显文件将为testo.eco. 一些模拟将需要多个输入文件(例如,从文件中读取初始水头),并将生成多个输出文件。一般来说,特定模拟中所需的所有输入文件将具有问题前缀加上给定扩展名作为文件名,而所有生成的输出文件将具有问题前缀、字母o,加上给定扩展名作为文件名。

在整个手册中,我们将采用使用斜体表示问题相关、用户定义的文件名部分(例如,前缀、物质名称等),以及打字机字体表示HydroGeoSphere生成的固定部分。例如,在文件名prefixo.conc.species.001中,prefixspecies部分将是用户定义的前缀和溶质或物质的名称,而o.conc..001部分将由HydroGeoSphere自动生成。

预处理器

[编辑 | 编辑源代码]

预处理器开始执行后,它会提示用户从键盘交互式输入问题前缀。对于重复使用相同输入文件的案例,您可以创建一个名为batch.pfx的文件,该文件包含一行,其中包含问题前缀。如果该文件存在,则前缀将自动从该文件中读取,并且不会提示您从键盘输入。该文件应放置在与prefix.grok文件相同的目录中。

简而言之,预处理器按以下顺序执行其任务

  1. 读取并分配默认数组大小
  2. 读取问题识别信息
  3. 读取生成网格的指令
  4. 如有必要,执行网格修改
  5. 为所有参数生成默认属性
  6. 读取可选指令以修改默认参数
  7. 写入HydroGeoSphere兼容数据文件

任务36由用户在prefix.grok文件中发出的指令指导。任务5生成一组完整的默认数据,这往往可以最大限度地减少用户必须提供的数据量。

以下是一个示例指令和一些输入数据,说明了将在整个手册中使用的某些通用约定

示例指令文本

[编辑 | 编辑源代码]
  1. xl, nbx 域长度和x方向上的块数
  2. xi(i),i=1,nx nx个节点的x坐标。
  3. inode...end 节点编号。
• • •

每个预处理器指令都写为它自身部分的标题,以便更容易地在包含目录表的页面中找到它。出现在文本其他位置的指令将使用较大的无衬线字体书写。必须在prefix.grok文件中完全按照显示的方式键入指令,区别在于它不区分大小写,指令之前和之后的空格是可选的。注意,指令中任何两个词之间只能有一个空格。

如果指令需要输入数据,则会有一系列编号行,每行包含粗体的变量名和对要读取内容的描述。每行编号对应一个或多个FORTRAN读取语句。

通常,数据文件中所需项目的数量由行中存在的粗体变量名数量决定。默认的FORTRAN变量命名约定有效。这意味着以字母 I--N(包括)开头的变量需要整数值,而所有其他变量都需要实数值,除非字符串或逻辑变量的情况另有说明。数值以自由格式读取,因此整数和实数不需要按列对齐,并且可以用空格或逗号隔开。可以在读取完行中最后一个数据值后添加内联描述性注释,但在读取字符字符串时应避免注释(例如,文件名)。

在这个示例中,需要 3 个输入项。第一个项目xl, nbx要求用户在紧跟指令之后的第一个非空白或非注释行中输入一个实数值(即域长度)和一个整数值(即块数)。

第二个项目xi(i),i=1,nxnx个实数值读取到数组xi中。nx的大小取决于问题(例如,x中的节点数、物质数等),由用户提供足够的值来满足读取语句。这些值可以输入在一行上,也可以按需要分散在多行上。如果它们输入在一行上,则应以空格或逗号隔开。

最后,第三个项目inode...end表示要读取的节点编号列表(在本例中),直到遇到结束卡。列表值必须每行输入一个。

与特定指令相关的文档结尾由 3 个点表示

• • •

因此,对于此示例指令,假设nx等于 5,则prefix.grok文件中的以下语句将满足输入要求

Example instruction text
10.0   100
0.0   2.0   4.0   6.0   8.0   10.0
1
2
3
5
6
end


某些指令由具有自身输入指令子集的输入例程控制,其中一些或所有指令可能是可选的。例如,指令Solute用于定义新的溶质,其最简单的形式为

Solute
end


在这种情况下,End指令紧跟在Solute指令之后,并且没有发出可选指令。该End语句是必需的,以便grok知道何时退出溶质定义例程。此类指令将使用以下约定表示

示例指令文本...结束

[编辑 | 编辑源代码]
• • •

其中文本...结束表示指令(例如Solute)后面将跟随可选指令或输入,并以End指令终止。

grok处理prefix.grok或材料属性文件(参见第 5.8.1.6 节)中包含的指令之前,它首先创建一个工作副本,在该副本中,任何完全空白的行或以感叹号 (!) 开头的行都会被删除,并且任何包含文件的内容都会被复制。这允许您在需要时包含空白行和注释,以提高输入的可读性和清晰度。

包含文件可用于避免必须剪切和粘贴或注释和取消注释大量的输入指令。长的列表(例如,节点编号或边界条件数据)以及尝试使用各种不同网格生成方法的案例是应用包含功能的良好候选者。例如,如果我们想使用包含来向上面给出的示例提供数据,我们可以在prefix.grok:

Example instruction text
10.0   100
0.0   2.0   4.0   6.0   8.0   10.0
include my.node_list


中使用以下指令my.node_list文件可能包含,例如

1
2
3
5
6
end


如果您现在想替换另一个节点列表,您可以,例如,在文件my_other.node_list中提供不同的节点编号,然后只需更改包含指令中给出的文件名即可。

包含文件可以包含指令和输入组,或者只包含单个指令的输入片段。只允许包含指令的单个级别,因此包含文件本身不能包含包含指令。

错误消息

[编辑 | 编辑源代码]

grok读取和处理prefix.grok文件的副本时,它还会创建prefixo.eco文件。HydroGeoSphere数据生成过程的结果将写入该文件,因此,如果预处理器报告了任何问题,您应首先检查该文件以确定其性质以及如何解决它们。如果在读取输入数据时发生错误,则grok将停止执行并发出错误消息(到屏幕和prefixo.eco文件),形式为

INSTRUCTION: 500
**************************************
*** INPUT ERROR, HALTING EXECUTION ***
**************************************
GRID GENERATION: Unrecognized instruction
Press any key to continue


在这种情况下,最后一个指令(即500)由于某种原因导致了错误。您现在应该检查输入文件以进一步调查问题的根源,从prefix.grok和材料属性文件开始。

参考文献

[编辑 | 编辑源代码]
  1. grok /grok/, var. /grohk/ vt. [来自罗伯特·A·海因莱因的小说“陌生人在一个陌生的土地”,其中它是一个火星语,字面意思是“喝”,比喻意思是“与……融为一体”] 强调形式是“grok in fullness”。1. 理解,通常在全球意义上。暗示着亲密和详尽的知识。对比禅,它类似于一种短暂的超凡理解。另请参见 glark。2. 用于程序,可能仅仅意味着足够的理解。 “几乎所有 C 编译器现在都理解空类型。”
华夏公益教科书