[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Reactive polymer cross-linking

From: Buurma, Chris F
Subject: RE: Reactive polymer cross-linking
Date: Mon, 13 Jan 2020 14:30:42 +0000

Peter and Pascal,


Thanks again for the informative answers. My current problem of interest is in the equilibrium, so I’ll focus my efforts on a reaction ensemble.


I have completed an implementation of (1) the cross-linking reaction using python. This takes a reaction radius, input species, output species, and bonds broken/created as inputs. During stepping it looks through the space for particles which conform to its reactants or products lists within the reaction volume and then performs the reaction with a given equilibrium constant. It finds all possible ‘reaction sites’ in a first pass, and then probabilistically draws from this list to determine which sites react in earnest.


Right now the major problem is (2) in efficient sampling and/or physically realistic sampling (ergodic process). My current implementation is simply a probably to accept over a uniform distribution. I’ll read through the papers you suggested and try my hand this week on tackling (2). If I have a reasonable solution to both, I’d be happy to share them and try to get them implemented into Espresso either as a python module, or deeper in the C code. We can do a skype call then.





From: Pascal Hebbeker <address@hidden>
Sent: Monday, January 13, 2020 3:49 AM
To: Peter Košovan <address@hidden>
Cc: Buurma, Chris F <address@hidden>; address@hidden; Pascal Hebbeker <address@hidden>
Subject: Re: Reactive polymer cross-linking


Dear Chris,


here are two publications, which deal with forming the crosslinks between polymers.



Oyarzún, B. & Mognetti, B. M. Efficient sampling of reversible cross-linking polymers: Self-assembly of single-chain polymeric nanoparticles. The Journal of Chemical Physics 148, 114110 (2018).


Oyarzún, B. & Mognetti, B. M. Programming configurational changes in systems of functionalised polymers using reversible intramolecular linkages. Molecular Physics 116, 2927–2941 (2018).


As you can see from Figure 10a) from the Molecular Physics paper you can easily run into non-ergodic sampling. So be very cautions and test whether your algorithm converges to the real equilibrium.





On Sun, 12 Jan 2020 at 23:41, Peter Košovan <address@hidden> wrote:

Hi Chris,


I apologize for the delayed response.


I think that one should split the problem in two parts:

  1. Implementing the crosslinking reaction.
  2. Making it efficient by a suitably biased sampling or suitably chosen trial moves.

The main problem why the current Reaction Ensemble implementation in Espresso cannot handle crosslinking of polymers is because in the reaction

A + B = C + D

it turns a randomly selected pair of A and B monomers to C and D. And vice versa in the opposite direction. That is why your type "linked" did not work as expected. What you probably want is a different reaction:

A + B = A-(bond)-B

that just creates a bond between A and B while retaining the particle identities, types, etc. The reverse reaction is just removing the bond.

It should be rather straightforward to implement, in analogy with the current reaction ensemble implementation.


You could implement the same reaction using the dynamic bonds, but you should consider what are the input parameters of your model. In the reaction ensemble, your input is the equilibrium constant of the reaction, irrespective of the actual reaction mechanism. In the dynamic bonds, you need to provide the forward and reverse reaction rate constants, assuming a specific reaction mechanism, and its respective kinetics. Then, the equilibrium constant is the result of your simulation. In my opinion: If you are interested in reaction kinetics, then you should use the dynamic bonds. If you are interested in equilibrium properties, then you should use the reaction ensemble.


Definitely, it is a good idea to implement anything initially on a python script level, test it against a known and non-trivial analytical result, and then implement it in the core.


Regarding sampling efficiency, I added my colleague Pascal to the list of recipients. He will pass a reference to some publications addressing this issue.


If you are seriously interested in implementing the crosslinking, I suggest to have a short call over whatsapp or skype next week. I know of many problems where it could be useful.


With best regards,





On Mon, Jan 6, 2020 at 2:39 PM Buurma, Chris F <address@hidden> wrote:

Hi Peter,

Thank you for your detailed answer. I’d be glad to help implementing this functionality in Espresso, and in the meantime will continue working with it on the python-side interface (at a performance loss I wager).


