Skip to content

Commit e82f1fc

Browse files
committed
unitTests are passing.
1 parent b4ec76c commit e82f1fc

File tree

6 files changed

+90
-44
lines changed

6 files changed

+90
-44
lines changed

src/common/CArrayWrapper.hpp

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,34 @@ struct CArrayWrapper;
2727
template< typename T, int DIM0 >
2828
struct CArrayWrapper< T, DIM0 >
2929
{
30-
30+
// default constructor
3131
constexpr CArrayWrapper() = default;
32-
32+
33+
/**
34+
* @brief Construct a CArrayWrapper from an initializer list.
35+
*
36+
* Allows brace-initialization with a list of values:
37+
* @code
38+
* CArrayWrapper< double, 3 > arr = {1.0, 2.0, 3.0};
39+
* @endcode
40+
*
41+
* @param init An initializer list with exactly DIM0 elements.
42+
*
43+
* @note No runtime bounds checking is performed on the initializer size.
44+
*/
3345
constexpr CArrayWrapper( std::initializer_list< T > init )
3446
{
47+
// static_assert(init.size() == DIM0, "Size mismatch"); // needs c++20
3548
int i = 0;
3649
for( auto const & val : init )
3750
{
3851
data[i++] = val;
3952
}
4053
}
41-
54+
/**
55+
* @brief Copy constructor.
56+
* @param src The source CArrayWrapper to copy from.
57+
*/
4258
constexpr CArrayWrapper( CArrayWrapper const & src )
4359
{
4460
for( size_t i = 0; i < DIM0; i++ )
@@ -76,7 +92,7 @@ struct CArrayWrapper< T, DIM0 >
7692
HPCREACT_HOST_DEVICE constexpr inline T const & operator[]( int const dim ) const { return data[dim]; }
7793

7894
/// The underlying 1D C-style array.
79-
T data[DIM0];
95+
T data[DIM0]{};
8096
};
8197

8298
/**
@@ -92,9 +108,13 @@ struct CArrayWrapper< T, DIM0 >
92108
template< typename T, int DIM0, int DIM1 >
93109
struct CArrayWrapper< T, DIM0, DIM1 >
94110
{
95-
111+
// default constructor
96112
constexpr CArrayWrapper() = default;
97-
113+
114+
/**
115+
* @brief Copy constructor.
116+
* @param src The source CArrayWrapper to copy from.
117+
*/
98118
constexpr CArrayWrapper( CArrayWrapper const & src )
99119
{
100120
for( size_t i = 0; i < DIM0; i++ )
@@ -121,9 +141,11 @@ struct CArrayWrapper< T, DIM0, DIM1 >
121141
*/
122142
constexpr CArrayWrapper( std::initializer_list< std::initializer_list< T > > init )
123143
{
144+
// static_assert(init.size() == DIM0, "Size mismatch"); // needs c++20
124145
int i = 0;
125146
for( auto const & row : init )
126147
{
148+
// static_assert(row.size() == DIM1, "Size mismatch"); // needs c++20
127149
int j = 0;
128150
for( auto const & val : row )
129151
{
@@ -178,7 +200,7 @@ struct CArrayWrapper< T, DIM0, DIM1 >
178200
}
179201

180202
/// The underlying 2D C-style array of size DIM0 x DIM1.
181-
T data[DIM0][DIM1];
203+
T data[DIM0][DIM1]{};
182204
};
183205

184206
/**
@@ -195,7 +217,7 @@ struct CArrayWrapper< T, DIM0, DIM1 >
195217
template< typename T, int DIM0, int DIM1, int DIM2 >
196218
struct CArrayWrapper< T, DIM0, DIM1, DIM2 >
197219
{
198-
220+
// default constructor
199221
constexpr CArrayWrapper() = default;
200222

201223
/**
@@ -223,12 +245,15 @@ struct CArrayWrapper< T, DIM0, DIM1, DIM2 >
223245
*/
224246
constexpr CArrayWrapper( std::initializer_list< std::initializer_list< std::initializer_list< T > > > init )
225247
{
248+
// static_assert(init.size() == DIM0, "Size mismatch"); // needs c++20
226249
int i = 0;
227250
for( auto const & plane : init )
228251
{
252+
// static_assert(plane.size() == DIM1, "Size mismatch"); // needs c++20
229253
int j = 0;
230254
for( auto const & row : plane )
231255
{
256+
// static_assert(row.size() == DIM2, "Size mismatch"); // needs c++20
232257
int k = 0;
233258
for( auto const & val : row )
234259
{
@@ -292,5 +317,5 @@ struct CArrayWrapper< T, DIM0, DIM1, DIM2 >
292317
}
293318

294319
/// The underlying 3D C-style array of size DIM0 x DIM1 x DIM2.
295-
T data[DIM0][DIM1][DIM2];
320+
T data[DIM0][DIM1][DIM2]{};
296321
};

src/reactions/bulkGeneric/ParametersPredefined.hpp

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ using carbonateSystemAllEquilibriumType = MixedReactionsParameters< double, int,
7777
using carbonateSystemType = MixedReactionsParameters< double, int, int, 18, 11, 10 >;
7878

7979
constexpr CArrayWrapper<double, 11, 18> stoichMatrix =
80-
{ // OH- CO2 CO3-2 H2CO3 CaHCO3+ CaSO4 CaCl+ CaCl2 MgSO4 NaSO4- CaCO3 H+ HCO3- Ca+2 SO4-2 Cl- Mg+2 Na+
81-
{ -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0 }, // OH- + H+ = H2O
80+
{ // OH- CO2 CO3-2 H2CO3 CaHCO3+ CaSO4 CaCl+ CaCl2 MgSO4 NaSO4- CaCO3 H+ HCO3- Ca+2 SO4-2 Cl- Mg+2 Na+
81+
{ -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0 }, // OH- + H+ = H2O
8282
{ 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, // CO2 + H2O = H+ + HCO3-
8383
{ 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0 }, // CO3-2 + H+ = HCO3-
8484
{ 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, // H2CO3 = H+ + HCO3-
@@ -89,7 +89,7 @@ constexpr CArrayWrapper<double, 11, 18> stoichMatrix =
8989
{ 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 1, 0 }, // MgSO4 = Mg+2 + SO4-2
9090
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 0, 1 }, // NaSO4- = Na+ + SO4-2
9191
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 1, 1, 0, 0, 0, 0 } // CaCO3 + H+ = Ca+2 + HCO3- (kinetic)
92-
// { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 1, 0, 0, 0, 0 } // Ca(OH)2​(s) + 2H+ = Ca2+ + 2H2​O (kinetic)
92+
// { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 1, 0, 0, 0, 0 } // Ca(OH)2​(s) + 2H+ = Ca2+ + 2H2​O (kinetic)
9393
};
9494

9595
constexpr CArrayWrapper<double, 11> equilibriumConstants =
@@ -110,17 +110,18 @@ constexpr CArrayWrapper<double, 11> equilibriumConstants =
110110

111111
constexpr CArrayWrapper<double, 11> forwardRates =
112112
{
113-
9.77E+13, // OH- + H+ = H2O
114-
4.37E-07, // CO2 + H2O = H+ + HCO3-
115-
2.14E+10, // CO3-2 + H+ = HCO3-
116-
1.70E-04, // H2CO3 = H+ + HCO3-
117-
8.13E-02, // CaHCO3+ = Ca+2 + HCO3-
118-
6.92E-03, // CaSO4 = Ca+2 + SO4-2
119-
4.68E+00, // CaCl+ = Ca+2 + Cl-
120-
3.98E+00, // CaCl2 = Ca+2 + 2Cl-
121-
3.72E-03, // MgSO4 = Mg+2 + SO4-2
122-
1.51E-01, // NaSO4- = Na+ + SO4-2
123-
1.17E+07 // CaCO3 + H+ = Ca+2 + HCO3- (kinetic)
113+
1.4e11, // OH- + H+ = H2O
114+
0.039, // CO2 + H2O = H+ + HCO3-
115+
1.0e10, // CO3-2 + H+ = HCO3-
116+
0.57, // H2CO3 = H+ + HCO3-
117+
1.5e6, // CaHCO3+ = Ca+2 + HCO3-
118+
1.0e5, // CaSO4 = Ca+2 + SO4-2
119+
1.0e8, // CaCl+ = Ca+2 + Cl-
120+
1.0e7, // CaCl2 = Ca+2 + 2Cl-
121+
1.0e5, // MgSO4 = Mg+2 + SO4-2
122+
1.0e7, // NaSO4- = Na+ + SO4-2
123+
1.0e5 // CaCO3 + H+ = Ca+2 + HCO3- (kinetic)
124+
124125
// 1
125126
}; // Ca(OH)2​(s) + 2H+ = Ca2+ + 2H2​O (kinetic)
126127

@@ -129,13 +130,13 @@ constexpr CArrayWrapper<double, 11> reverseRates =
129130
8.92E+04, // CO2 + H2O = H+ + HCO3-
130131
4.67E-01, // CO3-2 + H+ = HCO3-
131132
3.35E+03, // H2CO3 = H+ + HCO3-
132-
8.55E-03, // CaHCO3+ = Ca+2 + HCO3-
133+
1.85E+07, // CaHCO3+ = Ca+2 + HCO3-
133134
1.45E+07, // CaSO4 = Ca+2 + SO4-2
134135
2.14E+07, // CaCl+ = Ca+2 + Cl-
135136
2.51E+06, // CaCl2 = Ca+2 + 2Cl-
136137
2.69E+07, // MgSO4 = Mg+2 + SO4-2
137138
6.62E+07, // NaSO4- = Na+ + SO4-2
138-
1.85E+07 // CaCO3 + H+ = Ca+2 + HCO3-
139+
8.55E-03 // CaCO3 + H+ = Ca+2 + HCO3-
139140
// 1 // Ca(OH)2​(s) + 2H+ = Ca2+ + 2H2​O (kinetic)
140141
};
141142

src/reactions/bulkGeneric/SpeciesUtilities.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include "common/macros.hpp"
44
#include <math.h>
55
#include <functional>
6+
#include <iostream>
67

78
namespace hpcReact
89
{
@@ -147,7 +148,7 @@ void calculateAggregatePrimaryConcentrationsWrtLogC( PARAMS_DATA const & params,
147148
ARRAY_1D & aggregatePrimarySpeciesConcentrations,
148149
ARRAY_2D & dAggregatePrimarySpeciesConcentrationsDerivatives_dLogPrimarySpeciesConcentrations )
149150
{
150-
constexpr int numSecondarySpecies = PARAMS_DATA::numReactions();
151+
constexpr int numSecondarySpecies = PARAMS_DATA::numSecondarySpecies();
151152
constexpr int numPrimarySpecies = PARAMS_DATA::numPrimarySpecies();
152153

153154
REAL_TYPE logSecondarySpeciesConcentrations[numSecondarySpecies] = {0};

src/reactions/bulkGeneric/unitTests/testEquilibriumReactions.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,9 +225,9 @@ TEST( testEquilibriumReactions, testcarbonateSystemAllEquilibrium2 )
225225
3.76e-1, // HCO3-
226226
3.87e-2, // Ca+2
227227
3.21e-2, // SO4-2
228-
1.89, // Cl-
228+
1.89, // Cl-
229229
1.65e-2, // Mg+2
230-
1.09 // Na+1
230+
1.09 // Na+1
231231
};
232232

233233

src/reactions/bulkGeneric/unitTests/testKineticReactions.cpp

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -134,21 +134,32 @@ TEST( testKineticReactions, computeReactionRatesTest_carbonateSystemAllKinetic )
134134
1.09 // Na+1
135135
};
136136

137-
double const expectedReactionRates[11] = { -0.001424736, -12610.7392, -0.175591624, -473.6096, -269197.19999999984, -0.00012441275624000003, -18012.914999999986, -1.56526019999999e6,
138-
-346983.07769999903, -14247.58499999999, -2.316271799999999e6 };
137+
double const expectedReactionRates[11] = { -0.001424736, // OH- + H+ = H2O
138+
-12610.7392, // CO2 + H2O = H+ + HCO3-
139+
-0.175591624, // CO3-2 + H+ = HCO3-
140+
-473.6096, // H2CO3 = H+ + HCO3-
141+
-269197.19999999984, // CaHCO3+ = Ca+2 + HCO3-
142+
-18012.914999999986, // CaSO4 = Ca+2 + SO4-2
143+
-1.56526019999999e6, // CaCl+ = Ca+2 + Cl-
144+
-346983.07769999903, // CaCl2 = Ca+2 + 2Cl-
145+
-14247.58499999999, // MgSO4 = Mg+2 + SO4-2
146+
-2.316271799999999e6, // NaSO4- = Na+ + SO4-2
147+
-0.00012441275624000003 // CaCO3 + H+ = Ca+2 + HCO3- (kinetic)
148+
};
139149
double const expectedReactionRatesDerivatives[11][18] =
140150
{
141151
{ 5.264e10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000014, 0, 0, 0, 0, 0, 0 },
142152
{ 0, 0.039, 0, 0, 0, 0, 0, 0, 0, 0, 0, -33539.2, -33539.2, 0, 0, 0, 0, 0 },
143153
{ 0, 0, 3.76e9, 0, 0, 0, 0, 0, 0, 0, 0, 1.e-6, -0.467, 0, 0, 0, 0, 0 },
144154
{ 0, 0, 0, 0.57, 0, 0, 0, 0, 0, 0, 0, -1259.6, -1259.6, 0, 0, 0, 0, 0 },
145155
{ 0, 0, 0, 0, 1.5e6, 0, 0, 0, 0, 0, 0, 0, -715950., -6.956e6, 0, 0, 0, 0 },
146-
{ 0, 0, 0, 0, 0, 37600., 0, 0, 0, 0, 0, 1.e-11, -0.000330885, -0.0032148000000000003, 0, 0, 0, 0 },
147-
{ 0, 0, 0, 0, 0, 0, 100000., 0, 0, 0, 0, 0, 0, -465449.99999999994, -561150., 0, 0, 0 },
148-
{ 0, 0, 0, 0, 0, 0, 0, 1.e8, 0, 0, 0, 0, 0, -4.0446e7, 0, -828180., 0, 0 },
149-
{ 0, 0, 0, 0, 0, 0, 0, 0, 1.e7, 0, 0, 0, 0, -8.965971e6, 0, -367177.86, 0, 0 },
150-
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 100000., 0, 0, 0, 0, -443850., 0, -863489.9999999999, 0 },
151-
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.e7, 0, 0, 0, -7.2158e7, 0, 0, -2.12502e6 }
156+
{ 0, 0, 0, 0, 0, 100000., 0, 0, 0, 0, 0, 0, 0, -465449.99999999994, -561150., 0, 0, 0 },
157+
{ 0, 0, 0, 0, 0, 0, 1.e8, 0, 0, 0, 0, 0, 0, -4.0446e7, 0, -828180., 0, 0 },
158+
{ 0, 0, 0, 0, 0, 0, 0, 1.e7, 0, 0, 0, 0, 0, -8.965971e6, 0, -367177.86, 0, 0 },
159+
{ 0, 0, 0, 0, 0, 0, 0, 0, 100000., 0, 0, 0, 0, 0, -443850., 0, -863489.9999999999, 0 },
160+
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.e7, 0, 0, 0, 0, -7.2158e7, 0, 0, -2.12502e6 },
161+
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37600., 1.e-11, -0.000330885, -0.0032148000000000003, 0, 0, 0, 0 }
162+
152163
};
153164

154165
computeReactionRatesTest< double, false >( carbonateSystemAllKinetic.kineticReactionsParameters(),

src/reactions/bulkGeneric/unitTests/testSpeciesUtilities.cpp

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ TEST( testUtilities, test_calculateLogSecondarySpeciesConcentration )
2929

3030
calculateLogSecondarySpeciesConcentration< double,
3131
int,
32-
int >( carbonateSystemAllEquilibrium,
32+
int >( carbonateSystemAllEquilibrium.equilibriumReactionsParameters(),
3333
logPrimarySpeciesSolution,
3434
logSecondarySpeciesConcentrations );
3535

@@ -40,12 +40,12 @@ TEST( testUtilities, test_calculateLogSecondarySpeciesConcentration )
4040
3.956656978189425e-11,
4141
0.0009629355924566718,
4242
0.00006739226982791149,
43-
1.065032288527949e-9,
4443
0.005298329882666744,
4544
0.005844517547638335,
4645
0.012773193926706526,
4746
0.006618125707964999,
48-
0.01769217213462983
47+
0.01769217213462983,
48+
1.065032288527949e-9
4949
};
5050

5151
for( int j=0; j<numSecondarySpecies; ++j )
@@ -60,7 +60,7 @@ TEST( testUtilities, test_calculateLogSecondarySpeciesConcentration )
6060

6161
calculateLogSecondarySpeciesConcentrationWrtLogC< double,
6262
int,
63-
int >( carbonateSystemAllEquilibrium,
63+
int >( carbonateSystemAllEquilibrium.equilibriumReactionsParameters(),
6464
logPrimarySpeciesSolution,
6565
logSecondarySpeciesConcentrations,
6666
dLogSecondarySpeciesConcentrations_dLogPrimarySpeciesConcentrations );
@@ -74,12 +74,13 @@ TEST( testUtilities, test_calculateLogSecondarySpeciesConcentration )
7474
{ -1, 1, 0, 0, 0, 0, 0 },
7575
{ 1, 1, 0, 0, 0, 0, 0 },
7676
{ 0, 1, 1, 0, 0, 0, 0 },
77-
{ -1, 1, 1, 0, 0, 0, 0 },
7877
{ 0, 0, 1, 1, 0, 0, 0 },
7978
{ 0, 0, 1, 0, 1, 0, 0 },
8079
{ 0, 0, 1, 0, 2, 0, 0 },
8180
{ 0, 0, 0, 1, 0, 1, 0 },
82-
{ 0, 0, 0, 1, 0, 0, 1 }
81+
{ 0, 0, 0, 1, 0, 0, 1 },
82+
{ -1, 1, 1, 0, 0, 0, 0 }
83+
8384
};
8485

8586
for( int i=0; i<numSecondarySpecies; ++i )
@@ -118,9 +119,16 @@ TEST( testUtilities, testcalculateAggregatePrimaryConcentrationsWrtLogC )
118119
double aggregatePrimarySpeciesConcentration[numPrimarySpecies] = {0};
119120

120121

121-
CArrayWrapper< double, numPrimarySpecies, numPrimarySpecies > dAggregatePrimarySpeciesConcentrationsDerivatives_dLogPrimarySpeciesConcentrations = {{0.0}};
122+
CArrayWrapper< double, numPrimarySpecies, numPrimarySpecies > dAggregatePrimarySpeciesConcentrationsDerivatives_dLogPrimarySpeciesConcentrations;
123+
for( int i = 0; i < numPrimarySpecies; ++i )
124+
{
125+
for( int k=0; k<numPrimarySpecies; ++k )
126+
{
127+
std::cout << "dAggregatePrimarySpeciesConcentrationsDerivatives_dLogPrimarySpeciesConcentrations("<< i << ", " << k << " )" << dAggregatePrimarySpeciesConcentrationsDerivatives_dLogPrimarySpeciesConcentrations( i, k ) << std::endl;
128+
}
129+
}
122130

123-
calculateAggregatePrimaryConcentrationsWrtLogC< double, int, int >( carbonateSystemAllEquilibrium,
131+
calculateAggregatePrimaryConcentrationsWrtLogC< double, int, int >( carbonateSystemAllEquilibrium.equilibriumReactionsParameters(),
124132
primarySpeciesSolution,
125133
aggregatePrimarySpeciesConcentration,
126134
dAggregatePrimarySpeciesConcentrationsDerivatives_dLogPrimarySpeciesConcentrations );

0 commit comments

Comments
 (0)