Main Page | Class List | File List | Class Members | File Members

step.h

Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 2007 by David J. Hardy.  All rights reserved.
00003  */
00004 
00044 #ifndef STEP_H
00045 #define STEP_H
00046 
00047 #include "mdapi/mdtypes.h"
00048 
00049 #ifdef __cplusplus
00050 extern "C" {
00051 #endif
00052 
00053 
00057   enum {
00058     STEP_FAILURE = -1,
00061     STEP_SUCCESS = 0
00063   };
00064 
00065 
00069   typedef enum StepMethod_t {
00070     STEP_VERLET = 1,
00073     STEP_SHADOW,
00076     STEP_TEMPBATH,
00079     STEP_NHEXP,
00082     STEP_DRUDE_NH,
00085     STEP_DRUDE_ROUX,
00088     STEP_DRUDE_CHEN,
00091     STEP_CGMIN,
00094     STEP_METHOD_MARKER
00095 
00096   } StepMethod;
00097 
00098 
00102   typedef enum StepOption_t {
00103     STEP_INITVEL   = 0x001,
00106     STEP_RESTARTVEL= 0x002,
00110     STEP_REMOVECOM = 0x004,
00116     STEP_ZEROLINMO = 0x008,
00121     STEP_SETTLE    = 0x010,
00124     STEP_VIRIAL    = 0x020,
00127     STEP_MOMENTUM  = 0x040,
00130     STEP_FIXEDATOMS= 0x080,
00136     STEP_CONSTRAINTS=0x100,
00140     STEP_OPTION_MARKER = 0x1FF
00141 
00142   } StepOption;
00143 
00144 
00145   struct StepSystem_t;
00146   typedef struct StepSystem_t StepSystem;
00147 
00148 
00155   typedef struct StepParam_t {
00156 
00157     StepMethod method;
00160     StepOption options;
00163     unsigned long random_seed;
00166     double timestep;
00169     double initial_temperature;
00173 /*** callbacks ***/
00174 
00175     void *messageObjPtr;
00178     int (*output_message)(void *messageObjPtr, const char *msg);
00181     void *forceObjPtr;
00184     int (*compute_force)(void *forceObjPtr,
00185         double *pe, MD_Dvec *force, const MD_Dvec *pos);
00189     void *resultsObjPtr;
00192     int (*submit_results)(void *resultsObjPtr, StepSystem *sys);
00196     int32 resultsFreq;
00199     int32 init_stepnum;
00202 /*** topology ***/
00203 
00204     MD_Atom *atom;
00207     int32 natoms;
00211 #if 0
00212     MD_Bond *bond;
00215     int32 nbonds;
00218     MD_Angle *angle;
00221     int32 nangles;
00224 /*** force field ***/
00225 
00226     MD_BondPrm *bondprm;
00229     int32 nbondprms;
00232     MD_AnglePrm *angleprm;
00235     int32 nangleprms;
00237 #endif
00238 
00239 /*** parameters for STEP_TEMPBATH ***/
00240 
00241     double bath_temperature;
00244     double relaxation_time;
00250 /*** parameters for STEP_NHEXP ****/
00251 
00252     double nh_temperature;
00256     double nh_timescale;
00261 /*** parameters for STEP_DRUDE ***/
00262 
00263     double drude_com_temperature;
00267     double drude_bond_temperature;
00271     double drude_com_timescale;
00275     double drude_bond_timescale;
00280     int32 drude_multisteps;
00284 /*** parameters for STEP_CGMIN ***/
00285 
00286     double cgmin_dis;
00289     double cgmin_tol;
00292     int32 cgmin_eval;
00296 /*** parameters for STEP_SETTLE option ***/
00297 
00298     double settle_oh_dist;
00301     double settle_hoh_angle;
00304   } StepParam;
00305 
00306 
00308   enum StepShadowIndex_t {
00309     STEP_SHADOW_4 = 0,    
00310     STEP_SHADOW_8,        
00311     STEP_SHADOW_12,       
00312     STEP_SHADOW_16,       
00313     STEP_SHADOW_20,       
00314     STEP_SHADOW_24,       
00315     STEP_SHADOW_MAXINDEX
00316   };
00317 
00318 
00323   struct StepSystem_t {
00324 
00325     double kinetic_energy;
00328     double temperature;
00331     MD_Dvec linear_momentum;
00334     MD_Dvec angular_momentum;
00337     double kinetic_virial[9];
00340     double potential_energy;
00343     double shadow_energy[STEP_SHADOW_MAXINDEX];
00346     double nh_extended_energy;
00349     double nh_friction_coef;
00352     double nh_log_s;
00355     double drude_com_energy;
00358     double drude_bond_energy;
00361     double drude_extended_energy;
00364     double drude_com_temperature;
00367     double drude_bond_temperature;
00370     MD_Dvec *force;
00373     MD_Dvec *vel;
00376     MD_Dvec *pos;
00379     int32 stepnum;
00382     int32 ndegfreedom;
00388     int32 nfixedatoms;
00392     int32 nrigidwaters;
00395   };
00396 
00397 
00400   struct Step_t;
00401   typedef struct Step_t Step;
00402 
00403 
00406   Step *new_Step(void);
00407 
00410   void delete_Step(Step *);
00411 
00430   int step_setup(Step *, StepParam *param,
00431       MD_Dvec *pos, MD_Dvec *vel, MD_Dvec *force);
00432 
00433 
00443   int step_compute(Step *, int32 numsteps);
00444 
00445 
00451   const char *step_errmsg(Step *);
00452 
00453 
00458   void step_cleanup(Step *);
00459 
00460 
00461 #ifdef __cplusplus
00462 }
00463 #endif
00464 
00465 #endif /* STEP_H */

Generated on Thu Feb 7 18:11:40 2008 for MDX by  doxygen 1.3.9.1