# | Line 66 | Line 66 | void SimSetup::createSim( void ){ | |
---|---|---|
66 | ||
67 | MakeStamps *the_stamps; | |
68 | Globals* the_globals; | |
69 | + | ExtendedSystem* the_extendedsystem; |
70 | int i, j; | |
71 | ||
72 | // get the stamps and globals; | |
# | Line 80 | Line 81 | void SimSetup::createSim( void ){ | |
81 | // get the ones we know are there, yet still may need some work. | |
82 | n_components = the_globals->getNComponents(); | |
83 | strcpy( force_field, the_globals->getForceField() ); | |
84 | + | |
85 | + | // get the ensemble and set up an extended system if we need it: |
86 | strcpy( ensemble, the_globals->getEnsemble() ); | |
87 | + | if( !strcasecmp( ensemble, "NPT" ) ) { |
88 | + | the_extendedsystem = new ExtendedSystem( simnfo ); |
89 | + | the_extendedsystem->setTargetTemp(the_globals->getTargetTemp()); |
90 | + | the_extendedsystem->setTargetPressure(the_globals->getTargetPressure()); |
91 | + | } else if ( !strcasecmp( ensemble, "NVT") ) { |
92 | + | the_extendedsystem = new ExtendedSystem( simnfo ); |
93 | + | the_extendedsystem->setTargetTemp(the_globals->getTargetTemp()); |
94 | + | } else if ( !strcasecmp( ensemble, "NVE") ) { |
95 | + | } else { |
96 | + | sprintf( painCave.errMsg, |
97 | + | "SimSetup Warning. Unrecognized Ensemble -> %s, " |
98 | + | "reverting to NVE for this simulation.\n", |
99 | + | ensemble ); |
100 | + | painCave.isFatal = 0; |
101 | + | simError(); |
102 | + | strcpy( ensemble, "NVE" ); |
103 | + | } |
104 | strcpy( simnfo->ensemble, ensemble ); | |
105 | ||
106 | strcpy( simnfo->mixingRule, the_globals->getMixingRule() ); | |
107 | simnfo->usePBC = the_globals->getPBC(); | |
108 | ||
109 | < | |
110 | < | |
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(); |
94 | < | else if( !strcmp( force_field, "LJ" ) ) the_ff = new LJ_FF(); |
109 | > | if( !strcmp( force_field, "TraPPE_Ex" ) ) the_ff = new TraPPE_ExFF(); |
110 | > | else if( !strcasecmp( force_field, "LJ" ) ) the_ff = new LJ_FF(); |
111 | else{ | |
112 | sprintf( painCave.errMsg, | |
113 | "SimSetup Error. Unrecognized force field -> %s\n", | |
# | Line 242 | Line 258 | void SimSetup::createSim( void ){ | |
258 | ||
259 | globalIndex = mpiSim->divideLabor(); | |
260 | ||
245 | – | |
246 | – | |
261 | // set up the local variables | |
262 | ||
263 | int localMol, allMol; | |
264 | int local_atoms, local_bonds, local_bends, local_torsions, local_SRI; | |
265 | + | |
266 | + | int* mol2proc = mpiSim->getMolToProcMap(); |
267 | + | int* molCompType = mpiSim->getMolComponentType(); |
268 | ||
269 | allMol = 0; | |
270 | localMol = 0; | |
# | Line 259 | Line 276 | void SimSetup::createSim( void ){ | |
276 | ||
277 | for( j=0; j<components_nmol[i]; j++ ){ | |
278 | ||
279 | < | if( mpiSim->getMyMolStart() <= allMol && |
263 | < | allMol <= mpiSim->getMyMolEnd() ){ |
279 | > | if( mol2proc[j] == worldRank ){ |
280 | ||
281 | local_atoms += comp_stamps[i]->getNAtoms(); | |
282 | local_bonds += comp_stamps[i]->getNBonds(); | |
# | Line 279 | Line 295 | void SimSetup::createSim( void ){ | |
295 | if( local_atoms != simnfo->n_atoms ){ | |
296 | sprintf( painCave.errMsg, | |
297 | "SimSetup error: mpiSim's localAtom (%d) and SimSetup's" | |
298 | < | " localAtom (%d) are note equal.\n", |
298 | > | " localAtom (%d) are not equal.\n", |
299 | simnfo->n_atoms, | |
300 | local_atoms ); | |
301 | painCave.isFatal = 1; | |
# | Line 304 | Line 320 | void SimSetup::createSim( void ){ | |
320 | Atom::createArrays(simnfo->n_atoms); | |
321 | the_atoms = new Atom*[simnfo->n_atoms]; | |
322 | the_molecules = new Molecule[simnfo->n_mol]; | |
323 | + | int molIndex; |
324 | ||
325 | + | // initialize the molecule's stampID's |
326 | ||
327 | + | #ifdef IS_MPI |
328 | + | |
329 | + | |
330 | + | molIndex = 0; |
331 | + | for(i=0; i<mpiSim->getTotNmol(); i++){ |
332 | + | |
333 | + | if(mol2proc[i] == worldRank ){ |
334 | + | the_molecules[molIndex].setStampID( molCompType[i] ); |
335 | + | the_molecules[molIndex].setMyIndex( molIndex ); |
336 | + | molIndex++; |
337 | + | } |
338 | + | } |
339 | + | |
340 | + | #else // is_mpi |
341 | + | |
342 | + | molIndex = 0; |
343 | + | for(i=0; i<n_components; i++){ |
344 | + | for(j=0; j<components_nmol[i]; j++ ){ |
345 | + | the_molecules[molIndex].setStampID( i ); |
346 | + | the_molecules[molIndex].setMyIndex( molIndex ); |
347 | + | molIndex++; |
348 | + | } |
349 | + | } |
350 | + | |
351 | + | |
352 | + | #endif // is_mpi |
353 | + | |
354 | + | |
355 | if( simnfo->n_SRI ){ | |
356 | + | |
357 | Exclude::createArray(simnfo->n_SRI); | |
358 | the_excludes = new Exclude*[simnfo->n_SRI]; | |
359 | + | for( int ex=0; ex<simnfo->n_SRI; ex++) the_excludes[ex] = new Exclude(ex); |
360 | simnfo->globalExcludes = new int; | |
361 | < | simnfo->n_exclude = tot_SRI; |
361 | > | simnfo->n_exclude = simnfo->n_SRI; |
362 | } | |
363 | else{ | |
364 | ||
# | Line 326 | Line 374 | void SimSetup::createSim( void ){ | |
374 | // set the arrays into the SimInfo object | |
375 | ||
376 | simnfo->atoms = the_atoms; | |
377 | < | simnfo->sr_interactions = the_sris; |
377 | > | simnfo->molecules = the_molecules; |
378 | simnfo->nGlobalExcludes = 0; | |
379 | simnfo->excludes = the_excludes; | |
380 | ||
# | Line 383 | Line 431 | void SimSetup::createSim( void ){ | |
431 | ||
432 | the_ff->setSimInfo( simnfo ); | |
433 | ||
434 | < | makeAtoms(); |
434 | > | makeMolecules(); |
435 | simnfo->identArray = new int[simnfo->n_atoms]; | |
436 | for(i=0; i<simnfo->n_atoms; i++){ | |
437 | simnfo->identArray[i] = the_atoms[i]->getIdent(); | |
438 | } | |
439 | ||
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 | – | |
440 | if (the_globals->getUseRF() ) { | |
441 | simnfo->useReactionField = 1; | |
442 | ||
# | Line 638 | Line 673 | void SimSetup::createSim( void ){ | |
673 | ||
674 | // new AllLong( simnfo ); | |
675 | ||
676 | < | if( !strcmp( force_field, "TraPPE" ) ) new Verlet( *simnfo, the_ff ); |
677 | < | if( !strcmp( force_field, "DipoleTest" ) ) new Symplectic( simnfo, the_ff ); |
678 | < | if( !strcmp( force_field, "TraPPE_Ex" ) ) new Symplectic( simnfo, the_ff ); |
679 | < | if( !strcmp( force_field, "LJ" ) ) new Verlet( *simnfo, the_ff ); |
676 | > | if( !strcmp( force_field, "TraPPE_Ex" ) ) new Symplectic(simnfo, |
677 | > | the_ff, |
678 | > | the_extendedsystem); |
679 | > | if( !strcmp( force_field, "LJ" ) ) new Verlet( *simnfo, |
680 | > | the_ff, |
681 | > | the_extendedsystem ); |
682 | ||
683 | + | #ifdef IS_MPI |
684 | + | mpiSim->mpiRefresh(); |
685 | + | #endif |
686 | ||
647 | – | |
687 | // initialize the Fortran | |
688 | < | |
688 | > | |
689 | > | |
690 | simnfo->refreshSim(); | |
691 | ||
692 | if( !strcmp( simnfo->mixingRule, "standard") ){ | |
# | Line 683 | Line 723 | void SimSetup::makeMolecules( void ){ | |
723 | BondStamp* currentBond; | |
724 | BendStamp* currentBend; | |
725 | TorsionStamp* currentTorsion; | |
726 | + | |
727 | + | bond_pair* theBonds; |
728 | + | bend_set* theBends; |
729 | + | torsion_set* theTorsions; |
730 | + | |
731 | ||
732 | //init the forceField paramters | |
733 | ||
734 | the_ff->readParams(); | |
735 | ||
736 | ||
737 | < | // init the molecules |
737 | > | // init the atoms |
738 | ||
739 | + | double ux, uy, uz, u, uSqr; |
740 | + | |
741 | atomOffset = 0; | |
742 | excludeOffset = 0; | |
743 | for(i=0; i<simnfo->n_mol; i++){ | |
# | Line 707 | Line 754 | void SimSetup::makeMolecules( void ){ | |
754 | info.myExcludes = &the_excludes[excludeOffset]; | |
755 | info.myBonds = new Bond*[info.nBonds]; | |
756 | info.myBends = new Bend*[info.nBends]; | |
757 | < | info.myTorsions = new Torsions*[info.nTorsions]; |
757 | > | info.myTorsions = new Torsion*[info.nTorsions]; |
758 | ||
759 | theBonds = new bond_pair[info.nBonds]; | |
760 | theBends = new bend_set[info.nBends]; | |
# | Line 717 | Line 764 | void SimSetup::makeMolecules( void ){ | |
764 | ||
765 | for(j=0; j<info.nAtoms; j++){ | |
766 | ||
767 | < | currentAtom = theComponents[stampID]->getAtom( j ); |
767 | > | currentAtom = comp_stamps[stampID]->getAtom( j ); |
768 | if( currentAtom->haveOrientation() ){ | |
769 | ||
770 | dAtom = new DirectionalAtom(j + atomOffset); | |
# | Line 758 | Line 805 | void SimSetup::makeMolecules( void ){ | |
805 | theBonds[j].a = currentBond->getA() + atomOffset; | |
806 | theBonds[j].b = currentBond->getB() + atomOffset; | |
807 | ||
808 | < | exI = theBonds[i].a; |
809 | < | exJ = theBonds[i].b; |
808 | > | exI = theBonds[j].a; |
809 | > | exJ = theBonds[j].b; |
810 | ||
811 | // exclude_I must always be the smaller of the pair | |
812 | if( exI > exJ ){ | |
# | Line 775 | Line 822 | void SimSetup::makeMolecules( void ){ | |
822 | ||
823 | the_excludes[j+excludeOffset]->setPair( exI, exJ ); | |
824 | #else // isn't MPI | |
825 | + | |
826 | the_excludes[j+excludeOffset]->setPair( (exI+1), (exJ+1) ); | |
827 | #endif //is_mpi | |
828 | } | |
# | Line 790 | Line 838 | void SimSetup::makeMolecules( void ){ | |
838 | ||
839 | if( currentBend->haveExtras() ){ | |
840 | ||
841 | < | extras = current_bend->getExtras(); |
841 | > | extras = currentBend->getExtras(); |
842 | current_extra = extras; | |
843 | ||
844 | while( current_extra != NULL ){ | |
# | Line 812 | Line 860 | void SimSetup::makeMolecules( void ){ | |
860 | ||
861 | default: | |
862 | sprintf( painCave.errMsg, | |
863 | < | "SimSetup Error: ghostVectorSource was neiter a " |
863 | > | "SimSetup Error: ghostVectorSource was neither a " |
864 | "double nor an int.\n" | |
865 | "-->Bend[%d] in %s\n", | |
866 | j, comp_stamps[stampID]->getID() ); | |
# | Line 906 | Line 954 | void SimSetup::makeMolecules( void ){ | |
954 | ||
955 | ||
956 | the_molecules[i].initialize( info ); | |
957 | + | |
958 | + | |
959 | atomOffset += info.nAtoms; | |
960 | + | delete[] theBonds; |
961 | + | delete[] theBends; |
962 | + | delete[] theTorsions; |
963 | } | |
964 | ||
965 | + | #ifdef IS_MPI |
966 | + | sprintf( checkPointMsg, "all molecules initialized succesfully" ); |
967 | + | MPIcheckPoint(); |
968 | + | #endif // is_mpi |
969 | + | |
970 | // clean up the forcefield | |
971 | the_ff->calcRcut(); | |
972 | the_ff->cleanMe(); | |
973 | + | |
974 | } | |
975 | ||
976 | void SimSetup::initFromBass( void ){ |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |