/// <summary> /// 计算大气延迟。 Computes the acceleration due to the atmospheric drag. /// </summary> /// <param name="Mjd_TT">Mjd_TT Terrestrial Time (Modified Julian Date)</param> /// <param name="satXyz">r Satellite position vector in the inertial system [m]</param> /// <param name="satVelocity"> v Satellite velocity vector in the inertial system [m/s]</param> /// <param name="transMatrix"> T Transformation matrix to true-of-date inertial system</param> /// <param name="Area">Area Cross-section [m^2]</param> /// <param name="mass"> mass Spacecraft mass [kg]</param> /// <param name="atmosDragCoeff"> coefOfDrag Drag coefficient</param> /// <returns>Acceleration (a=d^2r/dt^2) [m/s^2]</returns> public static Geo.Algorithm.Vector AccelerDragOfAtmos(double Mjd_TT, Geo.Algorithm.Vector satXyz, Geo.Algorithm.Vector satVelocity, Matrix transMatrix, double Area, double mass, double atmosDragCoeff) { // Earth angular velocity vector [rad/s] double[] Data_omega = { 0.0, 0.0, 7.29212e-5 }; Geo.Algorithm.Vector omega = new Geo.Algorithm.Vector(Data_omega, 3); // Variables double v_abs, dens; Geo.Algorithm.Vector r_tod = new Geo.Algorithm.Vector(3), v_tod = new Geo.Algorithm.Vector(3); Geo.Algorithm.Vector v_rel = new Geo.Algorithm.Vector(3), a_tod = new Geo.Algorithm.Vector(3); Matrix T_trp = new Matrix(3, 3); // Transformation matrix to ICRF/EME2000 system T_trp = transMatrix.Transpose(); // Position and velocity in true-of-date system r_tod = transMatrix * satXyz; v_tod = transMatrix * satVelocity; // Velocity relative to the Earth's atmosphere v_rel = v_tod - omega.Cross3D(r_tod); v_abs = v_rel.Norm(); // Atmospheric density due to modified Harris-Priester model dens = TerrestrialUtil.AtmosDensity_HP(Mjd_TT, r_tod); // Acceleration a_tod = -0.5 * atmosDragCoeff * (Area / mass) * dens * v_abs * v_rel; return(T_trp * a_tod); }
/// <summary> /// A_Diff: Function computes the difference of acceleration due to SRP and DRG /// </summary> /// <param name="h"> h Height [m]</param> /// <returns>Difference of acceleration</returns> public static double A_Diff(double h) { double CD = 2.3; // Spacecraft parameters double CR = 1.3; double Mjd_TT = 51269.0; // State epoch Vector r = new Vector(1.0, 0.0, 0.0) * (Force.Grav.R_ref + h); double dens = TerrestrialUtil.AtmosDensity_HP(Mjd_TT, r); return((0.5 * CD * dens * Force.Grav.GM / (Force.Grav.R_ref + h)) - (OrbitConsts.PressureOfSolarRadiationPerAU * CR)); }