Skip to content

Commit 081711f

Browse files
committed
bugfix forestry yields
1 parent 670ee1c commit 081711f

File tree

6 files changed

+41
-156
lines changed

6 files changed

+41
-156
lines changed

.buildlibrary

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
ValidationKey: '2391914430'
1+
ValidationKey: '2392175504'
22
AutocreateReadme: yes
33
AcceptedWarnings:
44
- 'Warning: package ''.*'' was built under R version'

CITATION.cff

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ cff-version: 1.2.0
22
message: If you use this software, please cite it using the metadata from this file.
33
type: software
44
title: 'magpie4: MAgPIE outputs R package for MAgPIE version 4.x'
5-
version: 1.206.21
6-
date-released: '2024-04-17'
5+
version: 1.206.22
6+
date-released: '2024-04-19'
77
abstract: Common output routines for extracting results from the MAgPIE framework
88
(versions 4.x).
99
authors:

DESCRIPTION

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
Type: Package
22
Package: magpie4
33
Title: MAgPIE outputs R package for MAgPIE version 4.x
4-
Version: 1.206.21
5-
Date: 2024-04-17
4+
Version: 1.206.22
5+
Date: 2024-04-19
66
Authors@R: c(
77
person("Benjamin Leon", "Bodirsky", , "[email protected]", role = c("aut", "cre")),
88
person("Florian", "Humpenoeder", , "[email protected]", role = "aut"),

R/ForestYield.R

Lines changed: 30 additions & 145 deletions
Original file line numberDiff line numberDiff line change
@@ -1,165 +1,50 @@
11
#' @title ForestYield
2-
#' @description reads timber yield out of a MAgPIE gdx file
3-
#'
2+
#' @description calculates timber yield out of a MAgPIE gdx file
3+
#'
44
#' @export
55
#'
66
#' @param gdx GDX file
77
#' @param file a file name the output should be written to using write.magpie
88
#' @param level Level of regional aggregation; "cell", "reg" (regional), "glo" (global), "regglo" (regional and global) or any secdforest aggregation level defined in superAggregate
99
#' @details Forest yield for timber production
10-
#' @return Forest yield for timber production
11-
#' @author Abhijeet Mishra
10+
#' @return Forest yield for timber production in tDM per ha per year
11+
#' @author Abhijeet Mishra, Florian Humpenoeder
1212
#' @importFrom gdx readGDX out
1313
#' @importFrom magclass clean_magpie dimSums collapseNames setYears write.magpie
1414
#' @importFrom luscale superAggregate
1515
#' @examples
16-
#'
16+
#'
1717
#' \dontrun{
1818
#' x <- ForestYield(gdx)
1919
#' }
2020

2121
ForestYield <- function(gdx, file=NULL, level="cell"){
2222
a <- NULL
23-
23+
2424
if(as.numeric(readGDX(gdx, "s32_hvarea")) > 0 & as.numeric(readGDX(gdx, "s35_hvarea")) > 0) {
25-
if (level == "cell") {
26-
#### Production and harvest area calculations
27-
ov73_prod_forestry <-dimSums(readGDX(gdx,"ov_prod_forestry","ov73_prod_forestry",select = list(type="level")),dim=3)
28-
ov73_hvarea_forestry <- dimSums(readGDX(gdx,"ov32_hvarea_forestry","ov73_hvarea_forestry","ov_hvarea_forestry",react = "silent",select = list(type="level")),dim=3)
29-
30-
ov73_prod_natveg_secdf <- dimSums(readGDX(gdx,"ov_prod_natveg","ov73_prod_natveg",select = list(type="level"))[,,"secdforest"],dim=3)
31-
ov_hvarea_secdf <- dimSums(readGDX(gdx,"ov35_hvarea_secdforest","ov_hvarea_secdforest",select = list(type="level")),dim=3)
32-
33-
ov73_prod_natveg_primf <- dimSums(readGDX(gdx,"ov_prod_natveg","ov73_prod_natveg",select = list(type="level"))[,,"primforest"],dim=3)
34-
ov_hvarea_primf <- dimSums(readGDX(gdx,"ov35_hvarea_primforest","ov_hvarea_primforest",select = list(type="level")),dim=3)
35-
36-
ov73_prod_natveg_other <- dimSums(readGDX(gdx,"ov_prod_natveg","ov73_prod_natveg",select = list(type="level"))[,,"other"],dim=3)
37-
ov_hvarea_other <- dimSums(readGDX(gdx,"ov35_hvarea_other","ov73_hvarea_other","ov_hvarea_other",react = "silent",select = list(type="level")),dim=3)
38-
39-
#### Yield calculations
40-
41-
## Plantations
42-
yield_forestry <- ov73_prod_forestry/ov73_hvarea_forestry
43-
if(any(is.na(range(yield_forestry)))){
44-
yield_forestry[is.na(yield_forestry)] <- 0
45-
}
46-
if(any(is.infinite(range(yield_forestry)))){
47-
div0 <- where(ov73_prod_forestry != 0 & ov73_hvarea_forestry == 0)$true$regions
48-
yield_forestry[is.infinite(yield_forestry)] <- 0
49-
}
50-
51-
## Secondary forest
52-
yield_secdf <- ov73_prod_natveg_secdf/ov_hvarea_secdf
53-
if(any(is.na(range(yield_secdf)))){
54-
yield_secdf[is.na(yield_secdf)] <- 0
55-
}
56-
57-
if(any(is.infinite(range(yield_secdf)))){
58-
div0 <- where(ov73_prod_natveg_secdf != 0 & ov_hvarea_secdf == 0)$true$regions
59-
yield_secdf[is.infinite(yield_secdf)] <- 0
60-
}
61-
62-
## Primary forest
63-
yield_primf <- ov73_prod_natveg_primf/ov_hvarea_primf
64-
if(any(is.na(range(yield_primf)))){
65-
yield_primf[is.na(yield_primf)] <- 0
66-
}
67-
68-
if(any(is.infinite(range(yield_primf)))){
69-
div0 <- where(ov73_prod_natveg_primf != 0 & ov_hvarea_primf == 0)$true$regions
70-
yield_primf[is.infinite(yield_primf)] <- 0
71-
}
72-
73-
## Other land
74-
yield_other <- ov73_prod_natveg_other/ov_hvarea_other
75-
if(any(is.na(range(yield_other)))){
76-
yield_other[is.na(yield_other)] <- 0
77-
}
78-
79-
if(any(is.infinite(range(yield_other)))){
80-
div0 <- where(ov73_prod_natveg_other != 0 & ov_hvarea_other == 0)$true$regions
81-
yield_other[is.infinite(yield_other)] <- 0
82-
}
83-
84-
a <- mbind(setNames(yield_forestry,"Forestry"),
85-
setNames(yield_secdf,"Secondary forest"),
86-
setNames(yield_primf,"Primary forest"),
87-
setNames(yield_other,"Other land"))
88-
} else if (level == "regglo" | level == "reg"){
89-
#### Production and harvest area calculations
90-
ov73_prod_forestry <- dimSums(readGDX(gdx,"ov_prod_forestry","ov73_prod_forestry",select = list(type="level")),dim=3)
91-
ov73_prod_forestry <- superAggregate(data = ov73_prod_forestry,aggr_type = "sum",level = level)
92-
ov73_hvarea_forestry <- dimSums(readGDX(gdx,"ov32_hvarea_forestry","ov73_hvarea_forestry","ov_hvarea_forestry",react = "silent",select = list(type="level")),dim=3)
93-
ov73_hvarea_forestry <- superAggregate(data = ov73_hvarea_forestry ,aggr_type = "sum",level = level)
94-
95-
ov73_prod_natveg_secdf <- dimSums(readGDX(gdx,"ov_prod_natveg","ov73_prod_natveg",select = list(type="level"))[,,"secdforest"],dim=3)
96-
ov73_prod_natveg_secdf <- superAggregate(data = ov73_prod_natveg_secdf,aggr_type = "sum",level = level)
97-
ov_hvarea_secdf <- dimSums(readGDX(gdx,"ov35_hvarea_secdforest","ov_hvarea_secdforest",select = list(type="level")),dim=3)
98-
ov_hvarea_secdf <- superAggregate(data = ov_hvarea_secdf ,aggr_type = "sum",level = level)
99-
100-
ov73_prod_natveg_primf <- dimSums(readGDX(gdx,"ov_prod_natveg","ov73_prod_natveg",select = list(type="level"))[,,"primforest"],dim=3)
101-
ov73_prod_natveg_primf <- superAggregate(data = ov73_prod_natveg_primf,aggr_type = "sum",level = level)
102-
ov_hvarea_primf <- dimSums(readGDX(gdx,"ov35_hvarea_primforest","ov_hvarea_primforest",select = list(type="level")),dim=3)
103-
ov_hvarea_primf <- superAggregate(data = ov_hvarea_primf ,aggr_type = "sum",level = level)
104-
105-
ov73_prod_natveg_other <- dimSums(readGDX(gdx,"ov_prod_natveg","ov73_prod_natveg",select = list(type="level"))[,,"other"],dim=3)
106-
ov73_prod_natveg_other <- superAggregate(data = ov73_prod_natveg_other,aggr_type = "sum",level = level)
107-
ov_hvarea_other <- dimSums(readGDX(gdx,"ov35_hvarea_other","ov73_hvarea_other","ov_hvarea_other",react = "silent",select = list(type="level")),dim=3)
108-
ov_hvarea_other <- superAggregate(data = ov_hvarea_other ,aggr_type = "sum",level = level)
109-
110-
#### Yield calculations
111-
112-
## Plantations
113-
yield_forestry <- ov73_prod_forestry/ov73_hvarea_forestry
114-
if(any(is.na(range(yield_forestry)))){
115-
yield_forestry[is.na(yield_forestry)] <- 0
116-
}
117-
118-
if(any(is.infinite(range(yield_forestry)))){
119-
div0 <- where(ov73_prod_forestry != 0 & ov73_hvarea_forestry == 0)$true$regions
120-
yield_forestry[is.infinite(yield_forestry)] <- 0
121-
}
122-
123-
## Secondary forest
124-
yield_secdf <- ov73_prod_natveg_secdf/ov_hvarea_secdf
125-
if(any(is.na(range(yield_secdf)))){
126-
yield_secdf[is.na(yield_secdf)] <- 0
127-
}
128-
129-
if(any(is.infinite(range(yield_secdf)))){
130-
div0 <- where(ov73_prod_natveg_secdf != 0 & ov_hvarea_secdf == 0)$true$regions
131-
yield_secdf[is.infinite(yield_secdf)] <- 0
132-
}
133-
134-
## Primary forest
135-
yield_primf <- ov73_prod_natveg_primf/ov_hvarea_primf
136-
if(any(is.na(range(yield_primf)))){
137-
yield_primf[is.na(yield_primf)] <- 0
138-
}
139-
140-
if(any(is.infinite(range(yield_primf)))){
141-
div0 <- where(ov73_prod_natveg_primf != 0 & ov_hvarea_primf == 0)$true$regions
142-
yield_primf[is.infinite(yield_primf)] <- 0
143-
}
144-
145-
## Other land
146-
yield_other <- ov73_prod_natveg_other/ov_hvarea_other
147-
if(any(is.na(range(yield_other)))){
148-
yield_other[is.na(yield_other)] <- 0
149-
}
150-
151-
if(any(is.infinite(range(yield_other)))){
152-
div0 <- where(ov73_prod_natveg_other != 0 & ov_hvarea_other == 0)$true$regions
153-
yield_other[is.infinite(yield_other)] <- 0
154-
}
155-
156-
a <- mbind(setNames(yield_forestry,"Forestry"),
157-
setNames(yield_secdf,"Secondary forest"),
158-
setNames(yield_primf,"Primary forest"),
159-
setNames(yield_other,"Other land"))
160-
} else {stop("Resolution not recognized. Select cell or reg or regglo as level. NULL returned.")}
161-
25+
26+
#### get annual production and annual harvested area
27+
ov73_prod_forestry <- setNames(dimSums(readGDX(gdx,"ov_prod_forestry","ov73_prod_forestry",select = list(type="level")),dim=3), "Forestry")
28+
ov73_prod_natveg <- dimSums(readGDX(gdx,"ov_prod_natveg","ov73_prod_natveg",select = list(type="level")),dim="kforestry")
29+
ov73_prod_natveg <- setNames(ov73_prod_natveg,c("Primary forest","Secondary forest","Other land"))
30+
ov73_prod <- mbind(ov73_prod_forestry, ov73_prod_natveg)
31+
ov73_prod <- gdxAggregate(gdx, ov73_prod, to = level)
32+
ov73_hvarea <- harvested_area_timber(gdx, level = level)
33+
34+
#### Yield calculations
35+
yield <- ov73_prod / ov73_hvarea
36+
if(any(is.na(range(yield)))){
37+
yield[is.na(yield)] <- 0
38+
}
39+
40+
if(any(is.infinite(range(yield)))){
41+
div0 <- where(ov73_prod != 0 & ov73_hvarea == 0)$true$regions
42+
yield[is.infinite(yield)] <- 0
43+
}
44+
45+
a <- yield
46+
16247
} else {message("Disabled (no dynamic forestry) ", appendLF = FALSE)}
163-
48+
16449
out(a,file)
165-
}
50+
}

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# MAgPIE outputs R package for MAgPIE version 4.x
22

