GVH 更新记录

· 预计阅读 9 分钟

本文记录 GVH 的主要版本更新,重点说明功能变化、问题修复及其对实际解算的影响。各版本按从新到旧的顺序排列。下面的文件路径均以 GVH 目录为起点。

说明:本文所列更新由 DeepSeek 总结、ChatGPT 整理,属于非官方更新记录,并非 GVH 开发者 Leonid Petrov 博士发布的更新说明。对修改目的和实际影响的推测,会在文中单独说明。

最近记录版本:gvh-20260501
本文更新日期:2026-10-11

20260501

  • 对比版本:20231222。

本次主要修正 nuSolve 数据转换时补写字段的定义,并增加版本和安装信息查询命令,以及 vgosDb 格式转换脚本。

更新内容

  • 修复|nuSolve 转换时补写字段的定义:输入数据库不含 ERROR_K 时,程序会补写 RWDELVAL 和 RWRATVAL,分别保存各基线的时延和时延率附加加权参数。这一处理在 20231222 中已加入;本次明确将两个字段的类别设为实验级(SES),类型设为 8 字节实数(R8)。此前沿用了处理其他字段时留下的类别和类型,可能导致字段定义及记录长度错误。
    对应文件:gvh/gvh_from_nusolve.f。

  • 新增|版本和安装信息查询命令:新增 gvh_inq,通过 --version、--prefix、--bindir、--libdir 和 --root,分别查询编译时记录的版本号、安装根目录、可执行文件目录、库目录和源码根目录。配置阶段将安装根目录写入 include/gvh_local.i,构建和安装规则也相应更新。
    对应文件:gvh/gvh_inq.f、support/config.csh、include/gvh_local.i、gvh/Makefile、Makefile.in2。

  • 新增|vgosDb 格式转换脚本:新增 vdb_to_vda.py,用于将 vgosDb 归档文件转换为 VDA 文本文件。脚本先解包并查找 .wrp 文件,再调用 vgosDxConvertor db2da 执行转换;安装时将脚本复制到安装目录下的 bin 中。
    对应文件:scripts/vdb_to_vda.py、Makefile.in2。

使用提示

  • 如果旧版转换时输入数据库不含 ERROR_K,应检查输出中 RWDELVAL、RWRATVAL 的类别是否为 SES、类型是否为 R8。定义不符时,应使用新版重新转换;升级软件不会自动修正已有数据库。

  • 更新后应重新配置、编译并安装。源码包附带的 bin/gvh_inq 和 gvh/gvh_inq.o 仍带有 20231222 的旧版本信息。gvh/Makefile 的 clean 规则又遗漏了这两个文件,因此重新编译前应手工删除,或补全清理规则,确保安装的是重新编译的查询工具。

  • gvh_inq 的用法提示将程序名误写为 pima_inq,还列出了未实现的选项,实际支持的选项以上文五项为准。遇到未知参数时,程序只打印提示,没有设置非零退出码;在脚本中调用时,需要同时检查输出内容。

  • vdb_to_vda.py 需要 Python 3,以及能够从命令行调用的 vgosDxConvertor。脚本的文件后缀判断有误,会将未压缩的 .tar 和采用 bzip2 压缩的 .tar.bz2 也交给 tar -zxf,按 gzip 格式解压;使用这两类输入前应修正判断条件。第三个命令行参数实际接受整数,例如 1,不能按用法提示传入 -debug。

  • 转换成功且使用默认参数时,vdb_to_vda.py 会删除临时解包目录和固定的 /tmp/nuSolve 目录。如果其他 nuSolve 任务也在使用后一个目录,这一清理操作会影响它们。将第三个参数设为 1 可以保留这些目录,并输出调试信息。

20231222

  • 对比版本:20201103。

这两份本地源码的累计变化主要涉及数据库参数设置、数据库管理、格式转换,以及数据读写中的检查和内存管理。

本节沿用源码包的 20231222 标识。包内 configure 已将 TLE 最低版本设为 20250215,因此不能将以下全部变化都视为 2023 年 12 月 22 日发布的内容。

