-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtestMomasEasyCase.cpp
More file actions
95 lines (78 loc) · 3.21 KB
/
testMomasEasyCase.cpp
File metadata and controls
95 lines (78 loc) · 3.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/*
* ------------------------------------------------------------------------------------------------------------
* 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/equilibriumReactionsTestUtilities.hpp"
#include "../MoMasBenchmark.hpp"
using namespace hpcReact;
using namespace hpcReact::MoMasBenchmark;
using namespace hpcReact::unitTest_utilities;
//******************************************************************************
void testMoMasAllEquilibriumHelper()
{
using EquilibriumReactionsType = reactionsSystems::EquilibriumReactions< double,
int,
int >;
static constexpr int numPrimarySpecies = hpcReact::MoMasBenchmark::easyCaseParams.numPrimarySpecies();
double logPrimarySpeciesConcentration[numPrimarySpecies];
pmpl::genericKernelWrapper( numPrimarySpecies, logPrimarySpeciesConcentration, [] HPCREACT_DEVICE ( auto * const logPrimarySpeciesConcentrationCopy )
{
double const targetAggregatePrimarySpeciesConcentration[numPrimarySpecies] =
{
1.0e-20, // X1
-2.0, // X2
1.0e-20, // X3
2.0, // X4
1.0 // S
};
double const initialPrimarySpeciesConcentration[numPrimarySpecies] =
{
1.0e-20, // X1
0.02, // X2
1.0e-20, // X3
1.0, // X4
1.00 // S
};
double const logInitialPrimarySpeciesConcentration[numPrimarySpecies] =
{
logmath::log( initialPrimarySpeciesConcentration[0] ),
logmath::log( initialPrimarySpeciesConcentration[1] ),
logmath::log( initialPrimarySpeciesConcentration[2] ),
logmath::log( initialPrimarySpeciesConcentration[3] ),
logmath::log( initialPrimarySpeciesConcentration[4] )
};
EquilibriumReactionsType::enforceEquilibrium_Aggregate( 0,
hpcReact::MoMasBenchmark::easyCaseParams.equilibriumReactionsParameters(),
targetAggregatePrimarySpeciesConcentration,
logInitialPrimarySpeciesConcentration,
logPrimarySpeciesConcentrationCopy );
});
double const expectedPrimarySpeciesConcentrations[numPrimarySpecies] =
{
9.9999999999999919e-21, // X1
0.25971841330881928, // X2
1.4603613417111526e-24, // X3
0.3495378685828045, // X4
0.39074371811222675 // S
};
for( int r=0; r<numPrimarySpecies; ++r )
{
EXPECT_NEAR( logmath::exp( logPrimarySpeciesConcentration[r] ), expectedPrimarySpeciesConcentrations[r], 1.0e-8 * expectedPrimarySpeciesConcentrations[r] );
}
}
TEST( testEquilibriumReactions, testMoMasAllEquilibrium )
{
testMoMasAllEquilibriumHelper();
}
int main( int argc, char * * argv )
{
::testing::InitGoogleTest( &argc, argv );
int const result = RUN_ALL_TESTS();
return result;
}