3-
R package **magpie4**, version **1.206.21**
3+
R package **magpie4**, version **1.206.22**
44

55
[![CRAN status](https://www.r-pkg.org/badges/version/magpie4)](https://cran.r-project.org/package=magpie4) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.1158582.svg)](https://doi.org/10.5281/zenodo.1158582) [![R build status](https://github.com/pik-piam/magpie4/workflows/check/badge.svg)](https://github.com/pik-piam/magpie4/actions) [![codecov](https://codecov.io/gh/pik-piam/magpie4/branch/master/graph/badge.svg)](https://app.codecov.io/gh/pik-piam/magpie4) [![r-universe](https://pik-piam.r-universe.dev/badges/magpie4)](https://pik-piam.r-universe.dev/builds)
66

@@ -39,7 +39,7 @@ In case of questions / problems please contact Benjamin Leon Bodirsky <bodirsky@
3939

4040
To cite package **magpie4** in publications use:
4141

42-
Bodirsky B, Humpenoeder F, Dietrich J, Stevanovic M, Weindl I, Karstens K, Wang X, Mishra A, Beier F, Breier J, Yalew A, Chen D, Biewald A, Wirth S, von Jeetze P, Leip D, Crawford M, Alves M (2024). _magpie4: MAgPIE outputs R package for MAgPIE version 4.x_. doi:10.5281/zenodo.1158582 <https://doi.org/10.5281/zenodo.1158582>, R package version 1.206.21, <https://github.com/pik-piam/magpie4>.
42+
Bodirsky B, Humpenoeder F, Dietrich J, Stevanovic M, Weindl I, Karstens K, Wang X, Mishra A, Beier F, Breier J, Yalew A, Chen D, Biewald A, Wirth S, von Jeetze P, Leip D, Crawford M, Alves M (2024). _magpie4: MAgPIE outputs R package for MAgPIE version 4.x_. doi:10.5281/zenodo.1158582 <https://doi.org/10.5281/zenodo.1158582>, R package version 1.206.22, <https://github.com/pik-piam/magpie4>.
4343

4444
A BibTeX entry for LaTeX users is
4545

@@ -48,7 +48,7 @@ A BibTeX entry for LaTeX users is
4848
title = {magpie4: MAgPIE outputs R package for MAgPIE version 4.x},
4949
author = {Benjamin Leon Bodirsky and Florian Humpenoeder and Jan Philipp Dietrich and Miodrag Stevanovic and Isabelle Weindl and Kristine Karstens and Xiaoxi Wang and Abhijeet Mishra and Felicitas Beier and Jannes Breier and Amsalu Woldie Yalew and David Chen and Anne Biewald and Stephen Wirth and Patrick {von Jeetze} and Debbora Leip and Michael Crawford and Marcos Alves},
5050
year = {2024},
51-
note = {R package version 1.206.21},
51+
note = {R package version 1.206.22},
5252
doi = {10.5281/zenodo.1158582},
5353
url = {https://github.com/pik-piam/magpie4},
5454
}

man/ForestYield.Rd

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)