‘Flight’ is a computer program that accompanies Pennycuick (2008) which in detail discusses the theory behind bird flight. However, there are two drawbacks with the program. First, it is only available for Windows OS, and second, it requires manual imputation of bird measurements which is a tedious process when one has thousands of birds to analyse. Thus, the aim of this project is to implement in R, range estimation methods.

The theory behind flight mechanism has evolved over time. Pennycuick (1975) use Breguet equations intended for range estimation in fixed wing aircraft. This methods rely on studies that quantify each body part that contributes to lift and drag during flight. In Pennycuick (1975), fat mass is assumed to be the only source of fuel.

Later ornithologists had hypotheses that in long-distance bird migration a more complex process occurs. And these were confirmed by field study where samples of birds were weighed for fat mass and muscle mass before migration and after migration (Pennycuick and Battley 1998). Considering the tremendous distances covered by migrating birds, at great cost, this branch of ornithology is more concerned with the mechanical and chemical process involved during migration.

In the Methods section, the various methods are discussed in a step by step manner should the reader wish to implement the methods. Also included, are snippets of code on how to use the package and tables of results. Under Future works, a discussion of the road map for the package to incorporate more functionality from ‘Flight’.


Mechanics of Flight

Here we outline the methods in Pennycuick (1975). Five body measurements are necessary in estimating the flight range of birds. These are:

  • All up mass: The body mass (Kg.) including contents of the crop, fuel (fat mass), and any other equipment the bird has to carry for the duration of the flight.

  • Wing span: In meters measured from tip to tip of the fully outstretched wings.

  • Fat mass: Mass of fat that is consumable as fuel.

  • Order: The taxon the bird belongs to (Passerine vs non-passerine). These two taxon in theory have different metabolism rates.

  • Wing area: Area of both wings projected on a flat surface, including the body part in-between the wings.

Outline method 1 based on Brequet equation.

This method is intended for passerines with body mass less than 50 grams. Below is a list of constants or assumptions (variable definition within the package).

  • Profile power constant \(C_{pro}\) (ppc = 8.4). This can also be adjusted.

  • Energy content of fuel per kg \(e\) (eFat = 3.9 * 10 ^ 7)

  • Acceleration due to gravity \(g\) (g = 9.81)

  • Mechanical conversion efficiency \(\eta\) (mce= 0.23).

  • Induced power factor \(k\) (ipf= 1.20)

  • Ventilation and circulation power \(R\) (vcp = 1.10)

  • Air density at flight height \(\rho\). This can be changed according to altitude the bird species is known to fly (airDensity = 1.00).

  • Body drag coefficient \(C_{Db}\)(bdc = 0.10)

  • Basal metabolic rate \(\Pi_m\) empirical constants

    • alpha passerines = 6.25; alpha non-passerines = 3.79

    • delta passerines = 0.724; delta non-passerines = 0.723

  • Step1: With all-up mass and fat mass defined, the first step is to derive the fuel ratio.

\[ F = \frac{fat \ mass}{all-up \ mass} \]

Next calculate profile power ratio alternative to defining it as 1.20 for each bird, as was the case in the initially. Instead the profile power constant (\(C_{pro}\)) is used to derive the profile power ratio:

\[ X_1 = \frac{C_{pro}}{R_a} \]

Where the \(C_{pro}= 8.4\) and \(R_a\) is the aspect ratio: \[ R_a = \frac{B^2}{wing \ area} \]

where \(B\) is the wing span.

The box-plot below shows the distribution of profile power ratio of a sample of 28 birds (preset birds) from ‘Flight’ program.

In Pennycuick (1975), a table is provided for interpolation of metabolic power ratio based on body mass (at start of flight) and the wing span. However, in this implementation, the metabolic power ratio is calculated using the formulas provided.

\[ X2 = \frac{6.03 \ \alpha \ \eta \ \rho^{0.5} \ B^{3/2} M ^{\delta - 5/3}}{k^{3/4}g^{5/3}} \]

Where \(\alpha \ \text{and} \ \delta\) are constants from basal metabolism (see equations below), \(\rho\) as air density, \(B\) as wing span, and \(M\) as body mass.

  • Basal metabolism for passerines:

\[ \Pi_m = \alpha M^{\delta} \]

\[ \delta = 0.724 \]

\[ \alpha = 6.25 \]

  • Basal metabolism for non-passerines:

\[ \Pi_m = \alpha M^{\delta} \]

\[ \delta = 0.723 \]

\[ \alpha = 3.79 \]

