Tree Volume

Mesavage and Girard Tree Volume equations

These equations were developed by H. V. Wiant, Jr. and published in 1986. They are to produce the number similar to those published in the Mesavage and Girard, 1946.

International 1/4" boardfeet

$ a = -13.35212 + 9.58615 * L + 1.52968 L^2$
$ b = 1.7962 - 2.59995 L - 0.27465 L^2 dbh$
$ c = 0.04482 + 0.45997 L - 0.00961 L^2 dbh^2$

Scribner boardfeet

$ a = -22.50365 + 17.53508 L - 0.59242 L^2 $
$ b = 3.02988 - 4.34381 L - 0.02302 L^2 dbh$
$ c = -0.01969 + 0.51593 L - 0.02035 L^2 dbh^2$

Doyle boardfeet

$ a = -29.37337 + 41.51275 L + 0.55743 L^2$
$ b = 2.78043 - 8.77272 L - 0.04516 L^2 dbh$
$ c = 0.04177 + 0.59042 L - 0.01578 L^2 dbh^2$

Girard formclass correction

$ cor = (1.0 + ((girard - 78.0) * 0.03)) $

Tree Volume

$ volume = (a + b + c) * cor $

Where $L$ is the merchantable height in 16 foot logs ($L = mht/16.0$), $dbh$ is the diameter at breast height, and $girardi$ is the Girard form class (default 78)

Example

Imperial Units
D = 24 in inches
L = 2.5 16ft logs (mht 40ft)
unittype = "Int1/4"
girard = 78
Answer = 519.665

D = 24 in inches
L = 2.5 16ft logs (mht 40ft)
unittype = "Int1/4"
girard = 82
Answer = 582.025

D = 24 in inches
L = 2.5 16ft logs (mht 40ft)
unittype = "Scribner"
girard = 78
Answer = 484.581

D = 24 in inches
L = 2.5 16ft logs (mht 40ft)
unittype = "Scribner"
girard = 82
Answer = 542.730

D = 24 in inches
L = 2.5 16ft logs (mht 40ft)
unittype = "Doyle"
girard = 78
Answer = 428.942

D = 24 in inches
L = 2.5 16ft logs (mht 40ft)
unittype = "Doyle"
girard = 82
Answer = 480.415

Board feet is a imperial units only system.

Code

Visual Basic

 
Function mesavage(dbh As Single, mht As Single, Optional volumetype As String = "Doyle", Optional girard As Single = 78#)
' Function to calculate the Mesavage and Girard 1946 volume. using the equations by H.V. Wiant, Jr., 1986, 
' Formula’s for Mesavage and Girard’s Volume Tables, Northern Journal of Applied Forestry 3:124.
' Coded by David R. Larsen, June 20, 2015
L = mht / 16#
cor = (1# + ((girard - 78#) * 0.03))

If (volumetype = "Int1/4") Then
  a = Array(-13.35212, 9.58615, 1.52968)
  b = Array(1.79620, -2.59995, -0.27465)
  c = Array(0.04482, 0.45997, -0.00961)
ElseIf (volumetype = "Scribner") Then
  a = Array(-22.50365, 17.53508, -0.59242)
  b = Array(3.02888, -4.34381, -0.02302)
  c = Array(-0.01969, 0.51593, -0.02035)
ElseIf (volumetype = "Doyle") Then
  a = Array(-29.37337, 41.51275, 0.55743)
  b = Array(2.78043, -8.77272, -0.04516)
  c = Array(0.04177, 0.59042,  -0.01578)
Else
  mesavage = 0
  MsgBox (" volumetype must be Int1/4, Scribner, or Doyle")
End If

v1 = (a(0) + a(1) * L + a(2) * L^2) 
v2 = (b(0) + b(1) * L + b(2) * L^2) * dbh 
v3 = (c(0) + c(1) * L + c(2) * L^2) * dbh^2 
mesavage = (v1 + v2 + v3) * cor
End Function


Excel® Visual Basic Code

R Statistical Package Code

 
mesavage = function( dbh, mht, volumetype="Int1/4", girard=78)
{
# Function to calcalate the Mesavage and Girard 1946 volume. 
# using the equations by H.V. Wiant, Jr., 1986, Formula's for
# Mesavage and Girard's Volume Tables, Northern Journal of Applied Forestry 3:124.
# Coded by David R. Larsen, June 20, 2015

L = mht / 16.0
cor = (1.0+ ((girard - 78.0) * 0.03))
a = vector()
b = vector()
c = vector()
treevolume=numeric()

if (volumetype == "Int1/4"){
	a = c(-13.35212, 9.58615, 1.52968)
   b = c(1.79620, -2.59995, -0.27465)
   c = c(0.04482, 0.45997, -0.00961)
}else if (volumetype == "Scribner"){
   a = c(-22.50365, 17.53508, -0.59242)
   b = c(3.02888, -4.34381, -0.02302)
   c = c(-0.01969, 0.51593, -0.02035)
}else if (volumetype == "Doyle"){ 
	a = c(-29.37337, 41.51275, 0.55743)
	b = c(2.78043, -8.77272, -0.04516)
   c = c(0.04177, 0.59042,  -0.01578)
}else{
  cat("volumetype not found!")
}

v1 = (a[1] + a[2] * L + a[3] * L**2) 
v2 = (b[1] + b[2] * L + b[3] * L**2) * dbh 
v3 = (c[1] + c[2] * L + c[3] * L**2) * dbh**2 
volume = (v1 + v2 + v3) * cor
volume
}
R Statistical Package Code

Python Code

 
#!/usr/local/bin/python
# Function to calcaualte the Mesavage and Girard 1946 volume. 
# using the equations by H.V. Wiant, Jr., 1986, Formula's for
# Mesavage and Girard's Volume Tables, Northern Journal of Applied Forestry 3:124.
# Coded by David R. Larsen, June 20, 2015

# Creative Commons,  http://creativecommons.org/licenses/by-nc/3.0/us/


def mesavage( dbh, mht, volumeType="Doyle", girard=78.0):
    if ( mht > 0.0 ):
      L = mht / 16.0
      cor = (1.0+ ((girard - 78.0) * 0.03))

      if( volumeType == "Int1/4" ):
          a = [-13.35212, 9.58615, 1.52968]
          b = [1.79620, -2.59995, -0.27465]
          c = [0.04482, 0.45997, -0.00961]

      elif( volumeType == "Scribner" ):
          a = [-22.50365, 17.53508, -0.59242]
          b = [3.02888, -4.34381, -0.02302]
          c = [-0.01969, 0.51593, -0.02035]
    
      elif( volumeType == "Doyle" ):
          a = [-29.37337, 41.51275, 0.55743]
          b = [2.78043, -8.77272, -0.04516]
          c = [0.04177, 0.59042,  -0.01578]

      else:
	  volume = 0.0

    v1 = (a[0] + a[1] * L + a[2] * L**2) 
    v2 = (b[0] + b[1] * L + b[2] * L**2) * dbh 
    v3 = (c[0] + c[1] * L + c[2] * L**2) * dbh**2 
    volume = (v1 + v2 + v3) * cor
          
    return volume 

print "Int 1/4 (78) =", mesavage(dbh=24.0,mht=40,volumeType="Int1/4", girard=78)
print "Int 1/4 (82) =", mesavage(dbh=24.0,mht=40,volumeType="Int1/4", girard=82)
print "Scribner (78) =", mesavage(dbh=24.0,mht=40,volumeType="Scribner", girard=78)
print "Scribner (82) =", mesavage(dbh=24.0,mht=40,volumeType="Scribner", girard=82)
print "Doyle (78) =", mesavage(dbh=24.0,mht=40,volumeType="Doyle", girard=78)
print "Doyle (82) =", mesavage(dbh=24.0,mht=40,volumeType="Doyle", girard=82)
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 Mesavage and Girard tree Volumes
// from dbh and merchantable tree height, and Girard form class
// by David R. Larsen, June 21, 2015
// Creative Commons,  http://creativecommons.org/licenses/by-nc/3.0/us/
package main

import (
	"fmt"
	"math"
)

// Function to calculate a quadratic mean
func Mesavage(dbh float64, mht float64, voltype string, girard float64) float64 {
	var a, b, c []float64
	L := mht / 16.0
	cor := (1.0 + ((girard - 78.0) * 0.03))

	if voltype == "Int1/4" {
		a = []float64{-13.35212, 9.58615, 1.52968}
		b = []float64{1.79620, -2.59995, -0.27465}
		c = []float64{0.04482, 0.45997, -0.00961}
	} else if voltype == "Scribner" {
		a = []float64{-22.50365, 17.53508, -0.59242}
		b = []float64{3.02888, -4.34381, -0.02302}
		c = []float64{-0.01969, 0.51593, -0.02035}
	} else if voltype == "Doyle" {
		a = []float64{-29.37337, 41.51275, 0.55743}
		b = []float64{2.78043, -8.77272, -0.04516}
		c = []float64{0.04177, 0.59042, -0.01578}
	}
	v1 := (a[0] + a[1]*L + a[2]*math.Pow(L, 2))
	v2 := (b[0] + b[1]*L + b[2]*math.Pow(L, 2)) * dbh
	v3 := (c[0] + c[1]*L + c[2]*math.Pow(L, 2)) * math.Pow(dbh, 2)
	volume := (v1 + v2 + v3) * cor
	return volume
}

func main() {
	fmt.Println("Int 1/4 (78)=", Mesavage(24.0, 40.0, "Int1/4", 78.0))
	fmt.Println("Int 1/4 (82)=", Mesavage(24.0, 40.0, "Int1/4", 82.0))
	fmt.Println("Scribner (78)=", Mesavage(24.0, 40.0, "Scribner", 78.0))
	fmt.Println("Scribner (82)=", Mesavage(24.0, 40.0, "Scribner", 82.0))
	fmt.Println("Doyle (78)=", Mesavage(24.0, 40.0, "Doyle", 78.0))
	fmt.Println("Doyle (82)=", Mesavage(24.0, 40.0, "Doyle", 82.0))
}

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

Mesavage, C., and J. W. Girard. 1946. Tables for estimating board-foot volumei of timber. USDA Forest Servicei, Washington, DC. 94p.

Wiant, Jr. H. V. 1986. Formulas for Mesavage and Girard's volume tables. Northern Journal of Applied Forestry 3(3)124.


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