@@ -24,23 +24,21 @@ namespace geochemistry
2424namespace carbonate
2525{
2626
27- constexpr CArrayWrapper<double , 11 , 18 > stoichMatrix =
28- { // OH- CO2 CO3-2 H2CO3 CaHCO3+ CaSO4 CaCl+ CaCl2 MgSO4 NaSO4- CaCO3 H+ HCO3- Ca+2 SO4-2 Cl- Mg+2 Na+
29- { -1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 }, // OH- + H+ = H2O
30- { 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 }, // CO2 + H2O = H+ + HCO3-
31- { 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 1 , 0 , 0 , 0 , 0 , 0 }, // CO3-2 + H+ = HCO3-
32- { 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 }, // H2CO3 = H+ + HCO3-
33- { 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 }, // CaHCO3+ = Ca+2 + HCO3-
34- { 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 }, // CaSO4 = Ca+2 + SO4-2
35- { 0 , 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 }, // CaCl+ = Ca+2 + Cl-
36- { 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 2 , 0 , 0 }, // CaCl2 = Ca+2 + 2Cl-
37- { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 }, // MgSO4 = Mg+2 + SO4-2
38- { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 }, // NaSO4- = Na+ + SO4-2
39- { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , -1 , 1 , 1 , 0 , 0 , 0 , 0 } // CaCO3(s) + H+ = Ca+2 + HCO3- (kinetic)
40- // { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 1, 0, 0, 0, 0 } // Ca(OH)2(s) + 2H+ = Ca2+ + 2H2O (kinetic)
27+ constexpr CArrayWrapper<double , 10 , 17 > stoichMatrix =
28+ { // OH- CO2 CO3-2 CaHCO3+ CaSO4 CaCl+ CaCl2 MgSO4 NaSO4- CaCO3 H+ HCO3- Ca+2 SO4-2 Cl- Mg+2 Na+
29+ { -1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 }, // OH- + H+ = H2O
30+ { 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 }, // CO2 + H2O = H+ + HCO3-
31+ { 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 1 , 0 , 0 , 0 , 0 , 0 }, // CO3-2 + H+ = HCO3-
32+ { 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 }, // CaHCO3+ = Ca+2 + HCO3-
33+ { 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 }, // CaSO4 = Ca+2 + SO4-2
34+ { 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 }, // CaCl+ = Ca+2 + Cl-
35+ { 0 , 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 2 , 0 , 0 }, // CaCl2 = Ca+2 + 2Cl-
36+ { 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 }, // MgSO4 = Mg+2 + SO4-2
37+ { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 }, // NaSO4- = Na+ + SO4-2
38+ { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , -1 , 1 , 1 , 0 , 0 , 0 , 0 } // CaCO3(s) + H+ = Ca+2 + HCO3- (kinetic)
4139 };
4240
43- constexpr CArrayWrapper<double , 11 , 16 > stoichMatrixNosolid =
41+ constexpr CArrayWrapper<double , 10 , 16 > stoichMatrixNosolid =
4442 { // OH- CO2 CO3-2 CaHCO3+ CaSO4 CaCl+ CaCl2 MgSO4 NaSO4- H+ HCO3- Ca+2 SO4-2 Cl- Mg+2 Na+
4543 { -1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 }, // OH- + H+ = H2O
4644 { 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 }, // CO2 + H2O = H+ + HCO3-
@@ -52,27 +50,24 @@ constexpr CArrayWrapper<double, 11, 16> stoichMatrixNosolid =
5250 { 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 }, // MgSO4 = Mg+2 + SO4-2
5351 { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 }, // NaSO4- = Na+ + SO4-2
5452 { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 1 , 1 , 0 , 0 , 0 , 0 } // CaCO3(s) + H+ = Ca+2 + HCO3- (kinetic)
55- // { 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 1, 0, 0, 0, 0 } // Ca(OH)2(s) + 2H+ = Ca2+ + 2H2O (kinetic)
5653 };
5754
58- // C^{n+1} - C^n - r( C^{n+1} ) * dt = 0
5955// thermodynamic constants derived from 'llnl.tdat' used by Geochemists' Workbench (originally from EQ36)
60- constexpr CArrayWrapper<double , 11 > equilibriumConstants =
56+ constexpr CArrayWrapper<double , 10 > equilibriumConstants =
6157 {
62- 9.89E+13 , // OH- + H+ = H2O
63- 4.42E-07 , // CO2 + H2O = H+ + HCO3-
64- 2.21E+10 , // CO3-2 + H+ = HCO3-
65- 6.00E-02 , // CaHCO3+ = Ca+2 + HCO3-
66- 4.79E-03 , // CaSO4 = Ca+2 + SO4-2
67- 2.00E-01 , // CaCl+ = Ca+2 + Cl-
68- 3.98E+00 , // CaCl2 = Ca+2 + 2Cl-
69- 5.92E-03 , // MgSO4 = Mg+2 + SO4-2
70- 2.02E-01 , // NaSO4- = Na+ + SO4-2
71- 5.16E+01 // CaCO3 + H+ = Ca+2 + HCO3- (kinetic)
72- // 1
73- }; // Ca(OH)2(s) + 2H+ = Ca2+ + 2H2O (kinetic)
58+ 9.89E+13 , // OH- + H+ = H2O
59+ 4.42E-07 , // CO2 + H2O = H+ + HCO3-
60+ 2.21E+10 , // CO3-2 + H+ = HCO3-
61+ 6.00E-02 , // CaHCO3+ = Ca+2 + HCO3-
62+ 4.79E-03 , // CaSO4 = Ca+2 + SO4-2
63+ 2.00E-01 , // CaCl+ = Ca+2 + Cl-
64+ 3.98E+00 , // CaCl2 = Ca+2 + 2Cl-
65+ 5.92E-03 , // MgSO4 = Mg+2 + SO4-2
66+ 2.02E-01 , // NaSO4- = Na+ + SO4-2
67+ 5.16E+01 // CaCO3 + H+ = Ca+2 + HCO3- (kinetic)
68+ };
7469
75- constexpr CArrayWrapper<double , 11 > forwardRates =
70+ constexpr CArrayWrapper<double , 10 > forwardRates =
7671 {
7772 1.4e11 , // OH- + H+ = H2O
7873 0.039 , // CO2 + H2O = H+ + HCO3-
@@ -83,32 +78,31 @@ constexpr CArrayWrapper<double, 11> forwardRates =
8378 1.0e7 , // CaCl2 = Ca+2 + 2Cl-
8479 1.0e5 , // MgSO4 = Mg+2 + SO4-2
8580 1.0e7 , // NaSO4- = Na+ + SO4-2
86- 1.55E-06 // CaCO3 + H+ = Ca+2 + HCO3- (kinetic)
87-
88- // 1
89- }; // Ca(OH)2(s) + 2H+ = Ca2+ + 2H2O (kinetic)
81+ 1.55E-06 // CaCO3 + H+ = Ca+2 + HCO3- (kinetic)
82+ };
9083
91- constexpr CArrayWrapper<double , 11 > reverseRates =
92- { 1.43E-03 , // OH- + H+ = H2O
93- 8.92E+04 , // CO2 + H2O = H+ + HCO3-
94- 4.67E-01 , // CO3-2 + H+ = HCO3-
95- 1.85E+07 , // CaHCO3+ = Ca+2 + HCO3-
96- 1.45E+07 , // CaSO4 = Ca+2 + SO4-2
97- 2.14E+07 , // CaCl+ = Ca+2 + Cl-
98- 2.51E+06 , // CaCl2 = Ca+2 + 2Cl-
99- 2.69E+07 , // MgSO4 = Mg+2 + SO4-2
100- 6.62E+07 , // NaSO4- = Na+ + SO4-2
101- 3.00E-08 // CaCO3 + H+ = Ca+2 + HCO3-
102- // 1 // Ca(OH)2(s) + 2H+ = Ca2+ + 2H2O (kinetic)
84+ constexpr CArrayWrapper<double , 10 > reverseRates =
85+ { 1.43E-03 , // OH- + H+ = H2O
86+ 8.92E+04 , // CO2 + H2O = H+ + HCO3-
87+ 4.67E-01 , // CO3-2 + H+ = HCO3-
88+ 1.85E+07 , // CaHCO3+ = Ca+2 + HCO3-
89+ 1.45E+07 , // CaSO4 = Ca+2 + SO4-2
90+ 2.14E+07 , // CaCl+ = Ca+2 + Cl-
91+ 2.51E+06 , // CaCl2 = Ca+2 + 2Cl-
92+ 2.69E+07 , // MgSO4 = Mg+2 + SO4-2
93+ 6.62E+07 , // NaSO4- = Na+ + SO4-2
94+ 3.00E-08 // CaCO3 + H+ = Ca+2 + HCO3-
10395 };
104- }
105- using carbonateSystemAllKineticType = reactionsSystems::MixedReactionsParameters< double , int , int , 18 , 11 , 0 >;
106- using carbonateSystemAllEquilibriumType = reactionsSystems::MixedReactionsParameters< double , int , int , 18 , 11 , 11 >;
107- using carbonateSystemType = reactionsSystems::MixedReactionsParameters< double , int , int , 16 , 11 , 10 >;
10896
109- constexpr carbonateSystemAllKineticType carbonateSystemAllKinetic ( carbonate::stoichMatrix, carbonate::equilibriumConstants, carbonate::forwardRates, carbonate::reverseRates );
110- constexpr carbonateSystemAllEquilibriumType carbonateSystemAllEquilibrium ( carbonate::stoichMatrix, carbonate::equilibriumConstants, carbonate::forwardRates, carbonate::reverseRates );
111- constexpr carbonateSystemType carbonateSystem ( carbonate::stoichMatrixNosolid, carbonate::equilibriumConstants, carbonate::forwardRates, carbonate::reverseRates );
97+ }
98+
99+ using carbonateSystemAllKineticType = reactionsSystems::MixedReactionsParameters< double , int , int , 17 , 10 , 0 >;
100+ using carbonateSystemAllEquilibriumType = reactionsSystems::MixedReactionsParameters< double , int , int , 17 , 10 , 10 >;
101+ using carbonateSystemType = reactionsSystems::MixedReactionsParameters< double , int , int , 16 , 10 , 9 >;
102+
103+ constexpr carbonateSystemAllKineticType carbonateSystemAllKinetic ( carbonate::stoichMatrix, carbonate::equilibriumConstants, carbonate::forwardRates, carbonate::reverseRates );
104+ constexpr carbonateSystemAllEquilibriumType carbonateSystemAllEquilibrium ( carbonate::stoichMatrix, carbonate::equilibriumConstants, carbonate::forwardRates, carbonate::reverseRates );
105+ constexpr carbonateSystemType carbonateSystem ( carbonate::stoichMatrixNosolid, carbonate::equilibriumConstants, carbonate::forwardRates, carbonate::reverseRates );
112106
113107// *****UNCRUSTIFY-ON******
114108} // namespace geochemistry
0 commit comments