00001 /*************************************************************************** 00002 *cr 00003 *cr (C) Copyright 1995-2019 The Board of Trustees of the 00004 *cr University of Illinois 00005 *cr All Rights Reserved 00006 *cr 00007 ***************************************************************************/ 00008 00009 /*************************************************************************** 00010 * RCS INFORMATION: 00011 * 00012 * $RCSfile: Timestep.h,v $ 00013 * $Author: johns $ $Locker: $ $State: Exp $ 00014 * $Revision: 1.53 $ $Date: 2019年01月17日 21:21:02 $ 00015 * 00016 *************************************************************************** 00017 * DESCRIPTION: 00018 * 00019 * The Timestep class, which stores coordinates, energies, etc. for a 00020 * single timestep. 00021 * 00022 * Note: As more data is stored for each step, it should go in here. For 00023 * example, H-Bonds could be calculated each step. 00024 ***************************************************************************/ 00025 #ifndef TIMESTEP_H 00026 #define TIMESTEP_H 00027 00028 #include "ResizeArray.h" 00029 #include "Matrix4.h" 00030 #include "QMTimestep.h" 00031 00032 // Energy terms and temperature stored for each timestep 00033 // TSENERGIES must be the last element. It indicates the number 00034 // energies. (TSE_TOTAL is the total energy). If you add fields here 00035 // you should also add the lines in MolInfo.C so you can get access to 00036 // the fields from Tcl. 00037 enum { TSE_BOND, TSE_ANGLE, TSE_DIHE, TSE_IMPR, TSE_VDW, TSE_COUL, 00038 TSE_HBOND, TSE_KE, TSE_PE, TSE_TEMP, TSE_TOTAL, TSE_VOLUME, 00039 TSE_PRESSURE, TSE_EFIELD, TSE_UREY_BRADLEY, TSE_RESTRAINT, 00040 TSENERGIES}; 00041 00043 class Timestep { 00044 public: 00045 int num; 00046 int page_align_sz; 00047 float *pos; 00048 float *pos_ptr; 00049 float *vel; 00050 float *force; 00051 float *user; 00052 float *user2; 00053 float *user3; 00054 float *user4; 00055 QMTimestep *qm_timestep; 00056 float energy[TSENERGIES]; 00057 int timesteps; 00058 double physical_time; 00059 00061 float a_length, b_length, c_length, alpha, beta, gamma; 00062 00064 void get_transform_vectors(float v1[3], float v2[3], float v3[3]) const; 00065 00067 void get_transforms(Matrix4 &a, Matrix4 &b, Matrix4 &c) const; 00068 00071 void get_transform_from_cell(const int *cell, Matrix4 &trans) const; 00072 00073 Timestep(int n, int pagealignsz=1); 00074 Timestep(const Timestep& ts); 00075 ~Timestep(void); 00076 00077 void zero_values(); 00078 }; 00079 00080 #endif 00081