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/fortran/icdata.cpp

    r278 r286  
    55#include <boost/multi_array.hpp> 
    66#include <boost/shared_ptr.hpp> 
     7#include <string> 
     8#include <iostream> 
     9 
    710 
    811#include "xmlioserver.hpp" 
     12#include "oasis_cinterface.hpp" 
    913 
    1014#include "attribute_template_impl.hpp" 
     
    1317 
    1418#include "icutil.hpp" 
     19#include "mpi_manager.hpp" 
     20#include "buffer.hpp" 
    1521 
    1622extern "C" 
     
    2632   // -------------------- Traitement des données ------------------------------ 
    2733    
    28    void xios_dtreatment_start(XContextPtr context_hdl, XFileType filetype, int comm_client_server, int comm_server) 
     34   void cxios_dtreatment_start() 
    2935   { 
    3036      using namespace xmlioserver::tree; 
     
    3238      try 
    3339      { 
     40        MPI_Comm comm_client_server=comm::CMPIManager::GetCommClientServer() ; 
     41        MPI_Comm comm_server=comm::CMPIManager::GetCommServer() ; 
     42         
    3443         boost::shared_ptr<CContext> context = 
    35                 CObjectFactory::GetObject<CContext>(context_hdl); 
     44            CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId()); 
     45                 
    3646         StdOStringStream oss; 
    3747         oss << StdString("def_client_next.") 
    38              << CMPIManager::GetCommRank(CMPIManager::GetCommWorld()); 
     48             << CMPIManager::GetCommRank(CMPIManager::GetCommClient()); 
    3949         CTreeManager::PrintTreeToFile(oss.str()); 
    4050         oss.str(""); 
     
    4353 
    4454         oss << StdString("def_client_end.") 
    45              << CMPIManager::GetCommRank(CMPIManager::GetCommWorld()); 
     55             << CMPIManager::GetCommRank(CMPIManager::GetCommClient()); 
    4656         CTreeManager::PrintTreeToFile(oss.str()); 
    4757 
    48          if ((comm_client_server != -1)) 
     58         if ( !comm::CMPIManager::IsConnected() ) 
    4959         { 
    5060            MPI_Request request = 0; 
    5161            StdOStringStream ostrs; 
     62/* 
    5263            if (CMPIManager::GetCommRank(comm_client_server) == 1) 
    5364            { 
    5465               CTreeManager::ToBinary(ostrs); 
    55                CLinearBuffer lbuffer(ostrs.str().size()+13); 
     66               CLinearBuffer lbuffer(ostrs.str().size()+CBuffer::getDataHeaderSize()); 
     67               std::cout<<"lbuffer size "<<ostrs.str().size()<<std::endl ; 
    5668               lbuffer.appendString(ostrs.str()); 
    5769               CMPIManager::SendLinearBuffer(comm_client_server, 0, lbuffer, request); 
     
    6173            { 
    6274               CTreeManager::DomainsToBinary(ostrs); 
    63                CLinearBuffer lbuffer(ostrs.str().size()+13); 
     75               CLinearBuffer lbuffer(ostrs.str().size()+CBuffer::getDataHeaderSize());  
     76               std::cout<<"lbuffer size "<<ostrs.str().size()<<std::endl ; 
    6477               lbuffer.appendString(ostrs.str()); 
    6578               CMPIManager::SendLinearBuffer(comm_client_server, 0, lbuffer, request); 
    6679               CMPIManager::Wait(request);  // Pas encore en mode RPC 
    6780            } 
    68             CXIOSManager::RunClient(false, CMPIManager::GetCommWorld()); 
    69             CClient::CreateClient(comm_client_server); 
     81*/ 
     82            CTreeManager::ToBinary(ostrs); 
     83            CLinearBuffer lbuffer(ostrs.str().size()+CBuffer::getDataHeaderSize()); 
     84            lbuffer.appendString(ostrs.str()); 
     85            CMPIManager::SendLinearBuffer(comm_client_server, 0, lbuffer, request); 
     86            CMPIManager::Wait(request);  // Pas encore en mode RPC 
     87                
     88                
     89            CXIOSManager::RunClient(false, CMPIManager::GetCommClient()); 
     90            CClient::CreateClient(CMPIManager::GetCommClientServer()); 
    7091         } 
    7192         else 
    7293         { 
    73             dt->createDataOutput<CNc4DataOutput>(CMPIManager::GetCommWorld()); 
     94            dt->createDataOutput<CNc4DataOutput>(CMPIManager::GetCommClient()); 
    7495         } 
    7596      } 
     
    81102   } 
    82103    
    83    void xios_dtreatment_end(void) 
     104   void cxios_dtreatment_end(void) 
     105   { 
     106      try 
     107      { 
     108         boost::shared_ptr<xmlioserver::tree::CContext> context = 
     109         xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CContext> 
     110            (CObjectFactory::GetCurrentContextId()); 
     111         boost::shared_ptr<xmlioserver::data::CDataTreatment> dtreat = context->getDataTreatment(); 
     112         dtreat->finalize(); 
     113          
     114//         CMPIManager::Finalize(); 
     115      } 
     116      catch (CException & exc) 
     117      { 
     118         std::cerr << exc.getMessage() << std::endl; 
     119         exit (EXIT_FAILURE); 
     120      } 
     121   } 
     122 
     123   // ---------------------- Finalize du serveur ------------------------- 
     124 
     125   void cxios_finalize_ioserver(void) 
    84126   { 
    85127      try 
     
    92134         exit (EXIT_FAILURE); 
    93135      } 
    94    } 
     136    } 
    95137 
    96138   // ---------------------- Initialisation du serveur ------------------------- 
    97139 
    98    void xios_init_ioserver(MPIComm * comm_client) 
    99    { 
    100       try 
    101       { 
    102          MPIComm comm_client_server, comm_server; 
    103          CMPIManager::Initialise(NULL, NULL); 
    104          CMPIManager::DispatchClient(false, *comm_client, comm_client_server, comm_server); 
     140   void cxios_init_ioserver(MPIComm * f_comm_client, MPIComm * f_comm_parent) 
     141   { 
     142      try 
     143      { 
     144         MPI_Comm comm_client_server, comm_server,comm_client,comm_parent; 
     145         xmlioserver::CTreeManager::ParseFile("iodef.xml"); 
     146         CTreeManager::SetCurrentContextId(StdString("xios")); 
     147         CMPIManager::InitialiseClient(NULL, NULL); 
     148         comm_parent=MPI_Comm_f2c(*f_comm_parent) ; 
     149         CMPIManager::DispatchClient(false, comm_client, comm_client_server, comm_server,comm_parent); 
     150         *f_comm_client=MPI_Comm_c2f(comm_client) ; 
    105151      } 
    106152      catch (CException & exc) 
     
    113159   // ---------------------- Ecriture des données ------------------------------ 
    114160    
    115    void xios_write_data_k81(const char * fieldid, int fieldid_size, double * data_k8, int data_Xsize) 
     161   void cxios_write_data_k81(const char * fieldid, int fieldid_size, double * data_k8, int data_Xsize) 
    116162   { 
    117163      std::string fieldid_str; 
     
    129175   } 
    130176    
    131    void xios_write_data_k82(const char * fieldid, int fieldid_size, double * data_k8, int data_Xsize, int data_Ysize) 
     177   void cxios_write_data_k82(const char * fieldid, int fieldid_size, double * data_k8, int data_Xsize, int data_Ysize) 
    132178   { 
    133179      std::string fieldid_str; 
     
    145191   } 
    146192    
    147    void xios_write_data_k83(const char * fieldid, int fieldid_size, double * data_k8, int data_Xsize, int data_Ysize, int data_Zsize) 
     193   void cxios_write_data_k83(const char * fieldid, int fieldid_size, double * data_k8, int data_Xsize, int data_Ysize, int data_Zsize) 
    148194   { 
    149195      std::string fieldid_str; 
     
    161207   } 
    162208    
    163    void xios_write_data_k41(const char * fieldid, int fieldid_size, float * data_k4, int data_Xsize) 
     209   void cxios_write_data_k41(const char * fieldid, int fieldid_size, float * data_k4, int data_Xsize) 
    164210   { 
    165211      std::string fieldid_str; 
     
    177223   } 
    178224    
    179    void xios_write_data_k42(const char * fieldid, int fieldid_size, float * data_k4, int data_Xsize, int data_Ysize) 
     225   void cxios_write_data_k42(const char * fieldid, int fieldid_size, float * data_k4, int data_Xsize, int data_Ysize) 
    180226   { 
    181227      std::string fieldid_str; 
     
    193239   } 
    194240    
    195    void xios_write_data_k43(const char * fieldid, int fieldid_size, float * data_k4, int data_Xsize, int data_Ysize, int data_Zsize) 
     241   void cxios_write_data_k43(const char * fieldid, int fieldid_size, float * data_k4, int data_Xsize, int data_Ysize, int data_Zsize) 
    196242   { 
    197243      std::string fieldid_str; 
Note: See TracChangeset for help on using the changeset viewer.