Skip to content

Commit b77423a

Browse files
committed
rename params. create specific subset parameter types
1 parent fe1be01 commit b77423a

File tree

6 files changed

+197
-255
lines changed

6 files changed

+197
-255
lines changed

hostconfigs/apple/macOS_base.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ set( DOXYGEN_EXECUTABLE "${HOMEBREW_DIR}/bin/doxygen" CACHE PATH "" FORCE)
2626
set( CPPCHECK_EXECUTABLE "${HOMEBREW_DIR}/bin/cppcheck" CACHE PATH "" FORCE)
2727
set( CLANGTIDY_EXECUTABLE "${HOMEBREW_DIR}/opt/llvm/bin/clang-tidy" CACHE PATH "" FORCE)
2828

29-
set( ENABLE_COVERAGE ON CACHE BOOL "" FORCE)
29+
set( ENABLE_COVERAGE OFF CACHE BOOL "" FORCE)
3030
set( GCOV_EXECUTABLE "/usr/bin/gcov" CACHE PATH "" FORCE)
3131
set( LCOV_EXECUTABLE "${HOMEBREW_DIR}/bin/lcov" CACHE PATH "" FORCE)
3232

src/reactions/bulkGeneric/KineticReactions_impl.hpp

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ KineticReactions< REAL_TYPE,
268268

269269

270270
REAL_TYPE residualNorm = 0.0;
271-
for( int k=0; k<10; ++k )
271+
for( int k=0; k<10; ++k ) // newton loop
272272
{
273273
// printf( "iteration %2d: \n", k );
274274

@@ -329,26 +329,26 @@ KineticReactions< REAL_TYPE,
329329
}
330330

331331

332-
// printf( "residual = { ");
333-
// for( int i = 0; i < numSpecies; ++i )
334-
// {
335-
// printf( " %g, ", residual[i] );
336-
// }
337-
// printf( "}\n" );
338-
339-
// printf( "Jacobian = { \n" );
340-
// for( int i = 0; i < numSpecies; ++i )
341-
// {
342-
// printf( " { ");
343-
// for( int j = 0; j < numSpecies; ++j )
344-
// {
345-
// printf( " %g ", speciesRatesDerivatives( i, j ) );
346-
// // printf( " %g ", speciesRatesDerivatives( i, j ) / exp(speciesConcentration[j]) );
347-
// if( j < numSpecies-1 ) { printf( ", " ); }
348-
// }
349-
// printf( "}, \n" );
350-
// }
351-
// printf( "}\n" );
332+
printf( "residual = { ");
333+
for( int i = 0; i < numSpecies; ++i )
334+
{
335+
printf( " %g, ", residual[i] );
336+
}
337+
printf( "}\n" );
338+
339+
printf( "Jacobian = { \n" );
340+
for( int i = 0; i < numSpecies; ++i )
341+
{
342+
printf( " { ");
343+
for( int j = 0; j < numSpecies; ++j )
344+
{
345+
printf( " %g ", speciesRatesDerivatives( i, j ) );
346+
// printf( " %g ", speciesRatesDerivatives( i, j ) / exp(speciesConcentration[j]) );
347+
if( j < numSpecies-1 ) { printf( ", " ); }
348+
}
349+
printf( "}, \n" );
350+
}
351+
printf( "}\n" );
352352

353353
solveNxN_pivoted< double, numSpecies >( speciesRatesDerivatives.data, residual, deltaPrimarySpeciesConcentration );
354354

src/reactions/bulkGeneric/Parameters.hpp

Lines changed: 133 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -13,34 +13,152 @@ namespace bulkGeneric
1313

1414

1515

