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

Comparing trunk/mdtools/interface_implementation/LJ_FF.cpp (file contents):
Revision 236 by mmeineke, Mon Jan 13 22:06:21 2003 UTC vs.
Revision 253 by chuckv, Thu Jan 30 15:20:21 2003 UTC

# Line 43 | Line 43 | extern "C" {
43                                                          double* epslon,
44                                                          double* sigma,
45                                                          int* status ),
46 <                                            void (*p2)( void ),
46 >                                            void (*p2)( int *nLocal,
47 >                                                        int *identArray,
48 >                                                        int *isError ),
49                                              void (*p3)( double* positionArray,
50                                                          double* forceArray,
51                                                          double* potentialEnergy,
# Line 54 | Line 56 | void LJfunctionWrapper( void (*p1)( int* ident, double
56  
57   void LJfunctionWrapper( void (*p1)( int* ident, double* mass, double* epslon,
58                                     double* sigma, int* status ),
59 <                        void (*p2)( void ),
59 >                        void (*p2)( int *nLocal, int *identArray, int *isError ),
60                          void (*p3)( double* positionArray,double* forceArray,
61                                      double* potentialEnergy,
62                                      short int* doPotentialCalc ) );
# Line 62 | Line 64 | void (*initLJfortran)( void );
64   void (*newLJtype)( int* ident, double* mass, double* epslon, double* sigma,
65                     int* status );
66  
67 < void (*initLJfortran)( void );
67 > void (*initLJfortran) ( int *nLocal, int *identArray, int *isError );
68  
69   LJ_FF* currentLJwrap;
70  
# Line 205 | Line 207 | void LJfunctionWrapper( void (*p1)( int* ident, double
207  
208   void LJfunctionWrapper( void (*p1)( int* ident, double* mass, double* epslon,
209                                     double* sigma, int* status ),
210 <                        void (*p2)( void ),
210 >                        void (*p2)( int*, int*, int* ),
211                          void (*p3)( double* positionArray,double* forceArray,
212                                      double* potentialEnergy,
213                                      short int* doPotentialCalc ) ){
214    
215    
216 <  p1 = newLJtype;
217 <  p2 = initLJfortran;
218 <  this->setLJfortran( p3 );
216 >  newLJtype = p1;
217 >  initLJfortran = p2;
218 >  currentLJwrap->setLJfortran( p3 );
219   }
220  
221  
# Line 240 | Line 242 | void LJ_FF::initializeAtoms( void ){
242        // check for duplicates
243        
244        if( !strcmp( info.name, name ) ){
245 <        sprintf( simError.painCave,
245 >        sprintf( painCave.errMsg,
246                   "Duplicate LJ atom type \"%s\" found in "
247                   "the LJ_FF param file./n",
248                   name );
# Line 305 | Line 307 | void LJ_FF::initializeAtoms( void ){
307  
308      headAtomType = new LinkedType;
309      
310 <    fastFoward( "AtomTypes", "initializeAtoms" );
310 >    fastForward( "AtomTypes", "initializeAtoms" );
311  
312      // we are now at the AtomTypes section.
313      
# Line 377 | Line 379 | void LJ_FF::initializeAtoms( void ){
379   #endif // is_mpi
380  
381    // call new A_types in fortran
382 +  
383 +  int isError;
384 +  currentAtomType = headAtomType;
385 +  while( currentAtomType != NULL ){
386 +    
387 +    if( currentAtomType->name[0] != '\0' ){
388 +      isError = 0;
389 +          newLJtype( &(currentAtomType->ident),
390 +                 &(currentAtomType->mass),
391 +                 &(currentAtomType->epslon),
392 +                 &(currentAtomType->sigma),
393 +                 &isError );
394 +      if( isError ){
395 +        sprintf( painCave.errMsg,
396 +                 "Error initializing the \"%s\" atom type in fortran\n",
397 +                 currentAtomType->name );
398 +        painCave.isFatal = 1;
399 +        simError();
400 +      }
401 +    }
402 +    currentAtomType = currentAtomType->next;
403 +  }
404 +      
405 + #ifdef IS_MPI
406 +  sprintf( checkPointMsg,
407 +           "LJ_FF atom structures successfully sent to fortran\n" );
408 +  MPIcheckPoint();
409 + #endif // is_mpi
410  
411 +  
412  
413    // initialize the atoms
414    
415 +  double bigSigma = 0.0;
416    Atom* thisAtom;
417  
418    for( i=0; i<nAtoms; i++ ){
# Line 399 | Line 431 | void LJ_FF::initializeAtoms( void ){
431      the_atoms[i]->setSigma( currentAtomType->sigma );
432      the_atoms[i]->setIdent( currentAtomType->ident );
433      the_atoms[i]->setLJ();
434 +
435 +    if( bigSigma < currentAtomType->sigma ) bigSigma = currentAtomType->sigma;
436    }
437 +
438 +  
439 + #ifdef IS_MPI
440 +  double tempBig = bigSigma;
441 +  MPI::COMM_WORLD::Allreduce( &tempBig, &bigSigma, 1, MPI_DOUBLE, MPI_MAX );
442 + #endif  //is_mpi
443 +
444 +  //calc rCut and rList
445 +
446 +  entry_plug->rCut = 2.5 * bigSigma;
447 +  if(entry_plug->rCut > (entry_plug->box_x / 2.0)) entry_plug->rCut = entry_plug->box_x / 2.0;
448 +  if(entry_plug->rCut > (entry_plug->box_y / 2.0)) entry_plug->rCut = entry_plug->box_y / 2.0;
449 +  if(entry_plug->rCut > (entry_plug->box_z / 2.0)) entry_plug->rCut = entry_plug->box_z / 2.0;
450  
451 +  entry_plug->rList = entry_plug->rCut + 1.0;
452  
453    // clean up the memory
454    
# Line 411 | Line 459 | void LJ_FF::initializeAtoms( void ){
459    MPIcheckPoint();
460   #endif // is_mpi
461  
462 +  initFortran();
463 +  entry_plug->refreshSim();
464 +
465   }
466  
467   void LJ_FF::initializeBonds( bond_pair* the_bonds ){
# Line 552 | Line 603 | int parseAtomLJ( char *lineBuffer, int lineNum,  atomS
603    }
604    else return 0;
605   }
606 +
607 +
608 + void LJ_FF::doForces( int calcPot ){
609 +
610 +  int i;
611 +  double* frc;
612 +  double* pos;
613 +  short int passedCalcPot = (short int)calcPot;
614 +
615 +  // forces are zeroed here, before any are acumulated.
616 +  // NOTE: do not rezero the forces in Fortran.
617 +
618 +  for(i=0; i<entry_plug->n_atoms; i++){
619 +    entry_plug->atoms[i]->zeroForces();
620 +  }
621 +
622 +  frc = Atom::getFrcArray();
623 +  pos = Atom::getPosArray();
624 +
625 + //   entry_plug->lrPot = -1;
626 +  doLJfortran( pos, frc, &(entry_plug->lrPot), &passedCalcPot );
627 +
628 +
629 + //  fprintf( stderr,
630 + //         "lrPot =  %lf\n", entry_plug->lrPot );
631 +  
632 + }
633 +  
634 + void LJ_FF::initFortran( void ){
635 +  
636 +  int nLocal = entry_plug->n_atoms;
637 +  int *ident;
638 +  int isError;
639 +  int i;
640 +
641 +  ident = new int[nLocal];
642 +
643 +  for(i=0; i<nLocal; i++){
644 +    ident[i] = entry_plug->atoms[i]->getIdent();
645 +  }
646 +
647 +  isError = 0;
648 +  initLJfortran( &nLocal, ident, &isError );
649 +  
650 +  if(isError){
651 +    sprintf( painCave.errMsg,
652 +             "LJ_FF error: There was an error initializing the component list in fortran.\n" );
653 +    painCave.isFatal = 1;
654 +    simError();
655 +  }
656 +
657 +  
658 + #ifdef IS_MPI
659 +  sprintf( checkPointMsg, "LJ_FF successfully initialized the fortran component list.\n" );
660 +  MPIcheckPoint();
661 + #endif // is_mpi
662 +  
663 +  delete[] ident;
664 +
665 + }
666 +  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines