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

Comparing trunk/OOPSE/libmdtools/ForceFields.cpp (file contents):
Revision 1144 by tim, Sat May 1 18:52:38 2004 UTC vs.
Revision 1212 by chrisfen, Tue Jun 1 17:15:43 2004 UTC

# Line 73 | Line 73 | void ForceFields::doForces( int calcPot, int calcStres
73  
74   void ForceFields::doForces( int calcPot, int calcStress ){
75  
76 <  int i, isError;
76 >  int i, j, isError;
77    double* frc;
78    double* pos;
79    double* trq;
# Line 81 | Line 81 | void ForceFields::doForces( int calcPot, int calcStres
81    double* u_l;
82    double* rc;
83    double* massRatio;
84 +  double factor;
85    SimState* config;
86  
87 +  Molecule* myMols;
88 +  Atom** myAtoms;
89 +  int numAtom;
90 +  int curIndex;
91 +  double mtot;
92 +  int numMol;
93 +  int numCutoffGroups;
94 +  CutoffGroup* myCutoffGroup;
95 +  vector<CutoffGroup*>::iterator iterCutoff;
96 +  double com[3];
97 +  vector<double> rcGroup;
98 +  
99    short int passedCalcPot = (short int)calcPot;
100    short int passedCalcStress = (short int)calcStress;
101  
# Line 100 | Line 113 | void ForceFields::doForces( int calcPot, int calcStres
113    for(i=0; i<entry_plug->n_mol; i++ ){
114      // CalcForces in molecules takes care of mapping rigid body coordinates
115      // into atomic coordinates
116 <    entry_plug->molecules[i].calcForces();
116 >    entry_plug->molecules[i].calcForces();    
117    }
118  
119   #ifdef PROFILE
# Line 114 | Line 127 | void ForceFields::doForces( int calcPot, int calcStres
127    trq = config->getTrqArray();
128    A   = config->getAmatArray();
129    u_l = config->getUlArray();
117  rc = config->getRcArray();
118  massRatio = config->getMassRatioArray();
130  
131 +  if(entry_plug->haveCutoffGroups){
132 +    myMols = entry_plug->molecules;
133 +    numMol = entry_plug->n_mol;
134 +    for(int i  = 0; i < numMol; i++){
135 +        
136 +      numCutoffGroups = myMols[i].getNCutoffGroups();
137 +      for(myCutoffGroup =myMols[i].beginCutoffGroup(iterCutoff); myCutoffGroup != NULL;
138 +                                                    myCutoffGroup =myMols[i].nextCutoffGroup(iterCutoff)){
139 +        //get center of mass of the cutoff group
140 +        myCutoffGroup->getCOM(com);
141 +
142 +        rcGroup.push_back(com[0]);
143 +        rcGroup.push_back(com[1]);
144 +        rcGroup.push_back(com[2]);
145 +        
146 +      }// end for(myCutoffGroup)
147 +      
148 +    }//end for(int i = 0)
149 +
150 +    rc = &rcGroup[0];
151 +  }
152 +  else{
153 +    // center of mass of the group is the same as position of the atom  if cutoff group does not exist
154 +    rc = pos;
155 +  }
156 +  
157 +
158 +
159    isError = 0;
160    entry_plug->lrPot = 0.0;
161  
# Line 159 | Line 198 | void ForceFields::doForces( int calcPot, int calcStres
198    }
199  
200  
201 +  if (entry_plug->useSolidThermInt && !entry_plug->useLiquidThermInt) {
202 +
203 +    factor = pow(entry_plug->thermIntLambda, entry_plug->thermIntK);
204 +    for (i=0; i < entry_plug->integrableObjects.size(); i++) {
205 +      for (j=0; j< 3; j++)
206 +        frc[3*i + j] *= factor;
207 +      if (entry_plug->integrableObjects[i]->isDirectional()) {
208 +        for (j=0; j< 3; j++)
209 +          trq[3*i + j] *= factor;
210 +      }
211 +    }
212 +    entry_plug->vRaw = entry_plug->lrPot;
213 +    entry_plug->lrPot *= factor;
214 +    entry_plug->lrPot += entry_plug->restraint->Calc_Restraint_Forces(entry_plug->integrableObjects);
215 +    entry_plug->vHarm = entry_plug->restraint->getVharm();
216 +  }
217 +
218 +  if (entry_plug->useLiquidThermInt) {
219 +
220 +    factor = pow(entry_plug->thermIntLambda, entry_plug->thermIntK);
221 +    for (i=0; i < entry_plug->integrableObjects.size(); i++) {
222 +      for (j=0; j< 3; j++)
223 +        frc[3*i + j] *= factor;
224 +      if (entry_plug->integrableObjects[i]->isDirectional()) {
225 +        for (j=0; j< 3; j++)
226 +          trq[3*i + j] *= factor;
227 +      }
228 +    }
229 +    entry_plug->vRaw = entry_plug->lrPot;
230 +    entry_plug->lrPot *= factor;
231 +    entry_plug->lrPot += entry_plug->restraint->Calc_Restraint_Forces(entry_plug->integrableObjects);
232 +    entry_plug->vHarm = entry_plug->restraint->getVharm();
233 +  }
234 +
235   #ifdef IS_MPI
236    sprintf( checkPointMsg,
237             "returned from the force calculation.\n" );
# Line 190 | Line 263 | void ForceFields::initFortran(int ljMixPolicy, int use
263   #endif // is_mpi
264    
265   }
266 +
267 +
268 + void ForceFields::initRestraints(){
269 +  int i;
270 +  // store the initial info.
271 +  // set the omega values to zero
272 +  for (i=0; i<entry_plug->integrableObjects.size(); i++)
273 +    entry_plug->integrableObjects[i]->setZangle( 0.0 );
274 +
275 +  entry_plug->restraint->Store_Init_Info(entry_plug->integrableObjects);
276 +
277 + }
278 +
279 + void ForceFields::dumpzAngle(){
280 +
281 +  // store the initial info.
282 +  entry_plug->restraint->Write_zAngle_File(entry_plug->integrableObjects);
283 +
284 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines