new integrator to adaptblok: standard Euler (idem lammps-Fire)

This commit is contained in:
Julien Guénolé
2017-07-14 14:23:00 +02:00
parent 89c9c32c30
commit e5e630ee09
2 changed files with 40 additions and 1 deletions

View File

@ -685,6 +685,7 @@ 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 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) {

View File

@ -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;