| 88 |  |  | 
| 89 |  |  | 
| 90 |  |  | 
| 91 | < | if( !strcmp( force_field, "TraPPE" ) ) the_ff = new TraPPEFF(); | 
| 92 | < | else if( !strcmp( force_field, "DipoleTest" ) ) the_ff = new DipoleTestFF(); | 
| 93 | < | else if( !strcmp( force_field, "TraPPE_Ex" ) ) the_ff = new TraPPE_ExFF(); | 
| 91 | > | if( !strcmp( force_field, "TraPPE_Ex" ) ) the_ff = new TraPPE_ExFF(); | 
| 92 |  | else if( !strcmp( force_field, "LJ" ) ) the_ff = new LJ_FF(); | 
| 93 |  | else{ | 
| 94 |  | sprintf( painCave.errMsg, | 
| 240 |  |  | 
| 241 |  | globalIndex = mpiSim->divideLabor(); | 
| 242 |  |  | 
| 245 | – |  | 
| 246 | – |  | 
| 243 |  | // set up the local variables | 
| 244 |  |  | 
| 245 |  | int localMol, allMol; | 
| 314 |  |  | 
| 315 |  | if(mol2proc[i] == worldRank ){ | 
| 316 |  | the_molecules[molIndex].setStampID( molCompType[i] ); | 
| 317 | + | the_molecules[molIndex].setMyIndex( molIndex ); | 
| 318 |  | molIndex++; | 
| 319 |  | } | 
| 320 |  | } | 
| 325 |  | for(i=0; i<n_components; i++){ | 
| 326 |  | for(j=0; j<components_nmol[i]; j++ ){ | 
| 327 |  | the_molecules[molIndex].setStampID( i ); | 
| 328 | + | the_molecules[molIndex].setMyIndex( molIndex ); | 
| 329 |  | molIndex++; | 
| 330 |  | } | 
| 331 |  | } | 
| 335 |  |  | 
| 336 |  |  | 
| 337 |  | if( simnfo->n_SRI ){ | 
| 338 | + |  | 
| 339 | + | std::cerr << "n_SRI = " << simnfo->n_SRI << "\n"; | 
| 340 | + |  | 
| 341 |  | Exclude::createArray(simnfo->n_SRI); | 
| 342 |  | the_excludes = new Exclude*[simnfo->n_SRI]; | 
| 343 | + | for( int ex=0; ex<simnfo->n_SRI; ex++) the_excludes[ex] = new Exclude(ex); | 
| 344 |  | simnfo->globalExcludes = new int; | 
| 345 | < | simnfo->n_exclude = tot_SRI; | 
| 345 | > | simnfo->n_exclude = simnfo->n_SRI; | 
| 346 |  | } | 
| 347 |  | else{ | 
| 348 |  |  | 
| 358 |  | // set the arrays into the SimInfo object | 
| 359 |  |  | 
| 360 |  | simnfo->atoms = the_atoms; | 
| 361 | + | simnfo->molecules = the_molecules; | 
| 362 |  | simnfo->nGlobalExcludes = 0; | 
| 363 |  | simnfo->excludes = the_excludes; | 
| 364 |  |  | 
| 657 |  |  | 
| 658 |  | //   new AllLong( simnfo ); | 
| 659 |  |  | 
| 657 | – | if( !strcmp( force_field, "TraPPE" ) ) new Verlet( *simnfo, the_ff ); | 
| 658 | – | if( !strcmp( force_field, "DipoleTest" ) ) new Symplectic( simnfo, the_ff ); | 
| 660 |  | if( !strcmp( force_field, "TraPPE_Ex" ) ) new Symplectic( simnfo, the_ff ); | 
| 661 |  | if( !strcmp( force_field, "LJ" ) ) new Verlet( *simnfo, the_ff ); | 
| 662 |  |  | 
| 663 | + | #ifdef IS_MPI | 
| 664 | + | mpiSim->mpiRefresh(); | 
| 665 | + | #endif | 
| 666 |  |  | 
| 663 | – |  | 
| 667 |  | // initialize the Fortran | 
| 668 | < |  | 
| 668 | > |  | 
| 669 | > |  | 
| 670 |  | simnfo->refreshSim(); | 
| 671 |  |  | 
| 672 |  | if( !strcmp( simnfo->mixingRule, "standard") ){ | 
| 703 |  | BondStamp* currentBond; | 
| 704 |  | BendStamp* currentBend; | 
| 705 |  | TorsionStamp* currentTorsion; | 
| 706 | + |  | 
| 707 | + | bond_pair* theBonds; | 
| 708 | + | bend_set* theBends; | 
| 709 | + | torsion_set* theTorsions; | 
| 710 | + |  | 
| 711 |  |  | 
| 712 |  | //init the forceField paramters | 
| 713 |  |  | 
| 714 |  | the_ff->readParams(); | 
| 715 |  |  | 
| 716 |  |  | 
| 717 | < | // init the molecules | 
| 717 | > | // init the atoms | 
| 718 |  |  | 
| 719 | + | double ux, uy, uz, u, uSqr; | 
| 720 | + |  | 
| 721 |  | atomOffset = 0; | 
| 722 |  | excludeOffset = 0; | 
| 723 |  | for(i=0; i<simnfo->n_mol; i++){ | 
| 734 |  | info.myExcludes = &the_excludes[excludeOffset]; | 
| 735 |  | info.myBonds = new Bond*[info.nBonds]; | 
| 736 |  | info.myBends = new Bend*[info.nBends]; | 
| 737 | < | info.myTorsions = new Torsions*[info.nTorsions]; | 
| 737 | > | info.myTorsions = new Torsion*[info.nTorsions]; | 
| 738 |  |  | 
| 739 |  | theBonds = new bond_pair[info.nBonds]; | 
| 740 |  | theBends = new bend_set[info.nBends]; | 
| 744 |  |  | 
| 745 |  | for(j=0; j<info.nAtoms; j++){ | 
| 746 |  |  | 
| 747 | < | currentAtom = theComponents[stampID]->getAtom( j ); | 
| 747 | > | currentAtom = comp_stamps[stampID]->getAtom( j ); | 
| 748 |  | if( currentAtom->haveOrientation() ){ | 
| 749 |  |  | 
| 750 |  | dAtom = new DirectionalAtom(j + atomOffset); | 
| 785 |  | theBonds[j].a = currentBond->getA() + atomOffset; | 
| 786 |  | theBonds[j].b = currentBond->getB() + atomOffset; | 
| 787 |  |  | 
| 788 | < | exI = theBonds[i].a; | 
| 789 | < | exJ = theBonds[i].b; | 
| 788 | > | exI = theBonds[j].a; | 
| 789 | > | exJ = theBonds[j].b; | 
| 790 |  |  | 
| 791 |  | // exclude_I must always be the smaller of the pair | 
| 792 |  | if( exI > exJ ){ | 
| 802 |  |  | 
| 803 |  | the_excludes[j+excludeOffset]->setPair( exI, exJ ); | 
| 804 |  | #else  // isn't MPI | 
| 805 | + |  | 
| 806 |  | the_excludes[j+excludeOffset]->setPair( (exI+1), (exJ+1) ); | 
| 807 |  | #endif  //is_mpi | 
| 808 |  | } | 
| 818 |  |  | 
| 819 |  | if( currentBend->haveExtras() ){ | 
| 820 |  |  | 
| 821 | < | extras = current_bend->getExtras(); | 
| 821 | > | extras = currentBend->getExtras(); | 
| 822 |  | current_extra = extras; | 
| 823 |  |  | 
| 824 |  | while( current_extra != NULL ){ | 
| 840 |  |  | 
| 841 |  | default: | 
| 842 |  | sprintf( painCave.errMsg, | 
| 843 | < | "SimSetup Error: ghostVectorSource was neiter a " | 
| 843 | > | "SimSetup Error: ghostVectorSource was neither a " | 
| 844 |  | "double nor an int.\n" | 
| 845 |  | "-->Bend[%d] in %s\n", | 
| 846 |  | j, comp_stamps[stampID]->getID() ); | 
| 934 |  |  | 
| 935 |  |  | 
| 936 |  | the_molecules[i].initialize( info ); | 
| 937 | + |  | 
| 938 | + |  | 
| 939 |  | atomOffset += info.nAtoms; | 
| 940 | + | delete[] theBonds; | 
| 941 | + | delete[] theBends; | 
| 942 | + | delete[] theTorsions; | 
| 943 |  | } | 
| 944 |  |  | 
| 945 | + | #ifdef IS_MPI | 
| 946 | + | sprintf( checkPointMsg, "all molecules initialized succesfully" ); | 
| 947 | + | MPIcheckPoint(); | 
| 948 | + | #endif // is_mpi | 
| 949 | + |  | 
| 950 |  | // clean up the forcefield | 
| 951 |  | the_ff->calcRcut(); | 
| 952 |  | the_ff->cleanMe(); | 
| 953 | + |  | 
| 954 |  | } | 
| 955 |  |  | 
| 956 |  | void SimSetup::initFromBass( void ){ |