ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/branches/new-templateless/OOPSE/libmdtools/NPTf.cpp
(Generate patch)

Comparing branches/new-templateless/OOPSE/libmdtools/NPTf.cpp (file contents):
Revision 849 by mmeineke, Fri Oct 31 21:06:47 2003 UTC vs.
Revision 852 by mmeineke, Thu Nov 6 18:20:47 2003 UTC

# Line 1 | Line 1
1 + #include <stdlib.h>
2   #include <math.h>
3 + #include <string.h>
4 +
5   #include "Atom.hpp"
6   #include "SRI.hpp"
7   #include "AbstractClasses.hpp"
# Line 24 | Line 27 | NPTf::NPTf ( SimInfo *theInfo, ForceFields* the_ff):
27   //    Hoover, W. G., 1986, Phys. Rev. A, 34, 2499.
28  
29   NPTf::NPTf ( SimInfo *theInfo, ForceFields* the_ff):
30 <  Integrator( theInfo, the_ff )
30 >  NPT( theInfo, the_ff )
31   {
32    GenericData* data;
33 <  DoubleArrayData * etaValue;
31 <  vector<double> etaArray;
33 >  double *etaArray;
34    int i,j;
35  
36    for(i = 0; i < 3; i++){
# Line 39 | Line 41 | NPTf::NPTf ( SimInfo *theInfo, ForceFields* the_ff):
41      }
42    }
43  
44 <    // retrieve eta array from simInfo if it exists
45 <    data = info->getProperty(ETAVALUE_ID);
46 <    if(data){
47 <      etaValue = dynamic_cast<DoubleArrayData*>(data);
48 <
49 <      if(etaValue){
50 <        etaArray = etaValue->getData();
51 <
52 <        for(i = 0; i < 3; i++){
53 <          for (j = 0; j < 3; j++){
54 <            eta[i][j] = etaArray[3*i+j];
55 <            oldEta[i][j] = eta[i][j];
56 <          }
57 <        }
58 <
57 <      }
44 >  // retrieve eta array from simInfo if it exists
45 >  data = info->getProperty(ETAVALUE_ID);
46 >  if(data != NULL){
47 >    
48 >    int test = data->getDarray(etaArray);
49 >    
50 >    if( test == 9 ){
51 >      
52 >      for(i = 0; i < 3; i++){
53 >        for (j = 0; j < 3; j++){
54 >          eta[i][j] = etaArray[3*i+j];
55 >          oldEta[i][j] = eta[i][j];
56 >        }
57 >      }    
58 >      delete[] etaArray;
59      }
60 <
60 >    else
61 >      std::cerr << "NPTf error: etaArray is not length 9 (actual = " << test
62 >                << ").\n"
63 >                << "            Simulation wil proceed with eta = 0;\n";
64 >  }
65   }
66  
67   NPTf::~NPTf() {
# Line 72 | Line 77 | void NPTf::resetIntegrator() {
77      for (j = 0; j < 3; j++)
78        eta[i][j] = 0.0;
79  
80 <  Integrator::resetIntegrator();
80 >  NPT::resetIntegrator();
81   }
82  
83   void NPTf::evolveEtaA() {
# Line 136 | Line 141 | void NPTf::getVelScaleB(double sc[3], int index ){
141    double myVel[3];
142    double vScale[3][3];
143  
144 + //   std::cerr << "velScaleB chi = " << chi << "\n";
145 +
146    for (i = 0; i < 3; i++ ) {
147      for (j = 0; j < 3; j++ ) {
148        vScale[i][j] = eta[i][j];
# Line 153 | Line 160 | void NPTf::getPosScale(double pos[3], double COM[3],
160   }
161  
162   void NPTf::getPosScale(double pos[3], double COM[3],
163 <                                               int index, double sc[3]){
163 >                       int index, double sc[3]){
164    int j;
165    double rj[3];
166  
# Line 208 | Line 215 | void NPTf::scaleSimBox( void ){
215      if (scaleMat[i][i] < smallScale) smallScale = scaleMat[i][i];
216    }
217  
218 <  if ((bigScale > 1.1) || (smallScale < 0.9)) {
218 >  if ((bigScale > 1.01) || (smallScale < 0.99)) {
219      sprintf( painCave.errMsg,
220 <             "NPTf error: Attempting a Box scaling of more than 10 percent.\n"
220 >             "NPTf error: Attempting a Box scaling of more than 1 percent.\n"
221               " Check your tauBarostat, as it is probably too small!\n\n"
222               " scaleMat = [%lf\t%lf\t%lf]\n"
223               "            [%lf\t%lf\t%lf]\n"
# Line 220 | Line 227 | void NPTf::scaleSimBox( void ){
227               scaleMat[2][0],scaleMat[2][1],scaleMat[2][2]);
228      painCave.isFatal = 1;
229      simError();
230 <  } else if (offDiagMax > 0.1) {
230 >  } else if (offDiagMax > 0.01) {
231      sprintf( painCave.errMsg,
232 <             "NPTf error: Attempting an off-diagonal Box scaling of more than 10 percent.\n"
232 >             "NPTf error: Attempting an off-diagonal Box scaling of more than 1 percent.\n"
233               " Check your tauBarostat, as it is probably too small!\n\n"
234               " scaleMat = [%lf\t%lf\t%lf]\n"
235               "            [%lf\t%lf\t%lf]\n"
# Line 283 | Line 290 | double NPTf::getConservedQuantity(void){
290    conservedQuantity = totalEnergy + thermostat_kinetic + thermostat_potential +
291      barostat_kinetic + barostat_potential;
292  
286 //   cout.width(8);
287 //   cout.precision(8);
288
289 //   cerr << info->getTime() << "\t" << Energy << "\t" << thermostat_kinetic <<
290 //       "\t" << thermostat_potential << "\t" << barostat_kinetic <<
291 //       "\t" << barostat_potential << "\t" << conservedQuantity << endl;
292
293    return conservedQuantity;
294  
295   }
296  
297 < string NPTf::getAdditionalParameters(void){
298 <  string parameters;
299 <  const int BUFFERSIZE = 2000; // size of the read buffer
300 <  char buffer[BUFFERSIZE];
297 > char* NPTf::getAdditionalParameters(void){
298  
299 <  sprintf(buffer,"\t%lf\t%lf;", chi, integralOfChidt);
300 <  parameters += buffer;
299 >  sprintf(addParamBuffer,
300 >          "\t%G\t%G;"
301 >          "\t%G\t%G\t%G;"
302 >          "\t%G\t%G\t%G;"
303 >          "\t%G\t%G\t%G;",
304 >          chi, integralOfChidt,
305 >          eta[0][0], eta[0][1], eta[0][2],
306 >          eta[1][0], eta[1][1], eta[1][2],
307 >          eta[2][0], eta[2][1], eta[2][2]
308 >          );
309  
310 <  for(int i = 0; i < 3; i++){
306 <    sprintf(buffer,"\t%lf\t%lf\t%lf;", eta[3*i], eta[3*i+1], eta[3*i+2]);
307 <    parameters += buffer;
308 <  }
309 <
310 <  return parameters;
311 <
310 >  return addParamBuffer;
311   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines