It has been 615 days since the last update, the content of the article may be outdated.
JPL历表结构(以DE405为例)
KSIZE
应该是一个读取的缓冲区的大小,取值与NCOEFF有关,具体就是NCOEFF的2倍,根据历表的不同而不同。
比如DE200取1652,DE405取2036,DE406取1456等。
实际在程序中KSIZE与RECL有关,RECL是Fortran OPEN语句中的参数,即设置每一模块的读取分区长度,不同编译器使用的单位不同,有Bytes和single precision words之分,两者相差4倍。
一般来说是使用Bytes作为单位。
在实际使用的时候我们会调用FSIZER3函数,这个函数会调用KSIZE来计算RECL,即IRECSZ=NRECL*KSIZE
下面请看程序注释:
fortran
1
2
3
4
5
6
7
8
9
NCOEFF
NCOEFF(Number of Coefficients),一个数据块中包含的切比雪夫多项式系数的个数
GROUP 1010
包含历表名称和版本
起始历元和终止历元,两者均有儒略历和公历的表示
GROUP 1030
包含起始历元和终止历元的儒略日,以及数据文件中每个数据块的时间跨度
GROUP 1040
数字表示历表使用的常数个数
其余文字即常数名称
GROUP 1041
给出相对应GROUP 1040 位置的历表常数的数据
GROUP 1050
本组为历表数据文件中的指针信息。
用表格表示如下:
其中水星、金星、地月系统、火星、木星、土星、天王星、海王星、冥王星、月球、太阳的参数为XYZ三轴的数据;章动包含两个角度数据:黄经章动Ψ
下面以水星的数据索引 3、14、4为例讲解:
第一项的3表示水星的数据从数据块内第三个数据开始 第二项的14表示切比雪夫多项式的系数个数,即水星的XYZ轴每个轴使用14个系数表示 第三项的4表示划分的子数据块个数,就是(171-3)/14/3,其中的每个子数据块就包含了14+14+14=42个系数,分别对应XYZ轴某数据块内水星子块的各个数据的含义如下表所示:
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中索引的数据了。

