Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

H2 effects on CH4 lifetime #758

Open
wants to merge 5 commits into
base: dev-h2
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Package: hector
Title: The Hector Simple Climate Model
Version: 3.2.0
Version: 3.3.0.9999999
Authors@R: c(person("Kalyn", "Dorheim",
email = "[email protected]",
role = c("aut", "cre"),
Expand Down
4 changes: 4 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# hector 3.3.0.9999999

* under development for the H2 integration, increasing the version index though will be ensure that the right version of hector is being run with gcam

# hector 3.2.0
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.10698028.svg)](https://doi.org/10.5281/zenodo.10698028)
* Correct aerosol forcing coefficients based on Zelinka et al. (2023)
Expand Down
7 changes: 7 additions & 0 deletions R/RcppExports.R
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
#' @describeIn emissions Emissions hydrogen gas (\code{"Tg H2"})
NULL

#' @describeIn oh coefficent for the h2 emissions
NULL

#' @describeIn msgtype Message type for retrieving data from a component
#' @keywords internal
GETDATA <- function() {
Expand Down Expand Up @@ -1571,6 +1574,10 @@ HEAT_FLUX <- function() {
.Call('_hector_HEAT_FLUX', PACKAGE = 'hector')
}

COEFF_H2 <- function() {
.Call('_hector_COEFF_H2', PACKAGE = 'hector')
}

newcore_impl <- function(inifile, loglevel, suppresslogging, name) {
.Call('_hector_newcore_impl', PACKAGE = 'hector', inifile, loglevel, suppresslogging, name)
}
Expand Down
1 change: 1 addition & 0 deletions inst/include/component_data.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,7 @@
#define D_COEFFICENT_CH4 "CCH4"
#define D_COEFFICENT_NMVOC "CNMVOC"
#define D_COEFFICENT_CO "CCO"
#define D_COEFFICENT_H2 "CH2"
#define D_EMISSIONS_H2 "H2_emissions"


Expand Down
2 changes: 1 addition & 1 deletion inst/include/h_util.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
* \brief The model version number to be included in logs and outputs.
* \note Manually update the git tag to match this.
*/
#define MODEL_VERSION "3.2.0"
#define MODEL_VERSION "3.3.0.9999999"

#define OUTPUT_DIRECTORY "output/"

Expand Down
2 changes: 2 additions & 0 deletions inst/include/oh_component.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ class OHComponent : public IModelComponent {
double CNMVOC; // coefficent for NMVOC
double CNOX; // coefficent for NOX
double CCH4; // coefficent for CH4
unitval CH2; // coefficent for CH4


// logger
Logger logger;
Expand Down
1 change: 1 addition & 0 deletions inst/input/hector_ssp119.ini
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ CNOX=0.0042 ; coefficent for NOX
CCO=-0.000105 ; coefficent for CO
CNMVOC=-0.000315 ; coefficent for NMVOC (non methane VOC)
CCH4=-0.32 ; coefficent for CH4
CH2=-0.00044625 ; coefficent for H2

;------------------------------------------------------------------------
[ozone]
Expand Down
2 changes: 2 additions & 0 deletions inst/input/hector_ssp126.ini
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,8 @@ CNOX=0.0042 ; coefficent for NOX
CCO=-0.000105 ; coefficent for CO
CNMVOC=-0.000315 ; coefficent for NMVOC (non methane VOC)
CCH4=-0.32 ; coefficent for CH4
CH2=-0.00044625 ; coefficent for H2


;------------------------------------------------------------------------
[ozone]
Expand Down
2 changes: 2 additions & 0 deletions inst/input/hector_ssp245.ini
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,8 @@ CNOX=0.0042 ; coefficent for NOX
CCO=-0.000105 ; coefficent for CO
CNMVOC=-0.000315 ; coefficent for NMVOC (non methane VOC)
CCH4=-0.32 ; coefficent for CH4
CH2=-0.00044625 ; coefficent for H2


;------------------------------------------------------------------------
[ozone]
Expand Down
2 changes: 2 additions & 0 deletions inst/input/hector_ssp370.ini
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,8 @@ CNOX=0.0042 ; coefficent for NOX
CCO=-0.000105 ; coefficent for CO
CNMVOC=-0.000315 ; coefficent for NMVOC (non methane VOC)
CCH4=-0.32 ; coefficent for CH4
CH2=-0.00044625 ; coefficent for H2


;------------------------------------------------------------------------
[ozone]
Expand Down
2 changes: 2 additions & 0 deletions inst/input/hector_ssp434.ini
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,8 @@ CNOX=0.0042 ; coefficent for NOX
CCO=-0.000105 ; coefficent for CO
CNMVOC=-0.000315 ; coefficent for NMVOC (non methane VOC)
CCH4=-0.32 ; coefficent for CH4
CH2=-0.00044625 ; coefficent for H2


;------------------------------------------------------------------------
[ozone]
Expand Down
2 changes: 2 additions & 0 deletions inst/input/hector_ssp460.ini
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,8 @@ CNOX=0.0042 ; coefficent for NOX
CCO=-0.000105 ; coefficent for CO
CNMVOC=-0.000315 ; coefficent for NMVOC (non methane VOC)
CCH4=-0.32 ; coefficent for CH4
CH2=-0.00044625 ; coefficent for H2


;------------------------------------------------------------------------
[ozone]
Expand Down
2 changes: 2 additions & 0 deletions inst/input/hector_ssp534-over.ini
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,8 @@ CNOX=0.0042 ; coefficent for NOX
CCO=-0.000105 ; coefficent for CO
CNMVOC=-0.000315 ; coefficent for NMVOC (non methane VOC)
CCH4=-0.32 ; coefficent for CH4
CH2=-0.00044625 ; coefficent for H2


;------------------------------------------------------------------------
[ozone]
Expand Down
2 changes: 2 additions & 0 deletions inst/input/hector_ssp585.ini
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,8 @@ CNOX=0.0042 ; coefficent for NOX
CCO=-0.000105 ; coefficent for CO
CNMVOC=-0.000315 ; coefficent for NMVOC (non methane VOC)
CCH4=-0.32 ; coefficent for CH4
CH2=-0.00044625 ; coefficent for H2


;------------------------------------------------------------------------
[ozone]
Expand Down
11 changes: 11 additions & 0 deletions src/RcppExports.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2627,6 +2627,16 @@ BEGIN_RCPP
return rcpp_result_gen;
END_RCPP
}
// COEFF_H2
String COEFF_H2();
RcppExport SEXP _hector_COEFF_H2() {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
rcpp_result_gen = Rcpp::wrap(COEFF_H2());
return rcpp_result_gen;
END_RCPP
}
// newcore_impl
Environment newcore_impl(String inifile, int loglevel, bool suppresslogging, String name);
RcppExport SEXP _hector_newcore_impl(SEXP inifileSEXP, SEXP loglevelSEXP, SEXP suppressloggingSEXP, SEXP nameSEXP) {
Expand Down Expand Up @@ -3035,6 +3045,7 @@ static const R_CallMethodDef CallEntries[] = {
{"_hector_FLUX_MIXED", (DL_FUNC) &_hector_FLUX_MIXED, 0},
{"_hector_FLUX_INTERIOR", (DL_FUNC) &_hector_FLUX_INTERIOR, 0},
{"_hector_HEAT_FLUX", (DL_FUNC) &_hector_HEAT_FLUX, 0},
{"_hector_COEFF_H2", (DL_FUNC) &_hector_COEFF_H2, 0},
{"_hector_newcore_impl", (DL_FUNC) &_hector_newcore_impl, 4},
{"_hector_shutdown", (DL_FUNC) &_hector_shutdown, 1},
{"_hector_reset", (DL_FUNC) &_hector_reset, 2},
Expand Down
2 changes: 1 addition & 1 deletion src/ch4_component.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ void CH4Component::run(const double runToDate) {
<< std::endl;

// Permafrost thaw produces CH4 emissions
#define PG_C_TO_TG_CH4 (1000.0 * 16.04 / 12.01)
const double PG_C_TO_TG_CH4 (1000.0 * 16.04 / 12.01);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bpbond is this the correct usage of the const double?

const double rh_ch4 =
core->sendMessage(M_GETDATA, D_RH_CH4).value(U_PGC_YR) * PG_C_TO_TG_CH4;

Expand Down
27 changes: 22 additions & 5 deletions src/oh_component.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,15 @@ void OHComponent::init(Core *coreptr) {

// Inform core what data we can provide
core->registerCapability(D_LIFETIME_OH, getComponentName());
core->registerCapability(D_COEFFICENT_H2, getComponentName());
// Register inputs accepted. Note that more than one component
// can accept an input
core->registerInput(D_EMISSIONS_CO, getComponentName());
core->registerInput(D_EMISSIONS_NMVOC, getComponentName());
core->registerInput(D_EMISSIONS_NOX, getComponentName());
core->registerInput(D_EMISSIONS_H2, getComponentName());
core->registerInput(D_COEFFICENT_H2, getComponentName());


}

Expand Down Expand Up @@ -100,8 +103,8 @@ void OHComponent::setData(const string &varName, const message_data &data) {
H_ASSERT(data.date != Core::undefinedIndex(), "date required");
NMVOC_emissions.set(data.date, data.getUnitval(U_TG_NMVOC));
} else if (varName == D_EMISSIONS_H2) {
H_ASSERT(data.date != Core::undefinedIndex(), "date required");
H2_emissions.set(data.date, data.getUnitval(U_TG_H2));
H_ASSERT(data.date != Core::undefinedIndex(), "date required");
H2_emissions.set(data.date, data.getUnitval(U_TG_H2));
} else if (varName == D_INITIAL_LIFETIME_OH) {
H_ASSERT(data.date == Core::undefinedIndex(), "date not allowed");
TOH0 = data.getUnitval(U_YRS);
Expand All @@ -117,6 +120,9 @@ void OHComponent::setData(const string &varName, const message_data &data) {
} else if (varName == D_COEFFICENT_NOX) {
H_ASSERT(data.date == Core::undefinedIndex(), "date not allowed");
CNOX = data.getUnitval(U_UNDEFINED);
} else if (varName == D_COEFFICENT_H2) {
H_ASSERT(data.date == Core::undefinedIndex(), "date not allowed");
CH2 = data.getUnitval(U_UNDEFINED);
} else {
H_THROW("Unknown variable name while parsing " + getComponentName() +
": " + varName);
Expand Down Expand Up @@ -149,6 +155,8 @@ void OHComponent::run(const double runToDate) {
unitval current_nox = NOX_emissions.get(runToDate);
unitval current_co = CO_emissions.get(runToDate);
unitval current_nmvoc = NMVOC_emissions.get(runToDate);
unitval current_h2 = H2_emissions.get(runToDate);


// get this from CH4 component, this is last year's value
const double previous_ch4 =
Expand All @@ -169,7 +177,13 @@ void OHComponent::run(const double runToDate) {
CNMVOC *
((1.0 * +current_nmvoc) -
NMVOC_emissions.get(NMVOC_emissions.firstdate()).value(U_TG_NMVOC));
toh = a + b + c + d;
const double e =
CH2 *
((1.0 * +current_h2) -
H2_emissions.get(H2_emissions.firstdate()).value(U_TG_H2));


toh = a + b + c + d + e;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bpbond do we have strong feelings on the use of e as a variable name?

H_LOG(logger, Logger::DEBUG)
<< "Year " << runToDate << " toh = " << toh << std::endl;
}
Expand Down Expand Up @@ -201,9 +215,12 @@ unitval OHComponent::getData(const std::string &varName, const double date) {
H_ASSERT(date != Core::undefinedIndex(),
"Date required for NMVOC emissions");
returnval = NMVOC_emissions.get(date);
} else if (varName == D_COEFFICENT_H2) {
H_ASSERT(date == Core::undefinedIndex(), "Date not allowed for H2 coefficent");
returnval = CH2 ;
} else if (varName == D_EMISSIONS_H2) {
H_ASSERT(date != Core::undefinedIndex(), "Date required for H2 emissions");
returnval = H2_emissions.get(date);
H_ASSERT(date != Core::undefinedIndex(), "Date required for H2 emissions");
returnval = H2_emissions.get(date);
} else {
H_THROW("Caller is requesting unknown variable: " + varName);
}
Expand Down
6 changes: 6 additions & 0 deletions src/rcpp_constants.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1503,3 +1503,9 @@ String FLUX_INTERIOR() { return D_FLUX_INTERIOR; }
//' @export
// [[Rcpp::export]]
String HEAT_FLUX() { return D_HEAT_FLUX; }


//' @describeIn oh coefficent for the h2 emissions
//' @export
// [[Rcpp::export]]
String COEFF_H2() { return D_COEFFICENT_H2; }
Loading