git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9896 f3b2605a-c512-4ea7-a41b-209d697bcdaa

This commit is contained in:
sjplimp
2013-05-23 17:34:29 +00:00
parent b1af45327d
commit e3b479a4cd
8 changed files with 39 additions and 17 deletions

View File

@ -46,7 +46,7 @@ FixDtReset::FixDtReset(LAMMPS *lmp, int narg, char **arg) :
time_depend = 1; time_depend = 1;
scalar_flag = 1; scalar_flag = 1;
vector_flag = 1; vector_flag = 1;
size_vector = 2; size_vector = 1;
global_freq = 1; global_freq = 1;
extscalar = 0; extscalar = 0;
extvector = 0; extvector = 0;
@ -89,7 +89,7 @@ FixDtReset::FixDtReset(LAMMPS *lmp, int narg, char **arg) :
// initializations // initializations
t_elapsed = t_laststep = 0.0; t_laststep = 0.0;
laststep = update->ntimestep; laststep = update->ntimestep;
} }
@ -98,7 +98,6 @@ FixDtReset::FixDtReset(LAMMPS *lmp, int narg, char **arg) :
int FixDtReset::setmask() int FixDtReset::setmask()
{ {
int mask = 0; int mask = 0;
mask |= INITIAL_INTEGRATE;
mask |= END_OF_STEP; mask |= END_OF_STEP;
return mask; return mask;
} }
@ -133,15 +132,6 @@ void FixDtReset::setup(int vflag)
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
void FixDtReset::initial_integrate(int vflag)
{
// calculate elapsed time based on previous reset timestep
t_elapsed = t_laststep + (update->ntimestep-laststep)*dt;
}
/* ---------------------------------------------------------------------- */
void FixDtReset::end_of_step() void FixDtReset::end_of_step()
{ {
double dtv,dtf,dtsq; double dtv,dtf,dtsq;
@ -190,9 +180,9 @@ void FixDtReset::end_of_step()
if (dt == update->dt) return; if (dt == update->dt) return;
t_elapsed = t_laststep += (update->ntimestep-laststep)*update->dt;
laststep = update->ntimestep; laststep = update->ntimestep;
update->update_time();
update->dt = dt; update->dt = dt;
if (respaflag) update->integrate->reset_dt(); if (respaflag) update->integrate->reset_dt();
if (force->pair) force->pair->reset_dt(); if (force->pair) force->pair->reset_dt();
@ -210,6 +200,5 @@ double FixDtReset::compute_scalar()
double FixDtReset::compute_vector(int n) double FixDtReset::compute_vector(int n)
{ {
if (n == 0) return t_elapsed;
return (double) laststep; return (double) laststep;
} }

View File

@ -31,7 +31,6 @@ class FixDtReset : public Fix {
int setmask(); int setmask();
void init(); void init();
void setup(int); void setup(int);
void initial_integrate(int);
void end_of_step(); void end_of_step();
double compute_scalar(); double compute_scalar();
double compute_vector(int); double compute_vector(int);
@ -41,7 +40,7 @@ class FixDtReset : public Fix {
int minbound,maxbound; int minbound,maxbound;
double tmin,tmax,xmax; double tmin,tmax,xmax;
double ftm2v; double ftm2v;
double dt,t_elapsed,t_laststep; double dt,t_laststep;
int respaflag; int respaflag;
}; };

View File

@ -499,6 +499,7 @@ void Respa::cleanup()
modify->post_run(); modify->post_run();
modify->delete_fix("RESPA"); modify->delete_fix("RESPA");
domain->box_too_small_check(); domain->box_too_small_check();
update->update_time();
} }
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */

View File

@ -45,7 +45,7 @@ using namespace MathConst;
// customize a new keyword by adding to this list: // customize a new keyword by adding to this list:
// step, elapsed, elaplong, dt, cpu, tpcpu, spcpu // step, elapsed, elaplong, dt, time, cpu, tpcpu, spcpu
// atoms, temp, press, pe, ke, etotal, enthalpy // atoms, temp, press, pe, ke, etotal, enthalpy
// evdwl, ecoul, epair, ebond, eangle, edihed, eimp, emol, elong, etail // evdwl, ecoul, epair, ebond, eangle, edihed, eimp, emol, elong, etail
// vol, lx, ly, lz, xlo, xhi, ylo, yhi, zlo, zhi, xy, xz, yz, xlat, ylat, zlat // vol, lx, ly, lz, xlo, xhi, ylo, yhi, zlo, zhi, xy, xz, yz, xlat, ylat, zlat
@ -647,6 +647,8 @@ void Thermo::parse_fields(char *str)
addfield("Elaplong",&Thermo::compute_elapsed_long,BIGINT); addfield("Elaplong",&Thermo::compute_elapsed_long,BIGINT);
} else if (strcmp(word,"dt") == 0) { } else if (strcmp(word,"dt") == 0) {
addfield("Dt",&Thermo::compute_dt,FLOAT); addfield("Dt",&Thermo::compute_dt,FLOAT);
} else if (strcmp(word,"time") == 0) {
addfield("Time",&Thermo::compute_time,FLOAT);
} else if (strcmp(word,"cpu") == 0) { } else if (strcmp(word,"cpu") == 0) {
addfield("CPU",&Thermo::compute_cpu,FLOAT); addfield("CPU",&Thermo::compute_cpu,FLOAT);
} else if (strcmp(word,"tpcpu") == 0) { } else if (strcmp(word,"tpcpu") == 0) {
@ -994,6 +996,9 @@ int Thermo::evaluate_keyword(char *word, double *answer)
} else if (strcmp(word,"dt") == 0) { } else if (strcmp(word,"dt") == 0) {
compute_dt(); compute_dt();
} else if (strcmp(word,"time") == 0) {
compute_time();
} else if (strcmp(word,"cpu") == 0) { } else if (strcmp(word,"cpu") == 0) {
if (update->whichflag == 0) if (update->whichflag == 0)
error->all(FLERR, error->all(FLERR,
@ -1447,6 +1452,13 @@ void Thermo::compute_dt()
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
void Thermo::compute_time()
{
dvalue = update->atime + (update->ntimestep-update->atimestep)*update->dt;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_cpu() void Thermo::compute_cpu()
{ {
if (firststep == 0) dvalue = 0.0; if (firststep == 0) dvalue = 0.0;

View File

@ -122,6 +122,7 @@ class Thermo : protected Pointers {
void compute_elapsed(); void compute_elapsed();
void compute_elapsed_long(); void compute_elapsed_long();
void compute_dt(); void compute_dt();
void compute_time();
void compute_cpu(); void compute_cpu();
void compute_tpcpu(); void compute_tpcpu();
void compute_spcpu(); void compute_spcpu();

View File

@ -38,6 +38,8 @@ Update::Update(LAMMPS *lmp) : Pointers(lmp)
char *str; char *str;
ntimestep = 0; ntimestep = 0;
atime = 0.0;
atimestep = 0;
first_update = 0; first_update = 0;
whichflag = 0; whichflag = 0;
@ -356,6 +358,7 @@ void Update::reset_timestep(int narg, char **arg)
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
reset timestep reset timestep
set atimestep to new timestep, so future update_time() calls will be correct
trigger reset of timestep for output and for fixes that require it trigger reset of timestep for output and for fixes that require it
do not allow any timestep-dependent fixes to be defined do not allow any timestep-dependent fixes to be defined
reset eflag/vflag global so nothing will think eng/virial are current reset eflag/vflag global so nothing will think eng/virial are current
@ -371,6 +374,8 @@ void Update::reset_timestep(bigint newstep)
if (ntimestep < 0) error->all(FLERR,"Timestep must be >= 0"); if (ntimestep < 0) error->all(FLERR,"Timestep must be >= 0");
if (ntimestep > MAXBIGINT) error->all(FLERR,"Too big a timestep"); if (ntimestep > MAXBIGINT) error->all(FLERR,"Too big a timestep");
atimestep = ntimestep;
output->reset_timestep(ntimestep); output->reset_timestep(ntimestep);
for (int i = 0; i < modify->nfix; i++) { for (int i = 0; i < modify->nfix; i++) {
@ -400,6 +405,17 @@ void Update::reset_timestep(bigint newstep)
// error->all(FLERR,"Cannot reset timestep with a dynamic region defined"); // error->all(FLERR,"Cannot reset timestep with a dynamic region defined");
} }
/* ----------------------------------------------------------------------
update elapsed simulation time
called at end of runs or when timestep size changes
------------------------------------------------------------------------- */
void Update::update_time()
{
atime += (ntimestep-atimestep) * dt;
atimestep = ntimestep;
}
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
memory usage of update and integrate/minimize memory usage of update and integrate/minimize
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */

View File

@ -25,6 +25,8 @@ class Update : protected Pointers {
bigint ntimestep; // current step (dynamics or min iterations) bigint ntimestep; // current step (dynamics or min iterations)
int nsteps; // # of steps to run (dynamics or min iter) int nsteps; // # of steps to run (dynamics or min iter)
int whichflag; // 0 for unset, 1 for dynamics, 2 for min int whichflag; // 0 for unset, 1 for dynamics, 2 for min
double atime; // simulation time at atime_step
bigint atimestep; // last timestep atime was updated
bigint firststep,laststep; // 1st & last step of this run bigint firststep,laststep; // 1st & last step of this run
bigint beginstep,endstep; // 1st and last step of multiple runs bigint beginstep,endstep; // 1st and last step of multiple runs
int first_update; // 0 before initial update, 1 after int first_update; // 0 before initial update, 1 after
@ -52,6 +54,7 @@ class Update : protected Pointers {
void create_minimize(int, char **); void create_minimize(int, char **);
void reset_timestep(int, char **); void reset_timestep(int, char **);
void reset_timestep(bigint); void reset_timestep(bigint);
void update_time();
bigint memory_usage(); bigint memory_usage();
private: private:

View File

@ -319,6 +319,7 @@ void Verlet::cleanup()
{ {
modify->post_run(); modify->post_run();
domain->box_too_small_check(); domain->box_too_small_check();
update->update_time();
} }
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------