GAMIT 批处理基线解算

前文已经介绍过使用 GAMIT 程序分步基线解算的过程。本文将介绍 GAMIT 批处理基线解算的流程。

首先说明,分步和批处理两种方式只是操作上的不同。如果使用的观测数据、解算配置等其他条件一致,两种方式的解算结果也是相同的。但相比分步操作,批处理方式确实可是大大节省操作时间,而且因为不必重复输入相同参数,出错概率也可以相应降低。

GAMIT 批处理基线解算的功能主要依赖于 sh_gamit 脚本命令,该脚本使用 C Shell 语言编写。如果你有兴趣深入研究其代码实现,它位于 GAMIT/GLOBK 安装目录的 com 文件夹内。

文件组织

前文中我曾提到 GAMIT 处理数据时的文件组织方式。在使用 GAMIT 进行批处理处理时,文件组织的方式是一致的:

1
2
3
4
5
6
· work/
|—— <doy>/
|—— brdc/
|—— igs/
|—— rinex/
|—— tables/

我们首先创建一个文件夹作为工作目录,工作目录命名可以是任意的(这里以 work 为例)。在工作目录下平行地创建上面的 5 个文件夹。其中年积日文件夹中存放数据处理结果和中间文件,brdc 文件夹存放广播星历文件,igs 文件夹存放精密星历文件,rinex 文件夹存放观测数据,tables 文件夹存放解算时所需的一些配置文件和解算需引入的共用表文件。

有些情况下,你可能还需要引入观测站点的气象观测数据,即 RINEX 格式的气象数据,这时你可以在工作目录下创建一个名为 met 的文件夹,然后将所有气象数据拷贝至其中。

在下文中,我将以处理 2016 年 8 月 17 日的几个 IGS 站点(BJFS,CHAN,DAEJ,SHAO,SUWN,WUHN)的观测数据作为示例。这一天是星期三,对应的年积日是 230,对应的 GPS 周是1910。我写这篇博文的日期是 2016 年 9 月 1 日,截至现在还没有对应日期的最终星历,所以只好使用快速星历。因此具体的文件结构是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
· work/
|—— 230/
|—— brdc/
|—— brdc2300.16n
|—— igs/
|—— igr19103.sp3
|—— rinex/
|—— bjfs2300.16o
|—— chan2300.16o
|—— daej2300.16o
|—— shao2300.16o
|—— suwn2300.16o
|—— wuhn2300.16o
|—— tables/

参数配置

表文件更新

在进行数据处理之前最好先检查一下,GAMIT 安装目录的 tables 目录里是否有对应观测数据日期的共用表文件。详细的共用表文件更新方法可以查看本站和 GAMIT/GLOBK 程序更新相关的博文。这里只列出需要检查的共用表文件:

1
2
3
soltab.2016.J2000    # 2016 年的太阳历表文件
luntab.2016.J2000 # 2016 年的月历表文件
nutabl.2016 # 2016 年的章动表文件

确认以上文件存在。然后分别检查文件 ut1.usno 和 pole.usno,这两个文件的第一行标注了文件的更新日期。要确保其更新日期在我们的数据观测日期之后。

链接表文件

确定我们所需的所有文件都齐备之后,在工作目录中使用 sh_setup 命令将所需的共用表文件和解算配置文件链接至工作目录的 tables 文件夹中。前文已经提到过 sh_setup 的使用方法:

1
$ sh_setup -yr <year> -doy <doy>

这里我们具体使用的命令为:

1
$ sh_setup -yr 2016 -doy 230

参数配置

前文介绍 GAMIT 分步基线解算的博文中,提到过两个解算过程的配置文件:sestbl.和 sittbl.,而 GAMIT 批处理基线解算的操作中,又多了两个配置文件:process.defaults 以及 sites.defaults。这些配置文件都已经被之前的命令拷贝到 tables 文件夹中了。我们依然只修改必要的配置,对于其他设置项,保存默认状态。

修改 sestbl. 文件,找到项目:

Use otl.list = Y &nbsp; &nbsp; &nbsp; &nbsp; ; Ocean tidal loading list file from OSO
Use otl.grid = N &nbsp; &nbsp; &nbsp; &nbsp; ; Ocean tidal loading grid file, GAMIT-format converted from OSO

这两项是 GAMIT 基线解算中所需的海潮改正模型文件的配置。如果你的文件中这两项的配置不是这样的,你可以直接修改文件成上面这样。

初始文件生成

在前面介绍 GAMIT 分步基线解算的博文中,我们制作了两个初始文件:station.info 和 lfile.。但在批处理操作时,程序可以自动生成 lfile.,所以只需要制作 station.info 文件就可以了。

因为这次我只处理 IGS 测站的观测数据,所以使用下载的 station.info 文件即可。

开始解算

现在开始进行数据处理。与分步操作方式不同的一点是,sh_gamit 命令并不是在年积日文件夹下运行的,而是在工作文件夹下运行。它的常用参数为:

1
$ sh_gamit -expt <expt> -d <year> <doys> -orbit <IGST>

其中,<expt> 代表解算项目名;<IGST> 代表解算时使用的精密星历类型,其值可以为:IGSF、IGFR、IGSU 等;<doys> 代表以列表形式列出的所有待处理数据的年积日。

如果你有大量观测日期上连续的数据需要处理,sh_gamit 还有指定数据观测的起止年积日方式:

1
$ sh_gamit -expt <expt> -s <year> <d1> <d2> -orbit <IGST>  # <d1> <d2> 分别为起止年积日

例如要处理 2016 年前 3 天的观测数据,你可以这样输入:

1
$ sh_gamit -expt demo -d 2016 001 002 003 -orbit IGSF  # IGSF 表示使用最终星历

也可以这样:

1
$ sh_gamit -expt demo -s 2016 001 003 -orbit IGSF

对于本文作为示例的处理任务,输入是这样的:

1
$ sh_gamit -expt work -d 2016 230 -orbit IGSR   # IGSR 表示使用快速星历

成果查看

与分步操作相同,解算完成之后,数据处理成果保存在 3 个文件中,即 O-文件,Q-文件和 H-文件,这些文件在年积日文件夹下。具体到本文的示例任务,它们是:oworka.230、qworka.230 以及 hworka.16230。

若解算出现问题,错误原因保存在 GAMIT.fatal 文件内,可以根据其中信息对解算操作进行调整。