Ignore:
Timestamp:
10/21/11 19:01:35 (13 years ago)
Author:
ymipsl
Message:

reprise en main de la version de H. Ozdoba. Correction de différentes erreurs de conception et bug.
Version NEMO operationnel en client/server, interoperabilita avec OASIS, reconstition de fichiers via netcdf4/HDF5

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XMLIO_V2/dev/common/src/xmlio/manager/mpi_manager.hpp

    r268 r286  
    5252          
    5353            static void Initialise(int * argc, char *** argv); 
     54            static void InitialiseClient(int * argc, char *** argv); 
     55            static void InitialiseServer(int * argc, char *** argv); 
    5456            static void Finalize(void); 
    5557 
     
    5759          
    5860          
    59             static inline int GetCommRank(MPIComm _comm)             
    60             { return (CMPIManager::GetCommRank(MPI_Comm_f2c(_comm))); }    
    61                      
    62             static inline int GetCommSize(MPIComm _comm)             
    63             { return (CMPIManager::GetCommSize(MPI_Comm_f2c(_comm))); } 
    64              
    65             static inline MPIComm GetCommWorld(void)             
    66             { return (MPI_Comm_c2f(MPI_COMM_WORLD)); } 
    67              
    68             static inline MPIComm CreateComm(MPI_Group _group, MPIComm _pcomm = CMPIManager::GetCommWorld()) 
    69             { return (MPI_Comm_c2f(CMPIManager::CreateComm( _group, MPI_Comm_f2c(_pcomm)))); }      
     61            
     62            static inline MPI_Comm GetCommWorld(void)             
     63            { return (MPI_COMM_WORLD); } 
    7064             
    7165            static int GetCommRank(MPI_Comm _comm = MPI_COMM_WORLD); 
    7266            static int GetCommSize(MPI_Comm _comm = MPI_COMM_WORLD);        
    7367             
    74             static MPI_Comm CreateComm(MPI_Group _group, MPI_Comm _pcomm); 
     68            static MPI_Comm CreateComm(MPI_Group _group, MPI_Comm _pcomm=MPI_COMM_WORLD); 
     69 
     70            static inline MPI_Comm GetCommClient(void)  
     71            { return CommClient; }    
     72            static inline MPI_Comm GetCommServer(void)  
     73            { return CommServer; }    
     74            static inline MPI_Comm GetCommClientServer(void)              
     75            { return CommClientServer; }    
     76            static inline int GetNbClient(void)              
     77            { return NbClient; }    
     78            static inline int GetNbServer(void)              
     79            { return NbServer; }    
     80 
     81            static inline bool IsConnected(void)              
     82            { return (NbServer==0)?true:false; }    
     83 
     84            static inline bool IsClient(void)              
     85            { return _IsClient; }    
     86 
     87            static inline bool IsServer(void)              
     88            { return _IsServer; }    
    7589 
    7690         public : // Autre 
     
    7892            static void Barrier(MPI_Comm _comm = MPI_COMM_WORLD); 
    7993             
    80             static inline bool DispatchClient(bool       _is_server, 
    81                                               MPIComm & _comm_client, 
    82                                               MPIComm & _comm_client_server, 
    83                                               MPIComm & _comm_server, 
    84                                               MPIComm   _comm_parent =  CMPIManager::GetCommWorld()) 
    85             { 
    86                MPI_Comm comm_client        = MPI_Comm_f2c(_comm_client); 
    87                MPI_Comm comm_client_server = MPI_Comm_f2c(_comm_client_server); 
    88                MPI_Comm comm_server        = MPI_Comm_f2c(_comm_server); 
    89                MPI_Comm comm_parent        = MPI_Comm_f2c(_comm_parent); 
    90                bool ret = CMPIManager::DispatchClient(_is_server, comm_client, comm_client_server, comm_server, comm_parent); 
    91                _comm_client        = MPI_Comm_c2f(comm_client); 
    92                _comm_client_server = MPI_Comm_c2f(comm_client_server); 
    93                _comm_server        = MPI_Comm_c2f(comm_server);  
    94                return (ret);                           
    95             } 
    96                                        
    97              
    9894            static bool DispatchClient(bool       _is_server, 
    9995                                       MPI_Comm & _comm_client, 
    10096                                       MPI_Comm & _comm_client_server, 
    10197                                       MPI_Comm & _comm_server, 
    102                                        MPI_Comm   _comm_parent = MPI_COMM_WORLD); 
     98                                       MPI_Comm _comm_parent); 
    10399 
    104100         public : // Groupes 
    105101          
    106102            static MPI_Group GetGroupWorld(void); 
     103            static MPI_Group GetGroup(MPI_Comm Comm); 
    107104            static MPI_Group CreateSubGroup(MPI_Group _pgroup, const std::vector<int> & _ranks); 
    108105            static MPI_Group CreateSubGroup(MPI_Group _pgroup, int _min_rank, int _max_rank, int _intval = 1); 
     
    110107         public : // Tests  
    111108          
    112             static inline bool IsMaster(MPIComm _comm) 
    113             { return (CMPIManager::IsMaster(MPI_Comm_f2c(_comm))); } 
    114              
    115             static inline bool IsRank(int _rank, MPIComm _comm) 
    116             { return (CMPIManager::IsRank(_rank, MPI_Comm_f2c(_comm))); } 
     109        
    117110          
    118111            static bool IsMaster(MPI_Comm _comm = MPI_COMM_WORLD); 
     
    126119            static bool Test (MPI_Request & _request); 
    127120 
    128  
    129             static inline bool HasReceivedData(MPIComm _comm, int _src_rank) 
    130             { return (CMPIManager::HasReceivedData(MPI_Comm_f2c(_comm), _src_rank));  } 
    131              
    132             static inline std::size_t GetReceivedDataSize(MPIComm _comm, int _src_rank) 
    133             { return (CMPIManager::GetReceivedDataSize(MPI_Comm_f2c(_comm), _src_rank)); } 
    134              
    135              
    136121             
    137122            static bool HasReceivedData(MPI_Comm _comm, int _src_rank); 
    138123             
    139124            static std::size_t GetReceivedDataSize(MPI_Comm _comm, int _src_rank); 
     125 
    140126            static void Receive(MPI_Comm _comm, int _src_rank, char * _data); 
    141127             
     
    150136         public : // Communication 'complexe' 
    151137          
    152             static inline void SendLinearBuffer(MPIComm _comm, int _dest_rank, CLinearBuffer & _lbuffer, MPI_Request & _request) 
    153             { CMPIManager::SendLinearBuffer(MPI_Comm_f2c(_comm), _dest_rank, _lbuffer, _request); } 
    154              
    155             static inline void ReceiveLinearBuffer(MPIComm _comm, int _src_rank, CLinearBuffer & _lbuffer) 
    156             { CMPIManager::ReceiveLinearBuffer(MPI_Comm_f2c(_comm), _src_rank, _lbuffer); } 
    157              
    158             static inline boost::shared_ptr<CLinearBuffer> ReceiveLinearBuffer(MPIComm _comm, int _src_rank) 
    159             { return (CMPIManager::ReceiveLinearBuffer(MPI_Comm_f2c(_comm), _src_rank)); } 
    160              
    161             static inline void ReceiveCircularBuffer(MPIComm _comm, int _src_rank, CCircularBuffer & _cbuffer) 
    162             { CMPIManager::ReceiveCircularBuffer(MPI_Comm_f2c(_comm), _src_rank, _cbuffer); } 
    163              
    164           
     138 
    165139            static void SendLinearBuffer(MPI_Comm _comm, int _dest_rank, CLinearBuffer & _lbuffer, MPI_Request & _request); 
    166140            static void ReceiveLinearBuffer(MPI_Comm _comm, int _src_rank, CLinearBuffer & _lbuffer); 
     
    175149            static void FreeMemory (void * _data); 
    176150          
     151          private : 
     152           
     153            static bool Initialized ; 
     154            static MPI_Comm CommClient ; 
     155            static MPI_Comm CommServer ; 
     156            static MPI_Comm CommClientServer ; 
     157            static int NbClient ; 
     158            static int NbServer ; 
     159 
     160            static bool _IsClient ; 
     161            static bool _IsServer ; 
     162            static bool using_server ; 
     163            static bool using_oasis ; 
     164             
    177165      }; // class CMPIManager 
    178166       
Note: See TracChangeset for help on using the changeset viewer.