diff --git a/R/emi_europe_emep_wear.R b/R/emi_europe_emep_wear.R index fe2e29e..b39aa36 100644 --- a/R/emi_europe_emep_wear.R +++ b/R/emi_europe_emep_wear.R @@ -31,9 +31,9 @@ #' @details #' #' The following equation is employed to evaluate emissions originating from tyre -#' and brake wear, respectively. +#' and brake wear #' -#' TE(i) = dist x EF_tsp(j) x mf_s(i) x sc(speed) +#' TE(i) = dist x EF_tsp(j) x mf_s(i) x sc(speed), #' #' where: #' - TE(i) = total emissions of pollutant i (g), diff --git a/README.md b/README.md index d155a6a..04b95ea 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,15 @@ - -# gtfs2emis: Estimating public transport emissions from GTFS data logo - -[![CRAN/METACRAN Version](https://www.r-pkg.org/badges/version/gtfs2emis)](https://CRAN.R-project.org/package=gtfs2emis) -[![CRAN/METACRAN Total downloads](http://cranlogs.r-pkg.org/badges/grand-total/gtfs2emis?color=blue)](https://CRAN.R-project.org/package=gtfs2emis) +--- +editor_options: + markdown: + wrap: 72 +--- + +# gtfs2emis: Estimating public transport emissions from GTFS data logo + +[![CRAN/METACRAN +Version](https://www.r-pkg.org/badges/version/gtfs2emis)](https://CRAN.R-project.org/package=gtfs2emis) +[![CRAN/METACRAN Total +downloads](http://cranlogs.r-pkg.org/badges/grand-total/gtfs2emis?color=blue)](https://CRAN.R-project.org/package=gtfs2emis) [![R-CMD-check](https://github.com/ipeaGIT/gtfs2emis/workflows/R-CMD-check/badge.svg)](https://github.com/ipeaGIT/gtfs2emis/actions) [![Lifecycle: experimental](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://lifecycle.r-lib.org/articles/stages.html) @@ -10,7 +17,6 @@ experimental](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](h coverage](https://codecov.io/gh/ipeaGIT/gtfs2emis/branch/master/graph/badge.svg)](https://app.codecov.io/gh/ipeaGIT/gtfs2emis?branch=master) [![DOI](https://img.shields.io/badge/DOI-10.1016/j.trd.2023.103757-blue)](https://doi.org/10.1016/j.trd.2023.103757) - **gtfs2emis** is an R package to estimate the emission levels of public transport vehicles based on General Transit Feed Specification (GTFS) data. The package requires two main inputs: i) public transport data in @@ -21,15 +27,16 @@ at high spatial and temporal resolutions. Pollution levels can be calculated for specific transport routes, trips, time of the day, or for the transport system as a whole. The output with emission estimates can be extracted in different formats, supporting analysis of how emission -levels vary across space, time, and by fleet characteristics. A full description -of the methods used in the gtfs2emis model is presented in [Vieira, Pereira and Andrade (2022)](https://doi.org/10.31219/osf.io/8m2cy). - +levels vary across space, time, and by fleet characteristics. A full +description of the methods used in the gtfs2emis model is presented in +[Vieira, Pereira and Andrade +(2022)](https://doi.org/10.31219/osf.io/8m2cy). ## Installation You can install `gtfs2emis`: -```R +``` r # From CRAN install.packages("gtfs2emis") library(gtfs2emis) @@ -51,14 +58,22 @@ The `gtfs2emis` package has two core functions. 2. `emission_model()` estimates hot-exhaust emissions based on four inputs: -- 1) the result from the `transport_model()`; +- + + 1) the result from the `transport_model()`; -- 2) a `data.frame` with info on fleet characteristics; +- -- 3) a `string` indicating which emission factor model should be + 2) a `data.frame` with info on fleet characteristics; + +- + + 3) a `string` indicating which emission factor model should be considered; -- 4) a `string` indicating which pollutants should be estimated. +- + + 4) a `string` indicating which pollutants should be estimated. To help users analyze the output from `emission_model()`, the `gtfs2emis` package has few functions: @@ -172,21 +187,32 @@ emission factor models: #### List of pollutants available by emission factor models | Source | Pollutants | -|----------------|------------------------------------------------------------------------------------------------------------------------------------| +|--------------|----------------------------------------------------------| | CETESB | CH4, CO, CO2, ETOH, FC (Fuel Consumption), FS (Fuel Sales), gCO2/KWH, gD/KWH, HC, KML, N2O, NH3, NMHC, NO, NO2, NOx, PM10 and RCHO | | EMFAC2017/CARB | CH4, CO, CO2, N2O, NOx, PM10, PM25, ROG (Reactive Organic Gases), SOX, and TOG (Total Organic Gases) | -| EMEP/EEA | CH4, CO, CO2, EC, FC, N2O, NH3, NOx, PM10, SPN23 (\#kWh), and VOC | +| EMEP/EEA | CH4, CO, CO2, EC, FC, N2O, NH3, NOx, PM10, SPN23 (#kWh), and VOC | | MOVES3/EPA | CH4, CO, CO2, EC, HONO, N2O, NH3, NH4, NO, NO2, NO3, NOx, PM10, PM25, SO2, THC, TOG, and VOC | #### Fleet characteristics required by each emission factor model | Source | Buses | Characteristics | -|----------------|------------------------------|----------------------------------------------| +|-----------------|----------------------|----------------------------------| | CETESB | Micro, Standard, Articulated | Age, Fuel, EURO standard | | EMEP/EAA | Micro, Standard, Articulated | Fuel, EURO standard, technology, load, slope | | EMFAC2017/CARB | Urban Buses | Age, Fuel | | MOVES3/EPA | Urban Buses | Age, Fuel | +### Emissions from road vehicle tire, brake, and surface wear + +`gtfs2emis` also provides emissions estimates from tire, brake and +surface wear using the [EMEP/EEA +model](https://www.eea.europa.eu/themes/air/air-pollution-sources-1/emep-eea-air-pollutant-emission-inventory-guidebook/emep). +The function estimates emissions of particulate matter (PM), +encompassing black carbon (BC), which arises from distinct sources +(tire, brake, and road surface wear). The focus is on primary particles, +which refer to those that are directly emitted, rather than those +generated from the re-suspension of previously deposited material. + ## Learn more Check out the guides for learning everything there is to know about all @@ -198,6 +224,8 @@ the different features: data](https://ipeagit.github.io/gtfs2emis/articles/gtfs2emis_fleet_data.html) - [Exploring Emission Factors](https://ipeagit.github.io/gtfs2emis/articles/gtfs2emis_emission_factor.html) +- [Exploring Non Exhaust Emission + Factors](https://ipeagit.github.io/gtfs2emis/articles/gtfs2emis_non_exhaust_ef.html) ### **Related packages** @@ -253,8 +281,8 @@ citation("gtfs2emis") #> } ``` -### Credits ipea +### Credits ipea The **gtfs2emis** package is developed by a team at the Institute for Applied Economic Research (IPEA) in collaboration from the National -Institute for Space Research (INPE), both from Brazil. +Institute for Space Research (INPE), both from Brazil. diff --git a/man/emi_europe_emep_wear.Rd b/man/emi_europe_emep_wear.Rd index c380155..88fda10 100644 --- a/man/emi_europe_emep_wear.Rd +++ b/man/emi_europe_emep_wear.Rd @@ -54,9 +54,9 @@ resuspension of previously deposited material. See more in @details. } \details{ The following equation is employed to evaluate emissions originating from tyre -and brake wear, respectively. +and brake wear -TE(i) = dist x EF_tsp(j) x mf_s(i) x sc(speed) +TE(i) = dist x EF_tsp(j) x mf_s(i) x sc(speed), where: \itemize{ diff --git a/vignettes/gtfs2emis_emission_factor.Rmd b/vignettes/gtfs2emis_emission_factor.Rmd index 51744bc..eede204 100644 --- a/vignettes/gtfs2emis_emission_factor.Rmd +++ b/vignettes/gtfs2emis_emission_factor.Rmd @@ -50,7 +50,7 @@ model](https://arb.ca.gov/emfac/emissions-inventory) \- Europe, European Environment Agency --- [EMEP-EEA](https://www.eea.europa.eu//publications/emep-eea-guidebook-2019) -***Wear emissions (tyre, brake and road wear)*** +***Wear emissions (tire, brake and road wear)*** \- Europe, European Environment Agency --- [EMEP-EEA](https://www.eea.europa.eu//publications/emep-eea-guidebook-2019) @@ -69,9 +69,11 @@ and pollutant. #library(devtools) #devtools::load_all() ``` + ```{r, eval = FALSE,message = FALSE,} #library(gtfs2emis) ``` + ```{r, message = FALSE} library(units) library(gtfs2emis) @@ -275,6 +277,12 @@ factor functions. Users can also access the scripts used to process raw data in the [gtfs2emis GitHub repository](https://github.com/ipeaGIT/gtfs2emis/tree/master/data-raw). +## Learn more + +Check out our extra guides: + + - [Exploring Non-Exhaust Emission Factors](https://ipeagit.github.io/gtfs2emis/articles/gtfs2emis_non_exhaust_ef.html) + ## Report a bug If you have any suggestions or want to report an error, please visit diff --git a/vignettes/gtfs2emis_fleet_data.Rmd b/vignettes/gtfs2emis_fleet_data.Rmd index bd0b3f8..4834edf 100644 --- a/vignettes/gtfs2emis_fleet_data.Rmd +++ b/vignettes/gtfs2emis_fleet_data.Rmd @@ -133,7 +133,8 @@ fleet_data_ef_moves Check out our extra guide: - [Exploring Emission Factors](https://ipeagit.github.io/gtfs2emis/articles/gtfs2emis_emission_factor.html) - + - [Exploring Non-Exhaust Emission Factors](https://ipeagit.github.io/gtfs2emis/articles/gtfs2emis_non_exhaust_ef.html) + ## Report a bug If you have any suggestions or want to report an error, please visit [the package GitHub page](https://github.com/ipeaGIT/gtfs2emis/issues). diff --git a/vignettes/gtfs2emis_intro_vignette.Rmd b/vignettes/gtfs2emis_intro_vignette.Rmd index 68415f4..b65a5be 100644 --- a/vignettes/gtfs2emis_intro_vignette.Rmd +++ b/vignettes/gtfs2emis_intro_vignette.Rmd @@ -297,7 +297,7 @@ Check out our extra guides: - [Defining Fleet data](https://ipeagit.github.io/gtfs2emis/articles/gtfs2emis_fleet_data.html) - [Exploring Emission Factors](https://ipeagit.github.io/gtfs2emis/articles/gtfs2emis_emission_factor.html) - + - [Exploring Non-Exhaust Emission Factors](https://ipeagit.github.io/gtfs2emis/articles/gtfs2emis_non_exhaust_ef.html) ## Report a bug If you have any suggestions or want to report an error, please visit [the package GitHub page](https://github.com/ipeaGIT/gtfs2emis/issues). \ No newline at end of file diff --git a/vignettes/gtfs2emis_non_exhaust_ef.Rmd b/vignettes/gtfs2emis_non_exhaust_ef.Rmd new file mode 100644 index 0000000..eb18c55 --- /dev/null +++ b/vignettes/gtfs2emis_non_exhaust_ef.Rmd @@ -0,0 +1,215 @@ +--- +title: "Exploring Non-Exhaust Emission Factors" +date: "`r Sys.Date()`" +output: rmarkdown::html_vignette +urlcolor: blue +vignette: > + %\VignetteIndexEntry{Exploring Non-Exhaust Emission Factors} + \usepackage[utf8]{inputenc} + %\VignetteEngine{knitr::rmarkdown} +editor_options: + markdown: + wrap: 72 +--- + +```{r, include = FALSE} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>") +``` + +When assessing vehicle emissions inventories for particles, one relevant step is taking into account the non-exhaust processes, such as tire, brake and road wear. The `gtfs2emis` incorporates the non-exhaust emissions methods from [EMEP-EEA](https://www.eea.europa.eu//publications/emep-eea-guidebook-2019). + +The following equation is employed to evaluate emissions originating +from tire and brake wear + +$$ + TE_i = dist \times EF_{tsp}(j) \times mf_s(i) \times SC(speed) +$$ where: + +- $TE(i)$ = total emissions of pollutant i (g), +- $dist$ = distance driven by each vehicle (km), +- $EF_{tsp}(j)$ = TSP mass emission factor for vehicles of category j + (g/km), +- $mf_s(i)$ = mass fraction of TSP that can be attributed to particle + size class i, +- $SC(speed)$ = correction factor for a mean vehicle travelling at a + given speed (-). + +## Tire + +In the case of heavy-duty vehicles, the emission factor needs the +incorporation of vehicle size, as determined by the number of axles, and +load. These parameters are introduced into the equation as follows: + +$$EFTSP^{hdv}_{tire} = 0.5 \times N_{axle} \times LCF_{tire} \times EFTSP^{pc}_{tire}$$ + +where: + +- $EFTSP^{hdv}_{tire}$ = TSP emission factor for tire wear from +heavy-duty vehicles (g/km), +- $N_{axle}$ = number of vehicle axles (-), +- $LCF_{tire}$ = a load correction factor for tire wear (-), +- $EFTSP^{pc}_{tire}$ = TSP emission factor for tire wear from passenger +car vehicles (g/km). + +and $$LCF_{tire} = 1.41 + (1.38 \times LF)$$ + +where: + +- $LF$ = load factor (-), ranging from 0 for an empty bus to 1 for a fully laden one. + +The function considers the following look-up table for number of vehicle +axes: + +| vehicle class (j) | number of axes | +|----------------------|----------------| +| Ubus Midi \<=15 t | 2 | +| Ubus Std 15 - 18 t | 2 | +| Ubus Artic \>18 t | 3 | +| Coaches Std \<=18 t | 2 | +| Coaches Artic \>18 t | 3 | + +The size distribution of tire wear particles are given by: + +| particle size class (i) | mass fraction of TSP | +|-------------------------|----------------------| +| TSP | 1.000 | +| PM10 | 0.600 | +| PM2.5 | 0.420 | +| PM1.0 | 0.060 | +| PM0.1 | 0.048 | + +Finally, the speed correction is: + +- $SC_{tire}(speed) = 1.39$, when $speed < 40 km/h$; +- $SC_{tire}(speed) = -0.00974 \times speed + 1.78$, when $40 <= speed <= 90 km/h$; +- $SC_{tire}(speed) = 0.902$, when $speed > 90 km/h$. + +```{r} +library(gtfs2emis) +emi_europe_emep_wear(dist = units::set_units(1,"km"), + speed = units::set_units(30,"km/h"), + pollutant = c("PM10","TSP","PM2.5"), + veh_type = "Ubus Std 15 - 18 t", + fleet_composition = 1, + load = 0.5, + process = c("tyre"), + as_list = TRUE) +``` + +## Brake + +The heavy-duty vehicle emission factor is derived by modifying the +passenger car emission factor to conform to experimental data obtained +from heavy-duty vehicles. + +$$EFTSP^{hdv}_{brake} = 1.956 \times LCF_{brake} \times EFTSP^{pc}_{brake}$$ + +where: + +- $EFTSP^{hdv}_{brake}$ = heavy-duty vehicle emission factor for TSP, +- $LCF_{brake}$ = load correction factor for brake wear, +- $EFTSP^{pc}_{brake}$ = passenger car emission factor for TSP. + + +$$LCF_{brake} = 1 + (0.79 \times LF),$$ + +where: + +- $LF$ = load factor (-), ranging from 0 for an empty bus to 1 for a fully laden one. + +The size distribution of brake wear particles are given by: + +| particle size class (i) | mass fraction of TSP | +|-------------------------|----------------------| +| TSP | 1.000 | +| PM10 | 0.980 | +| PM2.5 | 0.390 | +| PM1.0 | 0.100 | +| PM0.1 | 0.080 | + +Finally, the speed correction is: + +- $SC_{brake}(speed) = 1.67$, when $speed < 40 km/h$; +- $SC_{brake}(speed) = -0.0270 \times speed + 2.75$, when $40 <= speed <= 95 km/h$; +- $SC_{brake}(speed) = 0.185$, when $speed > 95 km/h$. + +```{r, message = FALSE} +emi_europe_emep_wear(dist = units::set_units(1,"km"), + speed = units::set_units(30,"km/h"), + pollutant = c("PM10","TSP","PM2.5"), + veh_type = "Ubus Std 15 - 18 t", + fleet_composition = 1, + load = 0.5, + process = c("brake"), + as_list = TRUE) +``` + +## Road Wear + +Emissions are calculated according to the equation: + +$$TE(i) = dist \times EF^{road}_{tsp}(j) \times mf_{road}$$ + +where: + +- $TE(i)$ = total emissions of pollutant i (g), +- $dist$ = total distance driven by vehicles in category j (km), +- $EF^{road}_{tsp}$ = TSP mass emission factor from road wear for vehicles j (0.0760 g/km), +- $mf_{road}$ = mass fraction of TSP that can be attributed to particle size class i (-). + +The following table shows the size distribution of road surface wear +particles + +| particle size class (i) | mass fraction of TSP | +|-------------------------|----------------------| +| TSP | 1.00 | +| PM10 | 0.50 | +| PM2.5 | 0.27 | + +```{r, message = FALSE} +emi_europe_emep_wear(dist = units::set_units(1,"km"), + speed = units::set_units(30,"km/h"), + pollutant = c("PM10","TSP","PM2.5"), + veh_type = "Ubus Std 15 - 18 t", + fleet_composition = 1, + load = 0.5, + process = c("road"), + as_list = TRUE) +``` + +## Viewing Emissions + +Users can also use one single function to apply for more than one process (e.g. tire, brake and road), as shown below. + +```{r, message = FALSE,fig.height=3, fig.width=8} +library(units) +library(ggplot2) + +emis_list <- emi_europe_emep_wear(dist = units::set_units(rep(1,100),"km"), + speed = units::set_units(1:100,"km/h"), + pollutant = c("PM10","TSP","PM2.5"), + veh_type = c("Ubus Std 15 - 18 t"), + fleet_composition = c(1), + load = 0.5, + process = c("brake","tyre","road"), + as_list = TRUE) +ef_dt <- gtfs2emis::emis_to_dt(emis_list,emi_vars = "emi" + ,segment_vars = "speed") +ggplot(ef_dt)+ + geom_line(aes(x = as.numeric(speed),y = as.numeric(emi),color = pollutant))+ + facet_wrap(facets = vars(process))+ + labs(x = "Speed (km/h)",y = "Emissions (g)")+ + theme_minimal() +``` +### References + +EMEP/EEA data and reports can be accessed in the following links: +- 2019 edition \url{https://www.eea.europa.eu/publications/emep-eea-guidebook-2019/part-b-sectoral-guidance-chapters/1-energy/1-a-combustion/1-a-3-b-vi/view}. + + +## Report a bug + +If you have any suggestions or want to report an error, please visit +[the package GitHub page](https://github.com/ipeaGIT/gtfs2emis/issues).