Skip to Content
GuidesAnalyzingEclipse and power sizing

Eclipse and power sizing

What you will accomplish

The eclipse profile of every satellite in a constellation, and the number a battery is actually sized from, which is not the one the summary averages to.

Prerequisites

  • A constellation.

Steps

Run the analysis

orbitforge eclipse \ --constellation ph1.json \ --duration-hours 24 --step-seconds 60
Eclipse analysis: 60 satellites over 24.0 h at 60 s scan steps using two_body. ph1-s0-p00-sat00: sunlit 64.7%, umbra 30222 s, penumbra 306 s, 45 intervals ph1-s0-p00-sat01: sunlit 64.4%, umbra 30472 s, penumbra 315 s, 47 intervals ph1-s0-p00-sat02: sunlit 64.3%, umbra 30519 s, penumbra 305 s, 46 intervals

Get the intervals, not the totals

orbitforge eclipse --constellation ph1.json \ --duration-hours 24 --step-seconds 60 \ --output eclipse.json --csv eclipse.csv
{ "start": "2026-06-21T00:54:44.296875Z", "end": "2026-06-21T00:54:54.140625Z", "duration_s": 9.84375, "state": "penumbra", "max_obscuration": 1.0 }

Reading the interval count

“45 intervals” is not 45 eclipses. Each orbital shadow passage produces three intervals:

penumbra (entering) -> umbra -> penumbra (leaving)

For one satellite over 24 hours: 15 umbra intervals and 30 penumbra intervals. Fifteen is the orbit count, which matches a 95.65-minute period.

QuantityValue
Umbra passages per day15
Each umbra passage2010 s (33.5 min)
Each penumbra crossing9.8 s
Umbra total30150 s

The penumbra crossing is under 10 seconds. At LEO the transition into darkness is effectively a step, and a power model that treats it as a gradual ramp is adding detail that does not exist. Scan steps are 60 seconds while entry and exit times are refined to 0.5 s, so those short intervals are resolved properly rather than quantized to the step.

The constellation mean is the wrong number

Run the same constellation at a solstice and break the result down by plane:

orbitforge eclipse --constellation ph1.json \ --start 2026-06-21T00:00:00Z --duration-hours 24 --step-seconds 60
PlaneUmbra per day, mean
p0030248 s
p0131953 s
p0228962 s
p030 s
p0428890 s
p0531942 s

Plane p03 is in full sunlight for the entire day. All ten of its satellites eclipse for zero seconds, while the worst satellite in the constellation, ph1-s0-p05-sat09, spends 32141 s in umbra, which is 37.2 percent of the day.

Same shell, same altitude, same inclination, same spacecraft. The only difference is where each plane’s node sits relative to the Sun.

The constellation-wide mean at this epoch is about 25332 s. Sizing a battery from that mean under-sizes the worst satellite by 27 percent.

The easiest plane becomes the hardest

The obvious response is to size each plane for its own conditions. Run the same constellation at an equinox:

PlaneUmbra at solsticeUmbra at equinox
p0030248 s32042 s
p0131953 s27294 s
p0228962 s27329 s
p030 s32038 s
p0428890 s27269 s
p0531942 s27299 s

Plane p03 goes from the only plane with no eclipse at all to one of the two worst in the constellation.

At the equinox no plane escapes: the spread narrows to 27269 to 32042 s, and every satellite is eclipsed on every orbit.

The number to size from is each satellite’s worst case over the year, not its value at any one epoch. Since the identity of the worst plane rotates, in a homogeneous shell that reduces to a single figure applied to every spacecraft, here about 32240 s per day and a 33.5-minute maximum single eclipse.

Full-sun periods are not a bonus to design around. They are a thermal problem arriving in place of a power one, and they end.

Why the plane matters: beta angle

What separates the planes is the angle between the orbit plane and the Sun direction. A plane whose node faces the Sun is edge-on to the terminator and spends the least time in shadow; at a high enough beta angle it misses the shadow entirely, which is what p03 is doing.

Two things move that angle, and they move at very different speeds:

EffectRate
The Sun’s apparent motionabout 0.986 deg/day
J2 nodal regression-4.489 deg/day

The nodal regression figure is measured for this exact shell in Doppler and orbital elements, where it is checked against the closed form.

Nodal regression is more than four times faster than the Sun’s motion, so it dominates how quickly a plane’s illumination changes.

The runs above hold the pattern fixed and move the Sun, which isolates the geometry cleanly but understates how fast a real plane cycles. To see the true rate, propagate with --model j2 over a span of weeks rather than comparing 24-hour snapshots at different dates.

A generated constellation carries no epoch, so --start re-anchors the whole pattern rather than advancing it. That is the mechanism these comparisons rely on and the reason they are snapshots rather than a time history.

What to hand a power engineer

  1. Maximum single eclipse duration, which sets depth of discharge.
  2. Maximum eclipse fraction per orbit, which sets the recharge ratio.
  3. Worst-case eclipse seconds per day, over a year, not at one epoch.
  4. The longest full-sun period, for the thermal case.
  5. The propagation model and window, since the summary prints the model.

Note the model line says two_body. Eclipse geometry is not sensitive to J2 over a single day, but the plane’s beta angle very much is over weeks, so use j2 or better for anything spanning more than a few days.

Checklist

  1. Are you quoting a per-satellite worst case or a constellation mean?
  2. Did you check more than one epoch across the year?
  3. Did you read “intervals” as eclipses, when it counts penumbra crossings too?
  4. For multi-week spans, are you using a model with nodal regression?
  5. Have you considered the full-sun case as a thermal requirement?

Next steps

Question? Give us feedbackDocuments Varaha Constellation Designer main (pre-release)
Last updated on