-
Notifications
You must be signed in to change notification settings - Fork 49
Indirect effects of H2 on trop O3 #780
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
base: dev-h2
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -62,6 +62,11 @@ void OzoneComponent::init(Core *coreptr) { | |
core->registerInput(D_EMISSIONS_CO, getComponentName()); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @bpbond before I wrap up the changes for this PR I do have a question, looking at the src/o3_component.cpp
which makes me think that we can also read in the H2 emissions a second time here? Is that how we want to do this? Or should these emissions be passed as a dependency from the OH component? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @kdorheim No, I agree, it seems cleanest to have it as a direct input here too. That surprises me a little! I didn't realize (or forgot) the model could route inputs to multiple components. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. So leave it as is? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That's my vote, yes |
||
core->registerInput(D_EMISSIONS_NMVOC, getComponentName()); | ||
core->registerInput(D_EMISSIONS_NOX, getComponentName()); | ||
core->registerInput(D_EMISSIONS_H2, getComponentName()); | ||
// Parameters read in from the ini | ||
core->registerInput(D_COEFF_O3_H2, getComponentName()); | ||
core->registerInput(D_PREINDUSTRIAL_O3, getComponentName()); | ||
|
||
} | ||
|
||
//------------------------------------------------------------------------------ | ||
|
@@ -94,6 +99,9 @@ void OzoneComponent::setData(const string &varName, const message_data &data) { | |
if (varName == D_PREINDUSTRIAL_O3) { | ||
H_ASSERT(data.date == Core::undefinedIndex(), "date not allowed"); | ||
PO3 = data.getUnitval(U_DU_O3); | ||
} else if (varName == D_COEFF_O3_H2) { | ||
H_ASSERT(data.date == Core::undefinedIndex(), "date not allowed"); | ||
CO3_H2 = data.getUnitval(U_DU_O3_TG); | ||
} else if (varName == D_EMISSIONS_NOX) { | ||
H_ASSERT(data.date != Core::undefinedIndex(), "date required"); | ||
NOX_emissions.set(data.date, data.getUnitval(U_TG_N)); | ||
|
@@ -103,6 +111,9 @@ void OzoneComponent::setData(const string &varName, const message_data &data) { | |
} else if (varName == D_EMISSIONS_NMVOC) { | ||
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)); | ||
} else { | ||
H_THROW("Unknown variable name while parsing " + getComponentName() + | ||
": " + varName); | ||
|
@@ -131,12 +142,13 @@ void OzoneComponent::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); | ||
unitval current_ch4 = core->sendMessage(M_GETDATA, D_CH4_CONC, runToDate); | ||
|
||
O3.set(runToDate, | ||
unitval((5 * log(current_ch4)) + (0.125 * current_nox) + | ||
(0.0011 * current_co) + (0.0033 * current_nmvoc), | ||
U_DU_O3)); | ||
(0.0011 * current_co) + (0.0033 * current_nmvoc) + | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is there documentation on the source of these coefficients? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. are you talking about the 0.0011, 0.0033, 0.125, and 5? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sorry, yes There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Gah! sorry I forgot to finish my reply! So those coefficients came from our implementation of Tanaka 2007 from Wigley 2002. But long story is that there is an implementation problem (similar to what happened with the methane lifetime wrt OH equation) so these coefficients might need to be changed Tanaka, K., Kriegler, E., Bruckner, T., Hooss, G., Knorr, W., & Raddatz, T. (2007). Aggregated carbon cycle, atmospheric chemistry, and climate model (ACC2). Reports on Earth Systems Science, 40. https://www.semanticscholar.org/paper/Aggregated-Carbon-cycle%2C-atmospheric-chemistry-and-Tanaka-Kriegler/78a873db5b1d1410a68165f1fdf1873beba4e6db Wigley, T. M. L., Smith, S. J., & Prather, M. J. (2002). Radiative Forcing Due to Reactive Gas Emissions. Journal of Climate, 15, 2690–2696. https://doi.org/10.1175/1520-0442(2002)015<2690:RFDTRG>2.0.CO;2 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks for the extra detail @kdorheim |
||
(CO3_H2.value(U_DU_O3_TG) * current_h2), U_DU_O3)); | ||
|
||
oldDate = runToDate; | ||
|
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What's the unit here, exactly? Might be worth an explanatory comment.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is it O3 Dobson Units per Tg emissions (in this case it is H2 emissions)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's pretty esoteric :) -- anyway, my suggestion is just to make sure an explanation is easily findable by readers