made the command options more lammps standard style

This commit is contained in:
Emile Maras 2017-06-02 23:42:16 +02:00
parent c904cfb8bc
commit e03cc99467
7 changed files with 67 additions and 46 deletions

View File

@ -12,22 +12,33 @@ fix neb command :h3
fix ID group-ID neb Kspring keyword value :pre
ID, group-ID are documented in "fix"_fix.html command
neb = style name of this fix command
Kspring = parallel spring constant (force/distance units)
keyword = {idealpos} or {neigh} or {perp} or {freeend} :ul
{idealpos} = each replica is attached with a spring to its interpolated ideal position (default)
{neigh} = each replica is connected with spring to the previous and next replica.
{perp} value = set spring constant for the perpendicular spring to {value}
{freeend} flag = set behavior for the end points
flag = {ini} or {final} or {finaleini} or {final2eini}
ID, group-ID are documented in "fix"_fix.html command :ulb,l
neb = style name of this fix command :l
Kspring = parallel spring constant (force/distance units or force units) :l
zero or more keyword/value pairs may be appended :l
keyword = {nudg_style} or {perp} or {freend} or {freend_k_spring} :l
{nudg_style} value = {neigh} or {idealpos}
{neigh} = the parallel nudging force is calculated from the distance to neighbouring replicas (in this case, Kspring is in force/distance units)
{idealpos} = the parallel nudging force is proportional to the distance between the replica and its interpolated ideal position (in this case Kspring is in force units)
{perp} value {none} or kspring2
{none} = no perpendicular spring force is applied
{freeend} value = {none} or {ini} or {final} or {finaleini} or {final2eini}
{none} = no nudging force is apply to the first and last replicas
{ini} = set the first replica to be a free end
{final} = set the last replica to be a free end
{finaleini} = set the last replica to be a free end and set its target energy as that of the first replica
{final2eini} = same as {finaleini} plus prevent intermediate replicas to have a lower energy than the first replica
{freeend_kspring} value = kspring2
kspring2 = spring constant of the perpendicular spring force (per distance units)
flag = set behavior for the end points
flag =
:pre
[Examples:]
fix 1 active neb 10.0
fix 2 all neb 1.0 perp 1.0 freeend final
fix 1 all neb 1.0 neigh freeend final2eini :pre
fix 1 all neb 1.0 nudg_style idealpos freeend final2eini freend_kspring 1:pre
[Description:]
@ -109,11 +120,11 @@ replica, a free end neb calculation with the value {finaleini} or
:line
The keywords {idealpos} and {neigh} allow to specify how to parallel
spring force is computed. If the keyword {idealpos} is used or by
default, the spring force is computed as suggested in "(E)"_#E :
The keyword {nudg_style} allow to specify how to parallel
nudging force is computed. With a value of idealpos, the spring
force is computed as suggested in "(E)"_#E :
Fspringparallel=-{Kspring}* (RD-RDideal)/(2 meanDist) :pre
Fnudgparallel=-{Kspring}* (RD-RDideal)/(2 meanDist) :pre
where RD is the "reaction coordinate" see "neb"_neb.html section, and
RDideal is the ideal RD for which all the images are equally spaced
@ -121,13 +132,14 @@ RDideal is the ideal RD for which all the images are equally spaced
is the replica number). The meanDist is the average distance between
replicas.
If the keyword {neigh} is used, the parallel spring force is computed
as in "(Henkelman1)"_#Henkelman1 by connecting each intermediate
replica with the previous and the next image:
When {nudg_style} has a value of neigh (or by default), the parallel
nudging force is computed as in "(Henkelman1)"_#Henkelman1 by
connecting each intermediate replica with the previous and the next
image:
Fspringparallel= {Kspring}* (|Ri+1 - Ri| - |Ri - Ri-1|) :pre
Fnudgparallel= {Kspring}* (|Ri+1 - Ri| - |Ri - Ri-1|) :pre
The parallel spring force associated with the key word idealpos should
The parallel nudging force associated with the key word idealpos should
usually be more efficient at keeping the images equally spaced.
:line
@ -172,7 +184,9 @@ for more info on packages.
[Default:]
none
The option defaults are nudg_style = neigh, perp = none, freeend = none and freend_kspring = 1.
:line
:link(Henkelman1)
[(Henkelman1)] Henkelman and Jonsson, J Chem Phys, 113, 9978-9985 (2000).

View File

@ -51,7 +51,7 @@ set group nebatoms type 3
group nonneb subtract all nebatoms
fix 1 lower setforce 0.0 0.0 0.0
fix 2 nebatoms neb 1.0 neigh
fix 2 nebatoms neb 1.0 nudg_style idealpos
fix 3 all enforce2d
thermo 100

View File

@ -41,7 +41,7 @@ set group nebatoms type 3
group nonneb subtract all nebatoms
fix 1 lower setforce 0.0 0.0 0.0
fix 2 nebatoms neb 1.0 freeend ini
fix 2 nebatoms neb 1.0 nudg_style idealpos freeend ini
fix 3 all enforce2d
thermo 100

View File

@ -53,7 +53,7 @@ set group nebatoms type 3
group nonneb subtract all nebatoms
fix 1 lower setforce 0.0 0.0 0.0
fix 2 nebatoms neb 1.0 neigh
fix 2 nebatoms neb 1.0
fix 3 all enforce2d
thermo 100

