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.
|