| 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) |
| } |