136 lines
3.3 KiB
C++
Executable file
136 lines
3.3 KiB
C++
Executable file
/**
|
|
* @file GasKineticsWriter.cpp
|
|
*
|
|
*/
|
|
|
|
// Copyright 2001 California Institute of Technology
|
|
|
|
|
|
// turn off warnings under Windows
|
|
#ifdef WIN32
|
|
#pragma warning(disable:4786)
|
|
#pragma warning(disable:4503)
|
|
#endif
|
|
|
|
#include "ReactionData.h"
|
|
#include "GasKineticsWriter.h"
|
|
|
|
#include "StoichManager.h"
|
|
#include "Enhanced3BConc.h"
|
|
#include "ThirdBodyMgr.h"
|
|
#include "RateCoeffMgr.h"
|
|
|
|
//#include "ThermoPhase.h"
|
|
|
|
#include <iostream>
|
|
using namespace std;
|
|
|
|
namespace Cantera {
|
|
|
|
/**
|
|
* Construct an empty reaction mechanism.
|
|
*/
|
|
GasKineticsWriter::
|
|
GasKineticsWriter() : m_kk(0), m_ii(0), m_nfall(0), m_nrev(0), m_nirrev(0),
|
|
m_finalized(false) {}
|
|
|
|
void GasKineticsWriter::
|
|
addReaction(const ReactionData& r) {
|
|
|
|
if (r.reactionType == ELEMENTARY_RXN) addElementaryReaction(r);
|
|
else if (r.reactionType == THREE_BODY_RXN) addThreeBodyReaction(r);
|
|
else if (r.reactionType == FALLOFF_RXN) addFalloffReaction(r);
|
|
|
|
// operations common to all reaction types
|
|
installReagents( r.reactants, r.products, r.reversible );
|
|
m_ii++;
|
|
}
|
|
|
|
|
|
void GasKineticsWriter::
|
|
addFalloffReaction(const ReactionData& r) {
|
|
|
|
// install high and low rate coeff calculators
|
|
m_falloff_high_rates.install( m_nfall,
|
|
r.rateCoeffType, r.rateCoeffParameters.size(),
|
|
r.rateCoeffParameters.begin() );
|
|
m_falloff_low_rates.install( m_nfall,
|
|
r.rateCoeffType, r.auxRateCoeffParameters.size(),
|
|
r.auxRateCoeffParameters.begin() );
|
|
|
|
// add this reaction number to the list of
|
|
// falloff reactions
|
|
m_fallindx.push_back( reactionNumber() );
|
|
|
|
// increment the falloff reaction counter
|
|
++m_nfall;
|
|
}
|
|
|
|
|
|
void GasKineticsWriter::
|
|
addElementaryReaction(const ReactionData& r) {
|
|
|
|
int iloc;
|
|
// install rate coeff calculator
|
|
iloc = m_rates.install( reactionNumber(),
|
|
r.rateCoeffType, r.rateCoeffParameters.size(),
|
|
r.rateCoeffParameters.begin() );
|
|
}
|
|
|
|
|
|
void GasKineticsWriter::
|
|
addThreeBodyReaction(const ReactionData& r) {
|
|
|
|
int iloc;
|
|
// install rate coeff calculator
|
|
iloc = m_rates.install( reactionNumber(),
|
|
r.rateCoeffType, r.rateCoeffParameters.size(),
|
|
r.rateCoeffParameters.begin() );
|
|
}
|
|
|
|
|
|
void GasKineticsWriter::installReagents(const vector_int& r,
|
|
const vector_int& p, bool reversible) {
|
|
|
|
int nr = r.size();
|
|
int rnum = reactionNumber();
|
|
int i;
|
|
for (i = 0; i < nr; i++) {
|
|
m_rrxn[r[i]][rnum] += 1.0;
|
|
}
|
|
|
|
m_reactantWriter.add( reactionNumber(), r);
|
|
|
|
int np = p.size();
|
|
|
|
for (i = 0; i < np; i++) {
|
|
m_prxn[p[i]][rnum] += 1.0;
|
|
}
|
|
|
|
if (reversible) {
|
|
m_revProductWriter.add(reactionNumber(), p);
|
|
m_dn.push_back(np - nr);
|
|
m_revindex.push_back(reactionNumber());
|
|
m_nrev++;
|
|
}
|
|
else {
|
|
m_irrevProductWriter.add(reactionNumber(), p);
|
|
m_irrev.push_back( reactionNumber() );
|
|
m_nirrev++;
|
|
}
|
|
}
|
|
|
|
void GasKineticsWriter::init(int nsp) {
|
|
m_rrxn.resize(nsp);
|
|
m_prxn.resize(nsp);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|