An Introduction to the Physics of High-Altitude Ballooning

Weather balloons, or high-altitude balloons (HABs), are ubiquitous in our modern world. Launched at least twice a day from around 1000 locations in the world, they are used as disposable platforms to carry various types of sondes into the atmosphere to collect data that is then aggregated by supercomputers to generate global weather forecast models. HABs are also popular in amateur radio, scientific, and education communities due to the ease of access they provide to the stratosphere for testing of equipment or development of STEM skills in students. This section will attempt to provide a foundational understanding of the mathematics involved in the (1-dimensional) vertical motion of HABs.

We start our analysis by first drawing a free-body diagram (FBD) to delineate all forces acting on the system (i.e. the balloon), represented by the circle. Up will be assumed as the positive direction in all FBDs on this page. We will now explore each of the forces depicted.

Free-Body Diagram of Ascending Balloon

W_{payload} : This is the weight of any equipment suspended from the bottom of the balloon, including payloads and tethers.

W_{payload} = m_{payload} \times g

W_{balloon} : This is the weight of balloon envelope material (i.e. the latex), and any equipment that forms part of the envelope, such as valves at the top or bottom of the balloon.

W_{balloon} = m_{balloon} \times g

W_{gas} : This is the weight of the gas contained within the balloon (i.e. helium or hydrogen).

W_{gas} = m_{gas} \times g

However, recall that mass can be written in terms of density and volume such that m = \rho \times V. Hence:

W_{gas} = \rho_{gas} \times V_{balloon} \times g

F_{buoyancy} : This is the buoyant force caused by the lifting gas displacing a volume of air, and is given by density of the displaced gas ( \rho_{air} ) times the displaced volume (V_{balloon}) times acceleration due to gravity (g). A thorough explanation of the derivation of this formula can be found on the Khan Academy website here.

F_{buoyancy} = \rho_{air} \times V_{balloon}\times g

F_{drag} : This is the force opposing the motion of the balloon system through the air. In the case that the balloon is moving up, the drag acts down against the direction of motion, and vice versa.

F_{drag} = \frac{1}{2} \times C_D \times \rho_{air} \times A \times v^2
  • v is the magnitude of the velocity, or vertical rate, of the system.
  • C_d is the coefficient of drag, and depends on factors such as the size and shape of the balloon. Making the assumption of a spherical balloon, a reasonable value is between 0.3 and 0.4.
  • A is the reference area in the direction of motion, which in this case is simply a circular cross-section of the balloon at its widest point whose area is given by A=\pi \times r^2, where r is its radius.
    Cross-Sectional Reference Area of Balloon

2. Deriving the equation of motion for ascent

Now that we have analysed each of the forces acting and stated their formulas in the previous section, we can balance these forces in an equation in order to solve for vertical rate or gas volume. For a constant ascent rate, there will be a net zero force acting on the system. Taking the up direction as positive and summing all forces, we get:

\sum F = 0

\begin{array}{cccccccccccc} \therefore & F_{buoyancy} & – & F_{drag} & – & W_{payload} & – & W_{balloon} & – & W_{gas} & = & 0 \\ \\ &[\rho_{air}\:V_{balloon}\:g] & – & [\frac{1}{2} \: C_D \: \rho_{air} \: \pi \: r^2 \: v^2] & – & [m_{payload}\:g] & – & [m_{balloon}\:g] & – & [\rho_{gas}\:V_{balloon}\:g] & = & 0 \end{array}

Rearranging and factorising:

(\rho_{air}\:-\:\rho_{gas})\:V_{balloon}\:g \;-\; (m_{balloon}\:+\:m_{payload})\:g\;-\;(\frac{1}{2} \: C_D \: \rho_{air} \: \pi \: r^2 \: v^2) = 0

We will now express the volume of the balloon in terms of its radius, which makes the assumption of a spherical balloon to simplify calculations:

V_{balloon}=\frac{4}{3} \pi r^3

We will also combine the mass of balloon and payload into the term m_C:

m_C=m_{balloon}\:+\:m_{payload}

Substituting these back in:

