【太陽系力学時(TDB : Barycentric Dynamical Time)】
太陽系座標時(TCB)は、いろいろと面倒くさいので一旦棚上げして、太陽系力学時(TDB)を計算します。

太陽系力学時(太陽系重心力学時)は、太陽系重心を原点として運動する物の力学計算に用いる。現在TDBが使われているのは、NASAの惑星座標ファイルがある。
TDBはTephと表現される場合もあり、TDBとTephは同等とされている。


・TCBからTDBの計算
TDBはTCBから以下の式で計算される。



TCBとTDBは比例(線形)なので簡単に計算できる。

atime.c tcb_tdb関数
/*
=============================================
=			TCB to TDB		=
=						=
=ent:	LONGJD *pdJDtcb = TCB JulianDay	=
=exit:	return double TDB-TCB			=
=		LONGJD *pdJDtdb = TDB JulianDay	=
=============================================
*/
double tcb_tdb(LONGJD *pdJDtcb, LONGJD *pdJDtdb)
{
	double dFrac;
	double dInt;
	double dTemp;

	/* cal. dTCG */
	dTemp = CONST_LB * (pdJDtcb->dDate - JD1977);
	dFrac = CONST_LB * (pdJDtcb->dTime * DAYSEC - DTAI_TT) - CONST_TDB0;
	dFrac /= DAYSEC;

	dInt = (int)dTemp;
	dFrac += (dTemp - dInt);

	/* Calc. TCG */
	pdJDtdb->dDate = pdJDtcb->dDate - dInt;
	pdJDtdb->dTime = pdJDtcb->dTime - dFrac;
	ljd_normalize(pdJDtdb);

	return ((dFrac + dInt) * DAYSEC);
}          
            
CONST_TDB0がマイナスになっているのは、

マイナスで括ったからです。


・TDBからTCBの計算

COMST_LBB = (CONST_LB / (1.0 - CONST_LB))

と定義すれば、同じ様なプログラムが作れます。

atime.c TDB_TCB関数
/*
=============================================
=			TDB to TCB		=
=						=
=ent:	LONGJD *pdJDtdb = TDB JulianDay	=
=exit:	return double TDB-TCB			=
=		LONGJD *pdJDtcb = TCB JulianDay	=
=============================================
*/
double tdb_tcb(LONGJD *pdJDtdb, LONGJD *pdJDtcb)
{
	double dFrac;
	double dInt;
	double dTemp;

	/* cal. dTCG */
	dTemp = CONST_LBB * (pdJDtdb->dDate - JD1977);
	dFrac = CONST_LBB * (pdJDtdb->dTime * DAYSEC - DTAI_TT) - CONST_TDB0;
	dFrac /= DAYSEC;

	dInt = (int)dTemp;
	dFrac += (dTemp - dInt);

	/* Calc. TCG */
	pdJDtcb->dDate = pdJDtdb->dDate + dInt;
	pdJDtcb->dTime = pdJDtdb->dTime + dFrac;
	ljd_normalize(pdJDtdb);

	return ((dFrac + dInt) * DAYSEC);
}
          


・プログラム
地球時(TT)から太陽系力学時(TDB)まで一通りのプログラムです。

atime_1118 ソースダウンロード

・Linuxならば(gcc)、makeコマンドでコンパイルできます。
・Windowsならば(Visual-Studio)、コンソールアプリでソースを読み込みます。

パラメータなしの場合、PC時間
$ ./atime
UTC 2017/11/22 23:43:49.000000 JD = 2458080.488762
TT  2017/11/22 23:44:58.184000
TCG 2017/11/22 23:44:59.083366
TCB 2017/11/22 23:45:18.191953
TDB 2017/11/22 23:44:58.182903

TCB 2017/11/22 23:45:18.191953
TCG 2017/11/22 23:44:59.083366
TT  2017/11/22 23:44:58.184000
UTC 2017/11/22 23:43:49.000000
TDBまで計算したら、TDBからUTCまで逆算しています。
力学時であるTTとTDBが近い時刻になります。

今回からTT時刻を指定できます。
時刻系の起点となる 1977年1月1日TAIをやってみます。
TAIとTTの差は32.184ですから、1977 1 1 0 0 32.184 TT を指定します。
$ ./atime 1977 1 1 0 0 32.184 tt
UTC 1976/12/31 23:59:45.000000 JD = 2443144.499826
TT  1977/01/01 00:00:32.184000
TCG 1977/01/01 00:00:32.184000
TCB 1977/01/01 00:00:32.184000
TDB 1977/01/01 00:00:32.183935

TCB 1977/01/01 00:00:32.184000
TCG 1977/01/01 00:00:32.184000
TT  1977/01/01 00:00:32.184000
UTC 1976/12/31 23:59:45.000000
TT・TCG・TCBは同一時刻になりますが、TDBだけ違います。
TDBだけ定数の加算があるからです。


次回は、再び太陽系座標時に戻ります。

前に戻る   次に進む

inserted by FC2 system