Introduction

This vignette demonstrates the consolidated CDM methodology ACM0019 N2O abatement from nitric acid production using the cdmAcm0019 package. The workflow follows tidyverse idioms and mirrors the structure of the official methodology: applicability diagnostics, simulation of monitoring data, equation walkthrough, monitoring-period aggregation, and an end-to-end estimator.

Applicability Checks

monitoring <- simulate_acm0019_dataset(periods = 2, observations_per_period = 10, seed = 101)

check_applicability_monitoring_coverage(monitoring$data_capture_rate)
##  [1]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
## [13]  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE FALSE
check_applicability_catalyst_configuration(monitoring$catalyst_configuration)
##  [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [16] TRUE TRUE TRUE TRUE TRUE
## [1] TRUE

Simulated Dataset

monitoring |> 
  dplyr::select(period, production_tonnes, baseline_ef_kg_per_tonne, project_ef_kg_per_tonne,
                electricity_mwh, grid_ef_t_per_mwh, steam_tonnes, steam_ef_t_per_tonne) |> 
  head() |> 
  knitr::kable()
## Warning: 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
## Warning: 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
period production_tonnes baseline_ef_kg_per_tonne project_ef_kg_per_tonne electricity_mwh grid_ef_t_per_mwh steam_tonnes steam_ef_t_per_tonne
P1 1460.876 9.434498 1.2964918 108.95138 0.6624767 73.07909 0.0868068
P1 1566.295 9.783409 1.3516428 123.66278 0.7560508 77.42299 0.0837344
P1 1419.007 9.392808 0.7361345 154.90548 0.6826065 99.31623 0.0764293
P1 1525.723 8.914431 1.1080990 116.29781 0.7634736 125.29717 0.0797948
P1 1537.292 9.797774 0.9789233 134.12146 0.6958688 97.52752 0.0825664
P1 1640.876 8.935844 1.2805857 93.72912 0.6722205 55.35659 0.0664523

Equation Walkthrough

example_row <- monitoring |> dplyr::slice(1)

baseline <- calculate_baseline_emissions_acm0019(example_row$production_tonnes,
                                                 example_row$baseline_ef_kg_per_tonne)
project <- calculate_project_emissions_acm0019(example_row$production_tonnes,
                                               example_row$project_ef_kg_per_tonne)
leakage <- calculate_leakage_emissions_acm0019(example_row$electricity_mwh,
                                               example_row$grid_ef_t_per_mwh,
                                               example_row$steam_tonnes,
                                               example_row$steam_ef_t_per_tonne)
net <- calculate_net_emission_reductions_acm0019(baseline, project, leakage)

tibble::tibble(Component = c("Baseline", "Project", "Leakage", "Net"),
               Value_tCO2e = c(baseline, project, leakage, net))
## # A tibble: 4 × 2
##   Component Value_tCO2e
##   <chr>           <dbl>
## 1 Baseline       3652. 
## 2 Project         502. 
## 3 Leakage          78.5
## 4 Net            3072.

Monitoring Period Aggregation

period_summary <- aggregate_monitoring_periods_acm0019(monitoring)
period_summary |> knitr::kable()
## Warning: 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
## Warning: 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
period production_tonnes baseline_ef_kg_per_tonne project_ef_kg_per_tonne electricity_mwh grid_ef_t_per_mwh steam_tonnes steam_ef_t_per_tonne baseline_emissions project_emissions leakage_emissions net_emission_reductions
P1 15294.05 9.477270 1.122257 1228.478 0.6656830 817.4657 0.0761864 38410.64 4548.422 880.0570 32982.16
P2 14472.39 9.534625 1.193442 1462.237 0.6223642 707.0520 0.0816696 36567.04 4577.070 967.7889 31022.18

Meta-Function

## # A tibble: 1 × 5
##   total_production_tonnes total_baseline_emissions total_project_emissions
##                     <dbl>                    <dbl>                   <dbl>
## 1                  29766.                   74978.                   9125.
## # ℹ 2 more variables: total_leakage_emissions <dbl>,
## #   total_net_emission_reductions <dbl>

Function Reference

