Skip to content
Snippets Groups Projects
Commit 14251948 authored by dilkins's avatar dilkins
Browse files

LAMMPS coding conventions

parent 799ffc58
No related branches found
No related tags found
No related merge requests found
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
Contributing authors: Lionel Constantin (EPFL), David M. Wilkins (EPFL), Contributing authors: Lionel Constantin (EPFL), David M. Wilkins (EPFL),
Michele Ceriotti (EPFL) Michele Ceriotti (EPFL)
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */
...@@ -62,143 +62,132 @@ enum {CONSTANT,EQUAL,ATOM}; ...@@ -62,143 +62,132 @@ enum {CONSTANT,EQUAL,ATOM};
FixFFL::FixFFL(LAMMPS *lmp, int narg, char **arg) : FixFFL::FixFFL(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg) Fix(lmp, narg, arg) {
{
if (narg < 7)
if (narg < 7) error->all(FLERR,"Illegal fix ffl command. Expecting: fix <fix-ID>"
error->all(FLERR,"Illegal fix ffl command. Expecting: fix <fix-ID>" " <group-ID> ffl <tau> <Tstart> <Tstop> <seed> ");
" <group-ID> ffl <tau> <Tstart> <Tstop> <seed> ");
restart_peratom = 1;
restart_peratom = 1; time_integrate = 1;
time_integrate = 1; scalar_flag = 1;
scalar_flag = 1;
//gamma = 1/ time constant(tau)
//gamma = 1/ time constant(tau) if (force->numeric(FLERR,arg[3]) <= 0)
if (force->numeric(FLERR,arg[3]) <= 0) error->all(FLERR,"Illegal fix ffl tau value, should be greater than 0");
error->all(FLERR,"Illegal fix ffl tau value, should be greater than 0"); gamma = 1.0/force->numeric(FLERR,arg[3]);
gamma = 1.0/force->numeric(FLERR,arg[3]); ffl_every=1;
ffl_every=1; ffl_step=0;
ffl_step=0;
// start temperature (t ramp)
// start temperature (t ramp) t_start = force->numeric(FLERR,arg[4]);
t_start = force->numeric(FLERR,arg[4]);
// final temperature (t ramp)
// final temperature (t ramp) t_stop = force->numeric(FLERR,arg[5]);
t_stop = force->numeric(FLERR,arg[5]);
// PRNG seed
// PRNG seed int seed = force->inumeric(FLERR,arg[6]);
int seed = force->inumeric(FLERR,arg[6]);
// Flip type used, uses rescale if no flip is given
// Flip type used, uses rescale if no flip is given if (narg == 8) {
if (narg == 8) { if (strcmp(arg[7],"no_flip") == 0) {
if (strcmp(arg[7],"no_flip") == 0) {flip_int = 0;} flip_int = 0;
else if ((strcmp(arg[7],"rescale") == 0) {flip_int = 1;} } else if (strcmp(arg[7],"rescale") == 0) {
else if ((strcmp(arg[7],"hard") == 0) {flip_int = 2;} flip_int = 1;
else if ((strcmp(arg[7],"soft") == 0) {flip_int = 3;} } else if (strcmp(arg[7],"hard") == 0) {
else { flip_int = 2;
error->all(FLERR,"Illegal fix ffl flip type, only accepts : rescale - hard - soft - no_flip"); } else if (strcmp(arg[7],"soft") == 0) {
} flip_int = 3;
} else { } else {
flip_int = 1; error->all(FLERR,"Illegal fix ffl flip type, only accepts : rescale - hard - soft - no_flip");
} }
} else {
flip_int = 1;
}
t_target=t_start;
const double kT = t_target * force->boltz / force->mvv2e;
// if ( strcmp(flip_type,"no_flip") == 0 ) flip_int = 0; // initialize Marsaglia RNG with processor-unique seed
// if ( strcmp(flip_type,"rescale") == 0 ) flip_int = 1; // NB: this means runs will not be the same with different numbers of processors
// if ( strcmp(flip_type,"hard") == 0 ) flip_int = 2; if (seed <= 0) error->all(FLERR,"Illegal fix ffl command");
// if ( strcmp(flip_type,"soft") == 0 ) flip_int = 3; random = new RanMars(lmp,seed + comm->me);
t_target=t_start; // allocate per-type arrays for mass-scaling
const double kT = t_target * force->boltz / force->mvv2e; sqrt_m=NULL;
memory->grow(sqrt_m, atom->ntypes+1,"ffl:sqrt_m");
// allocates space for temporaries
ffl_tmp1=ffl_tmp2=NULL;
// initialize Marsaglia RNG with processor-unique seed grow_arrays(atom->nmax);
// NB: this means runs will not be the same with different numbers of processors
if (seed <= 0) error->all(FLERR,"Illegal fix ffl command");
random = new RanMars(lmp,seed + comm->me);
// allocate per-type arrays for mass-scaling // add callbacks to enable restarts
sqrt_m=NULL; atom->add_callback(0);
memory->grow(sqrt_m, atom->ntypes+1,"ffl:sqrt_m"); atom->add_callback(1);
// allocates space for temporaries energy = 0.0;
ffl_tmp1=ffl_tmp2=NULL;
grow_arrays(atom->nmax);
// add callbacks to enable restarts
atom->add_callback(0);
atom->add_callback(1);
energy = 0.0;
} }
/* --- Frees up memory used by temporaries and buffers ------------------ */ /* --- Frees up memory used by temporaries and buffers ------------------ */
FixFFL::~FixFFL() FixFFL::~FixFFL() {
{ delete random;
delete random;
memory->destroy(sqrt_m); memory->destroy(sqrt_m);
memory->destroy(ffl_tmp1); memory->destroy(ffl_tmp1);
memory->destroy(ffl_tmp2); memory->destroy(ffl_tmp2);
} }
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
int FixFFL::setmask() int FixFFL::setmask() {
{ int mask = 0;
int mask = 0;
mask |= INITIAL_INTEGRATE; mask |= INITIAL_INTEGRATE;
mask |= FINAL_INTEGRATE; mask |= FINAL_INTEGRATE;
mask |= INITIAL_INTEGRATE_RESPA; mask |= INITIAL_INTEGRATE_RESPA;
mask |= FINAL_INTEGRATE_RESPA; mask |= FINAL_INTEGRATE_RESPA;
mask |= THERMO_ENERGY; mask |= THERMO_ENERGY;
return mask; return mask;
} }
/* ------- Initializes one-time quantities for FFL ---------------------- */ /* ------- Initializes one-time quantities for FFL ---------------------- */
void FixFFL::init() void FixFFL::init() {
{ doffl = 1;
doffl = 1; dtv = update->dt;
dtv = update->dt; dtf = 0.5 * update->dt * force->ftm2v;
dtf = 0.5 * update->dt * force->ftm2v;
// set force prefactors
if (!atom->rmass)
{
for (int i = 1; i <= atom->ntypes; i++)
{
sqrt_m[i] = sqrt(atom->mass[i]);
}
}
if (strstr(update->integrate_style,"respa")) // set force prefactors
{ if (!atom->rmass) {
nlevels_respa = ((Respa *) update->integrate)->nlevels; for (int i = 1; i <= atom->ntypes; i++) {
step_respa = ((Respa *) update->integrate)->step; sqrt_m[i] = sqrt(atom->mass[i]);
} }
}
init_ffl(); if (strstr(update->integrate_style,"respa")) {
nlevels_respa = ((Respa *) update->integrate)->nlevels;
step_respa = ((Respa *) update->integrate)->step;
}
init_ffl();
} }
/* ------- Initializes constants for FFL (change with T and dt) ------- */ /* ------- Initializes constants for FFL (change with T and dt) ------- */
void FixFFL::init_ffl() void FixFFL::init_ffl() {
{ const double kT = t_target * force->boltz / force->mvv2e;
const double kT = t_target * force->boltz / force->mvv2e;
// compute constants for FFL // compute constants for FFL
c1 = exp ( - gamma * 0.5 * dtv ); c1 = exp ( - gamma * 0.5 * dtv );
c2 = sqrt( (1.0 - c1*c1)* kT ); //without the mass term c2 = sqrt( (1.0 - c1*c1)* kT ); //without the mass term
} }
...@@ -207,279 +196,244 @@ void FixFFL::init_ffl() ...@@ -207,279 +196,244 @@ void FixFFL::init_ffl()
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
void FixFFL::setup(int vflag) void FixFFL::setup(int vflag) {
{ if (strstr(update->integrate_style,"verlet"))
if (strstr(update->integrate_style,"verlet")) post_force(vflag);
post_force(vflag); else {
else ((Respa *) update->integrate)->copy_flevel_f(nlevels_respa-1);
{ post_force_respa(vflag,nlevels_respa-1,0);
((Respa *) update->integrate)->copy_flevel_f(nlevels_respa-1); ((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1);
post_force_respa(vflag,nlevels_respa-1,0); }
((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1);
}
} }
void FixFFL::ffl_integrate() void FixFFL::ffl_integrate() {
{ double **v = atom->v;
double **v = atom->v; double *rmass = atom->rmass, smi, ismi;
double *rmass = atom->rmass, smi, ismi; double factor;
double factor; int *type = atom->type;
int *type = atom->type; int *mask = atom->mask;
int *mask = atom->mask; int nlocal = atom->nlocal;
int nlocal = atom->nlocal; if (igroup == atom->firstgroup) nlocal = atom->nfirst;
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
// loads momentum data (mass-scaled) into the temporary vectors for the propagation
// loads momentum data (mass-scaled) into the temporary vectors for the propagation int nk=0;
int nk=0; double deltae=0.0;
double deltae=0.0; for (int i = 0; i < nlocal; i++) {
for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) {
{ if (rmass) smi = sqrt(rmass[i]);
if (mask[i] & groupbit) else smi = sqrt_m[type[i]];
{
if (rmass) smi = sqrt(rmass[i]); for (int k = 0; k<3; k++) {
else smi = sqrt_m[type[i]]; // first loads velocities and accumulates conserved quantity
ffl_tmp2[nk] = v[i][k] * smi;
for (int k = 0; k<3; k++) deltae += ffl_tmp2[nk] * ffl_tmp2[nk];
{ nk++;
// first loads velocities and accumulates conserved quantity }
ffl_tmp2[nk] = v[i][k] * smi;
deltae += ffl_tmp2[nk] * ffl_tmp2[nk];
nk++;
}
}
} }
}
//fills up a vector of random numbers //fills up a vector of random numbers
for (int i = 0; i < nk; i++) ffl_tmp1[i] = random->gaussian(); for (int i = 0; i < nk; i++) ffl_tmp1[i] = random->gaussian();
// unloads momentum data (mass-scaled) from the temporary vectors // unloads momentum data (mass-scaled) from the temporary vectors
nk=0; nk=0;
for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) {
{ if (rmass) ismi = 1.0 / sqrt(rmass[i]);
if (rmass) ismi = 1.0 / sqrt(rmass[i]); else ismi = 1.0/ sqrt_m[type[i]];
else ismi = 1.0/ sqrt_m[type[i]];
for (int k = 0; k<3; k++) {
for (int k = 0; k<3; k++) // fetches new velocities and completes computation of the conserved quantity change
{ v[i][k]= c1*v[i][k] + c2*ffl_tmp1[nk]*ismi;
// fetches new velocities and completes computation of the conserved quantity change
v[i][k]= c1*v[i][k] + c2*ffl_tmp1[nk]*ismi; deltae-= v[i][k]*v[i][k] /ismi /ismi;
deltae-= v[i][k]*v[i][k] /ismi /ismi; //flips the sign of the momentum (HARD FLIP)
if ( flip_int == 2) {
//flips the sign of the momentum (HARD FLIP) if (v[i][k]*ffl_tmp2[nk] < 0.0) v[i][k] = -v[i][k];
if ( flip_int == 2)
{
if (v[i][k]*ffl_tmp2[nk] < 0.0) v[i][k] = -v[i][k];
}
nk++;
}
} }
//rescale operation (RESCALE FLIP) nk++;
if (flip_int == 1) }
{
nk=0;
for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit)
{
factor = sqrt ((v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) /
(ffl_tmp2[nk]*ffl_tmp2[nk] + ffl_tmp2[nk+1]*ffl_tmp2[nk+1]
+ ffl_tmp2[nk+2]*ffl_tmp2[nk+2]));
for (int k = 0; k<3; k++)
{
v[i][k]= factor * ffl_tmp2[nk];
nk++;
}
}
} }
//rescale operation (RESCALE FLIP)
if (flip_int == 1) {
nk=0;
for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) {
factor = sqrt ((v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) /
(ffl_tmp2[nk]*ffl_tmp2[nk] + ffl_tmp2[nk+1]*ffl_tmp2[nk+1]
+ ffl_tmp2[nk+2]*ffl_tmp2[nk+2]));
for (int k = 0; k<3; k++) {
v[i][k]= factor * ffl_tmp2[nk];
nk++;
}
}
}
//soft flip operation (SOFT FLIP) //soft flip operation (SOFT FLIP)
if (flip_int == 3) if (flip_int == 3) {
{ nk=0;
nk=0; for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) {
for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) factor = v[i][0]*ffl_tmp2[nk] + v[i][1]*ffl_tmp2[nk+1] + v[i][2]*ffl_tmp2[nk+2];
{ if (factor < 0) {
factor = v[i][0]*ffl_tmp2[nk] + v[i][1]*ffl_tmp2[nk+1] + v[i][2]*ffl_tmp2[nk+2]; factor = factor / (ffl_tmp2[nk]*ffl_tmp2[nk] + ffl_tmp2[nk+1]*ffl_tmp2[nk+1]
if (factor < 0) + ffl_tmp2[nk+2]*ffl_tmp2[nk+2]);
{
factor = factor / (ffl_tmp2[nk]*ffl_tmp2[nk] + ffl_tmp2[nk+1]*ffl_tmp2[nk+1] for (int k = 0; k<3; k++) {
+ ffl_tmp2[nk+2]*ffl_tmp2[nk+2]); v[i][k] -= 2.0 * factor * ffl_tmp2[nk];
nk++;
for (int k = 0; k<3; k++) }
{ } else {
v[i][k] -= 2.0 * factor * ffl_tmp2[nk]; nk += 3;
nk++; }
}
}
else
nk += 3;
}
} }
energy += deltae*0.5*force->mvv2e; }
energy += deltae*0.5*force->mvv2e;
} }
void FixFFL::initial_integrate(int vflag) void FixFFL::initial_integrate(int vflag) {
{ double dtfm;
double dtfm;
// update v and x of atoms in group
double **x = atom->x;
double **v = atom->v;
double **f = atom->f;
double *rmass = atom->rmass;
double *mass = atom->mass;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
ffl_step--;
if (doffl && ffl_step<1) ffl_integrate();
if (rmass)
{
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
{
dtfm = dtf / rmass[i];
v[i][0] += dtfm * f[i][0];
v[i][1] += dtfm * f[i][1];
v[i][2] += dtfm * f[i][2];
x[i][0] += dtv * v[i][0];
x[i][1] += dtv * v[i][1];
x[i][2] += dtv * v[i][2];
}
} // update v and x of atoms in group
else double **x = atom->x;
{ double **v = atom->v;
for (int i = 0; i < nlocal; i++) double **f = atom->f;
if (mask[i] & groupbit) double *rmass = atom->rmass;
{ double *mass = atom->mass;
dtfm = dtf / mass[type[i]]; int *type = atom->type;
v[i][0] += dtfm * f[i][0]; int *mask = atom->mask;
v[i][1] += dtfm * f[i][1]; int nlocal = atom->nlocal;
v[i][2] += dtfm * f[i][2]; if (igroup == atom->firstgroup) nlocal = atom->nfirst;
x[i][0] += dtv * v[i][0];
x[i][1] += dtv * v[i][1]; ffl_step--;
x[i][2] += dtv * v[i][2]; if (doffl && ffl_step<1) ffl_integrate();
}
} if (rmass) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
dtfm = dtf / rmass[i];
v[i][0] += dtfm * f[i][0];
v[i][1] += dtfm * f[i][1];
v[i][2] += dtfm * f[i][2];
x[i][0] += dtv * v[i][0];
x[i][1] += dtv * v[i][1];
x[i][2] += dtv * v[i][2];
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
dtfm = dtf / mass[type[i]];
v[i][0] += dtfm * f[i][0];
v[i][1] += dtfm * f[i][1];
v[i][2] += dtfm * f[i][2];
x[i][0] += dtv * v[i][0];
x[i][1] += dtv * v[i][1];
x[i][2] += dtv * v[i][2];
}
}
} }
void FixFFL::final_integrate() void FixFFL::final_integrate() {
{ double dtfm;
double dtfm;
// update v of atoms in group
double **v = atom->v;
double **f = atom->f;
double *rmass = atom->rmass;
double *mass = atom->mass;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
if (rmass)
{
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
{
dtfm = dtf / rmass[i];
v[i][0] += dtfm * f[i][0];
v[i][1] += dtfm * f[i][1];
v[i][2] += dtfm * f[i][2];
}
} // update v of atoms in group
else
{
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
{
dtfm = dtf / mass[type[i]];
v[i][0] += dtfm * f[i][0];
v[i][1] += dtfm * f[i][1];
v[i][2] += dtfm * f[i][2];
}
}
if (doffl && ffl_step<1) double **v = atom->v;
{ double **f = atom->f;
ffl_integrate(); double *rmass = atom->rmass;
ffl_step = ffl_every; double *mass = atom->mass;
} int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
// Change the temperature for the next step if (rmass) {
double delta = update->ntimestep - update->beginstep; for (int i = 0; i < nlocal; i++)
delta /= update->endstep - update->beginstep; if (mask[i] & groupbit) {
t_target = t_start + delta * (t_stop - t_start); dtfm = dtf / rmass[i];
if (t_stop != t_start) v[i][0] += dtfm * f[i][0];
{ v[i][1] += dtfm * f[i][1];
// only updates if it is really necessary v[i][2] += dtfm * f[i][2];
init_ffl(); }
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
dtfm = dtf / mass[type[i]];
v[i][0] += dtfm * f[i][0];
v[i][1] += dtfm * f[i][1];
v[i][2] += dtfm * f[i][2];
}
}
if (doffl && ffl_step<1) {
ffl_integrate();
ffl_step = ffl_every;
}
// Change the temperature for the next step
double delta = update->ntimestep - update->beginstep;
delta /= update->endstep - update->beginstep;
t_target = t_start + delta * (t_stop - t_start);
if (t_stop != t_start) {
// only updates if it is really necessary
init_ffl();
}
} }
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
void FixFFL::initial_integrate_respa(int vflag, int ilevel, int iloop) void FixFFL::initial_integrate_respa(int vflag, int ilevel, int iloop) {
{ dtv = step_respa[ilevel];
dtv = step_respa[ilevel]; dtf = 0.5 * step_respa[ilevel] * force->ftm2v;
dtf = 0.5 * step_respa[ilevel] * force->ftm2v;
// innermost level - NVE update of v and x // innermost level - NVE update of v and x
// all other levels - NVE update of v // all other levels - NVE update of v
if (ilevel==nlevels_respa-1) ffl_integrate(); if (ilevel==nlevels_respa-1) ffl_integrate();
doffl=0; doffl=0;
if (ilevel == 0) initial_integrate(vflag); if (ilevel == 0) initial_integrate(vflag);
else else {
{ final_integrate();
final_integrate(); }
}
} }
void FixFFL::final_integrate_respa(int ilevel, int iloop) void FixFFL::final_integrate_respa(int ilevel, int iloop) {
{
dtv = step_respa[ilevel]; dtv = step_respa[ilevel];
dtf = 0.5 * step_respa[ilevel] * force->ftm2v; dtf = 0.5 * step_respa[ilevel] * force->ftm2v;
doffl=0; doffl=0;
final_integrate(); final_integrate();
if (ilevel==nlevels_respa-1) ffl_integrate(); if (ilevel==nlevels_respa-1) ffl_integrate();
} }
double FixFFL::compute_scalar() double FixFFL::compute_scalar() {
{
double energy_me = energy; double energy_me = energy;
double energy_all; double energy_all;
MPI_Allreduce(&energy_me,&energy_all,1,MPI_DOUBLE,MPI_SUM,world); MPI_Allreduce(&energy_me,&energy_all,1,MPI_DOUBLE,MPI_SUM,world);
return energy_all; return energy_all;
} }
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
extract thermostat properties extract thermostat properties
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */
void *FixFFL::extract(const char *str, int &dim) void *FixFFL::extract(const char *str, int &dim) {
{ dim = 0;
dim = 0; if (strcmp(str,"t_target") == 0) {
if (strcmp(str,"t_target") == 0) return &t_target;
{ }
return &t_target; return NULL;
}
return NULL;
} }
...@@ -487,32 +441,29 @@ void *FixFFL::extract(const char *str, int &dim) ...@@ -487,32 +441,29 @@ void *FixFFL::extract(const char *str, int &dim)
Called when a change to the target temperature is requested mid-run Called when a change to the target temperature is requested mid-run
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */
void FixFFL::reset_target(double t_new) void FixFFL::reset_target(double t_new) {
{
t_target = t_start = t_stop = t_new; t_target = t_start = t_stop = t_new;
} }
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
Called when a change to the timestep is requested mid-run Called when a change to the timestep is requested mid-run
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */
void FixFFL::reset_dt() void FixFFL::reset_dt() {
{ // set the time integration constants
// set the time integration constants dtv = update->dt;
dtv = update->dt; dtf = 0.5 * update->dt * (force->ftm2v);
dtf = 0.5 * update->dt * (force->ftm2v); init_ffl();
init_ffl();
} }
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
memory usage of local atom-based arrays memory usage of local atom-based arrays
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */
double FixFFL::memory_usage() double FixFFL::memory_usage() {
{ double bytes = atom->nmax*(3*2)*sizeof(double);
double bytes = atom->nmax*(3*2)*sizeof(double); return bytes;
return bytes;
} }
...@@ -520,13 +471,12 @@ double FixFFL::memory_usage() ...@@ -520,13 +471,12 @@ double FixFFL::memory_usage()
allocate local atom-based arrays allocate local atom-based arrays
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */
void FixFFL::grow_arrays(int nmax) void FixFFL::grow_arrays(int nmax) {
{ memory->grow(ffl_tmp1, nmax*3,"ffl:tmp1");
memory->grow(ffl_tmp1, nmax*3,"ffl:tmp1"); memory->grow(ffl_tmp2, nmax*3,"ffl:tmp2");
memory->grow(ffl_tmp2, nmax*3,"ffl:tmp2"); //zeroes out temporary buffers
//zeroes out temporary buffers for (int i=0; i< nmax*3; ++i) ffl_tmp1[i] = 0.0;
for (int i=0; i< nmax*3; ++i) ffl_tmp1[i] = 0.0; for (int i=0; i< nmax*3; ++i) ffl_tmp2[i] = 0.0;
for (int i=0; i< nmax*3; ++i) ffl_tmp2[i] = 0.0;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment