ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/SimSetup.cpp
(Generate patch)

Comparing trunk/OOPSE/libmdtools/SimSetup.cpp (file contents):
Revision 422 by mmeineke, Thu Mar 27 19:21:42 2003 UTC vs.
Revision 604 by gezelter, Tue Jul 15 03:08:00 2003 UTC

# Line 12 | Line 12 | SimSetup::SimSetup(){
12   #include "mpiSimulation.hpp"
13   #endif
14  
15 + // some defines for ensemble and Forcefield  cases
16 +
17 + #define NVE_ENS   0
18 + #define NVT_ENS   1
19 + #define NPTi_ENS  2
20 + #define NPTf_ENS  3
21 + #define NPTim_ENS 4
22 + #define NPTfm_ENS 5
23 +
24 +
25 + #define FF_DUFF 0
26 + #define FF_LJ   1
27 +
28 +
29   SimSetup::SimSetup(){
30    stamps = new MakeStamps();
31    globals = new Globals();
# Line 66 | Line 80 | void SimSetup::createSim( void ){
80  
81    MakeStamps *the_stamps;
82    Globals* the_globals;
83 <  int i, j;
83 >  int i, j, k, globalAtomIndex;
84 >  
85 >  int ensembleCase;
86 >  int ffCase;
87 >  
88 >  ensembleCase = -1;
89 >  ffCase = -1;
90  
91    // get the stamps and globals;
92    the_stamps = stamps;
# Line 80 | Line 100 | void SimSetup::createSim( void ){
100    // get the ones we know are there, yet still may need some work.
101    n_components = the_globals->getNComponents();
102    strcpy( force_field, the_globals->getForceField() );
103 +
104 +  if( !strcasecmp( force_field, "DUFF" )) ffCase = FF_DUFF;
105 +  else if( !strcasecmp( force_field, "LJ" )) ffCase = FF_LJ;
106 +  else{
107 +    sprintf( painCave.errMsg,
108 +             "SimSetup Error. Unrecognized force field -> %s\n",
109 +             force_field );
110 +    painCave.isFatal = 1;
111 +    simError();
112 +  }
113 +
114 +  // get the ensemble:
115    strcpy( ensemble, the_globals->getEnsemble() );
116 +
117 +  if( !strcasecmp( ensemble, "NVE" ))      ensembleCase = NVE_ENS;
118 +  else if( !strcasecmp( ensemble, "NVT" )) ensembleCase = NVT_ENS;
119 +  else if( !strcasecmp( ensemble, "NPTi" ) || !strcasecmp( ensemble, "NPT") )
120 +    ensembleCase = NPTi_ENS;
121 +  else if( !strcasecmp( ensemble, "NPTf" )) ensembleCase = NPTf_ENS;
122 +  else if( !strcasecmp( ensemble, "NPTim" )) ensembleCase = NPTim_ENS;
123 +  else if( !strcasecmp( ensemble, "NPTfm" )) ensembleCase = NPTfm_ENS;
124 +  else{
125 +    sprintf( painCave.errMsg,
126 +             "SimSetup Warning. Unrecognized Ensemble -> %s, "
127 +             "reverting to NVE for this simulation.\n",
128 +             ensemble );
129 +    painCave.isFatal = 0;
130 +    simError();
131 +    strcpy( ensemble, "NVE" );
132 +    ensembleCase = NVE_ENS;
133 +  }  
134    strcpy( simnfo->ensemble, ensemble );
135  
136 +
137 + //   if( !strcasecmp( ensemble, "NPT" ) ) {
138 + //     the_extendedsystem = new ExtendedSystem( simnfo );
139 + //     the_extendedsystem->setTargetTemp(the_globals->getTargetTemp());
140 + //     if (the_globals->haveTargetPressure())
141 + //       the_extendedsystem->setTargetPressure(the_globals->getTargetPressure());
142 + //     else {
143 + //       sprintf( painCave.errMsg,
144 + //                "SimSetup error: If you use the constant pressure\n"
145 + //                "    ensemble, you must set targetPressure.\n"
146 + //                "    This was found in the BASS file.\n");
147 + //       painCave.isFatal = 1;
148 + //       simError();
149 + //     }
150 +
151 + //     if (the_globals->haveTauThermostat())
152 + //       the_extendedsystem->setTauThermostat(the_globals->getTauThermostat());
153 + //     else if (the_globals->haveQmass())
154 + //       the_extendedsystem->setQmass(the_globals->getQmass());
155 + //     else {
156 + //       sprintf( painCave.errMsg,
157 + //                "SimSetup error: If you use one of the constant temperature\n"
158 + //                "    ensembles, you must set either tauThermostat or qMass.\n"
159 + //                "    Neither of these was found in the BASS file.\n");
160 + //       painCave.isFatal = 1;
161 + //       simError();
162 + //     }
163 +
164 + //     if (the_globals->haveTauBarostat())
165 + //       the_extendedsystem->setTauBarostat(the_globals->getTauBarostat());
166 + //     else {
167 + //       sprintf( painCave.errMsg,
168 + //                "SimSetup error: If you use the constant pressure\n"
169 + //                "    ensemble, you must set tauBarostat.\n"
170 + //                "    This was found in the BASS file.\n");
171 + //       painCave.isFatal = 1;
172 + //       simError();
173 + //     }
174 +
175 + //   } else if ( !strcasecmp( ensemble, "NVT") ) {
176 + //     the_extendedsystem = new ExtendedSystem( simnfo );
177 + //     the_extendedsystem->setTargetTemp(the_globals->getTargetTemp());
178 +
179 + //     if (the_globals->haveTauThermostat())
180 + //       the_extendedsystem->setTauThermostat(the_globals->getTauThermostat());
181 + //     else if (the_globals->haveQmass())
182 + //       the_extendedsystem->setQmass(the_globals->getQmass());
183 + //     else {
184 + //       sprintf( painCave.errMsg,
185 + //                "SimSetup error: If you use one of the constant temperature\n"
186 + //                "    ensembles, you must set either tauThermostat or qMass.\n"
187 + //                "    Neither of these was found in the BASS file.\n");
188 + //       painCave.isFatal = 1;
189 + //       simError();
190 + //     }
191 +
192    strcpy( simnfo->mixingRule, the_globals->getMixingRule() );
193    simnfo->usePBC = the_globals->getPBC();
194            
195 +  int usesDipoles = 0;
196 +  switch( ffCase ){
197  
198 +  case FF_DUFF:
199 +    the_ff = new DUFF();
200 +    usesDipoles = 1;
201 +    break;
202  
203 <  if( !strcmp( force_field, "TraPPE" ) ) the_ff = new TraPPEFF();
204 <  else if( !strcmp( force_field, "DipoleTest" ) ) the_ff = new DipoleTestFF();
205 <  else if( !strcmp( force_field, "TraPPE_Ex" ) ) the_ff = new TraPPE_ExFF();
206 <  else if( !strcmp( force_field, "LJ" ) ) the_ff = new LJ_FF();
207 <  else{
203 >  case FF_LJ:
204 >    the_ff = new LJFF();
205 >    break;
206 >
207 >  default:
208      sprintf( painCave.errMsg,
209 <             "SimSetup Error. Unrecognized force field -> %s\n",
98 <             force_field );
209 >             "SimSetup Error. Unrecognized force field in case statement.\n");
210      painCave.isFatal = 1;
211      simError();
212    }
# Line 105 | Line 216 | void SimSetup::createSim( void ){
216    MPIcheckPoint();
217   #endif // is_mpi
218  
108  
109
219    // get the components and calculate the tot_nMol and indvidual n_mol
220    the_components = the_globals->getComponents();
221    components_nmol = new int[n_components];
# Line 230 | Line 339 | void SimSetup::createSim( void ){
339    simnfo->n_torsions = tot_torsions;
340    simnfo->n_SRI = tot_SRI;
341    simnfo->n_mol = tot_nmol;
233
342    
343 +  simnfo->molMembershipArray = new int[tot_atoms];
344 +
345   #ifdef IS_MPI
346  
347    // divide the molecules among processors here.
348    
349    mpiSim = new mpiSimulation( simnfo );
350    
241  
242
351    globalIndex = mpiSim->divideLabor();
352  
245
246
353    // set up the local variables
354    
355    int localMol, allMol;
# Line 258 | Line 364 | void SimSetup::createSim( void ){
364    local_bonds = 0;
365    local_bends = 0;
366    local_torsions = 0;
367 +  globalAtomIndex = 0;
368 +
369 +
370    for( i=0; i<n_components; i++ ){
371  
372      for( j=0; j<components_nmol[i]; j++ ){
373        
374 <      if( mol2proc[j] == worldRank ){
374 >      if( mol2proc[allMol] == worldRank ){
375          
376          local_atoms +=    comp_stamps[i]->getNAtoms();
377          local_bonds +=    comp_stamps[i]->getNBonds();
# Line 270 | Line 379 | void SimSetup::createSim( void ){
379          local_torsions += comp_stamps[i]->getNTorsions();
380          localMol++;
381        }      
382 <      allMol++;
382 >      for (k = 0; k < comp_stamps[i]->getNAtoms(); k++) {
383 >        simnfo->molMembershipArray[globalAtomIndex] = allMol;
384 >        globalAtomIndex++;
385 >      }
386 >
387 >      allMol++;      
388      }
389    }
390    local_SRI = local_bonds + local_bends + local_torsions;
391    
278
392    simnfo->n_atoms = mpiSim->getMyNlocal();  
393    
394    if( local_atoms != simnfo->n_atoms ){
# Line 318 | Line 431 | void SimSetup::createSim( void ){
431      
432      if(mol2proc[i] == worldRank ){
433        the_molecules[molIndex].setStampID( molCompType[i] );
434 +      the_molecules[molIndex].setMyIndex( molIndex );
435 +      the_molecules[molIndex].setGlobalIndex( i );
436        molIndex++;
437      }
438    }
# Line 325 | Line 440 | void SimSetup::createSim( void ){
440   #else // is_mpi
441    
442    molIndex = 0;
443 +  globalAtomIndex = 0;
444    for(i=0; i<n_components; i++){
445      for(j=0; j<components_nmol[i]; j++ ){
446        the_molecules[molIndex].setStampID( i );
447 +      the_molecules[molIndex].setMyIndex( molIndex );
448 +      the_molecules[molIndex].setGlobalIndex( molIndex );
449 +      for (k = 0; k < comp_stamps[i]->getNAtoms(); k++) {
450 +        simnfo->molMembershipArray[globalAtomIndex] = molIndex;
451 +        globalAtomIndex++;
452 +      }
453        molIndex++;
454      }
455    }
# Line 337 | Line 459 | void SimSetup::createSim( void ){
459  
460  
461    if( simnfo->n_SRI ){
462 +    
463      Exclude::createArray(simnfo->n_SRI);
464      the_excludes = new Exclude*[simnfo->n_SRI];
465 +    for( int ex=0; ex<simnfo->n_SRI; ex++) the_excludes[ex] = new Exclude(ex);
466      simnfo->globalExcludes = new int;
467 <    simnfo->n_exclude = tot_SRI;
467 >    simnfo->n_exclude = simnfo->n_SRI;
468    }
469    else{
470      
# Line 356 | Line 480 | void SimSetup::createSim( void ){
480    // set the arrays into the SimInfo object
481  
482    simnfo->atoms = the_atoms;
483 +  simnfo->molecules = the_molecules;
484    simnfo->nGlobalExcludes = 0;
485    simnfo->excludes = the_excludes;
486  
487  
488    // get some of the tricky things that may still be in the globals
489  
490 <  
490 >  double boxVector[3];
491    if( the_globals->haveBox() ){
492 <    simnfo->box_x = the_globals->getBox();
493 <    simnfo->box_y = the_globals->getBox();
494 <    simnfo->box_z = the_globals->getBox();
492 >    boxVector[0] = the_globals->getBox();
493 >    boxVector[1] = the_globals->getBox();
494 >    boxVector[2] = the_globals->getBox();
495 >    
496 >    simnfo->setBox( boxVector );
497    }
498    else if( the_globals->haveDensity() ){
499  
500      double vol;
501      vol = (double)tot_nmol / the_globals->getDensity();
502 <    simnfo->box_x = pow( vol, ( 1.0 / 3.0 ) );
503 <    simnfo->box_y = simnfo->box_x;
504 <    simnfo->box_z = simnfo->box_x;
502 >     boxVector[0] = pow( vol, ( 1.0 / 3.0 ) );
503 >     boxVector[1] = boxVector[0];
504 >     boxVector[2] = boxVector[0];
505 >
506 >    simnfo->setBox( boxVector );
507    }
508    else{
509      if( !the_globals->haveBoxX() ){
# Line 383 | Line 512 | void SimSetup::createSim( void ){
512        painCave.isFatal = 1;
513        simError();
514      }
515 <    simnfo->box_x = the_globals->getBoxX();
515 >    boxVector[0] = the_globals->getBoxX();
516  
517      if( !the_globals->haveBoxY() ){
518        sprintf( painCave.errMsg,
# Line 391 | Line 520 | void SimSetup::createSim( void ){
520        painCave.isFatal = 1;
521        simError();
522      }
523 <    simnfo->box_y = the_globals->getBoxY();
523 >    boxVector[1] = the_globals->getBoxY();
524  
525      if( !the_globals->haveBoxZ() ){
526        sprintf( painCave.errMsg,
# Line 399 | Line 528 | void SimSetup::createSim( void ){
528        painCave.isFatal = 1;
529        simError();
530      }
531 <    simnfo->box_z = the_globals->getBoxZ();
531 >    boxVector[2] = the_globals->getBoxZ();
532 >
533 >    simnfo->setBox( boxVector );
534    }
535  
536   #ifdef IS_MPI
# Line 429 | Line 560 | void SimSetup::createSim( void ){
560        painCave.isFatal = 0;
561        simError();
562        double smallest;
563 <      smallest = simnfo->box_x;
564 <      if (simnfo->box_y <= smallest) smallest = simnfo->box_y;
565 <      if (simnfo->box_z <= smallest) smallest = simnfo->box_z;
563 >      smallest = simnfo->boxLx;
564 >      if (simnfo->boxLy <= smallest) smallest = simnfo->boxLy;
565 >      if (simnfo->boxLz <= smallest) smallest = simnfo->boxLz;
566        simnfo->ecr = 0.5 * smallest;
567      } else {
568        simnfo->ecr        = the_globals->getECR();
# Line 459 | Line 590 | void SimSetup::createSim( void ){
590      }
591      simnfo->dielectric = the_globals->getDielectric();  
592    } else {
593 <    if (simnfo->n_dipoles) {
593 >    if (usesDipoles) {
594        
595        if( !the_globals->haveECR() ){
596          sprintf( painCave.errMsg,
597 <                 "SimSetup Warning: using default value of 1/2 the smallest"
597 >                 "SimSetup Warning: using default value of 1/2 the smallest "
598                   "box length for the electrostaticCutoffRadius.\n"
599                   "I hope you have a very fast processor!\n");
600          painCave.isFatal = 0;
601          simError();
602          double smallest;
603 <        smallest = simnfo->box_x;
604 <        if (simnfo->box_y <= smallest) smallest = simnfo->box_y;
605 <        if (simnfo->box_z <= smallest) smallest = simnfo->box_z;
603 >        smallest = simnfo->boxLx;
604 >        if (simnfo->boxLy <= smallest) smallest = simnfo->boxLy;
605 >        if (simnfo->boxLz <= smallest) smallest = simnfo->boxLz;
606          simnfo->ecr = 0.5 * smallest;
607        } else {
608          simnfo->ecr        = the_globals->getECR();
# Line 479 | Line 610 | void SimSetup::createSim( void ){
610        
611        if( !the_globals->haveEST() ){
612          sprintf( painCave.errMsg,
613 <                 "SimSetup Warning: using default value of 5% of the"
613 >                 "SimSetup Warning: using default value of 5%% of the "
614                   "electrostaticCutoffRadius for the "
615                   "electrostaticSkinThickness\n"
616                   );
# Line 650 | Line 781 | void SimSetup::createSim( void ){
781    if( the_globals->haveTempSet() ) simnfo->setTemp = the_globals->getTempSet();
782  
783  
784 < //   // make the longe range forces and the integrator
784 >  // make the integrator
785 >  
786 >  
787 >  NVT*  myNVT = NULL;
788 >  NPTi* myNPTi = NULL;
789 >  NPTf* myNPTf = NULL;
790 >  NPTim* myNPTim = NULL;
791  
792 < //   new AllLong( simnfo );
792 >  switch( ensembleCase ){
793  
794 <  if( !strcmp( force_field, "TraPPE" ) ) new Verlet( *simnfo, the_ff );
795 <  if( !strcmp( force_field, "DipoleTest" ) ) new Symplectic( simnfo, the_ff );
796 <  if( !strcmp( force_field, "TraPPE_Ex" ) ) new Symplectic( simnfo, the_ff );
660 <  if( !strcmp( force_field, "LJ" ) ) new Verlet( *simnfo, the_ff );
794 >  case NVE_ENS:
795 >    new NVE( simnfo, the_ff );
796 >    break;
797  
798 +  case NVT_ENS:
799 +    myNVT = new NVT( simnfo, the_ff );
800 +    myNVT->setTargetTemp(the_globals->getTargetTemp());
801  
802 +    if (the_globals->haveTauThermostat())
803 +      myNVT->setTauThermostat(the_globals->getTauThermostat());
804  
805 +    else {
806 +      sprintf( painCave.errMsg,
807 +               "SimSetup error: If you use the NVT\n"
808 +               "    ensemble, you must set tauThermostat.\n");
809 +      painCave.isFatal = 1;
810 +      simError();
811 +    }
812 +    break;
813 +
814 +  case NPTi_ENS:
815 +    myNPTi = new NPTi( simnfo, the_ff );
816 +    myNPTi->setTargetTemp( the_globals->getTargetTemp());
817 +
818 +    if (the_globals->haveTargetPressure())
819 +      myNPTi->setTargetPressure(the_globals->getTargetPressure());
820 +    else {
821 +      sprintf( painCave.errMsg,
822 +               "SimSetup error: If you use a constant pressure\n"
823 +               "    ensemble, you must set targetPressure in the BASS file.\n");
824 +      painCave.isFatal = 1;
825 +      simError();
826 +    }
827 +    
828 +    if( the_globals->haveTauThermostat() )
829 +      myNPTi->setTauThermostat( the_globals->getTauThermostat() );
830 +    else{
831 +      sprintf( painCave.errMsg,
832 +               "SimSetup error: If you use an NPT\n"
833 +               "    ensemble, you must set tauThermostat.\n");
834 +      painCave.isFatal = 1;
835 +      simError();
836 +    }
837 +
838 +    if( the_globals->haveTauBarostat() )
839 +      myNPTi->setTauBarostat( the_globals->getTauBarostat() );
840 +    else{
841 +      sprintf( painCave.errMsg,
842 +               "SimSetup error: If you use an NPT\n"
843 +               "    ensemble, you must set tauBarostat.\n");
844 +      painCave.isFatal = 1;
845 +      simError();
846 +    }
847 +    break;
848 +
849 +  case NPTf_ENS:
850 +    myNPTf = new NPTf( simnfo, the_ff );
851 +    myNPTf->setTargetTemp( the_globals->getTargetTemp());
852 +
853 +    if (the_globals->haveTargetPressure())
854 +      myNPTf->setTargetPressure(the_globals->getTargetPressure());
855 +    else {
856 +      sprintf( painCave.errMsg,
857 +               "SimSetup error: If you use a constant pressure\n"
858 +               "    ensemble, you must set targetPressure in the BASS file.\n");
859 +      painCave.isFatal = 1;
860 +      simError();
861 +    }    
862 +
863 +    if( the_globals->haveTauThermostat() )
864 +      myNPTf->setTauThermostat( the_globals->getTauThermostat() );
865 +    else{
866 +      sprintf( painCave.errMsg,
867 +               "SimSetup error: If you use an NPT\n"
868 +               "    ensemble, you must set tauThermostat.\n");
869 +      painCave.isFatal = 1;
870 +      simError();
871 +    }
872 +
873 +    if( the_globals->haveTauBarostat() )
874 +      myNPTf->setTauBarostat( the_globals->getTauBarostat() );
875 +    else{
876 +      sprintf( painCave.errMsg,
877 +               "SimSetup error: If you use an NPT\n"
878 +               "    ensemble, you must set tauBarostat.\n");
879 +      painCave.isFatal = 1;
880 +      simError();
881 +    }
882 +    break;
883 +    
884 +  case NPTim_ENS:
885 +    myNPTim = new NPTim( simnfo, the_ff );
886 +    myNPTim->setTargetTemp( the_globals->getTargetTemp());
887 +
888 +    if (the_globals->haveTargetPressure())
889 +      myNPTim->setTargetPressure(the_globals->getTargetPressure());
890 +    else {
891 +      sprintf( painCave.errMsg,
892 +               "SimSetup error: If you use a constant pressure\n"
893 +               "    ensemble, you must set targetPressure in the BASS file.\n");
894 +      painCave.isFatal = 1;
895 +      simError();
896 +    }
897 +    
898 +    if( the_globals->haveTauThermostat() )
899 +      myNPTim->setTauThermostat( the_globals->getTauThermostat() );
900 +    else{
901 +      sprintf( painCave.errMsg,
902 +               "SimSetup error: If you use an NPT\n"
903 +               "    ensemble, you must set tauThermostat.\n");
904 +      painCave.isFatal = 1;
905 +      simError();
906 +    }
907 +
908 +    if( the_globals->haveTauBarostat() )
909 +      myNPTim->setTauBarostat( the_globals->getTauBarostat() );
910 +    else{
911 +      sprintf( painCave.errMsg,
912 +               "SimSetup error: If you use an NPT\n"
913 +               "    ensemble, you must set tauBarostat.\n");
914 +      painCave.isFatal = 1;
915 +      simError();
916 +    }
917 +    break;
918 +
919 +    
920 +
921 +  default:
922 +    sprintf( painCave.errMsg,
923 +             "SimSetup Error. Unrecognized ensemble in case statement.\n");
924 +    painCave.isFatal = 1;
925 +    simError();
926 +  }
927 +
928 +
929 + #ifdef IS_MPI
930 +  mpiSim->mpiRefresh();
931 + #endif
932 +
933    // initialize the Fortran
934 <  
934 >
935 >
936    simnfo->refreshSim();
937    
938    if( !strcmp( simnfo->mixingRule, "standard") ){
# Line 699 | Line 969 | void SimSetup::makeMolecules( void ){
969    BondStamp* currentBond;
970    BendStamp* currentBend;
971    TorsionStamp* currentTorsion;
972 +
973 +  bond_pair* theBonds;
974 +  bend_set* theBends;
975 +  torsion_set* theTorsions;
976 +
977    
978    //init the forceField paramters
979  
980    the_ff->readParams();
981  
982    
983 <  // init the molecules
983 >  // init the atoms
984  
985 +  double ux, uy, uz, u, uSqr;
986 +  
987    atomOffset = 0;
988    excludeOffset = 0;
989    for(i=0; i<simnfo->n_mol; i++){
# Line 723 | Line 1000 | void SimSetup::makeMolecules( void ){
1000      info.myExcludes = &the_excludes[excludeOffset];
1001      info.myBonds = new Bond*[info.nBonds];
1002      info.myBends = new Bend*[info.nBends];
1003 <    info.myTorsions = new Torsions*[info.nTorsions];
1003 >    info.myTorsions = new Torsion*[info.nTorsions];
1004  
1005      theBonds = new bond_pair[info.nBonds];
1006      theBends = new bend_set[info.nBends];
# Line 733 | Line 1010 | void SimSetup::makeMolecules( void ){
1010      
1011      for(j=0; j<info.nAtoms; j++){
1012        
1013 <      currentAtom = theComponents[stampID]->getAtom( j );
1013 >      currentAtom = comp_stamps[stampID]->getAtom( j );
1014        if( currentAtom->haveOrientation() ){
1015          
1016          dAtom = new DirectionalAtom(j + atomOffset);
# Line 774 | Line 1051 | void SimSetup::makeMolecules( void ){
1051        theBonds[j].a = currentBond->getA() + atomOffset;
1052        theBonds[j].b = currentBond->getB() + atomOffset;
1053  
1054 <      exI = theBonds[i].a;
1055 <      exJ = theBonds[i].b;
1054 >      exI = theBonds[j].a;
1055 >      exJ = theBonds[j].b;
1056  
1057        // exclude_I must always be the smaller of the pair
1058        if( exI > exJ ){
# Line 791 | Line 1068 | void SimSetup::makeMolecules( void ){
1068        
1069        the_excludes[j+excludeOffset]->setPair( exI, exJ );
1070   #else  // isn't MPI
1071 +
1072        the_excludes[j+excludeOffset]->setPair( (exI+1), (exJ+1) );
1073   #endif  //is_mpi
1074      }
# Line 806 | Line 1084 | void SimSetup::makeMolecules( void ){
1084            
1085        if( currentBend->haveExtras() ){
1086              
1087 <        extras = current_bend->getExtras();
1087 >        extras = currentBend->getExtras();
1088          current_extra = extras;
1089              
1090          while( current_extra != NULL ){
# Line 828 | Line 1106 | void SimSetup::makeMolecules( void ){
1106                
1107              default:
1108                sprintf( painCave.errMsg,
1109 <                       "SimSetup Error: ghostVectorSource was neiter a "
1109 >                       "SimSetup Error: ghostVectorSource was neither a "
1110                         "double nor an int.\n"
1111                         "-->Bend[%d] in %s\n",
1112                         j, comp_stamps[stampID]->getID() );
# Line 922 | Line 1200 | void SimSetup::makeMolecules( void ){
1200  
1201  
1202      the_molecules[i].initialize( info );
1203 +
1204 +
1205      atomOffset += info.nAtoms;
1206 +    delete[] theBonds;
1207 +    delete[] theBends;
1208 +    delete[] theTorsions;
1209    }
1210  
1211 + #ifdef IS_MPI
1212 +  sprintf( checkPointMsg, "all molecules initialized succesfully" );
1213 +  MPIcheckPoint();
1214 + #endif // is_mpi
1215 +
1216    // clean up the forcefield
1217    the_ff->calcRcut();
1218    the_ff->cleanMe();
1219 +
1220   }
1221  
1222   void SimSetup::initFromBass( void ){
# Line 949 | Line 1238 | void SimSetup::initFromBass( void ){
1238      have_extra =1;
1239  
1240      n_cells = (int)temp3 - 1;
1241 <    cellx = simnfo->box_x / temp3;
1242 <    celly = simnfo->box_y / temp3;
1243 <    cellz = simnfo->box_z / temp3;
1241 >    cellx = simnfo->boxLx / temp3;
1242 >    celly = simnfo->boxLy / temp3;
1243 >    cellz = simnfo->boxLz / temp3;
1244      n_extra = tot_nmol - ( 4 * n_cells * n_cells * n_cells );
1245      temp1 = ((double)n_extra) / ( pow( temp3, 3.0 ) - pow( n_cells, 3.0 ) );
1246      n_per_extra = (int)ceil( temp1 );
# Line 966 | Line 1255 | void SimSetup::initFromBass( void ){
1255    }
1256    else{
1257      n_cells = (int)temp3;
1258 <    cellx = simnfo->box_x / temp3;
1259 <    celly = simnfo->box_y / temp3;
1260 <    cellz = simnfo->box_z / temp3;
1258 >    cellx = simnfo->boxLx / temp3;
1259 >    celly = simnfo->boxLy / temp3;
1260 >    cellz = simnfo->boxLz / temp3;
1261    }
1262  
1263    current_mol = 0;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines