diff --git a/src/min.cpp b/src/min.cpp index df04234345..7bbe8f70d5 100644 --- a/src/min.cpp +++ b/src/min.cpp @@ -685,7 +685,8 @@ void Min::modify_params(int narg, char **arg) if (strcmp(arg[iarg+1],"euler") == 0) integrator = 0; else if (strcmp(arg[iarg+1],"verlet") == 0) integrator = 1; else if (strcmp(arg[iarg+1],"leapfrog") == 0) integrator = 2; - else error->all(FLERR,"Illegal min_modify command"); + else if (strcmp(arg[iarg+1],"eulerstandard") == 0) integrator = 3; + else error->all(FLERR,"Illegal min_modify command"); iarg += 2; } else if (strcmp(arg[iarg],"line") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal min_modify command"); diff --git a/src/min_adaptglok.cpp b/src/min_adaptglok.cpp index a394e1fc4c..d04ec44d0b 100644 --- a/src/min_adaptglok.cpp +++ b/src/min_adaptglok.cpp @@ -373,6 +373,44 @@ int MinAdaptGlok::iterate(int maxiter) } } + // Standard Euler integration + + }else if (integrator == 3) { + + dtf = dtv * force->ftm2v; + + if (rmass) { + for (int i = 0; i < nlocal; i++) { + dtfm = dtf / rmass[i]; + if (vdotfall > 0.0) { + v[i][0] = scale1*v[i][0] + scale2*f[i][0]; + v[i][1] = scale1*v[i][1] + scale2*f[i][1]; + v[i][2] = scale1*v[i][2] + scale2*f[i][2]; + } + x[i][0] += dtv * v[i][0]; + x[i][1] += dtv * v[i][1]; + x[i][2] += dtv * v[i][2]; + v[i][0] += dtfm * f[i][0]; + v[i][1] += dtfm * f[i][1]; + v[i][2] += dtfm * f[i][2]; + } + } else { + for (int i = 0; i < nlocal; i++) { + dtfm = dtf / mass[type[i]]; + if (vdotfall > 0.0) { + v[i][0] = scale1*v[i][0] + scale2*f[i][0]; + v[i][1] = scale1*v[i][1] + scale2*f[i][1]; + v[i][2] = scale1*v[i][2] + scale2*f[i][2]; + } + x[i][0] += dtv * v[i][0]; + x[i][1] += dtv * v[i][1]; + x[i][2] += dtv * v[i][2]; + v[i][0] += dtfm * f[i][0]; + v[i][1] += dtfm * f[i][1]; + v[i][2] += dtfm * f[i][2]; + } + } + } eprevious = ecurrent;