PETOOLS 更新记录

· 预计阅读 20 分钟

本文记录 PETOOLS 的主要版本更新,重点说明功能变化、问题修复及其对编译、安装和调用程序的影响。各版本按从新到旧的顺序排列。下面的文件路径均以 PETOOLS 源码根目录为起点,其他软件包的路径另行注明。

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

最近记录版本:petools-20260707
本文更新日期:2026-11-08

20260707

  • 对比版本:20260516。

本次修正小矩阵乘法在非方阵输入下的列循环范围,新增对称矩阵缩放例程,并调整文件加锁时的错误处理。

更新内容

  • 修复|非方阵乘法的计算范围:MUL_MM_ST_I 在第一个矩阵为 2–7 阶时,原来使用输出矩阵的行数 M3 控制列循环,现在改用列数 N3。旧版在输出列数多于行数时会漏算末尾的列,列数少于行数时则会越界访问数组;方阵计算不受这处错误影响。
    对应文件:matvec/mul_mm_st_i.f。

  • 新增|对称矩阵缩放例程:新增 SCAL_MAT_S 和 UNSCAL_MAT_S,并加入 matvec 的编译列表。两者均处理按上三角压缩存储格式保存的对称矩阵。SCAL_MAT_S 取各对角元的平方根作为缩放因子,将矩阵元素除以相应的两个因子,使主对角元变为 1,并返回缩放向量;UNSCAL_MAT_S 则使用传入的缩放向量进行同样的除法。
    对应文件:matvec/scal_mat_s.f、matvec/makefile。

  • 调整|锁文件创建失败后的重试:SET_READ_LOCK 和 SET_WRITE_LOCK 在创建用于协调进程读写的锁文件时,若返回 EPERM,会从创建权限中去掉 S_ISGID(setgid)位后重试;若重试时文件已存在,则改为只读打开。旧版遇到 EPERM 会直接报错。系统常量查询程序也增加了对 EPERM 的支持。这项调整针对 EPERM,并未增加对 EACCES 的重试处理。
    对应文件:pet_util/set_read_lock.f、pet_util/set_write_lock.f、pet_util/get_system_constant.c。

  • 调整|加锁例程的错误码:配合新增的重试分支,部分错误码重新编号。SET_READ_LOCK 使用的错误码由 1111–1117 扩展为 1111–1120,SET_WRITE_LOCK 由 1011–1018 扩展为 1011–1021。例程的调用参数没有变化。
    对应文件:pet_util/set_read_lock.f、pet_util/set_write_lock.f。

  • 调整|B 样条参数说明:将多个例程注释中节点编号参数 KNOT 的类型从 REAL*8 改为 INTEGER*4,与实际声明一致,并补充节点的说明。此次只修改注释,没有改变计算方法或调用接口。
    对应文件:pet_util/bspl.f。

  • 新增|矩阵运算计时记录:增加 Xeon Platinum 8180 平台的 INVS 和 matvec 计时记录,并在已有的 Xeon 6144 记录中补充 500000 阶矩阵的 INVS 计时结果。这些是随包提供的测试记录,不代表本次修改提高了运算速度。
    对应文件:example/cpu_invs_intel8180_56cores.txt、example/matvec_timer_xeon_8180_56cores.txt、example/cpu_invs_intel6144_16cores.txt。

  • 移除|编辑器备份文件:删除 #mul_mm_ii_i.f# 和 cheb.f~,对应的正式源文件仍然保留。
    对应文件:matvec/#mul_mm_ii_i.f#、matvec/cheb.f~。

