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

Comparing trunk/mdtools/interface_implementation/SimSetup.cpp (file contents):
Revision 124 by chuckv, Mon Sep 30 20:35:42 2002 UTC vs.
Revision 189 by mmeineke, Tue Nov 26 21:04:43 2002 UTC

# Line 6 | Line 6
6   #include "parse_me.h"
7   #include "LRI.hpp"
8   #include "Integrator.hpp"
9 < #include "mpiInterface.h"
9 > #include "simError.h"
10  
11 + #ifdef IS_MPI
12 + #include "mpiBASS.h"
13 + #include "bassDiag.hpp"
14 + #endif
15 +
16   SimSetup::SimSetup(){
17    stamps = new MakeStamps();
18    globals = new Globals();
19 +  
20 + #ifdef IS_MPI
21 +  strcpy( checkPointMsg, "SimSetup creation successful" );
22 +  MPIcheckPoint();
23 + #endif // IS_MPI
24   }
25  
26   SimSetup::~SimSetup(){
# Line 20 | Line 30 | void SimSetup::parseFile( char* fileName ){
30  
31   void SimSetup::parseFile( char* fileName ){
32  
33 <  inFileName = fileName;
34 <  set_interface_stamps( stamps, globals );
35 < #ifdef MPI
36 <  mpiEventInit();
33 > #ifdef IS_MPI
34 >  if( worldRank == 0 ){
35 > #endif // is_mpi
36 >    
37 >    inFileName = fileName;
38 >    set_interface_stamps( stamps, globals );
39 >    
40 > #ifdef IS_MPI
41 >    mpiEventInit();
42   #endif
43 <  yacc_BASS( fileName );
44 < #ifdef MPI
45 <  throwMPIEvent(NULL);
43 >
44 >    yacc_BASS( fileName );
45 >
46 > #ifdef IS_MPI
47 >    throwMPIEvent(NULL);
48 >  }
49 >  else receiveParse();
50   #endif
51  
52   }
53  
54 < #ifdef MPI
54 > #ifdef IS_MPI
55   void SimSetup::receiveParse(void){
56  
57      set_interface_stamps( stamps, globals );
58      mpiEventInit();
59 +    MPIcheckPoint();
60      mpiEventLoop();
61  
62   }
63 +
64 +
65 + void SimSetup::testMe(void){
66 +  bassDiag* dumpMe = new bassDiag(globals,stamps);
67 +  dumpMe->dumpStamps();
68 +  delete dumpMe;
69 + }
70   #endif
71  
72   void SimSetup::createSim( void ){
# Line 66 | Line 93 | void SimSetup::createSim( void ){
93    else if( !strcmp( force_field, "DipoleTest" ) ) the_ff = new DipoleTestFF();
94    else if( !strcmp( force_field, "TraPPE_Ex" ) ) the_ff = new TraPPE_ExFF();
95    else{
96 <    std::cerr<< "SimSetup Error. Unrecognized force field -> "
97 <             << force_field << "\n";
98 <    exit(8);
96 >    sprintf( painCave.errMsg,
97 >             "SimSetup Error. Unrecognized force field -> %s\n",
98 >             force_field );
99 >    painCave.isFatal = 1;
100 >    simError();
101    }
102  
103 + #ifdef IS_MPI
104 +  strcpy( checkPointMsg, "ForceField creation successful" );
105 +  MPIcheckPoint();
106 + #endif // is_mpi
107 +
108    // get the components and calculate the tot_nMol and indvidual n_mol
109    the_components = the_globals->getComponents();
110    components_nmol = new int[n_components];
# Line 85 | Line 119 | void SimSetup::createSim( void ){
119  
120        if( !the_components[i]->haveNMol() ){
121          // we have a problem
122 <        std::cerr << "SimSetup Error. No global NMol or component NMol"
123 <                  << " given. Cannot calculate the number of atoms.\n";
124 <        exit( 8 );
122 >        sprintf( painCave.errMsg,
123 >                 "SimSetup Error. No global NMol or component NMol"
124 >                 " given. Cannot calculate the number of atoms.\n" );
125 >        painCave.isFatal = 1;
126 >        simError();
127        }
128  
129        tot_nmol += the_components[i]->getNMol();
# Line 95 | Line 131 | void SimSetup::createSim( void ){
131      }
132    }
133    else{
134 <    std::cerr << "NOT A SUPPORTED FEATURE\n";
135 <
136 < //     tot_nmol = the_globals->getNMol();
137 <
138 < //     //we have the total number of molecules, now we check for molfractions
139 < //     for( i=0; i<n_components; i++ ){
140 <
141 < //       if( !the_components[i]->haveMolFraction() ){
142 <
143 < //      if( !the_components[i]->haveNMol() ){
144 < //        //we have a problem
145 < //        std::cerr << "SimSetup error. Neither molFraction nor "
146 < //                  << " nMol was given in component
147 <
134 >    sprintf( painCave.errMsg,
135 >             "SimSetup error.\n"
136 >             "\tSorry, the ability to specify total"
137 >             " nMols and then give molfractions in the components\n"
138 >             "\tis not currently supported."
139 >             " Please give nMol in the components.\n" );
140 >    painCave.isFatal = 1;
141 >    simError();
142 >    
143 >    
144 >    //     tot_nmol = the_globals->getNMol();
145 >    
146 >    //   //we have the total number of molecules, now we check for molfractions
147 >    //     for( i=0; i<n_components; i++ ){
148 >    
149 >    //       if( !the_components[i]->haveMolFraction() ){
150 >    
151 >    //  if( !the_components[i]->haveNMol() ){
152 >    //    //we have a problem
153 >    //    std::cerr << "SimSetup error. Neither molFraction nor "
154 >    //              << " nMol was given in component
155 >    
156    }
157  
158 + #ifdef IS_MPI
159 +  strcpy( checkPointMsg, "Have the number of components" );
160 +  MPIcheckPoint();
161 + #endif // is_mpi
162 +
163    // make an array of molecule stamps that match the components used.
164  
165    for( i=0; i<n_components; i++ ){
# Line 145 | Line 194 | void SimSetup::createSim( void ){
194  
195    // create the atom and short range interaction arrays
196  
197 +  Atom::createArrays(tot_atoms);
198    the_atoms = new Atom*[tot_atoms];
199    the_molecules = new Molecule[tot_nmol];
200  
# Line 187 | Line 237 | void SimSetup::createSim( void ){
237    if( simnfo->n_dipoles ){
238  
239      if( !the_globals->haveRRF() ){
240 <      std::cerr << "SimSetup Error, system has dipoles, but no rRF was set.\n";
241 <      exit(8);
240 >      sprintf( painCave.errMsg,
241 >               "SimSetup Error, system has dipoles, but no rRF was set.\n");
242 >      painCave.isFatal = 1;
243 >      simError();
244      }
245      if( !the_globals->haveDielectric() ){
246 <      std::cerr << "SimSetup Error, system has dipoles, but no"
247 <                << " dielectric was set.\n";
248 <      exit(8);
246 >      sprintf( painCave.errMsg,
247 >               "SimSetup Error, system has dipoles, but no"
248 >               " dielectric was set.\n" );
249 >      painCave.isFatal = 1;
250 >      simError();
251      }
252  
253      simnfo->rRF        = the_globals->getRRF();
254      simnfo->dielectric = the_globals->getDielectric();
255    }
256  
257 + #ifdef IS_MPI
258 +  strcpy( checkPointMsg, "rRf and dielectric check out" );
259 +  MPIcheckPoint();
260 + #endif // is_mpi
261 +  
262    if( the_globals->haveBox() ){
263      simnfo->box_x = the_globals->getBox();
264      simnfo->box_y = the_globals->getBox();
# Line 215 | Line 274 | void SimSetup::createSim( void ){
274    }
275    else{
276      if( !the_globals->haveBoxX() ){
277 <      std::cerr << "SimSetup error, no periodic BoxX size given.\n";
278 <      exit(8);
277 >      sprintf( painCave.errMsg,
278 >               "SimSetup error, no periodic BoxX size given.\n" );
279 >      painCave.isFatal = 1;
280 >      simError();
281      }
282      simnfo->box_x = the_globals->getBoxX();
283  
284      if( !the_globals->haveBoxY() ){
285 <      std::cerr << "SimSetup error, no periodic BoxY size given.\n";
286 <      exit(8);
285 >      sprintf( painCave.errMsg,
286 >               "SimSetup error, no periodic BoxY size given.\n" );
287 >      painCave.isFatal = 1;
288 >      simError();
289      }
290      simnfo->box_y = the_globals->getBoxY();
291  
292      if( !the_globals->haveBoxZ() ){
293 <      std::cerr << "SimSetup error, no periodic BoxZ size given.\n";
294 <      exit(8);
293 >      sprintf( painCave.errMsg,
294 >               "SimSetup error, no periodic BoxZ size given.\n" );
295 >      painCave.isFatal = 1;
296 >      simError();
297      }
298      simnfo->box_z = the_globals->getBoxZ();
299    }
300  
301 + #ifdef IS_MPI
302 +  strcpy( checkPointMsg, "Box size set up" );
303 +  MPIcheckPoint();
304 + #endif // is_mpi
305  
306 +
307 +
308   //   if( the_globals->haveInitialConfig() ){
309   //        InitializeFromFile* fileInit;
310   //     fileInit = new InitializeFromFile( the_globals->getInitialConfig() );
# Line 244 | Line 315 | void SimSetup::createSim( void ){
315   //   }
316   //   else{
317  
318 <    initFromBass();
319 <
320 <
321 < //   }
322 <
323 < //   if( the_globals->haveFinalConfig() ){
253 < //     strcpy( simnfo->finalName, the_globals->getFinalConfig() );
254 < //   }
255 < //   else{
256 < //     strcpy( simnfo->finalName, inFileName );
257 < //     char* endTest;
258 < //     int nameLength = strlen( simnfo->finalName );
259 < //     endTest = &(simnfo->finalName[nameLength - 5]);
260 < //     if( !strcmp( endTest, ".bass" ) ){
261 < //       strcpy( endTest, ".eor" );
262 < //     }
263 < //     else if( !strcmp( endTest, ".BASS" ) ){
264 < //       strcpy( endTest, ".eor" );
265 < //     }
266 < //     else{
267 < //       endTest = &(simnfo->finalName[nameLength - 4]);
268 < //       if( !strcmp( endTest, ".bss" ) ){
269 < //      strcpy( endTest, ".eor" );
270 < //       }
271 < //       else if( !strcmp( endTest, ".mdl" ) ){
272 < //      strcpy( endTest, ".eor" );
273 < //       }
274 < //       else{
275 < //      strcat( simnfo->finalName, ".eor" );
276 < //       }
277 < //     }
278 < //   }
318 >  initFromBass();
319 >
320 > #ifdef IS_MPI
321 >  strcpy( checkPointMsg, "initFromBass successfully created the lattice" );
322 >  MPIcheckPoint();
323 > #endif // is_mpi
324  
280 //   // make the sample and status out names
325  
326 < //   strcpy( simnfo->sampleName, inFileName );
327 < //   char* endTest;
328 < //   int nameLength = strlen( simnfo->sampleName );
329 < //   endTest = &(simnfo->sampleName[nameLength - 5]);
330 < //   if( !strcmp( endTest, ".bass" ) ){
331 < //     strcpy( endTest, ".dump" );
332 < //   }
333 < //   else if( !strcmp( endTest, ".BASS" ) ){
334 < //     strcpy( endTest, ".dump" );
335 < //   }
336 < //   else{
337 < //     endTest = &(simnfo->sampleName[nameLength - 4]);
338 < //     if( !strcmp( endTest, ".bss" ) ){
339 < //       strcpy( endTest, ".dump" );
340 < //     }
341 < //     else if( !strcmp( endTest, ".mdl" ) ){
342 < //       strcpy( endTest, ".dump" );
343 < //     }
344 < //     else{
345 < //       strcat( simnfo->sampleName, ".dump" );
346 < //     }
347 < //   }
348 <
349 < //   strcpy( simnfo->statusName, inFileName );
350 < //   nameLength = strlen( simnfo->statusName );
351 < //   endTest = &(simnfo->statusName[nameLength - 5]);
352 < //   if( !strcmp( endTest, ".bass" ) ){
353 < //     strcpy( endTest, ".stat" );
354 < //   }
355 < //   else if( !strcmp( endTest, ".BASS" ) ){
356 < //     strcpy( endTest, ".stat" );
357 < //   }
358 < //   else{
359 < //     endTest = &(simnfo->statusName[nameLength - 4]);
360 < //     if( !strcmp( endTest, ".bss" ) ){
361 < //       strcpy( endTest, ".stat" );
362 < //     }
363 < //     else if( !strcmp( endTest, ".mdl" ) ){
364 < //       strcpy( endTest, ".stat" );
365 < //     }
366 < //     else{
367 < //       strcat( simnfo->statusName, ".stat" );
368 < //     }
369 < //   }
370 <
371 <
326 >  
327 >
328 >  
329 >  //   }
330 >  
331 > #ifdef IS_MPI
332 >  if( worldRank == 0 ){
333 > #endif // is_mpi
334 >    
335 >    if( the_globals->haveFinalConfig() ){
336 >      strcpy( simnfo->finalName, the_globals->getFinalConfig() );
337 >    }
338 >    else{
339 >      strcpy( simnfo->finalName, inFileName );
340 >      char* endTest;
341 >      int nameLength = strlen( simnfo->finalName );
342 >      endTest = &(simnfo->finalName[nameLength - 5]);
343 >      if( !strcmp( endTest, ".bass" ) ){
344 >        strcpy( endTest, ".eor" );
345 >      }
346 >      else if( !strcmp( endTest, ".BASS" ) ){
347 >        strcpy( endTest, ".eor" );
348 >      }
349 >      else{
350 >        endTest = &(simnfo->finalName[nameLength - 4]);
351 >        if( !strcmp( endTest, ".bss" ) ){
352 >          strcpy( endTest, ".eor" );
353 >        }
354 >        else if( !strcmp( endTest, ".mdl" ) ){
355 >          strcpy( endTest, ".eor" );
356 >        }
357 >        else{
358 >          strcat( simnfo->finalName, ".eor" );
359 >        }
360 >      }
361 >    }
362 >    
363 >    // make the sample and status out names
364 >    
365 >    strcpy( simnfo->sampleName, inFileName );
366 >    char* endTest;
367 >    int nameLength = strlen( simnfo->sampleName );
368 >    endTest = &(simnfo->sampleName[nameLength - 5]);
369 >    if( !strcmp( endTest, ".bass" ) ){
370 >      strcpy( endTest, ".dump" );
371 >    }
372 >    else if( !strcmp( endTest, ".BASS" ) ){
373 >      strcpy( endTest, ".dump" );
374 >    }
375 >    else{
376 >      endTest = &(simnfo->sampleName[nameLength - 4]);
377 >      if( !strcmp( endTest, ".bss" ) ){
378 >        strcpy( endTest, ".dump" );
379 >      }
380 >      else if( !strcmp( endTest, ".mdl" ) ){
381 >        strcpy( endTest, ".dump" );
382 >      }
383 >      else{
384 >        strcat( simnfo->sampleName, ".dump" );
385 >      }
386 >    }
387 >    
388 >    strcpy( simnfo->statusName, inFileName );
389 >    nameLength = strlen( simnfo->statusName );
390 >    endTest = &(simnfo->statusName[nameLength - 5]);
391 >    if( !strcmp( endTest, ".bass" ) ){
392 >      strcpy( endTest, ".stat" );
393 >    }
394 >    else if( !strcmp( endTest, ".BASS" ) ){
395 >      strcpy( endTest, ".stat" );
396 >    }
397 >    else{
398 >      endTest = &(simnfo->statusName[nameLength - 4]);
399 >      if( !strcmp( endTest, ".bss" ) ){
400 >        strcpy( endTest, ".stat" );
401 >      }
402 >      else if( !strcmp( endTest, ".mdl" ) ){
403 >        strcpy( endTest, ".stat" );
404 >      }
405 >      else{
406 >        strcat( simnfo->statusName, ".stat" );
407 >      }
408 >    }
409 >    
410 > #ifdef IS_MPI
411 >  }
412 > #endif // is_mpi
413 >  
414    // set the status, sample, and themal kick times
415 <
415 >  
416    if( the_globals->haveSampleTime() ){
417      simnfo->sampleTime = the_globals->getSampleTime();
418      simnfo->statusTime = simnfo->sampleTime;
# Line 382 | Line 468 | void SimSetup::makeAtoms( void ){
468          current_atom = comp_stamps[i]->getAtom( k );
469          if( current_atom->haveOrientation() ){
470  
471 <          dAtom = new DirectionalAtom;
471 >          dAtom = new DirectionalAtom(index);
472            simnfo->n_oriented++;
473            the_atoms[index] = dAtom;
474  
# Line 402 | Line 488 | void SimSetup::makeAtoms( void ){
488            dAtom->setSUz( uz );
489          }
490          else{
491 <          the_atoms[index] = new GeneralAtom;
491 >          the_atoms[index] = new GeneralAtom(index);
492          }
493          the_atoms[index]->setType( current_atom->getType() );
494          the_atoms[index]->setIndex( index );
# Line 549 | Line 635 | void SimSetup::initFromBass( void ){
635      n_per_extra = (int)ceil( temp1 );
636  
637      if( n_per_extra > 4){
638 <      std::cerr << "THere has been an error in constructing the non-complete lattice.\n";
639 <      exit(8);
638 >      sprintf( painCave.errMsg,
639 >               "SimSetup error. There has been an error in constructing"
640 >               " the non-complete lattice.\n" );
641 >      painCave.isFatal = 1;
642 >      simError();
643      }
644    }
645    else{
# Line 655 | Line 744 | void SimSetup::makeElement( double x, double y, double
744  
745      current_atom = comp_stamps[current_comp]->getAtom( k );
746      if( !current_atom->havePosition() ){
747 <      std::cerr << "Component " << comp_stamps[current_comp]->getID()
748 <                << ", atom " << current_atom->getType()
749 <                << " does not have a position specified.\n"
750 <                << "The initialization routine is unable to give a start"
751 <                << " position.\n";
752 <      exit(8);
747 >      sprintf( painCave.errMsg,
748 >               "SimSetup:initFromBass error.\n"
749 >               "\tComponent %s, atom %s does not have a position specified.\n"
750 >               "\tThe initialization routine is unable to give a start"
751 >               " position.\n",
752 >               comp_stamps[current_comp]->getID(),
753 >               current_atom->getType() );
754 >      painCave.isFatal = 1;
755 >      simError();
756      }
757  
758      the_atoms[current_atom_ndx]->setX( x + current_atom->getPosX() );

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines