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 693 by tim, Wed Aug 13 19:21:53 2003 UTC vs.
Revision 707 by mmeineke, Wed Aug 20 19:42:31 2003 UTC

# Line 189 | Line 189 | void SimSetup::makeMolecules( void ){
189        // make the Atoms
190      
191        for(j=0; j<molInfo.nAtoms; j++){
192 <        
193 <        currentAtom = comp_stamps[stampID]->getAtom( j );
194 <        if( currentAtom->haveOrientation() ){
195 <          
196 <          dAtom = new DirectionalAtom( (j + atomOffset),
197 <                                       info[k].getConfiguration() );
198 <          info[k].n_oriented++;
199 <          molInfo.myAtoms[j] = dAtom;
200 <          
201 <          ux = currentAtom->getOrntX();
202 <          uy = currentAtom->getOrntY();
203 <          uz = currentAtom->getOrntZ();
204 <          
205 <          uSqr = (ux * ux) + (uy * uy) + (uz * uz);
206 <          
207 <          u = sqrt( uSqr );
208 <          ux = ux / u;
209 <          uy = uy / u;
210 <          uz = uz / u;
211 <          
212 <          dAtom->setSUx( ux );
213 <          dAtom->setSUy( uy );
214 <          dAtom->setSUz( uz );
215 <        }
216 <        else{
217 <          molInfo.myAtoms[j] = new GeneralAtom( (j + atomOffset),
218 <                                                info[k].getConfiguration() );
219 <        }
220 <        molInfo.myAtoms[j]->setType( currentAtom->getType() );
192 >  
193 >  currentAtom = comp_stamps[stampID]->getAtom( j );
194 >  if( currentAtom->haveOrientation() ){
195      
196 +    dAtom = new DirectionalAtom( (j + atomOffset),
197 +               info[k].getConfiguration() );
198 +    info[k].n_oriented++;
199 +    molInfo.myAtoms[j] = dAtom;
200 +    
201 +    ux = currentAtom->getOrntX();
202 +    uy = currentAtom->getOrntY();
203 +    uz = currentAtom->getOrntZ();
204 +    
205 +    uSqr = (ux * ux) + (uy * uy) + (uz * uz);
206 +    
207 +    u = sqrt( uSqr );
208 +    ux = ux / u;
209 +    uy = uy / u;
210 +    uz = uz / u;
211 +    
212 +    dAtom->setSUx( ux );
213 +    dAtom->setSUy( uy );
214 +    dAtom->setSUz( uz );
215 +  }
216 +  else{
217 +    molInfo.myAtoms[j] = new GeneralAtom( (j + atomOffset),
218 +            info[k].getConfiguration() );
219 +  }
220 +  molInfo.myAtoms[j]->setType( currentAtom->getType() );
221 +    
222   #ifdef IS_MPI
223        
224 <        molInfo.myAtoms[j]->setGlobalIndex( globalIndex[j+atomOffset] );
224 >  molInfo.myAtoms[j]->setGlobalIndex( globalIndex[j+atomOffset] );
225        
226   #endif // is_mpi
227        }
# Line 229 | Line 229 | void SimSetup::makeMolecules( void ){
229      // make the bonds
230        for(j=0; j<molInfo.nBonds; j++){
231        
232 <        currentBond = comp_stamps[stampID]->getBond( j );
233 <        theBonds[j].a = currentBond->getA() + atomOffset;
234 <        theBonds[j].b = currentBond->getB() + atomOffset;
235 <        
236 <        exI = theBonds[j].a;
237 <        exJ = theBonds[j].b;
238 <        
239 <        // exclude_I must always be the smaller of the pair
240 <        if( exI > exJ ){
241 <          tempEx = exI;
242 <          exI = exJ;
243 <          exJ = tempEx;
244 <        }
245 < #ifdef IS_MPI
246 <        tempEx = exI;
247 <        exI = info[k].atoms[tempEx]->getGlobalIndex() + 1;
248 <        tempEx = exJ;
249 <        exJ = info[k].atoms[tempEx]->getGlobalIndex() + 1;
250 <        
251 <        info[k].excludes[j+excludeOffset]->setPair( exI, exJ );
232 >  currentBond = comp_stamps[stampID]->getBond( j );
233 >  theBonds[j].a = currentBond->getA() + atomOffset;
234 >  theBonds[j].b = currentBond->getB() + atomOffset;
235 >  
236 >  exI = theBonds[j].a;
237 >  exJ = theBonds[j].b;
238 >  
239 >  // exclude_I must always be the smaller of the pair
240 >  if( exI > exJ ){
241 >    tempEx = exI;
242 >    exI = exJ;
243 >    exJ = tempEx;
244 >  }
245 > #ifdef IS_MPI
246 >  tempEx = exI;
247 >  exI = info[k].atoms[tempEx]->getGlobalIndex() + 1;
248 >  tempEx = exJ;
249 >  exJ = info[k].atoms[tempEx]->getGlobalIndex() + 1;
250 >  
251 >  info[k].excludes[j+excludeOffset]->setPair( exI, exJ );
252   #else  // isn't MPI
253 <        
254 <        info[k].excludes[j+excludeOffset]->setPair( (exI+1), (exJ+1) );
253 >  
254 >  info[k].excludes[j+excludeOffset]->setPair( (exI+1), (exJ+1) );
255   #endif  //is_mpi
256        }
257        excludeOffset += molInfo.nBonds;
258        
259        //make the bends
260        for(j=0; j<molInfo.nBends; j++){
261 <        
262 <        currentBend = comp_stamps[stampID]->getBend( j );
263 <        theBends[j].a = currentBend->getA() + atomOffset;
264 <        theBends[j].b = currentBend->getB() + atomOffset;
265 <        theBends[j].c = currentBend->getC() + atomOffset;
266 <        
267 <        if( currentBend->haveExtras() ){
268 <          
269 <          extras = currentBend->getExtras();
270 <          current_extra = extras;
271 <          
272 <          while( current_extra != NULL ){
273 <            if( !strcmp( current_extra->getlhs(), "ghostVectorSource" )){
274 <              
275 <              switch( current_extra->getType() ){
276 <                
277 <              case 0:
278 <                theBends[j].ghost =
279 <                  current_extra->getInt() + atomOffset;
280 <                theBends[j].isGhost = 1;
281 <                break;
282 <                
283 <              case 1:
284 <                theBends[j].ghost =
285 <                  (int)current_extra->getDouble() + atomOffset;
286 <                theBends[j].isGhost = 1;
287 <                break;
288 <                
289 <              default:
290 <                sprintf( painCave.errMsg,
291 <                         "SimSetup Error: ghostVectorSource was neither a "
292 <                         "double nor an int.\n"
293 <                         "-->Bend[%d] in %s\n",
294 <                         j, comp_stamps[stampID]->getID() );
295 <                painCave.isFatal = 1;
296 <                simError();
297 <              }
298 <            }
299 <            
300 <            else{
301 <              
302 <              sprintf( painCave.errMsg,
303 <                       "SimSetup Error: unhandled bend assignment:\n"
304 <                       "    -->%s in Bend[%d] in %s\n",
305 <                       current_extra->getlhs(),
306 <                       j, comp_stamps[stampID]->getID() );
307 <              painCave.isFatal = 1;
308 <              simError();
309 <            }
310 <            
311 <            current_extra = current_extra->getNext();
312 <          }
313 <        }
314 <        
315 <        if( !theBends[j].isGhost ){
316 <          
317 <          exI = theBends[j].a;
318 <          exJ = theBends[j].c;
319 <        }
320 <        else{
321 <          
322 <          exI = theBends[j].a;
323 <          exJ = theBends[j].b;
324 <        }
325 <        
326 <        // exclude_I must always be the smaller of the pair
327 <        if( exI > exJ ){
328 <          tempEx = exI;
329 <          exI = exJ;
330 <          exJ = tempEx;
331 <        }
261 >  
262 >  currentBend = comp_stamps[stampID]->getBend( j );
263 >  theBends[j].a = currentBend->getA() + atomOffset;
264 >  theBends[j].b = currentBend->getB() + atomOffset;
265 >  theBends[j].c = currentBend->getC() + atomOffset;
266 >  
267 >  if( currentBend->haveExtras() ){
268 >    
269 >    extras = currentBend->getExtras();
270 >    current_extra = extras;
271 >    
272 >    while( current_extra != NULL ){
273 >      if( !strcmp( current_extra->getlhs(), "ghostVectorSource" )){
274 >        
275 >        switch( current_extra->getType() ){
276 >    
277 >        case 0:
278 >    theBends[j].ghost =
279 >      current_extra->getInt() + atomOffset;
280 >    theBends[j].isGhost = 1;
281 >    break;
282 >    
283 >        case 1:
284 >    theBends[j].ghost =
285 >      (int)current_extra->getDouble() + atomOffset;
286 >    theBends[j].isGhost = 1;
287 >    break;
288 >    
289 >        default:
290 >    sprintf( painCave.errMsg,
291 >       "SimSetup Error: ghostVectorSource was neither a "
292 >       "double nor an int.\n"
293 >       "-->Bend[%d] in %s\n",
294 >       j, comp_stamps[stampID]->getID() );
295 >    painCave.isFatal = 1;
296 >    simError();
297 >        }
298 >      }
299 >      
300 >      else{
301 >        
302 >        sprintf( painCave.errMsg,
303 >           "SimSetup Error: unhandled bend assignment:\n"
304 >           "    -->%s in Bend[%d] in %s\n",
305 >           current_extra->getlhs(),
306 >           j, comp_stamps[stampID]->getID() );
307 >        painCave.isFatal = 1;
308 >        simError();
309 >      }
310 >      
311 >      current_extra = current_extra->getNext();
312 >    }
313 >  }
314 >  
315 >  if( !theBends[j].isGhost ){
316 >    
317 >    exI = theBends[j].a;
318 >    exJ = theBends[j].c;
319 >  }
320 >  else{
321 >    
322 >    exI = theBends[j].a;
323 >    exJ = theBends[j].b;
324 >  }
325 >  
326 >  // exclude_I must always be the smaller of the pair
327 >  if( exI > exJ ){
328 >    tempEx = exI;
329 >    exI = exJ;
330 >    exJ = tempEx;
331 >  }
332   #ifdef IS_MPI
333 <        tempEx = exI;
334 <        exI = info[k].atoms[tempEx]->getGlobalIndex() + 1;
335 <        tempEx = exJ;
336 <        exJ = info[k].atoms[tempEx]->getGlobalIndex() + 1;
333 >  tempEx = exI;
334 >  exI = info[k].atoms[tempEx]->getGlobalIndex() + 1;
335 >  tempEx = exJ;
336 >  exJ = info[k].atoms[tempEx]->getGlobalIndex() + 1;
337        
338 <        info[k].excludes[j+excludeOffset]->setPair( exI, exJ );
338 >  info[k].excludes[j+excludeOffset]->setPair( exI, exJ );
339   #else  // isn't MPI
340 <        info[k].excludes[j+excludeOffset]->setPair( (exI+1), (exJ+1) );
340 >  info[k].excludes[j+excludeOffset]->setPair( (exI+1), (exJ+1) );
341   #endif  //is_mpi
342        }
343        excludeOffset += molInfo.nBends;
344        
345        for(j=0; j<molInfo.nTorsions; j++){
346 <        
347 <        currentTorsion = comp_stamps[stampID]->getTorsion( j );
348 <        theTorsions[j].a = currentTorsion->getA() + atomOffset;
349 <        theTorsions[j].b = currentTorsion->getB() + atomOffset;
350 <        theTorsions[j].c = currentTorsion->getC() + atomOffset;
351 <        theTorsions[j].d = currentTorsion->getD() + atomOffset;
352 <        
353 <        exI = theTorsions[j].a;
354 <        exJ = theTorsions[j].d;
355 <        
356 <        // exclude_I must always be the smaller of the pair
357 <        if( exI > exJ ){
358 <          tempEx = exI;
359 <          exI = exJ;
360 <          exJ = tempEx;
361 <        }
346 >  
347 >  currentTorsion = comp_stamps[stampID]->getTorsion( j );
348 >  theTorsions[j].a = currentTorsion->getA() + atomOffset;
349 >  theTorsions[j].b = currentTorsion->getB() + atomOffset;
350 >  theTorsions[j].c = currentTorsion->getC() + atomOffset;
351 >  theTorsions[j].d = currentTorsion->getD() + atomOffset;
352 >  
353 >  exI = theTorsions[j].a;
354 >  exJ = theTorsions[j].d;
355 >  
356 >  // exclude_I must always be the smaller of the pair
357 >  if( exI > exJ ){
358 >    tempEx = exI;
359 >    exI = exJ;
360 >    exJ = tempEx;
361 >  }
362   #ifdef IS_MPI
363 <        tempEx = exI;
364 <        exI = info[k].atoms[tempEx]->getGlobalIndex() + 1;
365 <        tempEx = exJ;
366 <        exJ = info[k].atoms[tempEx]->getGlobalIndex() + 1;
367 <        
368 <        info[k].excludes[j+excludeOffset]->setPair( exI, exJ );
363 >  tempEx = exI;
364 >  exI = info[k].atoms[tempEx]->getGlobalIndex() + 1;
365 >  tempEx = exJ;
366 >  exJ = info[k].atoms[tempEx]->getGlobalIndex() + 1;
367 >  
368 >  info[k].excludes[j+excludeOffset]->setPair( exI, exJ );
369   #else  // isn't MPI
370 <        info[k].excludes[j+excludeOffset]->setPair( (exI+1), (exJ+1) );
370 >  info[k].excludes[j+excludeOffset]->setPair( (exI+1), (exJ+1) );
371   #endif  //is_mpi
372        }
373        excludeOffset += molInfo.nTorsions;
# Line 436 | Line 436 | void SimSetup::initFromBass( void ){
436  
437      if( n_per_extra > 4){
438        sprintf( painCave.errMsg,
439 <               "SimSetup error. There has been an error in constructing"
440 <               " the non-complete lattice.\n" );
439 >         "SimSetup error. There has been an error in constructing"
440 >         " the non-complete lattice.\n" );
441        painCave.isFatal = 1;
442        simError();
443      }
# Line 458 | Line 458 | void SimSetup::initFromBass( void ){
458      for( j=0; j < n_cells; j++ ){
459        for( k=0; k < n_cells; k++ ){
460  
461 <        makeElement( i * cellx,
462 <                     j * celly,
463 <                     k * cellz );
461 >  makeElement( i * cellx,
462 >         j * celly,
463 >         k * cellz );
464  
465 <        makeElement( i * cellx + 0.5 * cellx,
466 <                     j * celly + 0.5 * celly,
467 <                     k * cellz );
465 >  makeElement( i * cellx + 0.5 * cellx,
466 >         j * celly + 0.5 * celly,
467 >         k * cellz );
468 >
469 >  makeElement( i * cellx,
470 >         j * celly + 0.5 * celly,
471 >         k * cellz + 0.5 * cellz );
472  
473 <        makeElement( i * cellx,
474 <                     j * celly + 0.5 * celly,
475 <                     k * cellz + 0.5 * cellz );
472 <
473 <        makeElement( i * cellx + 0.5 * cellx,
474 <                     j * celly,
475 <                     k * cellz + 0.5 * cellz );
473 >  makeElement( i * cellx + 0.5 * cellx,
474 >         j * celly,
475 >         k * cellz + 0.5 * cellz );
476        }
477      }
478    }
# Line 484 | Line 484 | void SimSetup::initFromBass( void ){
484      for( i=0; i < (n_cells+1) && !done; i++ ){
485        for( j=0; j < (n_cells+1) && !done; j++ ){
486  
487 <        if( i < n_cells ){
487 >  if( i < n_cells ){
488  
489 <          if( j < n_cells ){
490 <            start_ndx = n_cells;
491 <          }
492 <          else start_ndx = 0;
493 <        }
494 <        else start_ndx = 0;
489 >    if( j < n_cells ){
490 >      start_ndx = n_cells;
491 >    }
492 >    else start_ndx = 0;
493 >  }
494 >  else start_ndx = 0;
495  
496 <        for( k=start_ndx; k < (n_cells+1) && !done; k++ ){
496 >  for( k=start_ndx; k < (n_cells+1) && !done; k++ ){
497  
498 <          makeElement( i * cellx,
499 <                       j * celly,
500 <                       k * cellz );
501 <          done = ( current_mol >= tot_nmol );
498 >    makeElement( i * cellx,
499 >           j * celly,
500 >           k * cellz );
501 >    done = ( current_mol >= tot_nmol );
502  
503 <          if( !done && n_per_extra > 1 ){
504 <            makeElement( i * cellx + 0.5 * cellx,
505 <                         j * celly + 0.5 * celly,
506 <                         k * cellz );
507 <            done = ( current_mol >= tot_nmol );
508 <          }
503 >    if( !done && n_per_extra > 1 ){
504 >      makeElement( i * cellx + 0.5 * cellx,
505 >       j * celly + 0.5 * celly,
506 >       k * cellz );
507 >      done = ( current_mol >= tot_nmol );
508 >    }
509  
510 <          if( !done && n_per_extra > 2){
511 <            makeElement( i * cellx,
512 <                         j * celly + 0.5 * celly,
513 <                         k * cellz + 0.5 * cellz );
514 <            done = ( current_mol >= tot_nmol );
515 <          }
510 >    if( !done && n_per_extra > 2){
511 >      makeElement( i * cellx,
512 >       j * celly + 0.5 * celly,
513 >       k * cellz + 0.5 * cellz );
514 >      done = ( current_mol >= tot_nmol );
515 >    }
516  
517 <          if( !done && n_per_extra > 3){
518 <            makeElement( i * cellx + 0.5 * cellx,
519 <                         j * celly,
520 <                         k * cellz + 0.5 * cellz );
521 <            done = ( current_mol >= tot_nmol );
522 <          }
523 <        }
517 >    if( !done && n_per_extra > 3){
518 >      makeElement( i * cellx + 0.5 * cellx,
519 >       j * celly,
520 >       k * cellz + 0.5 * cellz );
521 >      done = ( current_mol >= tot_nmol );
522 >    }
523 >  }
524        }
525      }
526    }
# Line 543 | Line 543 | void SimSetup::makeElement( double x, double y, double
543      current_atom = comp_stamps[current_comp]->getAtom( k );
544      if( !current_atom->havePosition() ){
545        sprintf( painCave.errMsg,
546 <               "SimSetup:initFromBass error.\n"
547 <               "\tComponent %s, atom %s does not have a position specified.\n"
548 <               "\tThe initialization routine is unable to give a start"
549 <               " position.\n",
550 <               comp_stamps[current_comp]->getID(),
551 <               current_atom->getType() );
546 >         "SimSetup:initFromBass error.\n"
547 >         "\tComponent %s, atom %s does not have a position specified.\n"
548 >         "\tThe initialization routine is unable to give a start"
549 >         " position.\n",
550 >         comp_stamps[current_comp]->getID(),
551 >         current_atom->getType() );
552        painCave.isFatal = 1;
553        simError();
554      }
# Line 617 | Line 617 | void SimSetup::gatherInfo( void ){
617    else if( !strcasecmp( force_field, "EAM" )) ffCase = FF_EAM;
618    else{
619      sprintf( painCave.errMsg,
620 <             "SimSetup Error. Unrecognized force field -> %s\n",
621 <             force_field );
620 >       "SimSetup Error. Unrecognized force field -> %s\n",
621 >       force_field );
622      painCave.isFatal = 1;
623      simError();
624    }
# Line 636 | Line 636 | void SimSetup::gatherInfo( void ){
636    else if( !strcasecmp( ensemble, "NPTfm" )) ensembleCase = NPTfm_ENS;
637    else{
638      sprintf( painCave.errMsg,
639 <             "SimSetup Warning. Unrecognized Ensemble -> %s, "
639 >       "SimSetup Warning. Unrecognized Ensemble -> %s, "
640               "reverting to NVE for this simulation.\n",
641 <             ensemble );
641 >       ensemble );
642      painCave.isFatal = 0;
643      simError();
644      strcpy( ensemble, "NVE" );
# Line 669 | Line 669 | void SimSetup::gatherInfo( void ){
669      for( i=0; i<n_components; i++ ){
670  
671        if( !the_components[i]->haveNMol() ){
672 <        // we have a problem
673 <        sprintf( painCave.errMsg,
674 <                 "SimSetup Error. No global NMol or component NMol"
675 <                 " given. Cannot calculate the number of atoms.\n" );
676 <        painCave.isFatal = 1;
677 <        simError();
672 >  // we have a problem
673 >  sprintf( painCave.errMsg,
674 >     "SimSetup Error. No global NMol or component NMol"
675 >     " given. Cannot calculate the number of atoms.\n" );
676 >  painCave.isFatal = 1;
677 >  simError();
678        }
679  
680        tot_nmol += the_components[i]->getNMol();
# Line 683 | Line 683 | void SimSetup::gatherInfo( void ){
683    }
684    else{
685      sprintf( painCave.errMsg,
686 <             "SimSetup error.\n"
687 <             "\tSorry, the ability to specify total"
688 <             " nMols and then give molfractions in the components\n"
689 <             "\tis not currently supported."
690 <             " Please give nMol in the components.\n" );
686 >       "SimSetup error.\n"
687 >       "\tSorry, the ability to specify total"
688 >       " nMols and then give molfractions in the components\n"
689 >       "\tis not currently supported."
690 >       " Please give nMol in the components.\n" );
691      painCave.isFatal = 1;
692      simError();
693    }
# Line 741 | Line 741 | void SimSetup::gatherInfo( void ){
741    }
742      else{
743        if( !globals->haveBoxX() ){
744 <        sprintf( painCave.errMsg,
745 <                 "SimSetup error, no periodic BoxX size given.\n" );
746 <        painCave.isFatal = 1;
747 <        simError();
744 >  sprintf( painCave.errMsg,
745 >     "SimSetup error, no periodic BoxX size given.\n" );
746 >  painCave.isFatal = 1;
747 >  simError();
748        }
749        boxVector[0] = globals->getBoxX();
750        
751        if( !globals->haveBoxY() ){
752 <        sprintf( painCave.errMsg,
753 <                 "SimSetup error, no periodic BoxY size given.\n" );
754 <        painCave.isFatal = 1;
755 <        simError();
752 >  sprintf( painCave.errMsg,
753 >     "SimSetup error, no periodic BoxY size given.\n" );
754 >  painCave.isFatal = 1;
755 >  simError();
756        }
757        boxVector[1] = globals->getBoxY();
758        
759        if( !globals->haveBoxZ() ){
760 <        sprintf( painCave.errMsg,
761 <                 "SimSetup error, no periodic BoxZ size given.\n" );
762 <        painCave.isFatal = 1;
763 <        simError();
760 >  sprintf( painCave.errMsg,
761 >     "SimSetup error, no periodic BoxZ size given.\n" );
762 >  painCave.isFatal = 1;
763 >  simError();
764        }
765        boxVector[2] = globals->getBoxZ();
766        
# Line 803 | Line 803 | void SimSetup::finalInfoCheck( void ){
803        info[i].useReactionField = 1;
804        
805        if( !globals->haveECR() ){
806 <        sprintf( painCave.errMsg,
807 <                 "SimSetup Warning: using default value of 1/2 the smallest "
808 <                 "box length for the electrostaticCutoffRadius.\n"
809 <                 "I hope you have a very fast processor!\n");
810 <        painCave.isFatal = 0;
811 <        simError();
812 <        double smallest;
813 <        smallest = info[i].boxL[0];
814 <        if (info[i].boxL[1] <= smallest) smallest = info[i].boxL[1];
815 <        if (info[i].boxL[2] <= smallest) smallest = info[i].boxL[2];
816 <        theEcr = 0.5 * smallest;
806 >  sprintf( painCave.errMsg,
807 >     "SimSetup Warning: using default value of 1/2 the smallest "
808 >     "box length for the electrostaticCutoffRadius.\n"
809 >     "I hope you have a very fast processor!\n");
810 >  painCave.isFatal = 0;
811 >  simError();
812 >  double smallest;
813 >  smallest = info[i].boxL[0];
814 >  if (info[i].boxL[1] <= smallest) smallest = info[i].boxL[1];
815 >  if (info[i].boxL[2] <= smallest) smallest = info[i].boxL[2];
816 >  theEcr = 0.5 * smallest;
817        } else {
818 <        theEcr = globals->getECR();
818 >  theEcr = globals->getECR();
819        }
820        
821        if( !globals->haveEST() ){
822 <        sprintf( painCave.errMsg,
823 <                 "SimSetup Warning: using default value of 0.05 * the "
824 <                 "electrostaticCutoffRadius for the electrostaticSkinThickness\n"
825 <                 );
826 <        painCave.isFatal = 0;
827 <        simError();
828 <        theEst = 0.05 * theEcr;
822 >  sprintf( painCave.errMsg,
823 >     "SimSetup Warning: using default value of 0.05 * the "
824 >     "electrostaticCutoffRadius for the electrostaticSkinThickness\n"
825 >     );
826 >  painCave.isFatal = 0;
827 >  simError();
828 >  theEst = 0.05 * theEcr;
829        } else {
830 <        theEst= globals->getEST();
830 >  theEst= globals->getEST();
831        }
832        
833        info[i].setEcr( theEcr, theEst );
834        
835        if(!globals->haveDielectric() ){
836 <        sprintf( painCave.errMsg,
837 <                 "SimSetup Error: You are trying to use Reaction Field without"
838 <                 "setting a dielectric constant!\n"
839 <                 );
840 <        painCave.isFatal = 1;
841 <        simError();
836 >  sprintf( painCave.errMsg,
837 >     "SimSetup Error: You are trying to use Reaction Field without"
838 >     "setting a dielectric constant!\n"
839 >     );
840 >  painCave.isFatal = 1;
841 >  simError();
842        }
843        info[i].dielectric = globals->getDielectric();  
844      }
845      else {
846        if (usesDipoles) {
847 <        
848 <        if( !globals->haveECR() ){
849 <          sprintf( painCave.errMsg,
850 <                   "SimSetup Warning: using default value of 1/2 the smallest "
851 <                   "box length for the electrostaticCutoffRadius.\n"
852 <                   "I hope you have a very fast processor!\n");
853 <          painCave.isFatal = 0;
854 <          simError();
855 <          double smallest;
856 <          smallest = info[i].boxL[0];
857 <          if (info[i].boxL[1] <= smallest) smallest = info[i].boxL[1];
858 <          if (info[i].boxL[2] <= smallest) smallest = info[i].boxL[2];
859 <          theEcr = 0.5 * smallest;
860 <        } else {
861 <          theEcr = globals->getECR();
862 <        }
863 <        
864 <        if( !globals->haveEST() ){
865 <          sprintf( painCave.errMsg,
866 <                   "SimSetup Warning: using default value of 0.05 * the "
867 <                   "electrostaticCutoffRadius for the "
868 <                   "electrostaticSkinThickness\n"
869 <                   );
870 <          painCave.isFatal = 0;
871 <          simError();
872 <          theEst = 0.05 * theEcr;
873 <        } else {
874 <          theEst= globals->getEST();
875 <        }
876 <        
877 <        info[i].setEcr( theEcr, theEst );
847 >  
848 >  if( !globals->haveECR() ){
849 >    sprintf( painCave.errMsg,
850 >       "SimSetup Warning: using default value of 1/2 the smallest "
851 >       "box length for the electrostaticCutoffRadius.\n"
852 >       "I hope you have a very fast processor!\n");
853 >    painCave.isFatal = 0;
854 >    simError();
855 >    double smallest;
856 >    smallest = info[i].boxL[0];
857 >    if (info[i].boxL[1] <= smallest) smallest = info[i].boxL[1];
858 >    if (info[i].boxL[2] <= smallest) smallest = info[i].boxL[2];
859 >    theEcr = 0.5 * smallest;
860 >  } else {
861 >    theEcr = globals->getECR();
862 >  }
863 >  
864 >  if( !globals->haveEST() ){
865 >    sprintf( painCave.errMsg,
866 >       "SimSetup Warning: using default value of 0.05 * the "
867 >       "electrostaticCutoffRadius for the "
868 >       "electrostaticSkinThickness\n"
869 >       );
870 >    painCave.isFatal = 0;
871 >    simError();
872 >    theEst = 0.05 * theEcr;
873 >  } else {
874 >    theEst= globals->getEST();
875 >  }
876 >  
877 >  info[i].setEcr( theEcr, theEst );
878        }
879      }  
880    }
# Line 891 | Line 891 | void SimSetup::initSystemCoords( void ){
891    
892    char* inName;
893  
894
894    (info[0].getConfiguration())->createArrays( info[0].n_atoms );
895 <  
895 >
896    for(i=0; i<info[0].n_atoms; i++) info[0].atoms[i]->setCoords();
897    
898    if( globals->haveInitialConfig() ){
# Line 919 | Line 918 | void SimSetup::initSystemCoords( void ){
918      // no init from bass
919      
920      sprintf( painCave.errMsg,
921 <             "Cannot intialize a parallel simulation without an initial configuration file.\n" );
921 >       "Cannot intialize a parallel simulation without an initial configuration file.\n" );
922      painCave.isFatal;
923      simError();
924      
# Line 951 | Line 950 | void SimSetup::makeOutNames( void ){
950   #endif // is_mpi
951        
952        if( globals->haveFinalConfig() ){
953 <        strcpy( info[k].finalName, globals->getFinalConfig() );
953 >  strcpy( info[k].finalName, globals->getFinalConfig() );
954        }
955        else{
956 <        strcpy( info[k].finalName, inFileName );
957 <        char* endTest;
958 <        int nameLength = strlen( info[k].finalName );
959 <        endTest = &(info[k].finalName[nameLength - 5]);
960 <        if( !strcmp( endTest, ".bass" ) ){
961 <          strcpy( endTest, ".eor" );
962 <        }
963 <        else if( !strcmp( endTest, ".BASS" ) ){
964 <          strcpy( endTest, ".eor" );
965 <        }
966 <        else{
967 <          endTest = &(info[k].finalName[nameLength - 4]);
968 <          if( !strcmp( endTest, ".bss" ) ){
969 <            strcpy( endTest, ".eor" );
970 <          }
971 <          else if( !strcmp( endTest, ".mdl" ) ){
972 <            strcpy( endTest, ".eor" );
973 <          }
974 <          else{
975 <            strcat( info[k].finalName, ".eor" );
976 <          }
977 <        }
956 >  strcpy( info[k].finalName, inFileName );
957 >  char* endTest;
958 >  int nameLength = strlen( info[k].finalName );
959 >  endTest = &(info[k].finalName[nameLength - 5]);
960 >  if( !strcmp( endTest, ".bass" ) ){
961 >    strcpy( endTest, ".eor" );
962 >  }
963 >  else if( !strcmp( endTest, ".BASS" ) ){
964 >    strcpy( endTest, ".eor" );
965 >  }
966 >  else{
967 >    endTest = &(info[k].finalName[nameLength - 4]);
968 >    if( !strcmp( endTest, ".bss" ) ){
969 >      strcpy( endTest, ".eor" );
970 >    }
971 >    else if( !strcmp( endTest, ".mdl" ) ){
972 >      strcpy( endTest, ".eor" );
973 >    }
974 >    else{
975 >      strcat( info[k].finalName, ".eor" );
976 >    }
977 >  }
978        }
979        
980        // make the sample and status out names
# Line 985 | Line 984 | void SimSetup::makeOutNames( void ){
984        int nameLength = strlen( info[k].sampleName );
985        endTest = &(info[k].sampleName[nameLength - 5]);
986        if( !strcmp( endTest, ".bass" ) ){
987 <        strcpy( endTest, ".dump" );
987 >  strcpy( endTest, ".dump" );
988        }
989        else if( !strcmp( endTest, ".BASS" ) ){
990 <        strcpy( endTest, ".dump" );
990 >  strcpy( endTest, ".dump" );
991        }
992        else{
993 <        endTest = &(info[k].sampleName[nameLength - 4]);
994 <        if( !strcmp( endTest, ".bss" ) ){
995 <          strcpy( endTest, ".dump" );
996 <        }
997 <        else if( !strcmp( endTest, ".mdl" ) ){
998 <          strcpy( endTest, ".dump" );
999 <        }
1000 <        else{
1001 <          strcat( info[k].sampleName, ".dump" );
1002 <        }
993 >  endTest = &(info[k].sampleName[nameLength - 4]);
994 >  if( !strcmp( endTest, ".bss" ) ){
995 >    strcpy( endTest, ".dump" );
996 >  }
997 >  else if( !strcmp( endTest, ".mdl" ) ){
998 >    strcpy( endTest, ".dump" );
999 >  }
1000 >  else{
1001 >    strcat( info[k].sampleName, ".dump" );
1002 >  }
1003        }
1004        
1005        strcpy( info[k].statusName, inFileName );
1006        nameLength = strlen( info[k].statusName );
1007        endTest = &(info[k].statusName[nameLength - 5]);
1008        if( !strcmp( endTest, ".bass" ) ){
1009 <        strcpy( endTest, ".stat" );
1009 >  strcpy( endTest, ".stat" );
1010        }
1011        else if( !strcmp( endTest, ".BASS" ) ){
1012 <        strcpy( endTest, ".stat" );
1012 >  strcpy( endTest, ".stat" );
1013        }
1014        else{
1015 <        endTest = &(info[k].statusName[nameLength - 4]);
1016 <        if( !strcmp( endTest, ".bss" ) ){
1017 <          strcpy( endTest, ".stat" );
1018 <        }
1019 <        else if( !strcmp( endTest, ".mdl" ) ){
1020 <          strcpy( endTest, ".stat" );
1021 <        }
1022 <        else{
1023 <          strcat( info[k].statusName, ".stat" );
1024 <        }
1015 >  endTest = &(info[k].statusName[nameLength - 4]);
1016 >  if( !strcmp( endTest, ".bss" ) ){
1017 >    strcpy( endTest, ".stat" );
1018 >  }
1019 >  else if( !strcmp( endTest, ".mdl" ) ){
1020 >    strcpy( endTest, ".stat" );
1021 >  }
1022 >  else{
1023 >    strcat( info[k].statusName, ".stat" );
1024 >  }
1025        }
1026        
1027   #ifdef IS_MPI
# Line 1089 | Line 1088 | void SimSetup::createFF( void ){
1088  
1089    default:
1090      sprintf( painCave.errMsg,
1091 <             "SimSetup Error. Unrecognized force field in case statement.\n");
1091 >       "SimSetup Error. Unrecognized force field in case statement.\n");
1092      painCave.isFatal = 1;
1093      simError();
1094    }
# Line 1135 | Line 1134 | void SimSetup::compList( void ){
1134        
1135        currentStamp = stamps->extractMolStamp( id );
1136        if( currentStamp == NULL ){
1137 <        sprintf( painCave.errMsg,
1138 <                 "SimSetup error: Component \"%s\" was not found in the "
1139 <                 "list of declared molecules\n",
1140 <                 id );
1141 <        painCave.isFatal = 1;
1142 <        simError();
1137 >  sprintf( painCave.errMsg,
1138 >     "SimSetup error: Component \"%s\" was not found in the "
1139 >     "list of declared molecules\n",
1140 >     id );
1141 >  painCave.isFatal = 1;
1142 >  simError();
1143        }
1144        
1145        headStamp->add( currentStamp );
# Line 1219 | Line 1218 | void SimSetup::mpiMolDivide( void ){
1218      for( j=0; j<components_nmol[i]; j++ ){
1219        
1220        if( mol2proc[allMol] == worldRank ){
1221 <        
1222 <        local_atoms +=    comp_stamps[i]->getNAtoms();
1223 <        local_bonds +=    comp_stamps[i]->getNBonds();
1224 <        local_bends +=    comp_stamps[i]->getNBends();
1225 <        local_torsions += comp_stamps[i]->getNTorsions();
1226 <        localMol++;
1221 >  
1222 >  local_atoms +=    comp_stamps[i]->getNAtoms();
1223 >  local_bonds +=    comp_stamps[i]->getNBonds();
1224 >  local_bends +=    comp_stamps[i]->getNBends();
1225 >  local_torsions += comp_stamps[i]->getNTorsions();
1226 >  localMol++;
1227        }      
1228        for (k = 0; k < comp_stamps[i]->getNAtoms(); k++) {
1229          info[0].molMembershipArray[globalAtomIndex] = allMol;
# Line 1240 | Line 1239 | void SimSetup::mpiMolDivide( void ){
1239    
1240    if( local_atoms != info[0].n_atoms ){
1241      sprintf( painCave.errMsg,
1242 <             "SimSetup error: mpiSim's localAtom (%d) and SimSetup's"
1243 <             " localAtom (%d) are not equal.\n",
1244 <             info[0].n_atoms,
1245 <             local_atoms );
1242 >       "SimSetup error: mpiSim's localAtom (%d) and SimSetup's"
1243 >       " localAtom (%d) are not equal.\n",
1244 >       info[0].n_atoms,
1245 >       local_atoms );
1246      painCave.isFatal = 1;
1247      simError();
1248    }
# Line 1286 | Line 1285 | void SimSetup::makeSysArrays( void ){
1285      for(i=0; i<mpiSim->getTotNmol(); i++){
1286      
1287        if(mol2proc[i] == worldRank ){
1288 <        the_molecules[molIndex].setStampID( molCompType[i] );
1289 <        the_molecules[molIndex].setMyIndex( molIndex );
1290 <        the_molecules[molIndex].setGlobalIndex( i );
1291 <        molIndex++;
1288 >  the_molecules[molIndex].setStampID( molCompType[i] );
1289 >  the_molecules[molIndex].setMyIndex( molIndex );
1290 >  the_molecules[molIndex].setGlobalIndex( i );
1291 >  molIndex++;
1292        }
1293      }
1294      
# Line 1299 | Line 1298 | void SimSetup::makeSysArrays( void ){
1298      globalAtomIndex = 0;
1299      for(i=0; i<n_components; i++){
1300        for(j=0; j<components_nmol[i]; j++ ){
1301 <        the_molecules[molIndex].setStampID( i );
1302 <        the_molecules[molIndex].setMyIndex( molIndex );
1303 <        the_molecules[molIndex].setGlobalIndex( molIndex );
1304 <        for (k = 0; k < comp_stamps[i]->getNAtoms(); k++) {
1305 <          info[l].molMembershipArray[globalAtomIndex] = molIndex;
1306 <          globalAtomIndex++;
1307 <        }
1308 <        molIndex++;
1301 >  the_molecules[molIndex].setStampID( i );
1302 >  the_molecules[molIndex].setMyIndex( molIndex );
1303 >  the_molecules[molIndex].setGlobalIndex( molIndex );
1304 >  for (k = 0; k < comp_stamps[i]->getNAtoms(); k++) {
1305 >    info[l].molMembershipArray[globalAtomIndex] = molIndex;
1306 >    globalAtomIndex++;
1307 >  }
1308 >  molIndex++;
1309        }
1310      }
1311      
# Line 1319 | Line 1318 | void SimSetup::makeSysArrays( void ){
1318        Exclude::createArray(info[l].n_SRI);
1319        the_excludes = new Exclude*[info[l].n_SRI];
1320        for( int ex=0; ex<info[l].n_SRI; ex++){
1321 <        the_excludes[ex] = new Exclude(ex);
1321 >  the_excludes[ex] = new Exclude(ex);
1322        }
1323        info[l].globalExcludes = new int;
1324        info[l].n_exclude = info[l].n_SRI;
# Line 1362 | Line 1361 | void SimSetup::makeIntegrator( void ){
1361      switch( ensembleCase ){
1362        
1363      case NVE_ENS:
1364 <        if (globals->haveZconstraints()){
1365 <         setupZConstraint(info[k]);
1366 <           new ZConstraint<NVE<RealIntegrator> >( &(info[k]), the_ff );
1367 <        }
1364 >      if (globals->haveZconstraints()){
1365 >        setupZConstraint(info[k]);
1366 >        new ZConstraint<NVE<RealIntegrator> >( &(info[k]), the_ff );
1367 >     }
1368  
1369 <        else
1369 >     else
1370          new NVE<RealIntegrator>( &(info[k]), the_ff );
1371        break;
1372        
1373      case NVT_ENS:
1374 <        if (globals->haveZconstraints()){
1375 <         setupZConstraint(info[k]);
1376 <           myNVT = new ZConstraint<NVT<RealIntegrator> >( &(info[k]), the_ff );
1377 <        }
1378 <        else
1374 >      if (globals->haveZconstraints()){
1375 >        setupZConstraint(info[k]);
1376 >        myNVT = new ZConstraint<NVT<RealIntegrator> >( &(info[k]), the_ff );
1377 >      }
1378 >      else
1379          myNVT = new NVT<RealIntegrator>( &(info[k]), the_ff );
1380  
1381 <      myNVT->setTargetTemp(globals->getTargetTemp());
1381 >        myNVT->setTargetTemp(globals->getTargetTemp());
1382        
1383 <      if (globals->haveTauThermostat())
1384 <        myNVT->setTauThermostat(globals->getTauThermostat());
1383 >        if (globals->haveTauThermostat())
1384 >          myNVT->setTauThermostat(globals->getTauThermostat());
1385        
1386 <      else {
1387 <        sprintf( painCave.errMsg,
1388 <                 "SimSetup error: If you use the NVT\n"
1389 <                 "    ensemble, you must set tauThermostat.\n");
1390 <        painCave.isFatal = 1;
1391 <        simError();
1392 <      }
1393 <      break;
1386 >        else {
1387 >          sprintf( painCave.errMsg,
1388 >                    "SimSetup error: If you use the NVT\n"
1389 >                    "    ensemble, you must set tauThermostat.\n");
1390 >          painCave.isFatal = 1;
1391 >          simError();
1392 >        }
1393 >        break;
1394        
1395      case NPTi_ENS:
1396 <        if (globals->haveZconstraints()){
1397 <         setupZConstraint(info[k]);
1398 <           myNPTi = new ZConstraint<NPTi<RealIntegrator> >( &(info[k]), the_ff );
1399 <        }
1400 <        else
1396 >      if (globals->haveZconstraints()){
1397 >             setupZConstraint(info[k]);
1398 >         myNPTi = new ZConstraint<NPTi<RealIntegrator> >( &(info[k]), the_ff );
1399 >      }
1400 >      else
1401          myNPTi = new NPTi<RealIntegrator>( &(info[k]), the_ff );
1402  
1403 <        myNPTi->setTargetTemp( globals->getTargetTemp() );
1404 <      
1403 >      myNPTi->setTargetTemp( globals->getTargetTemp() );
1404 >          
1405        if (globals->haveTargetPressure())
1406 <        myNPTi->setTargetPressure(globals->getTargetPressure());
1406 >        myNPTi->setTargetPressure(globals->getTargetPressure());
1407        else {
1408 <        sprintf( painCave.errMsg,
1409 <                 "SimSetup error: If you use a constant pressure\n"
1410 <                 "    ensemble, you must set targetPressure in the BASS file.\n");
1411 <        painCave.isFatal = 1;
1412 <        simError();
1408 >         sprintf( painCave.errMsg,
1409 >                   "SimSetup error: If you use a constant pressure\n"
1410 >                   "    ensemble, you must set targetPressure in the BASS file.\n");
1411 >         painCave.isFatal = 1;
1412 >         simError();
1413        }
1414 <      
1414 >          
1415        if( globals->haveTauThermostat() )
1416 <        myNPTi->setTauThermostat( globals->getTauThermostat() );
1416 >        myNPTi->setTauThermostat( globals->getTauThermostat() );
1417        else{
1418 <        sprintf( painCave.errMsg,
1419 <                 "SimSetup error: If you use an NPT\n"
1420 <                 "    ensemble, you must set tauThermostat.\n");
1421 <        painCave.isFatal = 1;
1422 <        simError();
1418 >         sprintf( painCave.errMsg,
1419 >                   "SimSetup error: If you use an NPT\n"
1420 >                  "    ensemble, you must set tauThermostat.\n");
1421 >         painCave.isFatal = 1;
1422 >         simError();
1423        }
1424 <      
1424 >          
1425        if( globals->haveTauBarostat() )
1426 <        myNPTi->setTauBarostat( globals->getTauBarostat() );
1426 >        myNPTi->setTauBarostat( globals->getTauBarostat() );
1427        else{
1428 <        sprintf( painCave.errMsg,
1429 <                 "SimSetup error: If you use an NPT\n"
1430 <                 "    ensemble, you must set tauBarostat.\n");
1431 <        painCave.isFatal = 1;
1432 <        simError();
1433 <      }
1434 <      break;
1428 >        sprintf( painCave.errMsg,
1429 >                  "SimSetup error: If you use an NPT\n"
1430 >                  "    ensemble, you must set tauBarostat.\n");
1431 >        painCave.isFatal = 1;
1432 >        simError();
1433 >       }
1434 >       break;
1435        
1436      case NPTf_ENS:
1437 <        if (globals->haveZconstraints()){
1438 <         setupZConstraint(info[k]);
1439 <           myNPTf = new ZConstraint<NPTf<RealIntegrator> >( &(info[k]), the_ff );
1440 <        }
1441 <        else
1437 >      if (globals->haveZconstraints()){
1438 >        setupZConstraint(info[k]);
1439 >        myNPTf = new ZConstraint<NPTf<RealIntegrator> >( &(info[k]), the_ff );
1440 >      }
1441 >      else
1442          myNPTf = new NPTf<RealIntegrator>( &(info[k]), the_ff );
1443  
1444        myNPTf->setTargetTemp( globals->getTargetTemp());
1445 <      
1445 >          
1446        if (globals->haveTargetPressure())
1447 <        myNPTf->setTargetPressure(globals->getTargetPressure());
1447 >        myNPTf->setTargetPressure(globals->getTargetPressure());
1448        else {
1449 <        sprintf( painCave.errMsg,
1450 <                 "SimSetup error: If you use a constant pressure\n"
1451 <                 "    ensemble, you must set targetPressure in the BASS file.\n");
1452 <        painCave.isFatal = 1;
1453 <        simError();
1449 >        sprintf( painCave.errMsg,
1450 >                  "SimSetup error: If you use a constant pressure\n"
1451 >                  "    ensemble, you must set targetPressure in the BASS file.\n");
1452 >        painCave.isFatal = 1;
1453 >        simError();
1454        }    
1455 <      
1455 >          
1456        if( globals->haveTauThermostat() )
1457 <        myNPTf->setTauThermostat( globals->getTauThermostat() );
1457 >        myNPTf->setTauThermostat( globals->getTauThermostat() );
1458        else{
1459 <        sprintf( painCave.errMsg,
1460 <                 "SimSetup error: If you use an NPT\n"
1461 <               "    ensemble, you must set tauThermostat.\n");
1462 <        painCave.isFatal = 1;
1463 <        simError();
1459 >        sprintf( painCave.errMsg,
1460 >         "SimSetup error: If you use an NPT\n"
1461 >                   "    ensemble, you must set tauThermostat.\n");
1462 >        painCave.isFatal = 1;
1463 >        simError();
1464        }
1465 <      
1465 >          
1466        if( globals->haveTauBarostat() )
1467 <        myNPTf->setTauBarostat( globals->getTauBarostat() );
1467 >        myNPTf->setTauBarostat( globals->getTauBarostat() );
1468        else{
1469 <        sprintf( painCave.errMsg,
1470 <                 "SimSetup error: If you use an NPT\n"
1471 <                 "    ensemble, you must set tauBarostat.\n");
1472 <        painCave.isFatal = 1;
1473 <        simError();
1469 >        sprintf( painCave.errMsg,
1470 >                  "SimSetup error: If you use an NPT\n"
1471 >                  "    ensemble, you must set tauBarostat.\n");
1472 >        painCave.isFatal = 1;
1473 >        simError();
1474        }
1475        break;
1476        
1477      case NPTim_ENS:
1478 <        if (globals->haveZconstraints()){
1479 <         setupZConstraint(info[k]);
1480 <           myNPTim = new ZConstraint<NPTim<RealIntegrator> >( &(info[k]), the_ff );
1481 <        }
1482 <        else
1478 >      if (globals->haveZconstraints()){
1479 >        setupZConstraint(info[k]);
1480 >        myNPTim = new ZConstraint<NPTim<RealIntegrator> >( &(info[k]), the_ff );
1481 >      }
1482 >      else
1483          myNPTim = new NPTim<RealIntegrator>( &(info[k]), the_ff );
1484  
1485 <        myNPTim->setTargetTemp( globals->getTargetTemp());
1486 <      
1485 >        myNPTim->setTargetTemp( globals->getTargetTemp());
1486 >          
1487        if (globals->haveTargetPressure())
1488 <        myNPTim->setTargetPressure(globals->getTargetPressure());
1488 >        myNPTim->setTargetPressure(globals->getTargetPressure());
1489        else {
1490 <        sprintf( painCave.errMsg,
1491 <                 "SimSetup error: If you use a constant pressure\n"
1492 <                 "    ensemble, you must set targetPressure in the BASS file.\n");
1493 <        painCave.isFatal = 1;
1494 <        simError();
1490 >        sprintf( painCave.errMsg,
1491 >                  "SimSetup error: If you use a constant pressure\n"
1492 >                  "    ensemble, you must set targetPressure in the BASS file.\n");
1493 >        painCave.isFatal = 1;
1494 >        simError();
1495        }
1496 <      
1496 >          
1497        if( globals->haveTauThermostat() )
1498 <        myNPTim->setTauThermostat( globals->getTauThermostat() );
1498 >        myNPTim->setTauThermostat( globals->getTauThermostat() );
1499        else{
1500 <        sprintf( painCave.errMsg,
1501 <                 "SimSetup error: If you use an NPT\n"
1502 <                 "    ensemble, you must set tauThermostat.\n");
1503 <        painCave.isFatal = 1;
1504 <        simError();
1500 >        sprintf( painCave.errMsg,
1501 >                  "SimSetup error: If you use an NPT\n"
1502 >                  "    ensemble, you must set tauThermostat.\n");
1503 >        painCave.isFatal = 1;
1504 >        simError();
1505        }
1506 <      
1506 >          
1507        if( globals->haveTauBarostat() )
1508 <        myNPTim->setTauBarostat( globals->getTauBarostat() );
1508 >        myNPTim->setTauBarostat( globals->getTauBarostat() );
1509        else{
1510 <      sprintf( painCave.errMsg,
1511 <               "SimSetup error: If you use an NPT\n"
1512 <               "    ensemble, you must set tauBarostat.\n");
1513 <      painCave.isFatal = 1;
1514 <      simError();
1510 >        sprintf( painCave.errMsg,
1511 >                   "SimSetup error: If you use an NPT\n"
1512 >                   "    ensemble, you must set tauBarostat.\n");
1513 >        painCave.isFatal = 1;
1514 >        simError();
1515        }
1516        break;
1517        
1518      case NPTfm_ENS:
1519 <        if (globals->haveZconstraints()){
1520 <         setupZConstraint(info[k]);
1521 <           myNPTfm = new ZConstraint<NPTfm<RealIntegrator> >( &(info[k]), the_ff );
1522 <        }
1523 <        else
1519 >      if (globals->haveZconstraints()){
1520 >        setupZConstraint(info[k]);
1521 >        myNPTfm = new ZConstraint<NPTfm<RealIntegrator> >( &(info[k]), the_ff );
1522 >      }
1523 >      else
1524          myNPTfm = new NPTfm<RealIntegrator>( &(info[k]), the_ff );
1525  
1526 <        myNPTfm->setTargetTemp( globals->getTargetTemp());
1527 <      
1526 >      myNPTfm->setTargetTemp( globals->getTargetTemp());
1527 >
1528        if (globals->haveTargetPressure())
1529 <        myNPTfm->setTargetPressure(globals->getTargetPressure());
1529 >        myNPTfm->setTargetPressure(globals->getTargetPressure());
1530        else {
1531 <        sprintf( painCave.errMsg,
1532 <                 "SimSetup error: If you use a constant pressure\n"
1533 <                 "    ensemble, you must set targetPressure in the BASS file.\n");
1534 <        painCave.isFatal = 1;
1535 <        simError();
1531 >        sprintf( painCave.errMsg,
1532 >                  "SimSetup error: If you use a constant pressure\n"
1533 >                  "    ensemble, you must set targetPressure in the BASS file.\n");
1534 >        painCave.isFatal = 1;
1535 >        simError();
1536        }
1537 <      
1537 >
1538        if( globals->haveTauThermostat() )
1539 <        myNPTfm->setTauThermostat( globals->getTauThermostat() );
1539 >        myNPTfm->setTauThermostat( globals->getTauThermostat() );
1540        else{
1541 <        sprintf( painCave.errMsg,
1542 <                 "SimSetup error: If you use an NPT\n"
1543 <                 "    ensemble, you must set tauThermostat.\n");
1544 <        painCave.isFatal = 1;
1545 <        simError();
1541 >        sprintf( painCave.errMsg,
1542 >                  "SimSetup error: If you use an NPT\n"
1543 >                  "    ensemble, you must set tauThermostat.\n");
1544 >        painCave.isFatal = 1;
1545 >        simError();
1546        }
1547 <      
1547 >
1548        if( globals->haveTauBarostat() )
1549 <        myNPTfm->setTauBarostat( globals->getTauBarostat() );
1549 >        myNPTfm->setTauBarostat( globals->getTauBarostat() );
1550        else{
1551 <        sprintf( painCave.errMsg,
1552 <                 "SimSetup error: If you use an NPT\n"
1553 <                 "    ensemble, you must set tauBarostat.\n");
1554 <        painCave.isFatal = 1;
1555 <        simError();
1551 >        sprintf( painCave.errMsg,
1552 >                  "SimSetup error: If you use an NPT\n"
1553 >                  "    ensemble, you must set tauBarostat.\n");
1554 >        painCave.isFatal = 1;
1555 >        simError();
1556        }
1557        break;
1558        
1559      default:
1560        sprintf( painCave.errMsg,
1561 <               "SimSetup Error. Unrecognized ensemble in case statement.\n");
1561 >                 "SimSetup Error. Unrecognized ensemble in case statement.\n");
1562        painCave.isFatal = 1;
1563        simError();
1564      }
# Line 1578 | Line 1577 | void SimSetup::initFortran( void ){
1577    }
1578    else{
1579      sprintf( painCave.errMsg,
1580 <             "SimSetup Error: unknown mixing rule -> \"%s\"\n",
1581 <             info[0].mixingRule );
1580 >       "SimSetup Error: unknown mixing rule -> \"%s\"\n",
1581 >       info[0].mixingRule );
1582      painCave.isFatal = 1;
1583      simError();
1584    }
# Line 1587 | Line 1586 | void SimSetup::initFortran( void ){
1586  
1587   #ifdef IS_MPI
1588    strcpy( checkPointMsg,
1589 <          "Successfully intialized the mixingRule for Fortran." );
1589 >    "Successfully intialized the mixingRule for Fortran." );
1590    MPIcheckPoint();
1591   #endif // is_mpi
1592  
# Line 1595 | Line 1594 | void SimSetup::setupZConstraint(SimInfo& theInfo)
1594  
1595   void SimSetup::setupZConstraint(SimInfo& theInfo)
1596   {
1597 <    int nZConstraints;
1598 <    ZconStamp** zconStamp;
1600 <        
1601 <    if(globals->haveZconstraintTime()){  
1602 <      
1603 <      //add sample time of z-constraint  into SimInfo's property list                    
1604 <      DoubleData* zconsTimeProp = new DoubleData();
1605 <      zconsTimeProp->setID(ZCONSTIME_ID);
1606 <      zconsTimeProp->setData(globals->getZconsTime());
1607 <      theInfo.addProperty(zconsTimeProp);
1608 <    }
1609 <    else{
1610 <      sprintf( painCave.errMsg,
1611 <               "ZConstraint error: If you use an ZConstraint\n"
1612 <               " , you must set sample time.\n");
1613 <      painCave.isFatal = 1;
1614 <      simError();      
1615 <    }
1597 >  int nZConstraints;
1598 >  ZconStamp** zconStamp;
1599  
1600 <    //
1601 <    nZConstraints = globals->getNzConstraints();
1602 <    theInfo.nZconstraints = nZConstraints;
1603 <        
1604 <    zconStamp = globals->getZconStamp();
1605 <    ZConsParaItem tempParaItem;
1600 >  if(globals->haveZconstraintTime()){  
1601 >    
1602 >    //add sample time of z-constraint  into SimInfo's property list                    
1603 >    DoubleData* zconsTimeProp = new DoubleData();
1604 >    zconsTimeProp->setID(ZCONSTIME_ID);
1605 >    zconsTimeProp->setData(globals->getZconsTime());
1606 >    theInfo.addProperty(zconsTimeProp);
1607 >  }
1608 >  else{
1609 >    sprintf( painCave.errMsg,
1610 >       "ZConstraint error: If you use an ZConstraint\n"
1611 >       " , you must set sample time.\n");
1612 >    painCave.isFatal = 1;
1613 >    simError();      
1614 >  }
1615  
1616 <    ZConsParaData* zconsParaData = new ZConsParaData();
1617 <    zconsParaData->setID(ZCONSPARADATA_ID);
1618 <  
1619 <    for(int i = 0; i < nZConstraints; i++){
1616 >  //push zconsTol into siminfo, if user does not specify
1617 >  //value for zconsTol, a default value will be used
1618 >  DoubleData* zconsTol = new DoubleData();
1619 >  zconsTol->setID(ZCONSTOL_ID);
1620 >  if(globals->haveZconsTol()){
1621 >    zconsTol->setData(globals->getZconsTol());
1622 >  }
1623 >  else{
1624 >  double defaultZConsTol = 0.01;
1625 >    sprintf( painCave.errMsg,
1626 >       "ZConstraint Waring: Tolerance for z-constraint methodl is not specified\n"
1627 >       " , default value %f is used.\n", defaultZConsTol);
1628 >    painCave.isFatal = 0;
1629 >    simError();      
1630 >
1631 >    zconsTol->setData(defaultZConsTol);
1632 >  }
1633 >  theInfo.addProperty(zconsTol);
1634 >
1635 >  //set Force Substraction Policy
1636 >  StringData* zconsForcePolicy =  new StringData();
1637 >  zconsForcePolicy->setID(ZCONSFORCEPOLICY_ID);
1638 >  
1639 >  if(globals->haveZconsForcePolicy()){
1640 >    zconsForcePolicy->setData(globals->getZconsForcePolicy());
1641 >  }  
1642 >  else{
1643 >     sprintf( painCave.errMsg,
1644 >             "ZConstraint Warning: User does not set force substraction policy, "
1645 >             "average force substraction policy is used\n");
1646 >     painCave.isFatal = 0;
1647 >     simError();
1648 >     zconsForcePolicy->setData("BYNUMBER");
1649 >  }
1650 >
1651 > theInfo.addProperty(zconsForcePolicy);
1652 >
1653 >  //Determine the name of ouput file and add it into SimInfo's property list
1654 >  //Be careful, do not use inFileName, since it is a pointer which
1655 >  //point to a string at master node, and slave nodes do not contain that string
1656 >  
1657 >  string zconsOutput(theInfo.finalName);
1658 >  
1659 >  zconsOutput = zconsOutput.substr(0, zconsOutput.rfind(".")) + ".fz";
1660 >  
1661 >  StringData* zconsFilename = new StringData();
1662 >  zconsFilename->setID(ZCONSFILENAME_ID);
1663 >  zconsFilename->setData(zconsOutput);
1664 >  
1665 >  theInfo.addProperty(zconsFilename);
1666 >  
1667 >  //setup index, pos and other parameters of z-constraint molecules
1668 >  nZConstraints = globals->getNzConstraints();
1669 >  theInfo.nZconstraints = nZConstraints;
1670 >
1671 >  zconStamp = globals->getZconStamp();
1672 >  ZConsParaItem tempParaItem;
1673 >
1674 >  ZConsParaData* zconsParaData = new ZConsParaData();
1675 >  zconsParaData->setID(ZCONSPARADATA_ID);
1676 >
1677 >  for(int i = 0; i < nZConstraints; i++){
1678      tempParaItem.havingZPos = zconStamp[i]->haveZpos();
1679      tempParaItem.zPos = zconStamp[i]->getZpos();
1680      tempParaItem.zconsIndex = zconStamp[i]->getMolIndex();
1681      tempParaItem.kRatio = zconStamp[i]->getKratio();
1682  
1683      zconsParaData->addItem(tempParaItem);
1684 <    }
1684 >  }
1685  
1686 <    //sort the parameters by index of molecules
1687 <    zconsParaData->sortByIndex();
1688 <        
1689 <    //push data into siminfo, therefore, we can retrieve later
1690 <    theInfo.addProperty(zconsParaData);
1691 <
1642 <    //push zconsTol into siminfo, if user does not specify
1643 <    //value for zconsTol, a default value will be used
1644 <    DoubleData* zconsTol = new DoubleData();
1645 <    zconsTol->setID(ZCONSTOL_ID);
1646 <    if(globals->haveZconsTol()){
1647 <      zconsTol->setData(globals->getZconsTol());
1648 <    }
1649 <         else{
1650 <                double defaultZConsTol = 1E-6;
1651 <      sprintf( painCave.errMsg,
1652 <               "ZConstraint Waring: Tolerance for z-constraint methodl is not specified\n"
1653 <               " , default value %f is used.\n", defaultZConsTol);
1654 <      painCave.isFatal = 0;
1655 <      simError();      
1656 <
1657 <      zconsTol->setData(defaultZConsTol);
1658 <         }
1659 <    theInfo.addProperty(zconsTol);
1660 <        
1661 <    //Determine the name of ouput file and add it into SimInfo's property list
1662 <    //Be careful, do not use inFileName, since it is a pointer which
1663 <    //point to a string at master node, and slave nodes do not contain that string
1664 <    
1665 <    string zconsOutput(theInfo.finalName);
1666 <    
1667 <    zconsOutput = zconsOutput.substr(0, zconsOutput.rfind(".")) + ".fz";
1668 <    
1669 <    StringData* zconsFilename = new StringData();
1670 <    zconsFilename->setID(ZCONSFILENAME_ID);
1671 <    zconsFilename->setData(zconsOutput);
1672 <    
1673 <    theInfo.addProperty(zconsFilename);      
1686 >  //sort the parameters by index of molecules
1687 >  zconsParaData->sortByIndex();
1688 >  
1689 >  //push data into siminfo, therefore, we can retrieve later
1690 >  theInfo.addProperty(zconsParaData);
1691 >      
1692   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines