[gmx-developers] Question about ewald_LRcorrection() function

Berk Hess hess at kth.se
Wed Jun 8 11:21:57 CEST 2016


Hi,

No, that code is correct.

I ran 4.6.7 on a water slab in the middle of a box with vacuum on top 
and bottom and I don't observe any issue with OpenMP only parallelization.

Cheers,

Berk

On 06/07/2016 05:03 PM, Sheng Bi wrote:
>
> Hi Berk,
>
> Thanks for your response!
>
> However, my question is still there. In fact, I run simulation in one 
> core (with multi-threadings), so domain decomposition could not be the 
> reason for this phenomenon. Meanwhile, we use a quite large box (due 
> to 3DC, Z length usually need a huge vacuum), so I think the water is 
> within the box.
>
> Actually, I have printed dipcorrA for both gmx331 and gmx467 and find 
> that there is no difference. So it wouldn’t be the PBC trouble.
>
> I think *you are right about ewald_LRcorrection().* I check this 
> function further and think it works fine.
>
> However, I think there is *something wrong in forcerec_set_excl_load() 
> function (in forcerec.c file).* We know in ewald_LRcorrection(), for 
> each thread, we loop over (i = fr->excl_load[t]; i < 
> fr->excl_load[t+1])  to do dipole correction. The excl_load array is 
> calculated in forcerec_set_excl_load(), as shown in following:
>
> / ****** line 3018 ********* /
>
>     for (t = 1; t <= fr->nthreads; t++)
>
>     {
>
> ntarget = (ntot*t)/fr->nthreads;
>
> *while (i < top->excls.nr && n < ntarget)*
>
> {
>
> for (j = ind[i]; j < ind[i+1]; j++)
>
> {
>
> if (a[j] > i)
>
> {
>
> n++;
>
> }
>
> }
>
> i++;
>
> }
>
> fr->excl_load[t] = i;
>
>     }
>
> Suppose we have a system consisted by *2 types of molecules*. The 
> whole system contains 2 *atoms*, 1 for molecule *A(positively 
> charged)* and 1 for molecule *B(negatively charged)*. We perform 
> simulation in one core with one thread. So, for code above, we can 
> deduce parameters like following:
>
> ***top->excls.nr = 2*
>
> *fr->nthreads = 1 *
>
> *ntarget = ntot =1*
>
> Since it *use while() statement here*, we can deduce that:
>
> *fr->excl_load[0] =0*
>
> *           fr->excl_load[1] =1*
>
> However, *fr->excl_load[1] should be 2*. This wrong value lead to 
> *missing a dipole correction on the 2^th atom* in 
> ewald_LRcorrection(). Because in ewald_LRcorrection(), we loop from 
> fr->excl_load[0]=0 to fr->excl_load[1] =1 using for statement.
>
> I think this is the direct reason for wrong additional force on water 
> molecule in my system. This error might result big trouble when 
> someone using umbrella sampling in a system with system dipole.
>
> Please correct me if I am wrong.
>
> Best regards!
>
> Sheng
>
> --
> PhD student
> State Key Laboratory of Coal Combustion,
> School of Energy and Power Engineering,
> Huazhong University of Science and Technology (HUST),
> Room 302 Power Building,
> 1037 Luoyu Road, Wuhan, Hubei 430074 China
> Email: chrishengbee at hust.edu.cn
> Phone: (86)27-87548122
> http://itp.energy.hust.edu.cn
>
> *From: *Berk Hess <mailto:hess at kth.se>
> *Sent: *Tuesday, June 7, 2016 5:49 PM
> *To: *gmx-developers at gromacs.org <mailto:gmx-developers at gromacs.org>
> *Subject: *Re: [gmx-developers] Question about ewald_LRcorrection() 
> function
>
> Hi,
>
> I think you misinterpreted the code in ewald_LRcorrection. It does the 
> same things in 3.3.1 and 4.6.7.
> My guess is that the issue you are observing is due to periodic 
> boundary conditions. With group cut-off scheme charge groups are whole 
> (not split by PBC), so water molecules are usually whole. Then the 3DC 
> correction always works correctly when you have charge groups with 
> zero net charge. In the Verlet cut-off scheme with domain 
> decomposition, or with charged charge groups, (partial) charges moving 
> over PBC change the system dipole. To get your system to run correctly 
> you need to ensure that no water molecule moves over the periodic 
> boundary in along the z-dimension. I think grompp will print a warning 
> for this issue.
>
> Cheers,
>
> Berk
>
> On 2016-06-07 10:12, Sheng Bi wrote:
>
>     Sorry, some type-offs in previous question.
>
>     In gmx-4.6.7, ewald_LRcorrection()*.* We loop over excluded
>     neighbours only in condition *calc_excl_corr=1*. But when using
>     Verlet cut-off scheme, *calc_excl_corr will be 0*.
>
>     --
>     PhD student
>     State Key Laboratory of Coal Combustion,
>     School of Energy and Power Engineering,
>     Huazhong University of Science and Technology (HUST),
>     Room 302 Power Building,
>     1037 Luoyu Road, Wuhan, Hubei 430074 China
>     Email: chrishengbee at hust.edu.cn <mailto:chrishengbee at hust.edu.cn>
>     Phone: (86)27-87548122
>     http://itp.energy.hust.edu.cn
>
>     *From: *Sheng Bi <mailto:chrishengbee at hust.edu.cn>
>     *Sent: *Tuesday, June 7, 2016 1:28 AM
>     *To: *gmx-developers at gromacs.org <mailto:gmx-developers at gromacs.org>
>     *Subject: *[gmx-developers] Question about ewald_LRcorrection()
>     function
>
>     Dear GMX developers:
>
>                    I find a abnormal phenomenon when using
>     *gromacs-4.6.7*. I set up a system containing two walls(consist of
>     freeze atoms), one wall has positively charges on atoms, another
>     has negatively charges.  I put an water molecule(rigid
>     spc/spce/tip3p model) between these two walls. *Whole system seems
>     like below*:
>
>     ****************************************
>
>                    * - H +                                          *
>
>                    * -             \                +
>     vacuum                              *
>
>                   * -   O +                                          *
>
>                    * -  / +                                          *
>
>                    * -          H               
>     +                                          *
>
>     ****************************************
>
>                    I use *Verlet cut-off scheme, PME method, and
>     ewald-geometry=3DC*. Temperature of whole system is at *0K*,
>     controlled by *v-rescale method*. I run whole simulation *only in
>     OPENMP parallel*.
>
>                    One can have following expected behavior of water
>     molecule without MD simulation: Since it can be seen as an
>     infinite panel capacitor, *there is constant electric field
>     between two walls. So the water will change it orientation, but
>     won’t change it’s position(Since 0K)*.
>
>                    This phenomenon can be *confirmed by gromcas-3.3.1*
>     (although there is position shift, but quite small). Also, if one
>     use higher version of gromacs, such as 4.6.7 or higher *with
>     ewald-geometry=3D, either no problem*. However, if one use *3DC*
>     (and it should be), you can see *an obvious force on water molecule*.
>
>                    I hacked into source code, and find this might due
>     to *ewald_LRcorrection()* function:
>
>                    Firstly, in gmx-4.6.7, ewald_LRcorrection()*.* We
>     *loop over excluded neighbours only in condition calc_excl_corr=0.
>     But when using verlet cut-off scheme, calc_excl_corr will be 1*.
>     In gmx-3.3.1, we do loop over excluded neighbours without
>     additional if() statement.
>
>                    Secondly, in gmx-4.6.7, , ewald_LRcorrection().
>     When do dipole correction on force, we loop over *excl_load*
>     (Exclusion load distribution over the threads). In fact, most
>     water model will have nrexel=2. So, as a result, we *only do
>     dipole correction on O atom, but do nothing on H atoms* and we
>     will see an obvious force on the whole water molecule. I think
>     this is not purpose of 3DC。
>
>                    Best regards!
>
>     Sheng Bi
>
>     **
>
>     ---
>     PhD student
>     State Key Laboratory of Coal Combustion,
>     School of Energy and Power Engineering,
>     Huazhong University of Science and Technology (HUST),
>     Room 302 Power Building,
>     1037 Luoyu Road, Wuhan, Hubei 430074 China
>     Email: chrishengbee at hust.edu.cn <mailto:chrishengbee at hust.edu.cn>
>     Phone: (86)27-87548122
>     http://itp.energy.hust.edu.cn
>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://maillist.sys.kth.se/pipermail/gromacs.org_gmx-developers/attachments/20160608/999d3380/attachment-0001.html>


More information about the gromacs.org_gmx-developers mailing list