The ‘linked’ type was a workaround I was trying. My polymer is formed from two interlinking types, unlinkable, and linkable with the exact same material properties (PPS in my example). The linkable type has a reaction (which later I discovered was globally reactive) which changes it from linkable to a 3rd type called linked when nearby Oxygen. After calling ReactionEnsemble.react() I have some python code to identify which two were reacted and then I create a new bond between them, representing the cross-link. This if course does not work with global reactions sadly.


You're right in that the dynamic bonds won’t work, and I hadn’t notice they were irreversible! Thanks for warning me. Do you think I should continue exploring that option? Can I have the dynamic bonds only affect certain types, or must it be global?


My next approach is to implement reactions separately as local-volume based. I had planned to identify all possible sites for reactions (aka, tabulate the total number of sites within which their local volume contains the reactants). Then draw from them a probability for reaction. Once drawn from a random distribution, replace reactants with products (like in your implementation) within the local volume or with relabeling, and continue my old code to forge new bonds. I will need to study the effects this will have on detailed balance, and the correct acceptance probability. Any resources I can read through for that would be most helpful.







From: Peter Košovan <address@hidden>
Sent: Sunday, January 5, 2020 5:55 PM
To: Buurma, Chris F <address@hidden>
Cc: address@hidden
Subject: Re: Reactive polymer cross-linking


Message received from outside the Battelle network. Carefully examine it before you open any links or attachments.

Hi Chris,


The current reaction ensemble cannot do what you need, i.e. cross-linking polymers by creating/deleting bonds between two existing particles. We are aware of the problem. It should not be difficult to implement, but it might be tricky to make this implementation efficient in sampling the reaction equilibrium.


I do not understand your description of how you create the new monomer of type "linked". Could you send a minimalistic example script?


You cannot control the reaction volume with the current implementation. In principle, you might be able to do so, but then you would have to correct for this bias in the acceptance probability of the reaction move. Otherwise, it would break the detailed balance.


Dynamic bonds looks similar to the reaction ensemble but it simulates a different situation: bonds that are created but never destroyed anymore, i.e. an irreversible reaction. In contrast, the reaction ensemble is designed for simulating the equilibrium state of reversible reactions.


I personally think that curing and crosslinking of poly(phenylene suffide) could be described as an irreversible reaction, rather than reversible bonds that are dynamically created and destroyed. But this is presumably not an issue of espressomd.


With regards,





On Thu, Jan 2, 2020 at 10:00 PM Buurma, Chris F <address@hidden> wrote:

Hi all,

I’m new to using espresso-md, so I’ve been pouring over the documentation and examples to better familiarize myself.

I’m starting with a somewhat simple example of poly-phenylene sulfide curing and cross-linking. So I have a few polymer chains with harmonic bonds, DPD style forces, and free oxygen ‘beads’.


I setup a reaction ensemble with the reaction to take a monomer location on two different molecules along with oxygen, and then bond them. I’m currently doing this now by introducing a new monomer type ‘linked’, which I then add a new bond type after seeing its been replaced in the reaction.


Long story short: the reaction ensemble is reacting over the entire simulation space, and picking any two monomer elements, reacting them and then forcing strange long distance bonds. Can I control the reaction volume with espressomd? Ideally I’d like a small radius around the reactants.


I also looked into the cool dynamic bonds thing, but it kept creating new bonds from ‘collisions’ of my monomer elements along a polymer chain.



Chris Buurma, Ph. D.


Dr. Peter Košovan

Department of Physical and Macromolecular Chemistry

Faculty of Science, Charles University in Prague, Czech Republic

Katedra fyzikální a makromolekulární chemie

Přírodovědecká fakulta Univerzity Karlovy v Praze
Tel. +420221951029

Fax +420224919752


Dr. Peter Košovan

Department of Physical and Macromolecular Chemistry

Faculty of Science, Charles University in Prague, Czech Republic

Katedra fyzikální a makromolekulární chemie

Přírodovědecká fakulta Univerzity Karlovy v Praze
Tel. +420221951029

Fax +420224919752


Dr. Pascal Hebbeker

Department of Physical and Macromolecular Chemistry

Faculty of Science, Charles University in Prague, Czech Republic

reply via email to

[Prev in Thread] Current Thread [Next in Thread]