使用提示

  • 使用 MUL_MM_ST_I 处理上述非方阵组合的程序,应更新 PETOOLS 库;静态链接的程序还需要重新链接,才能使用修正后的代码。已核对的 pSolve 20261015 中,utils/har_pos/transform_harpos.f 和 utils/spl_pos/spl_to_uen.f 均按方阵调用,不受这处错误影响。

  • UNSCAL_MAT_S 可以用于将缩放矩阵的逆转换为原矩阵的逆。设原矩阵 $A$ 可逆,$D$ 为对角矩阵,其主对角元为 $A$ 对应主对角元的平方根,则缩放后有 $C=D^{-1}AD^{-1}$,从而 $A^{-1}=D^{-1}C^{-1}D^{-1}$。在这一流程中,应先对缩放矩阵求逆,再调用 UNSCAL_MAT_S;将两个例程直接连续调用,并不会恢复原矩阵。对应代码见 matvec/scal_mat_s.f。

  • 新增缩放例程对主对角元和矩阵规模有限制。SCAL_MAT_S 要求主对角元不小于 $1.2\times10^{-63}$、不大于 $10^{64}$,否则报错返回。两个例程用来遍历压缩存储数组的下标 ID 均为 INTEGER*4;矩阵阶数达到 65536 时,压缩存储的元素数已超过该类型的上限。处理这种规模的矩阵前,需要扩大下标变量的取值范围,并核对相关下标计算。对应代码见 matvec/scal_mat_s.f。

  • 加锁例程的新增重试分支有一处变量使用错误。pet_util/set_write_lock.f 在首次创建 I/O 锁文件返回 EPERM、再次创建返回 EEXIST 后,将只读打开的结果存入了 FD_READ_LOCK,应为 FD_IO_LOCK。即使文件成功打开,后者仍为负值,后续也无法正确加锁。已核对的 pSolve 20261015 和 VTD 20260812 中,相关数据读取程序在加锁失败时会报错返回。

  • 非 GNU 编译分支需要修正变量名。pet_util/set_read_lock.f 中的 MODE_FLAGS_NOIGSID、pet_util/set_write_lock.f 中的 MODE_FLAGS_NOSGID 都应与声明统一为 MODE_FLAGS_NOISGID。此外,set_read_lock.f 仍保留旧版已有的 .OR 缺少末尾句点的问题。采用包内 ifort 配置时会进入这些分支,应先修正;定义了 GNU 的分支不受这些拼写错误影响。

  • 如果调用程序或日志分析脚本按具体错误码判断加锁失败的原因,需要同步核对新的编号。在已核对的 pSolve 20261015 和 VTD 20260812 调用处,程序只判断返回值是否非零,不依赖这些具体编号。

20260516

  • 对比版本:20250622。

本次新增安装信息查询工具,将版本和路径配置集中到包含文件中,并扩充 DiaGI 调色板。其余改动主要涉及注释、计时记录和编辑器备份文件。

更新内容

  • 调整|版本和路径配置的生成方式:配置脚本不再重写 pet_util/petools_vers.f,改为根据 include/petools_local.templ 生成 include/petools_local.i,保存版本号、版本标签、安装根目录、源码根目录和文档目录。PETOOLS_VERS 从这个包含文件读取标签,调用参数不变;本版返回的标签为 petools 20260516。
    对应文件:configure、support/config.csh、include/petools_local.templ、include/petools_local.i、pet_util/petools_vers.f。

  • 新增|安装信息查询接口和命令行工具:新增子程序 PETOOLS_INQ(INQ, ANS) 和命令行程序 petools_inq,可查询版本号、版本标签及相关目录。构建规则增加包含文件搜索路径和查询程序目标,安装与卸载规则也加入了这个程序。查询工具的安装命令目前位于启用 PGPLOT 的条件分支中。
    对应文件:pet_util/petools_vers.f、pet_util/petools_inq.f、pet_util/makefile、Makefile.in2。

  • 新增与调整|DiaGI 调色板:DEFINE_PALETTE 增加 ITYP=9–14 六个可选编号,并加入新的 RGB 数据表。12–14 号将数据表的节点顺序反转,再交给 PGPLOT 生成颜色;其中 12 号还调整了 RGB 通道顺序。原有 1 号调色板的灰度赋值语句被删除,这处改动存在问题,见使用提示。
    对应文件:diagi/define_palette.f。

  • 新增|矩阵运算计时记录:增加 AMD 7995、96 核配置的 INVS 记录,以及 Xeon 6144、16 核配置的 INVS 和 matvec 记录。这些是随包提供的参考数据,不表示本次更新改变了矩阵算法或提高了运算速度。
    对应文件:example/cpu_invs_amd7995_96cores.txt、example/cpu_invs_intel6144_16cores.txt、example/matvec_timer_xeon_6144_16cores.txt。

  • 调整|日期转换例程的注释:修正英文拼写,并将一行已经被注释掉的调试语句从单个 ! 改为 !!。日期计算方法和允许的日期范围没有变化。
    对应文件:pet_util/jd_to_date.f。

  • 移除|编辑器备份文件:删除 pet_util/ 下 12 个自动保存或备份文件,以及 3 个 Emacs 锁文件。正式源文件仍然保留;新版另包含自动保存文件 testware/#matvec_test.csh#。
    对应文件:pet_util/ 下 #date_to_time.f#、#ebspl.f#、#ebspl_lsq_cns.f#、#get_cdate.f#、#list.f#、#lspline.f#、#multi_index.f#、#spl8.f#、ebspl.f~、ebspl_lsq_cns.f~、error.f~、get_file_from_dir.f~,以及 testware/#matvec_test.csh#。

使用提示

petools_inq 每次读取第一个命令行参数。查询选项及含义如下;省略 -- 也可使用。直接调用 PETOOLS_INQ 时,使用相同的查询字符串。

选项 返回内容
--version 版本号,本版为 20260516
--label 版本标签,本版为 petools 20260516
--prefix 配置时指定的安装根目录
--bindir 安装根目录下的 bin 目录
--root 配置时记录的 PETOOLS 源码根目录
--doc 上述源码根目录下的 doc 目录
  • 升级后应重新运行 configure 并重新编译。随包的 include/petools_local.i 带有打包机器的路径,例如 /opt64 和 /f1/progs/petools_20260516。查询工具返回的是配置时确定、编译进程序的值,移动安装目录不会自动更新这些路径。尤其是 --doc 返回源码根目录下的 doc,并非安装根目录下的 doc。对应代码见 support/config.csh 和 pet_util/petools_vers.f。

  • Makefile.in2 仅在 PETOOLS_PGPLOT=YES 时,将 bin/petools_inq 复制到安装目录。关闭绘图支持时,这条安装命令不会执行。如需同时安装查询工具,应将该复制命令移到 PGPLOT 条件分支之外。

  • 查询接口没有错误状态参数。遇到不支持的查询字符串时,PETOOLS_INQ 不修改 ANS;调用端应先初始化返回字符串或自行检查选项,避免误用上一次的结果。命令行程序在无参数时明确退出并返回 1,但遇到未知参数时只打印提示,没有显式设置非零退出状态。自动化脚本不能仅凭退出状态判断这次查询是否有效。对应代码见 pet_util/petools_vers.f、pet_util/petools_inq.f。

  • 1 号调色板原来逐个计算灰度值,新版将三条 RGB 赋值替换为 CONTINUE,后面却仍调用 PGSCR 设置颜色。该分支已无法按原公式生成灰度渐变,使用前应恢复相应赋值。对应代码见 diagi/define_palette.f。

  • 9 号调色板先调用 PGCTAB,使用 PL/PR/PG/PB 表的前 9 个节点,然后立即返回。后面的 ITYP=9 灰度分支实际上不会执行,因此不能把 9 号直接当作灰度调色板。对应代码见 diagi/define_palette.f。

  • 12 号和 14 号使用同一组 V 数据表,但通道对应关系不同:12 号按 R←VB、G←VR、B←VG 赋值,14 号按 R←VR、G←VG、B←VB 赋值。交换通道可以得到另一套配色,不能仅据此认定写错;源码也没有给这些新编号标注通用调色板名称,不宜自行命名。对应代码见 diagi/define_palette.f。

