Title: | Dynamic Stem Profile Models, AKA Tree Taper Equations |
---|---|
Description: | Performs calculations with tree taper (or stem profile) equations, including model fitting. The package implements the methods from García, O. (2015) "Dynamic modelling of tree form" <http://mcfns.net/index.php/Journal/article/view/MCFNS7.1_2>. The models are parsimonious, describe well the tree bole shape over its full length, and are consistent with wood formation mechanisms through time. |
Authors: | Oscar Garcia [cre, aut] |
Maintainer: | Oscar Garcia <[email protected]> |
License: | MIT + file LICENSE |
Version: | 1.1 |
Built: | 2024-10-31 22:08:32 UTC |
Source: | https://github.com/ogarciav/dyntaper |
Taper measurements on 10 Eucalyptus cloeziana trees.
brink
brink
A data frame with 108 rows and 5 variables:
tree identification number (factor)
height level, meters
diameter inside bark, centimeters
dbh outside bark, cm (breast height is 1.35 m)
total height, meters
Brink, C. and von Gadow, K. (1986) "On the use of growth and decay functions for modelling stem profiles". EDV in Medizin und Biologi 17, 20-27
Calculates , or its limit
when
tends to 0.
decay(x, p)
decay(x, p)
x |
Input value(s), possibly a vector. |
p |
Parameter. |
Perhaps overkill, but uses log1p()
function for better
accuracy than the more obvious formula.
Decay function value(s).
decay(2, 0) == exp(-2) decay(1.5, 0.5) decay(2.5, 0.5) decay(2.5, -0.5) for(p in seq(1, -1, -0.5)) curve(decay(x, p), 0, 3, add=(p != 1))
decay(2, 0) == exp(-2) decay(1.5, 0.5) decay(2.5, 0.5) decay(2.5, -0.5) for(p in seq(1, -1, -0.5)) curve(decay(x, p), 0, 3, add=(p != 1))
Find the height level at which the tree reaches a given diameter (if
area == FALSE
, default) or a given cross-sectional area (if
area == TRUE
).
That is, the inverse of taper()
, except that a vector argument
is not allowed.
hlevel(ds, H, D, b, bh, area = FALSE)
hlevel(ds, H, D, b, bh, area = FALSE)
ds |
The given diameter or area. |
H |
Tree total height. |
D |
Tree diameter at breast height. |
b |
Vector with the 5 parameters. |
bh |
Breast height. Typically 1.2, 1.3 or 1.4 m, or 4.5 ft. |
area |
If TRUE, ' |
Height level corresponding to 'ds
' if any, otherwise NA
.
b <- c(2.569, 0, 1.042, 0.3012, -1) # parameters Dib <- 0.956 * 24 # convert dbh outside bark to inside bark hlevel(15, 32, Dib, b, 1.3) # height where the diameter is 15 hlevel(24, 32, Dib, b, 1.3) # breast height hlevel(35, 32, Dib, b, 1.3) # height where the diameter is 35
b <- c(2.569, 0, 1.042, 0.3012, -1) # parameters Dib <- 0.956 * 24 # convert dbh outside bark to inside bark hlevel(15, 32, Dib, b, 1.3) # height where the diameter is 15 hlevel(24, 32, Dib, b, 1.3) # breast height hlevel(35, 32, Dib, b, 1.3) # height where the diameter is 35
Integral of decay function.
Id(x, p)
Id(x, p)
x |
Input value(s), possibly a vector. |
p |
Parameter. |
Integral of the decay function between 0 and x.
Id(2, 0) Id(1.5,0.5) Id(2.5, 0.5) Id(2.5, -0.5) for(p in seq(1, -1, -0.5)) curve(Id(x, p), 0, 3, add=(p != 1))
Id(2, 0) Id(1.5,0.5) Id(2.5, 0.5) Id(2.5, -0.5) for(p in seq(1, -1, -0.5)) curve(Id(x, p), 0, 3, add=(p != 1))
Double integral of decay function.
Idd(x, p)
Idd(x, p)
x |
Input value(s), possibly a vector. |
p |
Parameter. |
Iterated integral of the decay function between 0 and x, that is, the integral of Id(x, p).
Idd(2, 0) Idd(1.5,0.5) Idd(2.5, -1) Idd(2.5, -0.5) for(p in seq(1, -1, -0.5)) curve(Idd(x, p), 0, 3, add=(p != 1))
Idd(2, 0) Idd(1.5,0.5) Idd(2.5, -1) Idd(2.5, -0.5) for(p in seq(1, -1, -0.5)) curve(Idd(x, p), 0, 3, add=(p != 1))
Returns the diameter or cross-sectional area at one or more hight levels.
taper(h, H, D, b, bh, area = FALSE)
taper(h, H, D, b, bh, area = FALSE)
h |
Height level(s), possibly a vector. |
H |
Tree total height. |
D |
Tree diameter at breast height (dbh). |
b |
Vector with the 5 parameters. |
bh |
Breast height. Typically 1.2, 1.3 or 1.4 m, or 4.5 ft. |
area |
If TRUE, returns cross-sectional areas, otherwise returns diameters. Default is FALSE. |
Diameter(s) at level(s) 'h
' if 'area
' is FALSE,
otherwise cross-sectional area(s).
Diameters or areas are either all outside bark, or all inside bark.
A dbh outside bark can be used with an inside-bark taper equation through
a substitution D -> k * D
, where k
is an outside to inside
bark conversion factor.
curve(taper(x, 32, 0.956*24, c(2.569, 0, 1.042, 0.3012, -1), 1.3), 0, 32)
curve(taper(x, 32, 0.956*24, c(2.569, 0, 1.042, 0.3012, -1), 1.3), 0, 32)
Unscaled base taper curve of cross-sectional area vs height level.
tbase(h, H, b)
tbase(h, H, b)
h |
Height level(s), possibly a vector. |
H |
Tree total height. |
b |
Vector with the 5 parameters. |
Value(s) proportional to the area(s) at the level(s) h
.
tbase(16, 32, c(2.569, 0, 1.042, 0.3012, -1))
tbase(16, 32, c(2.569, 0, 1.042, 0.3012, -1))
Volume between two height levels.
volume(h1, h2, H, D, b, bh, rhd)
volume(h1, h2, H, D, b, bh, rhd)
h1 , h2
|
The two height levels. |
H |
Tree total height. |
D |
Tree diameter at breast height. |
b |
Vector with the 5 parameters. |
bh |
Breast height. Typically 1.2, 1.3 or 1.4 m, or 4.5 ft. |
rhd |
Ratio between the height and diameter units. E.g., 100 for m and cm, or 12 for feet and inches. |
Volume between h1
and h2
.
b <- c(2.569, 0, 1.042, 0.3012, -1) # parameters Dib <- 0.956 * 24 # convert dbh outside bark to inside bark volume(0, 32, 32, Dib, b, 1.3, 100) # total volume h15 <- hlevel(15, 32, Dib, b, 1.3) # height for diameter 15 volume(0.3, h15, 32, Dib, b, 1.3, 100) # volume between stump and h15
b <- c(2.569, 0, 1.042, 0.3012, -1) # parameters Dib <- 0.956 * 24 # convert dbh outside bark to inside bark volume(0, 32, 32, Dib, b, 1.3, 100) # total volume h15 <- hlevel(15, 32, Dib, b, 1.3) # height for diameter 15 volume(0.3, h15, 32, Dib, b, 1.3, 100) # volume between stump and h15