919TEST(PertinentGeochemicalSystemTest, surfaceSorptionBuilding)
924 database, {
"H2O",
"H+",
"Ca++",
"HCO3-"}, {
"Calcite"}, {}, {}, {}, {},
"O2(aq)",
"e-");
927 EXPECT_EQ(mgdC.surface_sorption_name.size(), (std::size_t)0);
928 EXPECT_EQ(mgdC.surface_sorption_area.size(), (std::size_t)0);
929 for (
unsigned j = 0; j < mgdC.eqm_species_name.size(); ++j)
930 EXPECT_EQ(mgdC.surface_sorption_related[j],
false);
933 {
"H2O",
"H+",
"Fe+++",
">(s)FeOH",
">(w)FeOH"},
934 {
"Fe(OH)3(ppd)fake",
"Goethite"},
942 EXPECT_EQ(mgd2.surface_complexation_info.count(
"Goethite"), (std::size_t)1);
943 EXPECT_EQ(mgd2.surface_sorption_name.size(), (std::size_t)1);
944 EXPECT_EQ(mgd2.surface_sorption_name[0],
"Goethite");
945 EXPECT_EQ(mgd2.surface_sorption_area.size(), (std::size_t)1);
946 EXPECT_EQ(mgd2.surface_sorption_area[0], 60.0);
947 EXPECT_EQ(mgd2.surface_sorption_related.size(), mgd2.eqm_species_name.size());
948 EXPECT_EQ(mgd2.surface_sorption_number.size(), mgd2.eqm_species_name.size());
950 EXPECT_EQ(mgd2.eqm_species_index.count(
">(s)FeO-"), (std::size_t)1);
951 const unsigned posn = mgd2.eqm_species_index.at(
">(s)FeO-");
952 for (
unsigned j = 0; j < mgd2.eqm_species_name.size(); ++j)
954 EXPECT_TRUE(mgd2.surface_sorption_related[j]);
956 EXPECT_FALSE(mgd2.surface_sorption_related[j]);
957 EXPECT_EQ(mgd2.surface_sorption_number[posn], (
unsigned int)0);
1308TEST(PertinentGeochemicalSystemTest, log10K2)
1315 {
"H2O",
"H+",
">(s)FeOH",
">(w)FeOH",
"Fe++",
"HCO3-",
"O2(aq)"},
1316 {
"Fe(OH)3(ppd)fake"},
1356 -2.6487 + 2 * 157.8920 - 2 * (-10.0553),
1359 -2.8202 + 2 * 144.1080 - 2 * (-8.4878),
1362 -2.9329 + 2 * 127.9360 - 2 * (-6.6954),
1365 -2.9446 + 2 * 112.8800 - 2 * (-5.0568),
1368 -2.9163 + 2 * 97.7060 - 2 * (-3.4154),
1371 -2.7253 + 2 * 85.2880 - 2 * (-2.0747),
1374 -2.4643 + 2 * 74.7500 - 2 * (-0.8908),
1377 -2.1569 + 2 * 65.6500 - 2 * (0.2679),
1541TEST(PertinentGeochemicalSystemTest, redoxCapture)
1547 {
"H2O",
"H+",
">(s)FeOH",
">(w)FeOH",
"Fe++",
"HCO3-",
"O2(aq)"},
1548 {
"Fe(OH)3(ppd)fake"},
1549 {
"CH4(g)fake",
"O2(g)"},
1557 EXPECT_EQ(mgd_no_redox.redox_stoichiometry.m(), (
unsigned)1);
1558 EXPECT_EQ(mgd_no_redox.redox_log10K.m(), (
unsigned)1);
1562 {
"H2O",
"H+",
"HCO3-",
"O2(aq)",
"(O-phth)--",
"CH4(aq)",
"StoiCheckRedox",
"Fe+++"},
1563 {
"Fe(OH)3(ppd)fake"},
1564 {
"CH4(g)fake",
"O2(g)"},
1572 EXPECT_EQ(mgd_redox.redox_lhs,
"e-");
1576 EXPECT_EQ(mgd_redox.redox_stoichiometry.m(), (
unsigned)3);
1577 EXPECT_EQ(mgd_redox.redox_log10K.m(), (
unsigned)3);
1582 const bool ophth_is_slot_one = (mgd_redox.redox_stoichiometry(1, 4) > 1.0E-6);
1583 const unsigned ophth_slot = (ophth_is_slot_one ? 1 : 2);
1584 const unsigned ch4_slot = (ophth_is_slot_one ? 2 : 1);
1587 Real boa = 1.0 / 4.0 / 7.5;
1588 EXPECT_EQ(mgd_redox.redox_stoichiometry(ophth_slot, 0), 0.5 + 5.0 * boa);
1589 EXPECT_EQ(mgd_redox.redox_stoichiometry(ophth_slot, 1), -1 - 6.0 * boa);
1590 EXPECT_EQ(mgd_redox.redox_stoichiometry(ophth_slot, 2), -8.0 * boa);
1591 EXPECT_EQ(mgd_redox.redox_stoichiometry(ophth_slot, 3), 0.0);
1592 EXPECT_EQ(mgd_redox.redox_stoichiometry(ophth_slot, 4), boa);
1593 EXPECT_EQ(mgd_redox.redox_stoichiometry(ophth_slot, 5), 0.0);
1594 EXPECT_EQ(mgd_redox.redox_stoichiometry(ophth_slot, 6), 0.0);
1595 EXPECT_EQ(mgd_redox.redox_stoichiometry(ophth_slot, 7), 0.0);
1597 mgd_redox.redox_log10K(ophth_slot, 0), -boa * 594.3211 + 22.76135 - 0.25 * (-2.6610), 1E-8);
1599 mgd_redox.redox_log10K(ophth_slot, 1), -boa * 542.8292 + 20.7757 - 0.25 * (-2.8990), 1E-8);
1601 mgd_redox.redox_log10K(ophth_slot, 2), -boa * 482.3612 + 18.513025 - 0.25 * (-3.0580), 1E-8);
1603 mgd_redox.redox_log10K(ophth_slot, 3), -boa * 425.9738 + 16.4658 - 0.25 * (-3.1250), 1E-8);
1605 mgd_redox.redox_log10K(ophth_slot, 4), -boa * 368.7004 + 14.473225 - 0.25 * (-3.0630), 1E-8);
1607 mgd_redox.redox_log10K(ophth_slot, 5), -boa * 321.8658 + 12.92125 - 0.25 * (-2.9140), 1E-8);
1609 mgd_redox.redox_log10K(ophth_slot, 6), -boa * 281.8216 + 11.68165 - 0.25 * (-2.6600), 1E-8);
1611 mgd_redox.redox_log10K(ophth_slot, 7), -boa * 246.4849 + 10.67105 - 0.25 * (-2.4100), 1E-8);
1615 EXPECT_EQ(mgd_redox.redox_stoichiometry(ch4_slot, 0), 0.5 - boa);
1616 EXPECT_EQ(mgd_redox.redox_stoichiometry(ch4_slot, 1), -1 - boa);
1617 EXPECT_EQ(mgd_redox.redox_stoichiometry(ch4_slot, 2), -boa);
1618 EXPECT_EQ(mgd_redox.redox_stoichiometry(ch4_slot, 3), 0.0);
1619 EXPECT_EQ(mgd_redox.redox_stoichiometry(ch4_slot, 4), 0.0);
1620 EXPECT_EQ(mgd_redox.redox_stoichiometry(ch4_slot, 5), boa);
1621 EXPECT_EQ(mgd_redox.redox_stoichiometry(ch4_slot, 6), 0.0);
1622 EXPECT_EQ(mgd_redox.redox_stoichiometry(ch4_slot, 7), 0.0);
1624 mgd_redox.redox_log10K(ch4_slot, 0), -boa * 157.8920 + 22.76135 - 0.25 * (-2.6610), 1E-8);
1626 mgd_redox.redox_log10K(ch4_slot, 1), -boa * 144.1080 + 20.7757 - 0.25 * (-2.8990), 1E-8);
1628 mgd_redox.redox_log10K(ch4_slot, 2), -boa * 127.9360 + 18.513025 - 0.25 * (-3.0580), 1E-8);
1630 mgd_redox.redox_log10K(ch4_slot, 3), -boa * 112.8800 + 16.4658 - 0.25 * (-3.1250), 1E-8);
1632 mgd_redox.redox_log10K(ch4_slot, 4), -boa * 97.7060 + 14.473225 - 0.25 * (-3.0630), 1E-8);
1634 mgd_redox.redox_log10K(ch4_slot, 5), -boa * 85.2880 + 12.92125 - 0.25 * (-2.9140), 1E-8);
1636 mgd_redox.redox_log10K(ch4_slot, 6), -boa * 74.7500 + 11.68165 - 0.25 * (-2.6600), 1E-8);
1638 mgd_redox.redox_log10K(ch4_slot, 7), -boa * 65.6500 + 10.67105 - 0.25 * (-2.4100), 1E-8);
1642TEST(PertinentGeochemicalSystemTest, redoxCapture_db_strange)
1647 database, {
"H2O",
"H+",
"HCO3-",
"O2(aq)",
"(O-phth)--"}, {}, {}, {}, {}, {},
"O2(aq)",
"e-");
1650 EXPECT_EQ(mgd_redox.redox_lhs,
"e-");
1652 EXPECT_EQ(mgd_redox.redox_stoichiometry.m(), (
unsigned)1);
1653 EXPECT_EQ(mgd_redox.redox_log10K.m(), (
unsigned)1);
1657 EXPECT_EQ(mgd_redox.redox_stoichiometry(0, 0), 2.0);
1658 EXPECT_EQ(mgd_redox.redox_stoichiometry(0, 1), -1.0);
1659 EXPECT_EQ(mgd_redox.redox_stoichiometry(0, 2), 0.0);
1660 EXPECT_EQ(mgd_redox.redox_stoichiometry(0, 3), 3.0);
1661 EXPECT_EQ(mgd_redox.redox_stoichiometry(0, 4), 0.0);
1662 EXPECT_NEAR(mgd_redox.redox_log10K(0, 0), 22.76135 + 14.9325, 1E-8);
1663 EXPECT_NEAR(mgd_redox.redox_log10K(0, 1), 20.7757 + 13.9868, 1E-8);
1664 EXPECT_NEAR(mgd_redox.redox_log10K(0, 2), 18.513025 + 13.0199, 1E-8);
1665 EXPECT_NEAR(mgd_redox.redox_log10K(0, 3), 16.4658 + 12.2403, 1E-8);
1666 EXPECT_NEAR(mgd_redox.redox_log10K(0, 4), 14.473225 + 11.5940, 1E-8);
1667 EXPECT_NEAR(mgd_redox.redox_log10K(0, 5), 12.92125 + 11.2191, 1E-8);
1668 EXPECT_NEAR(mgd_redox.redox_log10K(0, 6), 11.68165 + 11.0880, 1E-8);
1669 EXPECT_NEAR(mgd_redox.redox_log10K(0, 7), 10.67105 + 1001.2844, 1E-8);
1673TEST(PertinentGeochemicalSystemTest, redoxCapture_redox_o_strange)
1678 database, {
"H2O",
"H+",
"HCO3-",
"O2(aq)",
"(O-phth)_0"}, {}, {}, {}, {}, {},
"O2(aq)",
"e-");
1681 EXPECT_EQ(mgd_redox.redox_lhs,
"e-");
1683 EXPECT_EQ(mgd_redox.redox_stoichiometry.m(), (
unsigned)1);
1684 EXPECT_EQ(mgd_redox.redox_log10K.m(), (
unsigned)1);
1688 EXPECT_EQ(mgd_redox.redox_stoichiometry(0, 0), 2.0);
1689 EXPECT_EQ(mgd_redox.redox_stoichiometry(0, 1), -1.0);
1690 EXPECT_EQ(mgd_redox.redox_stoichiometry(0, 2), 0.0);
1691 EXPECT_EQ(mgd_redox.redox_stoichiometry(0, 3), 3.0);
1692 EXPECT_EQ(mgd_redox.redox_stoichiometry(0, 4), 0.0);
1693 EXPECT_NEAR(mgd_redox.redox_log10K(0, 0), 22.76135 + 14.9325, 1E-8);
1694 EXPECT_NEAR(mgd_redox.redox_log10K(0, 1), 20.7757 + 13.9868, 1E-8);
1695 EXPECT_NEAR(mgd_redox.redox_log10K(0, 2), 18.513025 + 13.0199, 1E-8);
1696 EXPECT_NEAR(mgd_redox.redox_log10K(0, 3), 16.4658 + 12.2403, 1E-8);
1697 EXPECT_NEAR(mgd_redox.redox_log10K(0, 4), 14.473225 + 11.5940, 1E-8);
1698 EXPECT_NEAR(mgd_redox.redox_log10K(0, 5), 12.92125 + 11.2191, 1E-8);
1699 EXPECT_NEAR(mgd_redox.redox_log10K(0, 6), 11.68165 + 11.0880, 1E-8);
1700 EXPECT_NEAR(mgd_redox.redox_log10K(0, 7), 10.67105 + 1001.2844, 1E-8);
1820TEST(PertinentGeochemicalSystemTest, addKineticRate)
1824 {
"H2O",
"H+",
"HCO3-",
"O2(aq)",
"Ca++"},
1839 {
"H2O",
"OH-",
"O2(aq)",
"CO2(aq)",
"CaCO3"},
1840 {3.0, 3.1, 3.2, 3.3, 3.4},
1841 {1.0, 2.0, 3.0, 4.0, 5.0},
1842 {1.25, 1.5, 1.75, 2.25, 3.25},
1858 EXPECT_EQ(
mgd.
kin_rate[0].description.intrinsic_rate_constant, 1.0);
1859 EXPECT_EQ(
mgd.
kin_rate[0].description.area_quantity, 2.0);
1860 EXPECT_EQ(
mgd.
kin_rate[0].description.multiply_by_mass,
true);
1864 EXPECT_EQ(
mgd.
kin_rate[0].promoting_indices.size(), pi_gold.size());
1865 EXPECT_EQ(
mgd.
kin_rate[0].promoting_monod_indices.size(), pmi_gold.size());
1866 EXPECT_EQ(
mgd.
kin_rate[0].promoting_half_saturation.size(), pmk_gold.size());
1882 for (
unsigned i = 0; i < pi_gold.size(); ++i)
1884 EXPECT_EQ(
mgd.
kin_rate[0].promoting_indices[i], pi_gold[i]);
1885 EXPECT_EQ(
mgd.
kin_rate[0].promoting_monod_indices[i], pmi_gold[i]);
1886 EXPECT_EQ(
mgd.
kin_rate[0].promoting_half_saturation[i], pmk_gold[i]);
1888 EXPECT_EQ(
mgd.
kin_rate[0].description.theta, 4.0);
1890 EXPECT_EQ(
mgd.
kin_rate[0].description.activation_energy, 6.0);
1891 EXPECT_EQ(
mgd.
kin_rate[0].description.one_over_T0, 7.0);
1893 EXPECT_EQ(
mgd.
kin_rate[0].description.progeny,
"H+");
1894 EXPECT_EQ(
mgd.
kin_rate[0].description.progeny_efficiency, 2.0);
1920 EXPECT_EQ(
mgd.
kin_rate[1].description.intrinsic_rate_constant, 7.0);
1921 EXPECT_EQ(
mgd.
kin_rate[1].description.area_quantity, 6.0);
1922 EXPECT_EQ(
mgd.
kin_rate[1].description.multiply_by_mass,
false);
1923 EXPECT_EQ(
mgd.
kin_rate[1].promoting_indices.size(), pi_gold.size());
1924 std::fill(pi_gold.begin(), pi_gold.end(), 0.0);
1925 std::fill(pmi_gold.begin(), pmi_gold.end(), 0.0);
1926 std::fill(pmk_gold.begin(), pmk_gold.end(), 0.0);
1930 for (
unsigned i = 0; i < pi_gold.size(); ++i)
1932 EXPECT_EQ(
mgd.
kin_rate[1].promoting_indices[i], pi_gold[i]);
1933 EXPECT_EQ(
mgd.
kin_rate[1].promoting_monod_indices[i], pmi_gold[i]);
1934 EXPECT_EQ(
mgd.
kin_rate[1].promoting_half_saturation[i], pmk_gold[i]);
1936 EXPECT_EQ(
mgd.
kin_rate[1].description.theta, 5.0);
1938 EXPECT_EQ(
mgd.
kin_rate[1].description.activation_energy, 3.0);
1939 EXPECT_EQ(
mgd.
kin_rate[1].description.one_over_T0, 2.0);
1941 EXPECT_EQ(
mgd.
kin_rate[1].description.progeny,
"OH-");
1942 EXPECT_EQ(
mgd.
kin_rate[1].description.progeny_efficiency, 1.125);
1950TEST(PertinentGeochemicalSystemTest, kin_log10K1)
1955 {
"H2O",
"H+",
">(s)FeOH",
">(w)FeOH",
"Fe++",
"HCO3-",
"O2(aq)"},
1958 {
"Fe(OH)3(ppd)fake"},
1966 6.1946 + 2 * (-10.0553),
1979 -0.5504 + 2 * (-0.8908),
const PertinentGeochemicalSystem model(database, {"H2O", "H+", "HCO3-", "O2(aq)", "Ca++", ">(s)FeOH", "radius_neg1", "radius_neg1.5"}, {"Calcite"}, {}, {"Calcite_asdf"}, {"CH4(aq)"}, {">(s)FeOCa+"}, "O2(aq)", "e-")