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"))
}
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.


Creative Commons License
This work is licensed under a Creative Commons Attribution-Noncommercial 3.0 United States License.

Author: Dr. David R. Larsen, Copyright 2012
Created: November 1, 2012
Last Updated: June 23, 2015