cantera/Cantera/src/zeroD/ReactorBase.cpp

82 lines
2.3 KiB
C++

/**
* @file ReactorBase.cpp
*/
// Copyright 2001 California Institute of Technology
#include "ReactorBase.h"
#include "FlowDevice.h"
#include "Wall.h"
using namespace std;
namespace Cantera {
ReactorBase::ReactorBase(string name) : m_nsp(0),
m_thermo(0),
m_time(0.0),
m_vol(1.0),
m_vol0(1.0),
m_init(false),
m_nInlets(0),
m_nOutlets(0),
m_open(false),
m_enthalpy(0.0),
m_intEnergy(0.0),
m_pressure(0.0),
m_nwalls(0)
{
m_name = name;
}
// void ReactorBase::resetState() {
// m_thermo->saveState(m_state);
// m_enthalpy = m_thermo->enthalpy_mass();
// m_intEnergy = m_thermo->intEnergy_mass();
// m_pressure = m_thermo->pressure();
// m_init = false;
// }
void ReactorBase::setThermoMgr(thermo_t& thermo){
m_thermo = &thermo;
m_nsp = m_thermo->nSpecies();
m_thermo->saveState(m_state);
m_enthalpy = m_thermo->enthalpy_mass();
m_intEnergy = m_thermo->intEnergy_mass();
m_pressure = m_thermo->pressure();
}
void ReactorBase::addInlet(FlowDevice& inlet) {
m_inlet.push_back(&inlet);
m_open = true;
m_nInlets++;
}
void ReactorBase::addOutlet(FlowDevice& outlet) {
m_outlet.push_back(&outlet);
m_open = true;
m_nOutlets++;
}
void ReactorBase::addWall(Wall& w, int lr) {
m_wall.push_back(&w);
if (lr == 0) m_lr.push_back(0);
else m_lr.push_back(1);
m_nwalls++;
}
Wall& ReactorBase::wall(size_t n) {
return *m_wall[n];
}
doublereal ReactorBase::residenceTime() {
int nout = static_cast<int>(m_outlet.size());
doublereal mout = 0.0;
for (int i = 0; i < nout; i++)
mout += m_outlet[i]->massFlowRate();
return mass()/mout;
}
FlowDevice& ReactorBase::inlet(size_t n) { return *m_inlet[n]; }
FlowDevice& ReactorBase::outlet(size_t n) { return *m_outlet[n]; }
}