BALL
1.4.1
|
00001 // -*- Mode: C++; tab-width: 2; -*- 00002 // vi: set ts=2: 00003 // 00004 // $Id: molecularDynamics.h,v 1.33 2005/12/23 17:01:53 amoll Exp $ 00005 // 00006 00007 // MolecularDynamics: A base class for molecular dynamics simulations 00008 // Useful MD classes must be derived from this class. 00009 00010 #ifndef BALL_MOLMEC_MDSIMULATION_MOLECULARDYNAMICS_H 00011 #define BALL_MOLMEC_MDSIMULATION_MOLECULARDYNAMICS_H 00012 00013 #ifndef BALL_COMMON_H 00014 # include <BALL/common.h> 00015 #endif 00016 00017 #ifndef BALL_DATATYPE_OPTIONS_H 00018 # include <BALL/DATATYPE/options.h> 00019 #endif 00020 00021 #ifndef BALL_MOLMEC_COMMON_ATOMVECTOR_H 00022 # include <BALL/MOLMEC/COMMON/atomVector.h> 00023 #endif 00024 00025 #include <vector> 00026 00027 namespace BALL 00028 { 00029 // Some forward decls 00030 class SnapShotManager; 00031 class ForceField; 00032 class System; 00033 00042 class BALL_EXPORT MolecularDynamics 00043 { 00044 public: 00045 00049 struct BALL_EXPORT Option 00050 { 00051 00054 static const char* MAXIMAL_NUMBER_OF_ITERATIONS; 00055 00059 static const char* MAXIMAL_SIMULATION_TIME; 00060 00063 static const char* NUMBER_OF_ITERATION; 00064 00067 static const char* ENERGY_OUTPUT_FREQUENCY; 00068 00071 static const char* SNAPSHOT_FREQUENCY; 00072 00075 static const char* TIME_STEP; 00076 00079 static const char* REFERENCE_TEMPERATURE; 00080 00084 static const char* BATH_RELAXATION_TIME; 00085 00088 static const char* CURRENT_TIME; 00089 }; 00090 00091 struct BALL_EXPORT Default 00092 { 00093 00096 static const Size MAXIMAL_NUMBER_OF_ITERATIONS; 00097 00101 static const double MAXIMAL_SIMULATION_TIME; 00102 00105 static const Size NUMBER_OF_ITERATION; 00106 00110 static const Size ENERGY_OUTPUT_FREQUENCY; 00111 00114 static const Size SNAPSHOT_FREQUENCY; 00115 00118 static const double TIME_STEP; 00119 00122 static const double REFERENCE_TEMPERATURE; 00123 00126 static const double BATH_RELAXATION_TIME; 00127 00131 static const double CURRENT_TIME; 00132 }; 00133 00137 00138 BALL_CREATE(MolecularDynamics) 00139 00140 00142 MolecularDynamics(); 00143 00146 MolecularDynamics(ForceField& force_field); 00147 00150 MolecularDynamics(const MolecularDynamics& rhs); 00151 00154 virtual ~MolecularDynamics(); 00155 00157 00160 00163 const MolecularDynamics& operator =(const MolecularDynamics& rhs); 00164 00167 void set(const MolecularDynamics& rhs); 00168 00170 00173 00176 bool isValid() const; 00177 00179 00182 00185 virtual bool setup(ForceField& force_field, SnapShotManager* snapshot_man); 00186 00189 virtual bool setup(ForceField& forcefield, SnapShotManager* snapshot_man, const Options& myoptions); 00190 00194 virtual bool specificSetup(); 00195 00197 00200 00203 void setNumberOfIteration(Size number); 00204 00209 void setMaximalNumberOfIterations(Size number); 00210 00215 void setMaximalSimulationTime(double time); 00216 00220 virtual void setTimeStep(double step); 00221 00226 void setReferenceTemperature(double temperature); 00227 00230 void setCurrentTime(double time); 00231 00236 void setEnergyOutputFrequency(Size number); 00237 00240 void setSnapShotFrequency(Size number); 00241 00244 Size getEnergyOutputFrequency() const; 00245 00248 Size getNumberOfIterations() const; 00249 00252 Size getMaximalNumberOfIterations() const; 00253 00256 double getMaximalSimulationTime() const; 00257 00260 double getTimeStep() const; 00261 00264 Size getSnapShotFrequency() const; 00265 00268 double getTemperature() const; 00269 00272 double getTime() const; 00273 00276 double getTotalEnergy() const; 00277 00280 double getPotentialEnergy() const; 00281 00284 double getKineticEnergy() const; 00285 00288 ForceField* getForceField() const; 00289 00296 bool simulate(bool restart = false); 00297 00304 bool simulateTime(double simulation_time, bool restart = false); 00305 00313 virtual bool simulateIterations(Size number, bool restart = false); 00314 00317 void enableEnergyAbortCondition(bool state); 00318 00320 bool energyAbortConditionEnabled() const; 00321 00325 void setEnergyToAbort(float value); 00326 00330 float getEnergyToAbort() const; 00331 00333 00337 00340 Options options; 00341 00342 protected: 00343 00345 /*_ @name Protected Methods 00346 */ 00347 //_@{ 00348 00349 /*_ A method for calculating the 00350 current temperature in the system 00351 */ 00352 void updateInstantaneousTemperature(); 00353 00354 //_@} 00355 /*_ @name Protected Attributes 00356 */ 00357 //_@{ 00358 00359 /*_ The boolean variable indicates if the setup of the 00360 molecular dynamics has been successful 00361 */ 00362 bool valid_; 00363 00364 /*_ The force field the MD class is bound to 00365 */ 00366 ForceField* force_field_ptr_; 00367 00368 /*_ The system the MD class is bound to 00369 */ 00370 System* system_ptr_; 00371 00372 /*_ The list of atoms. The simulation will be carried out for these atoms 00373 */ 00374 AtomVector atom_vector_; 00375 00376 /*_ The current iteration number 00377 */ 00378 Size number_of_iteration_; 00379 00380 /*_ The maximal number of iterations to be simulated when 00381 calling the simulate() method. 00382 */ 00383 Size maximal_number_of_iterations_; 00384 00385 /*_ The time step in picoseconds 00386 */ 00387 double time_step_; 00388 00389 /*_ The reference temperature in Kelvin 00390 */ 00391 double reference_temperature_; 00392 00393 /*_ The current(kinetic) temperatue in Kelvin 00394 */ 00395 double current_temperature_; 00396 00397 /*_ The current kinetic energy in kJ/mol 00398 */ 00399 double kinetic_energy_; 00400 00401 /*_ The current total energy in kJ/mol 00402 */ 00403 double total_energy_; 00404 00405 /*_ The current time of the MD run 00406 */ 00407 double current_time_; 00408 00409 /*_ Frequency of energy output(i.e. after how many iterations) 00410 */ 00411 Size energy_output_frequency_; 00412 00413 /*_ Frequency of taking snapshots(i.e. after how many iterations) 00414 */ 00415 Size snapshot_frequency_; 00416 00417 /*_ The Snapshot Manager that is used for taking snapshots 00418 */ 00419 SnapShotManager* snapshot_manager_ptr_; 00420 00421 //_ 00422 bool abort_by_energy_enabled_; 00423 00424 //_ 00425 float abort_energy_; 00426 00427 //_@} 00428 00429 }; // end of class MolecularDynamics 00430 } // end of namespace Ball 00431 00432 #endif // BALL_MOLMEC_MDSIMULATION_MOLECULARDYNAMICS_H