Skip to content

Commit a5bdc93

Browse files
committed
mixed system functions completed.
1 parent 85fecab commit a5bdc93

File tree

1 file changed

+117
-10
lines changed

1 file changed

+117
-10
lines changed

src/reactions/bulkGeneric/MixedEquilibriumKineticReactions.hpp

Lines changed: 117 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ namespace bulkGeneric
2525
template< typename REAL_TYPE,
2626
typename INT_TYPE,
2727
typename INDEX_TYPE,
28-
bool LOGE_CONCENTRATION >
28+
bool LOGE_CONCENTRATION = true >
2929
class MixedEquilibriumKineticReactions
3030
{
3131
public:
@@ -51,13 +51,15 @@ class MixedEquilibriumKineticReactions
5151
ARRAY_1D_TO_CONST const & logPrimarySpeciesConcentrations,
5252
ARRAY_1D & logSecondarySpeciesConcentrations,
5353
ARRAY_1D & aggregatePrimarySpeciesConcentrations,
54-
ARRAY_2D & dAggregatePrimarySpeciesConcentrationsDerivatives_dLogPrimarySpeciesConcentrations,
54+
ARRAY_2D & dAggregatePrimarySpeciesConcentrations_dLogPrimarySpeciesConcentrations,
5555
ARRAY_1D & reactionRates,
56-
ARRAY_2D & reactionRatesDerivatives )
56+
ARRAY_2D & dReactionRates_dLogPrimarySpeciesConcentrations,
57+
ARRAY_1D & aggregateSpeciesRates,
58+
ARRAY_2D & dAggregateSpeciesRates_dLogPrimarySpeciesConcentrations )
5759
{
58-
constexpr int numSpecies = PARAMS_DATA::numSpecies;
59-
constexpr int numSecondarySpecies = PARAMS_DATA::numReactions;
60-
constexpr int numPrimarySpecies = numSpecies - numSecondarySpecies;
60+
constexpr IntType numSpecies = PARAMS_DATA::numSpecies;
61+
constexpr IntType numSecondarySpecies = PARAMS_DATA::numReactions;
62+
constexpr IntType numPrimarySpecies = numSpecies - numSecondarySpecies;
6163

6264
// 1. Compute new aggregate species from primary species
6365
calculateAggregatePrimaryConcentrationsWrtLogC< REAL_TYPE,
@@ -69,15 +71,120 @@ class MixedEquilibriumKineticReactions
6971
dAggregatePrimarySpeciesConcentrationsDerivatives_dLogPrimarySpeciesConcentrations )
7072

7173
// 2. Compute the reaction rates for all kinetic reactions
74+
computeReactionRates( temperature,
75+
params,
76+
logPrimarySpeciesConcentrations,
77+
logSecondarySpeciesConcentrations,
78+
aggregatePrimarySpeciesConcentrations,
79+
dAggregatePrimarySpeciesConcentrations_dLogPrimarySpeciesConcentrations,
80+
reactionRates,
81+
dReactionRates_dLogPrimarySpeciesConcentrations );
82+
83+
84+
// 3. Compute aggregate species rates
85+
computeAggregateSpeciesRates( params,
86+
logPrimarySpeciesConcentrations
87+
reactionRates,
88+
dReactionRates_dLogPrimarySpeciesConcentrations,
89+
aggregateSpeciesRates,
90+
dAggregateSpeciesRates_dLogPrimarySpeciesConcentrations );
91+
92+
93+
}
94+
95+
template< typename PARAMS_DATA,
96+
typename ARRAY_1D_TO_CONST,
97+
typename ARRAY_1D,
98+
typename ARRAY_2D >
99+
static HPCREACT_HOST_DEVICE inline void
100+
computeReactionRates( RealType const & temperature,
101+
PARAMS_DATA const & params,
102+
ARRAY_1D_TO_CONST const & logPrimarySpeciesConcentrations,
103+
ARRAY_1D_TO_CONST const & logSecondarySpeciesConcentrations,
104+
ARRAY_2D_TO_CONST const & dLogSecondarySpeciesConcentrations_dLogPrimarySpeciesConcentrations,
105+
ARRAY_1D & reactionRates,
106+
ARRAY_2D & dReactionRates_dPrimarySpeciesConcentrations )
107+
108+
{
109+
constexpr IntType numSpecies = PARAMS_DATA::numSpecies;
110+
constexpr IntType numSecondarySpecies = PARAMS_DATA::numReactions;
111+
constexpr IntType numPrimarySpecies = numSpecies - numSecondarySpecies;
112+
113+
RealType logSpeciesConcentration[numSpecies] {};
114+
for ( IntType i = 0; i < numPrimarySpecies; ++i )
115+
{
116+
speciesConcentration[i] = logPrimarySpeciesConcentrations[i];
117+
}
118+
for ( IntType i = 0; i < numSecondarySpecies; ++i )
119+
{
120+
logSpeciesConcentration[i+numPrimarySpecies] = logSecondarySpeciesConcentrations[i];
121+
}
122+
123+
CArrayWrapper< RealType, PARAMS_DATA::numReactions, numSpecies > reactionRatesDerivatives;
72124
kineticReactions::computeReactionRates( temperature,
73125
params,
74-
speciesConcentration,
126+
logSpeciesConcentration,
75127
reactionRates,
76128
reactionRatesDerivatives );
77129

78-
// 3. Compute aggregate species rates
79-
80-
130+
// Compute the reaction rates derivatives w.r.t. log primary species concentrations
131+
for( IntType i = 0; i < numKineticReactions; ++i )
132+
{
133+
for( IntType j = 0; j < numPrimarySpecies; ++j )
134+
{
135+
dReactionRates_dLogPrimarySpeciesConcentrations( i, j ) = reactionRatesDerivatives( i, j );
136+
for( IntType k = 0; k < numSecondarySpecies; ++k )
137+
{
138+
RealType const dLogSecondarySpeciesConcentrations_dLogPrimarySpeciesConcentration = params.stoichiometricMatrix( k, j+numSecondarySpecies );
139+
140+
dReactionRates_dLogPrimarySpeciesConcentrations( i, j ) +=
141+
reactionRatesDerivatives( i, numPrimarySpecies + k ) * dLogSecondarySpeciesConcentrations_dLogPrimarySpeciesConcentrations( k, j );
142+
}
143+
}
144+
}
145+
}
146+
147+
template< typename PARAMS_DATA,
148+
typename ARRAY_1D_TO_CONST,
149+
typename ARRAY_2D_TO_CONST
150+
typename ARRAY_1D,
151+
typename ARRAY_2D >
152+
static HPCREACT_HOST_DEVICE inline void
153+
computeAggregateSpeciesRates( PARAMS_DATA const & params,
154+
ARRAY_1D_TO_CONST const & speciesConcentration,
155+
ARRAY_1D_TO_CONST const & reactionRates,
156+
ARRAY_2D_TO_CONST const & reactionRatesDerivatives
157+
ARRAY_1D & aggregatesRates,
158+
ARRAY_2D & aggregatesRatesDerivatives )
159+
{
160+
constexpr IntType numSpecies = PARAMS_DATA::numSpecies;
161+
constexpr IntType numSecondarySpecies = PARAMS_DATA::numReactions;
162+
constexpr IntType numPrimarySpecies = numSpecies - numSecondarySpecies;
163+
164+
for( IntType i = 0; i < numPrimarySpecies; ++i )
165+
{
166+
speciesRates[i] = 0.0;
167+
if constexpr( CALCULATE_DERIVATIVES )
168+
{
169+
for( IntType j = 0; j < numPrimarySpecies; ++j )
170+
{
171+
speciesRatesDerivatives( i, j ) = 0.0;
172+
}
173+
}
174+
for( IntType r=0; r<PARAMS_DATA::numReactions; ++r )
175+
{
176+
RealType const s_ir = params.stoichiometricMatrix( r, i );
177+
speciesRates[i] += s_ir * reactionRates[r];
178+
if constexpr( CALCULATE_DERIVATIVES )
179+
{
180+
for( IntType j = 0; j < numPrimarySpecies; ++j )
181+
{
182+
speciesRatesDerivatives( i, j ) += s_ir * reactionRatesDerivatives( r, j );
183+
}
184+
}
185+
}
186+
}
187+
81188
}
82189

83190
private:

0 commit comments

Comments
 (0)