diff --git a/src/DIPOLE/atom_vec_dipole.cpp b/src/DIPOLE/atom_vec_dipole.cpp index 7fd0bbc17f..5f4a8263bc 100644 --- a/src/DIPOLE/atom_vec_dipole.cpp +++ b/src/DIPOLE/atom_vec_dipole.cpp @@ -809,6 +809,66 @@ int AtomVecDipole::data_atom_hybrid(int nlocal, char **values) return 4; } +/* ---------------------------------------------------------------------- + pack atom info for data file including 3 image flags +------------------------------------------------------------------------- */ + +void AtomVecDipole::pack_data(double **buf) +{ + int nlocal = atom->nlocal; + for (int i = 0; i < nlocal; i++) { + buf[i][0] = tag[i]; + buf[i][1] = type[i]; + buf[i][2] = q[i]; + buf[i][3] = x[i][0]; + buf[i][4] = x[i][1]; + buf[i][5] = x[i][2]; + buf[i][6] = mu[i][0]; + buf[i][7] = mu[i][1]; + buf[i][8] = mu[i][2]; + buf[i][9] = (image[i] & IMGMASK) - IMGMAX; + buf[i][10] = (image[i] >> IMGBITS & IMGMASK) - IMGMAX; + buf[i][11] = (image[i] >> IMG2BITS) - IMGMAX; + } +} + +/* ---------------------------------------------------------------------- + pack hybrid atom info for data file +------------------------------------------------------------------------- */ + +int AtomVecDipole::pack_data_hybrid(int i, double *buf) +{ + buf[0] = q[i]; + buf[1] = mu[i][0]; + buf[2] = mu[i][1]; + buf[3] = mu[i][2]; + return 4; +} + +/* ---------------------------------------------------------------------- + write atom info to data file including 3 image flags +------------------------------------------------------------------------- */ + +void AtomVecDipole::write_data(FILE *fp, int n, double **buf) +{ + for (int i = 0; i < n; i++) + fprintf(fp,"%d %d %g %g %g %g %g %g %g %d %d %d\n", + (int) buf[i][0],(int) buf[i][1],buf[i][2], + buf[i][3],buf[i][4],buf[i][5], + buf[i][6],buf[i][7],buf[i][8], + (int) buf[i][9],(int) buf[i][10],(int) buf[i][11]); +} + +/* ---------------------------------------------------------------------- + write hybrid atom info to data file +------------------------------------------------------------------------- */ + +int AtomVecDipole::write_data_hybrid(FILE *fp, double *buf) +{ + fprintf(fp," %g %g %g %g",buf[0],buf[1],buf[2],buf[3]); + return 4; +} + /* ---------------------------------------------------------------------- return # of bytes of allocated memory ------------------------------------------------------------------------- */ diff --git a/src/DIPOLE/atom_vec_dipole.h b/src/DIPOLE/atom_vec_dipole.h index a465272e36..2ec8e754f6 100644 --- a/src/DIPOLE/atom_vec_dipole.h +++ b/src/DIPOLE/atom_vec_dipole.h @@ -52,6 +52,10 @@ class AtomVecDipole : public AtomVec { void create_atom(int, double *); void data_atom(double *, tagint, char **); int data_atom_hybrid(int, char **); + void pack_data(double **); + int pack_data_hybrid(int, double *); + void write_data(FILE *, int, double **); + int write_data_hybrid(FILE *, double *); bigint memory_usage(); private: diff --git a/src/MOLECULE/angle_harmonic.cpp b/src/MOLECULE/angle_harmonic.cpp index 87a733ba14..5bf1664e63 100644 --- a/src/MOLECULE/angle_harmonic.cpp +++ b/src/MOLECULE/angle_harmonic.cpp @@ -30,7 +30,10 @@ using namespace MathConst; /* ---------------------------------------------------------------------- */ -AngleHarmonic::AngleHarmonic(LAMMPS *lmp) : Angle(lmp) {} +AngleHarmonic::AngleHarmonic(LAMMPS *lmp) : Angle(lmp) +{ + writedata = 1; +} /* ---------------------------------------------------------------------- */ @@ -221,6 +224,16 @@ void AngleHarmonic::read_restart(FILE *fp) for (int i = 1; i <= atom->nangletypes; i++) setflag[i] = 1; } +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void AngleHarmonic::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->nangletypes; i++) + fprintf(fp,"%d %g %g\n",i,k[i],theta0[i]/MY_PI*180.0); +} + /* ---------------------------------------------------------------------- */ double AngleHarmonic::single(int type, int i1, int i2, int i3) diff --git a/src/MOLECULE/angle_harmonic.h b/src/MOLECULE/angle_harmonic.h index bc9cb7fdb2..bce6c2802e 100644 --- a/src/MOLECULE/angle_harmonic.h +++ b/src/MOLECULE/angle_harmonic.h @@ -34,6 +34,7 @@ class AngleHarmonic : public Angle { double equilibrium_angle(int); void write_restart(FILE *); void read_restart(FILE *); + void write_data(FILE *); double single(int, int, int, int); protected: diff --git a/src/MOLECULE/atom_vec_angle.cpp b/src/MOLECULE/atom_vec_angle.cpp index c8883399fc..f64150c708 100644 --- a/src/MOLECULE/atom_vec_angle.cpp +++ b/src/MOLECULE/atom_vec_angle.cpp @@ -812,6 +812,59 @@ int AtomVecAngle::data_atom_hybrid(int nlocal, char **values) return 1; } +/* ---------------------------------------------------------------------- + pack atom info for data file including 3 image flags +------------------------------------------------------------------------- */ + +void AtomVecAngle::pack_data(double **buf) +{ + int nlocal = atom->nlocal; + for (int i = 0; i < nlocal; i++) { + buf[i][0] = tag[i]; + buf[i][1] = molecule[i]; + buf[i][2] = type[i]; + buf[i][3] = x[i][0]; + buf[i][4] = x[i][1]; + buf[i][5] = x[i][2]; + buf[i][6] = (image[i] & IMGMASK) - IMGMAX; + buf[i][7] = (image[i] >> IMGBITS & IMGMASK) - IMGMAX; + buf[i][8] = (image[i] >> IMG2BITS) - IMGMAX; + } +} + +/* ---------------------------------------------------------------------- + pack hybrid atom info for data file +------------------------------------------------------------------------- */ + +int AtomVecAngle::pack_data_hybrid(int i, double *buf) +{ + buf[0] = molecule[i]; + return 1; +} + +/* ---------------------------------------------------------------------- + write atom info to data file including 3 image flags +------------------------------------------------------------------------- */ + +void AtomVecAngle::write_data(FILE *fp, int n, double **buf) +{ + for (int i = 0; i < n; i++) + fprintf(fp,"%d %d %d %g %g %g %d %d %d\n", + (int) buf[i][0],(int) buf[i][1],(int) buf[i][2], + buf[i][3],buf[i][4],buf[i][5], + (int) buf[i][6],(int) buf[i][7],(int) buf[i][8]); +} + +/* ---------------------------------------------------------------------- + write hybrid atom info to data file +------------------------------------------------------------------------- */ + +int AtomVecAngle::write_data_hybrid(FILE *fp, double *buf) +{ + fprintf(fp," %d",(int) buf[0]); + return 1; +} + /* ---------------------------------------------------------------------- return # of bytes of allocated memory ------------------------------------------------------------------------- */ diff --git a/src/MOLECULE/atom_vec_angle.h b/src/MOLECULE/atom_vec_angle.h index 3300106fdf..a1d33933f6 100644 --- a/src/MOLECULE/atom_vec_angle.h +++ b/src/MOLECULE/atom_vec_angle.h @@ -51,6 +51,10 @@ class AtomVecAngle : public AtomVec { void create_atom(int, double *); void data_atom(double *, tagint, char **); int data_atom_hybrid(int, char **); + void pack_data(double **); + int pack_data_hybrid(int, double *); + void write_data(FILE *, int, double **); + int write_data_hybrid(FILE *, double *); bigint memory_usage(); protected: diff --git a/src/MOLECULE/atom_vec_bond.cpp b/src/MOLECULE/atom_vec_bond.cpp index ee02bec5c5..36c1c691bc 100644 --- a/src/MOLECULE/atom_vec_bond.cpp +++ b/src/MOLECULE/atom_vec_bond.cpp @@ -756,6 +756,59 @@ int AtomVecBond::data_atom_hybrid(int nlocal, char **values) return 1; } +/* ---------------------------------------------------------------------- + pack atom info for data file including 3 image flags +------------------------------------------------------------------------- */ + +void AtomVecBond::pack_data(double **buf) +{ + int nlocal = atom->nlocal; + for (int i = 0; i < nlocal; i++) { + buf[i][0] = tag[i]; + buf[i][1] = molecule[i]; + buf[i][2] = type[i]; + buf[i][3] = x[i][0]; + buf[i][4] = x[i][1]; + buf[i][5] = x[i][2]; + buf[i][6] = (image[i] & IMGMASK) - IMGMAX; + buf[i][7] = (image[i] >> IMGBITS & IMGMASK) - IMGMAX; + buf[i][8] = (image[i] >> IMG2BITS) - IMGMAX; + } +} + +/* ---------------------------------------------------------------------- + pack hybrid atom info for data file +------------------------------------------------------------------------- */ + +int AtomVecBond::pack_data_hybrid(int i, double *buf) +{ + buf[0] = molecule[i]; + return 1; +} + +/* ---------------------------------------------------------------------- + write atom info to data file including 3 image flags +------------------------------------------------------------------------- */ + +void AtomVecBond::write_data(FILE *fp, int n, double **buf) +{ + for (int i = 0; i < n; i++) + fprintf(fp,"%d %d %d %g %g %g %d %d %d\n", + (int) buf[i][0],(int) buf[i][1],(int) buf[i][2], + buf[i][3],buf[i][4],buf[i][5], + (int) buf[i][6],(int) buf[i][7],(int) buf[i][8]); +} + +/* ---------------------------------------------------------------------- + write hybrid atom info to data file +------------------------------------------------------------------------- */ + +int AtomVecBond::write_data_hybrid(FILE *fp, double *buf) +{ + fprintf(fp," %d",(int) buf[0]); + return 1; +} + /* ---------------------------------------------------------------------- return # of bytes of allocated memory ------------------------------------------------------------------------- */ diff --git a/src/MOLECULE/atom_vec_bond.h b/src/MOLECULE/atom_vec_bond.h index c94aec1eb4..f6d7c0c67a 100644 --- a/src/MOLECULE/atom_vec_bond.h +++ b/src/MOLECULE/atom_vec_bond.h @@ -50,6 +50,10 @@ class AtomVecBond : public AtomVec { void create_atom(int, double *); void data_atom(double *, tagint, char **); int data_atom_hybrid(int, char **); + void pack_data(double **); + int pack_data_hybrid(int, double *); + void write_data(FILE *, int, double **); + int write_data_hybrid(FILE *, double *); bigint memory_usage(); private: diff --git a/src/MOLECULE/atom_vec_full.cpp b/src/MOLECULE/atom_vec_full.cpp index f48c08121c..155b9e804b 100644 --- a/src/MOLECULE/atom_vec_full.cpp +++ b/src/MOLECULE/atom_vec_full.cpp @@ -968,6 +968,61 @@ int AtomVecFull::data_atom_hybrid(int nlocal, char **values) return 2; } +/* ---------------------------------------------------------------------- + pack atom info for data file including 3 image flags +------------------------------------------------------------------------- */ + +void AtomVecFull::pack_data(double **buf) +{ + int nlocal = atom->nlocal; + for (int i = 0; i < nlocal; i++) { + buf[i][0] = tag[i]; + buf[i][1] = molecule[i]; + buf[i][2] = type[i]; + buf[i][3] = q[i]; + buf[i][4] = x[i][0]; + buf[i][5] = x[i][1]; + buf[i][6] = x[i][2]; + buf[i][7] = (image[i] & IMGMASK) - IMGMAX; + buf[i][8] = (image[i] >> IMGBITS & IMGMASK) - IMGMAX; + buf[i][9] = (image[i] >> IMG2BITS) - IMGMAX; + } +} + +/* ---------------------------------------------------------------------- + pack hybrid atom info for data file +------------------------------------------------------------------------- */ + +int AtomVecFull::pack_data_hybrid(int i, double *buf) +{ + buf[0] = molecule[i]; + buf[1] = q[i]; + return 2; +} + +/* ---------------------------------------------------------------------- + write atom info to data file including 3 image flags +------------------------------------------------------------------------- */ + +void AtomVecFull::write_data(FILE *fp, int n, double **buf) +{ + for (int i = 0; i < n; i++) + fprintf(fp,"%d %d %d %g %g %g %g %d %d %d\n", + (int) buf[i][0],(int) buf[i][1],(int) buf[i][2], + buf[i][3],buf[i][4],buf[i][5],buf[i][6], + (int) buf[i][7],(int) buf[i][8],(int) buf[i][9]); +} + +/* ---------------------------------------------------------------------- + write hybrid atom info to data file +------------------------------------------------------------------------- */ + +int AtomVecFull::write_data_hybrid(FILE *fp, double *buf) +{ + fprintf(fp," %d %g",(int) buf[0],buf[1]); + return 2; +} + /* ---------------------------------------------------------------------- return # of bytes of allocated memory ------------------------------------------------------------------------- */ diff --git a/src/MOLECULE/atom_vec_full.h b/src/MOLECULE/atom_vec_full.h index d14871271a..89af4f4527 100644 --- a/src/MOLECULE/atom_vec_full.h +++ b/src/MOLECULE/atom_vec_full.h @@ -51,6 +51,10 @@ class AtomVecFull : public AtomVec { void create_atom(int, double *); void data_atom(double *, tagint, char **); int data_atom_hybrid(int, char **); + void pack_data(double **); + int pack_data_hybrid(int, double *); + void write_data(FILE *, int, double **); + int write_data_hybrid(FILE *, double *); bigint memory_usage(); protected: diff --git a/src/MOLECULE/atom_vec_molecular.cpp b/src/MOLECULE/atom_vec_molecular.cpp index 5dd00d5585..2cbed3fc3f 100644 --- a/src/MOLECULE/atom_vec_molecular.cpp +++ b/src/MOLECULE/atom_vec_molecular.cpp @@ -948,6 +948,59 @@ int AtomVecMolecular::data_atom_hybrid(int nlocal, char **values) return 1; } +/* ---------------------------------------------------------------------- + pack atom info for data file including 3 image flags +------------------------------------------------------------------------- */ + +void AtomVecMolecular::pack_data(double **buf) +{ + int nlocal = atom->nlocal; + for (int i = 0; i < nlocal; i++) { + buf[i][0] = tag[i]; + buf[i][1] = molecule[i]; + buf[i][2] = type[i]; + buf[i][3] = x[i][0]; + buf[i][4] = x[i][1]; + buf[i][5] = x[i][2]; + buf[i][6] = (image[i] & IMGMASK) - IMGMAX; + buf[i][7] = (image[i] >> IMGBITS & IMGMASK) - IMGMAX; + buf[i][8] = (image[i] >> IMG2BITS) - IMGMAX; + } +} + +/* ---------------------------------------------------------------------- + pack hybrid atom info for data file +------------------------------------------------------------------------- */ + +int AtomVecMolecular::pack_data_hybrid(int i, double *buf) +{ + buf[0] = molecule[i]; + return 1; +} + +/* ---------------------------------------------------------------------- + write atom info to data file including 3 image flags +------------------------------------------------------------------------- */ + +void AtomVecMolecular::write_data(FILE *fp, int n, double **buf) +{ + for (int i = 0; i < n; i++) + fprintf(fp,"%d %d %d %g %g %g %d %d %d\n", + (int) buf[i][0],(int) buf[i][1],(int) buf[i][2], + buf[i][3],buf[i][4],buf[i][5], + (int) buf[i][6],(int) buf[i][7],(int) buf[i][8]); +} + +/* ---------------------------------------------------------------------- + write hybrid atom info to data file +------------------------------------------------------------------------- */ + +int AtomVecMolecular::write_data_hybrid(FILE *fp, double *buf) +{ + fprintf(fp," %d",(int) buf[0]); + return 1; +} + /* ---------------------------------------------------------------------- return # of bytes of allocated memory ------------------------------------------------------------------------- */ diff --git a/src/MOLECULE/atom_vec_molecular.h b/src/MOLECULE/atom_vec_molecular.h index 9ba6744970..751f70d66f 100644 --- a/src/MOLECULE/atom_vec_molecular.h +++ b/src/MOLECULE/atom_vec_molecular.h @@ -50,6 +50,10 @@ class AtomVecMolecular : public AtomVec { void create_atom(int, double *); void data_atom(double *, tagint, char **); int data_atom_hybrid(int, char **); + void pack_data(double **); + int pack_data_hybrid(int, double *); + void write_data(FILE *, int, double **); + int write_data_hybrid(FILE *, double *); bigint memory_usage(); private: diff --git a/src/MOLECULE/bond_fene.cpp b/src/MOLECULE/bond_fene.cpp index d70a76734e..61efe5908c 100644 --- a/src/MOLECULE/bond_fene.cpp +++ b/src/MOLECULE/bond_fene.cpp @@ -29,6 +29,7 @@ using namespace LAMMPS_NS; BondFENE::BondFENE(LAMMPS *lmp) : Bond(lmp) { + writedata = 1; TWO_1_3 = pow(2.0,(1.0/3.0)); } @@ -229,6 +230,16 @@ void BondFENE::read_restart(FILE *fp) for (int i = 1; i <= atom->nbondtypes; i++) setflag[i] = 1; } +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void BondFENE::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->nbondtypes; i++) + fprintf(fp,"%d %g %g %g %g\n",i,k[i],r0[i],epsilon[i],sigma[i]); +} + /* ---------------------------------------------------------------------- */ double BondFENE::single(int type, double rsq, int i, int j, diff --git a/src/MOLECULE/bond_fene.h b/src/MOLECULE/bond_fene.h index 34c9e37db4..9b12f3a09b 100644 --- a/src/MOLECULE/bond_fene.h +++ b/src/MOLECULE/bond_fene.h @@ -35,6 +35,7 @@ class BondFENE : public Bond { double equilibrium_distance(int); void write_restart(FILE *); void read_restart(FILE *); + void write_data(FILE *); double single(int, double, int, int, double &); protected: diff --git a/src/MOLECULE/dihedral_harmonic.cpp b/src/MOLECULE/dihedral_harmonic.cpp index 6f2e887f74..f384bb7459 100644 --- a/src/MOLECULE/dihedral_harmonic.cpp +++ b/src/MOLECULE/dihedral_harmonic.cpp @@ -36,7 +36,10 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -DihedralHarmonic::DihedralHarmonic(LAMMPS *lmp) : Dihedral(lmp) {} +DihedralHarmonic::DihedralHarmonic(LAMMPS *lmp) : Dihedral(lmp) +{ + writedata = 1; +} /* ---------------------------------------------------------------------- */ @@ -345,3 +348,14 @@ void DihedralHarmonic::read_restart(FILE *fp) } } } + +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void DihedralHarmonic::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->ndihedraltypes; i++) + fprintf(fp,"%d %g %d %d\n",i,k[i],sign[i],multiplicity[i]); +} + diff --git a/src/MOLECULE/dihedral_harmonic.h b/src/MOLECULE/dihedral_harmonic.h index 195bd1b357..69d4fb22cd 100644 --- a/src/MOLECULE/dihedral_harmonic.h +++ b/src/MOLECULE/dihedral_harmonic.h @@ -33,6 +33,7 @@ class DihedralHarmonic : public Dihedral { void coeff(int, char **); void write_restart(FILE *); void read_restart(FILE *); + void write_data(FILE *); protected: double *k,*cos_shift,*sin_shift; diff --git a/src/MOLECULE/improper_harmonic.cpp b/src/MOLECULE/improper_harmonic.cpp index da6f50bd84..cbf5563c53 100644 --- a/src/MOLECULE/improper_harmonic.cpp +++ b/src/MOLECULE/improper_harmonic.cpp @@ -34,7 +34,10 @@ using namespace MathConst; /* ---------------------------------------------------------------------- */ -ImproperHarmonic::ImproperHarmonic(LAMMPS *lmp) : Improper(lmp) {} +ImproperHarmonic::ImproperHarmonic(LAMMPS *lmp) : Improper(lmp) +{ + writedata = 1; +} /* ---------------------------------------------------------------------- */ @@ -282,3 +285,13 @@ void ImproperHarmonic::read_restart(FILE *fp) for (int i = 1; i <= atom->nimpropertypes; i++) setflag[i] = 1; } + +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void ImproperHarmonic::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->nimpropertypes; i++) + fprintf(fp,"%d %g %g\n",i,k[i],chi[i]/MY_PI*180.0); +} diff --git a/src/MOLECULE/improper_harmonic.h b/src/MOLECULE/improper_harmonic.h index 621582edff..b8897e66ac 100644 --- a/src/MOLECULE/improper_harmonic.h +++ b/src/MOLECULE/improper_harmonic.h @@ -33,6 +33,7 @@ class ImproperHarmonic : public Improper { void coeff(int, char **); void write_restart(FILE *); void read_restart(FILE *); + void write_data(FILE *); protected: double *k,*chi; diff --git a/src/PERI/atom_vec_peri.cpp b/src/PERI/atom_vec_peri.cpp index f1c1c790bf..4e1137a65d 100644 --- a/src/PERI/atom_vec_peri.cpp +++ b/src/PERI/atom_vec_peri.cpp @@ -789,7 +789,6 @@ void AtomVecPeri::data_atom(double *coord, tagint imagetmp, char **values) atom->nlocal++; } - /* ---------------------------------------------------------------------- unpack hybrid quantities from one line in Atoms section of data file initialize other atom quantities for this sub-style @@ -809,6 +808,62 @@ int AtomVecPeri::data_atom_hybrid(int nlocal, char **values) return 2; } +/* ---------------------------------------------------------------------- + pack atom info for data file including 3 image flags +------------------------------------------------------------------------- */ + +void AtomVecPeri::pack_data(double **buf) +{ + int nlocal = atom->nlocal; + for (int i = 0; i < nlocal; i++) { + buf[i][0] = tag[i]; + buf[i][1] = type[i]; + buf[i][2] = vfrac[i]; + buf[i][3] = rmass[i]; + buf[i][4] = x[i][0]; + buf[i][5] = x[i][1]; + buf[i][6] = x[i][2]; + buf[i][7] = (image[i] & IMGMASK) - IMGMAX; + buf[i][8] = (image[i] >> IMGBITS & IMGMASK) - IMGMAX; + buf[i][9] = (image[i] >> IMG2BITS) - IMGMAX; + } +} + +/* ---------------------------------------------------------------------- + pack hybrid atom info for data file +------------------------------------------------------------------------- */ + +int AtomVecPeri::pack_data_hybrid(int i, double *buf) +{ + buf[0] = vfrac[i]; + buf[1] = rmass[i]; + return 2; +} + +/* ---------------------------------------------------------------------- + write atom info to data file including 3 image flags +------------------------------------------------------------------------- */ + +void AtomVecPeri::write_data(FILE *fp, int n, double **buf) +{ + for (int i = 0; i < n; i++) + fprintf(fp,"%d %d %g %g %g %g %g %d %d %d\n", + (int) buf[i][0],(int) buf[i][1], + buf[i][2],buf[i][3], + buf[i][4],buf[i][5],buf[i][6], + (int) buf[i][7],(int) buf[i][8],(int) buf[i][9]); +} + +/* ---------------------------------------------------------------------- + write hybrid atom info to data file +------------------------------------------------------------------------- */ + +int AtomVecPeri::write_data_hybrid(FILE *fp, double *buf) +{ + fprintf(fp," %g %g",buf[0],buf[1]); + return 2; +} + /* ---------------------------------------------------------------------- return # of bytes of allocated memory ------------------------------------------------------------------------- */ diff --git a/src/PERI/atom_vec_peri.h b/src/PERI/atom_vec_peri.h index 9633540b95..172595f884 100755 --- a/src/PERI/atom_vec_peri.h +++ b/src/PERI/atom_vec_peri.h @@ -52,6 +52,10 @@ class AtomVecPeri : public AtomVec { void create_atom(int, double *); void data_atom(double *, tagint, char **); int data_atom_hybrid(int, char **); + void pack_data(double **); + int pack_data_hybrid(int, double *); + void write_data(FILE *, int, double **); + int write_data_hybrid(FILE *, double *); bigint memory_usage(); private: