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"
- Answer = 10.84 cubic feet
- D = 10 in inches
- L = 26 feet
- unittype = "boardfeet"
- Answer = 57.84 board feet
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
# Creative Commons, http://creativecommons.org/licenses/by-nc/3.0/us/
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
// Creative Commons, http://creativecommons.org/licenses/by-nc/3.0/us/
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.
|