ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/branches/new_design/OOPSE-3.0/src/integrators/NPT.hpp
Revision: 1762
Committed: Fri Nov 19 21:38:22 2004 UTC (19 years, 9 months ago) by tim
File size: 5109 byte(s)
Log Message:
refactory integrator

File Contents

# User Rev Content
1 tim 1762 /*
2     * Copyright (C) 2000-2004 Object Oriented Parallel Simulation Engine (OOPSE) project
3     *
4     * Contact: oopse@oopse.org
5     *
6     * This program is free software; you can redistribute it and/or
7     * modify it under the terms of the GNU Lesser General Public License
8     * as published by the Free Software Foundation; either version 2.1
9     * of the License, or (at your option) any later version.
10     * All we ask is that proper credit is given for our work, which includes
11     * - but is not limited to - adding the above copyright notice to the beginning
12     * of your source code files, and to any copyright notice that you may distribute
13     * with programs based on this work.
14     *
15     * This program is distributed in the hope that it will be useful,
16     * but WITHOUT ANY WARRANTY; without even the implied warranty of
17     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18     * GNU Lesser General Public License for more details.
19     *
20     * You should have received a copy of the GNU Lesser General Public License
21     * along with this program; if not, write to the Free Software
22     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23     *
24     */
25    
26     /**
27     * @file NPT.hpp
28     * @author tlin
29     * @date 11/19/2004
30     * @time 13:25am
31     * @version 1.0
32     */
33    
34     #ifndef INTEGRATORS_NPT_HPP
35     #define INTEGRATORS_NPT_HPP
36    
37     #include "integrators/VelocityVerletIntegrator.hpp"
38    
39     namespace oopse {
40     class NPT : public VelocityVerletIntegrator {
41     public:
42    
43     NPT(SimInfo * theInfo, ForceFields * the_ff);
44     virtual~NPT();
45    
46     virtual void integrateStep(int calcPot, int calcStress) {
47     calcStress = 1;
48     T::integrateStep(calcPot, calcStress);
49     }
50    
51     virtual double getConservedQuantity(void) = 0;
52     virtual string getAdditionalParameters(void) = 0;
53    
54     double myTauThermo() {
55     return tauThermostat;
56     }
57    
58     double myTauBaro() {
59     return tauBarostat;
60     }
61    
62     void setTauThermostat(double tt) {
63     tauThermostat = tt;
64     have_tau_thermostat = 1;
65     }
66    
67     void setTauBarostat(double tb) {
68     tauBarostat = tb;
69     have_tau_barostat = 1;
70     }
71    
72     void setTargetTemp(double tt) {
73     targetTemp = tt;
74     have_target_temp = 1;
75     }
76    
77     void setTargetPressure(double tp) {
78     targetPressure = tp;
79     have_target_pressure = 1;
80     }
81    
82     void setChiTolerance(double tol) {
83     chiTolerance = tol;
84     have_chi_tolerance = 1;
85     }
86    
87     void setPosIterTolerance(double tol) {
88     posIterTolerance = tol;
89     have_pos_iter_tolerance = 1;
90     }
91    
92     void setEtaTolerance(double tol) {
93     etaTolerance = tol;
94     have_eta_tolerance = 1;
95     }
96    
97     protected:
98    
99     virtual void moveA();
100     virtual void moveB();
101    
102     virtual int readyCheck();
103    
104     virtual void resetIntegrator();
105    
106     virtual void getVelScaleA(double sc[3], double vel[3]) = 0;
107     virtual void getVelScaleB(double sc[3], int index) = 0;
108     virtual void getPosScale(double pos[3], double COM[3], int index,
109     double sc[3]) = 0;
110    
111     virtual void calcVelScale() = 0;
112    
113     virtual bool chiConverged();
114     virtual bool etaConverged() = 0;
115    
116     virtual void evolveChiA();
117     virtual void evolveEtaA() = 0;
118     virtual void evolveChiB();
119     virtual void evolveEtaB() = 0;
120    
121     virtual void scaleSimBox() = 0;
122    
123     void accIntegralOfChidt(void) {
124     integralOfChidt += dt * chi;
125     }
126    
127     // chi and eta are the propagated degrees of freedom
128    
129     double oldChi;
130     double prevChi;
131     double chi;
132     double NkBT;
133     double fkBT;
134    
135     double tt2,
136     tb2;
137     double instaTemp,
138     instaPress,
139     instaVol;
140     double press[3][3];
141    
142     int Nparticles;
143    
144     double integralOfChidt;
145    
146     // targetTemp, targetPressure, and tauBarostat must be set.
147     // One of qmass or tauThermostat must be set;
148    
149     double targetTemp;
150     double targetPressure;
151     double tauThermostat;
152     double tauBarostat;
153    
154     short int have_tau_thermostat,
155     have_tau_barostat,
156     have_target_temp;
157     short int have_target_pressure;
158    
159     double * oldPos;
160     double * oldVel;
161     double * oldJi;
162    
163     double chiTolerance;
164     short int have_chi_tolerance;
165     double posIterTolerance;
166     short int have_pos_iter_tolerance;
167     double etaTolerance;
168     short int have_eta_tolerance;
169     };
170    
171     } //end namespace oopse
172    
173     #endif //INTEGRATORS_NPT_HPP