forked from lijiext/lammps
442 lines
10 KiB
C++
442 lines
10 KiB
C++
/* -*- c++ -*- ----------------------------------------------------------
|
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
|
http://lammps.sandia.gov, Sandia National Laboratories
|
|
Steve Plimpton, sjplimp@sandia.gov
|
|
|
|
Copyright (2003) Sandia Corporation. Under the terms of Contract
|
|
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
|
|
certain rights in this software. This software is distributed under
|
|
the GNU General Public License.
|
|
|
|
See the README file in the top-level LAMMPS directory.
|
|
------------------------------------------------------------------------- */
|
|
|
|
#ifndef LMP_ONE_MOLECULE_H
|
|
#define LMP_ONE_MOLECULE_H
|
|
|
|
#include "pointers.h"
|
|
|
|
namespace LAMMPS_NS {
|
|
|
|
class Molecule : protected Pointers {
|
|
public:
|
|
char *id; // template id of this molecule, same for all molecules in set
|
|
int nset; // if first in set, # of molecules in this set
|
|
// else 0 if not first in set
|
|
int last; // 1 if last molecule in set, else 0
|
|
|
|
// number of atoms,bonds,etc in molecule
|
|
// nibody,ndbody = # of integer/double fields in body
|
|
|
|
int natoms;
|
|
int nbonds,nangles,ndihedrals,nimpropers;
|
|
int ntypes;
|
|
int nbondtypes,nangletypes,ndihedraltypes,nimpropertypes;
|
|
int nibody,ndbody;
|
|
|
|
// max bond,angle,etc per atom
|
|
|
|
int bond_per_atom,angle_per_atom,dihedral_per_atom,improper_per_atom;
|
|
int maxspecial;
|
|
|
|
// 1 if attribute defined in file, 0 if not
|
|
|
|
int xflag,typeflag,qflag,radiusflag,rmassflag;
|
|
int bondflag,angleflag,dihedralflag,improperflag;
|
|
int nspecialflag,specialflag;
|
|
int shakeflag,shakeflagflag,shakeatomflag,shaketypeflag;
|
|
int bodyflag,ibodyflag,dbodyflag;
|
|
|
|
// 1 if attribute defined or computed, 0 if not
|
|
|
|
int centerflag,massflag,comflag,inertiaflag;
|
|
|
|
// 1 if molecule fields require atom IDs
|
|
|
|
int tag_require;
|
|
|
|
// attributes
|
|
|
|
double **x; // displacement of each atom from origin
|
|
int *type; // type of each atom
|
|
double *q; // charge on each atom
|
|
double *radius; // radius of each atom
|
|
double *rmass; // mass of each atom
|
|
|
|
int *num_bond; // bonds, angles, dihedrals, impropers for each atom
|
|
int **bond_type;
|
|
tagint **bond_atom;
|
|
|
|
int *num_angle;
|
|
int **angle_type;
|
|
tagint **angle_atom1,**angle_atom2,**angle_atom3;
|
|
|
|
int *num_dihedral;
|
|
int **dihedral_type;
|
|
tagint **dihedral_atom1,**dihedral_atom2,**dihedral_atom3,**dihedral_atom4;
|
|
|
|
int *num_improper;
|
|
int **improper_type;
|
|
tagint **improper_atom1,**improper_atom2,**improper_atom3,**improper_atom4;
|
|
|
|
int **nspecial;
|
|
tagint **special;
|
|
|
|
int *shake_flag;
|
|
tagint **shake_atom;
|
|
int **shake_type;
|
|
|
|
class AtomVecBody *avec_body;
|
|
int *ibodyparams; // integer and double body params
|
|
double *dbodyparams;
|
|
|
|
double center[3]; // geometric center of molecule
|
|
double masstotal; // total mass of molecule
|
|
double com[3]; // center of mass of molecule
|
|
double itensor[6]; // moments of inertia of molecule
|
|
double inertia[3]; // principal moments of inertia of molecule
|
|
double ex[3],ey[3],ez[3]; // principal axes of molecule in space coords
|
|
double quat[4]; // quaternion for orientation of molecule
|
|
|
|
double maxradius; // max radius of any atom in molecule
|
|
double molradius; // radius of molecule from geometric center
|
|
// including finite-size particle radii
|
|
int comatom; // index (1-Natom) of atom closest to COM
|
|
double maxextent; // furthest any atom in molecule is from comatom
|
|
|
|
double **dx; // displacement of each atom relative to center
|
|
double **dxcom; // displacement of each atom relative to COM
|
|
double **dxbody; // displacement of each atom relative to COM
|
|
// in body frame (diagonalized interia tensor)
|
|
|
|
double *quat_external; // orientation imposed by external class
|
|
// e.g. FixPour or CreateAtoms
|
|
|
|
Molecule(class LAMMPS *, int, char **, int &);
|
|
~Molecule();
|
|
void compute_center();
|
|
void compute_mass();
|
|
void compute_com();
|
|
void compute_inertia();
|
|
void check_attributes(int);
|
|
|
|
private:
|
|
int me;
|
|
FILE *fp;
|
|
int *count;
|
|
int toffset,boffset,aoffset,doffset,ioffset;
|
|
int autospecial;
|
|
double sizescale;
|
|
|
|
void read(int);
|
|
void coords(char *);
|
|
void types(char *);
|
|
void charges(char *);
|
|
void diameters(char *);
|
|
void masses(char *);
|
|
void bonds(int, char *);
|
|
void angles(int, char *);
|
|
void dihedrals(int, char *);
|
|
void impropers(int, char *);
|
|
void nspecial_read(int, char *);
|
|
void special_read(char *);
|
|
void special_generate();
|
|
void shakeflag_read(char *);
|
|
void shakeatom_read(char *);
|
|
void shaketype_read(char *);
|
|
void body(int, int, char *);
|
|
|
|
void initialize();
|
|
void allocate();
|
|
void deallocate();
|
|
|
|
void open(char *);
|
|
void readline(char *);
|
|
void parse_keyword(int, char *, char *);
|
|
void skip_lines(int, char *);
|
|
int parse(char *, char **, int);
|
|
|
|
// void print();
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
/* ERROR/WARNING messages:
|
|
|
|
E: Illegal ... command
|
|
|
|
Self-explanatory. Check the input script syntax and compare to the
|
|
documentation for the command. You can use -echo screen as a
|
|
command-line option when running LAMMPS to see the offending line.
|
|
|
|
E: Molecule template ID must be alphanumeric or underscore characters
|
|
|
|
Self-explanatory.
|
|
|
|
E: Insufficient Jacobi rotations for rigid molecule
|
|
|
|
Eigensolve for rigid body was not sufficiently accurate.
|
|
|
|
E: Unexpected end of molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Molecule file z center-of-mass must be 0.0 for 2d
|
|
|
|
Self-explanatory.
|
|
|
|
E: Molecule file requires atom style body
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid header in molecule file
|
|
|
|
UNDOCUMENTED
|
|
|
|
E: No count or invalid atom count in molecule file
|
|
|
|
The number of atoms must be specified.
|
|
|
|
E: Invalid bond count in molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid angle count in molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid dihedral count in molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid improper count in molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Molecule file has bonds but no nbonds setting
|
|
|
|
Self-explanatory.
|
|
|
|
E: Molecule file has angles but no nangles setting
|
|
|
|
Self-explanatory.
|
|
|
|
E: Molecule file has dihedrals but no ndihedrals setting
|
|
|
|
Self-explanatory.
|
|
|
|
E: Molecule file has impropers but no nimpropers setting
|
|
|
|
Self-explanatory.
|
|
|
|
E: Molecule file shake flags not before shake atoms
|
|
|
|
The order of the two sections is important.
|
|
|
|
E: Molecule file shake flags not before shake bonds
|
|
|
|
The order of the two sections is important.
|
|
|
|
E: Molecule file has body params but no setting for them
|
|
|
|
Self-explanatory.
|
|
|
|
E: Unknown section in molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Molecule file needs both Special Bond sections
|
|
|
|
Self-explanatory.
|
|
|
|
E: Molecule file has special flags but no bonds
|
|
|
|
Self-explanatory.
|
|
|
|
E: Molecule file shake info is incomplete
|
|
|
|
All 3 SHAKE sections are needed.
|
|
|
|
E: Molecule file has no Body Integers section
|
|
|
|
Self-explanatory.
|
|
|
|
E: Molecule file has no Body Doubles section
|
|
|
|
Self-explanatory.
|
|
|
|
E: Cannot auto-generate special bonds before simulation box is defined
|
|
|
|
UNDOCUMENTED
|
|
|
|
E: Molecule natoms must be 1 for body particle
|
|
|
|
Self-explanatory.
|
|
|
|
E: Molecule sizescale must be 1.0 for body particle
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid Coords section in molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Molecule file z coord must be 0.0 for 2d
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid Types section in molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid atom type in molecule file
|
|
|
|
Atom types must range from 1 to specified # of types.
|
|
|
|
E: Invalid Charges section in molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid Diameters section in molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid atom diameter in molecule file
|
|
|
|
Diameters must be >= 0.0.
|
|
|
|
E: Invalid Masses section in molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid atom mass in molecule file
|
|
|
|
Masses must be > 0.0.
|
|
|
|
E: Invalid Bonds section in molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid atom ID in Bonds section of molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid bond type in Bonds section of molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid Angles section in molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid atom ID in Angles section of molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid angle type in Angles section of molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid Dihedrals section in molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid atom ID in dihedrals section of molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid dihedral type in dihedrals section of molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid Impropers section in molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid atom ID in impropers section of molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid improper type in impropers section of molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid Special Bond Counts section in molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Molecule file special list does not match special count
|
|
|
|
The number of values in an atom's special list does not match count.
|
|
|
|
E: Invalid special atom index in molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Molecule auto special bond generation overflow
|
|
|
|
Counts exceed maxspecial setting for other atoms in system.
|
|
|
|
E: Invalid Shake Flags section in molecule file
|
|
|
|
UNDOCUMENTED
|
|
|
|
E: Invalid shake flag in molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid shake atom in molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid shake type data in molecule file
|
|
|
|
UNDOCUMENTED
|
|
|
|
E: Invalid shake bond type in molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Invalid shake angle type in molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Too few values in body section of molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
E: Too many values in body section of molecule file
|
|
|
|
Self-explanatory.
|
|
|
|
W: Molecule attributes do not match system attributes
|
|
|
|
An attribute is specified (e.g. diameter, charge) that is
|
|
not defined for the specified atom style.
|
|
|
|
E: Molecule topology type exceeds system topology type
|
|
|
|
The number of bond, angle, etc types in the molecule exceeds the
|
|
system setting. See the create_box command for how to specify these
|
|
values.
|
|
|
|
E: Molecule topology/atom exceeds system topology/atom
|
|
|
|
The number of bonds, angles, etc per-atom in the molecule exceeds the
|
|
system setting. See the create_box command for how to specify these
|
|
values.
|
|
|
|
W: Molecule has bond topology but no special bond settings
|
|
|
|
This means the bonded atoms will not be excluded in pair-wise
|
|
interactions.
|
|
|
|
E: Cannot open molecule file %s
|
|
|
|
The specified file cannot be opened. Check that the path and name are
|
|
correct.
|
|
|
|
*/
|