Ignore:
Timestamp:
02/13/12 19:35:25 (12 years ago)
Author:
ymipsl
Message:

nouvelle version de developpement de xios

  • nouvelle interface fortran
  • recodage complet de la couche de communication
  • et bien d'autres choses...

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XMLIO_V2/dev/common/src/output/nc4_data_output.cpp

    r292 r300  
    1010#include "xios_manager.hpp" 
    1111#include "context.hpp" 
     12#include "context_server.hpp" 
    1213 
    1314namespace xmlioserver 
     
    5859      void CNc4DataOutput::writeDomain_(const boost::shared_ptr<tree::CDomain> domain) 
    5960      { 
     61         shared_ptr<CContext> context=CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId()) ; 
     62         CContextServer* server=context->server ; 
     63          
    6064         if (domain->IsWritten(this->filename)) return; 
    6165         domain->checkAttributes(); 
    6266          
    63 //         if (domain->isEmpty()) return; 
     67         if (domain->isEmpty())  
     68           if (SuperClass::type==MULTI_FILE) return ; 
    6469 
    6570         std::vector<StdString> dim0, dim1; 
     
    6873         StdString lonid     = StdString("lon_").append(domid); 
    6974         StdString latid     = StdString("lat_").append(domid); 
    70          StdString lonid_loc = (comm::CMPIManager::GetCommSize(CXIOSManager::Comm_Server) > 1) 
     75         StdString lonid_loc = (server->intraCommSize > 1) 
    7176                             ? StdString("lon_").append(domid).append("_local") 
    7277                             : lonid; 
    73          StdString latid_loc = (comm::CMPIManager::GetCommSize(CXIOSManager::Comm_Server) > 1) 
     78         StdString latid_loc = (server->intraCommSize > 1) 
    7479                             ? StdString("lat_").append(domid).append("_local") 
    7580                             : latid; 
    76          StdString maskid    = StdString("mask_").append(domid).append("_local"); 
    77  
    78          ARRAY(int, 2) mask = domain->getLocalMask(); 
    79  
    80          unsigned int ssize = domain->zoom_ni_loc.getValue() * domain->zoom_nj_loc.getValue(); 
    81          bool isCurvilinear = (domain->lonvalue.getValue()->size() == ssize); 
     81// supress mask         StdString maskid    = StdString("mask_").append(domid).append("_local"); 
     82 
     83// supress mask         ARRAY(int, 2) mask = domain->getLocalMask(); 
     84 
     85//         unsigned int ssize = domain->zoom_ni_loc.getValue() * domain->zoom_nj_loc.getValue(); 
     86//         bool isCurvilinear = (domain->lonvalue.getValue()->size() == ssize); 
     87         bool isCurvilinear = true ; //for moment 
    8288 
    8389         switch (SuperClass::type) 
     
    8591            case (MULTI_FILE) : 
    8692            { 
    87                if (domain->isEmpty()) return; 
     93//               if (domain->isEmpty()) return; 
    8894                
    89                if (comm::CMPIManager::GetCommSize(CXIOSManager::Comm_Server) > 1) 
     95               if (server->intraCommSize > 1) 
    9096               { 
    9197                 SuperClassWriter::addDimension(lonid, domain->zoom_ni.getValue()); 
     
    105111               } 
    106112 
    107                SuperClassWriter::addDimension(lonid_loc, domain->zoom_ni_loc.getValue()); 
    108                SuperClassWriter::addDimension(latid_loc, domain->zoom_nj_loc.getValue()); 
    109                if (comm::CMPIManager::GetCommSize(CXIOSManager::Comm_Server) > 1) 
    110                { 
    111                   this->writeLocalAttributes(domain->zoom_ibegin_loc.getValue(), 
    112                                              domain->zoom_ni_loc.getValue(), 
    113                                              domain->zoom_jbegin_loc.getValue(), 
    114                                              domain->zoom_nj_loc.getValue(), 
     113               SuperClassWriter::addDimension(lonid_loc, domain->zoom_ni_srv); 
     114               SuperClassWriter::addDimension(latid_loc, domain->zoom_nj_srv); 
     115               if (server->intraCommSize > 1) 
     116               { 
     117                  this->writeLocalAttributes(domain->zoom_ibegin_srv, 
     118                                             domain->zoom_ni_srv, 
     119                                             domain->zoom_jbegin_srv, 
     120                                             domain->zoom_nj_srv, 
    115121                                             domid); 
    116122               } 
     
    135141               dim0.push_back(lonid_loc); 
    136142 
    137                if (comm::CMPIManager::GetCommSize(CXIOSManager::Comm_Server) > 1) 
    138                { 
    139                   SuperClassWriter::addVariable(maskid, NC_INT, dim0); 
    140  
    141                   this->writeMaskAttributes(maskid, 
    142                      domain->data_dim.getValue()/*, 
    143                      domain->data_ni.getValue(), 
    144                      domain->data_nj.getValue(), 
    145                      domain->data_ibegin.getValue(), 
    146                      domain->data_jbegin.getValue()*/); 
    147                } 
     143 
     144// supress mask               if (server->intraCommSize > 1) 
     145// supress mask               { 
     146// supress mask                  SuperClassWriter::addVariable(maskid, NC_INT, dim0); 
     147// supress mask 
     148// supress mask                  this->writeMaskAttributes(maskid, 
     149// supress mask                     domain->data_dim.getValue()/*, 
     150// supress mask                     domain->data_ni.getValue(), 
     151// supress mask                     domain->data_nj.getValue(), 
     152// supress mask                     domain->data_ibegin.getValue(), 
     153// supress mask                     domain->data_jbegin.getValue()*/); 
     154// supress mask               } 
    148155                   
    149156               //SuperClassWriter::setDefaultValue(maskid, &dvm); 
    150157 
    151158               SuperClassWriter::definition_end(); 
    152                SuperClassWriter::writeData(domain->latvalue.getValue(), latid, true, 0); 
    153                SuperClassWriter::writeData(domain->lonvalue.getValue(), lonid, true, 0); 
    154                if (comm::CMPIManager::GetCommSize(CXIOSManager::Comm_Server) > 1) 
    155                   SuperClassWriter::writeData(mask, maskid); 
     159               SuperClassWriter::writeData(domain->latvalue_srv, latid, true, 0); 
     160               SuperClassWriter::writeData(domain->lonvalue_srv, lonid, true, 0); 
     161// supress mask               if (server->intraCommSize > 1) SuperClassWriter::writeData(mask, maskid); 
    156162               SuperClassWriter::definition_start(); 
    157163 
     
    195201               else 
    196202               { 
    197                  start[1]=domain->zoom_ibegin_loc.getValue()+domain->ibegin.getValue()-1-domain->zoom_ibegin.getValue() ; start [0]=domain->zoom_jbegin_loc.getValue()+domain->jbegin.getValue()-1-domain->zoom_jbegin.getValue() ;  
    198                  count[1]=domain->zoom_ni_loc.getValue() ; count[0]=domain->zoom_nj_loc.getValue() ;  
     203                 start[1]=domain->zoom_ibegin_srv-domain->zoom_ibegin.getValue() ; start [0]=domain->zoom_jbegin_srv-domain->zoom_jbegin.getValue() ;  
     204                 count[1]=domain->zoom_ni_srv ; count[0]=domain->zoom_nj_srv ;  
    199205               } 
    200206                
    201                SuperClassWriter::writeData(domain->latvalue.getValue(), latid, true, 0,&start,&count); 
    202                SuperClassWriter::writeData(domain->lonvalue.getValue(), lonid, true, 0,&start,&count); 
     207               SuperClassWriter::writeData(domain->latvalue_srv, latid, true, 0,&start,&count); 
     208               SuperClassWriter::writeData(domain->lonvalue_srv, lonid, true, 0,&start,&count); 
    203209               SuperClassWriter::definition_start(); 
    204210 
     
    265271      void CNc4DataOutput::writeField_(const boost::shared_ptr<tree::CField> field) 
    266272      { 
     273         shared_ptr<CContext> context=CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId()) ; 
     274         CContextServer* server=context->server ; 
     275 
    267276         std::vector<StdString> dims, coodinates; 
    268          boost::shared_ptr<CGrid> grid = 
    269             CObjectFactory::GetObject<CGrid>(field->grid_ref.getValue()); 
    270          boost::shared_ptr<CDomain> domain = 
    271             CObjectFactory::GetObject<CDomain>(grid->domain_ref.getValue()); 
     277         boost::shared_ptr<CGrid> grid = field->grid; 
     278         boost::shared_ptr<CDomain> domain = grid->domain; 
    272279            
    273280         if (domain->isEmpty())  
     
    279286         StdString lonid     = StdString("lon_").append(domid); 
    280287         StdString latid     = StdString("lat_").append(domid); 
    281          StdString lonid_loc = (comm::CMPIManager::GetCommSize(CXIOSManager::Comm_Server) > 1) 
     288         StdString lonid_loc = (server->intraCommSize > 1) 
    282289                             ? StdString("lon_").append(domid).append("_local") 
    283290                             : lonid; 
    284          StdString latid_loc = (comm::CMPIManager::GetCommSize(CXIOSManager::Comm_Server) > 1) 
     291         StdString latid_loc = (server->intraCommSize > 1) 
    285292                             ? StdString("lat_").append(domid).append("_local") 
    286293                             : latid; 
     
    288295                             ? field->name.getValue() : field->getBaseFieldReference()->getId(); 
    289296 
    290          unsigned int ssize = domain->zoom_ni_loc.getValue() * domain->zoom_nj_loc.getValue(); 
    291          bool isCurvilinear = (domain->lonvalue.getValue()->size() == ssize); 
    292  
     297//         unsigned int ssize = domain->zoom_ni_loc.getValue() * domain->zoom_nj_loc.getValue(); 
     298//         bool isCurvilinear = (domain->lonvalue.getValue()->size() == ssize); 
     299          bool isCurvilinear = true ; // for moment  
     300           
    293301         nc_type type = (!field->prec.isEmpty() && 
    294302                        ( field->prec.getValue() == 4)) 
     
    309317         if (!grid->axis_ref.isEmpty()) 
    310318         { 
    311             boost::shared_ptr<CAxis> axis = 
    312                CObjectFactory::GetObject<CAxis>(grid->axis_ref.getValue()); 
    313             StdString axisid = (!axis->name.isEmpty()) 
    314                              ? axis->name.getValue() : axis->getId(); 
     319            boost::shared_ptr<CAxis> axis = grid->axis ; 
     320            StdString axisid = (!axis->name.isEmpty()) ? axis->name.getValue() : axis->getId(); 
    315321            dims.push_back(axisid); 
    316322            coodinates.push_back(axisid); 
     
    425431      void CNc4DataOutput::closeFile_ (void) 
    426432      { 
    427          std::cout<<"--> Close file "<<filename<<std::endl ; 
    428433         SuperClassWriter::close() ; 
    429434      } 
     
    449454      void CNc4DataOutput::writeFieldData_ (const boost::shared_ptr<tree::CField>  field) 
    450455      { 
    451          boost::shared_ptr<CGrid> grid = 
    452             CObjectFactory::GetObject<CGrid>(field->grid_ref.getValue()); 
    453          boost::shared_ptr<CDomain> domain = 
    454             CObjectFactory::GetObject<CDomain>(grid->domain_ref.getValue()); 
     456         shared_ptr<CContext> context=CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId()) ; 
     457 
     458         boost::shared_ptr<CGrid> grid = field->grid ; 
     459         boost::shared_ptr<CDomain> domain = grid->domain ; 
    455460          
    456461         if(SuperClass::type==MULTI_FILE) if (domain->isEmpty()) return; 
    457462 
    458463 
    459          StdString fieldid   = (!field->name.isEmpty()) 
     464         StdString fieldid   = (!field->name.isEmpty())  
    460465                             ? field->name.getValue()  
    461466                             : field->getBaseFieldReference()->getId(); 
    462          boost::shared_ptr<xmlioserver::tree::CContext> context = 
    463             CObjectFactory::GetObject<xmlioserver::tree::CContext> 
    464                (CObjectFactory::GetCurrentContextId()); 
    465467                              
    466468         StdOStringStream oss; 
     
    468470             << "_" << field->getRelFile()->output_freq.getValue(); 
    469471              
    470          ARRAY(double, 1) field_data = field->getData(); 
     472 //        ARRAY(double, 1) field_data = field->data_srv; 
    471473         ARRAY_CREATE(time_data, double, 1, [1]); 
    472          (*time_data)[0] = date::Time(*field->getLastWriteDate()); 
     474         (*time_data)[0] = date::Time(*field->last_Write_srv); 
    473475          
    474476         if (grid->hasAxis()) // 3D 
    475477         { 
    476             boost::shared_ptr<CAxis> axis = CObjectFactory::GetObject<CAxis>(grid->axis_ref.getValue()); 
    477             ARRAY(double, 3) field_data3D (new CArray<double,3>(grid->getLocalShape()/*, boost::c_storage_order()*/));             
    478             grid->outputField(field_data, field_data3D); 
     478            boost::shared_ptr<CAxis> axis = grid->axis ; 
     479            ARRAY_CREATE(field_data3D,double,3,[domain->zoom_ni_srv][domain->zoom_nj_srv][axis->size.getValue()]) ; 
     480            field->outputField(field_data3D); 
    479481            switch (SuperClass::type) 
    480482           { 
     
    497499                 { 
    498500//                 start[2]=domain->zoom_ibegin_loc.getValue()-domain->zoom_ibegin.getValue() ; start [1]=domain->zoom_jbegin_loc.getValue()-domain->zoom_jbegin.getValue() ; start[0]=0 ; 
    499                    start[2]=domain->zoom_ibegin_loc.getValue()+domain->ibegin.getValue()-1-domain->zoom_ibegin.getValue() ; start [1]=domain->zoom_jbegin_loc.getValue()+domain->jbegin.getValue()-1-domain->zoom_jbegin.getValue() ; start[0]=0 ;  
    500                    count[2]=domain->zoom_ni_loc.getValue() ; count[1]=domain->zoom_nj_loc.getValue() ; count[0] = axis->size.getValue(); 
     501                   start[2]=domain->zoom_ibegin_srv-domain->zoom_ibegin.getValue() ; start [1]=domain->zoom_jbegin_srv-domain->zoom_jbegin.getValue() ; start[0]=0 ; 
     502                   count[2]=domain->zoom_ni_srv ; count[1]=domain->zoom_nj_srv ; count[0] = axis->size.getValue(); 
    501503                 } 
    502504                 SuperClassWriter::writeData(field_data3D, fieldid, true, field->getNStep()-1,&start,&count ); 
     
    509511         else // 2D 
    510512         { 
    511             ARRAY(double, 2) field_data2D (new CArray<double, 2>(grid->getLocalShape()/*, boost::c_storage_order()*/)); 
    512             grid->outputField(field_data,  field_data2D); 
     513            ARRAY_CREATE(field_data2D,double,2,[domain->zoom_ni_srv][domain->zoom_nj_srv]) ; 
     514            field->outputField(field_data2D); 
    513515            switch (SuperClass::type) 
    514516            { 
     
    530532                 else 
    531533                 { 
    532                    start[1]=domain->zoom_ibegin_loc.getValue()+domain->ibegin.getValue()-1-domain->zoom_ibegin.getValue() ; start [0]=domain->zoom_jbegin_loc.getValue()+domain->jbegin.getValue()-1-domain->zoom_jbegin.getValue() ;  
    533                    count[1]=domain->zoom_ni_loc.getValue() ; count[0]=domain->zoom_nj_loc.getValue() ;  
     534                   start[1]=domain->zoom_ibegin_srv-domain->zoom_ibegin.getValue() ; start[0]=domain->zoom_jbegin_srv-domain->zoom_jbegin.getValue() ;  
     535                   count[1]=domain->zoom_ni_srv ; count[0]=domain->zoom_nj_srv ; 
    534536                 } 
     537 
    535538                 SuperClassWriter::writeData(field_data2D, fieldid, true, field->getNStep()-1,&start,&count); 
    536539                 SuperClassWriter::writeData(time_data, oss.str(), true, field->getNStep()-1); 
Note: See TracChangeset for help on using the changeset viewer.