Unverified Commit e77e286d authored by Axel Kohlmeyer's avatar Axel Kohlmeyer Committed by GitHub
Browse files

Merge pull request #1707 from charlessievers/lammps_gjf

Lammps gjf small updates
parents 0e10fbb1 9b15f4e2
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -246,11 +246,11 @@ velocity given in "Gronbech-Jensen/Farago"_#Gronbech-Jensen; this velocity
is shown to be systematically lower than the target temperature by a small
amount, which grows quadratically with the timestep.
The {gjf} option {vhalf} outputs the 2GJ half-step velocity given in
"Gronbech Jensen/Gronbech-Jensen"_#2Gronbech-Jensen; this velocity is shown
to not have any linear statistical errors for any stable time step.
"Gronbech Jensen/Gronbech-Jensen"_#2Gronbech-Jensen; for linear systems,
this velocity is shown to not have any statistical errors for any stable time step.
An overview of statistically correct Boltzmann and Maxwell-Boltzmann
sampling of true on-site and true half-step velocities is given in
"Gronbech-Jensen_#1Gronbech-Jensen.
"Gronbech-Jensen"_#1Gronbech-Jensen.
Regardless of the choice of output velocity, the sampling of the configurational
distribution of atom positions is the same, and linearly consistent with the
target temperature.
+17 −8
Original line number Diff line number Diff line
@@ -240,7 +240,7 @@ void FixLangevin::init()
      if (strcmp(id,modify->fix[i]->id) == 0) before = 0;
      else if ((modify->fmask[i] && utils::strmatch(modify->fix[i]->style,"^nve")) && before) flag = 1;
    }
    if (flag && comm->me == 0)
    if (flag)
      error->all(FLERR,"Fix langevin gjf should come before fix nve");
  }

@@ -1007,12 +1007,21 @@ void FixLangevin::reset_dt()
{
  if (atom->mass) {
    for (int i = 1; i <= atom->ntypes; i++) {
      if (gjfflag)
        gfactor2[i] = sqrt(atom->mass[i]) *
          sqrt(2.0*force->boltz/t_period/update->dt/force->mvv2e) /
          force->ftm2v;
      else
        gfactor2[i] = sqrt(atom->mass[i]) *
          sqrt(24.0*force->boltz/t_period/update->dt/force->mvv2e) /
          force->ftm2v;
      gfactor2[i] *= 1.0/sqrt(ratio[i]);
    }
  }
  if (gjfflag) {
    gjfa = (1.0-update->dt/2.0/t_period)/(1.0+update->dt/2.0/t_period);
    gjfsib = sqrt(1.0+update->dt/2.0/t_period);
  }
}

/* ---------------------------------------------------------------------- */