更新内容

  • 新增|数据库参数设置工具:新增 gvf_set_par,从外部文件读取需要排除的基线、测站钟跳时刻,以及需要估计坐标的射电源,将相应设置写入数据库。设置基线选择和源坐标估计标志时,也处理 FUSED 数据类型对应的标志位。
    对应文件:gvh/gvf_set_par.f、include/gvf_db.i、gvh/Makefile、Makefile.in2。

  • 新增|数据库管理脚本:增加 copy_gvf.py、del_gvf.py 和 delver_gvf.py,分别用于复制数据库、删除数据库文件和删除数据库的最新版本。两个删除脚本默认只打印拟执行的命令,指定 execute 后才实际删除。另外增加了射电源和测站改名脚本。
    对应文件:scripts/copy_gvf.py、scripts/del_gvf.py、scripts/delver_gvf.py、scripts/sou_rename_gvf.csh、scripts/sta_rename_gvf.csh、Makefile.in2。

  • 新增|转换时指定数据库仓库:gvf_transform 增加第 4 个可选参数 repo,优先使用该参数指定的仓库;省略时读取环境变量 VCAT_REPO,该变量也未设置时使用默认仓库。gvf_export.py 和 gvf_import.py 同步增加仓库参数。独立编译的 gvf_transform 在 VCAT_CONF 和 PSOLVE_SAVE_DIR 均未设置时,会尝试通过 solve_inq --save 查找配置文件所在目录。
    对应文件:gvh/gvf_transform.f、scripts/gvf_export.py、scripts/gvf_import.py、doc/gvf_transform.txt。

  • 调整|最新数据库版本的查找:除原有的 10 字符实验标识外,完整名称中的 _v000.env 现在也表示查找最新版本,例如 20230101_a_v000.env。不带 .env 的 15 字符形式,如 20230101_a_v000,仍不按这一规则处理。
    对应文件:vcat/vcat_resolve_dbname.f。

  • 新增|缺少附加加权参数时补写零值:转换 nuSolve 数据时,如果输入数据库不含 ERROR_K,程序会补写 RWDELVAL 和 RWRATVAL,将各基线的时延和时延率附加加权参数置零。本版新增分支中的字段类别和类型设置仍有问题,详见下方使用提示;这一问题在 20260501 中修正。
    对应文件:gvh/gvh_from_nusolve.f。

  • 修复|nuSolve 转换中的部分数组下标和维数问题:写入基线附加加权参数前,增加 IP > 0 判断,基线下标为零或负数时跳过写入。建立 NUM_SAM2 的字段定义时,如果第二波段通道数为零,将用于该定义的通道数改为 1,避免因维数为零而报错。
    对应文件:gvh/gvh_from_nusolve.f。

  • 调整|数据类型、记录数和目录表容量检查:GVH_PREPUT 增加数据类型码范围检查,并在测站类数据的记录总数为零时报错;GVH_READ_AGV 在文本记录数超过上限时停止读取。GVH_PTOC 增加数据目录表(TOC)的缓冲区容量检查;GVH_READ_BGV 读取 BGV 文件时,除 20050114 旧格式外,均按目录表允许的最大条目数分配空间。
    对应文件:gvh/gvh_preput.f、gvh/gvh_read_agv.f、gvh/gvh_ptoc.f、gvh/gvh_read_bgv.f。

  • 调整|数据库文件写出:写 BGV 文件时,先将前导信息和文本内容复制到新缓冲区,再释放原缓冲区。gvf_transform 写出新的 .env 文件时,先写入同目录下文件名带有进程号的临时文件,再将其重命名为目标文件。
    对应文件:gvh/gvh_write_bgv.f、gvh/gvf_transform.f。

  • 调整|数据库检查与修复工具:gvf_repair_db 增加对钟跳数量及其日期、时刻字段的检查,常规检查输出增加钟跳检查状态 CLBR_STATUS。补写 DB_VERS 的处理扩展到第 1 数据段;实验代号、观测数等字段也改为按空格分隔后读取,减少对固定列位置的依赖。
    对应文件:gvh/gvf_repair_db.f。

  • 调整|LCODE 列表:增加 CBLS_SET 和 N_PHAMB 两项,列表长度由 286 增至 288。CBLS_SET 用于保存不同来源的电缆时延改正;N_PHAMB 为相位时延模糊度计数,被标为忽略项,在 nuSolve 转换时跳过。
    对应文件:include/gvf_db.i。

  • 修复|Python 版本判断:相关脚本改用 sys.version_info 提供的版本号进行判断,避免将 Python 3.10、3.11 等版本截成 3.1,误判为低于 Python 3.2。
    对应文件:scripts/gvf_export.py、scripts/gvf_import.py、scripts/check_gvh.py、scripts/gvf_fix_exp_code.py。

  • 调整|安装依赖与文件权限:增加 TLE 库检查和 --with-tle 配置选项,在配置阶段编译、链接并运行测试程序。所比较源码中的 TLE 最低版本为 20250215。构建规则中的 umask 改为 0002,安装阶段也增加了对 umask 的检查。
    对应文件:configure、support/config.csh、support/check_tle_version.csh、support/check_tle_version.f、support/check_tle_version.mak、gvh/Makefile、vcat/Makefile、Makefile.in2。

使用提示

  • 本版在缺少 ERROR_K 时补写 RWDELVAL、RWRATVAL,但仍沿用前面查询其他字段时留下的 CLASS 和 TYP。若继续使用本版,应在建立这两个字段的定义前明确设置 CLASS = GVH__SES、TYP = GVH__R8,否则可能写入错误的字段定义。20260501 已包含这一修正。

  • gvf_set_par 会直接改写数据库的 sl1 文件,不增加版本号,使用前应备份原文件。三个外部输入文件均按固定列读取,准备文件时需遵守相应格式;用法提示中的程序名误写为 gvf_put_brk_des。

  • del_gvf.py 和 delver_gvf.py 固定操作 OBS 仓库;这两个脚本与 copy_gvf.py 在自动查找版本时,都只检查 v001 至 v008。数据库存在更高版本时,不能据此判断最新版本。两个改名脚本仍有可选参数读取等问题,sou_rename_gvf.csh 还存在目录变量赋值错误和写死的仓库路径,使用前需要修正。

  • 使用 gvf_import.py 导入未压缩的 VDA 文件时,相对路径 20230101_a.vda 会被拼成 /20230101_a.vda。应修正这一分支的路径拼接,或暂时使用绝对路径。

  • gvf_transform 写出 .env 文件时,将 RENAME 的返回值存入 IS,随后却检查 IER,可能漏报重命名失败。应改为检查 IS,并确认目标文件已经生成。

  • gvf_repair_db 在第 1 数据段补写 DB_VERS 时,没有同步增加 DATA.1 的记录数;重写 TOCS.1 的记录数时,还会误保留原数字的首位,导致记录数与实际内容不符。这部分应修正后再用于修复文件。另外,CLBR_FIX 只是将 DATA.1 中的 NUM_CLBR 置零,不会恢复缺失的钟跳时刻,也没有处理 DATA.4 中的 NUM_CLBR。

  • 导出为 VDA 时,gvf_transform 会打印所用 .env 文件和逐个读取的 BGV 文件路径,gvf_export.py 也会转发这些信息。自动解析命令输出的脚本需要考虑这些新增行。