| 8 | 
  | 
#include "UseTheForce/ForceFields.hpp" | 
| 9 | 
  | 
#include "primitives/SRI.hpp" | 
| 10 | 
  | 
#include "utils/simError.h" | 
| 11 | 
< | 
 | 
| 12 | 
< | 
#include "UseTheForce/fortranWrappers.hpp" | 
| 11 | 
> | 
#include "types/DirectionalAtomType.hpp" | 
| 12 | 
> | 
#include "UseTheForce/DarkSide/lj_interface.h" | 
| 13 | 
> | 
#include "UseTheForce/DarkSide/dipole_interface.h" | 
| 14 | 
> | 
#include "UseTheForce/DarkSide/sticky_interface.h" | 
| 15 | 
  | 
 | 
| 16 | 
  | 
#ifdef IS_MPI | 
| 17 | 
  | 
#include "UseTheForce/mpiForceField.h" | 
| 454 | 
  | 
 | 
| 455 | 
  | 
DUFF::DUFF(){ | 
| 456 | 
  | 
 | 
| 457 | 
< | 
  char fileName[200]; | 
| 458 | 
< | 
  char* ffPath_env = "FORCE_PARAM_PATH"; | 
| 457 | 
< | 
  char* ffPath; | 
| 458 | 
< | 
  char temp[200]; | 
| 457 | 
> | 
  string fileName; | 
| 458 | 
> | 
  string tempString; | 
| 459 | 
  | 
 | 
| 460 | 
  | 
  headAtomType       = NULL;  | 
| 461 | 
  | 
  currentAtomType    = NULL; | 
| 466 | 
  | 
  headTorsionType    = NULL;  | 
| 467 | 
  | 
  currentTorsionType = NULL; | 
| 468 | 
  | 
 | 
| 469 | 
– | 
  // do the funtion wrapping | 
| 470 | 
– | 
  wrapMeFF( this ); | 
| 469 | 
  | 
 | 
| 472 | 
– | 
 | 
| 470 | 
  | 
#ifdef IS_MPI | 
| 471 | 
  | 
  int i; | 
| 472 | 
  | 
   | 
| 565 | 
  | 
     | 
| 566 | 
  | 
    // generate the force file name | 
| 567 | 
  | 
     | 
| 568 | 
< | 
    strcpy( fileName, "DUFF.frc" );  | 
| 568 | 
> | 
    fileName = "DUFF.frc"; | 
| 569 | 
  | 
    //    fprintf( stderr,"Trying to open %s\n", fileName ); | 
| 570 | 
  | 
     | 
| 571 | 
  | 
    // attempt to open the file in the current directory first. | 
| 572 | 
  | 
     | 
| 573 | 
< | 
    frcFile = fopen( fileName, "r" ); | 
| 573 | 
> | 
    frcFile = fopen( fileName.c_str(), "r" ); | 
| 574 | 
  | 
     | 
| 575 | 
  | 
    if( frcFile == NULL ){ | 
| 576 | 
  | 
       | 
| 577 | 
  | 
      // next see if the force path enviorment variable is set | 
| 578 | 
< | 
       | 
| 579 | 
< | 
      ffPath = getenv( ffPath_env ); | 
| 580 | 
< | 
      if( ffPath == NULL ) { | 
| 581 | 
< | 
        STR_DEFINE(ffPath, FRC_PATH ); | 
| 582 | 
< | 
      } | 
| 578 | 
> | 
 | 
| 579 | 
> | 
      tempString = ffPath + "/" + fileName; | 
| 580 | 
> | 
      fileName = tempString; | 
| 581 | 
> | 
             | 
| 582 | 
> | 
      frcFile = fopen( fileName.c_str(), "r" ); | 
| 583 | 
  | 
       | 
| 587 | 
– | 
       | 
| 588 | 
– | 
      strcpy( temp, ffPath ); | 
| 589 | 
– | 
      strcat( temp, "/" ); | 
| 590 | 
– | 
      strcat( temp, fileName ); | 
| 591 | 
– | 
      strcpy( fileName, temp ); | 
| 592 | 
– | 
       | 
| 593 | 
– | 
      frcFile = fopen( fileName, "r" ); | 
| 594 | 
– | 
       | 
| 584 | 
  | 
      if( frcFile == NULL ){ | 
| 585 | 
  | 
         | 
| 586 | 
  | 
        sprintf( painCave.errMsg, | 
| 588 | 
  | 
                 "\t%s\n" | 
| 589 | 
  | 
                 "\tHave you tried setting the FORCE_PARAM_PATH environment " | 
| 590 | 
  | 
                 "variable?\n", | 
| 591 | 
< | 
                 fileName ); | 
| 591 | 
> | 
                 fileName.c_str() ); | 
| 592 | 
  | 
        painCave.severity = OOPSE_ERROR; | 
| 593 | 
  | 
        painCave.isFatal = 1; | 
| 594 | 
  | 
        simError(); | 
| 642 | 
  | 
} | 
| 643 | 
  | 
 | 
| 644 | 
  | 
 | 
| 645 | 
< | 
void DUFF::initForceField( int ljMixRule ){ | 
| 645 | 
> | 
void DUFF::initForceField(){ | 
| 646 | 
  | 
   | 
| 647 | 
< | 
  initFortran( ljMixRule, entry_plug->useReactionField ); | 
| 647 | 
> | 
  initFortran( entry_plug->useReactionField ); | 
| 648 | 
  | 
} | 
| 649 | 
  | 
 | 
| 661 | 
– | 
double DUFF::getAtomTypeMass (char* atomType) { | 
| 650 | 
  | 
 | 
| 663 | 
– | 
  currentAtomType = headAtomType->find( atomType ); | 
| 664 | 
– | 
  if( currentAtomType == NULL ){ | 
| 665 | 
– | 
    sprintf( painCave.errMsg, | 
| 666 | 
– | 
            "AtomType error, %s not found in force file.\n", | 
| 667 | 
– | 
             atomType ); | 
| 668 | 
– | 
    painCave.isFatal = 1; | 
| 669 | 
– | 
    simError(); | 
| 670 | 
– | 
  } | 
| 671 | 
– | 
 | 
| 672 | 
– | 
  return currentAtomType->mass; | 
| 673 | 
– | 
} | 
| 674 | 
– | 
 | 
| 651 | 
  | 
void DUFF::readParams( void ){ | 
| 652 | 
  | 
 | 
| 653 | 
< | 
  int identNum; | 
| 653 | 
> | 
  int identNum, isError; | 
| 654 | 
  | 
   | 
| 655 | 
  | 
  atomStruct atomInfo; | 
| 656 | 
  | 
  bondStruct bondInfo; | 
| 657 | 
  | 
  bendStruct bendInfo; | 
| 658 | 
  | 
  torsionStruct torsionInfo; | 
| 659 | 
+ | 
 | 
| 660 | 
+ | 
  AtomType* at; | 
| 661 | 
  | 
   | 
| 662 | 
  | 
  bigSigma = 0.0; | 
| 663 | 
  | 
 | 
| 758 | 
  | 
  } | 
| 759 | 
  | 
 | 
| 760 | 
  | 
#endif // is_mpi | 
| 761 | 
< | 
 | 
| 784 | 
< | 
 | 
| 785 | 
< | 
 | 
| 786 | 
< | 
  // call new A_types in fortran | 
| 787 | 
< | 
   | 
| 788 | 
< | 
  int isError; | 
| 789 | 
< | 
   | 
| 761 | 
> | 
  | 
| 762 | 
  | 
  // dummy variables | 
| 763 | 
< | 
   | 
| 792 | 
< | 
  int isGB = 0; | 
| 793 | 
< | 
  int isLJ = 1; | 
| 794 | 
< | 
  int isEAM =0; | 
| 795 | 
< | 
  int isCharge = 0; | 
| 796 | 
< | 
  double charge=0.0; | 
| 797 | 
< | 
     | 
| 763 | 
> | 
       | 
| 764 | 
  | 
  currentAtomType = headAtomType->next;; | 
| 765 | 
< | 
  while( currentAtomType != NULL ){ | 
| 766 | 
< | 
     | 
| 767 | 
< | 
    if(currentAtomType->isDipole) entry_plug->useDipoles = 1; | 
| 768 | 
< | 
    if(currentAtomType->isSSD) { | 
| 769 | 
< | 
      entry_plug->useSticky = 1; | 
| 770 | 
< | 
      set_sticky_params( &(currentAtomType->w0), &(currentAtomType->v0),  | 
| 771 | 
< | 
                         &(currentAtomType->v0p),  | 
| 772 | 
< | 
                         &(currentAtomType->rl), &(currentAtomType->ru),  | 
| 773 | 
< | 
                         &(currentAtomType->rlp), &(currentAtomType->rup)); | 
| 765 | 
> | 
  while( currentAtomType != NULL ){     | 
| 766 | 
> | 
 | 
| 767 | 
> | 
    if( currentAtomType->name[0] != '\0' ){ | 
| 768 | 
> | 
       | 
| 769 | 
> | 
      if (currentAtomType->isSSD || currentAtomType->isDipole)  | 
| 770 | 
> | 
        at = new DirectionalAtomType(); | 
| 771 | 
> | 
      else  | 
| 772 | 
> | 
        at = new AtomType(); | 
| 773 | 
> | 
       | 
| 774 | 
> | 
      if (currentAtomType->isSSD) { | 
| 775 | 
> | 
        ((DirectionalAtomType*)at)->setSticky(); | 
| 776 | 
> | 
        entry_plug->useSticky = 1; | 
| 777 | 
> | 
      } | 
| 778 | 
> | 
       | 
| 779 | 
> | 
      if (currentAtomType->isDipole) { | 
| 780 | 
> | 
        ((DirectionalAtomType*)at)->setDipole(); | 
| 781 | 
> | 
        entry_plug->useDipoles = 1;                | 
| 782 | 
> | 
      } | 
| 783 | 
> | 
       | 
| 784 | 
> | 
      at->setIdent(currentAtomType->ident); | 
| 785 | 
> | 
      at->setName(currentAtomType->name);      | 
| 786 | 
> | 
      at->setLennardJones(); | 
| 787 | 
> | 
      at->complete(); | 
| 788 | 
  | 
    } | 
| 789 | 
+ | 
    currentAtomType = currentAtomType->next; | 
| 790 | 
+ | 
  } | 
| 791 | 
+ | 
   | 
| 792 | 
+ | 
  currentAtomType = headAtomType->next;; | 
| 793 | 
+ | 
  while( currentAtomType != NULL ){     | 
| 794 | 
  | 
 | 
| 795 | 
  | 
    if( currentAtomType->name[0] != '\0' ){ | 
| 796 | 
  | 
      isError = 0; | 
| 797 | 
< | 
      makeAtype( &(currentAtomType->ident), | 
| 798 | 
< | 
                 &isLJ, | 
| 814 | 
< | 
                 &(currentAtomType->isSSD), | 
| 815 | 
< | 
                 &(currentAtomType->isDipole), | 
| 816 | 
< | 
                 &isGB, | 
| 817 | 
< | 
                 &isEAM, | 
| 818 | 
< | 
                 &isCharge, | 
| 819 | 
< | 
                 &(currentAtomType->epslon), | 
| 820 | 
< | 
                 &(currentAtomType->sigma), | 
| 821 | 
< | 
                 &charge, | 
| 822 | 
< | 
                 &(currentAtomType->dipole), | 
| 823 | 
< | 
                 &isError ); | 
| 797 | 
> | 
      newLJtype( &(currentAtomType->ident), &(currentAtomType->sigma),  | 
| 798 | 
> | 
                 &(currentAtomType->epslon), &isError); | 
| 799 | 
  | 
      if( isError ){ | 
| 800 | 
< | 
        sprintf( painCave.errMsg, | 
| 801 | 
< | 
                 "Error initializing the \"%s\" atom type in fortran\n", | 
| 802 | 
< | 
                 currentAtomType->name ); | 
| 803 | 
< | 
        painCave.isFatal = 1; | 
| 804 | 
< | 
        simError(); | 
| 800 | 
> | 
        sprintf( painCave.errMsg, | 
| 801 | 
> | 
                 "Error initializing the \"%s\" LJ type in fortran\n", | 
| 802 | 
> | 
                 currentAtomType->name ); | 
| 803 | 
> | 
        painCave.isFatal = 1; | 
| 804 | 
> | 
        simError(); | 
| 805 | 
  | 
      } | 
| 806 | 
+ | 
            | 
| 807 | 
+ | 
      if (currentAtomType->isDipole) { | 
| 808 | 
+ | 
        newDipoleType(&(currentAtomType->ident), &(currentAtomType->dipole), | 
| 809 | 
+ | 
                      &isError); | 
| 810 | 
+ | 
        if( isError ){ | 
| 811 | 
+ | 
          sprintf( painCave.errMsg, | 
| 812 | 
+ | 
                   "Error initializing the \"%s\" dipole type in fortran\n", | 
| 813 | 
+ | 
                   currentAtomType->name ); | 
| 814 | 
+ | 
          painCave.isFatal = 1; | 
| 815 | 
+ | 
          simError(); | 
| 816 | 
+ | 
        } | 
| 817 | 
+ | 
      } | 
| 818 | 
+ | 
       | 
| 819 | 
+ | 
      if(currentAtomType->isSSD) {         | 
| 820 | 
+ | 
        makeStickyType( &(currentAtomType->w0), &(currentAtomType->v0),  | 
| 821 | 
+ | 
                        &(currentAtomType->v0p),  | 
| 822 | 
+ | 
                        &(currentAtomType->rl), &(currentAtomType->ru),  | 
| 823 | 
+ | 
                        &(currentAtomType->rlp), &(currentAtomType->rup)); | 
| 824 | 
+ | 
      } | 
| 825 | 
+ | 
       | 
| 826 | 
  | 
    } | 
| 827 | 
  | 
    currentAtomType = currentAtomType->next; | 
| 828 | 
  | 
  } | 
| 1086 | 
  | 
 | 
| 1087 | 
  | 
#endif // is_mpi | 
| 1088 | 
  | 
 | 
| 1089 | 
< | 
  entry_plug->useLJ = 1; | 
| 1089 | 
> | 
  entry_plug->useLennardJones = 1; | 
| 1090 | 
  | 
} | 
| 1091 | 
  | 
 | 
| 1092 | 
  | 
 |