@@ -25,25 +25,44 @@ KineticReactions< REAL_TYPE,
2525 RealConstDataArrayView1d & secondarySpeciesConcentration,
2626 RealDataArrayView1d & reactionRates )
2727{
28- for ( int iRxn = 0 ; iRxn < PARAMS_DATA::numKineticReactions; iRxn++ )
28+ for ( IntType i = 0 ; i < PARAMS_DATA::numPrimarySpecies; ++i )
2929 {
30- RealType const forwardRateConstant = params.m_reactionRateConstant [iRxn] * exp ( -params.m_activationEnergy [iRxn] / ( constants::R * temperature ) );
31- RealType const reverseRateConstant = params.equilibriumConstant [iRxn] / forwardRateConstant;
32-
33- for ( int iPri = 0 ; iPri < PARAMS_DATA::numPrimarySpecies; ++iPri )
30+ reactionRates[i] = 0.0 ;
31+ for ( IntType r=0 ; r<PARAMS_DATA::numKineticReactions; ++r )
3432 {
35- RealType const stoichiometricCoefficient = params.m_stoichiometricMatrix [iRxn][iPri];
36- RealType const primarySpeciesConcentration = primarySpeciesConcentration[iPri];
37- RealType const secondarySpeciesConcentration = secondarySpeciesConcentration[iPri];
33+ RealType const forwardRateConstant = params.m_reactionRateConstant [r] * exp ( -params.m_activationEnergy [r] / ( constants::R * temperature ) );
34+ RealType const reverseRateConstant = params.equilibriumConstant [r] / forwardRateConstant;
35+ RealType const s_ir = params.m_stoichiometricMatrix [r][i];
36+
37+ RealType productConcPlus = 1.0 ;
38+ RealType productConcMinus = 1.0 ;
39+ bool productConcPlusFlag = false ;
40+ bool productConcMinusFlag = false ;
41+ for ( IntType j = 0 ; j < PARAMS_DATA::numPrimarySpecies; ++j )
42+ {
43+ RealType const s_jr = params.m_stoichiometricMatrix [r][j];
44+ if ( s_jr < 0.0 )
45+ {
46+ productConcPlus *= pow ( primarySpeciesConcentration[j], -s_jr );
47+ productConcPlusFlag = true ;
48+ }
49+ else if ( s_jr > 0.0 )
50+ {
51+ productConcMinus *= pow ( primarySpeciesConcentration[j], s_jr );
52+ productConcMinusFlag = true ;
53+ }
54+ }
3855
39- if ( stoichiometricCoefficient < 0.0 )
56+ RealType reactionRate_n = 0.0 ;
57+ if ( productConcPlusFlag )
4058 {
41- reactionRates[iPri] = reactionRates[iRxn] + stoichiometricCoefficient * forwardRateConstant * primarySpeciesConcentration ;
59+ reactionRate_n += forwardRateConstant * productConcPlus ;
4260 }
43- else if ( stoichiometricCoefficient > 0.0 )
61+ if ( productConcMinusFlag )
4462 {
45- reactionRates[iPri] = reactionRates[iRxn] - stoichiometricCoefficient * reverseRateConstant * primarySpeciesConcentration ;
63+ reactionRate_n -= reverseRateConstant * productConcMinus ;
4664 }
65+ reactionRates[i] += s_ir * reactionRate_n;
4766 }
4867 }
4968}
0 commit comments