From 172331766a31c76a038eae028547ac53c6cd503e Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Wed, 15 Jul 2026 09:53:07 -0600 Subject: [PATCH 1/3] add a comment to henrys law equilibirum --- examples/v1/cam_cloud_chemistry.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/v1/cam_cloud_chemistry.json b/examples/v1/cam_cloud_chemistry.json index 0755db00..3c37a1fa 100644 --- a/examples/v1/cam_cloud_chemistry.json +++ b/examples/v1/cam_cloud_chemistry.json @@ -48,6 +48,7 @@ "aerosol processes": [ { "__comment": "Henry's Law Equilibrium: SO2(g) <-> SO2(aq)", + "__note": "HLC = HLC_ref * exp(C*(1/T - 1/T0))", "type": "HENRY_LAW_EQUILIBRIUM", "gas phase": "gas", "gas-phase species": "SO2", @@ -62,6 +63,7 @@ }, { "__comment": "Henry's Law Equilibrium: H2O2(g) <-> H2O2(aq)", + "__note": "HLC = HLC_ref * exp(C*(1/T - 1/T0))", "type": "HENRY_LAW_EQUILIBRIUM", "gas phase": "gas", "gas-phase species": "H2O2", @@ -76,6 +78,7 @@ }, { "__comment": "Henry's Law Equilibrium: O3(g) <-> O3(aq)", + "__note": "HLC = HLC_ref * exp(C*(1/T - 1/T0))", "type": "HENRY_LAW_EQUILIBRIUM", "gas phase": "gas", "gas-phase species": "O3", From d2dc9f4a15cb34a275d9057ffccf9a376601de11 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Wed, 15 Jul 2026 14:17:14 -0600 Subject: [PATCH 2/3] rename arrhenius reference temerature equilibrium --- examples/v1/cam_cloud_chemistry.json | 8 ++++---- include/mechanism_configuration/types/aerosol.hpp | 10 +++++----- src/detail/v1/aerosol/keys.hpp | 2 +- src/detail/v1/aerosol/parsers.hpp | 4 ++-- src/v1/aerosol/parsers.cpp | 12 ++++++------ src/v1/aerosol/schema.cpp | 10 +++++----- test/unit/test_validate.cpp | 4 ++-- 7 files changed, 25 insertions(+), 25 deletions(-) diff --git a/examples/v1/cam_cloud_chemistry.json b/examples/v1/cam_cloud_chemistry.json index 3c37a1fa..84ad355d 100644 --- a/examples/v1/cam_cloud_chemistry.json +++ b/examples/v1/cam_cloud_chemistry.json @@ -109,7 +109,7 @@ "CLOUD": { "type": "ARRHENIUS", "A": 3.184e8, "C": 4430.0 } }, "equilibrium constant": { - "type": "ARRHENIUS_REFERENCE_TEMPERATURE", "A": 1725.0, "C [K]": 0.0, "T0 [K]": 298.15 + "type": "EQUILIBRIUM", "A": 1725.0, "C [K]": 0.0, "T0 [K]": 298.15 } }, { @@ -143,7 +143,7 @@ ], "algebraic species": "OHm", "equilibrium constant": { - "type": "ARRHENIUS_REFERENCE_TEMPERATURE", "A": 3.24e-18, "C [K]": 0.0, "T0 [K]": 298.15 + "type": "EQUILIBRIUM", "A": 3.24e-18, "C [K]": 0.0, "T0 [K]": 298.15 } }, { @@ -160,7 +160,7 @@ ], "algebraic species": "HSO3m", "equilibrium constant": { - "type": "ARRHENIUS_REFERENCE_TEMPERATURE", "A": 3.06e-4, "C [K]": 2090.0, "T0 [K]": 298.15 + "type": "EQUILIBRIUM", "A": 3.06e-4, "C [K]": 2090.0, "T0 [K]": 298.15 } }, { @@ -177,7 +177,7 @@ { "name": "SO3mm", "coefficient": 1 } ], "equilibrium constant": { - "type": "ARRHENIUS_REFERENCE_TEMPERATURE", "A": 1.08e-9, "C [K]": 1120.0, "T0 [K]": 298.15 + "type": "EQUILIBRIUM", "A": 1.08e-9, "C [K]": 1120.0, "T0 [K]": 298.15 } }, { diff --git a/include/mechanism_configuration/types/aerosol.hpp b/include/mechanism_configuration/types/aerosol.hpp index ee47f9e4..e2502212 100644 --- a/include/mechanism_configuration/types/aerosol.hpp +++ b/include/mechanism_configuration/types/aerosol.hpp @@ -21,7 +21,7 @@ namespace mechanism_configuration::types /// @brief Reference-temperature Arrhenius /// f(T) = A * exp( C * (1/T0 - 1/T) ) (C = +Ea/R, positive) - struct ArrheniusReferenceTemperature + struct Equilibrium { double A; ///< Value at the reference temperature T0 [units vary by use] double C = 0.0; ///< Temperature-dependence parameter [K] (C = +Ea/R) @@ -29,7 +29,7 @@ namespace mechanism_configuration::types }; /// @brief Henry's law constant: HLC(T) = HLC_ref * exp( C * (1/T - 1/T0) ) - /// Same as ArrheniusReferenceTemperature but with the + /// Same as Equilibrium but with the /// opposite temperature trend (solubility rises as T falls) struct HenryLawConstant { @@ -39,7 +39,7 @@ namespace mechanism_configuration::types }; /// @brief A reaction rate constant parsed from config. - using RateConstant = std::variant>; + using RateConstant = std::variant>; // ---------------------------------------- // Representations @@ -97,7 +97,7 @@ namespace mechanism_configuration::types std::map forward_rate_constants; std::map reverse_rate_constants; /// @brief Shared, intrinsic equilibrium constant (NOT per representation). - std::optional equilibrium_constant; + std::optional equilibrium_constant; std::optional solvent_floor_; }; @@ -138,7 +138,7 @@ namespace mechanism_configuration::types std::string solvent; std::vector reactants; std::vector products; - ArrheniusReferenceTemperature equilibrium_constant; + Equilibrium equilibrium_constant; std::optional solvent_floor_; }; diff --git a/src/detail/v1/aerosol/keys.hpp b/src/detail/v1/aerosol/keys.hpp index 77c3d759..a298cda0 100644 --- a/src/detail/v1/aerosol/keys.hpp +++ b/src/detail/v1/aerosol/keys.hpp @@ -39,7 +39,7 @@ namespace mechanism_configuration::v1::keys inline constexpr std::string_view equilibrium_constant = "equilibrium constant"; inline constexpr std::string_view reference_temperature = "T0 [K]"; - inline constexpr std::string_view ArrheniusReferenceTemperature_key = "ARRHENIUS_REFERENCE_TEMPERATURE"; + inline constexpr std::string_view Equilibrium_key = "EQUILIBRIUM"; inline constexpr std::string_view henry_law_constant = "Henry's law constant"; inline constexpr std::string_view HLC_ref = "HLC_ref [mol m-3 Pa-1]"; diff --git a/src/detail/v1/aerosol/parsers.hpp b/src/detail/v1/aerosol/parsers.hpp index 98049e1d..cf6dfd83 100644 --- a/src/detail/v1/aerosol/parsers.hpp +++ b/src/detail/v1/aerosol/parsers.hpp @@ -21,13 +21,13 @@ namespace mechanism_configuration::v1 // ---------------------------------------- types::HenryLawConstant ParseHenryLawConstant(const YAML::Node& object); - types::ArrheniusReferenceTemperature ParseArrheniusReferenceTemperature(const YAML::Node& object); + types::Equilibrium ParseEquilibrium(const YAML::Node& object); /// @brief Parses a bare Arrhenius rate-constant block (A, B, C, D, E). types::Arrhenius ParseArrhenius(const YAML::Node& object); /// @brief Parses one rate-constant block into the RateConstant variant, dispatching on its - /// inner `type` (ARRHENIUS -> Arrhenius, ARRHENIUS_REFERENCE_TEMPERATURE -> Arrhenius reference temperature). + /// inner `type` (ARRHENIUS -> Arrhenius, EQUILIBRIUM -> Equilibrium constant). types::RateConstant ParseRateConstant(const YAML::Node& object); /// @brief Parses a per-representation rate-constant map, e.g. { "CLOUD": { ... } }. diff --git a/src/v1/aerosol/parsers.cpp b/src/v1/aerosol/parsers.cpp index acd0fb76..50b63331 100644 --- a/src/v1/aerosol/parsers.cpp +++ b/src/v1/aerosol/parsers.cpp @@ -15,9 +15,9 @@ namespace mechanism_configuration::v1 // Rate constants parser // ---------------------------------------- - types::ArrheniusReferenceTemperature ParseArrheniusReferenceTemperature(const YAML::Node& object) + types::Equilibrium ParseEquilibrium(const YAML::Node& object) { - types::ArrheniusReferenceTemperature rate_constant; + types::Equilibrium rate_constant; rate_constant.A = object[keys::A].as(); if (object[keys::henry_law_C]) @@ -47,8 +47,8 @@ namespace mechanism_configuration::v1 types::RateConstant ParseRateConstant(const YAML::Node& object) { - if (object[keys::type] && object[keys::type].as() == keys::ArrheniusReferenceTemperature_key) - return ParseArrheniusReferenceTemperature(object); + if (object[keys::type] && object[keys::type].as() == keys::Equilibrium_key) + return ParseEquilibrium(object); // ARRHENIUS is the default when no (recognized) type is given. return ParseArrhenius(object); @@ -183,7 +183,7 @@ namespace mechanism_configuration::v1 if (object[keys::reverse_rate_constants]) reaction.reverse_rate_constants = ParseRateConstantMap(object[keys::reverse_rate_constants]); if (object[keys::equilibrium_constant]) - reaction.equilibrium_constant = ParseArrheniusReferenceTemperature(object[keys::equilibrium_constant]); + reaction.equilibrium_constant = ParseEquilibrium(object[keys::equilibrium_constant]); return reaction; } @@ -225,7 +225,7 @@ namespace mechanism_configuration::v1 equilibrium.solvent = object[keys::solvent].as(); equilibrium.reactants = ParseReactionComponents(object, keys::reactants); equilibrium.products = ParseReactionComponents(object, keys::products); - equilibrium.equilibrium_constant = ParseArrheniusReferenceTemperature(object[keys::equilibrium_constant]); + equilibrium.equilibrium_constant = ParseEquilibrium(object[keys::equilibrium_constant]); return equilibrium; } diff --git a/src/v1/aerosol/schema.cpp b/src/v1/aerosol/schema.cpp index 82eff72e..093e39c6 100644 --- a/src/v1/aerosol/schema.cpp +++ b/src/v1/aerosol/schema.cpp @@ -21,7 +21,7 @@ namespace mechanism_configuration::v1 { namespace { - Errors CheckArrheniusReferenceTemperatureSchema(const YAML::Node& object) + Errors CheckEquilibriumSchema(const YAML::Node& object) { const std::vector required_keys = { keys::A, keys::henry_law_C }; const std::vector optional_keys = { keys::type, keys::reference_temperature }; @@ -37,8 +37,8 @@ namespace mechanism_configuration::v1 Errors CheckRateConstantSchema(const YAML::Node& object) { - if (object[keys::type] && object[keys::type].as() == keys::ArrheniusReferenceTemperature_key) - return CheckArrheniusReferenceTemperatureSchema(object); + if (object[keys::type] && object[keys::type].as() == keys::Equilibrium_key) + return CheckEquilibriumSchema(object); return CheckArrheniusSchema(object); } @@ -208,7 +208,7 @@ namespace mechanism_configuration::v1 } if (object[keys::equilibrium_constant]) { - auto e = CheckArrheniusReferenceTemperatureSchema(object[keys::equilibrium_constant]); + auto e = CheckEquilibriumSchema(object[keys::equilibrium_constant]); nested_errors.insert(nested_errors.end(), e.begin(), e.end()); } } @@ -247,7 +247,7 @@ namespace mechanism_configuration::v1 } if (object[keys::equilibrium_constant]) { - auto e = CheckArrheniusReferenceTemperatureSchema(object[keys::equilibrium_constant]); + auto e = CheckEquilibriumSchema(object[keys::equilibrium_constant]); nested_errors.insert(nested_errors.end(), e.begin(), e.end()); } } diff --git a/test/unit/test_validate.cpp b/test/unit/test_validate.cpp index 5cea810a..e92ef978 100644 --- a/test/unit/test_validate.cpp +++ b/test/unit/test_validate.cpp @@ -246,7 +246,7 @@ TEST(ValidateAerosol, AcceptsValidProcessesAndConstraints) reaction.solvent = "H2O"; reaction.reactants = { component("A") }; reaction.products = { component("A") }; - reaction.rate_constants = { { "cloud", types::ArrheniusReferenceTemperature{} } }; // keyed by a declared representation + reaction.rate_constants = { { "cloud", types::Equilibrium{} } }; // keyed by a declared representation m.aerosol->processes.push_back(reaction); m.aerosol->constraints = { ValidEquilibrium() }; @@ -287,7 +287,7 @@ TEST(ValidateAerosol, DetectsRateConstantKeyedByUnknownRepresentation) reaction.solvent = "H2O"; reaction.reactants = { component("A") }; reaction.products = { component("A") }; - reaction.rate_constants = { { "not_a_representation", types::ArrheniusReferenceTemperature{} } }; + reaction.rate_constants = { { "not_a_representation", types::Equilibrium{} } }; m.aerosol->processes = { reaction }; EXPECT_TRUE(HasCode(ValidateAerosolModel(m), ErrorCode::UnknownAerosolRepresentation)); From 4f745daaf09158dd95c229da5063e20bc09a2d25 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Wed, 15 Jul 2026 14:21:09 -0600 Subject: [PATCH 3/3] update the comments --- include/mechanism_configuration/types/aerosol.hpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/include/mechanism_configuration/types/aerosol.hpp b/include/mechanism_configuration/types/aerosol.hpp index e2502212..6120fb03 100644 --- a/include/mechanism_configuration/types/aerosol.hpp +++ b/include/mechanism_configuration/types/aerosol.hpp @@ -19,7 +19,7 @@ namespace mechanism_configuration::types // Rate constants // ---------------------------------------- - /// @brief Reference-temperature Arrhenius + /// @brief Equilibrium constant with reference-temperature Arrhenius form /// f(T) = A * exp( C * (1/T0 - 1/T) ) (C = +Ea/R, positive) struct Equilibrium { @@ -29,8 +29,7 @@ namespace mechanism_configuration::types }; /// @brief Henry's law constant: HLC(T) = HLC_ref * exp( C * (1/T - 1/T0) ) - /// Same as Equilibrium but with the - /// opposite temperature trend (solubility rises as T falls) + /// Same as Equilibrium but with the opposite temperature trend struct HenryLawConstant { double HLC_ref; ///< Reference HLC at T0 [mol m-3 Pa-1]