Nominally finished the copy constructors/assignment operators
for the Kinetics class and friends. However, I have not done any testing on this, none.
This commit is contained in:
parent
0cbec89c52
commit
0766b9469d
5 changed files with 229 additions and 38 deletions
|
|
@ -30,7 +30,50 @@
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
namespace Cantera {
|
namespace Cantera {
|
||||||
|
//====================================================================================================================
|
||||||
|
AqueousKineticsData::AqueousKineticsData() :
|
||||||
|
m_logp_ref(0.0),
|
||||||
|
m_logc_ref(0.0),
|
||||||
|
m_ROP_ok(false),
|
||||||
|
m_temp(0.0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
//====================================================================================================================
|
||||||
|
AqueousKineticsData::~AqueousKineticsData()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
//====================================================================================================================
|
||||||
|
AqueousKineticsData::AqueousKineticsData(const AqueousKineticsData &right) :
|
||||||
|
m_logp_ref(0.0),
|
||||||
|
m_logc_ref(0.0),
|
||||||
|
m_ROP_ok(false),
|
||||||
|
m_temp(0.0)
|
||||||
|
{
|
||||||
|
*this=right;
|
||||||
|
}
|
||||||
|
//====================================================================================================================
|
||||||
|
|
||||||
|
AqueousKineticsData& AqueousKineticsData::operator=(const AqueousKineticsData &right)
|
||||||
|
{
|
||||||
|
if (this != &right) {
|
||||||
|
m_logp_ref = right.m_logp_ref;
|
||||||
|
m_logc_ref = right.m_logc_ref;
|
||||||
|
m_ropf = right.m_ropf;
|
||||||
|
m_ropr = right.m_ropr;
|
||||||
|
m_ropnet = right.m_ropnet;
|
||||||
|
m_rfn_low = right.m_rfn_low;
|
||||||
|
m_rfn_high = right.m_rfn_high;
|
||||||
|
m_ROP_ok = right.m_ROP_ok;
|
||||||
|
m_temp = right.m_temp;
|
||||||
|
m_rfn = right.m_rfn;
|
||||||
|
m_rkcn = right.m_rkcn;
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
//====================================================================================================================
|
||||||
|
|
||||||
|
|
||||||
|
//====================================================================================================================
|
||||||
/**
|
/**
|
||||||
* Construct an empty reaction mechanism.
|
* Construct an empty reaction mechanism.
|
||||||
*/
|
*/
|
||||||
|
|
@ -47,12 +90,70 @@ namespace Cantera {
|
||||||
m_kdata->m_temp = 0.0;
|
m_kdata->m_temp = 0.0;
|
||||||
m_rxnstoich = new ReactionStoichMgr;
|
m_rxnstoich = new ReactionStoichMgr;
|
||||||
}
|
}
|
||||||
|
//====================================================================================================================
|
||||||
|
AqueousKinetics::AqueousKinetics(const AqueousKinetics &right) :
|
||||||
|
Kinetics(),
|
||||||
|
m_kk(0),
|
||||||
|
m_nfall(0),
|
||||||
|
m_nirrev(0),
|
||||||
|
m_nrev(0),
|
||||||
|
m_finalized(false)
|
||||||
|
{
|
||||||
|
*this = right;
|
||||||
|
}
|
||||||
|
//====================================================================================================================
|
||||||
AqueousKinetics::~AqueousKinetics() {
|
AqueousKinetics::~AqueousKinetics() {
|
||||||
delete m_kdata;
|
delete m_kdata;
|
||||||
delete m_rxnstoich;
|
delete m_rxnstoich;
|
||||||
}
|
}
|
||||||
|
//====================================================================================================================
|
||||||
|
AqueousKinetics& AqueousKinetics::operator=(const AqueousKinetics &right)
|
||||||
|
{
|
||||||
|
if (this == &right) return *this;
|
||||||
|
|
||||||
|
Kinetics::operator=(right);
|
||||||
|
|
||||||
|
m_kk = right.m_kk;
|
||||||
|
m_nfall = right.m_nfall;
|
||||||
|
m_rates = right.m_rates;
|
||||||
|
m_index = right.m_index;
|
||||||
|
m_irrev = right.m_irrev;
|
||||||
|
|
||||||
|
*m_rxnstoich = *(right.m_rxnstoich);
|
||||||
|
|
||||||
|
m_fwdOrder = right.m_fwdOrder;
|
||||||
|
m_nirrev = right.m_nirrev;
|
||||||
|
m_nrev = right.m_nrev;
|
||||||
|
m_rgroups = right.m_rgroups;
|
||||||
|
m_pgroups = right.m_pgroups;
|
||||||
|
m_rxntype = right.m_rxntype;
|
||||||
|
m_rrxn = right.m_rrxn;
|
||||||
|
m_prxn = right.m_prxn;
|
||||||
|
m_dn = right.m_dn;
|
||||||
|
m_revindex = right.m_revindex;
|
||||||
|
m_rxneqn = right.m_rxneqn;
|
||||||
|
|
||||||
|
*m_kdata = *(right.m_kdata);
|
||||||
|
|
||||||
|
m_conc = right.m_conc;
|
||||||
|
m_grt = right.m_grt;
|
||||||
|
m_finalized = right.m_finalized;
|
||||||
|
|
||||||
|
throw CanteraError("GasKinetics::operator=()",
|
||||||
|
"Unfinished implementation");
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
|
||||||
|
}
|
||||||
|
//====================================================================================================================
|
||||||
|
Kinetics *AqueousKinetics::duplMyselfAsKinetics(const std::vector<thermo_t*> & tpVector) const
|
||||||
|
{
|
||||||
|
AqueousKinetics* gK = new AqueousKinetics(*this);
|
||||||
|
gK->assignShallowPointers(tpVector);
|
||||||
|
return dynamic_cast<Kinetics *>(gK);
|
||||||
|
}
|
||||||
|
|
||||||
|
//====================================================================================================================
|
||||||
/**
|
/**
|
||||||
* Update temperature-dependent portions of reaction rates and
|
* Update temperature-dependent portions of reaction rates and
|
||||||
* falloff functions.
|
* falloff functions.
|
||||||
|
|
|
||||||
|
|
@ -46,18 +46,21 @@ namespace Cantera {
|
||||||
*/
|
*/
|
||||||
class AqueousKineticsData {
|
class AqueousKineticsData {
|
||||||
public:
|
public:
|
||||||
AqueousKineticsData() :
|
AqueousKineticsData();
|
||||||
m_logp_ref(0.0),
|
|
||||||
m_logc_ref(0.0),
|
|
||||||
m_ROP_ok(false),
|
|
||||||
m_temp(0.0)
|
|
||||||
{}
|
|
||||||
virtual ~AqueousKineticsData(){}
|
|
||||||
|
|
||||||
doublereal m_logp_ref, m_logc_ref;
|
~AqueousKineticsData();
|
||||||
|
|
||||||
|
AqueousKineticsData(const AqueousKineticsData &right);
|
||||||
|
|
||||||
|
AqueousKineticsData& operator=(const AqueousKineticsData &right);
|
||||||
|
|
||||||
|
doublereal m_logp_ref;
|
||||||
|
doublereal m_logc_ref;
|
||||||
array_fp m_ropf;
|
array_fp m_ropf;
|
||||||
array_fp m_ropr, m_ropnet;
|
array_fp m_ropr;
|
||||||
array_fp m_rfn_low, m_rfn_high;
|
array_fp m_ropnet;
|
||||||
|
array_fp m_rfn_low;
|
||||||
|
array_fp m_rfn_high;
|
||||||
bool m_ROP_ok;
|
bool m_ROP_ok;
|
||||||
|
|
||||||
doublereal m_temp;
|
doublereal m_temp;
|
||||||
|
|
@ -88,9 +91,27 @@ namespace Cantera {
|
||||||
/// Constructor.
|
/// Constructor.
|
||||||
AqueousKinetics(thermo_t* thermo = 0);
|
AqueousKinetics(thermo_t* thermo = 0);
|
||||||
|
|
||||||
|
AqueousKinetics(const AqueousKinetics &right);
|
||||||
|
|
||||||
|
AqueousKinetics& operator=(const AqueousKinetics &right);
|
||||||
|
|
||||||
/// Destructor.
|
/// Destructor.
|
||||||
virtual ~AqueousKinetics();
|
virtual ~AqueousKinetics();
|
||||||
|
|
||||||
|
|
||||||
|
//! Duplication routine for objects which inherit from Kinetics
|
||||||
|
/*!
|
||||||
|
* This virtual routine can be used to duplicate %Kinetics objects
|
||||||
|
* inherited from %Kinetics even if the application only has
|
||||||
|
* a pointer to %Kinetics to work with.
|
||||||
|
*
|
||||||
|
* These routines are basically wrappers around the derived copy constructor.
|
||||||
|
*
|
||||||
|
* @param tpVector Vector of shallow pointers to ThermoPhase objects. this is the
|
||||||
|
* m_thermo vector within this object
|
||||||
|
*/
|
||||||
|
virtual Kinetics *duplMyselfAsKinetics(const std::vector<thermo_t*> & tpVector) const;
|
||||||
|
|
||||||
virtual int ID() const { return cAqueousKinetics; }
|
virtual int ID() const { return cAqueousKinetics; }
|
||||||
virtual int type() const { return cAqueousKinetics; }
|
virtual int type() const { return cAqueousKinetics; }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,38 @@ namespace Cantera {
|
||||||
/// Destructor.
|
/// Destructor.
|
||||||
virtual ~EdgeKinetics() {}
|
virtual ~EdgeKinetics() {}
|
||||||
|
|
||||||
|
EdgeKinetics(const EdgeKinetics &right) :
|
||||||
|
InterfaceKinetics(right)
|
||||||
|
{
|
||||||
|
*this=right;
|
||||||
|
}
|
||||||
|
|
||||||
|
EdgeKinetics & operator=(const EdgeKinetics &right)
|
||||||
|
{
|
||||||
|
if (this != &right) {
|
||||||
|
InterfaceKinetics::operator=(right);
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Duplication routine for objects which inherit from Kinetics
|
||||||
|
/*!
|
||||||
|
* This virtual routine can be used to duplicate %Kinetics objects
|
||||||
|
* inherited from %Kinetics even if the application only has
|
||||||
|
* a pointer to %Kinetics to work with.
|
||||||
|
*
|
||||||
|
* These routines are basically wrappers around the derived copy constructor.
|
||||||
|
*
|
||||||
|
* @param tpVector Vector of shallow pointers to ThermoPhase objects. this is the
|
||||||
|
* m_thermo vector within this object
|
||||||
|
*/
|
||||||
|
virtual Kinetics *duplMyselfAsKinetics(const std::vector<thermo_t*> & tpVector) const
|
||||||
|
{
|
||||||
|
EdgeKinetics* iK = new EdgeKinetics(*this);
|
||||||
|
iK->assignShallowPointers(tpVector);
|
||||||
|
return dynamic_cast<Kinetics *>(iK);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Identifies the subclass of the Kinetics manager type.
|
* Identifies the subclass of the Kinetics manager type.
|
||||||
* These are listed in mix_defs.h.
|
* These are listed in mix_defs.h.
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,45 @@
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
namespace Cantera {
|
namespace Cantera {
|
||||||
|
//====================================================================================================================
|
||||||
|
InterfaceKineticsData::InterfaceKineticsData() :
|
||||||
|
m_logp0(0.0),
|
||||||
|
m_logc0(0.0),
|
||||||
|
m_ROP_ok(false),
|
||||||
|
m_temp(0.0),
|
||||||
|
m_logtemp(0.0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
//====================================================================================================================
|
||||||
|
InterfaceKineticsData:: InterfaceKineticsData(const InterfaceKineticsData &right) :
|
||||||
|
m_logp0(0.0),
|
||||||
|
m_logc0(0.0),
|
||||||
|
m_ROP_ok(false),
|
||||||
|
m_temp(0.0),
|
||||||
|
m_logtemp(0.0)
|
||||||
|
{
|
||||||
|
*this = right;
|
||||||
|
}
|
||||||
|
//====================================================================================================================
|
||||||
|
InterfaceKineticsData::~InterfaceKineticsData()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
//====================================================================================================================
|
||||||
|
InterfaceKineticsData & InterfaceKineticsData::operator=(const InterfaceKineticsData &right)
|
||||||
|
{
|
||||||
|
if (this == &right) return *this;
|
||||||
|
m_logp0 = right.m_logp0;
|
||||||
|
m_logc0 = right.m_logc0;
|
||||||
|
m_ropf = right.m_ropf;
|
||||||
|
m_ropr = right.m_ropr;
|
||||||
|
m_ropnet = right.m_ropnet;
|
||||||
|
m_ROP_ok = right.m_ROP_ok;
|
||||||
|
m_temp = right.m_temp;
|
||||||
|
m_logtemp = right.m_logtemp;
|
||||||
|
m_rfn = right.m_rfn;
|
||||||
|
m_rkcn = right.m_rkcn;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
//====================================================================================================================
|
//====================================================================================================================
|
||||||
/*
|
/*
|
||||||
* Construct an empty InterfaceKinetics reaction mechanism.
|
* Construct an empty InterfaceKinetics reaction mechanism.
|
||||||
|
|
@ -136,8 +174,7 @@ namespace Cantera {
|
||||||
|
|
||||||
Kinetics::operator=(right);
|
Kinetics::operator=(right);
|
||||||
|
|
||||||
|
m_grt = right.m_grt;
|
||||||
|
|
||||||
m_kk = right.m_kk;
|
m_kk = right.m_kk;
|
||||||
m_revindex = right.m_revindex;
|
m_revindex = right.m_revindex;
|
||||||
m_rates = right.m_rates;
|
m_rates = right.m_rates;
|
||||||
|
|
@ -150,7 +187,8 @@ namespace Cantera {
|
||||||
m_rrxn = right.m_rrxn;
|
m_rrxn = right.m_rrxn;
|
||||||
m_prxn = right.m_prxn;
|
m_prxn = right.m_prxn;
|
||||||
m_rxneqn = right.m_rxneqn;
|
m_rxneqn = right.m_rxneqn;
|
||||||
*m_kdata = *right.m_kdata; // needs to be developed
|
*m_kdata = *right.m_kdata;
|
||||||
|
m_conc = right.m_conc;
|
||||||
m_mu0 = right.m_mu0;
|
m_mu0 = right.m_mu0;
|
||||||
m_phi = right.m_phi;
|
m_phi = right.m_phi;
|
||||||
m_pot = right.m_pot;
|
m_pot = right.m_pot;
|
||||||
|
|
@ -171,7 +209,6 @@ namespace Cantera {
|
||||||
m_phaseExistsCheck = right.m_phaseExistsCheck;
|
m_phaseExistsCheck = right.m_phaseExistsCheck;
|
||||||
m_phaseExists = right.m_phaseExists;
|
m_phaseExists = right.m_phaseExists;
|
||||||
|
|
||||||
|
|
||||||
m_rxnPhaseIsReactant.resize(m_ii, 0);
|
m_rxnPhaseIsReactant.resize(m_ii, 0);
|
||||||
m_rxnPhaseIsProduct.resize(m_ii, 0);
|
m_rxnPhaseIsProduct.resize(m_ii, 0);
|
||||||
int np = nPhases();
|
int np = nPhases();
|
||||||
|
|
@ -183,7 +220,7 @@ namespace Cantera {
|
||||||
m_rxnPhaseIsProduct[i][p] = right.m_rxnPhaseIsProduct[i][p];
|
m_rxnPhaseIsProduct[i][p] = right.m_rxnPhaseIsProduct[i][p];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_rxnPhaseIsProduct = right.m_rxnPhaseIsProduct;
|
|
||||||
m_ioFlag = right.m_ioFlag;
|
m_ioFlag = right.m_ioFlag;
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
|
|
@ -197,17 +234,6 @@ namespace Cantera {
|
||||||
int InterfaceKinetics::type() const {
|
int InterfaceKinetics::type() const {
|
||||||
return cInterfaceKinetics;
|
return cInterfaceKinetics;
|
||||||
}
|
}
|
||||||
//====================================================================================================================
|
|
||||||
// Set the electric potential in the nth phase
|
|
||||||
/*
|
|
||||||
* @param n phase Index in this kinetics object.
|
|
||||||
* @param V Electric potential (volts)
|
|
||||||
*/
|
|
||||||
void InterfaceKinetics::setElectricPotential(int n, doublereal V) {
|
|
||||||
thermo(n).setElectricPotential(V);
|
|
||||||
m_redo_rates = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//====================================================================================================================
|
//====================================================================================================================
|
||||||
// Duplication routine for objects which inherit from Kinetics
|
// Duplication routine for objects which inherit from Kinetics
|
||||||
/*
|
/*
|
||||||
|
|
@ -227,6 +253,16 @@ namespace Cantera {
|
||||||
return dynamic_cast<Kinetics *>(iK);
|
return dynamic_cast<Kinetics *>(iK);
|
||||||
}
|
}
|
||||||
//====================================================================================================================
|
//====================================================================================================================
|
||||||
|
// Set the electric potential in the nth phase
|
||||||
|
/*
|
||||||
|
* @param n phase Index in this kinetics object.
|
||||||
|
* @param V Electric potential (volts)
|
||||||
|
*/
|
||||||
|
void InterfaceKinetics::setElectricPotential(int n, doublereal V) {
|
||||||
|
thermo(n).setElectricPotential(V);
|
||||||
|
m_redo_rates = true;
|
||||||
|
}
|
||||||
|
//====================================================================================================================
|
||||||
// Update properties that depend on temperature
|
// Update properties that depend on temperature
|
||||||
/*
|
/*
|
||||||
* This is called to update all of the properties that depend on temperature
|
* This is called to update all of the properties that depend on temperature
|
||||||
|
|
|
||||||
|
|
@ -44,16 +44,17 @@ namespace Cantera {
|
||||||
*/
|
*/
|
||||||
class InterfaceKineticsData {
|
class InterfaceKineticsData {
|
||||||
public:
|
public:
|
||||||
InterfaceKineticsData() :
|
InterfaceKineticsData();
|
||||||
m_logp0(0.0),
|
|
||||||
m_logc0(0.0),
|
InterfaceKineticsData(const InterfaceKineticsData &right);
|
||||||
m_ROP_ok(false),
|
|
||||||
m_temp(0.0),
|
InterfaceKineticsData &operator=(const InterfaceKineticsData &right);
|
||||||
m_logtemp(0.0)
|
|
||||||
{}
|
|
||||||
//! Virtual destructor
|
//! Virtual destructor
|
||||||
virtual ~InterfaceKineticsData() {
|
/*!
|
||||||
}
|
* todo - why is this virtual
|
||||||
|
*/
|
||||||
|
virtual ~InterfaceKineticsData();
|
||||||
|
|
||||||
doublereal m_logp0;
|
doublereal m_logp0;
|
||||||
doublereal m_logc0;
|
doublereal m_logc0;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue