add new api to access molecules.

This commit is contained in:
Axel Kohlmeyer
2022-08-13 15:34:48 -04:00
parent 0222da9f2b
commit 3c744772b8
2 changed files with 16 additions and 6 deletions

View File

@ -1900,6 +1900,18 @@ int Atom::find_molecule(char *id)
return -1; return -1;
} }
/* ----------------------------------------------------------------------
return vector of molecules which match template ID
------------------------------------------------------------------------- */
std::vector<Molecule *>Atom::get_molecule_by_id(const std::string &id)
{
std::vector<Molecule *> result;
for (int imol = 0; imol < nmolecule; ++imol)
if (id == molecules[imol]->id) result.push_back(molecules[imol]);
return result;
}
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
add info to current atom ilocal from molecule template onemol and its iatom add info to current atom ilocal from molecule template onemol and its iatom
offset = atom ID preceding IDs of atoms in this molecule offset = atom ID preceding IDs of atoms in this molecule
@ -1912,8 +1924,7 @@ void Atom::add_molecule_atom(Molecule *onemol, int iatom, int ilocal, tagint off
if (onemol->radiusflag && radius_flag) radius[ilocal] = onemol->radius[iatom]; if (onemol->radiusflag && radius_flag) radius[ilocal] = onemol->radius[iatom];
if (onemol->rmassflag && rmass_flag) rmass[ilocal] = onemol->rmass[iatom]; if (onemol->rmassflag && rmass_flag) rmass[ilocal] = onemol->rmass[iatom];
else if (rmass_flag) else if (rmass_flag)
rmass[ilocal] = 4.0*MY_PI/3.0 * rmass[ilocal] = 4.0*MY_PI/3.0 * radius[ilocal]*radius[ilocal]*radius[ilocal];
radius[ilocal]*radius[ilocal]*radius[ilocal];
if (onemol->bodyflag) { if (onemol->bodyflag) {
body[ilocal] = 0; // as if a body read from data file body[ilocal] = 0; // as if a body read from data file
onemol->avec_body->data_body(ilocal,onemol->nibody,onemol->ndbody, onemol->avec_body->data_body(ilocal,onemol->nibody,onemol->ndbody,
@ -1923,10 +1934,8 @@ void Atom::add_molecule_atom(Molecule *onemol, int iatom, int ilocal, tagint off
// initialize custom per-atom properties to zero if present // initialize custom per-atom properties to zero if present
for (int i = 0; i < nivector; ++i) for (int i = 0; i < nivector; ++i) ivector[i][ilocal] = 0;
ivector[i][ilocal] = 0; for (int i = 0; i < ndvector; ++i) dvector[i][ilocal] = 0.0;
for (int i = 0; i < ndvector; ++i)
dvector[i][ilocal] = 0.0;
for (int i = 0; i < niarray; ++i) for (int i = 0; i < niarray; ++i)
for (int j = 0; j < icols[i]; ++j) for (int j = 0; j < icols[i]; ++j)
iarray[i][ilocal][j] = 0; iarray[i][ilocal][j] = 0;

View File

@ -345,6 +345,7 @@ class Atom : protected Pointers {
void add_molecule(int, char **); void add_molecule(int, char **);
int find_molecule(char *); int find_molecule(char *);
std::vector<Molecule *>get_molecule_by_id(const std::string &);
void add_molecule_atom(class Molecule *, int, int, tagint); void add_molecule_atom(class Molecule *, int, int, tagint);
void first_reorder(); void first_reorder();