private (double BX, double BY, double BZ) FieldGeocentric(double slam, double clam,
                                                                  out double BXt, out double BYt, out double BZt)
        {
            double BXc = 0, BYc = 0, BZc = 0;

            _circ0.Evaluate(slam, clam, out var BX, out var BY, out var BZ);
            _circ1.Evaluate(slam, clam, out BXt, out BYt, out BZt);
            if (_constterm)
            {
                _circ2.Evaluate(slam, clam, out BXc, out BYc, out BZc);
            }
            if (_interpolate)
            {
                BXt = (BXt - BX) / _dt0;
                BYt = (BYt - BY) / _dt0;
                BZt = (BZt - BZ) / _dt0;
            }
            BX += _t1 * BXt + BXc;
            BY += _t1 * BYt + BYc;
            BZ += _t1 * BZt + BZc;

            BXt *= -_a;
            BYt *= -_a;
            BZt *= -_a;

            BX *= -_a;
            BY *= -_a;
            BZ *= -_a;

            return(BX, BY, BZ);
        }
Exemple #2
0
        private (double V, double GX, double GY, double GZ) V(double slam, double clam)
        {
            if (_caps.HasFlag(GravityFlags.Gravity))
            {
                return(double.NaN, double.NaN, double.NaN, double.NaN);
            }
            double
                Vres = _gravitational.Evaluate(slam, clam, out var GX, out var GY, out var GZ),
                f    = _GMmodel / _amodel;

            Vres *= f;
            GX   *= f;
            GY   *= f;
            GZ   *= f;
            return(Vres, GX, GY, GZ);
        }