ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/branches/development/src/nonbonded/Electrostatic.hpp
Revision: 1725
Committed: Sat May 26 18:13:43 2012 UTC (13 years, 2 months ago) by gezelter
File size: 5782 byte(s)
Log Message:
Individual ForceField classes have been removed (they were essentially
all duplicates anyway).  

ForceField has moved to brains, and since only one force field is in
play at any time, the ForceFieldFactory and Register methods have been
removed.  


File Contents

# Content
1 /*
2 * Copyright (c) 2009 The University of Notre Dame. All Rights Reserved.
3 *
4 * The University of Notre Dame grants you ("Licensee") a
5 * non-exclusive, royalty free, license to use, modify and
6 * redistribute this software in source and binary code form, provided
7 * that the following conditions are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the
15 * distribution.
16 *
17 * This software is provided "AS IS," without a warranty of any
18 * kind. All express or implied conditions, representations and
19 * warranties, including any implied warranty of merchantability,
20 * fitness for a particular purpose or non-infringement, are hereby
21 * excluded. The University of Notre Dame and its licensors shall not
22 * be liable for any damages suffered by licensee as a result of
23 * using, modifying or distributing the software or its
24 * derivatives. In no event will the University of Notre Dame or its
25 * licensors be liable for any lost revenue, profit or data, or for
26 * direct, indirect, special, consequential, incidental or punitive
27 * damages, however caused and regardless of the theory of liability,
28 * arising out of the use of or inability to use software, even if the
29 * University of Notre Dame has been advised of the possibility of
30 * such damages.
31 *
32 * SUPPORT OPEN SCIENCE! If you use OpenMD or its source code in your
33 * research, please cite the appropriate papers when you publish your
34 * work. Good starting points are:
35 *
36 * [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005).
37 * [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006).
38 * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008).
39 * [4] Kuang & Gezelter, J. Chem. Phys. 133, 164101 (2010).
40 * [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011).
41 */
42
43 #ifndef NONBONDED_ELECTROSTATIC_HPP
44 #define NONBONDED_ELECTROSTATIC_HPP
45
46 #include "nonbonded/NonBondedInteraction.hpp"
47 #include "types/AtomType.hpp"
48 #include "brains/ForceField.hpp"
49 #include "math/SquareMatrix3.hpp"
50 #include "math/CubicSpline.hpp"
51 #include "brains/SimInfo.hpp"
52
53 namespace OpenMD {
54
55 struct ElectrostaticAtomData {
56 bool is_Charge;
57 bool is_Dipole;
58 bool is_SplitDipole;
59 bool is_Quadrupole;
60 bool is_Fluctuating;
61 RealType fixedCharge;
62 RealType hardness;
63 RealType electronegativity;
64 RealType slaterN;
65 RealType slaterZeta;
66 RealType dipole_moment;
67 RealType split_dipole_distance;
68 Vector3d quadrupole_moments;
69 };
70
71 enum ElectrostaticSummationMethod{
72 esm_HARD,
73 esm_SWITCHING_FUNCTION,
74 esm_SHIFTED_POTENTIAL,
75 esm_SHIFTED_FORCE,
76 esm_REACTION_FIELD,
77 esm_EWALD_FULL, /**< Ewald methods aren't supported yet */
78 esm_EWALD_PME, /**< Ewald methods aren't supported yet */
79 esm_EWALD_SPME /**< Ewald methods aren't supported yet */
80 };
81
82 enum ElectrostaticScreeningMethod{
83 UNDAMPED,
84 DAMPED
85 };
86
87 class Electrostatic : public ElectrostaticInteraction {
88
89 public:
90 Electrostatic();
91 void setForceField(ForceField *ff) {forceField_ = ff;};
92 void setSimInfo(SimInfo* info) {info_ = info;};
93 void addType(AtomType* atomType);
94 virtual void calcForce(InteractionData &idat);
95 virtual void calcSelfCorrection(SelfData &sdat);
96 virtual string getName() {return name_;}
97 virtual RealType getSuggestedCutoffRadius(pair<AtomType*, AtomType*> atypes);
98 void setCutoffRadius( RealType rCut );
99 void setSwitchingRadius( RealType rSwitch );
100 void setElectrostaticSummationMethod( ElectrostaticSummationMethod esm );
101 void setElectrostaticScreeningMethod( ElectrostaticScreeningMethod sm );
102 void setDampingAlpha( RealType alpha );
103 void setReactionFieldDielectric( RealType dielectric );
104
105 private:
106 void initialize();
107 string name_;
108 bool initialized_;
109 bool haveCutoffRadius_;
110 bool haveDampingAlpha_;
111 bool haveDielectric_;
112 bool haveElectroSpline_;
113 std::map<int, AtomType*> ElectrostaticList;
114 std::map<AtomType*, ElectrostaticAtomData> ElectrostaticMap;
115 map<pair<AtomType*, AtomType*>, CubicSpline*> Jij; /** coulomb integral */
116 SimInfo* info_;
117 ForceField* forceField_;
118 RealType cutoffRadius_;
119 RealType cutoffRadius2_;
120 RealType pre11_;
121 RealType pre12_;
122 RealType pre22_;
123 RealType pre14_;
124 RealType chargeToC_;
125 RealType angstromToM_;
126 RealType debyeToCm_;
127 int np_;
128 ElectrostaticSummationMethod summationMethod_;
129 ElectrostaticScreeningMethod screeningMethod_;
130 map<string, ElectrostaticSummationMethod> summationMap_;
131 map<string, ElectrostaticScreeningMethod> screeningMap_;
132 RealType dampingAlpha_;
133 RealType alpha2_;
134 RealType alpha4_;
135 RealType alpha6_;
136 RealType alpha8_;
137 RealType dielectric_;
138 RealType constEXP_;
139 RealType rcuti_;
140 RealType rcuti2_;
141 RealType rcuti3_;
142 RealType rcuti4_;
143 RealType alphaPi_;
144 RealType invRootPi_;
145 RealType rrf_;
146 RealType rt_;
147 RealType rrfsq_;
148 RealType preRF_;
149 RealType preRF2_;
150 RealType erfcVal_;
151 RealType derfcVal_;
152 CubicSpline* erfcSpline_;
153 RealType c1_;
154 RealType c2_;
155 RealType c3_;
156 RealType c4_;
157 RealType c5_;
158 RealType c6_;
159 RealType c1c_;
160 RealType c2c_;
161 RealType c3c_;
162 RealType c4c_;
163 RealType c5c_;
164 RealType c6c_;
165 RealType one_third_;
166 };
167 }
168
169
170 #endif

Properties

Name Value
svn:eol-style native