From 1e9b21a8f81d725a71e58159d48c90ff3ffc9759 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Wed, 10 Oct 2007 23:17:58 +0000 Subject: [PATCH] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@1006 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/fix_ave_time.cpp | 48 +++++++++++++++++++++++++++++++++++++------- src/fix_ave_time.h | 5 +++-- 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/src/fix_ave_time.cpp b/src/fix_ave_time.cpp index d487ec6f2d..91d2047545 100644 --- a/src/fix_ave_time.cpp +++ b/src/fix_ave_time.cpp @@ -35,6 +35,8 @@ FixAveTime::FixAveTime(LAMMPS *lmp, int narg, char **arg) : { if (narg != 10) error->all("Illegal fix ave/time command"); + MPI_Comm_rank(world,&me); + nevery = atoi(arg[3]); nrepeat = atoi(arg[4]); nfreq = atoi(arg[5]); @@ -49,8 +51,8 @@ FixAveTime::FixAveTime(LAMMPS *lmp, int narg, char **arg) : int flag = atoi(arg[8]); - MPI_Comm_rank(world,&me); - if (me == 0) { + if (strcmp(arg[9],"NULL") == 0) fp = NULL; + else if (me == 0) { fp = fopen(arg[9],"w"); if (fp == NULL) { char str[128]; @@ -104,7 +106,7 @@ FixAveTime::FixAveTime(LAMMPS *lmp, int narg, char **arg) : // print header into file - if (me == 0) { + if (fp && me == 0) { if (which == COMPUTE) fprintf(fp,"Time-averaged data for fix %s, group %s, and compute %s\n", id,group->names[modify->compute[icompute]->igroup],id); @@ -126,6 +128,18 @@ FixAveTime::FixAveTime(LAMMPS *lmp, int narg, char **arg) : vector = new double[size_vector]; } + // enable this fix to produce a global scalar and/or vector + // initialize values to 0.0 since thermo may call them on first step + + if (sflag) scalar_flag = 1; + if (vflag) vector_flag = 1; + scalar_vector_freq = nfreq; + if (which == COMPUTE) extensive = modify->compute[icompute]->extensive; + else extensive = modify->fix[ifix]->extensive; + + scalar = 0.0; + for (int i = 0; i < size_vector; i++) vector[i] = 0.0; + // nvalid = next step on which end_of_step does something irepeat = 0; @@ -140,7 +154,7 @@ FixAveTime::FixAveTime(LAMMPS *lmp, int narg, char **arg) : FixAveTime::~FixAveTime() { delete [] id; - if (me == 0) fclose(fp); + if (fp && me == 0) fclose(fp); delete [] compute; delete [] vector; } @@ -237,12 +251,14 @@ void FixAveTime::end_of_step() if (irepeat == nrepeat) { double repeat = nrepeat; + if (sflag) scalar /= repeat; + if (vflag) for (i = 0; i < size_vector; i++) vector[i] /= repeat; - if (me == 0) { + if (fp && me == 0) { fprintf(fp,"%d",update->ntimestep); - if (sflag) fprintf(fp," %g",scalar/repeat); + if (sflag) fprintf(fp," %g",scalar); if (vflag) - for (i = 0; i < size_vector; i++) fprintf(fp," %g",vector[i]/repeat); + for (i = 0; i < size_vector; i++) fprintf(fp," %g",vector[i]); fprintf(fp,"\n"); fflush(fp); } @@ -251,3 +267,21 @@ void FixAveTime::end_of_step() nvalid = update->ntimestep+nfreq - (nrepeat-1)*nevery; } } + +/* ---------------------------------------------------------------------- + return scalar value +------------------------------------------------------------------------- */ + +double FixAveTime::compute_scalar() +{ + return scalar; +} + +/* ---------------------------------------------------------------------- + return Nth vector value +------------------------------------------------------------------------- */ + +double FixAveTime::compute_vector(int n) +{ + return vector[n]; +} diff --git a/src/fix_ave_time.h b/src/fix_ave_time.h index af96d59da7..22a1dd72d9 100644 --- a/src/fix_ave_time.h +++ b/src/fix_ave_time.h @@ -26,6 +26,8 @@ class FixAveTime : public Fix { int setmask(); void init(); void end_of_step(); + double compute_scalar(); + double compute_vector(int); private: int me; @@ -33,8 +35,7 @@ class FixAveTime : public Fix { char *id; FILE *fp; - int sflag,vflag; - int size_vector,nsum; + int sflag,vflag,nsum; double scalar,*vector; int ncompute; class Compute **compute;