SPICE メモ

CSPICE 前提

SPICE のページ

ドキュメント

同じものが cspice.tar.Z の中にもあるものも

日本語情報

日本惑星科学会内月惑星探査育英会の実習会で SPICE に関するものも扱われ、そこでドキュメントが配布されている。前半は基本的に同一。後半のサンプル解説は回によって異なる。

コンパイル

$ vim test_version.c
#include <stdio.h>
#include "SpiceUsr.h"

int main(){
  ConstSpiceChar* version;

  version = tkvrsn_c("TOOLKIT");

  printf("Toolkit version %s\n", version);

  return 0;
}
$ gcc test_version.c -o test_version -I./cspice/include ./cspice/lib/cspice.a -lm

カーネル

各情報(軌道、座標軸、閏秒など)の情報を格納したファイルをカーネルと呼び、読み込んで使う。

// SpiceZdf.h
// 別名が付けられている。基本的には SpiceDouble などを使う
// const や unsigned などの型も同様に別名が定義されている
typedef char   SpiceChar;
typedef double SpiceDouble;
typedef long   SpiceInt; // 環境によっては int
typedef long   SpiceLong;

カーネルの読み込み

furnsh_c("kernel.knr");

読み込み(読み込み予約?)を行う。

時刻

基本的には J2000.0 TDB をエポックとし、その時点からの経過秒数を SpiceDouble で管理している et を使う。

タイムスケールは主に "UTC" / "TDB" / "TDT" が使われる。時刻系の歴史的な面から見ると、 ET は TDB と TDT の両方を含む(分化する前の)用語だが、 SPICE では ET = TDB として扱う。天体暦なので妥当。

UTC への変換で必要なので閏秒情報のカーネル *.tls はあらかじめ読み込む必要がある。( UTC 使わないときでも読み込まないとエラーっぽい)

様々な時刻をあらわす文字列から ET に変換するには、 str2et_c や utc2et_c を使う。 str2et_c はタイムスケールを省略すると UTC として扱われるが、 timdef_c でデフォルトの時刻系や時差などを変更できる。一方、 utc2et_c は UTC のみ。っぽい。

et から各種時刻を表す文字列へは timout_c や et2utc_c などを使う。

出力内容

kernel=de405.bsp, tt=J2000.0, frame=J2000, observer=SSB

sun            -1067599.061683770     -395988.983665861     -138071.310109251
mercury       -20529325.063213400   -60323956.690444000   -30130844.488333400
venus        -108524093.041015000    -7318518.342203330     3548116.374019060
earth         -27566633.290546100   132361428.681020000    57418646.137797400
mars          206980541.580515000     -186369.101928463    -5667233.715421520
jupiter bc    597499942.619373000   408990391.774906000   160756290.405863000
saturn bc     957317896.016517000   923319605.920349000   340163058.939291000