JPL DE431ファイルの小型化 (2.7G to 557MB(-3000 to +3000) )




     JPLより発行されているDE431のファイルがあまりに大きいのでDE422と同じサイズ(557MByte)にするプログラムを作ってしてみました。(CコンパイラはMS Visual Studio 2008を使用していますが他のコンパイラでも大丈夫ではないかと思います。)

     ソース(C言語)はDE431のオリジナルファイル(lnxm13000p17000.431)から6000年分(JD=625360.5(-3000/02/23)から2816912.5(3000/05/06)まで。)抜き出す方法で記述しています。手を入れれば必要部分だけ抜き出すことも可能と思います。

     通常のプログラムはヘッダー部分に記述されているファイルの最初の日、最後の日、記述間隔(日)を見てレコードを数えているので、ヘッダー部分は上記2箇所(最初の日と最後の日)のみ新規ファイルに合わせて変更するようにしています。終わりの日は、データ部分に書かれている日付+32日としています。(1レコードが32日分サポートしているので。)

     DE431のファイル構造は1レコードが(2036×4byte)=8144Byteでできています。
    ヘッダーが最初の2ブロックを使用し、その後にデータブロック(1ブロック/32日分)が続いています。ヘッダー部分で変更する箇所は663x4Byte=2652Byteの次からdouble(8byte)の形式で3個つながってます。
    プログラムではfloat配列a[663]を読んだ後にdouble配列b[3]を読み込み、残りをfloat配列c[1367]で読み込んみ、b[0](最初の日),b[1](最後の日)を修正したうえで、新規ファイルに書き込んでます。残りのレコードはdata[2036/2]配列で読み込みそのまま書き出しているだけです。なおb[2]は1レコードでサポートしている期間でDE431では32日となってます。


      参考までに途中経過の出力を添付します。
     
      DE431ファイル変換プログラム 途中経過出力"
     
      DE431ファイル変換ソース"DE431_conversion_2.7GBto557MB.zip(version 1.0)"


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



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


       ・2015/03/14 version. 1 掲載
       ・2015/03/21 注意点を記入


                        

    Copyright(C) 2015 Shinobu Takesako
    All rights reserved