diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 87f92bf..3c2427e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -26,7 +26,7 @@ set( hpcReact_sources) find_package(LAPACK REQUIRED) find_package(BLAS REQUIRED) - + set( hpcReact_dependencies LAPACK::LAPACK BLAS::BLAS @@ -51,7 +51,7 @@ target_include_directories( hpcReact blt_print_target_properties( TARGET hpcReact ) message(STATUS "HPCReact/src CMAKE_CURRENT_SOURCE_DIR: ${CMAKE_CURRENT_SOURCE_DIR}") -# install( FILES ${hpcReact_headers} +# install( FILES ${hpcReact_headers} # DESTINATION include ) diff --git a/src/reactions/exampleSystems/BulkGeneric.hpp b/src/reactions/exampleSystems/BulkGeneric.hpp index 7f1eedd..a637be0 100644 --- a/src/reactions/exampleSystems/BulkGeneric.hpp +++ b/src/reactions/exampleSystems/BulkGeneric.hpp @@ -20,37 +20,37 @@ namespace bulkGeneric // turn off uncrustify to allow for better readability of the parameters // *****UNCRUSTIFY-OFF****** -// constexpr -// EquilibriumKineticsModelConstants< double, int, int, 5 > -// um1Constants = +// constexpr +// EquilibriumKineticsModelConstants< double, int, int, 5 > +// um1Constants = // { // { 1.70e-3, 3.2e-4, 4.7e-11, 1.0e7, 1.0e4 }, // { 0.039, 1.0e4, 1.0e4, 1.0e-12, 1.0e8 }, // { 0.0, 0.0, 0.0, 0.0, 0.0 }, // }; -// constexpr -// ReactionsParameters< double, int, int, EquilibriumKineticsModelConstants, 10, 5 > -// um1Params = -// { -// { -// { +// constexpr +// ReactionsParameters< double, int, int, EquilibriumKineticsModelConstants, 10, 5 > +// um1Params = +// { +// { +// { // { -1, 1, 0, 0, 0, 0, 0, 0, 0, -1 }, // { 0, -1, 1, 1, 0, 0, 0, 0, 0, 0 }, // { 0, 0, 1, -1, 1, 0, 0, 0, 0, 0 }, // { 0, 0, -4, 0, 0, -1, 2, 1, 0, 2 }, -// { 0, 0, 0, 0, -1, 0, -1, 0, 1, 0 } +// { 0, 0, 0, 0, -1, 0, -1, 0, 1, 0 } // } -// }, +// }, // um1Constants }; using simpleKineticTestType = reactionsSystems::MixedReactionsParameters< double, int, signed char, 5, 2, 0 >; -constexpr +constexpr simpleKineticTestType -simpleKineticTestRateParams = -{ +simpleKineticTestRateParams = +{ // stoichiometric matrix { { -2, 1, 1, 0, 0 }, @@ -70,10 +70,10 @@ simpleKineticTestRateParams = using simpleTestType = reactionsSystems::MixedReactionsParameters< double, int, signed char, 5, 2, 2 >; -constexpr +constexpr simpleTestType -simpleTestRateParams = -{ +simpleTestRateParams = +{ // stoichiometric matrix { { -2, 1, 1, 0, 0 }, diff --git a/src/reactions/exampleSystems/ChainGeneric.hpp b/src/reactions/exampleSystems/ChainGeneric.hpp index 196246f..69cafc0 100644 --- a/src/reactions/exampleSystems/ChainGeneric.hpp +++ b/src/reactions/exampleSystems/ChainGeneric.hpp @@ -26,10 +26,10 @@ namespace ChainGeneric // Stoichiometric matrix [3 rows × 3 columns] // Columns 0–3 are primary species: {C1, C2, C3 } { - // C1 C2 C3 + // C1 C2 C3 { -1, 1, 0 }, // C1 = C2 { 0, -1, 1 }, // C2 = C3 - { 0, 0, -1 }, // C3 = + { 0, 0, -1 }, // C3 = }, // Equilibrium constants K @@ -39,24 +39,24 @@ namespace ChainGeneric 0 // C3 }, - // Forward rate constants - { + // Forward rate constants + { 0.05, // C1 = C2 0.03, // C2 = C3 0.02, // C3 }, - // Reverse rate constants - { + // Reverse rate constants + { 0.0, // C1 = C2 - 0.0, // C2 = C3 + 0.0, // C2 = C3 0.0 // C3 }, // Flag of mobile secondary species - { + { 1, // C1 = C2 - 1, // C2 = C3 + 1, // C2 = C3 1 // C3 }, diff --git a/src/reactions/exampleSystems/MoMasBenchmark.hpp b/src/reactions/exampleSystems/MoMasBenchmark.hpp index 3a871b4..27cf35f 100644 --- a/src/reactions/exampleSystems/MoMasBenchmark.hpp +++ b/src/reactions/exampleSystems/MoMasBenchmark.hpp @@ -20,7 +20,7 @@ namespace MoMasBenchmark // *****UNCRUSTIFY-OFF****** using easyCaseType = reactionsSystems::MixedReactionsParameters< double, int, signed char, 12, 7, 7 >; - using mediumCaseType = reactionsSystems::MixedReactionsParameters< double, int, signed char, 14, 10, 9 >; + using mediumCaseType = reactionsSystems::MixedReactionsParameters< double, int, signed char, 14, 10, 9 >; constexpr easyCaseType easyCaseParams = { @@ -49,8 +49,8 @@ namespace MoMasBenchmark 1.0e1 // CS2 + 3X2 = + X4 + 2S }, - // Forward rate constants - { + // Forward rate constants + { 0.0, // C1 = -X2 0.0, // C2 = X2 + X3 0.0, // C3 = -X2 + X4 @@ -60,8 +60,8 @@ namespace MoMasBenchmark 0.0 // CS2 = -3X2 + X4 + 2S }, - // Reverse rate constants - { + // Reverse rate constants + { 0.0, // C1 = -X2 0.0, // C2 = X2 + X3 0.0, // C3 = -X2 + X4 @@ -115,8 +115,8 @@ constexpr mediumCaseType mediumCaseParams = 5 // Cc + 3X2 = X4 (kinetic) }, - // Forward rate constants - { + // Forward rate constants + { 0.0, // C1 = -X2 0.0, // C2 = X2 + X3 0.0, // C3 = -X2 + X4 @@ -129,8 +129,8 @@ constexpr mediumCaseType mediumCaseParams = 10.0 // Cc = -3X2 + X4 (kinetic) }, - // Reverse rate constants - { + // Reverse rate constants + { 0.0, // C1 = -X2 0.0, // C2 = X2 + X3 0.0, // C3 = -X2 + X4 diff --git a/src/reactions/geochemistry/Carbonate.hpp b/src/reactions/geochemistry/Carbonate.hpp index 50d8b05..0b338ec 100644 --- a/src/reactions/geochemistry/Carbonate.hpp +++ b/src/reactions/geochemistry/Carbonate.hpp @@ -24,84 +24,84 @@ namespace geochemistry namespace carbonate { -constexpr CArrayWrapper stoichMatrix = +constexpr CArrayWrapper stoichMatrix = { // OH- CO2 CO3-2 CaHCO3+ CaSO4 CaCl+ CaCl2 MgSO4 NaSO4- CaCO3 H+ HCO3- Ca+2 SO4-2 Cl- Mg+2 Na+ - { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0 }, // OH- + H+ = H2O - { 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, // CO2 + H2O = H+ + HCO3- - { 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0 }, // CO3-2 + H+ = HCO3- + { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0 }, // OH- + H+ = H2O + { 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, // CO2 + H2O = H+ + HCO3- + { 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0 }, // CO3-2 + H+ = HCO3- { 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0 }, // CaHCO3+ = Ca+2 + HCO3- { 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, // CaSO4 = Ca+2 + SO4-2 - { 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0 }, // CaCl+ = Ca+2 + Cl- - { 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0 }, // CaCl2 = Ca+2 + 2Cl- + { 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0 }, // CaCl+ = Ca+2 + Cl- + { 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0 }, // CaCl2 = Ca+2 + 2Cl- { 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 1, 0 }, // MgSO4 = Mg+2 + SO4-2 { 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 0, 1 }, // NaSO4- = Na+ + SO4-2 { 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 1, 1, 0, 0, 0, 0 } // CaCO3(s) + H+ = Ca+2 + HCO3- (kinetic) }; -constexpr CArrayWrapper stoichMatrixNosolid = +constexpr CArrayWrapper stoichMatrixNosolid = { // OH- CO2 CO3-2 CaHCO3+ CaSO4 CaCl+ CaCl2 MgSO4 NaSO4- H+ HCO3- Ca+2 SO4-2 Cl- Mg+2 Na+ - { -1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0 }, // OH- + H+ = H2O - { 0, -1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, // CO2 + H2O = H+ + HCO3- - { 0, 0, -1, 0, 0, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0 }, // CO3-2 + H+ = HCO3- + { -1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0 }, // OH- + H+ = H2O + { 0, -1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, // CO2 + H2O = H+ + HCO3- + { 0, 0, -1, 0, 0, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0 }, // CO3-2 + H+ = HCO3- { 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0 }, // CaHCO3+ = Ca+2 + HCO3- { 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, // CaSO4 = Ca+2 + SO4-2 - { 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0 }, // CaCl+ = Ca+2 + Cl- - { 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 2, 0, 0 }, // CaCl2 = Ca+2 + 2Cl- + { 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0 }, // CaCl+ = Ca+2 + Cl- + { 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 2, 0, 0 }, // CaCl2 = Ca+2 + 2Cl- { 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 1, 0 }, // MgSO4 = Mg+2 + SO4-2 { 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 1 }, // NaSO4- = Na+ + SO4-2 { 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 1, 0, 0, 0, 0 } // CaCO3(s) + H+ = Ca+2 + HCO3- (kinetic) }; // thermodynamic constants derived from 'llnl.tdat' used by Geochemists' Workbench (originally from EQ36) -constexpr CArrayWrapper equilibriumConstants = - { - 9.89E+13, // OH- + H+ = H2O - 4.42E-07, // CO2 + H2O = H+ + HCO3- - 2.21E+10, // CO3-2 + H+ = HCO3- +constexpr CArrayWrapper equilibriumConstants = + { + 9.89E+13, // OH- + H+ = H2O + 4.42E-07, // CO2 + H2O = H+ + HCO3- + 2.21E+10, // CO3-2 + H+ = HCO3- 6.00E-02, // CaHCO3+ = Ca+2 + HCO3- 4.79E-03, // CaSO4 = Ca+2 + SO4-2 - 2.00E-01, // CaCl+ = Ca+2 + Cl- - 3.98E+00, // CaCl2 = Ca+2 + 2Cl- + 2.00E-01, // CaCl+ = Ca+2 + Cl- + 3.98E+00, // CaCl2 = Ca+2 + 2Cl- 5.92E-03, // MgSO4 = Mg+2 + SO4-2 - 2.02E-01, // NaSO4- = Na+ + SO4-2 - 5.16E+01 // CaCO3 + H+ = Ca+2 + HCO3- (kinetic) + 2.02E-01, // NaSO4- = Na+ + SO4-2 + 5.16E+01 // CaCO3 + H+ = Ca+2 + HCO3- (kinetic) }; -constexpr CArrayWrapper forwardRates = - { - 1.4e11, // OH- + H+ = H2O - 0.039, // CO2 + H2O = H+ + HCO3- - 1.0e10, // CO3-2 + H+ = HCO3- +constexpr CArrayWrapper forwardRates = + { + 1.4e11, // OH- + H+ = H2O + 0.039, // CO2 + H2O = H+ + HCO3- + 1.0e10, // CO3-2 + H+ = HCO3- 1.5e6, // CaHCO3+ = Ca+2 + HCO3- 1.0e5, // CaSO4 = Ca+2 + SO4-2 - 1.0e8, // CaCl+ = Ca+2 + Cl- - 1.0e7, // CaCl2 = Ca+2 + 2Cl- + 1.0e8, // CaCl+ = Ca+2 + Cl- + 1.0e7, // CaCl2 = Ca+2 + 2Cl- 1.0e5, // MgSO4 = Mg+2 + SO4-2 - 1.0e7, // NaSO4- = Na+ + SO4-2 - 1.55E-06 // CaCO3 + H+ = Ca+2 + HCO3- (kinetic) + 1.0e7, // NaSO4- = Na+ + SO4-2 + 1.55E-06 // CaCO3 + H+ = Ca+2 + HCO3- (kinetic) }; -constexpr CArrayWrapper reverseRates = - { 1.43E-03, // OH- + H+ = H2O - 8.92E+04, // CO2 + H2O = H+ + HCO3- - 4.67E-01, // CO3-2 + H+ = HCO3- +constexpr CArrayWrapper reverseRates = + { 1.43E-03, // OH- + H+ = H2O + 8.92E+04, // CO2 + H2O = H+ + HCO3- + 4.67E-01, // CO3-2 + H+ = HCO3- 1.85E+07, // CaHCO3+ = Ca+2 + HCO3- 1.45E+07, // CaSO4 = Ca+2 + SO4-2 - 2.14E+07, // CaCl+ = Ca+2 + Cl- - 2.51E+06, // CaCl2 = Ca+2 + 2Cl- + 2.14E+07, // CaCl+ = Ca+2 + Cl- + 2.51E+06, // CaCl2 = Ca+2 + 2Cl- 2.69E+07, // MgSO4 = Mg+2 + SO4-2 6.62E+07, // NaSO4- = Na+ + SO4-2 3.00E-08 // CaCO3 + H+ = Ca+2 + HCO3- }; -constexpr CArrayWrapper mobileSpeciesFlag = - { 1, // OH- + H+ = H2O - 1, // CO2 + H2O = H+ + HCO3- - 1, // CO3-2 + H+ = HCO3- +constexpr CArrayWrapper mobileSpeciesFlag = + { 1, // OH- + H+ = H2O + 1, // CO2 + H2O = H+ + HCO3- + 1, // CO3-2 + H+ = HCO3- 1, // CaHCO3+ = Ca+2 + HCO3- 1, // CaSO4 = Ca+2 + SO4-2 - 1, // CaCl+ = Ca+2 + Cl- - 1, // CaCl2 = Ca+2 + 2Cl- + 1, // CaCl+ = Ca+2 + Cl- + 1, // CaCl2 = Ca+2 + 2Cl- 1, // MgSO4 = Mg+2 + SO4-2 1, // NaSO4- = Na+ + SO4-2 1 // CaCO3 + H+ = Ca+2 + HCO3- diff --git a/src/reactions/geochemistry/Forge.hpp b/src/reactions/geochemistry/Forge.hpp index e599389..ed71fe5 100644 --- a/src/reactions/geochemistry/Forge.hpp +++ b/src/reactions/geochemistry/Forge.hpp @@ -22,57 +22,67 @@ namespace geochemistry namespace forge { - // Stoichiometric matrix [13 reactions × 23 species] - // Columns 0–12: secondary species (must be -1 on diagonal) - // Columns 13–22: primary species -constexpr CArrayWrapper< signed char, 19, 26 > soichMatrix = -{// CaCO₃ CaHCO₃⁺ CaSO₄ CaCl⁺ CaCl₂ MgHCO₃⁺ MgCO₃ MgCl⁺ CO₂(aq) HSO₄⁻ KHSO₄ HSiO₃⁻ NaHSilO₃ NaCl KCl KSO₄⁻ | H⁺ Ca²⁺ Mg²⁺ Na⁺ K⁺ Al³⁺ HCO₃⁻ SO₄²⁻ Cl⁻ SiO₂(aq) - { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, // CaCO₃(aq) + H⁺ ⇌ Ca²⁺ + HCO₃⁻ - { 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, // CaHCO₃⁺ ⇌ Ca²⁺ + HCO₃⁻ - { 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0 }, // CaSO₄ ⇌ Ca²⁺ + SO₄²⁻ - { 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0 }, // CaCl⁺ ⇌ Ca²⁺ + Cl⁻ - { 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0 }, // CaCl₂ ⇌ Ca²⁺ + 2Cl⁻ - { 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, // MgHCO₃⁺ ⇌ Mg²⁺ + HCO₃⁻ - { 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, // MgCO₃(aq) + H⁺⇌ Mg²⁺ + HCO₃⁻ - { 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 }, // MgCl⁺ ⇌ Mg²⁺ + Cl⁻ - { 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0 }, // CO₂(aq) + H₂O ⇌ H⁺ + HCO₃⁻ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0 }, // HSO₄⁻ ⇌ H⁺ + SO₄²⁻ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0 }, // KHSO₄ ⇌ H⁺ + K⁺ + SO₄²⁻ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, // HSiO₃⁻ ⇌ H⁺ + SiO₂(aq) - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1 }, // NaHSilO₃ ⇌ H⁺ + Na⁺ + SiO₂(aq) - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0 }, // NaCl ⇌ Na⁺ + Cl⁻ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 }, // KCl ⇌ K⁺ + Cl⁻ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0 }, // KSO₄⁻ ⇌ K⁺ + SO₄²⁻ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 1, 1, 0, 0, 0, 2, 0, 0, 0 }, // Dolomite: CaMg(CO₃)₂(s) + 2H⁺ ⇌ Ca²⁺ + Mg²⁺ + 2HCO₃⁻ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 1, 1, 0, 0, 0, 3 }, // Microcline: KAlSi₃O₈(s) + 4H⁺ ⇌ Al³⁺ + K⁺ + 3SiO₂(aq) - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 1, 0, 1, 0, 1, 0, 3 } // Albite: NaAlSi₃O₈(s) + 4H⁺ ⇌ Al³⁺ + Na⁺ + 3SiO₂(aq) + // Stoichiometric matrix [24 reactions × 29 species] + // Columns 1–19: secondary species (must be -1 on diagonal) + // Columns 20–29: primary species +constexpr CArrayWrapper< signed char, 24, 29 > stoichMatrix = +{// CaCO₃ CaHCO₃⁺ CaSO₄ CaCl⁺ CaCl₂ MgHCO₃⁺ MgCO₃ MgCl⁺ CO₂(aq) HSO₄⁻ KHSO₄ HSiO₃⁻ NaHSilO₃ NaCl KCl KSO₄⁻ AlOH²⁺ Al(OH)₂ OH⁻ | H⁺ Ca²⁺ Mg²⁺ Na⁺ K⁺ Al³⁺ HCO₃⁻ SO₄²⁻ Cl⁻ SiO₂(aq) + { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, // CaCO₃(aq) + H⁺ ⇌ Ca²⁺ + HCO₃⁻ + { 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, // CaHCO₃⁺ ⇌ Ca²⁺ + HCO₃⁻ + { 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0 }, // CaSO₄(aq) ⇌ Ca²⁺ + SO₄²⁻ + { 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0 }, // CaCl⁺ ⇌ Ca²⁺ + Cl⁻ + { 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0 }, // CaCl₂(aq) ⇌ Ca²⁺ + 2Cl⁻ + { 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, // MgHCO₃⁺ ⇌ Mg²⁺ + HCO₃⁻ + { 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, // MgCO₃(aq) + H⁺⇌ Mg²⁺ + HCO₃⁻ + { 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 }, // MgCl⁺ ⇌ Mg²⁺ + Cl⁻ + { 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0 }, // CO₂(aq) + H₂O ⇌ H⁺ + HCO₃⁻ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0 }, // HSO₄⁻ ⇌ H⁺ + SO₄²⁻ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0 }, // KHSO₄(aq) ⇌ H⁺ + K⁺ + SO₄²⁻ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, // HSiO₃⁻ ⇌ H⁺ + SiO₂(aq) + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1 }, // NaHSiO₃(aq) ⇌ H⁺ + Na⁺ + SiO₂(aq) + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0 }, // NaCl(aq) ⇌ Na⁺ + Cl⁻ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 }, // KCl(aq) ⇌ K⁺ + Cl⁻ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0 }, // KSO₄⁻ ⇌ K⁺ + SO₄²⁻ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, // AlOH²⁺ + H⁺ ⇌ Al³⁺ + H₂O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -2, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, // Al(OH)₂⁺ + 2H⁺ ⇌ Al³⁺ + 2H₂O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // OH⁻ + H⁺ ⇌ H₂O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, // SiO2(s) ⇌ SiO2(aq) + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -10, 0, 3, 0, 1, 1, 0, 0, 0, 3 }, // KAlMg3Si3O10(OH)2(s) + 10H+ ⇌ Al3+ + K+ + 3Mg2+ + 3SiO2(aq) + 6H2O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, 1, 0, 0, 0, 2, 0, 0, 0, 2 }, // CaAl2(SiO4)2(s) + 8H+ ⇌ Ca2+ + 2 Al3+ + 2 SiO2(aq) + 4H2O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 1, 1, 0, 0, 0, 3 }, // KAlSi3O8(s) + 4H+ ⇌ Al3+ + K+ + 3 SiO2 + 2H2O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, 0, 0, 0, 0, 2, 0, 0, 0, 2 } // Al2Si2O5(OH)4(s) + 6H+ ⇌ 2Al3+ + 2 SiO2 + 5H2O }; -// Must convert these. They should not be the log. -constexpr CArrayWrapper< double, 19 > equilibriumConstants = +// Equilibrium constants for the 24-reaction FORGE system. +constexpr CArrayWrapper< double, 24 > equilibriumConstants = { - 5.9636, // CaCO₃(aq) + H⁺ ⇌ Ca²⁺ + HCO₃⁻ - -1.4181, // CaHCO₃⁺ ⇌ Ca²⁺ + HCO₃⁻ - -2.5111, // CaSO₄ ⇌ Ca²⁺ + SO₄²⁻ - 0.3811, // CaCl⁺ ⇌ Ca²⁺ + Cl⁻ - 0.3811, // CaCl₂ ⇌ Ca²⁺ + 2Cl⁻ (approximate, same source) - -1.4355, // MgHCO₃⁺ ⇌ Mg²⁺ + HCO₃⁻ - -6.5632, // MgCO₃(aq) + H⁺ ⇌ Mg²⁺ + HCO₃⁻ - -0.1820, // MgCl⁺ ⇌ Mg²⁺ + Cl⁻ - -6.3882, // CO₂(aq) + H₂O ⇌ H⁺ + HCO₃⁻ - -3.0020, // HSO₄⁻ ⇌ H⁺ + SO₄²⁻ - -2.2935, // KHSO₄ ⇌ H⁺ + K⁺ + SO₄²⁻ - -9.0844, // HSiO₃⁻ ⇌ H⁺ + SiO₂(aq) - -7.8291, // NaHSilO₃ ⇌ H⁺ + Na⁺ + SiO₂(aq) - 0.4730, // NaCl ⇌ Na⁺ + Cl⁻ - 0.9240, // KCl ⇌ K⁺ + Cl⁻ - -1.1946, // KSO₄⁻ ⇌ K⁺ + SO₄²⁻ - 0.0944, // Dolomite: CaMg(CO₃)₂(s) + 2H⁺ ⇌ Ca²⁺ + Mg²⁺ + 2HCO₃⁻ - -1.8683, // Microcline: KAlSi₃O₈(s) + 4H⁺ ⇌ Al³⁺ + K⁺ + 3SiO₂(aq) - 0.2236 // Albite: NaAlSi₃O₈(s) + 4H⁺ ⇌ Al³⁺ + Na⁺ + 3SiO₂(aq) + 104351.8133, // CaCO₃(aq) + H⁺ ⇌ Ca²⁺ + HCO₃⁻ + 3.9739, //3.98107E-03, // CaHCO₃⁺ ⇌ Ca²⁺ + HCO₃⁻ + 0.3685, //3.6915E-04, // CaSO₄ ⇌ Ca²⁺ + SO₄²⁻ + 292.4726, //0.2930 // CaCl⁺ ⇌ Ca²⁺ + Cl⁻ + 1.2236e+05, //0.1228 // CaCl₂ ⇌ Ca²⁺ + 2Cl⁻ (approximate, same source) + 3.7932, //0.0038 // MgHCO₃⁺ ⇌ Mg²⁺ + HCO₃⁻ + 7.4559E+05, // MgCO₃(aq) + H⁺ ⇌ Mg²⁺ + HCO₃⁻ + 72.4693, //0.0726 // MgCl⁺ ⇌ Mg²⁺ + Cl⁻ + 6.3434e-05, //6.3548E-08 // CO₂(aq) + H₂O ⇌ H⁺ + HCO₃⁻ + 0.0340, //3.4017E-05, // HSO₄⁻ ⇌ H⁺ + SO₄²⁻ + 36.9347, //3.7068E-05, // KHSO₄ ⇌ H⁺ + K⁺ + SO₄²⁻ + 6.8964e+11, // 6.9088E+08, // HSiO₃⁻ ⇌ H⁺ + SiO₂(aq) + 4.5356e+13, //4.5520E+07, // NaHSiO₃ ⇌ H⁺ + Na⁺ + SiO₂(aq) + 805.2479, //0.8067, // NaCl ⇌ Na⁺ + Cl⁻ + 1.6368e+03, //1.6398, // KCl ⇌ K⁺ + Cl⁻ + 12.0782, //0.0121, // KSO₄⁻ ⇌ K⁺ + SO₄²⁻ + 0.0147, //14.6994, // AlOH²⁺ + H⁺ ⇌ Al³⁺ + H₂O + 0.0039, //3.8530E+03, // Al(OH)₂⁺ + 2H⁺ ⇌ Al³⁺ + 2H₂O + 1.9282e+05, //1.9213E+11, // OH⁻ + H⁺ ⇌ H₂O + 0.0036, // SiO2(s) ⇌ SiO2(aq) + 6.6130E+15, // KAlMg3Si3O10(OH)2(s) + 10H+ ⇌ Al3+ + K+ + 3Mg2+ + 3SiO2(aq) + 6H2O + 1.3047E+05, // CaAl2(SiO4)2(s) + 8H+ ⇌ Ca2+ + 2 Al3+ + 2 SiO2(aq) + 4H2O + 1.7669E-04, // KAlSi3O8(s) + 4H+ ⇌ Al3+ + K+ + 3 SiO2 + 2H2O + 3.1463E-05 // Al2Si2O5(OH)4(s) + 6H+ ⇌ 2Al3+ + 2 SiO2 + 5H2O }; -constexpr CArrayWrapper< double, 19 > fwRateConstant = +constexpr CArrayWrapper< double, 24 > fwRateConstant = { 0.0, // CaCO₃(aq) + H⁺ ⇌ Ca²⁺ + HCO₃⁻ 0.0, // CaHCO₃⁺ ⇌ Ca²⁺ + HCO₃⁻ @@ -90,13 +100,18 @@ constexpr CArrayWrapper< double, 19 > fwRateConstant = 0.0, // NaCl ⇌ Na⁺ + Cl⁻ 0.0, // KCl ⇌ K⁺ + Cl⁻ 0.0, // KSO₄⁻ ⇌ K⁺ + SO₄²⁻ - 1.0, // Dolomite: CaMg(CO₃)₂(s) + 2H⁺ ⇌ Ca²⁺ + Mg²⁺ + 2HCO₃⁻ - 1.0, // Microcline: KAlSi₃O₈(s) + 4H⁺ ⇌ Al³⁺ + K⁺ + 3SiO₂(aq) - 1.0 // Albite: NaAlSi₃O₈(s) + 4H⁺ ⇌ Al³⁺ + Na⁺ + 3SiO₂(aq) + 0.0, // AlOH²⁺ + H⁺ ⇌ Al³⁺ + H₂O + 0.0, // Al(OH)₂⁺ + 2H⁺ ⇌ Al³⁺ + 2H₂O + 0.0, // OH⁻ + H⁺ ⇌ H₂O + 2.7043E-08, // SiO2(s) ⇌ SiO2(aq) + 3.0145E-11, // KAlMg3Si3O10(OH)2(s) + 10H+ ⇌ Al3+ + K+ + 3Mg2+ + 3SiO2(aq) + 6H2O + 1.0801E-08, // CaAl2(SiO4)2(s) + 8H+ ⇌ Ca2+ + 2 Al3+ + 2 SiO2(aq) + 4H2O + 1.1283e-10, // KAlSi3O8(s) + 4H+ ⇌ Al3+ + K+ + 3 SiO2 + 2H2O + 1.8137e-12 // Al2Si2O5(OH)4(s) + 6H+ ⇌ 2Al3+ + 2 SiO2 + 5H2O }; -constexpr CArrayWrapper< double, 19 > reverseRateConstant = +constexpr CArrayWrapper< double, 24 > reverseRateConstant = { 0.0, // CaCO₃(aq) + H⁺ ⇌ Ca²⁺ + HCO₃⁻ 0.0, // CaHCO₃⁺ ⇌ Ca²⁺ + HCO₃⁻ @@ -114,12 +129,17 @@ constexpr CArrayWrapper< double, 19 > reverseRateConstant = 0.0, // NaCl ⇌ Na⁺ + Cl⁻ 0.0, // KCl ⇌ K⁺ + Cl⁻ 0.0, // KSO₄⁻ ⇌ K⁺ + SO₄²⁻ - 1.0, // Dolomite: CaMg(CO₃)₂(s) + 2H⁺ ⇌ Ca²⁺ + Mg²⁺ + 2HCO₃⁻ - 1.0, // Microcline: KAlSi₃O₈(s) + 4H⁺ ⇌ Al³⁺ + K⁺ + 3SiO₂(aq) - 1.0 // Albite: NaAlSi₃O₈(s) + 4H⁺ ⇌ Al³⁺ + Na⁺ + 3SiO₂(aq) + 0.0, // AlOH²⁺ + H⁺ ⇌ Al³⁺ + H₂O + 0.0, // Al(OH)₂⁺ + 2H⁺ ⇌ Al³⁺ + 2H₂O + 0.0, // OH⁻ + H⁺ ⇌ H₂O + 7.4240e-09, //7.5119E-06, // SiO2(s) ⇌ SiO2(aq) + 4.5420e-21, //4.5584E-27, // KAlMg3Si3O10(OH)2(s) + 10H+ ⇌ Al3+ + K+ + 3Mg2+ + 3SiO2(aq) + 6H2O + 8.2341e-05, //8.2785E-14, // CaAl2(SiO4)2(s) + 8H+ ⇌ Ca2+ + 2 Al3+ + 2 SiO2(aq) + 4H2O + 6.3975e-10, //6.3858E-07, // KAlSi3O8(s) + 4H+ ⇌ Al3+ + K+ + 3 SiO2 + 2H2O + 0.0574 //5.7645E-08 // Al2Si2O5(OH)4(s) + 6H+ ⇌ 2Al3+ + 2 SiO2 + 5H2O }; -constexpr CArrayWrapper< int, 19 > mobileSpeciesFlag = +constexpr CArrayWrapper< int, 24 > mobileSpeciesFlag = { 1, // CaCO₃(aq) + H⁺ ⇌ Ca²⁺ + HCO₃⁻ 1, // CaHCO₃⁺ ⇌ Ca²⁺ + HCO₃⁻ @@ -137,17 +157,22 @@ constexpr CArrayWrapper< int, 19 > mobileSpeciesFlag = 1, // NaCl ⇌ Na⁺ + Cl⁻ 1, // KCl ⇌ K⁺ + Cl⁻ 1, // KSO₄⁻ ⇌ K⁺ + SO₄²⁻ - 1, // Dolomite: CaMg(CO₃)₂(s) + 2H⁺ ⇌ Ca²⁺ + Mg²⁺ + 2HCO₃⁻ - 1, // Microcline: KAlSi₃O₈(s) + 4H⁺ ⇌ Al³⁺ + K⁺ + 3SiO₂(aq) - 1 // Albite: NaAlSi₃O₈(s) + 4H⁺ ⇌ Al³⁺ + Na⁺ + 3SiO₂(aq) + 1, // AlOH²⁺ + H⁺ ⇌ Al³⁺ + H₂O + 1, // Al(OH)₂⁺ + 2H⁺ ⇌ Al³⁺ + 2H₂O + 1, // OH⁻ + H⁺ ⇌ H₂O + 1, // SiO2(s) ⇌ SiO2(aq) + 1, // KAlMg3Si3O10(OH)2(s) + 10H+ ⇌ Al3+ + K+ + 3Mg2+ + 3SiO2(aq) + 6H2O + 1, // CaAl2(SiO4)2(s) + 8H+ ⇌ Ca2+ + 2 Al3+ + 2 SiO2(aq) + 4H2O + 1, // KAlSi3O8(s) + 4H+ ⇌ Al3+ + K+ + 3 SiO2 + 2H2O + 1 // Al2Si2O5(OH)4(s) + 6H+ ⇌ Al3+ + 2 SiO2 + 5H2O }; } -using forgeSystemType = reactionsSystems::MixedReactionsParameters< double, int, signed char, 26, 19, 16 >; +using forgeSystemType = reactionsSystems::MixedReactionsParameters< double, int, signed char, 29, 24, 19 >; -constexpr forgeSystemType forgeSystem( forge::soichMatrix, forge::equilibriumConstants, forge::fwRateConstant, forge::reverseRateConstant, forge::mobileSpeciesFlag ); +constexpr forgeSystemType forgeSystem( forge::stoichMatrix, forge::equilibriumConstants, forge::fwRateConstant, forge::reverseRateConstant, forge::mobileSpeciesFlag ); // *****UNCRUSTIFY-ON****** diff --git a/src/reactions/geochemistry/GeochemicalSystems.hpp b/src/reactions/geochemistry/GeochemicalSystems.hpp index 00c0731..c9ae53f 100644 --- a/src/reactions/geochemistry/GeochemicalSystems.hpp +++ b/src/reactions/geochemistry/GeochemicalSystems.hpp @@ -22,9 +22,9 @@ namespace hpcReact namespace geochemistry { -using systemTypes = std::variant< ultramaficSystemType, - carbonateSystemType, +using systemTypes = std::variant< carbonateSystemType, carbonateSystemAllEquilibriumType, + ultramaficSystemType, forgeSystemType >; } // namespace geochemistry diff --git a/src/reactions/geochemistry/Ultramafics.hpp b/src/reactions/geochemistry/Ultramafics.hpp index d993536..4afb845 100644 --- a/src/reactions/geochemistry/Ultramafics.hpp +++ b/src/reactions/geochemistry/Ultramafics.hpp @@ -25,38 +25,63 @@ namespace geochemistry namespace ultramafics { -constexpr CArrayWrapper stoichMatrix = -{ // OH- CO2(aq) CO3-- Mg2OH+++ Mg4(OH)++++ MgOH+ Mg2CO3++ MgCO3(aq) MgHCO3+ Mg(H3SiO4)2 MgH2SiO4 MgH3SiO4+ H2SiO4-- H3SiO4- H4(H2SiO4)---- H6(H2SiO4)-- Mg2SiO4 MgCO3 SiO2 Mg3Si2O5(OH)4 Mg(OH)2 H+ HCO3- Mg++ SiO2(aq) - { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0 }, // OH- + H+ = H2O - { 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 }, // CO2(aq) + H2O = HCO3- + H+ - { 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 0, 0 }, // CO3-- + H+ = HCO3- - { 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 2, 0 }, // Mg2OH+++ + H+ = 2Mg++ + H2O - { 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 4, 0 }, // Mg4(OH)++++ + 4H+ = 4Mg++ + 4H2O - { 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 1, 0 }, // MgOH+ + H+ = Mg++ + H2O - { 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 2, 0 }, // Mg2CO3++ + H+ = 2Mg++ + HCO3- - { 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 1, 0 }, // MgCO3 + H+ = Mg++ + HCO3- - { 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 }, // MgHCO3+ = Mg++ + HCO3- - { 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 1, 1 }, // Mg(H3SiO4)2 + 2H+ = Mg++ + SiO2(aq) + 4H2O - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 1, 1 }, // MgH2SiO4 + 2H+ = Mg++ + SiO2(aq) + 2H2O - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 1, 1 }, // MgH3SiO4+ + H+ = Mg++ + SiO2(aq) + 2H2O - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 1 }, // H2SiO4-- + 2H+ = SiO2(aq) + 2H2O - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1 }, // H3SiO4- + H+ = SiO2(aq) + 2H2O - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, -4, 0, 0, 4 }, // H4(H2SiO4)---- + 4H+ = 4SiO2(aq) + 8H2O - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, -2, 0, 0, 4 }, // H6(H2SiO4)-- + 2H+ = 4SiO2 + 8H2O - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, -4, 0, 2, 1 }, // Mg2SiO4 + 4H+ = 2Mg++ + SiO2(aq) + 2H2O - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1, 1, 1, 0 }, // MgCO3 + H+ = Mg++ + HCO3- - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 1 }, // SiO2 = SiO2(aq) - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -6, 0, 3, 2 }, // Mg3Si2O5(OH)4 + 6H+ = 3Mg++ + 2SiO2(aq) + 5H2O - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -2, 0, 1, 0 } // Mg(OH)2 + 2H+ = Mg++ + 2H2O +constexpr CArrayWrapper stoichMatrix = +{ // OH- CO2(aq) CO3-- Mg2OH+++ Mg4(OH)++++ MgOH+ Mg2CO3++ MgCO3(aq) MgHCO3+ Mg(H3SiO4)2 MgH2SiO4 MgH3SiO4+ H2SiO4-- H3SiO4- H4(H2SiO4)---- H6(H2SiO4)-- Mg2SiO4 MgCO3 SiO2 Mg3Si2O5(OH)4 Mg(OH)2 H+ HCO3- Mg++ SiO2(aq) + { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0 }, // OH- + H+ = H2O + { 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 }, // CO2(aq) + H2O = HCO3- + H+ + { 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 0, 0 }, // CO3-- + H+ = HCO3- + { 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 2, 0 }, // Mg2OH+++ + H+ = 2Mg++ + H2O + { 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 4, 0 }, // Mg4(OH)++++ + 4H+ = 4Mg++ + 4H2O + { 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 1, 0 }, // MgOH+ + H+ = Mg++ + H2O + { 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 2, 0 }, // Mg2CO3++ + H+ = 2Mg++ + HCO3- + { 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 1, 0 }, // MgCO3 + H+ = Mg++ + HCO3- + { 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 }, // MgHCO3+ = Mg++ + HCO3- + { 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 1, 1 }, // Mg(H3SiO4)2 + 2H+ = Mg++ + SiO2(aq) + 4H2O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 1, 1 }, // MgH2SiO4 + 2H+ = Mg++ + SiO2(aq) + 2H2O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 1, 1 }, // MgH3SiO4+ + H+ = Mg++ + SiO2(aq) + 2H2O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 1 }, // H2SiO4-- + 2H+ = SiO2(aq) + 2H2O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1 }, // H3SiO4- + H+ = SiO2(aq) + 2H2O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, -4, 0, 0, 4 }, // H4(H2SiO4)---- + 4H+ = 4SiO2(aq) + 8H2O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, -2, 0, 0, 4 }, // H6(H2SiO4)-- + 2H+ = 4SiO2 + 8H2O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, -4, 0, 2, 1 }, // Mg2SiO4 + 4H+ = 2Mg++ + SiO2(aq) + 2H2O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1, 1, 1, 0 }, // MgCO3 + H+ = Mg++ + HCO3- + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 1 }, // SiO2 = SiO2(aq) + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -6, 0, 3, 2 }, // Mg3Si2O5(OH)4 + 6H+ = 3Mg++ + 2SiO2(aq) + 5H2O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -2, 0, 1, 0 } // Mg(OH)2 + 2H+ = Mg++ + 2H2O }; -// 2Mg2SiO4 + 3H2O → Mg3Si2O5(OH)4 + Mg(OH)2 Serpentinization reaction +constexpr CArrayWrapper stoichMatrixNosolid = +{ // OH- CO2(aq) CO3-- Mg2OH+++ Mg4(OH)++++ MgOH+ Mg2CO3++ MgCO3(aq) MgHCO3+ Mg(H3SiO4)2 MgH2SiO4 MgH3SiO4+ H2SiO4-- H3SiO4- H4(H2SiO4)---- H6(H2SiO4)-- H+ HCO3- Mg++ SiO2(aq) + { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0 }, // OH- + H+ = H2O + { 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 }, // CO2(aq) + H2O = HCO3- + H+ + { 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 0, 0 }, // CO3-- + H+ = HCO3- + { 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 2, 0 }, // Mg2OH+++ + H+ = 2Mg++ + H2O + { 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 4, 0 }, // Mg4(OH)++++ + 4H+ = 4Mg++ + 4H2O + { 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 1, 0 }, // MgOH+ + H+ = Mg++ + H2O + { 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 2, 0 }, // Mg2CO3++ + H+ = 2Mg++ + HCO3- + { 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 1, 0 }, // MgCO3 + H+ = Mg++ + HCO3- + { 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 }, // MgHCO3+ = Mg++ + HCO3- + { 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, -2, 0, 1, 1 }, // Mg(H3SiO4)2 + 2H+ = Mg++ + SiO2(aq) + 4H2O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, -2, 0, 1, 1 }, // MgH2SiO4 + 2H+ = Mg++ + SiO2(aq) + 2H2O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, 1, 1 }, // MgH3SiO4+ + H+ = Mg++ + SiO2(aq) + 2H2O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -2, 0, 0, 1 }, // H2SiO4-- + 2H+ = SiO2(aq) + 2H2O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1, 0, 0, 1 }, // H3SiO4- + H+ = SiO2(aq) + 2H2O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -4, 0, 0, 4 }, // H4(H2SiO4)---- + 4H+ = 4SiO2(aq) + 8H2O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -2, 0, 0, 4 }, // H6(H2SiO4)-- + 2H+ = 4SiO2 + 8H2O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 2, 1 }, // Mg2SiO4 + 4H+ = 2Mg++ + SiO2(aq) + 2H2O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 1, 0 }, // MgCO3 + H+ = Mg++ + HCO3- + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, // SiO2 = SiO2(aq) + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, 0, 3, 2 }, // Mg3Si2O5(OH)4 + 6H+ = 3Mg++ + 2SiO2(aq) + 5H2O + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 1, 0 } // Mg(OH)2 + 2H+ = Mg++ + 2H2O + }; + +// 2Mg2SiO4 + 3H2O → Mg3Si2O5(OH)4 + Mg(OH)2 Serpentinization reaction -constexpr CArrayWrapper equilibriumConstants = - { - 9.89E+13, // OH- + H+ = H2O - 4.42E-07, // CO2(aq) + H2O = HCO3- + H+ - 2.23E+10, // CO3-- + H+ = HCO3- +constexpr CArrayWrapper equilibriumConstants = + { + 9.89E+13, // OH- + H+ = H2O + 4.42E-07, // CO2(aq) + H2O = HCO3- + H+ + 2.23E+10, // CO3-- + H+ = HCO3- 2.32E+13, // Mg2OH+++ + H+ = 2Mg++ + H2O 4.47E+39, // Mg4(OH)++++ + 4H+ = 4Mg++ + 4H2O 6.18E+11, // MgOH+ + H+ = Mg++ + H2O @@ -77,11 +102,11 @@ constexpr CArrayWrapper equilibriumConstants = 2.75E+16 // Mg(OH)2 + 2H+ = Mg++ + 2H2O }; -constexpr CArrayWrapper forwardRates = - { - 1.00E+10, // OH- + H+ = H2O - 1.00E+10, // CO2(aq) + H2O = HCO3- + H+ - 1.00E+10, // CO3-- + H+ = HCO3- +constexpr CArrayWrapper forwardRates = + { + 1.00E+10, // OH- + H+ = H2O + 1.00E+10, // CO2(aq) + H2O = HCO3- + H+ + 1.00E+10, // CO3-- + H+ = HCO3- 1.00E+10, // Mg2OH+++ + H+ = 2Mg++ + H2O 1.00E+10, // Mg4(OH)++++ + 4H+ = 4Mg++ + 4H2O 1.00E+10, // MgOH+ + H+ = Mg++ + H2O @@ -102,11 +127,11 @@ constexpr CArrayWrapper forwardRates = 5.75E-09 // Mg(OH)2 + 2H+ = Mg++ + 2H2O }; -constexpr CArrayWrapper reverseRates = - { - 1.00E+10, // OH- + H+ = H2O - 1.00E+10, // CO2(aq) + H2O = HCO3- + H+ - 1.00E+10, // CO3-- + H+ = HCO3- +constexpr CArrayWrapper reverseRates = + { + 1.00E+10, // OH- + H+ = H2O + 1.00E+10, // CO2(aq) + H2O = HCO3- + H+ + 1.00E+10, // CO3-- + H+ = HCO3- 1.00E+10, // Mg2OH+++ + H+ = 2Mg++ + H2O 1.00E+10, // Mg4(OH)++++ + 4H+ = 4Mg++ + 4H2O 1.00E+10, // MgOH+ + H+ = Mg++ + H2O @@ -127,11 +152,11 @@ constexpr CArrayWrapper reverseRates = 2.10E-25 // Mg(OH)2 + 2H+ = Mg++ + 2H2O }; -constexpr CArrayWrapper mobileSpeciesFlag = - { - 1, // OH- + H+ = H2O - 1, // CO2(aq) + H2O = HCO3- + H+ - 1, // CO3-- + H+ = HCO3- +constexpr CArrayWrapper mobileSpeciesFlag = + { + 1, // OH- + H+ = H2O + 1, // CO2(aq) + H2O = HCO3- + H+ + 1, // CO3-- + H+ = HCO3- 1, // Mg2OH+++ + H+ = 2Mg++ + H2O 1, // Mg4(OH)++++ + 4H+ = 4Mg++ + 4H2O 1, // MgOH+ + H+ = Mg++ + H2O @@ -155,11 +180,11 @@ constexpr CArrayWrapper mobileSpeciesFlag = using ultramaficSystemAllKineticType = reactionsSystems::MixedReactionsParameters< double, int, signed char, 25, 21, 0 >; using ultramaficSystemAllEquilibriumType = reactionsSystems::MixedReactionsParameters< double, int, signed char, 25, 21, 21 >; - using ultramaficSystemType = reactionsSystems::MixedReactionsParameters< double, int, signed char, 25, 21, 16 >; + using ultramaficSystemType = reactionsSystems::MixedReactionsParameters< double, int, signed char, 20, 21, 16 >; constexpr ultramaficSystemAllKineticType ultramaficSystemAllKinetic( ultramafics::stoichMatrix, ultramafics::equilibriumConstants, ultramafics::forwardRates, ultramafics::reverseRates, ultramafics::mobileSpeciesFlag ); constexpr ultramaficSystemAllEquilibriumType ultramaficSystemAllEquilibrium( ultramafics::stoichMatrix, ultramafics::equilibriumConstants, ultramafics::forwardRates, ultramafics::reverseRates, ultramafics::mobileSpeciesFlag ); - constexpr ultramaficSystemType ultramaficSystem( ultramafics::stoichMatrix, ultramafics::equilibriumConstants, ultramafics::forwardRates, ultramafics::reverseRates, ultramafics::mobileSpeciesFlag ); + constexpr ultramaficSystemType ultramaficSystem( ultramafics::stoichMatrixNosolid, ultramafics::equilibriumConstants, ultramafics::forwardRates, ultramafics::reverseRates, ultramafics::mobileSpeciesFlag ); // *****UNCRUSTIFY-ON****** } // namespace geochemistry diff --git a/src/reactions/geochemistry/unitTests/CMakeLists.txt b/src/reactions/geochemistry/unitTests/CMakeLists.txt index 69e5522..b0e1ccc 100644 --- a/src/reactions/geochemistry/unitTests/CMakeLists.txt +++ b/src/reactions/geochemistry/unitTests/CMakeLists.txt @@ -3,6 +3,7 @@ set( testSourceFiles testGeochemicalEquilibriumReactions.cpp testGeochemicalKineticReactions.cpp testGeochemicalMixedReactions.cpp + testForgeReactions.cpp ) set( dependencyList hpcReact gtest ) diff --git a/src/reactions/geochemistry/unitTests/testForgeReactions.cpp b/src/reactions/geochemistry/unitTests/testForgeReactions.cpp new file mode 100644 index 0000000..0cf7072 --- /dev/null +++ b/src/reactions/geochemistry/unitTests/testForgeReactions.cpp @@ -0,0 +1,88 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: (BSD-3-Clause) + * + * Copyright (c) 2025- Lawrence Livermore National Security LLC + * All rights reserved + * + * See top level LICENSE files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +#include "reactions/unitTestUtilities/mixedReactionsTestUtilities.hpp" +#include "../GeochemicalSystems.hpp" + + +using namespace hpcReact; +using namespace hpcReact::unitTest_utilities; + + +TEST( testForgeReactions, testTimeStep_forgeSystem ) +{ + using namespace hpcReact::geochemistry; + + static constexpr int numPrimarySpecies = forgeSystemType::numPrimarySpecies(); + + double const surfaceArea[forgeSystemType::numKineticReactions()] = + { + 1.0, 1.0, 1.0, 1.0, 1.0 // SiO2(s), KAlMg3Si3O10(OH)2(s), CaAl2(SiO4)2(s), KAlSi3O8(s), Al2Si2O5(OH)4(s) + }; + + // brine source + double const initialAggregateSpeciesConcentration[numPrimarySpecies] = + { + 5.50E-06, // H+ + 2.75E-01, // Ca+2 + 1.21E-01, // Mg+2 + 3.41E+00, // Na+ + 3.25E-02, // K+ + 5.45E-04, // Al+++ + 2.60E+00, // HCO3- + 3.81E-01, // SO4-2 + 1.00E+00, // Cl- + 1.03E-02 //SiO2(aq) + }; + //brine, from sink at t=0.23h + // double const initialAggregateSpeciesConcentration[numPrimarySpecies] = + // { + // 0.01202, // H+ + // 9.31E-02, // Ca+2 + // 1.36E-01, // Mg+2 + // 3.40, // Na+ + // 2.38E-01, // K+ + // 2.93E-03, // Al+++ + // 2.60, // HCO3- + // 3.80E-01, // SO4-2 + // 1.00E+00, // Cl- + // 2.79E-01 //SiO2(aq) + // }; + + double const expectedSpeciesConcentrations[numPrimarySpecies] = + { + 1.9964e-04, // H+ + 0.1050, // Ca+2 + 0.1209, // Mg+2 + 3.4000, // Na+ + 0.1250, // K+ + 5.4367e-04, // Al+++ + 2.60, // HCO3- + 0.380, // SO4-2 + 1.0, // Cl- + 0.0103 //SiO2(aq) + }; + + timeStepTest< double, true >( forgeSystem, + 1.e-7, + 30, + initialAggregateSpeciesConcentration, + surfaceArea, + expectedSpeciesConcentrations ); + +} + +int main( int argc, char * * argv ) +{ + ::testing::InitGoogleTest( &argc, argv ); + int const result = RUN_ALL_TESTS(); + return result; +} diff --git a/src/reactions/reactionsSystems/KineticReactions_impl.hpp b/src/reactions/reactionsSystems/KineticReactions_impl.hpp index b38a69e..043a727 100644 --- a/src/reactions/reactionsSystems/KineticReactions_impl.hpp +++ b/src/reactions/reactionsSystems/KineticReactions_impl.hpp @@ -249,7 +249,7 @@ KineticReactions< REAL_TYPE, for( IntType i = 0; i < PARAMS_DATA::numSpecies(); ++i ) { RealType const s_ri = params.stoichiometricMatrix( r, i ); - logQuotient += s_ri * speciesConcentration[i]; + logQuotient += s_ri * speciesConcentration[i]; // speciesConcentration should be activity here } quotient = exp( logQuotient ); diff --git a/src/reactions/reactionsSystems/MixedEquilibriumKineticReactions_impl.hpp b/src/reactions/reactionsSystems/MixedEquilibriumKineticReactions_impl.hpp index f24e4d6..8d7080c 100644 --- a/src/reactions/reactionsSystems/MixedEquilibriumKineticReactions_impl.hpp +++ b/src/reactions/reactionsSystems/MixedEquilibriumKineticReactions_impl.hpp @@ -90,15 +90,15 @@ MixedEquilibriumKineticReactions< REAL_TYPE, // 2. Compute the reaction rates for all kinetic reactions computeReactionRates( temperature, params, - logPrimarySpeciesConcentrations, - logSecondarySpeciesConcentrations, + logPrimarySpeciesConcentrations, // activity + logSecondarySpeciesConcentrations, // activity surfaceArea, reactionRates, - dReactionRates_dLogPrimarySpeciesConcentrations ); + dReactionRates_dLogPrimarySpeciesConcentrations ); // based on activity coefficients // 3. Compute aggregate species rates computeAggregateSpeciesRates( params, - logPrimarySpeciesConcentrations, + logPrimarySpeciesConcentrations, // concentrations reactionRates, dReactionRates_dLogPrimarySpeciesConcentrations, aggregateSpeciesRates, diff --git a/src/reactions/unitTestUtilities/mixedReactionsTestUtilities.hpp b/src/reactions/unitTestUtilities/mixedReactionsTestUtilities.hpp index 2e39089..b462df3 100644 --- a/src/reactions/unitTestUtilities/mixedReactionsTestUtilities.hpp +++ b/src/reactions/unitTestUtilities/mixedReactionsTestUtilities.hpp @@ -130,7 +130,7 @@ void timeStepTest( PARAMS_DATA const & params, } }; - nonlinearSolvers::newtonRaphson< numPrimarySpecies >( logPrimarySpeciesConcentration, computeResidualAndJacobian ); + nonlinearSolvers::newtonRaphson< numPrimarySpecies >( logPrimarySpeciesConcentration, computeResidualAndJacobian, 50 ); time += dt; } diff --git a/src/uncrustify.cfg b/src/uncrustify.cfg index 0b0efda..4133530 100644 --- a/src/uncrustify.cfg +++ b/src/uncrustify.cfg @@ -758,7 +758,7 @@ indent_var_def_cont = false # false/true # Indent continued shift expressions ('<<' and '>>') instead of aligning. # Turn align_left_shift off when enabling this. -indent_shift = 0 +indent_shift = 0 # True: force indentation of function definition to start in column 1 # False: use the default behavior.