8. Delta T 相关函数 /* delta t 来自儒略日数 */ double swe_deltat_ex(double tjd, int32 ephe_flag, char *serr); /* delta t 来自儒略日数 */ double swe_deltat(double tjd); /* 得到用于 swe_deltat() 的潮汐加速度 */ double swe_get_tid_acc(void); /* 设置用于 swe_deltat() 的潮汐加速度 */ void swe_set_tid_acc(double t_acc); /* 设置由 swe_deltat() 返回的固定 Delta T 值 */ void swe_set_delta_t_userdef (double t_acc);
你从出生日期计算的儒略日数, 将是世界时 (UT, 以前的 GMT) 并可用于计算恒星时间和宫位. 然而, 对于行星和其它因素, 你必须转换 UT 到 历书时 (ET): 8.1 swe_deltat_ex() tjde = tjd + swe_deltat_ex(tjd, ephe_flag, serr); where tjd = 儒略日 in UT, tjde = in ET ephe_flag = 星历标志 (SEFLG_SWIEPH, SEFLG_JPLEPH, SEFLG_MOSEPH 其中之一) serr = 警告信息的串指针.
如果函数在调用 swe_set_ephe_path() 之前用 SEFLG_SWIEPH 标志调用, 或在调用 swe_set_jpl_file() 之前用 SEFLG_JPLEPH 标志调用, 则函数返回一个警告.
UT 中星历的计算取决于 Delta T, 它取决于月亮的潮汐加速度在星历表内的值. 函数 swe_deltat_ex() 可以提供来源于星历的 Delta T 值并因此比老的函数 swe_deltat() 更好, 老的函数用不确定的猜测以确定使用的是什么星历. 因此它会作出一个警告:
我们不建议混合使用新旧星历文件 sepl*.se1, semo*.se1, seas*.se1, 因为旧的文件是基于 JPL 星历 DE406, 新的则是基于 DE431, 而且两个星历具有不同的月球潮汐加速度. 混合使用新旧星历文件可能导致不一致的星历表输出. 与新的一起使用旧的小行星文件se99999.se1, 是可以忍受的.
8.2 swe_deltat() tjde = tjd + swe_deltat(tjd); 其中 tjd = 儒略日 in UT, tjde = in ET
此函数仅在以下情况下是安全的 - 如果你的程序总是使用相同的星历标志 - 如果你的程序总是使用相同的星历文件(使用 SEFLG_SWIEPH 和 SEFLG_MOSEPH) - 如果你第一次调用swe_set_ephe_path() (使用 SEFLG_SWIEPH) 和 swe_set_jpl_file() (使用 SEFLG_JPLEPH)
(另外,如果你第一次用你想要的潮汐加速度来调用 swe_set_tid_acc(),这是安全的. 然而, 请不要使用此函数,非除你真的知道你在做什么.)
为最佳控制返回的值, 使用函数 swe_deltat_ex() 代替 (参见上面的8.1).
UT 中星历的计算取决于 Delta T, 它取决于月亮的潮汐加速度在星历表内的值. 在默认模式下, 函数 swe_deltat() 自动尝试查找要求的值. 不过它会作出两次警告:
1. 我们不建议混合使用新旧星历文件 sepl*.se1, semo*.se1, seas*.se1, 因为旧的文件是基于 JPL 星历 DE406, 新的则是基于 DE431, 而且两个星历具有不同的月球潮汐加速度. 混合使用新旧星历文件可能导致不一致的星历表输出. 与新的一起使用旧的小行星文件se99999.se1, 是可以忍受的.
2. 函数 swe_deltat() 使用默认的潮汐加速度值 (DE431 的). 然而, 在调用了一些老的星历后, 如莫希尔星历, DE200, 或 DE406, swe_deltat() 可能提供稍微不同的值.
在这两点相关的麻烦的情况下, 我们建议 - 要么使用函数 swe_deltat_ex(), - 要么用函数 swe_set_tid_acc() 和 swe_get_tid_acc() 来控制潮汐加速度的值.
8.3 swe_set_tid_acc(), swe_get_tid_acc() Swiss Ephemeris 版本直到1.80, 如果使用了像 DE200 或 DE421这样的非标准的星历,此函数总是被使用. 从 Swiss Ephemeris 版本 2.00 起, 通常不再需要此函数了, 因为值是根据选择或可用的星历文件而自动设定. 但是, 在某些 “8.1 swe_deltat()” 节中描述的情况下, 用户可能想要自己控制潮汐加速度.
要找出当前使用的潮汐加速度的值, 调用函数 acceleration = swe_get_tidacc();
为了设置一个不同的值, 使用函数 swe_set_tid_acc(acceleration);
acceleration 可以具有的值在文件 swephexp.h 中列出(例如 SE_TIDAL_200, 等.)
一但调用了函数 swe_set_tid_acc(), 潮汐加速度的自动设置就被锁定. 为了再次解锁它, 调用 swe_set_tid_acc(SE_TIDAL_AUTOMATIC);
8.4. swe_set_delta_t_userdef() 此函数允许用户设置一个固定的,将由 swe_deltat() 或 swe_deltat_ex() 返回的 Delta T 值. 相同的 Delta T 值然后将被使用于 swe_calc_ut(), 食函数, 偕函数, 以及所有要求输入时间为 UT 的函数. 为了返回一个自动的 Delta T, 用以下值调用此函数: swe_set_delta_t_userdef(SE_DELTAT_AUTOMATIC);
8.4. Delta T 的未将来更新和文件 swe_deltat.txt Delta T 未来几年的值只能估计. 严格的说, 瑞士星历表必须每年在过去一年的新 Delta T 值由 IERS 公布后更新. 我们将尽我们所能,希望瑞士星历每年更新. 但是, 如果用户不想等待我们的更新或不想下载一个新版本的瑞士星历表, 他可以在位于瑞士星历表路径中的文件 swe_deltat.txt 中添加新的 Delta T 值. # 该文件允许生成新的、Swiss Ephemeris 知道的 Delta T. # 注意, 这些值覆盖内部的 Swiss Ephemeris 的 Delta T # 格式: 年和秒(十进制数) 2003 64.47 2004 65.80 2005 66.00 2006 67.00 2007 68.00 2008 68.00 2009 69.00
|