00001
00002
00003
00004
00011 #ifndef DEFN_H
00012 #define DEFN_H
00013
00014 #ifdef __cplusplus
00015 extern "C" {
00016 #endif
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #define FORCE_SHELLMAX 3
00027
00028
00029 #define FORCE_NBRLISTLEN \
00030 ( (2*FORCE_SHELLMAX + 1)*(2*FORCE_SHELLMAX + 1)*(2*FORCE_SHELLMAX + 1) )
00031
00032 typedef struct ForceCell_t {
00033 int32 head;
00034 int32 cnt;
00035 int32 nnbrs;
00036
00037 int32 nbr[FORCE_NBRLISTLEN/2 + 1];
00038
00039
00040 char offset[FORCE_NBRLISTLEN/2 + 1];
00041
00042 } ForceCell;
00043
00044
00045 typedef struct ForcePairlist_t {
00046 int32 *index;
00047 char *offset;
00048 int32 len;
00049 int32 max;
00050 } ForcePairlist;
00051
00052
00053 typedef struct ForceVdwparam_t {
00054 double a;
00055 double b;
00056 double a14;
00057 double b14;
00058 double rmin2;
00059 } ForceVdwparam;
00060
00061
00062
00063 typedef struct ForceBucksafe_t {
00064 double a;
00065 double b;
00066 double rinner2;
00067 } ForceBucksafe;
00068
00069
00070 enum ForceBoundary_t {
00071 FORCE_NONPERIODIC = 0x000,
00072 FORCE_X_PERIODIC = 0x001,
00073 FORCE_Y_PERIODIC = 0x002,
00074 FORCE_Z_PERIODIC = 0x004,
00075 FORCE_PERIODIC = (FORCE_X_PERIODIC | FORCE_Y_PERIODIC | FORCE_Z_PERIODIC)
00077 };
00078
00079
00080 enum ForceIndex_t {
00081 FORCE_INDEX_ASET = 0x001,
00082 FORCE_INDEX_BSET = 0x002,
00083 FORCE_INDEX_BOND = 0x004,
00085 FORCE_INDEX_ANGLE = 0x008,
00087 FORCE_INDEX_DIHED = 0x010,
00089 FORCE_INDEX_IMPR = 0x020,
00091 FORCE_INDEX_BRES = 0x040,
00092 FORCE_INDEX_TOTAL = 0x080
00093 };
00094
00095
00096 enum ForceVirial_t {
00097 FORCE_VIRIAL_XX = 0,
00098 FORCE_VIRIAL_XY,
00099 FORCE_VIRIAL_XZ,
00100 FORCE_VIRIAL_YX,
00101 FORCE_VIRIAL_YY,
00102 FORCE_VIRIAL_YZ,
00103 FORCE_VIRIAL_ZX,
00104 FORCE_VIRIAL_ZY,
00105 FORCE_VIRIAL_ZZ
00106 };
00107
00108
00111 struct Force_t {
00112 ForceParam *param;
00113 ForceSelect *select;
00114 ForceDomain *domain;
00116
00117 int32 *idmap;
00120 int32 *mapnb;
00125 int32 *atom_bond_sel;
00126 int32 *atom_angle_sel;
00127 int32 *atom_dihed_sel;
00128 int32 *atom_impr_sel;
00129 int32 *abset_sel;
00130 int32 *total_sel;
00132 int32 atom_bond_sel_len;
00133 int32 atom_angle_sel_len;
00134 int32 atom_dihed_sel_len;
00135 int32 atom_impr_sel_len;
00136 int32 abset_sel_len;
00137 int32 total_sel_len;
00139 int32 is_alloc_sel;
00141
00142 double u_buffer;
00143 double *e_buffer;
00146 MD_Dvec *f_buffer;
00148
00149 MD_Dvec *trpos;
00153 MD_Dvec *poswrap;
00158
00159 double elec_const;
00160 double elec_cutoff2;
00161 double inv_elec_cutoff2;
00162 double ewald_grad_coef;
00163 double vdw_cutoff2;
00164 double switch_dist2;
00165 double inv_denom_switch;
00167 ForceVdwparam *vdwparam;
00170 ForceBucksafe *bucksafe;
00174
00175 MD_Dvec v1, v2, v3;
00176 double lv1, lv2, lv3;
00177 MD_Dvec nv1, nv2, nv3;
00179 MD_Dvec center;
00180 MD_Dvec lowerc;
00182 MD_Dvec ta1, ta2, ta3;
00185 MD_Dvec offset_table[27];
00188 double volume;
00190 int32 is_periodic;
00191 int32 is_orthogonal;
00194
00195 double domain_len_frac;
00200 int32 max_steps;
00202 int32 cnt_steps;
00204 int32 is_domain_update;
00208
00209 int32 is_minmax;
00210 MD_Dvec smin, smax;
00211
00212
00213 int32 is_fixed_lattice;
00214 int32 k1, k2, k3;
00216 MD_Dvec dv1, dv2, dv3;
00218 MD_Dvec tb1, tb2, tb3;
00221
00222 double ucellsize;
00223 double vcellsize;
00224 double wcellsize;
00225 double inv_ucellsize;
00226 double inv_vcellsize;
00227 double inv_wcellsize;
00228
00229 MD_Dvec lowcell;
00232 MD_Dvec delta;
00234 MD_Dvec gscale;
00237 ForceCell *cell;
00238 int32 maxcells;
00239 int32 ncells;
00240 int32 nucells;
00241 int32 nvcells;
00242 int32 nwcells;
00243
00244 int32 *next;
00245
00246
00247 double outer_cutoff2;
00248 double delta_dis2;
00249 MD_Dvec *pos_init;
00250 MD_Dvec *wrap_save;
00251 ForcePairlist *pairlist;
00252 int32 pairlist_set_id;
00253 int32 need_pairlist_regen;
00254
00255
00256 int32 **excl_list;
00257 int32 **scaled14_list;
00259
00260 int32 **exclx;
00261 int32 **excl12;
00262 int32 **excl13;
00263 int32 **excl14;
00264 int32 **scaled14;
00265 int32 *lenx;
00266 int32 *len12;
00267 int32 *len13;
00268 int32 *accum;
00269 int32 *dest;
00271
00272 int32 is_bres_term1;
00273 int32 is_bres_term2;
00274 double sq_minradius;
00275 double minlength;
00277 };
00278
00279
00280 #ifdef __cplusplus
00281 }
00282 #endif
00283
00284 #endif