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 700 by tim, Fri Aug 15 19:24:13 2003 UTC vs.
Revision 701 by tim, Wed Aug 20 14:34:04 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 );
469 >  makeElement( i * cellx,
470 >         j * celly + 0.5 * celly,
471 >         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 919 | Line 919 | void SimSetup::initSystemCoords( void ){
919      // no init from bass
920      
921      sprintf( painCave.errMsg,
922 <             "Cannot intialize a parallel simulation without an initial configuration file.\n" );
922 >       "Cannot intialize a parallel simulation without an initial configuration file.\n" );
923      painCave.isFatal;
924      simError();
925      
# Line 951 | Line 951 | void SimSetup::makeOutNames( void ){
951   #endif // is_mpi
952        
953        if( globals->haveFinalConfig() ){
954 <        strcpy( info[k].finalName, globals->getFinalConfig() );
954 >  strcpy( info[k].finalName, globals->getFinalConfig() );
955        }
956        else{
957 <        strcpy( info[k].finalName, inFileName );
958 <        char* endTest;
959 <        int nameLength = strlen( info[k].finalName );
960 <        endTest = &(info[k].finalName[nameLength - 5]);
961 <        if( !strcmp( endTest, ".bass" ) ){
962 <          strcpy( endTest, ".eor" );
963 <        }
964 <        else if( !strcmp( endTest, ".BASS" ) ){
965 <          strcpy( endTest, ".eor" );
966 <        }
967 <        else{
968 <          endTest = &(info[k].finalName[nameLength - 4]);
969 <          if( !strcmp( endTest, ".bss" ) ){
970 <            strcpy( endTest, ".eor" );
971 <          }
972 <          else if( !strcmp( endTest, ".mdl" ) ){
973 <            strcpy( endTest, ".eor" );
974 <          }
975 <          else{
976 <            strcat( info[k].finalName, ".eor" );
977 <          }
978 <        }
957 >  strcpy( info[k].finalName, inFileName );
958 >  char* endTest;
959 >  int nameLength = strlen( info[k].finalName );
960 >  endTest = &(info[k].finalName[nameLength - 5]);
961 >  if( !strcmp( endTest, ".bass" ) ){
962 >    strcpy( endTest, ".eor" );
963 >  }
964 >  else if( !strcmp( endTest, ".BASS" ) ){
965 >    strcpy( endTest, ".eor" );
966 >  }
967 >  else{
968 >    endTest = &(info[k].finalName[nameLength - 4]);
969 >    if( !strcmp( endTest, ".bss" ) ){
970 >      strcpy( endTest, ".eor" );
971 >    }
972 >    else if( !strcmp( endTest, ".mdl" ) ){
973 >      strcpy( endTest, ".eor" );
974 >    }
975 >    else{
976 >      strcat( info[k].finalName, ".eor" );
977 >    }
978 >  }
979        }
980        
981        // make the sample and status out names
# Line 985 | Line 985 | void SimSetup::makeOutNames( void ){
985        int nameLength = strlen( info[k].sampleName );
986        endTest = &(info[k].sampleName[nameLength - 5]);
987        if( !strcmp( endTest, ".bass" ) ){
988 <        strcpy( endTest, ".dump" );
988 >  strcpy( endTest, ".dump" );
989        }
990        else if( !strcmp( endTest, ".BASS" ) ){
991 <        strcpy( endTest, ".dump" );
991 >  strcpy( endTest, ".dump" );
992        }
993        else{
994 <        endTest = &(info[k].sampleName[nameLength - 4]);
995 <        if( !strcmp( endTest, ".bss" ) ){
996 <          strcpy( endTest, ".dump" );
997 <        }
998 <        else if( !strcmp( endTest, ".mdl" ) ){
999 <          strcpy( endTest, ".dump" );
1000 <        }
1001 <        else{
1002 <          strcat( info[k].sampleName, ".dump" );
1003 <        }
994 >  endTest = &(info[k].sampleName[nameLength - 4]);
995 >  if( !strcmp( endTest, ".bss" ) ){
996 >    strcpy( endTest, ".dump" );
997 >  }
998 >  else if( !strcmp( endTest, ".mdl" ) ){
999 >    strcpy( endTest, ".dump" );
1000 >  }
1001 >  else{
1002 >    strcat( info[k].sampleName, ".dump" );
1003 >  }
1004        }
1005        
1006        strcpy( info[k].statusName, inFileName );
1007        nameLength = strlen( info[k].statusName );
1008        endTest = &(info[k].statusName[nameLength - 5]);
1009        if( !strcmp( endTest, ".bass" ) ){
1010 <        strcpy( endTest, ".stat" );
1010 >  strcpy( endTest, ".stat" );
1011        }
1012        else if( !strcmp( endTest, ".BASS" ) ){
1013 <        strcpy( endTest, ".stat" );
1013 >  strcpy( endTest, ".stat" );
1014        }
1015        else{
1016 <        endTest = &(info[k].statusName[nameLength - 4]);
1017 <        if( !strcmp( endTest, ".bss" ) ){
1018 <          strcpy( endTest, ".stat" );
1019 <        }
1020 <        else if( !strcmp( endTest, ".mdl" ) ){
1021 <          strcpy( endTest, ".stat" );
1022 <        }
1023 <        else{
1024 <          strcat( info[k].statusName, ".stat" );
1025 <        }
1016 >  endTest = &(info[k].statusName[nameLength - 4]);
1017 >  if( !strcmp( endTest, ".bss" ) ){
1018 >    strcpy( endTest, ".stat" );
1019 >  }
1020 >  else if( !strcmp( endTest, ".mdl" ) ){
1021 >    strcpy( endTest, ".stat" );
1022 >  }
1023 >  else{
1024 >    strcat( info[k].statusName, ".stat" );
1025 >  }
1026        }
1027        
1028   #ifdef IS_MPI
# Line 1089 | Line 1089 | void SimSetup::createFF( void ){
1089  
1090    default:
1091      sprintf( painCave.errMsg,
1092 <             "SimSetup Error. Unrecognized force field in case statement.\n");
1092 >       "SimSetup Error. Unrecognized force field in case statement.\n");
1093      painCave.isFatal = 1;
1094      simError();
1095    }
# Line 1135 | Line 1135 | void SimSetup::compList( void ){
1135        
1136        currentStamp = stamps->extractMolStamp( id );
1137        if( currentStamp == NULL ){
1138 <        sprintf( painCave.errMsg,
1139 <                 "SimSetup error: Component \"%s\" was not found in the "
1140 <                 "list of declared molecules\n",
1141 <                 id );
1142 <        painCave.isFatal = 1;
1143 <        simError();
1138 >  sprintf( painCave.errMsg,
1139 >     "SimSetup error: Component \"%s\" was not found in the "
1140 >     "list of declared molecules\n",
1141 >     id );
1142 >  painCave.isFatal = 1;
1143 >  simError();
1144        }
1145        
1146        headStamp->add( currentStamp );
# Line 1219 | Line 1219 | void SimSetup::mpiMolDivide( void ){
1219      for( j=0; j<components_nmol[i]; j++ ){
1220        
1221        if( mol2proc[allMol] == worldRank ){
1222 <        
1223 <        local_atoms +=    comp_stamps[i]->getNAtoms();
1224 <        local_bonds +=    comp_stamps[i]->getNBonds();
1225 <        local_bends +=    comp_stamps[i]->getNBends();
1226 <        local_torsions += comp_stamps[i]->getNTorsions();
1227 <        localMol++;
1222 >  
1223 >  local_atoms +=    comp_stamps[i]->getNAtoms();
1224 >  local_bonds +=    comp_stamps[i]->getNBonds();
1225 >  local_bends +=    comp_stamps[i]->getNBends();
1226 >  local_torsions += comp_stamps[i]->getNTorsions();
1227 >  localMol++;
1228        }      
1229        for (k = 0; k < comp_stamps[i]->getNAtoms(); k++) {
1230          info[0].molMembershipArray[globalAtomIndex] = allMol;
# Line 1240 | Line 1240 | void SimSetup::mpiMolDivide( void ){
1240    
1241    if( local_atoms != info[0].n_atoms ){
1242      sprintf( painCave.errMsg,
1243 <             "SimSetup error: mpiSim's localAtom (%d) and SimSetup's"
1244 <             " localAtom (%d) are not equal.\n",
1245 <             info[0].n_atoms,
1246 <             local_atoms );
1243 >       "SimSetup error: mpiSim's localAtom (%d) and SimSetup's"
1244 >       " localAtom (%d) are not equal.\n",
1245 >       info[0].n_atoms,
1246 >       local_atoms );
1247      painCave.isFatal = 1;
1248      simError();
1249    }
# Line 1286 | Line 1286 | void SimSetup::makeSysArrays( void ){
1286      for(i=0; i<mpiSim->getTotNmol(); i++){
1287      
1288        if(mol2proc[i] == worldRank ){
1289 <        the_molecules[molIndex].setStampID( molCompType[i] );
1290 <        the_molecules[molIndex].setMyIndex( molIndex );
1291 <        the_molecules[molIndex].setGlobalIndex( i );
1292 <        molIndex++;
1289 >  the_molecules[molIndex].setStampID( molCompType[i] );
1290 >  the_molecules[molIndex].setMyIndex( molIndex );
1291 >  the_molecules[molIndex].setGlobalIndex( i );
1292 >  molIndex++;
1293        }
1294      }
1295      
# Line 1299 | Line 1299 | void SimSetup::makeSysArrays( void ){
1299      globalAtomIndex = 0;
1300      for(i=0; i<n_components; i++){
1301        for(j=0; j<components_nmol[i]; j++ ){
1302 <        the_molecules[molIndex].setStampID( i );
1303 <        the_molecules[molIndex].setMyIndex( molIndex );
1304 <        the_molecules[molIndex].setGlobalIndex( molIndex );
1305 <        for (k = 0; k < comp_stamps[i]->getNAtoms(); k++) {
1306 <          info[l].molMembershipArray[globalAtomIndex] = molIndex;
1307 <          globalAtomIndex++;
1308 <        }
1309 <        molIndex++;
1302 >  the_molecules[molIndex].setStampID( i );
1303 >  the_molecules[molIndex].setMyIndex( molIndex );
1304 >  the_molecules[molIndex].setGlobalIndex( molIndex );
1305 >  for (k = 0; k < comp_stamps[i]->getNAtoms(); k++) {
1306 >    info[l].molMembershipArray[globalAtomIndex] = molIndex;
1307 >    globalAtomIndex++;
1308 >  }
1309 >  molIndex++;
1310        }
1311      }
1312      
# Line 1319 | Line 1319 | void SimSetup::makeSysArrays( void ){
1319        Exclude::createArray(info[l].n_SRI);
1320        the_excludes = new Exclude*[info[l].n_SRI];
1321        for( int ex=0; ex<info[l].n_SRI; ex++){
1322 <        the_excludes[ex] = new Exclude(ex);
1322 >  the_excludes[ex] = new Exclude(ex);
1323        }
1324        info[l].globalExcludes = new int;
1325        info[l].n_exclude = info[l].n_SRI;
# Line 1362 | Line 1362 | void SimSetup::makeIntegrator( void ){
1362      switch( ensembleCase ){
1363        
1364      case NVE_ENS:
1365 <        if (globals->haveZconstraints()){
1366 <         setupZConstraint(info[k]);
1367 <           new ZConstraint<NVE<RealIntegrator> >( &(info[k]), the_ff );
1368 <        }
1365 >      if (globals->haveZconstraints()){
1366 >        setupZConstraint(info[k]);
1367 >        new ZConstraint<NVE<RealIntegrator> >( &(info[k]), the_ff );
1368 >     }
1369  
1370 <        else
1370 >     else
1371          new NVE<RealIntegrator>( &(info[k]), the_ff );
1372        break;
1373        
1374      case NVT_ENS:
1375 <        if (globals->haveZconstraints()){
1376 <         setupZConstraint(info[k]);
1377 <           myNVT = new ZConstraint<NVT<RealIntegrator> >( &(info[k]), the_ff );
1378 <        }
1379 <        else
1375 >      if (globals->haveZconstraints()){
1376 >        setupZConstraint(info[k]);
1377 >        myNVT = new ZConstraint<NVT<RealIntegrator> >( &(info[k]), the_ff );
1378 >      }
1379 >      else
1380          myNVT = new NVT<RealIntegrator>( &(info[k]), the_ff );
1381  
1382 <      myNVT->setTargetTemp(globals->getTargetTemp());
1382 >        myNVT->setTargetTemp(globals->getTargetTemp());
1383        
1384 <      if (globals->haveTauThermostat())
1385 <        myNVT->setTauThermostat(globals->getTauThermostat());
1384 >        if (globals->haveTauThermostat())
1385 >          myNVT->setTauThermostat(globals->getTauThermostat());
1386        
1387 <      else {
1388 <        sprintf( painCave.errMsg,
1389 <                 "SimSetup error: If you use the NVT\n"
1390 <                 "    ensemble, you must set tauThermostat.\n");
1391 <        painCave.isFatal = 1;
1392 <        simError();
1393 <      }
1394 <      break;
1387 >        else {
1388 >          sprintf( painCave.errMsg,
1389 >                    "SimSetup error: If you use the NVT\n"
1390 >                    "    ensemble, you must set tauThermostat.\n");
1391 >          painCave.isFatal = 1;
1392 >          simError();
1393 >        }
1394 >        break;
1395        
1396      case NPTi_ENS:
1397 <        if (globals->haveZconstraints()){
1398 <         setupZConstraint(info[k]);
1399 <           myNPTi = new ZConstraint<NPTi<RealIntegrator> >( &(info[k]), the_ff );
1400 <        }
1401 <        else
1397 >      if (globals->haveZconstraints()){
1398 >             setupZConstraint(info[k]);
1399 >         myNPTi = new ZConstraint<NPTi<RealIntegrator> >( &(info[k]), the_ff );
1400 >      }
1401 >      else
1402          myNPTi = new NPTi<RealIntegrator>( &(info[k]), the_ff );
1403  
1404 <        myNPTi->setTargetTemp( globals->getTargetTemp() );
1405 <      
1404 >      myNPTi->setTargetTemp( globals->getTargetTemp() );
1405 >          
1406        if (globals->haveTargetPressure())
1407 <        myNPTi->setTargetPressure(globals->getTargetPressure());
1407 >        myNPTi->setTargetPressure(globals->getTargetPressure());
1408        else {
1409 <        sprintf( painCave.errMsg,
1410 <                 "SimSetup error: If you use a constant pressure\n"
1411 <                 "    ensemble, you must set targetPressure in the BASS file.\n");
1412 <        painCave.isFatal = 1;
1413 <        simError();
1409 >         sprintf( painCave.errMsg,
1410 >                   "SimSetup error: If you use a constant pressure\n"
1411 >                   "    ensemble, you must set targetPressure in the BASS file.\n");
1412 >         painCave.isFatal = 1;
1413 >         simError();
1414        }
1415 <      
1415 >          
1416        if( globals->haveTauThermostat() )
1417 <        myNPTi->setTauThermostat( globals->getTauThermostat() );
1417 >        myNPTi->setTauThermostat( globals->getTauThermostat() );
1418        else{
1419 <        sprintf( painCave.errMsg,
1420 <                 "SimSetup error: If you use an NPT\n"
1421 <                 "    ensemble, you must set tauThermostat.\n");
1422 <        painCave.isFatal = 1;
1423 <        simError();
1419 >         sprintf( painCave.errMsg,
1420 >                   "SimSetup error: If you use an NPT\n"
1421 >                  "    ensemble, you must set tauThermostat.\n");
1422 >         painCave.isFatal = 1;
1423 >         simError();
1424        }
1425 <      
1425 >          
1426        if( globals->haveTauBarostat() )
1427 <        myNPTi->setTauBarostat( globals->getTauBarostat() );
1427 >        myNPTi->setTauBarostat( globals->getTauBarostat() );
1428        else{
1429 <        sprintf( painCave.errMsg,
1430 <                 "SimSetup error: If you use an NPT\n"
1431 <                 "    ensemble, you must set tauBarostat.\n");
1432 <        painCave.isFatal = 1;
1433 <        simError();
1434 <      }
1435 <      break;
1429 >        sprintf( painCave.errMsg,
1430 >                  "SimSetup error: If you use an NPT\n"
1431 >                  "    ensemble, you must set tauBarostat.\n");
1432 >        painCave.isFatal = 1;
1433 >        simError();
1434 >       }
1435 >       break;
1436        
1437      case NPTf_ENS:
1438 <        if (globals->haveZconstraints()){
1439 <         setupZConstraint(info[k]);
1440 <           myNPTf = new ZConstraint<NPTf<RealIntegrator> >( &(info[k]), the_ff );
1441 <        }
1442 <        else
1438 >      if (globals->haveZconstraints()){
1439 >        setupZConstraint(info[k]);
1440 >        myNPTf = new ZConstraint<NPTf<RealIntegrator> >( &(info[k]), the_ff );
1441 >      }
1442 >      else
1443          myNPTf = new NPTf<RealIntegrator>( &(info[k]), the_ff );
1444  
1445        myNPTf->setTargetTemp( globals->getTargetTemp());
1446 <      
1446 >          
1447        if (globals->haveTargetPressure())
1448 <        myNPTf->setTargetPressure(globals->getTargetPressure());
1448 >        myNPTf->setTargetPressure(globals->getTargetPressure());
1449        else {
1450 <        sprintf( painCave.errMsg,
1451 <                 "SimSetup error: If you use a constant pressure\n"
1452 <                 "    ensemble, you must set targetPressure in the BASS file.\n");
1453 <        painCave.isFatal = 1;
1454 <        simError();
1450 >        sprintf( painCave.errMsg,
1451 >                  "SimSetup error: If you use a constant pressure\n"
1452 >                  "    ensemble, you must set targetPressure in the BASS file.\n");
1453 >        painCave.isFatal = 1;
1454 >        simError();
1455        }    
1456 <      
1456 >          
1457        if( globals->haveTauThermostat() )
1458 <        myNPTf->setTauThermostat( globals->getTauThermostat() );
1458 >        myNPTf->setTauThermostat( globals->getTauThermostat() );
1459        else{
1460 <        sprintf( painCave.errMsg,
1461 <                 "SimSetup error: If you use an NPT\n"
1462 <               "    ensemble, you must set tauThermostat.\n");
1463 <        painCave.isFatal = 1;
1464 <        simError();
1460 >        sprintf( painCave.errMsg,
1461 >         "SimSetup error: If you use an NPT\n"
1462 >                   "    ensemble, you must set tauThermostat.\n");
1463 >        painCave.isFatal = 1;
1464 >        simError();
1465        }
1466 <      
1466 >          
1467        if( globals->haveTauBarostat() )
1468 <        myNPTf->setTauBarostat( globals->getTauBarostat() );
1468 >        myNPTf->setTauBarostat( globals->getTauBarostat() );
1469        else{
1470 <        sprintf( painCave.errMsg,
1471 <                 "SimSetup error: If you use an NPT\n"
1472 <                 "    ensemble, you must set tauBarostat.\n");
1473 <        painCave.isFatal = 1;
1474 <        simError();
1470 >        sprintf( painCave.errMsg,
1471 >                  "SimSetup error: If you use an NPT\n"
1472 >                  "    ensemble, you must set tauBarostat.\n");
1473 >        painCave.isFatal = 1;
1474 >        simError();
1475        }
1476        break;
1477        
1478      case NPTim_ENS:
1479 <        if (globals->haveZconstraints()){
1480 <         setupZConstraint(info[k]);
1481 <           myNPTim = new ZConstraint<NPTim<RealIntegrator> >( &(info[k]), the_ff );
1482 <        }
1483 <        else
1479 >      if (globals->haveZconstraints()){
1480 >        setupZConstraint(info[k]);
1481 >        myNPTim = new ZConstraint<NPTim<RealIntegrator> >( &(info[k]), the_ff );
1482 >      }
1483 >      else
1484          myNPTim = new NPTim<RealIntegrator>( &(info[k]), the_ff );
1485  
1486 <        myNPTim->setTargetTemp( globals->getTargetTemp());
1487 <      
1486 >        myNPTim->setTargetTemp( globals->getTargetTemp());
1487 >          
1488        if (globals->haveTargetPressure())
1489 <        myNPTim->setTargetPressure(globals->getTargetPressure());
1489 >        myNPTim->setTargetPressure(globals->getTargetPressure());
1490        else {
1491 <        sprintf( painCave.errMsg,
1492 <                 "SimSetup error: If you use a constant pressure\n"
1493 <                 "    ensemble, you must set targetPressure in the BASS file.\n");
1494 <        painCave.isFatal = 1;
1495 <        simError();
1491 >        sprintf( painCave.errMsg,
1492 >                  "SimSetup error: If you use a constant pressure\n"
1493 >                  "    ensemble, you must set targetPressure in the BASS file.\n");
1494 >        painCave.isFatal = 1;
1495 >        simError();
1496        }
1497 <      
1497 >          
1498        if( globals->haveTauThermostat() )
1499 <        myNPTim->setTauThermostat( globals->getTauThermostat() );
1499 >        myNPTim->setTauThermostat( globals->getTauThermostat() );
1500        else{
1501 <        sprintf( painCave.errMsg,
1502 <                 "SimSetup error: If you use an NPT\n"
1503 <                 "    ensemble, you must set tauThermostat.\n");
1504 <        painCave.isFatal = 1;
1505 <        simError();
1501 >        sprintf( painCave.errMsg,
1502 >                  "SimSetup error: If you use an NPT\n"
1503 >                  "    ensemble, you must set tauThermostat.\n");
1504 >        painCave.isFatal = 1;
1505 >        simError();
1506        }
1507 <      
1507 >          
1508        if( globals->haveTauBarostat() )
1509 <        myNPTim->setTauBarostat( globals->getTauBarostat() );
1509 >        myNPTim->setTauBarostat( globals->getTauBarostat() );
1510        else{
1511 <      sprintf( painCave.errMsg,
1512 <               "SimSetup error: If you use an NPT\n"
1513 <               "    ensemble, you must set tauBarostat.\n");
1514 <      painCave.isFatal = 1;
1515 <      simError();
1511 >        sprintf( painCave.errMsg,
1512 >                   "SimSetup error: If you use an NPT\n"
1513 >                   "    ensemble, you must set tauBarostat.\n");
1514 >        painCave.isFatal = 1;
1515 >        simError();
1516        }
1517        break;
1518        
1519      case NPTfm_ENS:
1520 <        if (globals->haveZconstraints()){
1521 <         setupZConstraint(info[k]);
1522 <           myNPTfm = new ZConstraint<NPTfm<RealIntegrator> >( &(info[k]), the_ff );
1523 <        }
1524 <        else
1520 >      if (globals->haveZconstraints()){
1521 >        setupZConstraint(info[k]);
1522 >        myNPTfm = new ZConstraint<NPTfm<RealIntegrator> >( &(info[k]), the_ff );
1523 >      }
1524 >      else
1525          myNPTfm = new NPTfm<RealIntegrator>( &(info[k]), the_ff );
1526  
1527 <        myNPTfm->setTargetTemp( globals->getTargetTemp());
1528 <      
1527 >      myNPTfm->setTargetTemp( globals->getTargetTemp());
1528 >
1529        if (globals->haveTargetPressure())
1530 <        myNPTfm->setTargetPressure(globals->getTargetPressure());
1530 >        myNPTfm->setTargetPressure(globals->getTargetPressure());
1531        else {
1532 <        sprintf( painCave.errMsg,
1533 <                 "SimSetup error: If you use a constant pressure\n"
1534 <                 "    ensemble, you must set targetPressure in the BASS file.\n");
1535 <        painCave.isFatal = 1;
1536 <        simError();
1532 >        sprintf( painCave.errMsg,
1533 >                  "SimSetup error: If you use a constant pressure\n"
1534 >                  "    ensemble, you must set targetPressure in the BASS file.\n");
1535 >        painCave.isFatal = 1;
1536 >        simError();
1537        }
1538 <      
1538 >
1539        if( globals->haveTauThermostat() )
1540 <        myNPTfm->setTauThermostat( globals->getTauThermostat() );
1540 >        myNPTfm->setTauThermostat( globals->getTauThermostat() );
1541        else{
1542 <        sprintf( painCave.errMsg,
1543 <                 "SimSetup error: If you use an NPT\n"
1544 <                 "    ensemble, you must set tauThermostat.\n");
1545 <        painCave.isFatal = 1;
1546 <        simError();
1542 >        sprintf( painCave.errMsg,
1543 >                  "SimSetup error: If you use an NPT\n"
1544 >                  "    ensemble, you must set tauThermostat.\n");
1545 >        painCave.isFatal = 1;
1546 >        simError();
1547        }
1548 <      
1548 >
1549        if( globals->haveTauBarostat() )
1550 <        myNPTfm->setTauBarostat( globals->getTauBarostat() );
1550 >        myNPTfm->setTauBarostat( globals->getTauBarostat() );
1551        else{
1552 <        sprintf( painCave.errMsg,
1553 <                 "SimSetup error: If you use an NPT\n"
1554 <                 "    ensemble, you must set tauBarostat.\n");
1555 <        painCave.isFatal = 1;
1556 <        simError();
1552 >        sprintf( painCave.errMsg,
1553 >                  "SimSetup error: If you use an NPT\n"
1554 >                  "    ensemble, you must set tauBarostat.\n");
1555 >        painCave.isFatal = 1;
1556 >        simError();
1557        }
1558        break;
1559        
1560      default:
1561        sprintf( painCave.errMsg,
1562 <               "SimSetup Error. Unrecognized ensemble in case statement.\n");
1562 >                 "SimSetup Error. Unrecognized ensemble in case statement.\n");
1563        painCave.isFatal = 1;
1564        simError();
1565      }
# Line 1578 | Line 1578 | void SimSetup::initFortran( void ){
1578    }
1579    else{
1580      sprintf( painCave.errMsg,
1581 <             "SimSetup Error: unknown mixing rule -> \"%s\"\n",
1582 <             info[0].mixingRule );
1581 >       "SimSetup Error: unknown mixing rule -> \"%s\"\n",
1582 >       info[0].mixingRule );
1583      painCave.isFatal = 1;
1584      simError();
1585    }
# Line 1587 | Line 1587 | void SimSetup::initFortran( void ){
1587  
1588   #ifdef IS_MPI
1589    strcpy( checkPointMsg,
1590 <          "Successfully intialized the mixingRule for Fortran." );
1590 >    "Successfully intialized the mixingRule for Fortran." );
1591    MPIcheckPoint();
1592   #endif // is_mpi
1593  
# Line 1595 | Line 1595 | void SimSetup::setupZConstraint(SimInfo& theInfo)
1595  
1596   void SimSetup::setupZConstraint(SimInfo& theInfo)
1597   {
1598 <    int nZConstraints;
1599 <    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 <    }
1598 >  int nZConstraints;
1599 >  ZconStamp** zconStamp;
1600  
1601 <    //push zconsTol into siminfo, if user does not specify
1602 <    //value for zconsTol, a default value will be used
1603 <    DoubleData* zconsTol = new DoubleData();
1604 <    zconsTol->setID(ZCONSTOL_ID);
1605 <    if(globals->haveZconsTol()){
1606 <      zconsTol->setData(globals->getZconsTol());
1607 <    }
1608 <         else{
1609 <                double defaultZConsTol = 0.01;
1610 <      sprintf( painCave.errMsg,
1611 <               "ZConstraint Waring: Tolerance for z-constraint methodl is not specified\n"
1612 <               " , default value %f is used.\n", defaultZConsTol);
1613 <      painCave.isFatal = 0;
1614 <      simError();      
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 >  }
1616  
1617 <      zconsTol->setData(defaultZConsTol);
1618 <         }
1619 <    theInfo.addProperty(zconsTol);
1617 >  //push zconsTol into siminfo, if user does not specify
1618 >  //value for zconsTol, a default value will be used
1619 >  DoubleData* zconsTol = new DoubleData();
1620 >  zconsTol->setID(ZCONSTOL_ID);
1621 >  if(globals->haveZconsTol()){
1622 >    zconsTol->setData(globals->getZconsTol());
1623 >  }
1624 >  else{
1625 >  double defaultZConsTol = 0.01;
1626 >    sprintf( painCave.errMsg,
1627 >       "ZConstraint Waring: Tolerance for z-constraint methodl is not specified\n"
1628 >       " , default value %f is used.\n", defaultZConsTol);
1629 >    painCave.isFatal = 0;
1630 >    simError();      
1631  
1632 <    //set Force Substraction Policy
1633 <    StringData* zconsForcePolicy =  new StringData();
1634 <    zconsForcePolicy->setID(ZCONSFORCEPOLICY_ID);
1639 <                
1640 <         if(globals->haveZconsForcePolicy()){
1641 <      zconsForcePolicy->setData(globals->getZconsForcePolicy());
1642 <         }      
1643 <         else{
1644 <       sprintf( painCave.errMsg,
1645 <               "ZConstraint Warning: User does not set force substraction policy, "
1646 <               "average force substraction policy is used\n");
1647 <       painCave.isFatal = 0;
1648 <       simError();
1649 <                 zconsForcePolicy->setData("BYNUMBER");
1650 <         }
1651 <        
1652 <         theInfo.addProperty(zconsForcePolicy);
1653 <        
1654 <    //Determine the name of ouput file and add it into SimInfo's property list
1655 <    //Be careful, do not use inFileName, since it is a pointer which
1656 <    //point to a string at master node, and slave nodes do not contain that string
1657 <    
1658 <    string zconsOutput(theInfo.finalName);
1659 <    
1660 <    zconsOutput = zconsOutput.substr(0, zconsOutput.rfind(".")) + ".fz";
1661 <    
1662 <    StringData* zconsFilename = new StringData();
1663 <    zconsFilename->setID(ZCONSFILENAME_ID);
1664 <    zconsFilename->setData(zconsOutput);
1665 <    
1666 <    theInfo.addProperty(zconsFilename);
1667 <                
1668 <    //setup index, pos and other parameters of z-constraint molecules
1669 <    nZConstraints = globals->getNzConstraints();
1670 <    theInfo.nZconstraints = nZConstraints;
1671 <        
1672 <    zconStamp = globals->getZconStamp();
1673 <    ZConsParaItem tempParaItem;
1632 >    zconsTol->setData(defaultZConsTol);
1633 >  }
1634 >  theInfo.addProperty(zconsTol);
1635  
1636 <    ZConsParaData* zconsParaData = new ZConsParaData();
1637 <    zconsParaData->setID(ZCONSPARADATA_ID);
1638 <  
1639 <    for(int i = 0; i < nZConstraints; i++){
1636 >  //set Force Substraction Policy
1637 >  StringData* zconsForcePolicy =  new StringData();
1638 >  zconsForcePolicy->setID(ZCONSFORCEPOLICY_ID);
1639 >  
1640 >  if(globals->haveZconsForcePolicy()){
1641 >    zconsForcePolicy->setData(globals->getZconsForcePolicy());
1642 >  }  
1643 >  else{
1644 >     sprintf( painCave.errMsg,
1645 >             "ZConstraint Warning: User does not set force substraction policy, "
1646 >             "average force substraction policy is used\n");
1647 >     painCave.isFatal = 0;
1648 >     simError();
1649 >     zconsForcePolicy->setData("BYNUMBER");
1650 >  }
1651 >
1652 > theInfo.addProperty(zconsForcePolicy);
1653 >
1654 >  //Determine the name of ouput file and add it into SimInfo's property list
1655 >  //Be careful, do not use inFileName, since it is a pointer which
1656 >  //point to a string at master node, and slave nodes do not contain that string
1657 >  
1658 >  string zconsOutput(theInfo.finalName);
1659 >  
1660 >  zconsOutput = zconsOutput.substr(0, zconsOutput.rfind(".")) + ".fz";
1661 >  
1662 >  StringData* zconsFilename = new StringData();
1663 >  zconsFilename->setID(ZCONSFILENAME_ID);
1664 >  zconsFilename->setData(zconsOutput);
1665 >  
1666 >  theInfo.addProperty(zconsFilename);
1667 >  
1668 >  //setup index, pos and other parameters of z-constraint molecules
1669 >  nZConstraints = globals->getNzConstraints();
1670 >  theInfo.nZconstraints = nZConstraints;
1671 >
1672 >  zconStamp = globals->getZconStamp();
1673 >  ZConsParaItem tempParaItem;
1674 >
1675 >  ZConsParaData* zconsParaData = new ZConsParaData();
1676 >  zconsParaData->setID(ZCONSPARADATA_ID);
1677 >
1678 >  for(int i = 0; i < nZConstraints; i++){
1679      tempParaItem.havingZPos = zconStamp[i]->haveZpos();
1680      tempParaItem.zPos = zconStamp[i]->getZpos();
1681      tempParaItem.zconsIndex = zconStamp[i]->getMolIndex();
1682      tempParaItem.kRatio = zconStamp[i]->getKratio();
1683  
1684      zconsParaData->addItem(tempParaItem);
1685 <    }
1685 >  }
1686  
1687 <    //sort the parameters by index of molecules
1688 <    zconsParaData->sortByIndex();
1689 <        
1690 <    //push data into siminfo, therefore, we can retrieve later
1691 <    theInfo.addProperty(zconsParaData);
1687 >  //sort the parameters by index of molecules
1688 >  zconsParaData->sortByIndex();
1689 >  
1690 >  //push data into siminfo, therefore, we can retrieve later
1691 >  theInfo.addProperty(zconsParaData);
1692        
1693   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines