00001 00002 #include "SimObjectRegistry.h" 00003 #include "init.h" 00004 #include "mpi.h" 00005 #include "MPICommHandle.h" 00006 00007 namespace PCSIM 00008 { 00009 00010 static int mpi_inited_by_pcsim = false; 00011 00012 void init( int& argc, char**& argv ) 00013 { 00014 static bool init_done = false; 00015 if( ! init_done ) { 00016 if( ! MPI::Is_initialized() ) { 00017 if( argc >= 0 ) { 00018 MPI::Init( argc, argv); 00019 } else { 00020 MPI::Init(); 00021 } 00022 mpi_inited_by_pcsim = true; 00023 } 00024 MPICommHandle::WORLD = MPICommHandle(); 00025 } 00026 init_done = true; 00027 } 00028 00029 void init(void) 00030 { 00031 int n=-1; 00032 char **p = NULL; 00033 init(n,p); 00034 } 00035 00036 void cleanup(void) { 00037 if ( MPI::Is_initialized() && mpi_inited_by_pcsim ) { 00038 MPI::Finalize(); 00039 } 00040 } 00041 00042 }