With both metabolism power ratio and profile power ratio defined, enables interpolation of the drag factor (D) from Table 1 below.

In calculating the lift:drag ratio, the disk and equivalent flat-plate areas of a bird are important. The disc area (\(S_d\)) is the area of complete circle under which the wing span is the diameter, while the equivalent flat-plate area (\(A\)) is a product of the frontal area and drag coefficient of a bird.

\[ S_d = \frac{\pi B^2}{4} \]

\[ A = S_bC_{Db} \]

\[ S_b = 0.00813m^{0.666} \]

\[ C_{Db} = 0.1 \]

Pennycuick (1975) and Pennycuick (2008). In Pennycuick (1975) the equivalent flat-plate area is defined as below.

\[ A = (2.85 \times 10^{-3})M^{2/3} \] In the package we use Pennycuick (2008) definition instead (\(A = S_b \times C_{Db}\)).

Next step calculate effective lift:drag ratio from the formula:

\[ \bigg( \frac{L}{D}\bigg)' = \frac{D}{k^{0.5}R} \bigg( \frac{S_d}{A}\bigg)^{0.5} \]

This method corrects for change in effective lift:drag ratio during flight by increasing the lift:drag ratio by \(10F\%\).

Finally, the range (in meters) is estimated using Breguet equation:

\[ Y = \frac{e \eta}{g} \bigg( \frac{L}{D}\bigg)' ln \frac{1}{1 - F} \]

Outline method 2 based on Brequet equation.

Method 2 is only appropriate for non-passerines and or birds with __body mass greater than 50 grams. Lift to drag ratio is calculated at the beginning and at the end of the flight. Lift to drag ratio at the start of flight is calculated using the all-up mass at start, while at end of flight the mass of fuel to be used during the flight is subtracted from the all up mass. Same assumptions are used as in Method 1.

Step 1 Fat fraction is computed as before (as a ratio of fat mass and all-up body mass).

Step 2 An estimate of the body mass at end of flight is attained by subtracting fuel mass to be consumed during flight from the all-up body mass.

Step 3 Calculate metabolic power ratio but this time using body mass at end of flight.

\[ X2_{end} = \frac{6.03 \ \alpha \ \eta \ \rho^{0.5} \ B^{3/2} M_2 ^{\delta - 5/3}}{k^{3/4}g^{5/3}} \\ \\ \text{where } M_2 = \ \text{body mass at end of flight} \]

Profile power constant calculation remains the same as in method 1.

\[ X_1 = \frac{C_{pro}}{R_a} \]

Step 4 To find drag \((D_{end})\) at end of flight, metabolic power ratio and the profile power constant are summed and interpolation is done on Table 1.

Step 5 Disk area and flat plate area are components that contribute to lift. While disk area is independent of body mass, flat-plate area is not. Therefore, flat-plate area is computed using body mass at end of flight.

\[ S_d = \frac{\pi B^2}{4} \]

\[ A_{end} = S_bC_{Db} \] \[ S_b = 0.00813 \times \ M_2^{0.666} \] \[ C_{Db} = 0.1 \] Where \(M_2\) is body mass at end of flight.

Step 6 Proceed to calculate effective lift:drag ratio at end of flight.

\[ \bigg( \frac{L}{D}\bigg)'_{end} = \frac{D_{end}}{k^{0.5}R} \bigg( \frac{S_d}{A_{end}}\bigg)^{0.5} \]

Step 7 To avoid repetition, Pennycuick (1975) demonstrates how to estimate metabolic power constant at start by dividing the estimate at end of flight by some factor of the fuel ratio.

\[ X2_{start} = \frac{X2_{end}}{\bigg(\frac{1}{1 - F}\bigg)^{7/4}} \]

Followed by interpolation on Table 1 to get drag at start of flight \(D_{start}\).

Step 8 Get square root of ratio between disk area and flat-plate area at beginning of flight as:

\[ \bigg(\frac{S_d}{A}\bigg)^{0.5}_{start} = \frac{\bigg(\frac{S_d}{A}\bigg)^{0.5}_{end}}{\bigg(\frac{M_1}{M_2} \bigg)^{0.5}} \]

Where \(M_1\) and \(M_2\) are all-up mass at beginning and body mass at end of flight respectively.

Step 9 Calculate lift to drag ratio using the start of flight estimates then get the average of the two lift to drag ratios.

Step 10 Get range using the mean of the lift:drag ratio.

\[ Y = \frac{e \eta}{g} \bigg( \frac{L}{D}\bigg)'_{avg} ln \frac{1}{1 - F} \]

Time-marching computation

Breguet equation used in Method 1 and 2 outlined above assume that lift to drag ratio remains constant through out the flight. This is possible for fixed wing aircraft by manipulating flight speed. There is no evidence that birds try to maintain lift to drag ratio constant during flight Pennycuick and Battley (1998). Furthermore, fat mass is assumed to be the only source of fuel while birds are known to consume part of the engine (use protein in flight muscles and air-frame as supplementary fuel) (Pennycuick 1998, @penny03, @penny08). This leads to an increase in lift to drag ratio during the flight as result of the reduction in body mass and thus, an increase in flight range (Pennycuick and Battley 1998). In the methods discussed above, compensation for change in lift to drag ratio is done by adding 10% of fuel to the lift to drag ratio (Method 1) or averaging lift to drag ratio before start of flight and at the end of flight (Method 2). Pennycuick and Battley (1998) cites studies which found that protein is replenished faster during short stop-overs compared to fat mass. Furthermore, the constant (\(e\)) cannot be assumed to be constant because of two different sources of fuel. Protein and fat have different energy content.

Other than derive equations via ODE, Pennycuick (1998) found it more useful to use the time-marching computation. This simulation assumes that mechanical and chemical powers of a bird are held constant for a short duration during flight (6 minutes), fat and muscle mass are deducted by any one of the three criteria:

  • Constant specific work

  • Constant specific power

  • Constant muscle mass

Pennycuick and Battley (1998) describes time-marching as calculating amounts of fat and protein consumed during a short period (6 minutes) during which all variables including power and speed are assumed constant. After every 6 minute interval, the birds mass composition is revised taking into account the small changes in fat and protein consumed during the interval. In ‘Flight’ this is repeated until the required distance it achieved or it runs out of fat mass. This procedure places no restriction on speed. Pennycuick and Battley (1998) points out that the remaining fat and mass at the end of the flight can be compared with field observations.

The scope of this project involves implementing the time-marching simulation with the constant muscle mass criterion.

Constant Muscle Mass criterion.

Time-marching simulations really on the speed, total mechanical power, and the chemical power.


The minimum power speed \(V_{mp}\) is central in time-marching computation. Note, it is dependent on the air density, and all-up body mass.

\[ V_{mp} = \frac{0.807k^{1/4} m ^{1/2}g^{1/2}}{\rho^{1/2} B^{1/2} S_{b}^{1/4}C_{Db}^{1/4}} \]

The true air-speed is then: \[ V_t = 1.2 \times V_{mp} \]

Total mechanical power

The total mechanical is a sum of three powers:

  • Parasite power: The rate at which power must be done to overcome drag of body (Pennycuick 2008). For any streamlined body the drag is expressed as:

\[ D_b = \frac{\rho V_t^2 S_b C_{Db}}{2} \] And parasite power is found by multiplying the drag by the true airspeed \(V_t\):

\[ P_{par} = \frac{\rho V_t^3 S_b C_{Db}}{2} \]

where \(\rho\) is the air density, \(V_t\) is the true airspeed, \(S_b\) is the frontal area of the body and \(C_{Db}\) is the body drag coefficient.

  • Profile power This is power needed to overcome the effects of the body drag. And this is a multiple of profile power ratio (X1) and the absolute minimum power \(P_{am}\):

\[ P_{pro} = X1 \times P_{am} \]

\[ P_{am} = \frac{(1.05 k ^{3/4} m^{3/2} g^{3/2} S_b^{1/4} C_{Db}^{1/4})}{(\rho^{1/2}B^{3/2})} \] and \(X_1\):

\[ X_1 = \frac{C_{pro}}{R_a} \]

  • Induced power Power required to support a birds wight during forward flight.

\[ P_{ind} = \frac{(mg^2)}{2V_{t}Sd\rho} \]

The total mechanical power is found by summing the profile power, parasite power and induced power. Parasite power and induced power are depend on the true airspeed during flight.

\[ P_{mech} = P_{pro} + P_{par} + P_{ind} \]

Chemical power

Pennycuick (2008) states that mechanical power is derived from measurements made in unaccelerated flight (i.e from forces and speeds that do not involve physiology), however, the chemical power is derived using measurements from physiological experiments. These measurements include:

  • Rates of consumption of fuel

  • Rate of consumption of oxygen

  • Metabolism rate

It is only useful to estimate this in long aerobic flight such as migration (Pennycuick 2008).

To estimate the chemical power during a flight interval, the mechanical power is first estimated (power required from muscles to support the weight against gravity ). Then the mechanical power is divided by the mechanical conversion efficiency (between 0 and 1), in ‘Flight’ the default is 0.23. The basal metabolism rate is added because metabolism is a body function that occurs irrespective of what the bird is doing. Estimate derived so far is increased by \(10\%\) to account for heart and lungs. This chemical power expresses the total energy required by a bird to sustain flight during an interval.

Range Estimation Constant Muscle Mass Criterion

To estimate the flight range, first true airspeed is estimated from the minimum power speed and used to calculate the total mechanical power. Total mechanical power is converted to chemical power then divided by the energy content of fat (since fat is the only source of fuel in this scenario). Multiplying this by the calculation interval (default 6 minutes or 360 seconds) gives the range achieved during this interval in m/s. It was noted that decreasing the flight interval has no effect on range only that the simulation is more fine grained. This procedure is iterated over until fat mass decreases to zero. In ‘Flight’ there is an option to attribute a small percentage of the chemical power to protein from the muscle mass, usually \(5\%\).

Results comparison.

It is not fair comparison between the methods discussed in Pennycuick (1975) and the methods in Pennycuick (1998) and Pennycuick (2008) and therefore the tables with range estimations are presented separately. Default constants are used for all the observations and the air density was set to 1.00 which is about 2063 meters above sea level.

The Data

Data used as an example, is from the program ‘Flight’ (Pennycuick 2008) version For some observations the fat mass and muscle mass were zero, ‘Flight’ requires that fat mass is non-zero to calculate range since it is the main source of fuel. To overcome this, fat mass was randomly generated between \(18\%\) and about \(35\%\) of the all-up mass (empty mass because crop is empty). For muscle mass, by default, ‘Flight’ uses the muscle fraction 0.17, and therefore this was used to derive the muscle mass.

\[ muscle \ fraction = \frac{muscle \ mass}{all-up \ mass} \]

Results based on Pennycuick (1975)

results_fixed_wing <- flying::flysim(data = birds) 
## ## settings not defined. Using default constants.
## Default airDensity = 1.00 kg m^3
# range 
##           Anser anser  Hydrobates pelagicus   Pachyptila desolata 
##                3193.8                3252.9                4192.0 
##       Regulus regulus      Calidris canutus     Aegypius monachus 
##                1521.6                4240.6                3951.6 
##      Limosa lapponica           Anas crecca       Hirundo rustica 
##               11209.3                3631.4                3898.0 
##         Cygnus cygnus          Sylvia borin     Luscinia luscinia 
##                3296.0                2801.7                2301.9 
##       Corvus monedula         Anas penelope   Fregata magnificens 
##                2452.7                5428.0               10527.4 
##      Larus ridibundus      Diomedea exulans   Phalacrocorax carbo 
##                5847.5                5436.8                2918.8 
##       Gyps rueppellii   Torgos tracheliotus         Ardeotis kori 
##                6808.3                6334.7                4211.5 
##      Sturnus vulgaris     Fringilla coelebs      Carduelis spinus 
##                4197.4                2867.9                2926.6 
##     Turdus philomelos Calidris tenuirostris     Buteo swainsoni M 
##                3025.5                6053.5                5422.5 
##     Buteo swainsoni F 
##                6994.8
# constants used
##         ppc        eFat    eProtein           g         mce         ipf 
##    8.40e+00    3.90e+07    1.80e+07    9.81e+00    2.30e-01    1.20e+00 
##         vcp  airDensity         bdc      alpha1      alpha2      delta1 
##    1.10e+00    1.00e+00    1.00e-01    6.25e+00    3.79e+00    7.24e-01 
##      delta2    invPower  speedRatio muscDensity         phr 
##    7.23e-01    1.20e-06    1.20e+00    1.06e+03    2.20e+00

Time-marching: Constant Muscle Mass

In the simulation in Flight program, air density is set to 1 (Altitude 2063 meters above sea-level), muscle is held constant (Protein burn criterion), fat energy at \(3.9E+07\), continuous flapping style (Flight style), and minimum energy from protein at \(0\%\) instead of the default \(5\%\). Induced power factor is set to 1.20 for all birds. The mitochondrial fraction is set to hold constant.

‘Flight’ provides two methods of speed control, true air-speed to minimum power speed ratio is held constant or true air-speed is held constant. Both of these scenarios are compared to the output of this package below:

See Table 3 and Table 4 for comparison with ‘Flight’.

# constant speed
results_cmm_cs <- flying::migrate(data = birds, speed_control = "constant_speed")
## ## settings not defined. Using default constants.
## Default airDensity = 1.00 kg m^3
##           Anser anser  Hydrobates pelagicus   Pachyptila desolata 
##              3090.212              2670.168              3697.655 
##       Regulus regulus      Calidris canutus     Aegypius monachus 
##              1112.737              3815.854              3510.380 
##      Limosa lapponica           Anas crecca       Hirundo rustica 
##             11422.128              3388.010              2922.039 
##         Cygnus cygnus          Sylvia borin     Luscinia luscinia 
##              3093.674              2251.541              1867.619 
##       Corvus monedula         Anas penelope   Fregata magnificens 
##              2030.797              5192.960              9892.095 
##      Larus ridibundus      Diomedea exulans   Phalacrocorax carbo 
##              5311.779              5505.702              2606.114 
##       Gyps rueppellii   Torgos tracheliotus         Ardeotis kori 
##              6437.457              5791.601              3914.659 
##      Sturnus vulgaris     Fringilla coelebs      Carduelis spinus 
##              3570.048              2384.724              2221.557 
##     Turdus philomelos Calidris tenuirostris     Buteo swainsoni M 
##              2688.390              5657.302              5076.476 
##     Buteo swainsoni F 
##              6432.601
# constant ratio between true air-speed and minimum power speed
results_cmm_cratio <- flying::migrate(data = birds, speed_control = "vvmp_constant")
## ## settings not defined. Using default constants.
## Default airDensity = 1.00 kg m^3
##           Anser anser  Hydrobates pelagicus   Pachyptila desolata 
##              3007.666              2585.928              3578.702 
##       Regulus regulus      Calidris canutus     Aegypius monachus 
##              1076.763              3684.099              3424.932 
##      Limosa lapponica           Anas crecca       Hirundo rustica 
##             10656.722              3267.216              2789.200 
##         Cygnus cygnus          Sylvia borin     Luscinia luscinia 
##              3016.846              2147.015              1798.886 
##       Corvus monedula         Anas penelope   Fregata magnificens 
##              1975.244              4952.667              9508.971 
##      Larus ridibundus      Diomedea exulans   Phalacrocorax carbo 
##              5124.442              5378.213              2548.818 
##       Gyps rueppellii   Torgos tracheliotus         Ardeotis kori 
##              6146.924              5559.672              3756.543 
##      Sturnus vulgaris     Fringilla coelebs      Carduelis spinus 
##              3378.812              2275.475              2119.291 
##     Turdus philomelos Calidris tenuirostris     Buteo swainsoni M 
##              2571.456              5381.771              4887.604 
##     Buteo swainsoni F 
##              6142.628

Future work

In this section, aim is to discuss the future plan of the package so that it incorporates as many features from Flight program as possible.

Protein withdrawal criterion

Pennycuick and Battley (1998) find that holding specific work constant is most realistic criteria for determining how much fuel and protein to be withdrawn during 6 minute intervals of flight. This is in comparison with field observations. Specific work is defined as work done by unit mass of contractile tissue muscle. Further, Pennycuick and Battley (1998), states that flight muscles contain myofibrils and mitochondria, which are treated separately in the simulation. To be exact enough mass of myofibrils is reduced by an amount sufficient to restore specific work to the value it had at beginning of flight. In addition, fuel energy corresponding to mass of dry protein consumed is deducted from energy that would otherwise come from fuel/fat consumption.

Holding the specific power constant is a third option in Flight program. In this scenario, just enough protein from muscle mass is used to maintain the specific power estimated at beginning of flight.

Supplemtary protein from air-frame

In Flight program user has an option to specify minimum percentage of energy that should come from protein. It is possible that muscle mass alone would not be able sustain this, and therefore some of the protein can come from the air-frame.

Initial climb

Initial climb, calculates the power required by the bird at start of flight. It is possible that a bird maybe to heavy to fly under some conditions. In Table 3 and 4 there were such cases.


Pennycuick, Colin J. 1975. “Mechanics of Flight.” In Avian Biology, edited by D.S. Farner and King J.R, 5:1–75. New York.

———. 1998. “Computer Simulation of Fat and Muscle Burn in Long-Distance Bird Migration.” Journal of Theoretical Biology 191 (1): 47–61.

———. 2008. Modelling the Flying Bird. First Edition. Vol. 5. New Jersey: Elsevier.

Pennycuick, Colin J., and Philip F. Battley. 1998. “Burning the Engine: A Time-Marching Computation of Fat and Protein Consumption in a 5420-Km Non-Stop Flight by Great Knots, Calidris Tenuirostris.” Journal of Theoretical Biology 191 (1): 47–61.