A debris fragment population produced by the NASA Standard Satellite Breakup
Model (SSBM), EVOLVE 4.0 revision.
Instances are never constructed directly — use
BreakupEvent.explosion
or
BreakupEvent.collision, which invoke the model inside the
wasm-engine and copy the resulting population out of the module heap.
Every quantity on this class is derived by the model from the
published equations: the fragment count comes from the power-law size
distribution, area-to-mass ratios from the bimodal log-normal distributions
(with distinct spacecraft and rocket-body branches), areas and masses from
the A/M relation, and the ejection velocity from the log-normal ΔV
distribution conditioned on A/M. Nothing here is tuned for appearance, and
no consumer may substitute an invented fragment count, A/M, or ΔV.
Frames and units. The model is frame-agnostic — it adds an isotropic
ΔV to whatever parent state it is given. Fragment states are therefore
expressed in the same frame as the parent state supplied to the factory, and
that frame must be inertial for the resulting velocities to be
physical. All lengths are metres, masses kilograms, velocities metres per
second, areas square metres, and area-to-mass ratios square metres per
kilogram.
See:
Members
See:
See:
Per-fragment cross-sectional area, in square metres.
Per-fragment area-to-mass ratio, in square metres per kilogram.
Per-fragment characteristic length Lc, in metres.
Number of fragments in the population.
Packed per-fragment ejection ΔV vectors
[dvx0, dvy0, dvz0, dvx1, ...], in metres per second.
The instant the breakup occurred, when supplied to the factory.
Which fragmentation mechanism produced this population.
The mass budget the model was asked to fragment, in kilograms.
Whether the event was catastrophic. Explosions always are; a collision is
catastrophic when the projectile's specific kinetic energy on the target
exceeds the model's 40 J/g threshold, which selects a different size
distribution and fragments the combined mass rather than only the
excavated mass.
Per-fragment mass, in kilograms.
The lower characteristic-length cutoff applied to the size distribution,
in metres.
The parent object class whose area-to-mass branch was sampled.
The mass actually carried by the generated population, in kilograms.
The frame the parent state was expressed in, and therefore the frame every
fragment state is expressed in.
The seed that made this population reproducible, or undefined
when the model was allowed to draw its own entropy.
Methods
Generate the fragment population for a collision between a target and a
projectile, using the NASA Standard Satellite Breakup Model.
The model classifies the impact itself: when the projectile's specific
kinetic energy on the target exceeds 40 J/g the collision is catastrophic
and the combined mass fragments; otherwise only the mass the projectile
excavates fragments, and the cratered target remainder is carried as a
fragment. Inspect
BreakupEvent#isCatastrophic on the result — never
assume which regime a given encounter falls in.
| Name |
Type |
Description |
options |
object
|
Object with the following properties:
| Name |
Type |
Default |
Description |
target |
object
|
|
The struck body: characteristicLength
(m), mass (kg), position (m, inertial),
velocity (m/s, inertial), and optional
objectClass. |
projectile |
object
|
|
The impacting body, same shape as
options.target. |
epoch |
JulianDate
|
|
optional
The instant of the collision, recorded on
the result and required by DebrisCloud. |
minimumCharacteristicLength |
number
|
0.05
|
optional
Lower
Lc cutoff on the size distribution, in metres. |
seed |
number
|
|
optional
Seed making the population reproducible. |
enforceMassConservation |
boolean
|
false
|
optional
Top the population
up until its mass meets the input budget, and prepend the cratered
target remainder for a non-catastrophic impact. |
referenceFrame |
ReferenceFrame
|
ReferenceFrame.INERTIAL
|
optional
The
frame both parent states are expressed in. |
|
Returns:
The generated fragment population.
Throws:
-
DeveloperError
: The wasm-engine must be initialized on the SDK
artifact path.
Example:
const event = Cesium.BreakupEvent.collision({
target: {
characteristicLength: 4.0, mass: 900.0,
position: targetPositionInertial, velocity: targetVelocityInertial,
},
projectile: {
characteristicLength: 0.4, mass: 6.0,
position: targetPositionInertial, velocity: impactorVelocityInertial,
},
epoch: impactTime,
seed: 20260729,
});
Generate the fragment population for an anomalous or deliberate explosion of
a single parent body, using the NASA Standard Satellite Breakup Model.
| Name |
Type |
Description |
options |
object
|
Object with the following properties:
| Name |
Type |
Default |
Description |
characteristicLength |
number
|
|
The parent's characteristic
length Lc, in metres. |
mass |
number
|
|
The parent's mass, in kilograms. |
position |
Cartesian3
|
|
The parent's position, in metres, in an
inertial frame. |
velocity |
Cartesian3
|
|
The parent's velocity, in metres per
second, in the same inertial frame. |
objectClass |
number
|
BreakupEvent.ObjectClass.SPACECRAFT
|
optional
Which area-to-mass branch of the model to sample. |
epoch |
JulianDate
|
|
optional
The instant of the breakup, recorded on
the result and required by DebrisCloud. |
minimumCharacteristicLength |
number
|
0.05
|
optional
Lower
Lc cutoff on the size distribution, in metres. Smaller
cutoffs produce dramatically larger populations. |
seed |
number
|
|
optional
Seed making the population reproducible.
Omit to let the model draw its own entropy. |
enforceMassConservation |
boolean
|
false
|
optional
Top the population
up until its mass meets the input budget. Excess mass is always
trimmed regardless of this flag. |
referenceFrame |
ReferenceFrame
|
ReferenceFrame.INERTIAL
|
optional
The
frame the parent state is expressed in, recorded on the result. |
|
Returns:
The generated fragment population.
Throws:
-
DeveloperError
: The wasm-engine must be initialized on the SDK
artifact path.
Example:
const event = Cesium.BreakupEvent.explosion({
characteristicLength: 3.0,
mass: 1500.0,
objectClass: Cesium.BreakupEvent.ObjectClass.ROCKET_BODY,
position: parentPositionInertial,
velocity: parentVelocityInertial,
epoch: breakupTime,
minimumCharacteristicLength: 0.2,
seed: 20260729,
});
console.log(`${event.count} fragments, ${event.outputMass} kg`);
Whether the loaded wasm-engine artifact exposes the breakup model. The model
is only present on the SDK artifact path.
Returns:
Read one fragment out of the population.
| Name |
Type |
Description |
index |
number
|
Fragment index, in [0, count). |
result |
object
|
optional
Object to store the result in. |
Returns:
The fragment:
index,
characteristicLength (m),
areaToMassRatio
(m²/kg),
area (m²),
mass (kg),
position and
velocity (m, m/s, in
BreakupEvent#referenceFrame) and
deltaVelocity
(m/s).
Indices of the population ordered by descending fragment mass, optionally
truncated.
Note that truncating this list keeps only the heaviest fragments, which is a
biased view of a debris cloud: fragment mass and area-to-mass ratio
are inversely related, so the heavy tail all shares a similar low A/M and the
high-A/M fragments that dominate the cloud's later evolution are exactly the
ones dropped. Prefer BreakupEvent#stratifiedIndicesByMass when
choosing a subset to display.
| Name |
Type |
Description |
maximumCount |
number
|
optional
Keep at most this many indices. |
Returns:
Fragment indices, largest mass first.
A subset of the population that spans its full mass range: the fragments are
ordered by descending mass and then sampled at even intervals, so the subset
covers the heavy low-A/M tail and the light high-A/M tail alike.
This is the honest way to display a bounded number of fragments. It is a
display choice only — the population itself is never resampled or thinned,
and BreakupEvent#count remains the number the model generated.
| Name |
Type |
Description |
maximumCount |
number
|
optional
Keep at most this many indices. Omit to get
the whole population, largest mass first. |
Returns:
Fragment indices, largest mass first.