Re: [AMBER] REMD with pressure coupling

From: Feng Pan <fpan3.ncsu.edu>
Date: Fri, 23 Dec 2016 10:47:25 +0800

Hello, Chris

This module now is not officially in pmemd, but I made a third-party patch
to put it in. If you want I can give you.

For pmemd.cuda on GPUs, the NPT ensemble may not work well. I found there
is a problem when I stream forces
between CPUs and GPUs. I will look into it, it could be fixed but I am not
sure.

Best
Feng

On Fri, Dec 23, 2016 at 1:43 AM, Chris Neale <candrewn.gmail.com> wrote:

> Thank you Feng!
>
> Am I correct that (a) this module is not compatible with pmemd and
> therefore that (b) it's going to be a lot slower on GPUs than running
> pmemd?
>
> Thanks again,
> Chris.
>
> On Thu, Dec 22, 2016 at 9:35 AM, Feng Pan <fpan3.ncsu.edu> wrote:
>
> > Hi, Chris
> >
> > You can try the &bbmd module for sander.MPI.
> >
> > The &bbmd is for ABMD with T-REMD and H-REMD. But you can run only T-REMD
> > by setting the mode='ANALYSIS'. Basically the T-REMD here use
> > different code from the -rem=1 one, so it should work with NPT ensemble.
> To
> > be honest, I don't know if the results will be valid but it is worth
> > trying.
> >
> > you can check the details of &bbmd here http://ambermd.org/doc12/nfe.pdf
> > in
> > section 22.6.5
> >
> > Best
> > Feng Pan
> >
> > On Wed, Dec 21, 2016 at 1:09 AM, Neale, Christopher Andrew <
> > cneale.lanl.gov>
> > wrote:
> >
> > > Dear developers:
> > >
> > > I have finished including PV work in the T-REMD exchange criterion in
> > > amber16. I still have an open question about PBC changing too much and
> > the
> > > fact that "The GPU code does not automatically reorganize grid cells",
> > and
> > > I'll update this thread if any issues pop up. Note that I did not
> enable
> > > pressure coupling Hamiltonian exchange and I completely turned off 2D
> > REMD
> > > so that I didn't have to worry about passing the other variables
> around,
> > > but if you're interested in allowing pressure coupling with REMD then
> > this
> > > code probably represents a plausible start.
> > >
> > > I made modifications to the following files:
> > > src/pmemd/src/mdin_ctrl_dat.F90
> > > src/pmemd/src/runmd.F90
> > > src/pmemd/src/remd_exchg.F90
> > > src/pmemd/src/cuda/gpu.cpp
> > >
> > >
> > > $ diff amber16/src/pmemd/src/mdin_ctrl_dat.F90
> > > amber16_pressremdPROPER/src/pmemd/src/mdin_ctrl_dat.F90
> > > 2152,2157c2152,2157
> > > < if (ntp .gt. 0) then
> > > <
> > > < write(mdout, '(a,a)') error_hdr, 'REMD cannot be run with ntp >
> > 0!'
> > > < inerr = 1
> > > <
> > > < end if
> > > ---
> > > > ! if (ntp .gt. 0) then
> > > > !
> > > > ! write(mdout, '(a,a)') error_hdr, 'REMD cannot be run with ntp
> >
> > > 0!'
> > > > ! inerr = 1
> > > > !
> > > > ! end if
> > >
> > >
> > >
> > >
> > > $ diff amber16/src/pmemd/src/runmd.F90 amber16_pressremdPROPER/src/
> > > pmemd/src/runmd.F90
> > > 895c895,896
> > > < si(si_kin_ene) / fac(1),
> > > print_exch_data, &
> > > ---
> > > > si(si_kin_ene) / fac(1), pres0, &
> > > > si(si_volume), print_exch_data, &
> > >
> > >
> > >
> > >
> > >
> > > $ diff amber16/src/pmemd/src/remd_exchg.F90
> amber16_pressremdPROPER/src/
> > > pmemd/src/remd_exchg.F90
> > > 68c68,69
> > > < use pmemd_lib_mod, only : strip
> > > ---
> > > > use pmemd_lib_mod, only : strip,mexit
> > > >
> > > 158,159c159,162
> > > < call temperature_exchange(atm_cnt, vel, remd_ptot, my_dim,
> > > remd_size, &
> > > < actual_temperature, .true., mdloop)
> > > ---
> > > > write(mdout, '(/,a)') ' PV for 2D-REMD not implemented.
> Exiting.'
> > > > call mexit(mdout, 1)
> > > > !call temperature_exchange(atm_cnt, vel, remd_ptot, my_dim,
> > > remd_size, &
> > > > ! actual_temperature, .true., mdloop)
> > > 314a318
> > > > actual_pressure, actual_volume, &
> > > 330a335,336
> > > > double precision, intent(in) :: actual_pressure
> > > > double precision, intent(in) :: actual_volume
> > > 340a347,348
> > > > double precision :: real_pres
> > > > double precision :: real_vol
> > > 347c355
> > > < integer, parameter :: SIZE_EXCHANGE_DATA = 6 ! for mpi_gather
> > > ---
> > > > integer, parameter :: SIZE_EXCHANGE_DATA = 8 ! for mpi_gather
> > > 354a363
> > > > double precision :: pressurevolumedelta
> > > 392a402,403
> > > > my_exch_data%real_pres = actual_pressure
> > > > my_exch_data%real_vol = actual_volume
> > > 460a472,480
> > > > ! * 0.0602214 / 4184 converts units to kcal/mol
> > > > pressurevolumedelta = &
> > > > (((ONEKB / my_exch_data%temp0) * &
> > > > my_exch_data%real_pres) - &
> > > > ((ONEKB / exch_data_tbl(neighbor_rank+1)%temp0) * &
> > > > exch_data_tbl(neighbor_rank+1)%real_pres)) * &
> > > > (my_exch_data%real_vol - exch_data_tbl(neighbor_rank+1)
> > %real_vol)
> > > * &
> > > > 0.0602214 / 4184.0
> > > >
> > > 465c485,486
> > > < (my_exch_data%temp0 * exch_data_tbl(neighbor_rank+1)
> > > %temp0)
> > > ---
> > > > (my_exch_data%temp0 * exch_data_tbl(neighbor_rank+1)
> > %temp0)
> > > &
> > > > - pressurevolumedelta
> > > 485,487c506,515
> > > < write(mdout,'(a8,E16.6,a8,E16.6,a12,f10.2)') &
> > > < "Metrop= ",metrop," delta= ",delta," o_scaling= ", &
> > > < 1 / my_exch_data%scaling
> > > ---
> > > > write(mdout,'(a8,E16.6,a8,E16.6,a8,E16.6,a5,E16.6,a5,E16.6,
> > > a5,E16.6,a5,E16.6,a5,E16.6,a5,E16.6,a12,f10.2)') &
> > > > "Metrop= ",metrop," delta= ",delta, &
> > > > " pvwrk= ", pressurevolumedelta, &
> > > > " T1= ", my_exch_data%temp0, &
> > > > " T2= ", exch_data_tbl(neighbor_rank+1)%temp0, &
> > > > " P1= ", my_exch_data%real_pres, &
> > > > " P2= ", exch_data_tbl(neighbor_rank+1)%real_pres, &
> > > > " V1= ", my_exch_data%real_vol, &
> > > > " V2= ", exch_data_tbl(neighbor_rank+1)%real_vol, &
> > > > " o_scaling= ", 1 / my_exch_data%scaling
> > >
> > >
> > >
> > >
> > >
> > > $ diff amber16/src/pmemd/src/cuda/gpu.cpp amber16_pressremdPROPER/src/
> > > pmemd/src/cuda/gpu.cpp
> > > 6306,6325c6306,6325
> > > < if (skin <= 0.5)
> > > < {
> > > < printf("ERROR: Calculation halted.");
> > > < printf(" Periodic box dimensions have changed too much from
> > > their initial values.\n");
> > > < printf(" Your system density has likely changed by a large
> > > amount, probably from\n");
> > > < printf(" starting the simulation from a structure a long way
> > > from equilibrium.\n");
> > > < printf("\n");
> > > < printf(" [Although this error can also occur if the
> simulation
> > > has blown up for some reason]\n");
> > > < printf("\n");
> > > < printf(" The GPU code does not automatically reorganize grid
> > > cells and thus you\n");
> > > < printf(" will need to restart the calculation from the
> > previous
> > > restart file.\n");
> > > < printf(" This will generate new grid cells and allow the
> > > calculation to continue.\n");
> > > < printf(" It may be necessary to repeat this restarting
> > multiple
> > > times if your system\n");
> > > < printf(" is a long way from an equilibrated density.\n");
> > > < printf("\n");
> > > < printf(" Alternatively you can run with the CPU code until
> the
> > > density has converged\n");
> > > < printf(" and then switch back to the GPU code.\n");
> > > < printf("\n");
> > > < exit(-1);
> > > < }
> > > ---
> > > > // if (skin <= 0.5)
> > > > // {
> > > > // printf("ERROR: Calculation halted.");
> > > > // printf(" Periodic box dimensions have changed too much
> from
> > > their initial values.\n");
> > > > // printf(" Your system density has likely changed by a large
> > > amount, probably from\n");
> > > > // printf(" starting the simulation from a structure a long
> way
> > > from equilibrium.\n");
> > > > // printf("\n");
> > > > // printf(" [Although this error can also occur if the
> > > simulation has blown up for some reason]\n");
> > > > // printf("\n");
> > > > // printf(" The GPU code does not automatically reorganize
> grid
> > > cells and thus you\n");
> > > > // printf(" will need to restart the calculation from the
> > > previous restart file.\n");
> > > > // printf(" This will generate new grid cells and allow the
> > > calculation to continue.\n");
> > > > // printf(" It may be necessary to repeat this restarting
> > > multiple times if your system\n");
> > > > // printf(" is a long way from an equilibrated density.\n");
> > > > // printf("\n");
> > > > // printf(" Alternatively you can run with the CPU code until
> > > the density has converged\n");
> > > > // printf(" and then switch back to the GPU code.\n");
> > > > // printf("\n");
> > > > // exit(-1);
> > > > // }
> > > _______________________________________________
> > > AMBER mailing list
> > > AMBER.ambermd.org
> > > http://lists.ambermd.org/mailman/listinfo/amber
> > >
> >
> >
> >
> > --
> > Feng Pan
> > Ph.D. Candidate
> > North Carolina State University
> > Department of Physics
> > Email: fpan3.ncsu.edu
> > _______________________________________________
> > AMBER mailing list
> > AMBER.ambermd.org
> > http://lists.ambermd.org/mailman/listinfo/amber
> >
> _______________________________________________
> AMBER mailing list
> AMBER.ambermd.org
> http://lists.ambermd.org/mailman/listinfo/amber
>



-- 
Feng Pan
Ph.D. Candidate
North Carolina State University
Department of Physics
Email:  fpan3.ncsu.edu
_______________________________________________
AMBER mailing list
AMBER.ambermd.org
http://lists.ambermd.org/mailman/listinfo/amber
Received on Thu Dec 22 2016 - 19:00:03 PST
Custom Search