rfa 0.5.9

A port ERFA to Rust.
Documentation
use crate::all::apcg;
use crate::UrsaASTROM;
use crate::prec_nut::c2ixys::c2ixys;
///    For a terrestrial observer, prepare star-independent astrometry
///    parameters for transformations between ICRS and geocentric CIRS
///    coordinates.  The Earth ephemeris and CIP/CIO are supplied by the
///    caller.
/// 
///    The parameters produced by this function are required in the
///    parallax, light deflection, aberration, and bias-precession-nutation
///    parts of the astrometric transformation chain.
/// 
///    Given:
///       date1  double       TDB as a 2-part...
///       date2  double       ...Julian Date (Note 1)
///       ebpv   double[2][3] Earth barycentric position/velocity (au, au/day)
///       ehp    double[3]    Earth heliocentric position (au)
///       x,y    double       CIP X,Y (components of unit vector)
///       s      double       the CIO locator s (radians)
/// 
///    Returned:
///       astrom ursa_ASTROM*   star-independent astrometry parameters:
///        pmt    double       PM time interval (SSB, Julian years)
///        eb     double[3]    SSB to observer (vector, au)
///        eh     double[3]    Sun to observer (unit vector)
///        em     double       distance from Sun to observer (au)
///        v      double[3]    barycentric observer velocity (vector, c)
///        bm1    double       sqrt(1-|v|^2): reciprocal of Lorenz factor
///        bpn    double[3][3] bias-precession-nutation matrix
///        along  double       unchanged
///        xpl    double       unchanged
///        ypl    double       unchanged
///        sphi   double       unchanged
///        cphi   double       unchanged
///        diurab double       unchanged
///        ursa_l   double       unchanged
///        refa   double       unchanged
///        refb   double       unchanged
/// 
///    Notes:
/// 
///    1) The TDB date date1+date2 is a Julian Date, apportioned in any
///       convenient way between the two arguments.  For example,
///       JD(TDB)=2450123.7 could be expressed in any of these ways, among
///       others:
/// 
///              date1          date2
/// 
///           2450123.7           0.0       (JD method)
///           2451545.0       -1421.3       (J2000 method)
///           2400000.5       50123.2       (MJD method)
///           2450123.5           0.2       (date & time method)
/// 
///       The JD method is the most natural and convenient to use in cases
///       where the loss of sevursa_l decimal digits of resolution is
///       acceptable.  The J2000 method is best matched to the way the
///       argument is handled internally and will deliver the optimum
///       resolution.  The MJD method and the date & time methods are both
///       good compromises between resolution and convenience.  For most
///       applications of this function the choice will not be at all
///       critical.
/// 
///       TT can be used instead of TDB without any significant impact on
///       accuracy.
/// 
///    2) All the vectors are with respect to BCRS axes.
/// 
///    3) In cases where the caller does not wish to provide the Earth
///       ephemeris and CIP/CIO, the function ursa_Apci13 can be used instead
///       of the present function.  This computes the required quantities
///       using other ERFA functions.
/// 
///    4) This is one of sevursa_l functions that inserts into the astrom
///       structure star-independent parameters needed for the chain of
///       astrometric transformations ICRS <-> GCRS <-> CIRS <-> observed.
/// 
///       The various functions support different classes of observer and
///       portions of the transformation chain:
/// 
///            functions         observer        transformation
/// 
///         ursa_Apcg ursa_Apcg13    geocentric      ICRS <-> GCRS
///         ursa_Apci ursa_Apci13    terrestrial     ICRS <-> CIRS
///         ursa_Apco ursa_Apco13    terrestrial     ICRS <-> observed
///         ursa_Apcs ursa_Apcs13    space           ICRS <-> GCRS
///         ursa_Aper ursa_Aper13    terrestrial     update Earth rotation
///         ursa_Apio ursa_Apio13    terrestrial     CIRS <-> observed
/// 
///       Those with names ending in "13" use contemporary ERFA models to
///       compute the various ephemerides.  The others accept ephemerides
///       supplied by the caller.
/// 
///       The transformation from ICRS to GCRS covers space motion,
///       parallax, light deflection, and aberration.  From GCRS to CIRS
///       comprises frame bias and precession-nutation.  From CIRS to
///       observed takes account of Earth rotation, polar motion, diurnal
///       aberration and parallax (unless subsumed into the ICRS <-> GCRS
///       transformation), and atmospheric refraction.
/// 
///    5) The context structure astrom produced by this function is used by
///       ursa_Atciq* and ursa_Aticq*.
/// 
///    Called:
///       ursa_Apcg      astrometry parameters, ICRS-GCRS, geocenter
///       ursa_C2ixys    celestial-to-intermediate matrix, given X,Y and s
pub fn apci(date1:f64, date2:f64,
    ebpv: &[[f64;3];2], ehp: &[f64;3],
    x:f64, y:f64, s:f64,
    astrom: &mut UrsaASTROM)
{

/* Star-independent astrometry parameters for geocenter. */
   apcg(date1, date2, &ebpv, &ehp, astrom);

/* CIO based BPN matrix. */
   c2ixys(x, y, s, &mut astrom.bpn);

/* Finished. */

}