20250622

  • 对比版本:20210707。

这两份源码包之间的累计改动主要涉及配置与安装、矩阵和样条计算,以及 DiaGI 绘图。大部分文件删除是因为 PGPLOT 源码不再随包提供,绘图功能仍然保留。

更新内容

  • 调整|PGPLOT 的构建方式:不再随包提供完整的 pgplot/ 源码目录,改为提供 pgplot-01.patch 和补丁说明。配置时通过 --with-pgplot_tarball=... 指定 PGPLOT 源码压缩包,由配置脚本解压、应用补丁,再调用新的构建脚本编译。
    对应文件:configure、support/config.csh、support/make_pgplot522.csh、pgplot-01.patch、pgplot_mods.txt。

  • 调整|PNG 支持与链接设置:启用 PGPLOT 的 PNG 驱动,新增 libpng 的编译和链接检查,可通过 --with-png=... 指定其安装根目录。共享库链接命令补充配置中指定的 X11、BLAS 等依赖,并修正 CURSESE_LIB 的拼写。配置脚本还增加了供静态链接使用的变量。
    对应文件:configure、support/config.csh、support/check_png.csh、support/check_png.mak、support/pgplot522_driver.list、Makefile.in2。

  • 修复|C 编译器识别:查询 C 编译器厂商和版本时,改用 MK5_CC,修正原来误用 Fortran 编译器变量 MK5_FC 的问题。配置时还通过预处理宏指定选用的 BLAS 实现。
    对应文件:support/compile_var.csh、support/config.csh。

  • 调整|安装目录与生成文件:PGPLOT 字体和 RGB 颜色表改为安装到安装根目录下的 share/,DiaGI 帮助文件安装到 doc/。源码包不再携带已经生成的 include/matvec.i、include/diagi.i、include/diagi_local.i 和 include/solve_paths.i,这些文件仍由配置脚本根据模板生成。
    对应文件:Makefile.in2、support/config.csh、include/diagi_local.templ,以及上述四个被移出源码包的包含文件。

  • 新增|DiaGI 的 PNG 输出和更小的图形窗口:设备表由 11 项扩展为 15 项,增加 TINY 窗口和三种尺寸的 PNG 输出,并重新排列设备编号。PNG 输出会设置图像宽度和高度,多图窗口的设备编号也随之调整。
    对应文件:include/diagi.templ、diagi/diagi.f、diagi/diagi_met.f、diagi/diagi_prn.f、diagi/multi_diagi.f。

  • 新增|DiaGI 配色文件:可用环境变量 DIAGI_COLOR 指定配色文件;未设置时,读取安装目录中的 share/sgdass_color_default.txt。包内另提供 cividis 和灰度配色。DIAGI_CLS 增加错误状态参数 IUER,用于报告文件读取和解析错误。
    对应文件:diagi/diagi.f、include/diagi.templ、support/sgdass_color_default.txt、support/sgdass_color_cividis.txt、support/sgdass_color_grey.txt、Makefile.in2。

  • 修复|OpenMP 线程数的保存与恢复:矩阵乘法和多维 B 样条例程改用 OMP_GET_MAX_THREADS() 保存调用前的线程数设置。旧版使用的 OMP_GET_NUM_THREADS() 在串行部分返回 1,例程结束时用这个值恢复线程数设置,可能使后续并行计算只使用一个线程。
    对应文件:matvec/mul_mm_ii_s.f、matvec/mul_mm_is_i.f、matvec/mul_mm_it_s.f、matvec/mul_mm_si_i.f、matvec/mul_mm_ss_i.f、matvec/mul_mm_ss_s.f、matvec/mul_mm_st_i.f、matvec/mul_mm_ti_s.f、matvec/mul_mm_ts_i.f;pet_util/bspl4_2d.f、pet_util/bspl4_3d.f、pet_util/bspl4_4d.f、pet_util/bspl_2d.f、pet_util/bspl_3d.f、pet_util/bspl_4d.f。相关函数的语义见 OpenMP 说明。

  • 调整|矩阵元素下标类型:R8ELEM_ADD 和 R8ELEM_SUB 的两个下标参数由 INTEGER*4 改为 ADDRESS__TYPE,使其宽度与构建时采用的地址类型一致。调用端需要使用相同宽度的整数参数。
    对应文件:matvec/vec.f。

  • 调整|矩阵例程的调用与参数检查:DPPCO 不再按矩阵阶数选择 DPPCO_VEC 或 DPPCO_BLAS,统一调用 DPPCO_BLAS。MUL_MM_SS_S 则去掉了读取 IUER 前的 PRESENT 和地址可读性检查,现在直接依据其值是否为 -8 设置更新标志 FL_UPDATE。
    对应文件:matvec/dppco.f、matvec/mul_mm_ss_s.f。

  • 修复|三维、四维 B 样条求值的返回值和数组长度:在节点索引小于 1 的分支中,改为给函数返回值赋值 -1.E30,修正原来写入 VAL 的错误。四维版本的 INDS 和 DIMS 也由长度 3 改为长度 4,与实际访问一致;单精度和双精度版本均作了修改。
    对应文件:pet_util/bsple3_3d.f、pet_util/bsple3_3d_r4.f、pet_util/bsple3_4d.f、pet_util/bsple3_4d_r4.f。

  • 调整|B 样条右端点附近的求值位置:一维至四维系数计算例程在建立末端边界方程时,将末端节点值乘以 1-EPS 后求值,其中 EPS 从约 1e-6 改为 1e-15。求值位置因此更接近末端节点,求得的样条系数也可能改变。
    对应文件:pet_util/bspl_1d.f、pet_util/bspl_2d.f、pet_util/bspl_3d.f、pet_util/bspl_4d.f。

  • 新增|B 样条积分与矩计算:增加对 B 样条连续积分两次、三次的函数 BSPL_INT2、BSPL_INT3,一阶、二阶矩函数 BSPL_MOM1、BSPL_MOM2,以及可同时计算多个积分上限对应积分值的 MULTI_SPL_INT。对于 B 样条展开,还增加了 EBSPL_INT_R8、EBSPL_JNT_R8 和指定区间积分的 EBSPL_INT_RANGE_R8。
    对应文件:pet_util/bspl.f、pet_util/ebspl.f。

  • 调整|带约束的 B 样条拟合:EBSPL_LSQ_CNS 和 EBSPL_WLSQ_CNS 增加对数据点数和样条次数的检查,并判断数据点数是否满足拟合要求;首尾数据点也通过节点查找确定所在区间,端点查找失败时先尝试小幅调整求值位置,仍失败则报错。EBSPL_LSQ_CNS3_VEC 改为先把各分量的数据复制到连续存储的数组,再用于累加法方程。
    对应文件:pet_util/ebspl_lsq_cns.f、pet_util/ebspl_lsq_cns3_vec.f。

  • 新增|多项式和样条辅助计算:增加 CHMAP,将切比雪夫展开系数转换为按自变量幂次展开的多项式系数;增加 POLY_SOLVE_SIMPLE、POLY_SOLVE_VAND、POLY_SOLVE_NDD 三个多项式系数求解例程,以及计算三次样条三阶导数的 D3SPL8。
    对应文件:pet_util/che.f、pet_util/poly_solve_stable.f、pet_util/spl8.f、pet_util/makefile。

  • 新增|错误处理模式设置:增加 ERR_MODE 和 GET_ERR_MODE,并在 ERROR__COMMON 公共块中加入模式变量。该设置控制 ERR_PASS 的地址可读性检查,以及 ERR_LOG 在错误码为零时的地址可写性检查。初始化时采用 NO_PROBE;调用 ERR_MODE('PROBE') 可启用这些检查。文件头中“默认检查”的说明与初始化代码不一致。
    对应文件:pet_util/error.f。

  • 调整|高斯滤波的数据阈值:GAUSSIAN_FILTER 新增第六个参数 VAL_LIM,用于控制哪些输入值参与滤波。旧版固定要求输入值小于 80.0;新版使用传入的阈值,只有检测到参数地址不可读时才改用 1.0D307。判断条件仍是数值小于阈值,并非绝对值小于阈值。
    对应文件:pet_util/filters.f。

  • 调整|随机数的缩放系数:RGAUSS 的系数从 0.429609646422957D0 改为 0.43300702。这会改变生成值的幅度;即使使用相同的随机序列,结果也会受缩放系数变化的影响。
    对应文件:pet_util/alg1.f。

  • 调整|由直角坐标计算球面经纬度时的边界处理:DECPOL 增加向量模长检查,小于 1e-15 时报告错误;对接近反正弦函数定义域端点的情况增加判断。极点处仍存在除零问题,见使用提示。
    对应文件:pet_util/decpol.f。

  • 新增|离群值剔除和坐标转换例程:DESIG_W8、DESIG_TRW8 分别根据数据相对均值和线性趋势的偏差,迭代剔除离群值。GEOD_TO_CFS 将大地纬度、经度和椭球高转换为地心直角坐标,角度使用弧度,长度使用米;内置参考椭球的长半轴为 6378136.3 m、扁率 1/298.257。另增加天文常数包含文件 astro_constants.i。
    对应文件:pet_util/desig.f、pet_util/geod_to_cfs.f、include/astro_constants.i、pet_util/makefile。

  • 修复与新增|字符串和列表处理:LTM_DIF 在要求完整匹配时,不再仅凭长度较短一方的前缀相同就认定匹配;有序列表中未找到目标元素时,改为直接返回,避免后续检查使用无效下标。字符串查找 IFIND_SORT_CH 改为按查询字符串的长度比较。另增加 MULTI_INDICES,将子串出现的位置写入数组;增加整数的 26 进制编码、解码和指定二进制位范围的奇偶校验例程。
    对应文件:pet_util/cha.f、pet_util/list.f、pet_util/multi_index.f、pet_util/base26.f、pet_util/bit_checksum.f。

  • 调整|文件、日期与终端工具:GET_UNIT 的逻辑单元号搜索范围由 41–127 扩展为 41–511;目录遍历深度上限由 64 增至 256,名称缓冲区由 256 增至 512 字节;增加目录是否存在的查询函数。JD_TO_DATE 的 NDAYS_MAX 从 18263 增至 36525,下限不变。macOS 分支增加可执行文件路径查询,以及每块最多 2000000000 字节的分块读写;终端读键改用 termios 接口。
    对应文件:pet_util/get_unit.f、pet_util/get_file_from_dir.f、pet_util/is_dir_exist.f、pet_util/jd_to_date.f、pet_util/get_my_exe_path.f、pet_util/io64.f、pet_util/itti.c、pet_util/itti_chr.c、pet_util/itti_chr_del.c。

  • 调整|许可说明和随包资料:增加作者、版权和 NOSA 许可文件,批量更新源文件中的版权说明;同步调整安装和绘图文档,并补充矩阵运算计时记录。这些文件头和计时资料的变化本身不表示计算方法或性能发生了改变。
    对应文件:AUTHORS、COPYRIGHT、LICENSE.pdf、INSTALL、doc/petools_configure.txt、doc/pgplot.doc;新增计时记录为 example/matvec_timer_amd_3990x_64core.txt、example/matvec_timer_amd_5700u.txt、example/matvec_timer_amd_7995wx_96cores.txt、example/matvec_timer_i9_9980hk.txt。

使用提示

  • 构建绘图部分时,需要准备与补丁匹配的 PGPLOT 源码压缩包,并安装 libpng 的头文件和库。PETOOLS_PGPLOT_TARBALL 默认值是 $HOME,不能代替实际压缩包路径。support/config.csh 的补丁失败分支没有退出,随后还会复制 pgplot_mods.txt;这个标记文件一旦存在,下次配置就会跳过补丁。因此,配置继续执行并不能证明补丁已完整应用,应检查补丁执行日志及未能应用的修改。

  • 使用 DiaGI 的程序需同步更新设备编号、配色文件和调用参数。DIAGI_CLS 现在需要第二个参数 IUER;默认配色文件缺失会报错返回,不会自动退回内置配色。旧环境中的 PGPLOT_FONT、PGPLOT_RGB 也应与新的 share/ 路径一致。对应代码见 include/diagi.templ、diagi/diagi.f 和 support/config.csh。

  • 调用 GAUSSIAN_FILTER 时应显式传入第六个 REAL*8 参数。它没有声明为 OPTIONAL,参数地址检查也不能保证旧的五参数调用一定使用 1.0D307。如需保持旧版的筛选条件,可明确传入 80.0D0。对应代码见 pet_util/filters.f。

  • MUL_MM_SS_S 现在会直接读取 IUER,调用时应传入有效变量。R8ELEM_ADD、R8ELEM_SUB 的下标类型也发生了变化,调用端的实参类型和显式接口声明必须与 ADDRESS__TYPE 一致,不能只替换库文件而保留不匹配的参数声明。对应代码见 matvec/mul_mm_ss_s.f、matvec/vec.f。

  • GET_ERR_MODE 的返回语句写成了 GET_ERR_MODE = ERROR_MODE_NO_PROBE,因此无论是否调用过 ERR_MODE('PROBE'),它都会返回固定常数,无法反映当前模式。若要用它查询或保存模式,应改为返回公共块中的 ERROR_MODE。公共块的内存布局也已改变,直接引用 ERROR__COMMON 的外部代码需要同步更新。对应代码见 pet_util/error.f。

  • DECPOL 尚未完整处理极点。即使已把纬度设为 $\pm\pi/2$,后面仍会计算 SS(2)/sqrt(1-SS(3)**2);对 (0,0,1) 或 (0,0,-1),这里仍是 0/0。极点处的经度本来就没有唯一值,应单独处理这一分支,并约定返回值。对应代码见 pet_util/decpol.f。

  • 新增的 DESIG_TRW8 在剔除观测后更新法方程时,仍将该观测对 SDT 和 STT 的贡献加入累加量,正确处理应为减去这些贡献,否则新的直线参数不等于用保留观测重新拟合的结果。独立代入更新公式:取 T=(0,1,2,3,4)、X=(2,105,8,11,14),误差均为 1,NSIG=3;剔除第二点后,其余点严格满足 X=2+3T,但现有更新公式给出的斜率是 -735/43,而不是 3。另外,DESIG_W8 的均值计算使用 1/E 权重,不能直接按逆方差加权来理解。对应代码见 pet_util/desig.f。

  • 新增常数 AU__METERS 的值为 149597870.700D0,实际对应天文单位的千米数,与变量名所指的米不符。按 IAU 2012 年 B2 号决议,一个天文单位为 149597870700 m;若调用端直接把当前常数当作米,所得长度将只有正确值的千分之一。使用前应核对调用端单位,再统一修正定义和相关换算。对应文件:include/astro_constants.i。

  • macOS 的 READ64 分块分支仍有提前遇到文件末尾时的处理问题:在最后一块之前,若底层 READ 返回 0,代码会把请求长度计入已读字节,而后继续循环。WRITE64 在返回 0 时也有类似处理。处理这类情况时,仍需修正相应的返回值判断和字节计数。对应代码见 pet_util/io64.f。

  • 这里按源码包的版本标识 20250622 归档。包内部分文件的日期晚于这个标识,例如 pet_util/multi_index.f 中新增例程的注释日期为 2025-11-15,include/diagi.templ 为 2025-12-06。这些日期与包内版本号并不一致,不能把上述全部改动认定为在 2025 年 6 月 22 日当天发布。