Monomer insertion

Dear LAMMPS users and developers,

I want to model a polymerization mechanism where I have three types of
atoms; type 1- sort of the catalyst (beige), type 2-attached monomers
(blue) and type 3 - free monomers (green). I have attached a picture
to illustrate this mechanism. When a free monomer is inside a defined
capture radius, two bonds are created (bonds 1-3 and 2-3) and one bond
is deleted (bond 1-2). Then the "free monomer" changes atom type into
an "attached monomer" type. The process continues until the "free
monomers" are depleted.

I have looked into both fix bond/break and bond/create and it seems I
cannot do this using a combination of both fixes at their present
state. It seems that I need to write a derived "fix" class combining
elements of the two fixes. I need help on what methods I need to
define for this new derived "fix" class. Or, is there another way to
do this without writing my own fix?

Thanks,

Jan-Michael

Insertion.jpg

Dear LAMMPS users and developers,

dear jan-michael,

I want to model a polymerization mechanism where I have three types of
atoms; type 1- sort of the catalyst (beige), type 2-attached monomers
(blue) and type 3 - free monomers (green). I have attached a picture
to illustrate this mechanism. When a free monomer is inside a defined
capture radius, two bonds are created (bonds 1-3 and 2-3) and one bond
is deleted (bond 1-2). Then the "free monomer" changes atom type into
an "attached monomer" type. The process continues until the "free
monomers" are depleted.

I have looked into both fix bond/break and bond/create and it seems I
cannot do this using a combination of both fixes at their present
state. It seems that I need to write a derived "fix" class combining
elements of the two fixes. I need help on what methods I need to
define for this new derived "fix" class. Or, is there another way to
do this without writing my own fix?

not sure about the details, but my gut feeling is, that this case
is best handled by writing a new fix, since you need to do four
operations in the same step (make bond to target atom 1,
make bond to target atom 2, break bond between target atoms 1
and 2, and change atom type for the inserted atom).

i would go and take fix bond/create, rename it to fix bond/insert
and add the code needed in addition to what it already provides.
it is probably easier to do a copy+modify rather than making it
a derived class.

my $.02,
     axel.

I just wanted to comment that this looks to be a very nice way of
eliminating cluster-cluster aggregation. I don't know if that's what
you were planning to use it for. (I know this causes huge problems
for the peptide aggregation/nucleation community.)

Be careful not to revert an atom's type from "attached" (blue) back to
monomer(green) when the bond is broken without checking to make sure
there are no other bonds connecting it to the cluster.

If you want to use molecule id instead of atom type, then post from a
year ago might be relevant:
http://lammps.sandia.gov/threads/msg20129.html
I'm guessing that the fix bond/break and bond/create commands
currently don't modify an atom's molecule counter (the entry in the
atom->molecule[] array).
However I think that code that computes pairwise interactions might be
an efficient way to update this counter, if modified. A custom pair
style could then choose whether to use attractive or repulsive forces
by checking the atoms' molecule-ids. (Working on something similar
now. If I think of a solution, I'll post it.)

If you find a solution, please post it!

Andrew