@@ -24,92 +24,80 @@ 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 , 17 > stoichMatrixNosolid =
44- { // OH- CO2 CO3-2 H2CO3 CaHCO3+ CaSO4 CaCl+ CaCl2 MgSO4 NaSO4- H+ HCO3- Ca+2 SO4-2 Cl- Mg+2 Na+
45- { -1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 }, // OH- + H+ = H2O
46- { 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 }, // CO2 + H2O = H+ + HCO3-
47- { 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 1 , 0 , 0 , 0 , 0 , 0 }, // CO3-2 + H+ = HCO3-
48- { 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 }, // H2CO3 = H+ + HCO3-
49- { 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 }, // CaHCO3+ = Ca+2 + HCO3-
50- { 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 }, // CaSO4 = Ca+2 + SO4-2
51- { 0 , 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 }, // CaCl+ = Ca+2 + Cl-
52- { 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 1 , 0 , 2 , 0 , 0 }, // CaCl2 = Ca+2 + 2Cl-
53- { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 }, // MgSO4 = Mg+2 + SO4-2
54- { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 }, // NaSO4- = Na+ + SO4-2
55- { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 1 , 1 , 0 , 0 , 0 , 0 } // CaCO3(s) + H+ = Ca+2 + HCO3- (kinetic)
56- // { 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)
41+ constexpr CArrayWrapper<double , 10 , 16 > stoichMatrixNosolid =
42+ { // OH- CO2 CO3-2 CaHCO3+ CaSO4 CaCl+ CaCl2 MgSO4 NaSO4- H+ HCO3- Ca+2 SO4-2 Cl- Mg+2 Na+
43+ { -1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 }, // OH- + H+ = H2O
44+ { 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 }, // CO2 + H2O = H+ + HCO3-
45+ { 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 1 , 0 , 0 , 0 , 0 , 0 }, // CO3-2 + H+ = HCO3-
46+ { 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 }, // CaHCO3+ = Ca+2 + HCO3-
47+ { 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 }, // CaSO4 = Ca+2 + SO4-2
48+ { 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 }, // CaCl+ = Ca+2 + Cl-
49+ { 0 , 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 1 , 0 , 2 , 0 , 0 }, // CaCl2 = Ca+2 + 2Cl-
50+ { 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 }, // MgSO4 = Mg+2 + SO4-2
51+ { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 }, // NaSO4- = Na+ + SO4-2
52+ { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -1 , 1 , 1 , 0 , 0 , 0 , 0 } // CaCO3(s) + H+ = Ca+2 + HCO3- (kinetic)
5753 };
5854
59- // C^{n+1} - C^n - r( C^{n+1} ) * dt = 0
60- constexpr CArrayWrapper<double , 11 > equilibriumConstants =
55+ // thermodynamic constants derived from 'llnl.tdat' used by Geochemists' Workbench (originally from EQ36)
56+ constexpr CArrayWrapper<double , 10 > equilibriumConstants =
6157 {
62- 9.77E+13 , // OH- + H+ = H2O
63- 4.37E-07 , // CO2 + H2O = H+ + HCO3-
64- 2.14E+10 , // CO3-2 + H+ = HCO3-
65- 1.70E-04 , // H2CO3 = H+ + HCO3-
66- 8.13E-02 , // CaHCO3+ = Ca+2 + HCO3-
67- 6.92E-03 , // CaSO4 = Ca+2 + SO4-2
68- 4.68E+00 , // CaCl+ = Ca+2 + Cl-
69- 3.98E+00 , // CaCl2 = Ca+2 + 2Cl-
70- 3.72E-03 , // MgSO4 = Mg+2 + SO4-2
71- 1.51E-01 , // NaSO4- = Na+ + SO4-2
72- 1.17E+07 // CaCO3 + H+ = Ca+2 + HCO3- (kinetic)
73- // 1
74- }; // 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+ };
7569
76- constexpr CArrayWrapper<double , 11 > forwardRates =
70+ constexpr CArrayWrapper<double , 10 > forwardRates =
7771 {
7872 1.4e11 , // OH- + H+ = H2O
7973 0.039 , // CO2 + H2O = H+ + HCO3-
80- 1.0e10 , // CO3-2 + H+ = HCO3-
81- 0.57 , // H2CO3 = H+ + HCO3-
74+ 1.0e10 , // CO3-2 + H+ = HCO3-
8275 1.5e6 , // CaHCO3+ = Ca+2 + HCO3-
8376 1.0e5 , // CaSO4 = Ca+2 + SO4-2
8477 1.0e8 , // CaCl+ = Ca+2 + Cl-
8578 1.0e7 , // CaCl2 = Ca+2 + 2Cl-
8679 1.0e5 , // MgSO4 = Mg+2 + SO4-2
8780 1.0e7 , // NaSO4- = Na+ + SO4-2
88- 1.0e5 // CaCO3 + H+ = Ca+2 + HCO3- (kinetic)
89-
90- // 1
91- }; // Ca(OH)2(s) + 2H+ = Ca2+ + 2H2O (kinetic)
81+ 1.55E-06 // CaCO3 + H+ = Ca+2 + HCO3- (kinetic)
82+ };
9283
93- constexpr CArrayWrapper<double , 11 > reverseRates =
94- { 1.43E-03 , // OH- + H+ = H2O
95- 8.92E+04 , // CO2 + H2O = H+ + HCO3-
96- 4.67E-01 , // CO3-2 + H+ = HCO3-
97- 3.35E+03 , // H2CO3 = H+ + HCO3-
98- 1.85E+07 , // CaHCO3+ = Ca+2 + HCO3-
99- 1.45E+07 , // CaSO4 = Ca+2 + SO4-2
100- 2.14E+07 , // CaCl+ = Ca+2 + Cl-
101- 2.51E+06 , // CaCl2 = Ca+2 + 2Cl-
102- 2.69E+07 , // MgSO4 = Mg+2 + SO4-2
103- 6.62E+07 , // NaSO4- = Na+ + SO4-2
104- 8.55E-03 // CaCO3 + H+ = Ca+2 + HCO3-
105- // 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-
10695 };
10796
108- constexpr CArrayWrapper<int , 11 > mobileSpeciesFlag =
97+ constexpr CArrayWrapper<int , 10 > mobileSpeciesFlag =
10998 { 1 , // OH- + H+ = H2O
11099 1 , // CO2 + H2O = H+ + HCO3-
111100 1 , // CO3-2 + H+ = HCO3-
112- 1 , // H2CO3 = H+ + HCO3-
113101 1 , // CaHCO3+ = Ca+2 + HCO3-
114102 1 , // CaSO4 = Ca+2 + SO4-2
115103 1 , // CaCl+ = Ca+2 + Cl-
@@ -118,14 +106,16 @@ constexpr CArrayWrapper<int, 11> mobileSpeciesFlag =
118106 1 , // NaSO4- = Na+ + SO4-2
119107 1 // CaCO3 + H+ = Ca+2 + HCO3-
120108 };
121- }
122- using carbonateSystemAllKineticType = reactionsSystems::MixedReactionsParameters< double , int , int , 18 , 11 , 0 >;
123- using carbonateSystemAllEquilibriumType = reactionsSystems::MixedReactionsParameters< double , int , int , 18 , 11 , 11 >;
124- using carbonateSystemType = reactionsSystems::MixedReactionsParameters< double , int , int , 17 , 11 , 10 >;
125109
126- constexpr carbonateSystemAllKineticType carbonateSystemAllKinetic ( carbonate::stoichMatrix, carbonate::equilibriumConstants, carbonate::forwardRates, carbonate::reverseRates, carbonate::mobileSpeciesFlag );
127- constexpr carbonateSystemAllEquilibriumType carbonateSystemAllEquilibrium ( carbonate::stoichMatrix, carbonate::equilibriumConstants, carbonate::forwardRates, carbonate::reverseRates, carbonate::mobileSpeciesFlag );
128- constexpr carbonateSystemType carbonateSystem ( carbonate::stoichMatrixNosolid, carbonate::equilibriumConstants, carbonate::forwardRates, carbonate::reverseRates, carbonate::mobileSpeciesFlag );
110+ }
111+
112+ using carbonateSystemAllKineticType = reactionsSystems::MixedReactionsParameters< double , int , int , 17 , 10 , 0 >;
113+ using carbonateSystemAllEquilibriumType = reactionsSystems::MixedReactionsParameters< double , int , int , 17 , 10 , 10 >;
114+ using carbonateSystemType = reactionsSystems::MixedReactionsParameters< double , int , int , 16 , 10 , 9 >;
115+
116+ constexpr carbonateSystemAllKineticType carbonateSystemAllKinetic ( carbonate::stoichMatrix, carbonate::equilibriumConstants, carbonate::forwardRates, carbonate::reverseRates, carbonate::mobileSpeciesFlag );
117+ constexpr carbonateSystemAllEquilibriumType carbonateSystemAllEquilibrium ( carbonate::stoichMatrix, carbonate::equilibriumConstants, carbonate::forwardRates, carbonate::reverseRates, carbonate::mobileSpeciesFlag );
118+ constexpr carbonateSystemType carbonateSystem ( carbonate::stoichMatrixNosolid, carbonate::equilibriumConstants, carbonate::forwardRates, carbonate::reverseRates, carbonate::mobileSpeciesFlag );
129119
130120// *****UNCRUSTIFY-ON******
131121} // namespace geochemistry
0 commit comments