Loading include/Reaction.h +11 −0 Original line number Diff line number Diff line Loading @@ -164,6 +164,17 @@ private: uint64_t* solidsContentMoleculeCounter; }; class Propagation_PnQnp1_changeMonomer : public Reaction { public: Propagation_PnQnp1_changeMonomer(const double* _kmc, uint64_t* _educt1c, uint64_t* _educt2c, uint64_t* _product1c, polymerSpecies* _macroEduct1, polymerSpecies* _macroProduct1, int _monomerIDProduct, uint64_t* _solidsContentMoleculeCounter); virtual double calculatePartialProbability() const override; virtual TerminationConditions execute() override; private: const int monomerIDProduct; uint64_t* solidsContentMoleculeCounter; }; class Termination_PnPmDnDm : public Reaction { public: Termination_PnPmDnDm(const double* _kmc, uint64_t* _educt1c, uint64_t* _educt2c, uint64_t* _product1c, uint64_t* _product2c, Loading src/Reaction.cpp +24 −0 Original line number Diff line number Diff line Loading @@ -368,6 +368,30 @@ double Propagation_PnQnp1::calculatePartialProbability() const { return *kmc * *eductCounter[0] * *eductCounter[1]; } Propagation_PnQnp1_changeMonomer::Propagation_PnQnp1_changeMonomer(const double* _kmc, uint64_t* _educt1c, uint64_t* _educt2c, uint64_t* _product1c, polymerSpecies* _macroEduct1, polymerSpecies* _macroProduct1, int _monomerIDProduct, uint64_t* _solidsContentMoleculeCounter) : Reaction(2, 1, _kmc, 1, 1), monomerIDProduct(_monomerIDProduct), solidsContentMoleculeCounter(_solidsContentMoleculeCounter) { eductCounter[0] = _educt1c; eductCounter[1] = _educt2c; productCounter[0] = _product1c; macroEduct[0] = _macroEduct1; macroProduct[0] = _macroProduct1; } TerminationConditions Propagation_PnQnp1_changeMonomer::execute() { --*eductCounter[0]; --*eductCounter[1]; ++*productCounter[0]; ++*solidsContentMoleculeCounter; Polymer* p = macroEduct[0]->popPolymer(); p->addM(monomerIDProduct); macroProduct[0]->addPolymer(p); return TerminationConditions::Undefined; } double Propagation_PnQnp1_changeMonomer::calculatePartialProbability() const { return *kmc * *eductCounter[0] * *eductCounter[1]; } Termination_PnPmDnDm::Termination_PnPmDnDm(const double* _kmc, uint64_t* _educt1c, uint64_t* _educt2c, uint64_t* _product1c, uint64_t* _product2c, polymerSpecies* _macroEduct1, polymerSpecies* _macroEduct2, polymerSpecies* _macroProduct1, polymerSpecies* _macroProduct2) : Reaction(2, 2, _kmc, 2, 2) { Loading src/simulation.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -286,6 +286,17 @@ void Simulation::initReactions(const kineticModel* _mcPolymerModel) { &solidsContentBalance.solidsContentMoleculeCounter[elem.eductIdList.at(1)]); break; } case ReactionTemplate::Propagation_PnQnp1_changeMonomer: { reactions[elem.id] = new Propagation_PnQnp1_changeMonomer(&reactionRateCoefficientsMC[elem.coefficientID], &moleculeCounter[elem.eductIdList.at(0)], &moleculeCounter[elem.eductIdList.at(1)], &moleculeCounter[elem.productIdList.at(0)], getPolymerSpecies(elem.eductIdList.at(0)), getPolymerSpecies(elem.productIdList.at(0)), elem.productIdList.at(1), &solidsContentBalance.solidsContentMoleculeCounter[elem.eductIdList.at(1)]); break; } case ReactionTemplate::Termination_PnPmDnDm: { reactions[elem.id] = new Termination_PnPmDnDm(&reactionRateCoefficientsMC[elem.coefficientID], &moleculeCounter[elem.eductIdList.at(0)], Loading Loading
include/Reaction.h +11 −0 Original line number Diff line number Diff line Loading @@ -164,6 +164,17 @@ private: uint64_t* solidsContentMoleculeCounter; }; class Propagation_PnQnp1_changeMonomer : public Reaction { public: Propagation_PnQnp1_changeMonomer(const double* _kmc, uint64_t* _educt1c, uint64_t* _educt2c, uint64_t* _product1c, polymerSpecies* _macroEduct1, polymerSpecies* _macroProduct1, int _monomerIDProduct, uint64_t* _solidsContentMoleculeCounter); virtual double calculatePartialProbability() const override; virtual TerminationConditions execute() override; private: const int monomerIDProduct; uint64_t* solidsContentMoleculeCounter; }; class Termination_PnPmDnDm : public Reaction { public: Termination_PnPmDnDm(const double* _kmc, uint64_t* _educt1c, uint64_t* _educt2c, uint64_t* _product1c, uint64_t* _product2c, Loading
src/Reaction.cpp +24 −0 Original line number Diff line number Diff line Loading @@ -368,6 +368,30 @@ double Propagation_PnQnp1::calculatePartialProbability() const { return *kmc * *eductCounter[0] * *eductCounter[1]; } Propagation_PnQnp1_changeMonomer::Propagation_PnQnp1_changeMonomer(const double* _kmc, uint64_t* _educt1c, uint64_t* _educt2c, uint64_t* _product1c, polymerSpecies* _macroEduct1, polymerSpecies* _macroProduct1, int _monomerIDProduct, uint64_t* _solidsContentMoleculeCounter) : Reaction(2, 1, _kmc, 1, 1), monomerIDProduct(_monomerIDProduct), solidsContentMoleculeCounter(_solidsContentMoleculeCounter) { eductCounter[0] = _educt1c; eductCounter[1] = _educt2c; productCounter[0] = _product1c; macroEduct[0] = _macroEduct1; macroProduct[0] = _macroProduct1; } TerminationConditions Propagation_PnQnp1_changeMonomer::execute() { --*eductCounter[0]; --*eductCounter[1]; ++*productCounter[0]; ++*solidsContentMoleculeCounter; Polymer* p = macroEduct[0]->popPolymer(); p->addM(monomerIDProduct); macroProduct[0]->addPolymer(p); return TerminationConditions::Undefined; } double Propagation_PnQnp1_changeMonomer::calculatePartialProbability() const { return *kmc * *eductCounter[0] * *eductCounter[1]; } Termination_PnPmDnDm::Termination_PnPmDnDm(const double* _kmc, uint64_t* _educt1c, uint64_t* _educt2c, uint64_t* _product1c, uint64_t* _product2c, polymerSpecies* _macroEduct1, polymerSpecies* _macroEduct2, polymerSpecies* _macroProduct1, polymerSpecies* _macroProduct2) : Reaction(2, 2, _kmc, 2, 2) { Loading
src/simulation.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -286,6 +286,17 @@ void Simulation::initReactions(const kineticModel* _mcPolymerModel) { &solidsContentBalance.solidsContentMoleculeCounter[elem.eductIdList.at(1)]); break; } case ReactionTemplate::Propagation_PnQnp1_changeMonomer: { reactions[elem.id] = new Propagation_PnQnp1_changeMonomer(&reactionRateCoefficientsMC[elem.coefficientID], &moleculeCounter[elem.eductIdList.at(0)], &moleculeCounter[elem.eductIdList.at(1)], &moleculeCounter[elem.productIdList.at(0)], getPolymerSpecies(elem.eductIdList.at(0)), getPolymerSpecies(elem.productIdList.at(0)), elem.productIdList.at(1), &solidsContentBalance.solidsContentMoleculeCounter[elem.eductIdList.at(1)]); break; } case ReactionTemplate::Termination_PnPmDnDm: { reactions[elem.id] = new Termination_PnPmDnDm(&reactionRateCoefficientsMC[elem.coefficientID], &moleculeCounter[elem.eductIdList.at(0)], Loading