Skip to main content
. Author manuscript; available in PMC: 2018 Apr 30.
Published in final edited form as: Annu Rep Comput Chem. 2017 Aug 10;13:231–278. doi: 10.1016/bs.arcc.2017.06.005
GaMD {
 If (accelMDGRestart == 1) then
  Read parameters from restart file
  Jump to the state written in the restart file
 End if
 For i = 1, …, cMDSteps // run short initial conventional molecular dynamics
  if (i == cMDPrepSteps) reset Vmax, Vmin, Vavg, sigmaV
  Update_Stat(n,V,Vmax,Vmin,Vavg,M2,sigmaV)
  if (i % restartfreq) Save restart file
 End
 Calc_E_k(iE,sigma0,Vmax,Vmin,Vavg,sigmaV)
 For i = 1, …, EquilSteps // Equilibrate the system after adding boost potential
  If (E > V) then
   deltaV = 0.5*k*(E-V)**2
   V = V + deltaV
  EndIf
  Update_Stat(n,V,Vmax,Vmin,Vavg,M2,sigmaV)
  if (i >= EquilPrepSteps)
   Calc_E_k(iE,sigma0,Vmax,Vmin,Vavg,sigmaV)
  if (i % restartfreq) Save restart file
 End
 For i = 1, …, ProdSteps // run production simulation
  If (E > V) then
   deltaV = 0.5*k*(E-V)**2
   V = V + deltaV
  EndIf
  if (i % restartfreq) Save restart file
 End
}
Subroutine Update_Stat(n,V,Vmax,Vmin,Vavg,M2,sigmaV) {
  if (V > Vmax) Vmax = V
  if (V < Vmin) Vmin = V
  Vdiff = V – Vavg
  Vavg = Vavg + Vdiff / n
  M2 = M2 + Vdiff * (V – Vavg)
  sigmaV = sqrt(M2 / n)
  n = n + 1
}
Subroutine Calc_E_k(iE,sigma0,Vmax,Vmin,Vavg,sigmaV) {
  if iE = 1 :
   E = Vmax
   k0′ = (sigma0/sigmaV) * (Vmax-Vmin)/(Vmax-Vavg)
   k0 = min(1.0, k0′)
  else if iE = 2 :
   k0” = (1-sigma0/sigmaV) * (Vmax-Vmin)/(Vavg-Vmin)
   if 0 < k0” <= 1 :
    k0 = k0”
    E = Vmin + (Vmax-Vmin)/k0
   else
    E = Vmax
    k0′ = (sigma0/sigmaV) * (Vmax-Vmin)/(Vmax-Vavg)
    k0 = min(1.0, k0′)
   end
  end
  k = k0/(Vmax-Vmin)
}