/rust/registry/src/index.crates.io-1949cf8c6b5b557f/sofars-0.6.1/src/pnp/c2t00a.rs
Line | Count | Source |
1 | | use crate::erst::era00; |
2 | | use crate::pnp::{c2i00a, c2tcio, pom00, sp00}; |
3 | | |
4 | | /// Form the celestial to terrestrial matrix given the date, the UT1 and |
5 | | /// the polar motion, using the IAU 2000A precession-nutation model. |
6 | | /// |
7 | | /// Given: |
8 | | /// tta,ttb f64 TT as a 2-part Julian Date (Note 1) |
9 | | /// uta,utb f64 UT1 as a 2-part Julian Date (Note 1) |
10 | | /// xp,yp f64 CIP coordinates (radians, Note 2) |
11 | | /// |
12 | | /// Returned (function value): |
13 | | /// [[f64; 3]; 3] celestial-to-terrestrial matrix (Note 3) |
14 | | /// |
15 | | /// Notes: |
16 | | /// |
17 | | /// 1) The TT and UT1 dates tta+ttb and uta+utb are Julian Dates, |
18 | | /// apportioned in any convenient way between the arguments uta and |
19 | | /// utb. For example, JD(UT1)=2450123.7 could be expressed in any of |
20 | | /// these ways, among others: |
21 | | /// |
22 | | /// uta utb |
23 | | /// |
24 | | /// 2450123.7 0.0 (JD method) |
25 | | /// 2451545.0 -1421.3 (J2000 method) |
26 | | /// 2400000.5 50123.2 (MJD method) |
27 | | /// 2450123.5 0.2 (date & time method) |
28 | | /// |
29 | | /// The JD method is the most natural and convenient to use in |
30 | | /// cases where the loss of several decimal digits of resolution is |
31 | | /// acceptable. The J2000 and MJD methods are good compromises |
32 | | /// between resolution and convenience. In the case of uta,utb, the |
33 | | /// date & time method is best matched to the Earth rotation angle |
34 | | /// algorithm used: maximum precision is delivered when the uta |
35 | | /// argument is for 0hrs UT1 on the day in question and the utb |
36 | | /// argument lies in the range 0 to 1, or vice versa. |
37 | | /// |
38 | | /// 2) The arguments xp and yp are the coordinates (in radians) of the |
39 | | /// Celestial Intermediate Pole with respect to the International |
40 | | /// Terrestrial Reference System (see IERS Conventions 2003), |
41 | | /// measured along the meridians 0 and 90 deg west respectively. |
42 | | /// |
43 | | /// 3) The matrix rc2t transforms from celestial to terrestrial |
44 | | /// coordinates: |
45 | | /// |
46 | | /// [TRS] = RPOM * R_3(ERA) * RC2I * [CRS] |
47 | | /// |
48 | | /// = rc2t * [CRS] |
49 | | /// |
50 | | /// where [CRS] is a vector in the Geocentric Celestial Reference |
51 | | /// System and [TRS] is a vector in the International Terrestrial |
52 | | /// Reference System (see IERS Conventions 2003), RC2I is the |
53 | | /// celestial-to-intermediate matrix, ERA is the Earth rotation |
54 | | /// angle and RPOM is the polar motion matrix. |
55 | | /// |
56 | | /// 4) A faster, but slightly less accurate, result (about 1 mas) can |
57 | | /// be obtained by using instead the iauC2t00b function. |
58 | | /// |
59 | | /// Called: |
60 | | /// iauC2i00a celestial-to-intermediate matrix, IAU 2000A |
61 | | /// iauEra00 Earth rotation angle, IAU 2000 |
62 | | /// iauSp00 the TIO locator s', IERS 2000 |
63 | | /// iauPom00 polar motion matrix |
64 | | /// iauC2tcio form CIO-based celestial-to-terrestrial matrix |
65 | | /// |
66 | | /// Reference: |
67 | | /// |
68 | | /// McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003), |
69 | | /// IERS Technical Note No. 32, BKG (2004) |
70 | 0 | pub fn c2t00a(tta: f64, ttb: f64, uta: f64, utb: f64, xp: f64, yp: f64) -> [[f64; 3]; 3] { |
71 | | /* Form the celestial-to-intermediate matrix for this TT (IAU 2000A). */ |
72 | 0 | let rc2i = c2i00a(tta, ttb); |
73 | | |
74 | | /* Predict the Earth rotation angle for this UT1. */ |
75 | 0 | let era = era00(uta, utb); |
76 | | |
77 | | /* Estimate s'. */ |
78 | 0 | let sp = sp00(tta, ttb); |
79 | | |
80 | | /* Form the polar motion matrix. */ |
81 | 0 | let rpom = pom00(xp, yp, sp); |
82 | | |
83 | | /* Combine to form the celestial-to-terrestrial matrix. */ |
84 | 0 | c2tcio(&rc2i, era, &rpom) |
85 | 0 | } |