📄 particle.h
字号:
#ifndef __PARTICLE_H#define __PARTICLE_H/* 8 Oct 91 : added member to particle structure "rmin" for use by bond.c (bond.c calculates number of atoms with bond between rmin and cutoff).*//************************************************************************Defines************************************************************************/#define TRUE 1#define FALSE 0#define X 0#define Y 1#define Z 2#define NDIR 3#define WORD unsigned int#define BYTE unsigned char#define USHORT unsigned short int#define BOOLEAN int#define COORD double (*)[NDIR]/* Voight constants */#define XX 0#define YY 1#define ZZ 2#define YZ 3#define ZX 4#define XY 5#define ZY 3#define XZ 4#define YX 5#define NVOIGHT 6/* LENGTH OF TITLE STRING */#define NTITLESTR 81/* Different type of dynamic volume conditions */#define BMG_ISOTROPIC 0#define BMG_ORTHONORMAL 1#define BMG_MONOCLINIC 2/* Constant pressure algorithms */#define BMA_NONE 0#define BMA_ANDERSEN 1#define BMA_MODIFIED 2/* Repeating boundary geometries */#define BD_ORTHONORMAL 1 /* Standard box boundary */#define BD_MONOCLINIC 2 /* Parallel-piped boundary */#define BC_ARC 3 /* Curved "race track" boundary *//* Define number of derivatives in Gear algorithm */#define NDERIV 6/* Maximum number of type names */#define MAX_TYPE_NAMES 32/* Constants for using Selection bit fields *//* Number of reserved Selection bit fields */#define NUM_RESERVED_SELECTION_FIELDS 3/* Number of available set bit fields */#define MAX_SET 13/* Selection Bit Masks */#define MASK_SELECT 0x8000 #define MASK_FIXED 0x4000 #define MASK_CLAMP 0x2000/*************************************************************************Macros*************************************************************************/#define IS_SELECT(INDEX) (a->Selection[INDEX] & MASK_SELECT)#define REMOVE_SELECT(INDEX) {a->Selection[INDEX] &= ~MASK_SELECT;}#define APPLY_SELECT(INDEX) {a->Selection[INDEX] |= MASK_SELECT;}#define IS_FIXED(INDEX) (a->Selection[INDEX] & MASK_FIXED)#define REMOVE_FIXED(INDEX) {a->Selection[INDEX] &= ~MASK_FIXED;}#define APPLY_FIXED(INDEX) {a->Selection[INDEX] |= MASK_FIXED;}#define IS_CLAMP(INDEX) (a->Selection[INDEX] & MASK_CLAMP)#define REMOVE_CLAMP(INDEX) {a->Selection[INDEX] &= ~MASK_CLAMP;}#define APPLY_CLAMP(INDEX) {a->Selection[INDEX] |= MASK_CLAMP;}#define IS_SET(INDEX,SET) (a->Selection[INDEX] & (1 << (SET-1)))#define REMOVE_SET(INDEX,SET) {a->Selection[INDEX] &= ~(1 << (SET-1));}#define APPLY_SET(INDEX,SET) {a->Selection[INDEX] |= (1 << (SET-1));}/*************************************************************************Type Definitions*************************************************************************//* Particle constaint */typedef struct { double xd,yd,zd, xp,yp,zp; /* POINT AND DIRECTION */ int type; /* TYPE OF CONSTRAIN 0-line 1-Plane */ } Constraint_t;/*External vector and coordinate origin storageUsed for both external force and spring*/typedef struct { double Origin[NDIR]; double Vector[NDIR]; } ExternalVector_t;/* Particle Information */typedef struct { /* Particle Coordinate arrays */ double *cur, *ref, *ngh; /* current, origin, neighbor */ double *v, *f; /* velocity, force */ double *c2,*c3,*c4,*c5; /* gear integration values */ double *disp; /* Particle displacements */ /* Particle Misc Info */ double *mass; /* mass/atom */ double *eatom; /* energy/atom */ BYTE *type, *rtype; /* type */ /* Constraints */ Constraint_t **cons; /* constraint */ double CavityCenter[NDIR]; double CavityAxis [NDIR]; double CavitySpring; BOOLEAN UseCavity; /* Particle Status Arrays */ BYTE *tag;/* BYTE *sel, *tag, *set, *fix;*/ USHORT *Selection; /* Type Names (such as "Fe", "Na", etc) */ char *TypeNames[MAX_TYPE_NAMES]; double bcur [NDIR]; double bref [NDIR]; double trans[NDIR]; /* Array storing poiners to external force and spring info */ ExternalVector_t **SpringPtrList; ExternalVector_t **ForcePtrList; /* Array storing damping coefficient */ BOOLEAN UseDamp; double *Damp; /* Array for storing neighbor list */ int *NeighborListIndex; int *NeighborListLength; USHORT *NeighborList; int TotalNumNeighbors; /* Flags */ BOOLEAN boxflag, coordflag, selkeep; /* Neighbor List Flag */ BOOLEAN InvalidNeighborList; /* Neighbor Type Flag */ BOOLEAN CalcUniqueNeighbors; /* Surface Flag */ int surf[3]; /* Lattice Energies */ double ebath, etot, temp, epot, ekin; /* Average potential energy (used by cdmc.c) */ double epavg; long navg; /* Internal Stresses */ double Stress[NVOIGHT]; /* Variables needed for changing volume */ int BoxMotionGeometry; /* Either isotropic, othrnormal or monoclinic */ int BoxMotionAlgorithm; /* Either NONE, ANDERSEN, MODIFIED */ double Pressure; double EkinBox [NDIR]; double EpotBox; double BoxMotion[NDIR][NDERIV]; double BoxForce [NDIR]; double BoxMass [NDIR]; /* Repeating Boundary Geometry */ int BoundaryType; /* If using monoclinic boundary type, then need metric */ double BoundaryMetric [NDIR][NDIR]; double BoundaryInvMetric[NDIR][NDIR]; /* Number of particles */ int np; /* Number of neighbors */ int ng; /* Number of selected particles */ int nsel; /* Number of fixed particles */ int nfix; int nbin; char title[8][NTITLESTR]; long run, step; int ndim; double time, tempc, dtime, size, cutoff, rmin, vibp; double rdftable[100]; /* Arrays for xmdview */ WORD *DepthIndex; } Particle_t;#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -