JPL历表结构(以DE405为例)

header.405

KSIZE

应该是一个读取的缓冲区的大小,取值与NCOEFF有关,具体就是NCOEFF的2倍,根据历表的不同而不同。
比如DE200取1652,DE405取2036,DE406取1456等。

实际在程序中KSIZERECL有关,RECLFortran OPEN语句中的参数,即设置每一模块的读取分区长度,不同编译器使用的单位不同,有Bytessingle precision words之分,两者相差4倍。
一般来说是使用Bytes作为单位。

在实际使用的时候我们会调用FSIZER3函数,这个函数会调用KSIZE来计算RECL,即IRECSZ=NRECL*KSIZE

下面请看程序注释:

1
2
3
4
5
6
7
8
9
C      1) The parameter RECL in the OPEN statement is the number of units per 
C record. For some compilers, it is given in bytes; in some, it is given
C in single precision words. In the subroutine FSIZER of TESTEPH, the
C parameter NRECL must be set to 4 if RECL is given in bytes; NRECL must
C be set to 1 if RECL is given in words. (If in doubt, use 4 for UNIX;
C 1 for VAX and PC)
C
C c) Hardwire the value of RECL. This number is NRECL*1652 for DE200,
C NRECL*2036 for DE405, and NRECL*1456 for DE406.

NCOEFF

NCOEFF(Number of Coefficients),一个数据块中包含的切比雪夫多项式系数的个数

GROUP 1010

包含历表名称和版本
起始历元和终止历元,两者均有儒略历和公历的表示

GROUP 1030

包含起始历元和终止历元的儒略日,以及数据文件中每个数据块的时间跨度

GROUP 1040

数字表示历表使用的常数个数
其余文字即常数名称

GROUP 1041

给出相对应GROUP 1040 位置的历表常数的数据

GROUP 1050

本组为历表数据文件中的指针信息。
用表格表示如下:

项目 水星 金星 地月系质心 火星 木星 土星 天王星 海王星 冥王星 月球 太阳 章动 月球天平动
数据块起始位置 3 171 231 309 342 366 387 405 423 441 753 819 899
切比雪夫多项式系数个数 14 10 13 11 8 7 6 6 6 13 11 10 10
数据被划分为子块的个数 4 2 2 1 1 1 1 1 1 8 2 4 4

其中水星、金星、地月系统、火星、木星、土星、天王星、海王星、冥王星、月球、太阳的参数为XYZ三轴的数据;章动包含两个角度数据:黄经章动Ψ\Psi和交角章动ϵ\epsilon;天平动包含三个欧拉角数据:ζ,z,θ\zeta,z,\theta

下面以水星的数据索引 3、14、4为例讲解:

  • 第一项的3表示水星的数据从数据块内第三个数据开始
  • 第二项的14表示切比雪夫多项式的系数个数,即水星的XYZ轴每个轴使用14个系数表示
  • 第三项的4表示划分的子数据块个数,就是(171-3)/14/3,其中的每个子数据块就包含了14+14+14=42个系数,分别对应XYZ轴

某数据块内水星子块的各个数据的含义如下表所示:
5.jpg

GROUP 1070

可以看到这个下面没东西,不是文件坏了。JPL希望你在用他的程序的时候,先把几个文件合并起来,把header放在第一个,就相当于合并完之后,GROUP 1070下面包含的是真正的天体数据。

ascp****.405(以ascp2020.405为例)

一个ascp****.405文件称为一个数据文件,DE历表由若干个数据文件构成,而每个数据文件又由若干个数据块构成。在时间上前后相邻的2个数据文件中,前一个数据文件的最后一个数据块,与后一个数据文件的第一个数据块是完全一样的,为重复数据块。

比如ascp2020.405由229个数据块构成,每个数据块的时间跨度为32天,下面我们以其中的第一个数据块为例讲解。

第一行我们可以看到1 1018,这表明了数据块的序号和包含系数的个数,即第1个数据块共包含1018个系数,与header中NCOEFF注明的个数相同

之后就是系数部分,前两个系数为数据块的起始历元和终止历元,在我们的例子中是0.245883250000000000D+07 0.245886450000000000D+07,即公元2019年12月15日00:00:00公元2020年1月16日00:00:00的数据

从后面的系数开始,就对应着header中索引的数据了。