ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/SHAPES/GridBuilder.cpp
(Generate patch)

Comparing trunk/SHAPES/GridBuilder.cpp (file contents):
Revision 1281 by chrisfen, Mon Jun 21 13:38:55 2004 UTC vs.
Revision 1282 by chrisfen, Mon Jun 21 15:10:29 2004 UTC

# Line 29 | Line 29 | void GridBuilder::launchProbe(int forceField, vector<d
29    ofstream sOut("s.grid");
30    ofstream epsOut("eps.grid");
31    double startDist;
32 +  double phiVal;
33 +  double thetaVal;
34    double minDist = 10.0; //minimum start distance
35          
36    sList = sGrid;
# Line 41 | Line 43 | void GridBuilder::launchProbe(int forceField, vector<d
43    if (startDist < minDist)
44      startDist = minDist;
45  
46 <  initBody();
47 <  for (k=0; k<bandwidth; k++){          
48 <    printf("step theta...\n");
46 >  //set the initial orientation of the body and loop over theta values
47 >  phiVal = 0.0;
48 >  thetaVal = thetaMin;
49 >  rotBody(phiVal, thetaVal);
50 >  for (k=0; k<bandwidth; k++){  
51 >        //loop over phi values starting with phi = 0.0
52      for (j=0; j<bandwidth; j++){
53        releaseProbe(startDist);
54  
55        sigList.push_back(sigDist);
56        sList.push_back(sDist);
57        epsList.push_back(epsVal);
58 <                        
59 <      stepPhi(phiStep);
58 >      
59 >      phiVal += phiStep;
60 >      rotBody(phiVal, thetaVal);
61      }
62 <    stepTheta(thetaStep);
62 >    phiVal = 0.0;
63 >    thetaVal += thetaStep;
64 >    rotBody(phiVal, thetaVal);
65 >    printf("step theta %i\n",k);
66    }            
58  /*
59  //write out the grid files
60  printf("the grid size is %d\n",sigmaGrid.size());
61  for (k=0; k<sigmaGrid.size(); k++){
62    sigmaOut << sigmaGrid[k] << "\n0\n";
63    sOut << sGrid[k] << "\n0\n";
64    epsOut << epsGrid[k] << "\n0\n";
65  }
66   */
67 }
68
69 void GridBuilder::initBody(){
70  //set up the rigid body in the starting configuration
71  stepTheta(thetaMin);
67   }
68  
69   void GridBuilder::releaseProbe(double farPos){
# Line 197 | Line 192 | void GridBuilder::calcEnergy(){
192          potEnergy += 4*sqrt(epsHe*atomEps)*(rValPowerSix * (rValPowerSix - 1.0));
193          
194        }; break;
200        
195        
196        case 4:{
197          //we are using the OPLS force field
# Line 222 | Line 216 | void GridBuilder::calcEnergy(){
216    }
217   }
218  
219 < void GridBuilder::stepTheta(double increment){
219 > void GridBuilder::rotBody(double pValue, double tValue){
220    //zero out the euler angles
221    for (l=0; l<3; l++)
222      angles[i] = 0.0;
223          
224 +  //the phi euler angle is for rotation about the z-axis (we use the zxz convention)
225 +  angles[0] = pValue;
226    //the second euler angle is for rotation about the x-axis (we use the zxz convention)
227 <  angles[1] = increment;
227 >  angles[1] = tValue;
228          
229    //obtain the rotation matrix through the rigid body class
230    rbMol->doEulerToRotMat(angles, rotX);
231 <        
231 >  
232 >  //start from the reference position
233 >  identityMat3(rbMatrix);
234 >  rbMol->setA(rbMatrix);
235 >  
236    //rotate the rigid body
237  rbMol->getA(rbMatrix);
237    matMul3(rotX, rbMatrix, rotatedMat);
238    rbMol->setA(rotatedMat);      
239   }
240  
242 void GridBuilder::stepPhi(double increment){
243  //zero out the euler angles
244  for (l=0; l<3; l++)
245    angles[i] = 0.0;
246        
247  //the phi euler angle is for rotation about the z-axis (we use the zxz convention)
248  angles[0] = increment;
249        
250  //obtain the rotation matrix through the rigid body class
251  rbMol->doEulerToRotMat(angles, rotZ);
252        
253  //rotate the rigid body
254  rbMol->getA(rbMatrix);
255  matMul3(rotZ, rbMatrix, rotatedMat);
256  rbMol->setA(rotatedMat);      
257 }
258
241   void GridBuilder::printGridFiles(){
242    ofstream sigmaOut("sigma.grid");
243    ofstream sOut("s.grid");

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines