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

# User Rev Content
1 gezelter 1502 /*
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 gezelter 1665 * [4] Kuang & Gezelter, J. Chem. Phys. 133, 164101 (2010).
40     * [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011).
41 gezelter 1502 */
42    
43     #ifndef NONBONDED_ELECTROSTATIC_HPP
44     #define NONBONDED_ELECTROSTATIC_HPP
45    
46     #include "nonbonded/NonBondedInteraction.hpp"
47     #include "types/AtomType.hpp"
48 gezelter 1725 #include "brains/ForceField.hpp"
49 gezelter 1502 #include "math/SquareMatrix3.hpp"
50     #include "math/CubicSpline.hpp"
51 gezelter 1584 #include "brains/SimInfo.hpp"
52 gezelter 1502
53     namespace OpenMD {
54    
55     struct ElectrostaticAtomData {
56     bool is_Charge;
57     bool is_Dipole;
58     bool is_SplitDipole;
59     bool is_Quadrupole;
60 gezelter 1718 bool is_Fluctuating;
61     RealType fixedCharge;
62     RealType hardness;
63     RealType electronegativity;
64     RealType slaterN;
65     RealType slaterZeta;
66 gezelter 1502 RealType dipole_moment;
67     RealType split_dipole_distance;
68     Vector3d quadrupole_moments;
69     };
70 gezelter 1718
71 gezelter 1502 enum ElectrostaticSummationMethod{
72 gezelter 1528 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 gezelter 1502 };
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 gezelter 1584 void setSimInfo(SimInfo* info) {info_ = info;};
93 gezelter 1502 void addType(AtomType* atomType);
94 gezelter 1536 virtual void calcForce(InteractionData &idat);
95 gezelter 1545 virtual void calcSelfCorrection(SelfData &sdat);
96 gezelter 1502 virtual string getName() {return name_;}
97 gezelter 1545 virtual RealType getSuggestedCutoffRadius(pair<AtomType*, AtomType*> atypes);
98 gezelter 1584 void setCutoffRadius( RealType rCut );
99     void setSwitchingRadius( RealType rSwitch );
100 gezelter 1502 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 gezelter 1528 bool haveCutoffRadius_;
110 gezelter 1502 bool haveDampingAlpha_;
111     bool haveDielectric_;
112     bool haveElectroSpline_;
113     std::map<int, AtomType*> ElectrostaticList;
114     std::map<AtomType*, ElectrostaticAtomData> ElectrostaticMap;
115 gezelter 1721 map<pair<AtomType*, AtomType*>, CubicSpline*> Jij; /** coulomb integral */
116 gezelter 1584 SimInfo* info_;
117 gezelter 1502 ForceField* forceField_;
118 gezelter 1528 RealType cutoffRadius_;
119     RealType cutoffRadius2_;
120 gezelter 1502 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 gezelter 1528 map<string, ElectrostaticSummationMethod> summationMap_;
131     map<string, ElectrostaticScreeningMethod> screeningMap_;
132 gezelter 1502 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