celes 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +32 -0
- data/README.md +179 -0
- data/Rakefile +1 -0
- data/celes.gemspec +22 -0
- data/ext/celes/a2af.c +120 -0
- data/ext/celes/a2tf.c +116 -0
- data/ext/celes/af2a.c +107 -0
- data/ext/celes/anp.c +82 -0
- data/ext/celes/anpm.c +82 -0
- data/ext/celes/bi00.c +116 -0
- data/ext/celes/bp00.c +173 -0
- data/ext/celes/bp06.c +136 -0
- data/ext/celes/bpn2xy.c +100 -0
- data/ext/celes/c2i00a.c +139 -0
- data/ext/celes/c2i00b.c +139 -0
- data/ext/celes/c2i06a.c +136 -0
- data/ext/celes/c2ibpn.c +142 -0
- data/ext/celes/c2ixy.c +131 -0
- data/ext/celes/c2ixys.c +123 -0
- data/ext/celes/c2s.c +96 -0
- data/ext/celes/c2t00a.c +154 -0
- data/ext/celes/c2t00b.c +150 -0
- data/ext/celes/c2t06a.c +152 -0
- data/ext/celes/c2tcio.c +122 -0
- data/ext/celes/c2teqx.c +122 -0
- data/ext/celes/c2tpe.c +167 -0
- data/ext/celes/c2txy.c +159 -0
- data/ext/celes/cal2jd.c +139 -0
- data/ext/celes/celes_core.c +2522 -0
- data/ext/celes/cp.c +80 -0
- data/ext/celes/cpv.c +82 -0
- data/ext/celes/cr.c +83 -0
- data/ext/celes/d2dtf.c +206 -0
- data/ext/celes/d2tf.c +160 -0
- data/ext/celes/dat.c +289 -0
- data/ext/celes/depend +25 -0
- data/ext/celes/dtdb.c +1213 -0
- data/ext/celes/dtf2d.c +196 -0
- data/ext/celes/ee00.c +128 -0
- data/ext/celes/ee00a.c +135 -0
- data/ext/celes/ee00b.c +141 -0
- data/ext/celes/ee06a.c +122 -0
- data/ext/celes/eect00.c +282 -0
- data/ext/celes/eform.c +147 -0
- data/ext/celes/eo06a.c +131 -0
- data/ext/celes/eors.c +108 -0
- data/ext/celes/epb.c +96 -0
- data/ext/celes/epb2jd.c +91 -0
- data/ext/celes/epj.c +93 -0
- data/ext/celes/epj2jd.c +91 -0
- data/ext/celes/epv00.c +2589 -0
- data/ext/celes/eqeq94.c +131 -0
- data/ext/celes/era00.c +136 -0
- data/ext/celes/extconf.rb +4 -0
- data/ext/celes/fad03.c +103 -0
- data/ext/celes/fae03.c +102 -0
- data/ext/celes/faf03.c +106 -0
- data/ext/celes/faju03.c +102 -0
- data/ext/celes/fal03.c +103 -0
- data/ext/celes/falp03.c +103 -0
- data/ext/celes/fama03.c +102 -0
- data/ext/celes/fame03.c +102 -0
- data/ext/celes/fane03.c +99 -0
- data/ext/celes/faom03.c +104 -0
- data/ext/celes/fapa03.c +103 -0
- data/ext/celes/fasa03.c +102 -0
- data/ext/celes/faur03.c +99 -0
- data/ext/celes/fave03.c +102 -0
- data/ext/celes/fk52h.c +143 -0
- data/ext/celes/fk5hip.c +126 -0
- data/ext/celes/fk5hz.c +160 -0
- data/ext/celes/fw2m.c +134 -0
- data/ext/celes/fw2xy.c +120 -0
- data/ext/celes/gc2gd.c +134 -0
- data/ext/celes/gc2gde.c +200 -0
- data/ext/celes/gd2gc.c +134 -0
- data/ext/celes/gd2gce.c +138 -0
- data/ext/celes/gmst00.c +145 -0
- data/ext/celes/gmst06.c +136 -0
- data/ext/celes/gmst82.c +151 -0
- data/ext/celes/gst00a.c +138 -0
- data/ext/celes/gst00b.c +146 -0
- data/ext/celes/gst06.c +140 -0
- data/ext/celes/gst06a.c +131 -0
- data/ext/celes/gst94.c +131 -0
- data/ext/celes/h2fk5.c +148 -0
- data/ext/celes/hfk5z.c +175 -0
- data/ext/celes/ir.c +83 -0
- data/ext/celes/jd2cal.c +155 -0
- data/ext/celes/jdcalf.c +161 -0
- data/ext/celes/num00a.c +121 -0
- data/ext/celes/num00b.c +121 -0
- data/ext/celes/num06a.c +125 -0
- data/ext/celes/numat.c +109 -0
- data/ext/celes/nut00a.c +2047 -0
- data/ext/celes/nut00b.c +372 -0
- data/ext/celes/nut06a.c +153 -0
- data/ext/celes/nut80.c +325 -0
- data/ext/celes/nutm80.c +117 -0
- data/ext/celes/obl06.c +118 -0
- data/ext/celes/obl80.c +118 -0
- data/ext/celes/p06e.c +321 -0
- data/ext/celes/p2pv.c +83 -0
- data/ext/celes/p2s.c +91 -0
- data/ext/celes/pap.c +139 -0
- data/ext/celes/pas.c +96 -0
- data/ext/celes/pb06.c +144 -0
- data/ext/celes/pdp.c +84 -0
- data/ext/celes/pfw06.c +165 -0
- data/ext/celes/plan94.c +514 -0
- data/ext/celes/pm.c +83 -0
- data/ext/celes/pmat00.c +118 -0
- data/ext/celes/pmat06.c +122 -0
- data/ext/celes/pmat76.c +141 -0
- data/ext/celes/pmp.c +85 -0
- data/ext/celes/pn.c +109 -0
- data/ext/celes/pn00.c +177 -0
- data/ext/celes/pn00a.c +162 -0
- data/ext/celes/pn00b.c +162 -0
- data/ext/celes/pn06.c +187 -0
- data/ext/celes/pn06a.c +152 -0
- data/ext/celes/pnm00a.c +121 -0
- data/ext/celes/pnm00b.c +121 -0
- data/ext/celes/pnm06a.c +124 -0
- data/ext/celes/pnm80.c +126 -0
- data/ext/celes/pom00.c +115 -0
- data/ext/celes/ppp.c +85 -0
- data/ext/celes/ppsp.c +94 -0
- data/ext/celes/pr00.c +142 -0
- data/ext/celes/prec76.c +148 -0
- data/ext/celes/pv2p.c +81 -0
- data/ext/celes/pv2s.c +144 -0
- data/ext/celes/pvdpv.c +102 -0
- data/ext/celes/pvm.c +86 -0
- data/ext/celes/pvmpv.c +87 -0
- data/ext/celes/pvppv.c +87 -0
- data/ext/celes/pvstar.c +207 -0
- data/ext/celes/pvu.c +93 -0
- data/ext/celes/pvup.c +88 -0
- data/ext/celes/pvxpv.c +107 -0
- data/ext/celes/pxp.c +94 -0
- data/ext/celes/rm2v.c +111 -0
- data/ext/celes/rv2m.c +118 -0
- data/ext/celes/rx.c +110 -0
- data/ext/celes/rxp.c +99 -0
- data/ext/celes/rxpv.c +86 -0
- data/ext/celes/rxr.c +99 -0
- data/ext/celes/ry.c +110 -0
- data/ext/celes/rz.c +110 -0
- data/ext/celes/s00.c +371 -0
- data/ext/celes/s00a.c +143 -0
- data/ext/celes/s00b.c +143 -0
- data/ext/celes/s06.c +368 -0
- data/ext/celes/s06a.c +145 -0
- data/ext/celes/s2c.c +85 -0
- data/ext/celes/s2p.c +88 -0
- data/ext/celes/s2pv.c +103 -0
- data/ext/celes/s2xpv.c +87 -0
- data/ext/celes/sepp.c +105 -0
- data/ext/celes/seps.c +93 -0
- data/ext/celes/sofa.h +379 -0
- data/ext/celes/sofam.h +155 -0
- data/ext/celes/sp00.c +118 -0
- data/ext/celes/starpm.c +205 -0
- data/ext/celes/starpv.c +264 -0
- data/ext/celes/sxp.c +84 -0
- data/ext/celes/sxpv.c +85 -0
- data/ext/celes/taitt.c +110 -0
- data/ext/celes/taiut1.c +112 -0
- data/ext/celes/taiutc.c +182 -0
- data/ext/celes/tcbtdb.c +132 -0
- data/ext/celes/tcgtt.c +109 -0
- data/ext/celes/tdbtcb.c +137 -0
- data/ext/celes/tdbtt.c +122 -0
- data/ext/celes/tf2a.c +107 -0
- data/ext/celes/tf2d.c +107 -0
- data/ext/celes/tr.c +93 -0
- data/ext/celes/trxp.c +93 -0
- data/ext/celes/trxpv.c +93 -0
- data/ext/celes/tttai.c +110 -0
- data/ext/celes/tttcg.c +112 -0
- data/ext/celes/tttdb.c +121 -0
- data/ext/celes/ttut1.c +110 -0
- data/ext/celes/ut1tai.c +111 -0
- data/ext/celes/ut1tt.c +110 -0
- data/ext/celes/ut1utc.c +193 -0
- data/ext/celes/utctai.c +163 -0
- data/ext/celes/utcut1.c +151 -0
- data/ext/celes/xy06.c +2758 -0
- data/ext/celes/xys00a.c +133 -0
- data/ext/celes/xys00b.c +133 -0
- data/ext/celes/xys06a.c +133 -0
- data/ext/celes/zp.c +77 -0
- data/ext/celes/zpv.c +79 -0
- data/ext/celes/zr.c +83 -0
- data/lib/celes.rb +6 -0
- data/lib/celes/version.rb +3 -0
- data/sofa_20120301.diff +31384 -0
- data/test/t_sofa.rb +8228 -0
- metadata +251 -0
data/ext/celes/ut1utc.c
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
#include "sofam.h"
|
|
2
|
+
|
|
3
|
+
int iauUt1utc(double ut11, double ut12, double dut1,
|
|
4
|
+
double *utc1, double *utc2)
|
|
5
|
+
/*
|
|
6
|
+
** - - - - - - - - - -
|
|
7
|
+
** i a u U t 1 u t c
|
|
8
|
+
** - - - - - - - - - -
|
|
9
|
+
**
|
|
10
|
+
** Time scale transformation: Universal Time, UT1, to Coordinated
|
|
11
|
+
** Universal Time, UTC.
|
|
12
|
+
**
|
|
13
|
+
** Status: canonical.
|
|
14
|
+
**
|
|
15
|
+
** Given:
|
|
16
|
+
** ut11,ut12 double UT1 as a 2-part Julian Date (Note 1)
|
|
17
|
+
** dut1 double Delta UT1: UT1-UTC in seconds (Note 2)
|
|
18
|
+
**
|
|
19
|
+
** Returned:
|
|
20
|
+
** utc1,utc2 double UTC as a 2-part quasi Julian Date (Notes 3,4)
|
|
21
|
+
**
|
|
22
|
+
** Returned (function value):
|
|
23
|
+
** int status: +1 = dubious year (Note 5)
|
|
24
|
+
** 0 = OK
|
|
25
|
+
** -1 = unacceptable date
|
|
26
|
+
**
|
|
27
|
+
** Notes:
|
|
28
|
+
**
|
|
29
|
+
** 1) ut11+ut12 is Julian Date, apportioned in any convenient way
|
|
30
|
+
** between the two arguments, for example where ut11 is the Julian
|
|
31
|
+
** Day Number and ut12 is the fraction of a day. The returned utc1
|
|
32
|
+
** and utc2 form an analogous pair, except that a special convention
|
|
33
|
+
** is used, to deal with the problem of leap seconds - see Note 3.
|
|
34
|
+
**
|
|
35
|
+
** 2) Delta UT1 can be obtained from tabulations provided by the
|
|
36
|
+
** International Earth Rotation and Reference Systems Service. The
|
|
37
|
+
** value changes abruptly by 1s at a leap second; however, close to
|
|
38
|
+
** a leap second the algorithm used here is tolerant of the "wrong"
|
|
39
|
+
** choice of value being made.
|
|
40
|
+
**
|
|
41
|
+
** 3) JD cannot unambiguously represent UTC during a leap second unless
|
|
42
|
+
** special measures are taken. The convention in the present
|
|
43
|
+
** function is that the returned quasi JD day UTC1+UTC2 represents
|
|
44
|
+
** UTC days whether the length is 86399, 86400 or 86401 SI seconds.
|
|
45
|
+
**
|
|
46
|
+
** 4) The function iauD2dtf can be used to transform the UTC quasi-JD
|
|
47
|
+
** into calendar date and clock time, including UTC leap second
|
|
48
|
+
** handling.
|
|
49
|
+
**
|
|
50
|
+
** 5) The warning status "dubious year" flags UTCs that predate the
|
|
51
|
+
** introduction of the time scale and that are too far in the future
|
|
52
|
+
** to be trusted. See iauDat for further details.
|
|
53
|
+
**
|
|
54
|
+
** Called:
|
|
55
|
+
** iauJd2cal JD to Gregorian calendar
|
|
56
|
+
** iauDat delta(AT) = TAI-UTC
|
|
57
|
+
** iauCal2jd Gregorian calendar to JD
|
|
58
|
+
**
|
|
59
|
+
** References:
|
|
60
|
+
**
|
|
61
|
+
** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
|
|
62
|
+
** IERS Technical Note No. 32, BKG (2004)
|
|
63
|
+
**
|
|
64
|
+
** Explanatory Supplement to the Astronomical Almanac,
|
|
65
|
+
** P. Kenneth Seidelmann (ed), University Science Books (1992)
|
|
66
|
+
**
|
|
67
|
+
** This revision: 2011 May 14
|
|
68
|
+
**
|
|
69
|
+
** Original version 2012-03-01
|
|
70
|
+
**
|
|
71
|
+
** Copyright (C) 2013 Naoki Arita. See notes at end.
|
|
72
|
+
*/
|
|
73
|
+
{
|
|
74
|
+
int big1;
|
|
75
|
+
int i, iy, im, id, js;
|
|
76
|
+
double duts, u1, u2, d1, dats1, d2, fd, dats2, ddats, us1, us2, du;
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
/* UT1-UTC in seconds. */
|
|
80
|
+
duts = dut1;
|
|
81
|
+
|
|
82
|
+
/* Put the two parts of the UT1 into big-first order. */
|
|
83
|
+
big1 = ( ut11 >= ut12 );
|
|
84
|
+
if ( big1 ) {
|
|
85
|
+
u1 = ut11;
|
|
86
|
+
u2 = ut12;
|
|
87
|
+
} else {
|
|
88
|
+
u1 = ut12;
|
|
89
|
+
u2 = ut11;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/* See if the UT1 can possibly be in a leap-second day. */
|
|
93
|
+
d1 = u1;
|
|
94
|
+
dats1 = 0;
|
|
95
|
+
for ( i = -1; i <= 3; i++ ) {
|
|
96
|
+
d2 = u2 + (double) i;
|
|
97
|
+
if ( iauJd2cal(d1, d2, &iy, &im, &id, &fd) ) return -1;
|
|
98
|
+
js = iauDat(iy, im, id, 0.0, &dats2);
|
|
99
|
+
if ( js < 0 ) return -1;
|
|
100
|
+
if ( i == - 1 ) dats1 = dats2;
|
|
101
|
+
ddats = dats2 - dats1;
|
|
102
|
+
if ( fabs(ddats) >= 0.5 ) {
|
|
103
|
+
|
|
104
|
+
/* Yes, leap second nearby: ensure UT1-UTC is "before" value. */
|
|
105
|
+
if ( ddats * duts >= 0 ) duts -= ddats;
|
|
106
|
+
|
|
107
|
+
/* UT1 for the start of the UTC day that ends in a leap. */
|
|
108
|
+
if ( iauCal2jd(iy, im, id, &d1, &d2) ) return -1;
|
|
109
|
+
us1 = d1;
|
|
110
|
+
us2 = d2 - 1.0 + duts/DAYSEC;
|
|
111
|
+
|
|
112
|
+
/* Is the UT1 after this point? */
|
|
113
|
+
du = u1 - us1;
|
|
114
|
+
du += u2 - us2;
|
|
115
|
+
if ( du > 0 ) {
|
|
116
|
+
|
|
117
|
+
/* Yes: fraction of the current UTC day that has elapsed. */
|
|
118
|
+
fd = du * DAYSEC / ( DAYSEC + ddats );
|
|
119
|
+
|
|
120
|
+
/* Ramp UT1-UTC to bring about SOFA's JD(UTC) convention. */
|
|
121
|
+
duts += ddats * ( fd <= 1.0 ? fd : 1.0 );
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/* Done. */
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
dats1 = dats2;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/* Subtract the (possibly adjusted) UT1-UTC from UT1 to give UTC. */
|
|
131
|
+
u2 -= duts / DAYSEC;
|
|
132
|
+
|
|
133
|
+
/* Result, safeguarding precision. */
|
|
134
|
+
if ( big1 ) {
|
|
135
|
+
*utc1 = u1;
|
|
136
|
+
*utc2 = u2;
|
|
137
|
+
} else {
|
|
138
|
+
*utc1 = u2;
|
|
139
|
+
*utc2 = u1;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/* Status. */
|
|
143
|
+
return js;
|
|
144
|
+
|
|
145
|
+
/*----------------------------------------------------------------------
|
|
146
|
+
**
|
|
147
|
+
** Celes is a wrapper of the SOFA Library for Ruby.
|
|
148
|
+
**
|
|
149
|
+
** This file is redistributed and relicensed in accordance with
|
|
150
|
+
** the SOFA Software License (http://www.iausofa.org/tandc.html).
|
|
151
|
+
**
|
|
152
|
+
** The original library is available from IAU Standards of
|
|
153
|
+
** Fundamental Astronomy (http://www.iausofa.org/).
|
|
154
|
+
**
|
|
155
|
+
**
|
|
156
|
+
**
|
|
157
|
+
**
|
|
158
|
+
**
|
|
159
|
+
** Copyright (C) 2013, Naoki Arita
|
|
160
|
+
** All rights reserved.
|
|
161
|
+
**
|
|
162
|
+
** Redistribution and use in source and binary forms, with or without
|
|
163
|
+
** modification, are permitted provided that the following conditions
|
|
164
|
+
** are met:
|
|
165
|
+
**
|
|
166
|
+
** 1 Redistributions of source code must retain the above copyright
|
|
167
|
+
** notice, this list of conditions and the following disclaimer.
|
|
168
|
+
**
|
|
169
|
+
** 2 Redistributions in binary form must reproduce the above copyright
|
|
170
|
+
** notice, this list of conditions and the following disclaimer in
|
|
171
|
+
** the documentation and/or other materials provided with the
|
|
172
|
+
** distribution.
|
|
173
|
+
**
|
|
174
|
+
** 3 Neither the name of the Standards Of Fundamental Astronomy Board,
|
|
175
|
+
** the International Astronomical Union nor the names of its
|
|
176
|
+
** contributors may be used to endorse or promote products derived
|
|
177
|
+
** from this software without specific prior written permission.
|
|
178
|
+
**
|
|
179
|
+
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
180
|
+
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
181
|
+
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
182
|
+
** FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
183
|
+
** COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
184
|
+
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
185
|
+
** BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
186
|
+
** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
187
|
+
** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
188
|
+
** LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
189
|
+
** ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
190
|
+
** POSSIBILITY OF SUCH DAMAGE.
|
|
191
|
+
**
|
|
192
|
+
**--------------------------------------------------------------------*/
|
|
193
|
+
}
|
data/ext/celes/utctai.c
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
#include "sofam.h"
|
|
2
|
+
|
|
3
|
+
int iauUtctai(double utc1, double utc2, double *tai1, double *tai2)
|
|
4
|
+
/*
|
|
5
|
+
** - - - - - - - - - -
|
|
6
|
+
** i a u U t c t a i
|
|
7
|
+
** - - - - - - - - - -
|
|
8
|
+
**
|
|
9
|
+
** Time scale transformation: Coordinated Universal Time, UTC, to
|
|
10
|
+
** International Atomic Time, TAI.
|
|
11
|
+
**
|
|
12
|
+
** Status: canonical.
|
|
13
|
+
**
|
|
14
|
+
** Given:
|
|
15
|
+
** utc1,utc2 double UTC as a 2-part quasi Julian Date (Notes 1-4)
|
|
16
|
+
**
|
|
17
|
+
** Returned:
|
|
18
|
+
** tai1,tai2 double TAI as a 2-part Julian Date (Note 5)
|
|
19
|
+
**
|
|
20
|
+
** Returned (function value):
|
|
21
|
+
** int status: +1 = dubious year (Note 3)
|
|
22
|
+
** 0 = OK
|
|
23
|
+
** -1 = unacceptable date
|
|
24
|
+
**
|
|
25
|
+
** Notes:
|
|
26
|
+
**
|
|
27
|
+
** 1) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any
|
|
28
|
+
** convenient way between the two arguments, for example where utc1
|
|
29
|
+
** is the Julian Day Number and utc2 is the fraction of a day.
|
|
30
|
+
**
|
|
31
|
+
** 2) JD cannot unambiguously represent UTC during a leap second unless
|
|
32
|
+
** special measures are taken. The convention in the present
|
|
33
|
+
** function is that the JD day represents UTC days whether the
|
|
34
|
+
** length is 86399, 86400 or 86401 SI seconds.
|
|
35
|
+
**
|
|
36
|
+
** 3) The warning status "dubious year" flags UTCs that predate the
|
|
37
|
+
** introduction of the time scale and that are too far in the future
|
|
38
|
+
** to be trusted. See iauDat for further details.
|
|
39
|
+
**
|
|
40
|
+
** 4) The function iauDtf2d converts from calendar date and time of day
|
|
41
|
+
** into 2-part Julian Date, and in the case of UTC implements the
|
|
42
|
+
** leap-second-ambiguity convention described above.
|
|
43
|
+
**
|
|
44
|
+
** 5) The returned TAI1,TAI2 are such that their sum is the TAI Julian
|
|
45
|
+
** Date.
|
|
46
|
+
**
|
|
47
|
+
** Called:
|
|
48
|
+
** iauJd2cal JD to Gregorian calendar
|
|
49
|
+
** iauDat delta(AT) = TAI-UTC
|
|
50
|
+
** iauCal2jd Gregorian calendar to JD
|
|
51
|
+
**
|
|
52
|
+
** References:
|
|
53
|
+
**
|
|
54
|
+
** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
|
|
55
|
+
** IERS Technical Note No. 32, BKG (2004)
|
|
56
|
+
**
|
|
57
|
+
** Explanatory Supplement to the Astronomical Almanac,
|
|
58
|
+
** P. Kenneth Seidelmann (ed), University Science Books (1992)
|
|
59
|
+
**
|
|
60
|
+
** This revision: 2010 September 10
|
|
61
|
+
**
|
|
62
|
+
** Original version 2012-03-01
|
|
63
|
+
**
|
|
64
|
+
** Copyright (C) 2013 Naoki Arita. See notes at end.
|
|
65
|
+
**
|
|
66
|
+
*/
|
|
67
|
+
{
|
|
68
|
+
int big1;
|
|
69
|
+
int iy, im, id, js, iyt, imt, idt;
|
|
70
|
+
double u1, u2, fd, dats, fdt, datst, ddat, z1, z2, a2;
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
/* Put the two parts of the UTC into big-first order. */
|
|
74
|
+
big1 = ( utc1 >= utc2 );
|
|
75
|
+
if ( big1 ) {
|
|
76
|
+
u1 = utc1;
|
|
77
|
+
u2 = utc2;
|
|
78
|
+
} else {
|
|
79
|
+
u1 = utc2;
|
|
80
|
+
u2 = utc1;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* Get TAI-UTC now. */
|
|
84
|
+
if ( iauJd2cal(u1, u2, &iy, &im, &id, &fd) ) return -1;
|
|
85
|
+
js = iauDat(iy, im, id, fd, &dats);
|
|
86
|
+
if ( js < 0 ) return -1;
|
|
87
|
+
|
|
88
|
+
/* Get TAI-UTC tomorrow. */
|
|
89
|
+
if ( iauJd2cal(u1+1.5, u2-fd, &iyt, &imt, &idt, &fdt) ) return -1;
|
|
90
|
+
js = iauDat(iyt, imt, idt, fdt, &datst);
|
|
91
|
+
if ( js < 0 ) return -1;
|
|
92
|
+
|
|
93
|
+
/* If today ends in a leap second, scale the fraction into SI days. */
|
|
94
|
+
ddat = datst - dats;
|
|
95
|
+
if ( fabs(ddat) > 0.5 ) fd += fd * ddat / DAYSEC;
|
|
96
|
+
|
|
97
|
+
/* Today's calendar date to 2-part JD. */
|
|
98
|
+
if ( iauCal2jd(iy, im, id, &z1, &z2) ) return -1;
|
|
99
|
+
|
|
100
|
+
/* Assemble the TAI result, preserving the UTC split and order. */
|
|
101
|
+
a2 = z1 - u1;
|
|
102
|
+
a2 += z2;
|
|
103
|
+
a2 += fd + dats / DAYSEC;
|
|
104
|
+
if ( big1 ) {
|
|
105
|
+
*tai1 = u1;
|
|
106
|
+
*tai2 = a2;
|
|
107
|
+
} else {
|
|
108
|
+
*tai1 = a2;
|
|
109
|
+
*tai2 = u1;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* Status. */
|
|
113
|
+
return js;
|
|
114
|
+
|
|
115
|
+
/*----------------------------------------------------------------------
|
|
116
|
+
**
|
|
117
|
+
** Celes is a wrapper of the SOFA Library for Ruby.
|
|
118
|
+
**
|
|
119
|
+
** This file is redistributed and relicensed in accordance with
|
|
120
|
+
** the SOFA Software License (http://www.iausofa.org/tandc.html).
|
|
121
|
+
**
|
|
122
|
+
** The original library is available from IAU Standards of
|
|
123
|
+
** Fundamental Astronomy (http://www.iausofa.org/).
|
|
124
|
+
**
|
|
125
|
+
**
|
|
126
|
+
**
|
|
127
|
+
**
|
|
128
|
+
**
|
|
129
|
+
** Copyright (C) 2013, Naoki Arita
|
|
130
|
+
** All rights reserved.
|
|
131
|
+
**
|
|
132
|
+
** Redistribution and use in source and binary forms, with or without
|
|
133
|
+
** modification, are permitted provided that the following conditions
|
|
134
|
+
** are met:
|
|
135
|
+
**
|
|
136
|
+
** 1 Redistributions of source code must retain the above copyright
|
|
137
|
+
** notice, this list of conditions and the following disclaimer.
|
|
138
|
+
**
|
|
139
|
+
** 2 Redistributions in binary form must reproduce the above copyright
|
|
140
|
+
** notice, this list of conditions and the following disclaimer in
|
|
141
|
+
** the documentation and/or other materials provided with the
|
|
142
|
+
** distribution.
|
|
143
|
+
**
|
|
144
|
+
** 3 Neither the name of the Standards Of Fundamental Astronomy Board,
|
|
145
|
+
** the International Astronomical Union nor the names of its
|
|
146
|
+
** contributors may be used to endorse or promote products derived
|
|
147
|
+
** from this software without specific prior written permission.
|
|
148
|
+
**
|
|
149
|
+
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
150
|
+
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
151
|
+
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
152
|
+
** FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
153
|
+
** COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
154
|
+
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
155
|
+
** BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
156
|
+
** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
157
|
+
** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
158
|
+
** LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
159
|
+
** ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
160
|
+
** POSSIBILITY OF SUCH DAMAGE.
|
|
161
|
+
**
|
|
162
|
+
**--------------------------------------------------------------------*/
|
|
163
|
+
}
|
data/ext/celes/utcut1.c
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
#include "sofam.h"
|
|
2
|
+
|
|
3
|
+
int iauUtcut1(double utc1, double utc2, double dut1,
|
|
4
|
+
double *ut11, double *ut12)
|
|
5
|
+
/*
|
|
6
|
+
** - - - - - - - - - -
|
|
7
|
+
** i a u U t c u t 1
|
|
8
|
+
** - - - - - - - - - -
|
|
9
|
+
**
|
|
10
|
+
** Time scale transformation: Coordinated Universal Time, UTC, to
|
|
11
|
+
** Universal Time, UT1.
|
|
12
|
+
**
|
|
13
|
+
** Status: canonical.
|
|
14
|
+
**
|
|
15
|
+
** Given:
|
|
16
|
+
** utc1,utc2 double UTC as a 2-part quasi Julian Date (Notes 1-4)
|
|
17
|
+
** dut1 double Delta UT1 = UT1-UTC in seconds (Note 5)
|
|
18
|
+
**
|
|
19
|
+
** Returned:
|
|
20
|
+
** ut11,ut12 double UT1 as a 2-part Julian Date (Note 6)
|
|
21
|
+
**
|
|
22
|
+
** Returned (function value):
|
|
23
|
+
** int status: +1 = dubious year (Note 7)
|
|
24
|
+
** 0 = OK
|
|
25
|
+
** -1 = unacceptable date
|
|
26
|
+
**
|
|
27
|
+
** Notes:
|
|
28
|
+
**
|
|
29
|
+
** 1) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any
|
|
30
|
+
** convenient way between the two arguments, for example where utc1
|
|
31
|
+
** is the Julian Day Number and utc2 is the fraction of a day.
|
|
32
|
+
**
|
|
33
|
+
** 2) JD cannot unambiguously represent UTC during a leap second unless
|
|
34
|
+
** special measures are taken. The convention in the present
|
|
35
|
+
** function is that the JD day represents UTC days whether the
|
|
36
|
+
** length is 86399, 86400 or 86401 SI seconds.
|
|
37
|
+
**
|
|
38
|
+
** 3) The warning status "dubious year" flags UTCs that predate the
|
|
39
|
+
** introduction of the time scale and that are too far in the future
|
|
40
|
+
** to be trusted. See iauDat for further details.
|
|
41
|
+
**
|
|
42
|
+
** 4) The function iauDtf2d converts from calendar date and time of
|
|
43
|
+
** day into 2-part Julian Date, and in the case of UTC implements
|
|
44
|
+
** the leap-second-ambiguity convention described above.
|
|
45
|
+
**
|
|
46
|
+
** 5) Delta UT1 can be obtained from tabulations provided by the
|
|
47
|
+
** International Earth Rotation and Reference Systems Service. It
|
|
48
|
+
** It is the caller's responsibility to supply a DUT argument
|
|
49
|
+
** containing the UT1-UTC value that matches the given UTC.
|
|
50
|
+
**
|
|
51
|
+
** 6) The returned ut11,ut12 are such that their sum is the UT1 Julian
|
|
52
|
+
** Date.
|
|
53
|
+
**
|
|
54
|
+
** 7) The warning status "dubious year" flags UTCs that predate the
|
|
55
|
+
** introduction of the time scale and that are too far in the future
|
|
56
|
+
** to be trusted. See iauDat for further details.
|
|
57
|
+
**
|
|
58
|
+
** References:
|
|
59
|
+
**
|
|
60
|
+
** McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
|
|
61
|
+
** IERS Technical Note No. 32, BKG (2004)
|
|
62
|
+
**
|
|
63
|
+
** Explanatory Supplement to the Astronomical Almanac,
|
|
64
|
+
** P. Kenneth Seidelmann (ed), University Science Books (1992)
|
|
65
|
+
**
|
|
66
|
+
** Called:
|
|
67
|
+
** iauJd2cal JD to Gregorian calendar
|
|
68
|
+
** iauDat delta(AT) = TAI-UTC
|
|
69
|
+
** iauUtctai UTC to TAI
|
|
70
|
+
** iauTaiut1 TAI to UT1
|
|
71
|
+
**
|
|
72
|
+
** This revision: 2010 May 16
|
|
73
|
+
**
|
|
74
|
+
** Original version 2012-03-01
|
|
75
|
+
**
|
|
76
|
+
** Copyright (C) 2013 Naoki Arita. See notes at end.
|
|
77
|
+
*/
|
|
78
|
+
{
|
|
79
|
+
int iy, im, id, js, jw;
|
|
80
|
+
double w, dat, dta, tai1, tai2;
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
/* Look up TAI-UTC. */
|
|
84
|
+
if ( iauJd2cal(utc1, utc2, &iy, &im, &id, &w) ) return -1;
|
|
85
|
+
js = iauDat ( iy, im, id, 0.0, &dat);
|
|
86
|
+
if ( js < 0 ) return -1;
|
|
87
|
+
|
|
88
|
+
/* Form UT1-TAI. */
|
|
89
|
+
dta = dut1 - dat;
|
|
90
|
+
|
|
91
|
+
/* UTC to TAI to UT1. */
|
|
92
|
+
jw = iauUtctai(utc1, utc2, &tai1, &tai2);
|
|
93
|
+
if ( jw < 0 ) {
|
|
94
|
+
return -1;
|
|
95
|
+
} else if ( jw > 0 ) {
|
|
96
|
+
js = jw;
|
|
97
|
+
}
|
|
98
|
+
if ( iauTaiut1(tai1, tai2, dta, ut11, ut12) ) return -1;
|
|
99
|
+
|
|
100
|
+
/* Status. */
|
|
101
|
+
return js;
|
|
102
|
+
|
|
103
|
+
/*----------------------------------------------------------------------
|
|
104
|
+
**
|
|
105
|
+
** Celes is a wrapper of the SOFA Library for Ruby.
|
|
106
|
+
**
|
|
107
|
+
** This file is redistributed and relicensed in accordance with
|
|
108
|
+
** the SOFA Software License (http://www.iausofa.org/tandc.html).
|
|
109
|
+
**
|
|
110
|
+
** The original library is available from IAU Standards of
|
|
111
|
+
** Fundamental Astronomy (http://www.iausofa.org/).
|
|
112
|
+
**
|
|
113
|
+
**
|
|
114
|
+
**
|
|
115
|
+
**
|
|
116
|
+
**
|
|
117
|
+
** Copyright (C) 2013, Naoki Arita
|
|
118
|
+
** All rights reserved.
|
|
119
|
+
**
|
|
120
|
+
** Redistribution and use in source and binary forms, with or without
|
|
121
|
+
** modification, are permitted provided that the following conditions
|
|
122
|
+
** are met:
|
|
123
|
+
**
|
|
124
|
+
** 1 Redistributions of source code must retain the above copyright
|
|
125
|
+
** notice, this list of conditions and the following disclaimer.
|
|
126
|
+
**
|
|
127
|
+
** 2 Redistributions in binary form must reproduce the above copyright
|
|
128
|
+
** notice, this list of conditions and the following disclaimer in
|
|
129
|
+
** the documentation and/or other materials provided with the
|
|
130
|
+
** distribution.
|
|
131
|
+
**
|
|
132
|
+
** 3 Neither the name of the Standards Of Fundamental Astronomy Board,
|
|
133
|
+
** the International Astronomical Union nor the names of its
|
|
134
|
+
** contributors may be used to endorse or promote products derived
|
|
135
|
+
** from this software without specific prior written permission.
|
|
136
|
+
**
|
|
137
|
+
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
138
|
+
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
139
|
+
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
140
|
+
** FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
141
|
+
** COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
142
|
+
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
143
|
+
** BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
144
|
+
** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
145
|
+
** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
146
|
+
** LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
147
|
+
** ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
148
|
+
** POSSIBILITY OF SUCH DAMAGE.
|
|
149
|
+
**
|
|
150
|
+
**--------------------------------------------------------------------*/
|
|
151
|
+
}
|