read_data: add atomtypelabels section

type labels for atoms
This commit is contained in:
Jacob Gissinger
2020-12-16 12:26:31 -05:00
parent 305607d019
commit e4c7ec6933
2 changed files with 34 additions and 2 deletions

View File

@ -52,7 +52,7 @@ using namespace LAMMPS_NS;
#define MAXBODY 32 // max # of lines in one body
// customize for new sections
#define NSECTIONS 25 // change when add to header::section_keywords
#define NSECTIONS 26 // change when add to header::section_keywords
enum{NONE,APPEND,VALUE,MERGE};
@ -440,6 +440,7 @@ void ReadData::command(int narg, char **arg)
else n = static_cast<int> (LB_FACTOR * atom->natoms / comm->nprocs);
atom->allocate_type_arrays();
atom->allocate_type_labels();
atom->deallocate_topology();
// allocate atom arrays to N, rounded up by AtomVec->DELTA
@ -712,6 +713,10 @@ void ReadData::command(int narg, char **arg)
if (firstpass) impropercoeffs(1);
else skip_lines(nimpropertypes);
} else if (strcmp(keyword,"Atom Type Labels") == 0) {
if (firstpass) atomtypelabels();
else skip_lines(ntypes);
} else error->all(FLERR,fmt::format("Unknown identifier in data file: {}",
keyword));
@ -939,7 +944,8 @@ void ReadData::header(int firstpass)
"Dihedral Coeffs","Improper Coeffs",
"BondBond Coeffs","BondAngle Coeffs","MiddleBondTorsion Coeffs",
"EndBondTorsion Coeffs","AngleTorsion Coeffs",
"AngleAngleTorsion Coeffs","BondBond13 Coeffs","AngleAngle Coeffs"};
"AngleAngleTorsion Coeffs","BondBond13 Coeffs","AngleAngle Coeffs",
"Atom Type Labels"};
// skip 1st line of file
@ -1901,6 +1907,31 @@ void ReadData::impropercoeffs(int which)
delete [] original;
}
/* ---------------------------------------------------------------------- */
void ReadData::atomtypelabels()
{
int n;
char *next;
char *buf = new char[ntypes*MAXLINE];
int eof = comm->read_lines_from_file(fp,ntypes,MAXLINE,buf);
if (eof) error->all(FLERR,"Unexpected end of data file");
char *typelabel = new char[MAXLINE];
for (int i = 0; i < ntypes; i++) {
next = strchr(buf,'\n');
*next = '\0';
sscanf(buf,"%*d %s",typelabel);
n = strlen(typelabel) + 1;
delete [] atom->atomtypelabel[i];
atom->atomtypelabel[i] = new char[n];
strcpy(atom->atomtypelabel[i],typelabel);
buf = next + 1;
}
delete [] typelabel;
}
/* ----------------------------------------------------------------------
read fix section, pass lines to fix to process
n = index of fix