View File

@ -66,7 +66,7 @@ minimize 1.0e-6 1.0e-4 1000 10000
reset_timestep 0
fix 1 all neb 1.0 neigh
fix 1 all neb 1.0
thermo 100

View File

@ -46,12 +46,13 @@ FixNEB::FixNEB(LAMMPS *lmp, int narg, char **arg) :
displacements(NULL)
{
NEBLongRange=true;
StandardNEB=PerpSpring=FreeEndIni=FreeEndFinal=false;
NEBLongRange=false;
StandardNEB=true;
PerpSpring=FreeEndIni=FreeEndFinal=false;
FreeEndFinalWithRespToEIni=FinalAndInterWithRespToEIni=false;
kspringPerp=0.0;
kspring2=1.0;
if (narg < 4)
error->all(FLERR,"Illegal fix neb command, argument missing");
@ -62,21 +63,23 @@ FixNEB::FixNEB(LAMMPS *lmp, int narg, char **arg) :
int iarg =4;
while (iarg < narg) {
if (strcmp (arg[iarg],"idealpos")==0) {
NEBLongRange = true;
iarg+=1;
} else if (strcmp (arg[iarg],"neigh")==0) {
NEBLongRange = false;
StandardNEB = true;
iarg+=1;
} else if (strcmp (arg[iarg],"perp")==0) {
if (strcmp (arg[iarg],"nudg_style")==0) {
if (strcmp (arg[iarg+1],"idealpos")==0) {
NEBLongRange = true;
iarg+=2;}
else if (strcmp (arg[iarg+1],"neigh")==0) {
NEBLongRange = false;
StandardNEB = true;
iarg+=2;}
else error->all(FLERR,"Illegal fix neb command. Unknown keyword");}
else if (strcmp (arg[iarg],"perp")==0) {
PerpSpring=true;
kspringPerp = force->numeric(FLERR,arg[iarg+1]);
if (kspringPerp < 0.0)
error->all(FLERR,"Illegal fix neb command. "
"The perpendicular spring force was not provided properly");
iarg+=2;
} else if (strcmp (arg[iarg],"freeend")==0) {
iarg+=2;}
else if (strcmp (arg[iarg],"freeend")==0) {
if (strcmp (arg[iarg+1],"ini")==0)
FreeEndIni=true;
else if (strcmp (arg[iarg+1],"final")==0)
@ -86,8 +89,12 @@ FixNEB::FixNEB(LAMMPS *lmp, int narg, char **arg) :
else if (strcmp (arg[iarg+1],"final2eini")==0) {
FinalAndInterWithRespToEIni=true;
FreeEndFinalWithRespToEIni=true;}
iarg+=2;
} else error->all(FLERR,"Illegal fix neb command. Unknown keyword");
else if (strcmp (arg[iarg+1],"none")!=0) error->all(FLERR,"Illegal fix neb command. Unknown keyword");
iarg+=2;}
else if (strcmp (arg[iarg],"freeend_kspring")==0) {
kspring2=force->numeric(FLERR,arg[iarg+1]);
iarg+=2; }
else error->all(FLERR,"Illegal fix neb command. Unknown keyword");
}
// nreplica = number of partitions
@ -468,8 +475,8 @@ void FixNEB::min_post_force(int vflag)
MPI_Allreduce(&dot,&dotall,1,MPI_DOUBLE,MPI_SUM,world);
dot=dotall/tlen;
if (dot<0) prefactor = -dot - (veng-EIniIni);
else prefactor = -dot + (veng-EIniIni);
if (dot<0) prefactor = -dot - kspring2*(veng-EIniIni);
else prefactor = -dot + kspring2*(veng-EIniIni);
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
@ -486,8 +493,8 @@ void FixNEB::min_post_force(int vflag)
MPI_Allreduce(&dot,&dotall,1,MPI_DOUBLE,MPI_SUM,world);
dot=dotall/tlen;
if (dot<0) prefactor = -dot - (veng-EFinalIni);
else prefactor = -dot + (veng-EFinalIni);
if (dot<0) prefactor = -dot - kspring2*(veng-EFinalIni);
else prefactor = -dot + kspring2*(veng-EFinalIni);
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
@ -504,8 +511,8 @@ void FixNEB::min_post_force(int vflag)
MPI_Allreduce(&dot,&dotall,1,MPI_DOUBLE,MPI_SUM,world);
dot=dotall/tlen;
if (dot<0) prefactor = -dot - (veng-vIni);
else prefactor = -dot + (veng-vIni);
if (dot<0) prefactor = -dot - kspring2*(veng-vIni);
else prefactor = -dot + kspring2*(veng-vIni);
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {

View File

@ -38,7 +38,7 @@ class FixNEB : public Fix {
private:
int me,nprocs,nprocs_universe;
double kspring,kspringPerp,EIniIni,EFinalIni;
double kspring,kspring2,kspringPerp,EIniIni,EFinalIni;
bool StandardNEB,NEBLongRange,PerpSpring,FreeEndIni,FreeEndFinal;
bool FreeEndFinalWithRespToEIni,FinalAndInterWithRespToEIni;
int ireplica,nreplica;