GVH 更新记录
本文记录 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也会转发这些信息。自动解析命令输出的脚本需要考虑这些新增行。