(\rho_{air}\:-\:\rho_{gas})\:(\frac{4}{3}\: \pi\: r^3)\:g \;-\; m_C\:g\;-\;\frac{1}{2} \: C_D \: \rho_{air} \: \pi \: r^2 \: v^2 = 0

Rearranging, we get:

\boldsymbol{8 g \pi (\rho_{air} – \rho_{gas}) r^3 \enspace-\enspace 3 C_D \pi \rho_{air} v^2 r^2 \enspace-\enspace 6 g m_C \enspace=\enspace 0}

3. Solving for gas volume given a desired ascent rate

If we want to calculate the amount of lifting gas to fill a balloon in order to reach a desired ascent rate, we must first solve the above equation for r, which is a cubic equation of the form:

ar^3+br^2+cr+d=0 \\[10pt] where: \\[10pt] \begin{array}{ccl} a & = & 8 g \pi (\rho_{air} – \rho_{gas}) \\[5pt] b & = & -3 C_D \pi \rho_{air} v^2 \\[5pt] c & = & 0 \\[5pt] d & = & -6 g m_C \end{array}

We will use a technique called Cardano’s Method in order to find the real root of the equation, which states that for an equation of the form:

t^3 + pt + q = 0

it has a real root of:

\sqrt[3]{-\frac{q}{2}+\sqrt{\frac{q^2}{4}+\frac{p^3}{27}}} + \sqrt[3]{-\frac{q}{2}-\sqrt{\frac{q^2}{4}+\frac{p^3}{27}}}

However, we will first need to manipulate our derived equation of motion into the required form in order to apply Cardano’s Method. This involves “depressing the cubic” to get rid of the quadratic 2 term by applying the substitution:

r = t – \frac{b}{3a}

Our depressed cubic equation will then be:

t^3 + pt + q = 0 \\[10pt] where: \\[10pt] \begin{array}{ccc}p & = & \frac{3ac-b^2}{3a^2} \\[5pt] q & = & \frac{2b^3 – 9abc+27 a^2 d}{27 a^3} \end{array}

We may now solve the above for t, using Cardano to find the real root. Doing this manually is tedious, so it is recommended to write a script to perform this calculation for us. We must remember that after solving for t, we need to substitute back into our previous equation to get r, and then calculate volume V of a spherical balloon with radius r.

4. Solving for ascent rate given volume or radius

Given gas volume or balloon dimension, the exercise of solving for resulting ascent rate is significantly easier than for the opposite case explored in the previous section. We need only rearrange the equation of motion such that v becomes the subject as below:
v = \sqrt{\frac{8g\pi (\rho_{air}-\rho_{gas})r^3-6gm_C}{3C_D \pi \rho_{air} r^2}}

5. Converting between volumes and neck lifts

When inflating a balloon in the field, the most convenient method of evaluating the volume of gas in the balloon is to measure the net force at the neck when the balloon is tied down, as shown in the schematic below. This can be measured using hanging scales, such as fish scales, which will provide a mass readout in kg or lbs, as they assume that whatever object is hanging from them is experiencing just the accleration due to gravity of 9.81 m/s^2.

Schematic of recommended balloon inflation setup

We will herein reference this mass reading as the “neck lift” or N, and multiply by g to get the respective force. We can develop the relationship between volume and neck lift by once again delineating the forces in an FBD, as below, and then deriving the mathematical equation.

FBD during inflation

\sum F = N \: g

\begin{array}{cccccccccccc} \therefore & F_{buoyancy} & – & W_{pipe} & – & W_{balloon} & – & W_{gas} & = & N\:g \\ \\ &[\rho_{air}\:V_{balloon}\:g] & – & [m_{pipe}\:g] & – & [m_{balloon}\:g] & – & [\rho_{gas}\:V_{balloon}\:g] & = & N\:g \end{array}

Rearranging and factorising, and also combining balloon and pipe mass into a single term m_D, we get:

\therefore N=(\rho_{air}\:-\:\rho_{gas})\:V_{balloon}\;-\;m_D\ \\[10pt]
Thus, after finding the required gas volume for a desired ascent rate using the steps in section 3, we may apply the above formula to determine the reading N required on a hanging scale in kg or lb units that they read out. If we wish to perform the reverse calculation, we can simply rearrange the above formula as follows:
V_{balloon}=\frac{N+m_D}{\rho_{air}-\rho_{gas}}

6. Calculating the burst altitude of a balloon

The altitude at which a latex balloon will burst (H_b) is determined by the initial fill volume (V_i) as well as the brand/size of balloon chosen, as different balloons will have a maximum volume that they are able to stretch to before bursting (V_b). The simplest approach to calculating h_b analytically, used by various online balloon calculators such as habhub, is the following formula, which is derived from the (isothermal) barometric formula and ideal gas law:

H_b=\frac{RT}{g} \ln(\frac{V_b}{V_i}) \\[10pt] \text{where:} \\[10pt] \begin{array}{cccll} R & = & 287 & J/(kg\:K) & \text{(specific gas constant for air)} \\ T & = & ~250 & K & \text{(average temperature of the atmosphere)} \\ g & = & 9.81 & m/s^2 & \text{(accl. due to gravity)} \end{array} \\[10pt] \text{and:} \\[10pt] \begin{array}{ccl} V_b & = & \text{burst volume for a chosen model of balloon} \\ V_i & = & \text{initial balloon volume at sea level} \end{array}

V_b can be determined from data provided by balloon manufacturers, such as maximum diameter. V_i is either calculated using the formulas in Section 3 for a given desired ascent rate, or V_i can be the output of the above equation for a known/desired h_b. For the latter case, we can simply rearrange the previous equation to give V_i as a function of h_b for a chosen balloon (i.e. for a specific V_b):

V_i = V_b e^{-\frac{gH_b}{RT}}

These formulae provide a reasonable estimate for burst altitude. However, we know that the atmosphere is not isothermal, and the actual temperature profile can be modelled more accurately by the International Standard Atmosphere (ISA). We can thus derive a more refined analytical approach to determine H_b using the ISA, which is explored on this page.

7. Analysing vented balloons or balloons at altitude

In the case that gas is lost from the balloon envelope at altitude either by intentional venting or a slow leak, the buoyant force will reduce and thus result in a decrease in vertical velocity. We can draw an FBD and determine the new net force F to determine whether the system will ascend or descend given a new gas volume, and disregarding drag temporarily. If F is +, then the system will ascend, but if F is , then the system will descend. Note that we must use the parameters \rho_{air},\rho_{he},V_{balloon} corresponding to the current altitude of the system, which can be found using the ISA and the Ideal Gas Law mentioned in the previous section. The value of g would also change (very) slightly with altitude, and this may be taken into account if desired.

For a system that is descending with balloon/s still attached, we must derive a new equation of motion as the direction that the drag force is acting has now changed, as shown in the FBD below:

FBD of descending balloon

As only the sign of the drag term changes, we can skip the force balance and derivation, and jump straight to the equation of motion as below, which can be solved using the methods in Section 3 or 4 for volume or vertical rate respectively.

8 g \pi (\rho_{air} – \rho_{gas}) r^3 \enspace \mathbf{+} \enspace 3 C_D \pi \rho_{air} v^2 r^2 \enspace-\enspace 6 g m_C \enspace=\enspace 0

8. Analysing descent with parachute

The equation of motion for descent under a parachute can once again be derived by repeating the steps covered in previous sections. The FBD below shows the system in equilibrium, where the net force is zero as the velocity has become high enough for the drag force to balance the weight forces, and it is falling at constant velocity or “terminal velocity”.
Free-body diagram of system descending with parachute.
Force balance:

\sum F = 0

\begin{array}{cccccccc} \therefore & F_{drag} & – & W_{payload} & – & W_{chute} & = & 0 \\ \\ & [\frac{1}{2} \: C_D \: \rho_{air} \: A \: v^2] & – & [m_{payload}\:g] & – & [m_{chute}\:g] & = & 0 \end{array}

Where A is the cross-sectional or projected area of the parachute. Now rearrange to make v the subject, and combine the masses of payload and parachute into a single term m_E:

\therefore v=\sqrt{\frac{2 m_E g}{C_D \rho_{air} A}}

9. Code

I have written Python functions to implement the various cases discussed on this page, as well as the refined burst methodology. The code can be found at this Github repo.