modernize parsing of Velocities section of data files

This commit is contained in:
Axel Kohlmeyer
2021-12-30 19:02:52 -05:00
parent def1072f0f
commit 8d53cd1e5d
9 changed files with 41 additions and 45 deletions

View File

@ -1019,21 +1019,21 @@ void AtomVecHybridKokkos::data_atom(double *coord, imageint imagetmp,
unpack one line from Velocities section of data file unpack one line from Velocities section of data file
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */
void AtomVecHybridKokkos::data_vel(int m, char **values) void AtomVecHybridKokkos::data_vel(int m, const std::vector<std::string> &values)
{ {
atomKK->sync(Host,V_MASK); atomKK->sync(Host,V_MASK);
h_v(m,0) = utils::numeric(FLERR,values[0],true,lmp); int ivalue = 1;
h_v(m,1) = utils::numeric(FLERR,values[1],true,lmp); h_v(m,0) = utils::numeric(FLERR,values[ivalue++],true,lmp);
h_v(m,2) = utils::numeric(FLERR,values[2],true,lmp); h_v(m,1) = utils::numeric(FLERR,values[ivalue++],true,lmp);
h_v(m,2) = utils::numeric(FLERR,values[ivalue++],true,lmp);
atomKK->modified(Host,V_MASK); atomKK->modified(Host,V_MASK);
// each sub-style parses sub-style specific values // each sub-style parses sub-style specific values
int n = 3;
for (int k = 0; k < nstyles; k++) for (int k = 0; k < nstyles; k++)
n += styles[k]->data_vel_hybrid(m,&values[n]); ivalue += styles[k]->data_vel_hybrid(m,values,ivalue);
} }
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------

View File

@ -59,7 +59,7 @@ class AtomVecHybridKokkos : public AtomVecKokkos {
void create_atom(int, double *); void create_atom(int, double *);
void data_atom(double *, imageint, const std::vector<std::string> &); void data_atom(double *, imageint, const std::vector<std::string> &);
int data_atom_hybrid(int, const std::vector<std::string> &, int) {return 0;} int data_atom_hybrid(int, const std::vector<std::string> &, int) {return 0;}
void data_vel(int, char **); void data_vel(int, const std::vector<std::string> &);
void pack_data(double **); void pack_data(double **);
void write_data(FILE *, int, double **); void write_data(FILE *, int, double **);
void pack_vel(double **); void pack_vel(double **);

View File

@ -1016,12 +1016,13 @@ void AtomVecKokkos::unpack_reverse(int n, int *list, double *buf)
* unpack one line from Velocities section of data file * unpack one line from Velocities section of data file
* ------------------------------------------------------------------------- */ * ------------------------------------------------------------------------- */
void AtomVecKokkos::data_vel(int m, char **values) void AtomVecKokkos::data_vel(int m, const std::vector<std::string> &values)
{ {
double **v = atom->v; double **v = atom->v;
v[m][0] = utils::numeric(FLERR,values[0],true,lmp); int ivalue = 1;
v[m][1] = utils::numeric(FLERR,values[1],true,lmp); v[m][0] = utils::numeric(FLERR,values[ivalue++],true,lmp);
v[m][2] = utils::numeric(FLERR,values[2],true,lmp); v[m][1] = utils::numeric(FLERR,values[ivalue++],true,lmp);
v[m][2] = utils::numeric(FLERR,values[ivalue++],true,lmp);
atomKK->modified(Host,V_MASK); atomKK->modified(Host,V_MASK);
} }

View File

@ -44,7 +44,7 @@ class AtomVecKokkos : public AtomVec {
virtual void unpack_comm_vel(int, int, double *); virtual void unpack_comm_vel(int, int, double *);
virtual int pack_reverse(int, int, double *); virtual int pack_reverse(int, int, double *);
virtual void unpack_reverse(int, int *, double *); virtual void unpack_reverse(int, int *, double *);
virtual void data_vel(int, char **); virtual void data_vel(int, const std::vector<std::string> &);
virtual void pack_vel(double **); virtual void pack_vel(double **);
virtual void write_vel(FILE *, int, double **); virtual void write_vel(FILE *, int, double **);

View File

@ -2617,15 +2617,16 @@ int AtomVecSphereKokkos::data_atom_hybrid(int nlocal, const std::vector<std::str
unpack one line from Velocities section of data file unpack one line from Velocities section of data file
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */
void AtomVecSphereKokkos::data_vel(int m, char **values) void AtomVecSphereKokkos::data_vel(int m, const std::vector<std::string> &values)
{ {
int ivalue = 1;
atomKK->sync(Host,V_MASK|OMEGA_MASK); atomKK->sync(Host,V_MASK|OMEGA_MASK);
h_v(m,0) = utils::numeric(FLERR,values[0],true,lmp); h_v(m,0) = utils::numeric(FLERR,values[ivalue++],true,lmp);
h_v(m,1) = utils::numeric(FLERR,values[1],true,lmp); h_v(m,1) = utils::numeric(FLERR,values[ivalue++],true,lmp);
h_v(m,2) = utils::numeric(FLERR,values[2],true,lmp); h_v(m,2) = utils::numeric(FLERR,values[ivalue++],true,lmp);
h_omega(m,0) = utils::numeric(FLERR,values[3],true,lmp); h_omega(m,0) = utils::numeric(FLERR,values[ivalue++],true,lmp);
h_omega(m,1) = utils::numeric(FLERR,values[4],true,lmp); h_omega(m,1) = utils::numeric(FLERR,values[ivalue++],true,lmp);
h_omega(m,2) = utils::numeric(FLERR,values[5],true,lmp); h_omega(m,2) = utils::numeric(FLERR,values[ivalue++],true,lmp);
atomKK->modified(Host,V_MASK|OMEGA_MASK); atomKK->modified(Host,V_MASK|OMEGA_MASK);
} }
@ -2633,12 +2634,13 @@ void AtomVecSphereKokkos::data_vel(int m, char **values)
unpack hybrid quantities from one line in Velocities section of data file unpack hybrid quantities from one line in Velocities section of data file
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */
int AtomVecSphereKokkos::data_vel_hybrid(int m, char **values) int AtomVecSphereKokkos::data_vel_hybrid(int m, const std::vector<std::string> &values,
int offset)
{ {
atomKK->sync(Host,OMEGA_MASK); atomKK->sync(Host,OMEGA_MASK);
omega[m][0] = utils::numeric(FLERR,values[0],true,lmp); omega[m][0] = utils::numeric(FLERR,values[offset],true,lmp);
omega[m][1] = utils::numeric(FLERR,values[1],true,lmp); omega[m][1] = utils::numeric(FLERR,values[offset+1],true,lmp);
omega[m][2] = utils::numeric(FLERR,values[2],true,lmp); omega[m][2] = utils::numeric(FLERR,values[offset+2],true,lmp);
atomKK->modified(Host,OMEGA_MASK); atomKK->modified(Host,OMEGA_MASK);
return 3; return 3;
} }

View File

@ -60,8 +60,8 @@ class AtomVecSphereKokkos : public AtomVecKokkos {
void create_atom(int, double *); void create_atom(int, double *);
void data_atom(double *, imageint, const std::vector<std::string> &); void data_atom(double *, imageint, const std::vector<std::string> &);
int data_atom_hybrid(int, const std::vector<std::string> &, int); int data_atom_hybrid(int, const std::vector<std::string> &, int);
void data_vel(int, char **); void data_vel(int, const std::vector<std::string> &);
int data_vel_hybrid(int, char **); int data_vel_hybrid(int, const std::vector<std::string> &, int);
void pack_data(double **); void pack_data(double **);
int pack_data_hybrid(int, double *); int pack_data_hybrid(int, double *);
void write_data(FILE *, int, double **); void write_data(FILE *, int, double **);

View File

@ -1209,31 +1209,24 @@ void Atom::data_vels(int n, char *buf, tagint id_offset)
if (nwords != avec->size_data_vel) if (nwords != avec->size_data_vel)
error->all(FLERR,"Incorrect velocity format in data file"); error->all(FLERR,"Incorrect velocity format in data file");
char **values = new char*[nwords];
// loop over lines of atom velocities // loop over lines of atom velocities
// tokenize the line into values // tokenize the line into values
// if I own atom tag, unpack its values // if I own atom tag, unpack its values
for (int i = 0; i < n; i++) { for (int i = 0; i < n; i++) {
next = strchr(buf,'\n'); next = strchr(buf,'\n');
*next = '\0';
auto values = Tokenizer(utils::trim_comment(buf)).as_vector();
if (values.size() != nwords)
error->all(FLERR, "Incorrect atom format in data file: {}", utils::trim(buf));
for (j = 0; j < nwords; j++) { tagdata = utils::tnumeric(FLERR,values[0],false,lmp) + id_offset;
buf += strspn(buf," \t\n\r\f");
buf[strcspn(buf," \t\n\r\f")] = '\0';
values[j] = buf;
buf += strlen(buf)+1;
}
tagdata = ATOTAGINT(values[0]) + id_offset;
if (tagdata <= 0 || tagdata > map_tag_max) if (tagdata <= 0 || tagdata > map_tag_max)
error->one(FLERR,"Invalid atom ID in Velocities section of data file"); error->one(FLERR,"Invalid atom ID in Velocities section of data file");
if ((m = map(tagdata)) >= 0) avec->data_vel(m,&values[1]); if ((m = map(tagdata)) >= 0) avec->data_vel(m,values);
buf = next + 1; buf = next + 1;
} }
delete [] values;
} }
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------

View File

@ -1890,18 +1890,18 @@ void AtomVec::write_data(FILE *fp, int n, double **buf)
unpack one line from Velocities section of data file unpack one line from Velocities section of data file
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */
void AtomVec::data_vel(int ilocal, char **values) void AtomVec::data_vel(int ilocal, const std::vector<std::string> &values)
{ {
int m,n,datatype,cols; int m,n,datatype,cols;
void *pdata; void *pdata;
double **v = atom->v; double **v = atom->v;
v[ilocal][0] = utils::numeric(FLERR,values[0],true,lmp); int ivalue = 1;
v[ilocal][1] = utils::numeric(FLERR,values[1],true,lmp); v[ilocal][0] = utils::numeric(FLERR,values[ivalue++],true,lmp);
v[ilocal][2] = utils::numeric(FLERR,values[2],true,lmp); v[ilocal][1] = utils::numeric(FLERR,values[ivalue++],true,lmp);
v[ilocal][2] = utils::numeric(FLERR,values[ivalue++],true,lmp);
if (ndata_vel > 2) { if (ndata_vel > 2) {
int ivalue = 3;
for (n = 2; n < ndata_vel; n++) { for (n = 2; n < ndata_vel; n++) {
pdata = mdata_vel.pdata[n]; pdata = mdata_vel.pdata[n];
datatype = mdata_vel.datatype[n]; datatype = mdata_vel.datatype[n];

View File

@ -136,7 +136,7 @@ class AtomVec : protected Pointers {
virtual void pack_data_pre(int) {} virtual void pack_data_pre(int) {}
virtual void pack_data_post(int) {} virtual void pack_data_post(int) {}
virtual void data_vel(int, char **); virtual void data_vel(int, const std::vector<std::string> &);
virtual void pack_vel(double **); virtual void pack_vel(double **);
virtual void write_vel(FILE *, int, double **); virtual void write_vel(FILE *, int, double **);
@ -167,7 +167,7 @@ class AtomVec : protected Pointers {
virtual int pack_border_hybrid(int, int *, double *) { return 0; } virtual int pack_border_hybrid(int, int *, double *) { return 0; }
virtual int unpack_border_hybrid(int, int, double *) { return 0; } virtual int unpack_border_hybrid(int, int, double *) { return 0; }
virtual int data_atom_hybrid(int, const std::vector<std::string> &, int) { return 0; } virtual int data_atom_hybrid(int, const std::vector<std::string> &, int) { return 0; }
virtual int data_vel_hybrid(int, char **) { return 0; } virtual int data_vel_hybrid(int, const std::vector<std::string> &, int) { return 0; }
virtual int pack_data_hybrid(int, double *) { return 0; } virtual int pack_data_hybrid(int, double *) { return 0; }
virtual int write_data_hybrid(FILE *, double *) { return 0; } virtual int write_data_hybrid(FILE *, double *) { return 0; }
virtual int pack_vel_hybrid(int, double *) { return 0; } virtual int pack_vel_hybrid(int, double *) { return 0; }