multiple consistency improvements for restart files

- make defines and enumerators automatically consistent by moving them to a shared header file
- change VERSION_NUMERIC to FORMAT_REVISION (and corresponding function names)
- new class member revision in ReadRestart class to allow backward compatibility
- step current FORMAT_REVISION to 1
- write the magic string a the end of each restart
- add a check, that skips to the end of a file and checks for the magic string and then returns
  but do this only if FORMAT_REVISION is 1 or larger for backward compatibility
This commit is contained in:
Axel Kohlmeyer
2020-01-31 10:49:59 -05:00
parent 668feb22b5
commit c021a2d185
3 changed files with 57 additions and 67 deletions

View File

@ -36,34 +36,10 @@
#include "memory.h"
#include "error.h"
#include "lmp_restart.h"
using namespace LAMMPS_NS;
// same as read_restart.cpp
#define MAGIC_STRING "LammpS RestartT"
#define ENDIAN 0x0001
#define ENDIANSWAP 0x1000
#define VERSION_NUMERIC 0
enum{VERSION,SMALLINT,TAGINT,BIGINT,
UNITS,NTIMESTEP,DIMENSION,NPROCS,PROCGRID,
NEWTON_PAIR,NEWTON_BOND,
XPERIODIC,YPERIODIC,ZPERIODIC,BOUNDARY,
ATOM_STYLE,NATOMS,NTYPES,
NBONDS,NBONDTYPES,BOND_PER_ATOM,
NANGLES,NANGLETYPES,ANGLE_PER_ATOM,
NDIHEDRALS,NDIHEDRALTYPES,DIHEDRAL_PER_ATOM,
NIMPROPERS,NIMPROPERTYPES,IMPROPER_PER_ATOM,
TRICLINIC,BOXLO,BOXHI,XY,XZ,YZ,
SPECIAL_LJ,SPECIAL_COUL,
MASS,PAIR,BOND,ANGLE,DIHEDRAL,IMPROPER,
MULTIPROC,MPIIO,PROCSPERFILE,PERPROC,
IMAGEINT,BOUNDMIN,TIMESTEP,
ATOM_ID,ATOM_MAP_STYLE,ATOM_MAP_USER,ATOM_SORTFREQ,ATOM_SORTBIN,
COMM_MODE,COMM_CUTOFF,COMM_VEL,NO_PAIR,
EXTRA_BOND_PER_ATOM,EXTRA_ANGLE_PER_ATOM,EXTRA_DIHEDRAL_PER_ATOM,
EXTRA_IMPROPER_PER_ATOM,EXTRA_SPECIAL_PER_ATOM,ATOM_MAXSPECIAL};
/* ---------------------------------------------------------------------- */
WriteRestart::WriteRestart(LAMMPS *lmp) : Pointers(lmp)
@ -319,6 +295,7 @@ void WriteRestart::write(char *file)
if (multiproc) {
if (me == 0 && fp) {
magic_string();
fclose(fp);
fp = NULL;
}
@ -401,6 +378,7 @@ void WriteRestart::write(char *file)
if (mpiioflag) {
if (me == 0 && fp) {
magic_string();
fclose(fp);
fp = NULL;
}
@ -430,6 +408,7 @@ void WriteRestart::write(char *file)
write_double_vec(PERPROC,recv_size,buf);
}
magic_string();
fclose(fp);
fp = NULL;
@ -656,7 +635,7 @@ void WriteRestart::endian()
void WriteRestart::version_numeric()
{
int vn = VERSION_NUMERIC;
int vn = FORMAT_REVISION;
fwrite(&vn,sizeof(int),1,fp);
}