JPL DE(200/405/406/421/422/430/431)天文暦ファイルをCで読む(第2版)




 JPLより発行されているDE天文暦ファイルは昔はWorkStation用しか無く、ファイル変換用に「JPL天文暦CD−ROM(DE200/405/406)版を”C”で読む」を書きましたが、現在はPC用のファイルも以下のFTPで提供されているのでファイル変換の必要はなくなりました。

     JPL/NASAサイト:  (ftp://ssd.jpl.nasa.gov/pub/eph/planets/Linux/)

 しかし「太陽、月、惑星の位置計算」の計算例のプログラムでは最近の「ASTRONOMICAL ALMANAC」と秒の小数点以下のところで違いがでてきています。これはIAUにてNutationとPrecessionの定義が変わってきているためです。なのでその部分を変更しましたので以下に添付します。
 ただし、Nutationは適当な文献がすぐにでてこなかったので、IAUの「SOFA library」から持ってきた若干精度の低い[nut00b.c/sofa.h/sofam.h]ファイルをそのまま使用しています。これで「ASTRONOMICAL ALMANAC 2014」で印刷表示されている範囲(赤緯で秒の単位の小数点第3位)まで合致します。もう少しNutationの精度を上げたい場合SOFA libraryの[nut00a.cとそれに付属するファイル]を使用してください。

注:[nut00a.cとそれに付属するファイル]⇒[nut00a.cとそれに付属するファイル]へ修正しました。(2016/08/29)


*************************************************************************
【注意】
JPLのソフトで計算される天体の位置は力学時(TT)での位置です。
紙で出版されている天体暦も力学時(TT)で表示されています。

時計の時刻(UTC)での値が必要な場合には力学時(TT)との差(ΔT)を
加えた時刻で計算する必要があります。

現時点(2016年1月)で時計の時刻(UTC)の天体の位置を計算したい
場合には約68秒加えた力学時(TT)で計算する必要があります。
(ΔTは西暦1年では約3時間もあります。)
なのでこの修正をしないで計算すると例えば日出/日没時刻などが
約1分違うことになります。

【説明】
地球の自転は年々遅くなっています。これにあわせ時刻の体系は以下
となっています。
力学時(TT:Terrestrial Time ) :力学計算に用いる時刻
 ↑ 32.184秒
国際原子時(TAI:International Atomic Time):原子時計を用いて決定した時刻
 ↑ 36秒(2015年7月1日より)
協定世界時(UTC):UT1に合わせてTAI を閏秒で調整した時刻
 ↑ α (閏秒で調整しきれない一秒以下の差)
世界時(UT(UT1)):平均太陽日で進んでいく時刻(地球の自転に合わせた時刻)

これを数式で書くと以下。
TT =UTC +36秒+TAI(32.184秒)=UTC+68.184秒(ΔT)

したがって現時点(2016年1月)で時計の時刻(UTC)の天体の位置を
計算したい場合、約68秒加えた時刻(TT)で計算する必要があります。

(2016/01/28 追記)
*************************************************************************


太陽、月、惑星の位置計算 プログラム

 DEファイルのデータは直交座標系なので、赤緯赤経等の位置情報を得るためには追加の計算が必要となります。  以下に添付のプログラムにて、プログラムの中のPLANETに数値を与えることで、太陽、月、惑星の位置計算が出来ます。


以下の環境で使用してください。

 @"jpl_eph_2.0.zip"を解凍しCコンパイラでコンパイルした実行ファイル
 AJPL/NASAのサイトからダウンロードしたDExxxファイル
 の2つのファイルを使って位置を計算します。計算例も添付します。

  1)太陽・月・惑星位置計算ソース"jpl_eph_2.0.zip(34kbytes)"
  2)計算結果の例(at 2014/09/09 0hTDB)"test.txt"
  (いくつかのDEファイルの実行計算結果を統合して一つのファイルにしています。)
   なおCコンパイラはMS Visual Studio 2008を使用して開発しています。

   Readmeみたいなものは添付していないのでソースの中身を良く見て使ってください。
   main()関数はjpl_pph.cの最後に記述しています。
   jpl_eph.cの270行目から301行目にあるDEファイルを置くデイレクトリ名を自分のPCの
   環境に合わせて変更ください。


  注意点1:最初にDEファイルを使用する際にはこのHPの「JPL天文暦CD−ROM(DE200/405/406)版を”C”で読む」の第3章にある「ファイル内容のチェック」をまず行ってからにしてください。



注意点2:32bit系マシンではアドレス指定の関係で2.1Gbyte以上にはアクセスできません。DE431ファイル(2.7GB)の場合JD=5410800.5(10102/03/03 AM0時)迄です。これ以降のデータにアクセスしたい場合には以下のファイル分割ソフトでDE431ファイルを2分割して使用してください。
また私のLinuxマシンではDE431(2.7GB)ファイルのファイルオープン自体ができませんでしたので、そのような場合にもwindowsマシン等で分割してください。(2015/03/21追記)


  参考までに途中経過の出力を添付します。
  DE431ファイル分割プログラム 途中経過出力"
 
  DE431ファイル分割ソース"DE431_divide_1.0.zip"

  File 1(-13000 to +10000 )とFile 2(+10000 to 17000)に分割します。
  File 1を使わずオリジナルを使用しても10102年迄は問題は無いです。

******************************************************************************
 ここで紹介するプログラムは無保証です。このプログラムの使用によっていかなる
 損害が生じても一切責任は負えません。しかしながら、バグ・改善要望につきまし
 ては出 来るだけ対応したいと思いますのでお知らせください。
 他のNETへの転載、再配布等は自由に行って下さい、特に制限しません。営利目的
 (無料配付を含む)での利用も制限しません。しかし、配布等の時にはオリジナル
 ソースをこの形式で添付下さい。また、著作権は放棄していません。

 なお、「SOFA Library」のファイルの著作権はIAUにあります。
 変更したファイルの再配布は原則認められていませんので注意してください。
******************************************************************************


    ・2015/03/16 version. 2 掲載
    ・2015/03/21 ファイル分割ソフト(Filedivide_1.0)を掲載


                    

Copyright(C) 2015 Shinobu Takesako
All rights reserved