tibble::tibble(
  Function = c(
    "check_applicability_monitoring_coverage",
    "check_applicability_catalyst_configuration",
    "check_applicability_operating_regime",
    "simulate_acm0019_dataset",
    "calculate_baseline_emissions_acm0019",
    "calculate_project_emissions_acm0019",
    "calculate_leakage_emissions_acm0019",
    "calculate_net_emission_reductions_acm0019",
    "aggregate_monitoring_periods_acm0019",
    "estimate_emission_reductions_acm0019"
  ),
  Signature = c(
    "(data_capture_rate, minimum_coverage = 0.9)",
    "(catalyst_configuration, allowed_configurations = c(\"secondary\", \"tertiary\"))",
    "(plant_regime, has_continuous_monitoring)",
    "(periods = 6, observations_per_period = 30, seed = NULL)",
    "(production_tonnes, baseline_ef_kg_per_tonne, gwp_n2o = 265)",
    "(production_tonnes, project_ef_kg_per_tonne, gwp_n2o = 265)",
    "(electricity_mwh = 0, grid_ef_t_per_mwh = 0, steam_tonnes = 0, steam_ef_t_per_tonne = 0)",
    "(baseline_emissions_tco2e, project_emissions_tco2e, leakage_emissions_tco2e = 0)",
    "(monitoring_data)",
    "(monitoring_data)"
  ),
  Purpose = c(
    "Verify sufficient monitoring coverage",
    "Confirm catalyst configuration eligibility",
    "Ensure regime has continuous monitoring",
    "Generate representative monitoring data",
    "Compute baseline emissions",
    "Compute project emissions",
    "Quantify auxiliary leakage",
    "Calculate net reductions",
    "Aggregate monitoring periods",
    "Summarise total reductions"
  )
) |> knitr::kable()
## Warning: 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
## Warning: 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
Function Signature Purpose
check_applicability_monitoring_coverage (data_capture_rate, minimum_coverage = 0.9) Verify sufficient monitoring coverage
check_applicability_catalyst_configuration (catalyst_configuration, allowed_configurations = c(“secondary”, “tertiary”)) Confirm catalyst configuration eligibility
check_applicability_operating_regime (plant_regime, has_continuous_monitoring) Ensure regime has continuous monitoring
simulate_acm0019_dataset (periods = 6, observations_per_period = 30, seed = NULL) Generate representative monitoring data
calculate_baseline_emissions_acm0019 (production_tonnes, baseline_ef_kg_per_tonne, gwp_n2o = 265) Compute baseline emissions
calculate_project_emissions_acm0019 (production_tonnes, project_ef_kg_per_tonne, gwp_n2o = 265) Compute project emissions
calculate_leakage_emissions_acm0019 (electricity_mwh = 0, grid_ef_t_per_mwh = 0, steam_tonnes = 0, steam_ef_t_per_tonne = 0) Quantify auxiliary leakage
calculate_net_emission_reductions_acm0019 (baseline_emissions_tco2e, project_emissions_tco2e, leakage_emissions_tco2e = 0) Calculate net reductions
aggregate_monitoring_periods_acm0019 (monitoring_data) Aggregate monitoring periods
estimate_emission_reductions_acm0019 (monitoring_data) Summarise total reductions

Workflow Overview

tibble::tibble(
  Step = c(
    "Check applicability",
    "Simulate or collect data",
    "Apply equation helpers",
    "Aggregate monitoring periods",
    "Report totals"
  ),
  Description = c(
    "Validate monitoring coverage, catalyst setup, and regime",
    "Assemble nitric acid production and monitoring records",
    "Compute baseline, project, leakage, and net reductions",
    "Roll observations up to reporting periods",
    "Generate project-level emission reduction totals"
  )
) |> knitr::kable()
## Warning: 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
## Warning: 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
Step Description
Check applicability Validate monitoring coverage, catalyst setup, and regime
Simulate or collect data Assemble nitric acid production and monitoring records
Apply equation helpers Compute baseline, project, leakage, and net reductions
Aggregate monitoring periods Roll observations up to reporting periods
Report totals Generate project-level emission reduction totals