Commit 61237f59 authored by Marco Drache's avatar Marco Drache
Browse files

feature: Propagation_PnQnp1_changeMonomer

parent c3cfd91e
Loading
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -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,
+24 −0
Original line number Diff line number Diff line
@@ -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) {
+11 −0
Original line number Diff line number Diff line
@@ -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)],