265 |
|
fclose( frcFile ); |
266 |
|
|
267 |
|
#ifdef IS_MPI |
268 |
+ |
} |
269 |
+ |
#endif // is_mpi |
270 |
+ |
} |
271 |
+ |
|
272 |
+ |
void TraPPE_ExFF::doForces( int calcPot ){ |
273 |
+ |
|
274 |
+ |
int i, isError; |
275 |
+ |
double* frc; |
276 |
+ |
double* pos; |
277 |
+ |
double* tau; |
278 |
+ |
short int passedCalcPot = (short int)calcPot; |
279 |
+ |
|
280 |
+ |
// forces are zeroed here, before any are acumulated. |
281 |
+ |
// NOTE: do not rezero the forces in Fortran. |
282 |
+ |
|
283 |
+ |
for(i=0; i<entry_plug->n_atoms; i++){ |
284 |
+ |
entry_plug->atoms[i]->zeroForces(); |
285 |
+ |
} |
286 |
+ |
|
287 |
+ |
frc = Atom::getFrcArray(); |
288 |
+ |
pos = Atom::getPosArray(); |
289 |
+ |
tau = entry_plug->tau; |
290 |
+ |
|
291 |
+ |
isError = 0; |
292 |
+ |
fortranForceLoop( pos, frc, &(entry_plug->lrPot), tau, |
293 |
+ |
&passedCalcPot, &isError ); |
294 |
+ |
|
295 |
+ |
|
296 |
+ |
if( isError ){ |
297 |
+ |
sprintf( painCave.errMsg, |
298 |
+ |
"Error returned from the fortran force calculation.\n" ); |
299 |
+ |
painCave.isFatal = 1; |
300 |
+ |
simError(); |
301 |
+ |
} |
302 |
+ |
|
303 |
+ |
#ifdef IS_MPI |
304 |
+ |
sprintf( checkPointMsg, |
305 |
+ |
"successfully returned from the force calculation.\n" ); |
306 |
+ |
MPIcheckPoint(); |
307 |
+ |
#endif // is_mpi |
308 |
+ |
|
309 |
+ |
} |
310 |
+ |
|
311 |
+ |
void TraPPE_ExFF::initFortran( void ){ |
312 |
+ |
|
313 |
+ |
int nLocal = entry_plug->n_atoms; |
314 |
+ |
int *ident; |
315 |
+ |
int isError; |
316 |
+ |
int i; |
317 |
+ |
|
318 |
+ |
ident = new int[nLocal]; |
319 |
+ |
|
320 |
+ |
for(i=0; i<nLocal; i++){ |
321 |
+ |
ident[i] = entry_plug->atoms[i]->getIdent(); |
322 |
|
} |
323 |
+ |
|
324 |
+ |
isError = 0; |
325 |
+ |
initfortran( &nLocal, ident, &isError ); |
326 |
+ |
|
327 |
+ |
if(isError){ |
328 |
+ |
sprintf( painCave.errMsg, |
329 |
+ |
"TraPPE_ExFF error: There was an error initializing the component list in fortran.\n" ); |
330 |
+ |
painCave.isFatal = 1; |
331 |
+ |
simError(); |
332 |
+ |
} |
333 |
+ |
|
334 |
+ |
|
335 |
+ |
#ifdef IS_MPI |
336 |
+ |
sprintf( checkPointMsg, "TraPPE_ExFF successfully initialized the fortran component list.\n" ); |
337 |
+ |
MPIcheckPoint(); |
338 |
|
#endif // is_mpi |
339 |
+ |
|
340 |
+ |
delete[] ident; |
341 |
+ |
|
342 |
|
} |
343 |
|
|
344 |
|
|
345 |
+ |
|
346 |
+ |
|
347 |
|
void TraPPE_ExFF::initializeAtoms( void ){ |
348 |
|
|
349 |
|
class LinkedType { |
569 |
|
// call new A_types in fortran |
570 |
|
|
571 |
|
int isError; |
572 |
+ |
|
573 |
+ |
// dummy variables |
574 |
+ |
|
575 |
+ |
int isGB = 0; |
576 |
+ |
int isLJ = 1; |
577 |
+ |
|
578 |
+ |
|
579 |
|
currentAtomType = headAtomType; |
580 |
|
while( currentAtomType != NULL ){ |
581 |
|
|
585 |
|
&(currentAtomType->mass), |
586 |
|
&(currentAtomType->epslon), |
587 |
|
&(currentAtomType->sigma), |
588 |
< |
&(currentAtomType->isDipole), |
588 |
> |
&isLJ, |
589 |
|
&(currentAtomType->isSSD), |
590 |
< |
&(currentAtomType->dipole), |
590 |
> |
&(currentAtomType->isDipole), |
591 |
> |
&isGB, |
592 |
|
&(currentAtomType->w0), |
593 |
|
&(currentAtomType->v0), |
594 |
+ |
&(currentAtomType->dipole), |
595 |
|
&isError ); |
596 |
|
if( isError ){ |
597 |
|
sprintf( painCave.errMsg, |
712 |
|
sprintf( checkPointMsg, "TraPPE_Ex atoms initialized succesfully" ); |
713 |
|
MPIcheckPoint(); |
714 |
|
#endif // is_mpi |
715 |
+ |
|
716 |
+ |
initFortran(); |
717 |
+ |
entry_plug->refreshSim(); |
718 |
|
|
719 |
|
} |
720 |
|
|