new integrator to adaptblok: standard Euler (idem lammps-Fire)
This commit is contained in:
@ -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) {
|
||||
|
||||
@ -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;
|
||||
|
||||
Reference in New Issue
Block a user