16+
1617
template< typename REAL_TYPE,
1718
typename INT_TYPE,
1819
typename INDEX_TYPE,
1920
int NUM_SPECIES,
2021
int NUM_REACTIONS >
21-
struct ParametersBase
22+
struct EquilibriumReactionsParameters
2223
{
2324
using RealType = REAL_TYPE;
2425
using IntType = INT_TYPE;
26+
using IndexType = INDEX_TYPE;
27+
28+
static constexpr IndexType numSpecies = NUM_SPECIES;
29+
static constexpr IndexType numReactions = NUM_REACTIONS;
30+
31+
constexpr
32+
EquilibriumReactionsParameters( RealType const (&stoichiometricMatrix)[numReactions][numSpecies],
33+
RealType const (&equilibriumConstant)[numReactions] ):
34+
EquilibriumReactionsParameters( stoichiometricMatrix,
35+
equilibriumConstant,
36+
std::make_index_sequence<NUM_REACTIONS>(),
37+
std::make_index_sequence<NUM_REACTIONS*NUM_SPECIES>() )
38+
{}
39+
40+
41+
RealType stoichiometricMatrix( IndexType const r, int const i ) const { return m_stoichiometricMatrix[r][i]; }
42+
RealType equilibriumConstant( IndexType const r ) const { return m_equilibriumConstant[r]; }
2543

26-
static constexpr IntType numSpecies = NUM_SPECIES;
27-
static constexpr IntType numReactions = NUM_REACTIONS;
2844
RealType m_stoichiometricMatrix[numReactions][numSpecies];
45+
RealType m_equilibriumConstant[numReactions];
46+
47+
private:
48+
#if defined(__GNUC__) || defined(__clang__)
49+
#pragma GCC diagnostic push
50+
#pragma GCC diagnostic ignored "-Wmissing-braces"
51+
#elif defined(_MSC_VER)
52+
#pragma warning(push)
53+
#pragma warning(disable : 4351) // MSVC equivalent of missing-braces warning
54+
#endif
55+
56+
template< std::size_t ... R, std::size_t ... RxS >
57+
constexpr
58+
EquilibriumReactionsParameters( RealType const (&stoichiometricMatrix)[numReactions][numSpecies],
59+
RealType const (&equilibriumConstant)[numReactions],
60+
std::index_sequence<R...>,
61+
std::index_sequence<RxS...> ):
62+
m_stoichiometricMatrix{ stoichiometricMatrix[RxS/numSpecies][RxS%numSpecies]... },
63+
m_equilibriumConstant{ equilibriumConstant[R]... }
64+
{}
65+
66+
#if defined(__GNUC__) || defined(__clang__)
67+
#pragma GCC diagnostic pop
68+
#elif defined(_MSC_VER)
69+
#pragma warning(pop)
70+
#endif
2971
};
3072

3173

3274
template< typename REAL_TYPE,
3375
typename INT_TYPE,
3476
typename INDEX_TYPE,
77+
int NUM_SPECIES,
3578
int NUM_REACTIONS >
36-
struct EquilibriumKineticsModelConstants
79+
struct KineticReactionsParameters
3780
{
3881
using RealType = REAL_TYPE;
3982
using IntType = INT_TYPE;
83+
using IndexType = INDEX_TYPE;
84+
85+
static constexpr IndexType numSpecies = NUM_SPECIES;
86+
static constexpr IndexType numReactions = NUM_REACTIONS;
87+
88+
KineticReactionsParameters( RealType const (&stoichiometricMatrix)[numReactions][numSpecies],
89+
RealType const (&rateConstantForward)[numReactions],
90+
RealType const (&rateConstantReverse)[numReactions] ):
91+
KineticReactionsParameters( stoichiometricMatrix,
92+
rateConstantForward,
93+
rateConstantReverse,
94+
std::make_index_sequence<NUM_REACTIONS>(),
95+
std::make_index_sequence<NUM_REACTIONS*NUM_SPECIES>() )
96+
{}
97+
4098

41-
static constexpr IntType numReactions = NUM_REACTIONS;
99+
RealType stoichiometricMatrix( IndexType const r, int const i ) const { return m_stoichiometricMatrix[r][i]; }
100+
RealType rateConstantForward( IndexType const r ) const { return m_rateConstantForward[r]; }
101+
RealType rateConstantReverse( IndexType const r ) const { return m_rateConstantReverse[r]; }
42102

43-
void verifyParameters()
103+
104+
RealType m_stoichiometricMatrix[numReactions][numSpecies];
105+
RealType m_rateConstantForward[numReactions];
106+
RealType m_rateConstantReverse[numReactions];
107+
108+
private:
109+
#if defined(__GNUC__) || defined(__clang__)
110+
#pragma GCC diagnostic push
111+
#pragma GCC diagnostic ignored "-Wmissing-braces"
112+
#elif defined(_MSC_VER)
113+
#pragma warning(push)
114+
#pragma warning(disable : 4351) // MSVC equivalent of missing-braces warning
115+
#endif
116+
template< std::size_t ... R, std::size_t ... RxS >
117+
KineticReactionsParameters( RealType const (&stoichiometricMatrix)[numReactions][numSpecies],
118+
RealType const (&rateConstantForward)[numReactions],
119+
RealType const (&rateConstantReverse)[numReactions],
120+
std::index_sequence<R...>,
121+
std::index_sequence<RxS...> ):
122+
m_stoichiometricMatrix{ stoichiometricMatrix[RxS/numSpecies][RxS%numSpecies]... },
123+
m_rateConstantForward{ rateConstantForward[R]... },
124+
m_rateConstantReverse{ rateConstantReverse[R]... }
125+
{}
126+
#if defined(__GNUC__) || defined(__clang__)
127+
#pragma GCC diagnostic pop
128+
#elif defined(_MSC_VER)
129+
#pragma warning(pop)
130+
#endif
131+
};
132+
133+
134+
template< typename REAL_TYPE,
135+
typename INT_TYPE,
136+
typename INDEX_TYPE,
137+
int NUM_SPECIES,
138+
int NUM_REACTIONS >
139+
struct MixedReactionsParameters
140+
{
141+
using RealType = REAL_TYPE;
142+
using IntType = INT_TYPE;
143+
using IndexType = INDEX_TYPE;
144+
static constexpr IndexType numSpecies = NUM_SPECIES;
145+
static constexpr IndexType numReactions = NUM_REACTIONS;
146+
147+
constexpr
148+
EquilibriumReactionsParameters< RealType, IntType, IndexType, numSpecies, numReactions >
149+
equilibriumReactionsParameters() const
150+
{
151+
return {m_stoichiometricMatrix, m_equilibriumConstant};
152+
}
153+
154+
constexpr
155+
KineticReactionsParameters< RealType, IntType, IndexType, numSpecies, numReactions >
156+
kineticReactionsParameters() const
157+
{
158+
return {m_stoichiometricMatrix, m_rateConstantForward, m_rateConstantReverse};
159+
}
160+
161+
void verifyParameterConsistency()
44162
{
45163
static constexpr int num_digits = 12;
46164
for( int i = 0; i < numReactions; ++i )
@@ -67,96 +185,26 @@ struct EquilibriumKineticsModelConstants
67185
RealType const absDiff = fabs( K - ( kf / kr ) );
68186
RealType const effectiveMagnitude = max( fabs( K ), fabs( kf/kr ));
69187
RealType const tolerance = effectiveMagnitude * pow( 10, -num_digits );
70-
if( absDiff > tolerance ) // Tolerance for floating point precision
188+
if( absDiff > tolerance ) // Tolerance for floating point precision
71189
{
72190
throw std::runtime_error( "Error: Inconsistent equilibrium relation for reaction " + std::to_string( i ));
73191
}
74192
}
75193
}
76194
}
77195

78-
RealType equilibriumConstant( int const i ) const { return m_equilibriumConstant[i]; }
79-
RealType rateConstantForward( int const i ) const { return m_rateConstantForward[i]; }
80-
RealType rateConstantReverse( int const i ) const { return m_rateConstantReverse[i]; }
81-
82-
83-
RealType m_equilibriumConstant[numReactions] = {0.0};
84-
RealType m_rateConstantForward[numReactions] = {0.0};
85-
RealType m_rateConstantReverse[numReactions] = {0.0};
196+
RealType stoichiometricMatrix( IndexType const r, int const i ) const { return m_stoichiometricMatrix[r][i]; }
197+
RealType equilibriumConstant( IndexType const r ) const { return m_equilibriumConstant[r]; }
198+
RealType rateConstantForward( IndexType const r ) const { return m_rateConstantForward[r]; }
199+
RealType rateConstantReverse( IndexType const r ) const { return m_rateConstantReverse[r]; }
86200

201+
RealType m_stoichiometricMatrix[numReactions][numSpecies];
202+
RealType m_equilibriumConstant[numReactions];
203+
RealType m_rateConstantForward[numReactions];
204+
RealType m_rateConstantReverse[numReactions];
87205
};
88206

89-
template< typename REAL_TYPE,
90-
typename INT_TYPE,
91-
typename INDEX_TYPE,
92-
template< typename, typename, typename, int > typename RATE_CONSTANTS_TYPE,
93-
int NUM_SPECIES,
94-
int NUM_REACTIONS >
95-
struct ReactionsParameters
96-
{
97-
using RealType = REAL_TYPE;
98-
using IntType = INT_TYPE;
99-
using RateConstantType = RATE_CONSTANTS_TYPE< REAL_TYPE, INT_TYPE, INDEX_TYPE, NUM_REACTIONS >;
100-
static constexpr IntType numSpecies = NUM_SPECIES;
101-
static constexpr IntType numReactions = NUM_REACTIONS;
102-
103-
104-
static_assert( std::is_same_v< REAL_TYPE, typename RateConstantType::RealType >, "RealType of RATE_CONSTANTS_TYPE is inconsistent" );
105-
static_assert( std::is_same_v< INT_TYPE, typename RateConstantType::IntType >, "IntType of RATE_CONSTANTS_TYPE is inconsistent" );
106-
static_assert( numReactions == RateConstantType::numReactions, "numReactions of RATE_CONSTANTS_TYPE is inconsistent" );
107-
108-
RealType stoichiometricMatrix( int const r, int const i ) const { return m_base.m_stoichiometricMatrix[r][i]; }
109-
RealType equilibriumConstant( int const r ) const { return m_rateConstants.equilibriumConstant( r ); }
110-
RealType rateConstantForward( int const r ) const { return m_rateConstants.rateConstantForward( r ); }
111-
RealType rateConstantReverse( int const r ) const { return m_rateConstants.rateConstantReverse( r ); }
112-
113-
ParametersBase< REAL_TYPE, INT_TYPE, INT_TYPE, NUM_SPECIES, NUM_REACTIONS > m_base;
114-
RateConstantType m_rateConstants;
115-
116-
// RealType (&m_stoichiometricMatrix)[numReactions][numSpecies] = m_base.m_stoichiometricMatrix;
117-
118-
};
119-
120-
121-
122-
template< typename REAL_TYPE,
123-
typename INT_TYPE,
124-
typename INDEX_TYPE,
125-
int NUM_PRIMARY_SPECIES,
126-
int NUM_KINETIC_REACTIONS >
127-
struct KineticParameters
128-
{
129-
using RealType = REAL_TYPE;
130-
using IntType = INT_TYPE;
131-
132-
static constexpr IntType numPrimarySpecies = NUM_PRIMARY_SPECIES;
133-
static constexpr IntType numKineticReactions = NUM_KINETIC_REACTIONS;
134-
135-
RealType m_activationEnergy[numKineticReactions];
136-
RealType m_equilibriumConstant[numKineticReactions];
137-
RealType m_stoichiometricMatrix[numKineticReactions][numPrimarySpecies];
138-
139-
RealType m_rateConstant[numKineticReactions];
140-
};
141-
142-
template< typename REAL_TYPE,
143-
typename INT_TYPE,
144-
typename INDEX_TYPE,
145-
int NUM_PRIMARY_SPECIES,
146-
int NUM_SECONDARY_SPECIES,
147-
int NUM_KINETIC_REACTIONS,
148-
int NUM_EQUILIBRIUM_REACTIONS >
149-
struct BulkParameters
150-
{
151-
using RealType = REAL_TYPE;
152-
using IntType = INT_TYPE;
153207

154-
static constexpr IntType numPrimarySpecies = NUM_PRIMARY_SPECIES;
155-
static constexpr IntType numSecondarySpecies = NUM_SECONDARY_SPECIES;
156-
static constexpr IntType numKineticReactions = NUM_KINETIC_REACTIONS;
157-
static constexpr IntType numEquilibriumReactions = NUM_EQUILIBRIUM_REACTIONS;
158-
159-
};
160208

161209

162210

0 commit comments

Comments
 (0)