00001 // -*- Mode: C++; tab-width: 2; -*- 00002 // vi: set ts=2: 00003 // 00004 // $Id: charmm.h,v 1.17 2005/12/23 17:01:50 amoll Exp $ 00005 // 00006 00007 // Molecular Mechanics: CHARMM force field class 00008 00009 #ifndef BALL_MOLMEC_CHARMM_CHARMM_H 00010 #define BALL_MOLMEC_CHARMM_CHARMM_H 00011 00012 #ifndef BALL_COMMON_H 00013 # include <BALL/common.h> 00014 #endif 00015 00016 #ifndef BALL_MOLMEC_COMMON_FORCEFIELD_H 00017 # include <BALL/MOLMEC/COMMON/forceField.h> 00018 #endif 00019 00020 #ifndef BALL_KERNEL_SYSTEM_H 00021 # include <BALL/KERNEL/system.h> 00022 #endif 00023 00024 00025 namespace BALL 00026 { 00031 class BALL_EXPORT CharmmFF 00032 : public ForceField 00033 { 00034 public: 00035 00039 00042 struct BALL_EXPORT Option 00043 { 00048 static const char* FILENAME; 00049 00052 static const char* NONBONDED_CUTOFF; 00053 00056 static const char* VDW_CUTOFF; 00057 00060 static const char* VDW_CUTON; 00061 00064 static const char* ELECTROSTATIC_CUTOFF; 00065 00068 static const char* ELECTROSTATIC_CUTON; 00069 00072 static const char* SOLVATION_CUTOFF; 00073 00076 static const char* SOLVATION_CUTON; 00077 00080 static const char* SCALING_VDW_1_4; 00081 00084 static const char* USE_EEF1; 00085 00088 static const char* SCALING_ELECTROSTATIC_1_4; 00089 00092 static const char* DISTANCE_DEPENDENT_DIELECTRIC; 00093 00096 static const char* ASSIGN_CHARGES; 00097 00100 static const char* ASSIGN_TYPENAMES; 00101 00104 static const char* ASSIGN_TYPES; 00105 00108 static const char* OVERWRITE_CHARGES; 00109 00112 static const char* OVERWRITE_TYPENAMES; 00113 }; 00114 00117 struct BALL_EXPORT Default 00118 { 00121 static const char* FILENAME; 00122 00125 static const float NONBONDED_CUTOFF; 00126 00129 static const float VDW_CUTOFF; 00130 00133 static const float VDW_CUTON; 00134 00137 static const float ELECTROSTATIC_CUTOFF; 00138 00141 static const float ELECTROSTATIC_CUTON; 00142 00145 static const float SOLVATION_CUTOFF; 00146 00149 static const float SOLVATION_CUTON; 00150 00153 static const float SCALING_ELECTROSTATIC_1_4; 00154 00157 static const bool USE_EEF1; 00158 00161 static const float SCALING_VDW_1_4; 00162 00165 static const bool DISTANCE_DEPENDENT_DIELECTRIC; 00166 00169 static const bool ASSIGN_CHARGES; 00170 00173 static const bool ASSIGN_TYPENAMES; 00174 00177 static const bool ASSIGN_TYPES; 00178 00181 static const bool OVERWRITE_CHARGES; 00182 00185 static const bool OVERWRITE_TYPENAMES; 00186 }; 00187 00189 00192 00193 BALL_CREATE(CharmmFF) 00194 00195 00197 CharmmFF(); 00198 00201 CharmmFF(System& system); 00202 00205 CharmmFF(System& system, const Options& options); 00206 00209 CharmmFF(const CharmmFF& force_field); 00210 00213 virtual ~CharmmFF(); 00214 00216 00219 00222 const CharmmFF& operator = (const CharmmFF& force_field) 00223 ; 00224 00227 virtual void clear() 00228 ; 00229 00231 00234 00237 virtual bool specificSetup() 00238 throw(Exception::TooManyErrors); 00239 00241 00244 00247 double getStretchEnergy() const; 00248 00251 double getBendEnergy() const; 00252 00256 double getTorsionEnergy() const; 00257 00260 double getImproperTorsionEnergy() const; 00261 00264 double getProperTorsionEnergy() const; 00265 00269 double getNonbondedEnergy() const; 00270 00273 double getESEnergy() const; 00274 00277 double getVdWEnergy() const; 00278 00281 double getSolvationEnergy() const; 00282 00285 bool hasInitializedParameters() const; 00286 00288 virtual String getResults() const 00289 ; 00290 00292 00293 protected: 00294 00295 String filename_; 00296 00297 bool parameters_initialized_; 00298 00299 }; 00300 } // namespace BALL 00301 00302 #endif // BALL_MOLMEC_CHARMM_CHARMM_H