## Beers Tree Volume equations

These tree volume equations have proven to be useful in many teaching situations here in Missouri. Published by Tom Beers in 1964 these equations can produce cord, cubic volume without bark, cubic with bark, and International 1/4" board foot volume.

$$a = \frac{D^2(D+190)}{100,000}$$
$$b = \frac{1}{100} \left[ \frac{H(168-H)}{64}+\frac{32}{H}\right]$$
$$c = 475 + \frac{3H^2}{128}$$

Volume in cords $= a * b$
Volume in cubic without bark $= 76 * a * b$
Volume in cubic with bark $= 92 * a * b$
Volume in boardfeet $= a * b * c$

where $D$ is the diameter at breast height in inches, $H$ is the merchantable height in feet, and volumetype can be "cords", "cubic", "cubicbark", or "boardfeet".

### Example

Imperial Units
D = 10 in inches
L = 26 feet
unittype = "cubicbark"

D = 10 in inches
L = 26 feet
unittype = "boardfeet"

Board feet is a imperial units only system.

### Code

#### Visual Basic

 
Function volume(dbh As Single, mht As Single, Optional vtype As String = "boardfeet") As Double
'Function to calculate volume from Beers 1964
'By David R. Larsen, Copyright October 8, 2012

If (mht > 0#) Then
a = ((dbh ^ 2 * (dbh + 190#)) / 100000#)
b = (1# / 100#) * (((mht * (168# - mht)) / 64#) + (32# / mht))
c = 475# + ((3# * mht ^ 2) / 128#)

If (vtype = "cords") Then
volume = a * b
ElseIf (vtype = "cubic") Then
volume = a * b * 76
ElseIf (vtype = "cubicbark") Then
volume = a * b * 92
ElseIf (vtype = "boardfeet") Then
volume = a * b * c
Else
volume = 0#
MsgBox (" vtype must be cords, cubic, cubicbark, or boardfoot")
End If
Else
volume = 0#
End If
End Function


Excel® Visual Basic Code

#### R Statistical Package Code

 
treeVolume = function( dbh, mht, volumeType="boardfeet" )
{
# Function to calculate the volume of a tree using Beers, 1964
# by David R. Larsen, Copyright November 2, 2012
#
volume = 0
if ( mht > 0 ){
a = (dbh^2 * (dbh + 190))/ 100000
b = 1/100 * ((mht * (168 - mht))/64 + (32/mht))
c = 475 + (3 * mht^2) / 128
if( volumeType == "cords" ){
volume = a * b
}else if( volumeType == "cubic" ){
volume = 76 * a * b
}else if( volumeType == "cubicbark" ){
volume = 92 * a * b
}else if( volumeType == "boardfeet" ){
volume = a * b * c
}
}
volume
}
R Statistical Package Code

#### Python Code

 
#!/usr/local/bin/python
# Function to calculate the Beers, 1964 tree volume
# from diameter at breast height and merchantable height
# by David R. Larsen, October 11, 2012

def treeVolume( dbh, mht, volumeType="boardfeet"):
if ( mht > 0.0 ):
a = (dbh**2 * (dbh + 190.0))/ 100000.0
b = 1.0/100.0 * ((mht * (168.0 - mht))/64.0 + (32.0/mht))
c = 475.0 + (3.0 * mht**2) / 128.0

if( volumeType == "cords" ):
volume = a * b
elif( volumeType == "cubic" ):
volume = 76.0 * a * b
elif( volumeType == "cubicbark" ):
volume = 92.0 * a * b
elif( volumeType == "boardfeet" ):
volume = a * b * c
else:
volume = 0.0

return volume

print "Cords =", treeVolume(dbh=10,mht=26,volumeType="cords")
print "Cubic =", treeVolume(dbh=10,mht=26,volumeType="cubic")
print "Cubic with bark =", treeVolume(dbh=10,mht=26,volumeType="cubicbark")
print "International 1/4 boardfeet =", treeVolume(dbh=10,mht=26,volumeType="boardfeet")
Python Code

Note the python files has a extra "txt" at the end to allow the files to be viewed in a web browser.

#### Go Code

 
// Function to calculate the Beers, 1964 tree volume
// from diameter at breast height and merchantable height
// by David R. Larsen, October 11, 2012
package main

import (
"fmt"
"math"
)

func treeVolume(dbh float64, mht float64, volumeType string) float64 {
var volume float64
if mht > 0.0 {
a := (math.Pow(dbh, 2.0) * (dbh + 190.0)) / 100000.0
b := 1.0 / 100.0 * ((mht*(168.0-mht))/64.0 + (32.0 / mht))
c := 475.0 + (3.0*math.Pow(mht, 2.0))/128.0

if volumeType == "cords" {
volume = a * b
} else if volumeType == "cubic" {
volume = 76.0 * a * b
} else if volumeType == "cubicbark" {
volume = 92.0 * a * b
} else if volumeType == "boardfeet" {
volume = a * b * c
} else {
volume = 0.0
}
return volume
}
return 0.0
}

func main() {
fmt.Println("Cords =", treeVolume(10, 26, "cords"))
fmt.Println("Cubic =", treeVolume(10, 26, "cubic"))
fmt.Println("Cubic with bark =", treeVolume(10, 26, "cubicbark"))
fmt.Println("International 1/4 boardfeet =", treeVolume(10, 26, "boardfeet"))
}

Run code in the Go Playground
Go Code

Note the Go files has a extra "txt" at the end to allow the files to be viewed in a web browser.

### Reference

Beers, T. W. 1964 Composite Hardwood Volume Tables. Purdue University, Agricultural Experiment Station, Lafayette, IN. Research Bulletin 787. 12p.