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); }
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); }