ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/branches/development/src/rnemd/RNEMD.hpp
(Generate patch)

Comparing:
branches/development/src/integrators/RNEMD.hpp (file contents), Revision 1629 by gezelter, Wed Sep 14 21:15:17 2011 UTC vs.
branches/development/src/rnemd/RNEMD.hpp (file contents), Revision 1854 by gezelter, Thu Mar 28 20:54:06 2013 UTC

# Line 35 | Line 35
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]  Vardeman & Gezelter, in progress (2009).                        
38 > * [3]  Sun, Lin & Gezelter, J. Chem. Phys. 128, 234107 (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   /**
# Line 58 | Line 59 | namespace OpenMD {
59   using namespace std;
60   namespace OpenMD {
61  
61  /**
62   * @class RNEMD RNEMD.hpp "integrators/RNEMD.hpp"
63   * @todo document
64   */
62    class RNEMD {
63    public:
64      RNEMD(SimInfo* info);
65      virtual ~RNEMD();
66      
67      void doRNEMD();
68 <    void doSwap();
69 <    void doScale();
68 >    void doSwap(SelectionManager& smanA, SelectionManager& smanB);
69 >    void doNIVS(SelectionManager& smanA, SelectionManager& smanB);
70 >    void doVSS(SelectionManager& smanA, SelectionManager& smanB);
71 >    RealType getDividingArea();
72      void collectData();
73      void getStarted();
74 <    void getStatus();
75 <    void set_RNEMD_exchange_time(RealType exchangeTime) {
76 <      exchangeTime_ = exchangeTime;
77 <    }
78 <    void set_RNEMD_nBins(int nbins) { nBins_ = nbins; }
79 <    void set_RNEMD_logWidth(int logWidth) { rnemdLogWidth_ = logWidth; }
81 <    void set_RNEMD_exchange_total(RealType et) { exchangeSum_ = et; }
82 <    void set_RNEMD_target_flux(RealType targetFlux) {targetFlux_ = targetFlux;}
83 <    RealType get_RNEMD_exchange_total() { return exchangeSum_; }
74 >    void parseOutputFileFormat(const std::string& format);
75 >    void writeOutputFile();
76 >    void writeReal(int index, unsigned int bin);
77 >    void writeVector(int index, unsigned int bin);
78 >    void writeRealStdDev(int index, unsigned int bin);
79 >    void writeVectorStdDev(int index, unsigned int bin);
80  
81    private:
82  
83 <    enum RNEMDTypeEnum {
84 <      rnemdKineticSwap,
85 <      rnemdKineticScale,
86 <      rnemdPxScale,
87 <      rnemdPyScale,
92 <      rnemdPzScale,
93 <      rnemdPx,
94 <      rnemdPy,
95 <      rnemdPz,
96 <      rnemdUnknown
83 >    enum RNEMDMethod {
84 >      rnemdSwap,
85 >      rnemdNIVS,
86 >      rnemdVSS,
87 >      rnemdUnkownMethod
88      };
89 +    enum RNEMDFluxType {
90 +      rnemdKE,       // translational kinetic energy flux
91 +      rnemdRotKE,    // rotational kinetic energy flux
92 +      rnemdFullKE,   // full kinetic energy flux
93 +      rnemdPx,       // flux of momentum along x axis
94 +      rnemdPy,       // flux of momentum along y axis
95 +      rnemdPz,       // flux of momentum along z axis
96 +      rnemdPvector,  // flux of momentum vector
97 +      rnemdLx,       // flux of angular momentum along x axis
98 +      rnemdLy,       // flux of angular momentum along y axis
99 +      rnemdLz,       // flux of angular momentum along z axis
100 +      rnemdLvector,  // flux of angular momentum vector
101 +      rnemdKePx,     // flux of translational KE and x-momentum
102 +      rnemdKePy,     // flux of translational KE and y-momentum
103 +      rnemdKePvector, // full combo flying platter
104 +      rnemdKeLx,     // flux of translational KE and x-angular momentum
105 +      rnemdKeLy,     // flux of translational KE and y-angular momentum
106 +      rnemdKeLz,     // flux of translational KE and z-angular momentum
107 +      rnemdKeLvector, // full combo spinning platter
108 +      rnemdUnknownFluxType
109 +    };
110 +
111 +    enum OutputFields {
112 +      BEGININDEX = 0,
113 +      Z = BEGININDEX,
114 +      R,
115 +      TEMPERATURE,
116 +      VELOCITY,
117 +      ANGULARVELOCITY,
118 +      DENSITY,
119 +      ENDINDEX
120 +    };
121 +
122 +    struct OutputData {
123 +      string title;
124 +      string units;
125 +      string dataType;
126 +      vector<BaseAccumulator*> accumulator;
127 +    };
128 +
129 +    typedef bitset<ENDINDEX-BEGININDEX> OutputBitSet;
130 +    typedef map<string, OutputFields> OutputMapType;
131      
132      SimInfo* info_;
133 <    RandNumGen* randNumGen_;
134 <    map<string, RNEMDTypeEnum> stringToEnumMap_;
135 <    RNEMDTypeEnum rnemdType_;
133 >
134 >    map<string, RNEMDMethod> stringToMethod_;
135 >    map<string, RNEMDFluxType> stringToFluxType_;
136 >    RNEMDMethod rnemdMethod_;
137 >    RNEMDFluxType rnemdFluxType_;
138 >
139 >    // object selection for specifying a particular species:
140      string rnemdObjectSelection_;
141      SelectionEvaluator evaluator_;
142      SelectionManager seleMan_;
143 +
144 +    // Geometric selections for the two regions for the exchange:
145 +    string selectionA_;
146 +    SelectionEvaluator evaluatorA_;
147 +    SelectionManager seleManA_;
148 +    string selectionB_;
149 +    SelectionEvaluator evaluatorB_;
150 +    SelectionManager seleManB_;
151 +    SelectionManager commonA_;
152 +    SelectionManager commonB_;
153 +    bool hasSelectionA_;
154 +    bool hasSelectionB_;                      
155 +    bool hasSphereBRadius_;
156 +
157      bool usePeriodicBoundaryConditions_;
158 <    bool output3DTemp_;
159 <    int nBins_; /**< The number of bins to divide the simulation box into.  */
160 <    /*!
161 <      The middle bin for the RNEMD method. midBin_ = nBins_/2;
162 <      Depending on the setting of the flux, this box should contain the minimum energy (temperature)
163 <      within the simulation.
164 <    */
165 <    int midBin_;
166 <    int rnemdLogWidth_; /**< Number of elements to print out in logs */
167 <    RealType zShift_;
158 >    bool hasDividingArea_;
159 >    RealType dividingArea_;
160 >
161 >    int nBins_;
162 >    RealType binWidth_;
163 >    RealType slabWidth_;
164 >    RealType slabACenter_;
165 >    RealType slabBCenter_;
166 >    RealType sphereARadius_;
167 >    RealType sphereBRadius_;
168 >
169 >    Vector3d coordinateOrigin_;
170 >
171 >    RealType kineticFlux_;        // target or desired *flux*
172 >    Vector3d momentumFluxVector_; // target or desired *flux*
173 >    Vector3d angularMomentumFluxVector_; // target or desired *flux*
174 >
175 >    RealType kineticTarget_;     // target or desired one-time exchange energy
176 >    Vector3d momentumTarget_;    // target or desired one-time exchange momentum
177 >    Vector3d angularMomentumTarget_; // target or desired one-time
178 >                                     // exchange angular momentum
179 >
180 >    RealType kineticExchange_;    // actual exchange energy (running total)
181 >    Vector3d momentumExchange_;   // actual exchange momentum (running total)
182 >    Vector3d angularMomentumExchange_; // actual exchange momentum
183 >                                       // (running total)
184      RealType exchangeTime_;
118    RealType targetFlux_;
119    RealType exchangeSum_;
120    int failTrialCount_;
121    int failRootCount_;
122    ofstream rnemdLog_;
123    // keeps track of what's being averaged
124    vector<RealType> valueHist_;
125    vector<int> valueCount_, xyzTempCount_;
126    // keeps track of the number of degrees of freedom being averaged
127    vector<RealType> xTempHist_, yTempHist_, zTempHist_;
128    ofstream xTempLog_, yTempLog_, zTempLog_;
129  };
185  
186 +    RealType targetJzpz2_;
187 +
188 +    unsigned int trialCount_;
189 +    unsigned int failTrialCount_;
190 +    unsigned int failRootCount_;
191 +
192 +    string rnemdFileName_;
193 +    ofstream rnemdFile_;
194 +
195 +    RealType runTime_, statusTime_;
196 +
197 +    vector<OutputData> data_;
198 +    OutputBitSet outputMask_;
199 +    OutputMapType outputMap_;
200 +    Accumulator* areaAccumulator_;
201 +    bool doRNEMD_;
202 +
203 +  };
204   }
205   #endif //INTEGRATORS_RNEMD_HPP

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines