I was trying to write a very simple program to calculate orbit life time of a nano-satellite. I got the atmosphere density as function of altitude from this site.

ALT(km)         DENSITY(kg/m^3)
0               1.17E+00
20              9.49E-02
40              4.07E-03
60              3.31E-04
80              1.68E-05
100             5.08E-07
120             1.80E-08
140             3.26E-09
160             1.18E-09
180             5.51E-10
200             2.91E-10
220             1.66E-10
240             9.91E-11
260             6.16E-11
280             3.94E-11
300             2.58E-11
320             1.72E-11
340             1.16E-11
360             7.99E-12
380             5.55E-12
400             3.89E-12
420             2.75E-12
440             1.96E-12
460             1.40E-12
480             1.01E-12
500             7.30E-13
520             5.31E-13
540             3.88E-13
560             2.85E-13
580             2.11E-13
600             1.56E-13
620             1.17E-13
640             8.79E-14
660             6.65E-14
680             5.08E-14
700             3.91E-14

  • program uses simple rk4 integrator with earth as sphere
  • program finds drag = $1/2 C_d\rho A v^2$, with $C_d$ as 2.2
  • program assumes mean solar activity
  • the state vector is initialised for circular orbit
  • the atmospheric density is taken from the link above and linear interpolated for the altitudes in between.

$C_d$ according to this paper which I just skim through says can be taken between 2.0-2.2 The part of the program that calculates the acceleration is as follows:

#define REARTH (6400.0)       // Radius of earth in Km
#define AREA   (0.1 * 1.0E-6) // 0.1 m^2
#define MASS   (14)           // 14 Kg
#define CD     (2.2)
// mu = 3.986004418E5 km^3/s^2
  pos = subm(sv, range(0, 2), range(0, 0));
  vel = subm(sv, range(3, 5), range(0, 0));

  r = length(pos);
  g = - mu / (r*r*r) * pos;
  alt = r - REARTH;
  // gd() returns density in kg/km^3 
  pho = gd(alt);

  drag = -  1.0 * CD * pho * AREA / MASS * vel * length(vel) / 2.0;

  dydx(0) = vel(0);
  dydx(1) = vel(1);
  dydx(2) = vel(2);

  gpdrag = g + drag;

  dydx(3) = gpdrag(0);
  dydx(4) = gpdrag(1);
  dydx(5) = gpdrag(2);

when I run this program, within 70 days orbit decays to less than 100.0 km for 350.0 km. This looks to be too less of a time, Am I assuming something wrong or totally off here?

I have assumed spherical earth, the difference between poles and equator is merely 22 km. So does SSPO or equatorial orbit make a difference for this conclusion?

I have added plots for various circular orbit altitudes. Various Altitude Orbit Lifetime

  • 1
    $\begingroup$ Atmosphere density can vary dramatically depending on the activity of the Sun which heats and expands the upper atmosphere. I think this certainly in the right ballpark. Try simulating larger satellites with known sizes and masses and see if the time is longer as you might expect. Drag scales as size squared but mass as size cubed, so delta-v rate due to drag will be area/mass or 1/size. $\endgroup$
    – uhoh
    Commented Oct 31, 2020 at 23:30
  • 1
    $\begingroup$ Agreed, infact therr is a question asked by you where the variability of drag is highlighted. I am aware of that. Infact doing simulation with peak solar activity the orbit life time is just couple of days But this raises an importat question that means generally nano satellite quote 6 months life, so that means most nano satellites are in much higher altitude? $\endgroup$
    – zephyr0110
    Commented Nov 1, 2020 at 2:26
  • $\begingroup$ @uhoh density I took as a look up table from the link in the equation and linear interpolated for in between values. All calculations are done in km, kg and seconds. I did find nano satellites for 500, 600 km when I searched, with orbit lifetimes in years. Was not able to find 300-350km Nanosats. $\endgroup$
    – zephyr0110
    Commented Nov 1, 2020 at 5:46
  • 1
    $\begingroup$ @uhoh The table being quite big, I thought was not good idea to be put into the question. I have put into the question the table I have got. And I have no problem in writing the code, or pseudo code too, but that makes the question lengthy. That's why I wrote assumption and simple steps how I got there. In whole program only the acceleration experienced at each point is necessary, therefore I included code of that and all parameters used in code are in the defines. With your inputs I have edited the question. $\endgroup$
    – zephyr0110
    Commented Nov 1, 2020 at 6:07
  • $\begingroup$ Thank you! I appreciate the edit very much, I'll double check it today. $\endgroup$
    – uhoh
    Commented Nov 1, 2020 at 6:18

1 Answer 1


Some general code-review.

Overall the assumptions look okay, but the how the decay is actually calculated could be clearer.

the atmospheric density is taken from the link above and linear interpolated for the altitudes in between.

While I agree that this is a perfectly reasonable approach, the table does have some sparse values where linear interpolation is not appropriate:

0               1.17E+00
20              9.49E-02
40              4.07E-03

At that point though, your satellite is already smashing into the ground within seconds anyway, so it's probably fine.

#define REARTH (6400.0) // Radius of earth in Km

This is larger than any radius of the Earth, both the equatorial 6378.1km and polar 6356.8km. More accurate constants doesn't cost you anything, and makes clearer what assumptions you made.


#define MASS (14) // 14 Kg

Nano-satellites are typically defined to be less than 10kg.

gpdrag = g + drag

You're adding vector quantities together. It's hard to tell without knowing how vectors are handled in your code though, and it's probably fine. But incorrect handling of vectors is a major source of incorrect simulations in general.

program assumes mean solar activity

This is not a safe assumption, as density varies a lot by solar activity at those altitudes. Try getting data for both lows and highs and run your simulation for both. There should be a vast lifetime difference.

1.0 […] / 2.0

This is not a floating point constant, it's exactly 1/2 by the drag formula. The decimal notation here is confusing.

I have assumed spherical earth, the difference between poles and equator is merely 22 km. So does SSPO or equatorial orbit make a difference for this conclusion?

By your own plots, 22km or even just 10km does make a large difference in lifetime.

Sanity check: Do the curves have the same shape after dropping below the same altitude? Yes!

sanity check

And finally, is 70 days a believable value for 350km?

From a figure in An Evaluation of Cube Sat Orbital Decay, this does indeed look reasonable:


  • $\begingroup$ thankyou ! for the review and the source for orbit decay for a cube-sat ! Ah! you are right about the 22 km part. It does make a difference, but then I think I have to simulate earth as ellipsoid and calculate altitude like that, but then I am really not sure whether this altitude is geodetic or geocentric altitude in the table :| But I guess the results are somewhat surprising to me personally ! $\endgroup$
    – zephyr0110
    Commented Nov 1, 2020 at 15:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.