Problem with hybrid/overlay pair_style

Dear all,

first let me explain my problem, I initially tried to simulate a solved peptide in contact to a surface. But doing this with pair_style hybrid/overlay seems not to work properly. Every time some bond atoms are missing after a few steps, which looks in the trajectory like that there are some huge forces acting on a water close to the protein first pulling and then pushing them apart. First I thought that this could have something to do with my surface potential, but after simulating only the peptide and water, the same problem occurs. But when I use for the same system the lj/cut/coul/long 8.0 pair_style and not pair_style hybrid/overlay lj/cut 8.0 coul/long 8.0, everything works fine. This should not happen or, because I thought that pair_style lj/cut/coul/long 8.0 is equivalent to pair_style hybrid/overlay lj/cut 8.0 coul/long 8.0?

In the attachment I provided four files, one with pair_style hybrid/overlay and the other without. In both cases the system is the same. Maybe there is a bug in the hybrid/overlay pair_style when reading the parameters from the data file? I'm thinking of this, because I did an additional simulation with the surface and water, without reading the parameters from the data file and there both pair_styles work properly.

Greetings Robert

gcrl_hybrid.in (1.34 KB)

gcrl.in (1.29 KB)

gcrl_final.data (1.73 MB)

gcrl_final_hybrid.data (1.73 MB)

I
thought that pair_style lj/cut/coul/long 8.0 is equivalent to pair_style
hybrid/overlay lj/cut 8.0 coul/long 8.0?

In your hybrid.in I see only one pair coeff command for the
coul/long pair style. But not one for the lj/cut pair style.
So aren't you running the hybrid case w/out LJ interactions?

Steve

Now I see those pair coeffs in the data file.

When you run the 2 cases, do the thermo outputs match
initially = both energy and pressure, which would indicate
forces are also correct?

Steve

dear robert,

Dear all,

first let me explain my problem, I initially tried to simulate a solved
peptide in contact to a surface. But doing this with pair_style
hybrid/overlay seems not to work properly. Every time some bond atoms are
missing after a few steps, which looks in the trajectory like that there are
some huge forces acting on a water close to the protein first pulling and
then pushing them apart. First I thought that this could have something to
do with my surface potential, but after simulating only the peptide and
water, the same problem occurs. But when I use for the same system the
lj/cut/coul/long 8.0 pair_style and not pair_style hybrid/overlay lj/cut 8.0
coul/long 8.0, everything works fine. This should not happen or, because I
thought that pair_style lj/cut/coul/long 8.0 is equivalent to pair_style
hybrid/overlay lj/cut 8.0 coul/long 8.0?

it is.

In the attachment I provided four files, one with pair_style hybrid/overlay
and the other without. In both cases the system is the same. Maybe there is
a bug in the hybrid/overlay pair_style when reading the parameters from the
data file? I'm thinking of this, because I did an additional simulation with
the surface and water, without reading the parameters from the data file and
there both pair_styles work properly.

the problem is not the reading of the parameters, but the mixing.

with pair_style hybrid/overlay mixing is only supported when there
is only a single(!) interaction per pair of atom types. in your system
this is not the case, so you are missing all lj/cut interactions for
itype != jtype. if the following perl script will extract the parameters
from the data file and create all explicit pair_coeff statements
and in that case lj/cut/coul/long and hybrid overlay with lj/cut
and coul/long produce identical results.

#!/usr/bin/perl -w

use strict;

my @eps = ();
my @sig = ();
my ($i,$j) = (0,0);
while (<>) {
  if (/(\S+)\s+lj\/cut\s+(\S+)\s+(\S+)/) {
    $eps[$1] = $2;
    $sig[$1] = $3;
  }
}

for ($i = 1; $i < 12; ++$i) {
  for ($j = $i; $j < 12; ++$j) {
     print "pair_coeff $i $j lj/cut ",
           sqrt($eps[$i]*$eps[$j]), " ",
           sqrt($sig[$i]*$sig[$j]), "\n";
  }
}

cheers,
    axel.

1 Like

good catch - hadn't thought about the mixing -
I think this is indeed the source of your discrepancy

Steve

Thanks for your quick reply, my first thought was also that something was missing with the mixing, but I wasn't able to figure it out. So after modifying my input everything works fine, even with the surface :). Again, thanks for helping!

Greetings
Robert