Commit b909216e authored by Marco Drache's avatar Marco Drache
Browse files

feature: add reaction template Transfer_dormant_radical_formed

parent 5726bbf6
Loading
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -216,11 +216,17 @@ private:
class Transfer : public Reaction {
public:
	Transfer(const double* _kmc, std::vector <uint64_t*> _eductc, std::vector<uint64_t*> _productc,
		polymerSpecies* _macroEduct1, polymerSpecies* _macroProduct1, bool _keepRadical);
		polymerSpecies* _macroEduct1, polymerSpecies* _macroProduct1);
	virtual double calculatePartialProbability() const override;
	virtual TerminationConditions execute() override;
};

class Transfer_dormant_radical_formed : public Reaction {
public:
	Transfer_dormant_radical_formed(const double* _kmc, std::vector <uint64_t*> _eductc, std::vector<uint64_t*> _productc,
		polymerSpecies* _macroEduct1, polymerSpecies* _macroProduct1);
	virtual double calculatePartialProbability() const override;
	virtual TerminationConditions execute() override;
private:
	bool keepRadical = false;
};

class Depropagation : public Reaction {
+1 −1
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ enum class ReactionTemplate : uint16_t {
	ThermalInitiation2,
	ThermalInitiation3,
	Transfer,
	Transfer_dormant_radical_formed,
	TransferToMonomer,
	TransferToPolymer,
	TransferToPolymer_HYC,
@@ -171,7 +172,6 @@ struct reactionObject {

	std::vector<int> productIdList;
	std::string optionalParameterFilename = "";
	bool keepRadical = false;
};
struct pluginObject {
	int id = 0;
+36 −5
Original line number Diff line number Diff line
@@ -595,7 +595,7 @@ TerminationConditions ThermalInitiation3::execute() {
}

Transfer::Transfer(const double* _kmc, std::vector <uint64_t*> _eductc, std::vector<uint64_t*> _productc,
	polymerSpecies* _macroEduct1, polymerSpecies* _macroProduct1, bool _keepRadical)
	polymerSpecies* _macroEduct1, polymerSpecies* _macroProduct1)
	: Reaction(_eductc.size(), _productc.size(), _kmc, 1, 1) {
	for (size_t i = 0; i < _eductc.size(); i++) {
		eductCounter[i] = _eductc[i];
@@ -605,7 +605,6 @@ Transfer::Transfer(const double* _kmc, std::vector <uint64_t*> _eductc, std::vec
	}
	macroEduct[0] = _macroEduct1;
	macroProduct[0] = _macroProduct1;
	keepRadical = _keepRadical;
}
TerminationConditions Transfer::execute() {
	for (size_t i = 0; i < eductCounter.size(); i++) {
@@ -615,9 +614,9 @@ TerminationConditions Transfer::execute() {
		++* productCounter[i];
	}
	Polymer* p1 = macroEduct[0]->popPolymer();
	if (!keepRadical) {

	p1->removeRadical();
	}

	macroProduct[0]->addPolymer(p1);
	return TerminationConditions::Undefined;
}
@@ -629,6 +628,38 @@ double Transfer::calculatePartialProbability() const {
	return Probability;
}

Transfer_dormant_radical_formed::Transfer_dormant_radical_formed(const double* _kmc, std::vector <uint64_t*> _eductc, std::vector<uint64_t*> _productc,
	polymerSpecies* _macroEduct1, polymerSpecies* _macroProduct1)
	: Reaction(_eductc.size(), _productc.size(), _kmc, 1, 1) {
	for (size_t i = 0; i < _eductc.size(); i++) {
		eductCounter[i] = _eductc[i];
	}
	for (size_t i = 0; i < _productc.size(); i++) {
		productCounter[i] = _productc[i];
	}
	macroEduct[0] = _macroEduct1;
	macroProduct[0] = _macroProduct1;
}
TerminationConditions Transfer_dormant_radical_formed::execute() {
	for (size_t i = 0; i < eductCounter.size(); i++) {
		--*eductCounter[i];
	}
	for (size_t i = 0; i < productCounter.size(); i++) {
		++*productCounter[i];
	}
	Polymer* p1 = macroEduct[0]->popPolymer();

	macroProduct[0]->addPolymer(p1);
	return TerminationConditions::Undefined;
}
double Transfer_dormant_radical_formed::calculatePartialProbability() const {
	double Probability = *kmc * *eductCounter[0];
	for (size_t i = 1; i < eductCounter.size(); i++) {
		Probability *= *eductCounter[i];
	}
	return Probability;
}

Depropagation::Depropagation(const double* _kmc, std::vector <uint64_t*> _eductc, std::vector<uint64_t*> _productc,
	polymerSpecies* _macroEduct1, polymerSpecies* _macroProduct1, int _monomerID)
	: Reaction(_eductc.size(), _productc.size(), _kmc, 1, 1), monomerID(_monomerID) {
+1 −3
Original line number Diff line number Diff line
@@ -136,7 +136,6 @@ void importModelFromJSON(const string &_filename, kineticModel* _mcPolymerModel)
		reactionObj.id = countReactions;
		reactionObj.coefficientID = getCoefficientID(reaction["coefficient"], coefficientObjectList);
		reactionObj.rktTemplate = StringToReactionTemplate(reaction["template"]);
		reactionObj.keepRadical = reaction["keepRadical"];
		
		if (reaction.count("filename") > 0) {
			reactionObj.optionalParameterFilename = reaction["filename"];
@@ -304,7 +303,6 @@ void exportModelToJSON(const string &_filename,
			reaction[productLabel] = _speciesObjects.at(elemReactants).name;
			++countProducts;
		}
		reaction["keepRadical"] = elem.keepRadical;
		reactionArrayJSON.push_back(reaction);
	}
	json pluginArrayJSON;
+5 −0
Original line number Diff line number Diff line
@@ -91,6 +91,8 @@ std::string ReactionTemplateToString(ReactionTemplate _template) {
		return "ThermalInitiation3";
	case ReactionTemplate::Transfer:
		return "Transfer";
	case ReactionTemplate::Transfer_dormant_radical_formed:
		return "Transfer_dormant_radical_formed";
	case ReactionTemplate::TransferToMonomer:
		return "TransferToMonomer";
	case ReactionTemplate::TransferToPolymer:
@@ -173,6 +175,9 @@ ReactionTemplate StringToReactionTemplate(const std::string& _str) {
	if (_str == "Transfer") {
		return ReactionTemplate::Transfer;
	}
	if (_str == "Transfer_dormant_radical_formed") {
		return ReactionTemplate::Transfer_dormant_radical_formed;
	}
	if (_str == "Depropagation") {
		return ReactionTemplate::Depropagation;
	}
Loading