BALL  1.4.79
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
charmmNonBonded.h
Go to the documentation of this file.
1 // -*- Mode: C++; tab-width: 2; -*-
2 // vi: set ts=2:
3 //
4 
5 // Molecular Mechanics: Charmm force field, non-bonded component
6 // (van der Waals, electrostatics, EEF1 solvation)
7 //
8 
9 #ifndef BALL_MOLMEC_CHARMM_NONBONDED_H
10 #define BALL_MOLMEC_CHARMM_NONBONDED_H
11 
12 #ifndef BALL_COMMON_H
13 # include <BALL/common.h>
14 #endif
15 
16 #ifndef BALL_MOLMEC_PARAMETER_LENNARDJONES_H
18 #endif
19 
20 #ifndef BALL_MOLMEC_PARAMETER_POTENTIAL1210_H
22 #endif
23 
24 #ifndef BALL_MOLMEC_PARAMETER_CHARMMEEF1_H
26 #endif
27 
28 #ifndef BALL_MOLMEC_COMMON_FORCEFIELDCOMPONENT_H
30 #endif
31 
32 #ifndef BALL_MOLMEC_COMMON_SUPPORT_H
34 #endif
35 
36 namespace BALL
37 {
46  : public ForceFieldComponent
47  {
48  public:
49 
51  #define CHARMM_NB_ENABLED "enable NB"
52 
56 
57  BALL_CREATE(CharmmNonBonded)
58 
59 
61  CharmmNonBonded()
62  ;
63 
66  CharmmNonBonded(ForceField& force_field)
67  ;
68 
71  CharmmNonBonded(const CharmmNonBonded& charmm_non_bonded)
72  ;
73 
76  virtual ~CharmmNonBonded()
77  ;
78 
80 
83 
86  const CharmmNonBonded& operator =
87  (const CharmmNonBonded& charmm_non_bonded)
88  ;
89 
92  virtual void clear()
93  ;
94 
96 
99 
102  bool operator == (const CharmmNonBonded& charmm_non_bonded)
103  ;
104 
106 
109 
112  virtual bool setup()
113  throw(Exception::TooManyErrors);
114 
116 
119 
122  virtual double updateEnergy()
123  ;
124 
127  virtual void updateForces()
128  ;
129 
132  virtual double getElectrostaticEnergy() const
133  ;
134 
137  virtual double getVdwEnergy() const
138  ;
139 
142  virtual double getSolvationEnergy() const
143  ;
144 
146 
149 
152  virtual MolmecSupport::PairListAlgorithmType
153  determineMethodOfAtomPairGeneration()
154  ;
155 
158  virtual void buildVectorOfNonBondedAtomPairs
159  (const std::vector<std::pair<Atom*, Atom*> >& atom_vector)
160  throw(Exception::TooManyErrors);
161 
163 
164  protected:
165 
166  /*_ @name Protected Attributes
167  */
168  //_@{
169 
170  /*_ Value of the electrostatic energy
171  */
172  double electrostatic_energy_;
173 
174  /*_ Value of the vdw energy
175  */
176  double vdw_energy_;
177 
178  /*_ Value of the solvation energy
179  */
180  double solvation_energy_;
181 
182  //_@}
183  /*_ @name Private Attributes
184  */
185  //_@{
186 
187  private:
188 
189  /*_ Vector array with all atom pairs whose distance is smaller than cut_off
190  */
191  vector<LennardJones::Data> non_bonded_;
192 
193  /*_ A helper array for buildVectorOfNonBondedAtomPairs(). This is
194  declared here to save the ctor within the method.
195  */
196  vector<bool> is_torsion_;
197 
198  /*_ Number of 1-4 interactions in the vector non_bonded
199  */
200  Size number_of_1_4_;
201 
202  /*_ Cutoff distance for non-bonded interactions
203  */
204  float cut_off_;
205 
206  /*_ Cutoff distance for vdw interactions
207  */
208  float cut_off_vdw_;
209 
210  /*_ Start of the switch function for the vdw interactions
211  */
212  float cut_on_vdw_;
213 
214  /*_ Cutoff distance for electrostatic interactions
215  */
216  float cut_off_electrostatic_;
217 
218  /*_ Start of the switch function for the vdw interactions
219  */
220  float cut_on_electrostatic_;
221 
222  /*_ Cutoff distance for solvation contribution (EEF1)
223  */
224  float cut_off_solvation_;
225 
226  /*_ Start of the switch function for the solvation contribution (EEF1)
227  */
228  float cut_on_solvation_;
229 
230  /*_ Inverse cube of the difference of cutoff and cuton for vdW
231  */
232  float inverse_difference_off_on_vdw_3_;
233 
234  /*_ Inverse cube of the difference of cutoff and cuton for solvation
235  */
236  float inverse_difference_off_on_solvation_3_;
237 
238  /*_ Inverse cube of the difference of cutoff and cuton for electrostatic
239  */
240  float inverse_difference_off_on_electrostatic_3_;
241 
242  /*_ Scaling factor for vdw_1_4_interactions
243  */
244  float scaling_vdw_1_4_;
245 
246  /*_ Scaling factor for electrostatic_1_4_interactions
247  */
248  float scaling_electrostatic_1_4_;
249 
250  /*_ Flag for using constant or distance dependent dielectric constant
251  True = distance dependent
252  */
253  bool use_dist_depend_dielectric_;
254 
255  /*_ The most efficient algorithm to calculate the non-bonded atom pairs.
256  {\tt BRUTE\_FORCE}: brute force: all against all\\
257  {\tt HASH\_GRID}: box grid
258  */
259  MolmecSupport::PairListAlgorithmType algorithm_type_;
260 
261  LennardJones van_der_waals_parameters_;
262 
263  LennardJones van_der_waals_parameters_14_;
264 
265  CharmmEEF1 solvation_parameters_;
266 
267  vector<CharmmEEF1::Values> solvation_;
268 
269  bool use_solvation_component_;
270 
271  //_@}
272 
273  };
274 } // namespace BALL
275 
276 #endif // BALL_MOLMEC_CHARMM_CHARMMVDW_H
#define BALL_CREATE(name)
Definition: create.h:62
char Atom[5]
Definition: PDBdefs.h:257
#define BALL_EXPORT
Definition: COMMON/global.h:50