# | Line 88 | Line 88 | void SimSetup::createSim( void ){ | |
---|---|---|
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, | |
# | Line 242 | Line 240 | void SimSetup::createSim( void ){ | |
240 | ||
241 | globalIndex = mpiSim->divideLabor(); | |
242 | ||
245 | – | |
246 | – | |
243 | // set up the local variables | |
244 | ||
245 | int localMol, allMol; | |
246 | int local_atoms, local_bonds, local_bends, local_torsions, local_SRI; | |
247 | + | |
248 | + | int* mol2proc = mpiSim->getMolToProcMap(); |
249 | + | int* molCompType = mpiSim->getMolComponentType(); |
250 | ||
251 | allMol = 0; | |
252 | localMol = 0; | |
# | Line 259 | Line 258 | void SimSetup::createSim( void ){ | |
258 | ||
259 | for( j=0; j<components_nmol[i]; j++ ){ | |
260 | ||
261 | < | if( mpiSim->getMyMolStart() <= allMol && |
263 | < | allMol <= mpiSim->getMyMolEnd() ){ |
261 | > | if( mol2proc[j] == worldRank ){ |
262 | ||
263 | local_atoms += comp_stamps[i]->getNAtoms(); | |
264 | local_bonds += comp_stamps[i]->getNBonds(); | |
# | Line 279 | Line 277 | void SimSetup::createSim( void ){ | |
277 | if( local_atoms != simnfo->n_atoms ){ | |
278 | sprintf( painCave.errMsg, | |
279 | "SimSetup error: mpiSim's localAtom (%d) and SimSetup's" | |
280 | < | " localAtom (%d) are note equal.\n", |
280 | > | " localAtom (%d) are not equal.\n", |
281 | simnfo->n_atoms, | |
282 | local_atoms ); | |
283 | painCave.isFatal = 1; | |
# | Line 304 | Line 302 | void SimSetup::createSim( void ){ | |
302 | Atom::createArrays(simnfo->n_atoms); | |
303 | the_atoms = new Atom*[simnfo->n_atoms]; | |
304 | the_molecules = new Molecule[simnfo->n_mol]; | |
305 | + | int molIndex; |
306 | ||
307 | + | // initialize the molecule's stampID's |
308 | ||
309 | + | #ifdef IS_MPI |
310 | + | |
311 | + | |
312 | + | molIndex = 0; |
313 | + | for(i=0; i<mpiSim->getTotNmol(); i++){ |
314 | + | |
315 | + | if(mol2proc[i] == worldRank ){ |
316 | + | the_molecules[molIndex].setStampID( molCompType[i] ); |
317 | + | the_molecules[molIndex].setMyIndex( molIndex ); |
318 | + | molIndex++; |
319 | + | } |
320 | + | } |
321 | + | |
322 | + | #else // is_mpi |
323 | + | |
324 | + | molIndex = 0; |
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 | + | } |
332 | + | |
333 | + | |
334 | + | #endif // is_mpi |
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 | ||
# | Line 326 | Line 358 | void SimSetup::createSim( void ){ | |
358 | // set the arrays into the SimInfo object | |
359 | ||
360 | simnfo->atoms = the_atoms; | |
361 | < | simnfo->sr_interactions = the_sris; |
361 | > | simnfo->molecules = the_molecules; |
362 | simnfo->nGlobalExcludes = 0; | |
363 | simnfo->excludes = the_excludes; | |
364 | ||
# | Line 383 | Line 415 | void SimSetup::createSim( void ){ | |
415 | ||
416 | the_ff->setSimInfo( simnfo ); | |
417 | ||
418 | < | makeAtoms(); |
418 | > | makeMolecules(); |
419 | simnfo->identArray = new int[simnfo->n_atoms]; | |
420 | for(i=0; i<simnfo->n_atoms; i++){ | |
421 | simnfo->identArray[i] = the_atoms[i]->getIdent(); | |
422 | } | |
423 | ||
392 | – | if( tot_bonds ){ |
393 | – | makeBonds(); |
394 | – | } |
395 | – | |
396 | – | if( tot_bends ){ |
397 | – | makeBends(); |
398 | – | } |
399 | – | |
400 | – | if( tot_torsions ){ |
401 | – | makeTorsions(); |
402 | – | } |
403 | – | |
404 | – | |
424 | if (the_globals->getUseRF() ) { | |
425 | simnfo->useReactionField = 1; | |
426 | ||
# | Line 638 | Line 657 | void SimSetup::createSim( void ){ | |
657 | ||
658 | // new AllLong( simnfo ); | |
659 | ||
641 | – | if( !strcmp( force_field, "TraPPE" ) ) new Verlet( *simnfo, the_ff ); |
642 | – | 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 | < | |
663 | > | #ifdef IS_MPI |
664 | > | mpiSim->mpiRefresh(); |
665 | > | #endif |
666 | ||
667 | // initialize the Fortran | |
668 | < | |
668 | > | |
669 | > | |
670 | simnfo->refreshSim(); | |
671 | ||
672 | if( !strcmp( simnfo->mixingRule, "standard") ){ | |
# | Line 683 | Line 703 | void SimSetup::makeMolecules( void ){ | |
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++){ | |
# | Line 707 | Line 734 | void SimSetup::makeMolecules( void ){ | |
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]; | |
# | Line 717 | Line 744 | void SimSetup::makeMolecules( void ){ | |
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); | |
# | Line 758 | Line 785 | void SimSetup::makeMolecules( void ){ | |
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 ){ | |
# | Line 775 | Line 802 | void SimSetup::makeMolecules( void ){ | |
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 | } | |
# | Line 790 | Line 818 | void SimSetup::makeMolecules( void ){ | |
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 ){ | |
# | Line 812 | Line 840 | void SimSetup::makeMolecules( void ){ | |
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() ); | |
# | Line 906 | Line 934 | void SimSetup::makeMolecules( void ){ | |
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 ){ |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |