Changeset 1882


Ignore:
Timestamp:
05/18/20 10:11:57 (4 years ago)
Author:
ymipsl
Message:

Xios coupling branch
Refactor and simplify file writer filter management on server side.

YM

Location:
XIOS/dev/dev_ym/XIOS_COUPLING/src
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/data_input.cpp

    r775 r1882  
    1919  //---------------------------------------------------------------- 
    2020 
    21   void CDataInput::readFieldData(CField* field) 
     21  void CDataInput::readFieldData(CField* field, CArray<double,1>& data) 
    2222  { 
    23     this->readFieldData_(field); 
     23    this->readFieldData_(field,data); 
    2424  } 
    2525 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/data_input.hpp

    r775 r1882  
    1818      /// Read methods /// 
    1919      StdSize getFieldNbRecords(CField* field); 
    20       void readFieldData(CField* field); 
     20      void readFieldData(CField* field, CArray<double,1>& data); 
    2121      void readFieldAttributesMetaData(CField* field); 
    2222      void readFieldAttributesValues(CField* field); 
     
    2727    protected: 
    2828      virtual StdSize getFieldNbRecords_(CField* field) = 0; 
    29       virtual void readFieldData_(CField* field) = 0; 
     29      virtual void readFieldData_(CField* field, CArray<double,1>& data) = 0; 
    3030      virtual void readFieldAttributes_(CField* field, bool readAttributeValues) = 0; 
    3131      virtual void closeFile_(void) = 0; 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/data_output.cpp

    r1622 r1882  
    122122      //---------------------------------------------------------------- 
    123123 
    124       void CDataOutput::writeFieldData(CField* field) 
     124      void CDataOutput::writeFieldData(CField* field, const CArray<double,1>& data) 
    125125      TRY 
    126126      { 
    127127//         CGrid* grid = CGrid::get(field->grid_ref.getValue()); 
    128128//         CDomain* domain = CDomain::get(grid->domain_ref.getValue()); 
    129          this->writeFieldData_(field); 
     129         this->writeFieldData_(field, data); 
    130130      } 
    131131      CATCH 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/data_output.hpp

    r1542 r1882  
    2828            void writeFieldGrid(CField* field); 
    2929            void writeTimeDimension(void); 
    30             void writeFieldData(CField* field); 
     30            void writeFieldData(CField* field, const CArray<double,1>& data); 
    3131 
    3232            virtual void definition_start(void) = 0; 
     
    5252            virtual void syncFile_      (void)               = 0; 
    5353            virtual void writeField_    (CField*     field)  = 0; 
    54             virtual void writeFieldData_(CField*     field)  = 0; 
     54            virtual void writeFieldData_(CField*     field, const CArray<double,1>& data)  = 0; 
    5555            virtual void writeDomain_   (CDomain*    domain) = 0; 
    5656            virtual void writeAxis_     (CAxis*      axis)   = 0; 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/io/nc4_data_input.cpp

    r1869 r1882  
    4343  CATCH 
    4444 
    45   void CNc4DataInput::readFieldData_(CField* field) 
     45  void CNc4DataInput::readFieldData_(CField* field, CArray<double,1>& dataOut) 
    4646  TRY 
    4747  { 
     
    113113    } 
    114114 
    115     field->inputField(fieldData); 
     115    field->inputField(fieldData, dataOut); 
    116116 
    117117    if (!field->scale_factor.isEmpty() || !field->add_offset.isEmpty()) 
     
    120120      if (!field->scale_factor.isEmpty()) scaleFactor = field->scale_factor; 
    121121      if (!field->add_offset.isEmpty()) addOffset = field->add_offset; 
    122       field->invertScaleFactorAddOffset(scaleFactor, addOffset); 
     122      field->invertScaleFactorAddOffset(dataOut,scaleFactor, addOffset); 
    123123    } 
    124124  } 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/io/nc4_data_input.hpp

    r1639 r1882  
    3737    // Read methods 
    3838    virtual StdSize getFieldNbRecords_(CField* field); 
    39     virtual void readFieldData_(CField* field); 
     39    virtual void readFieldData_(CField* field, CArray<double,1>& data); 
    4040    virtual void readFieldAttributes_(CField* field, bool readAttributeValues); 
    4141    virtual void closeFile_(void); 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/io/nc4_data_output.cpp

    r1872 r1882  
    23432343      //--------------------------------------------------------------- 
    23442344 
    2345       void CNc4DataOutput::writeFieldData_ (CField*  field) 
     2345      void CNc4DataOutput::writeFieldData_ (CField*  field, const CArray<double,1>& data) 
    23462346      { 
    23472347        CContext* context = CContext::getCurrent(); 
    23482348        CGrid* grid = field->getGrid(); 
     2349        CArray<double,1> dataIn(data.copy()) ; 
    23492350 
    23502351        if (field->getNStep()<1)  
     
    24572458           if (!field->scale_factor.isEmpty()) scaleFactor = field->scale_factor; 
    24582459           if (!field->add_offset.isEmpty()) addOffset = field->add_offset; 
    2459            field->scaleFactorAddOffset(scaleFactor, addOffset); 
     2460           field->scaleFactorAddOffset(dataIn, scaleFactor, addOffset); 
    24602461         } 
    24612462 
     
    24722473 
    24732474           if (field->getUseCompressedOutput()) 
    2474              field->outputCompressedField(fieldData); 
     2475             field->outputCompressedField(dataIn, fieldData); 
    24752476           else 
    2476              field->outputField(fieldData); 
     2477             field->outputField(dataIn, fieldData); 
    24772478 
    24782479           if (!field->prec.isEmpty() && field->prec == 2) fieldData = round(fieldData); 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/io/nc4_data_output.hpp

    r1639 r1882  
    5656            virtual void writeAttribute_(CVariable* var); 
    5757            virtual void writeAttribute_(CVariable* var, const string& fieldId); 
    58             virtual void writeFieldData_(CField* field); 
     58            virtual void writeFieldData_(CField* field, const CArray<double,1>& data); 
    5959            virtual void writeFile_     (CFile* file); 
    6060            virtual void closeFile_     (void); 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/node/field.cpp

    r1881 r1882  
    235235  TRY 
    236236  { 
     237    // ym to remove latter 
     238    /* 
    237239    CContext* context = CContext::getCurrent(); 
    238240    Time timeStamp ; 
     
    257259    if (opeDate <= currDate) 
    258260    { 
     261       
    259262      auto& outLocalIndexStoreOnClient = grid_-> getOutLocalIndexStoreOnClient() ; 
    260263      for (auto it = outLocalIndexStoreOnClient.begin(); it != outLocalIndexStoreOnClient.end(); ++it) 
     
    266269      } 
    267270    } 
     271*/ 
     272    Time timeStamp ; 
     273    CArray<int,1>& storeClient = grid_->getStoreIndex_client(); // replace it with local size 
     274    CArray<double,1> recv_data_tmp(storeClient.numElements()); 
     275    auto& outLocalIndexStoreOnClient = grid_-> getOutLocalIndexStoreOnClient() ; 
     276    for (auto it = outLocalIndexStoreOnClient.begin(); it != outLocalIndexStoreOnClient.end(); ++it) 
     277    { 
     278      CArray<double,1> tmp; 
     279      CArray<size_t,1>& indexTmp = it->second; 
     280      *(rankBuffers[it->first]) >> timeStamp >> tmp; 
     281      for (int idx = 0; idx < indexTmp.numElements(); ++idx) recv_data_tmp(indexTmp(idx)) = tmp(idx); 
     282    } 
    268283 
    269284    this->setData(recv_data_tmp); 
     285/* 
    270286    // delete incomming flux for server only 
    271287    recvFoperationSrv.reset() ; 
    272288    recvDataSrv.reset() ; 
    273   } 
    274   CATCH_DUMP_ATTR 
    275  
     289*/ 
     290  } 
     291  CATCH_DUMP_ATTR 
     292 
     293  /* ym : old interface : to be removed... 
    276294  void CField::writeUpdateData(const CArray<double,1>& data) 
    277295  TRY 
     
    303321  } 
    304322  CATCH_DUMP_ATTR 
    305  
    306   void CField::writeField(void) 
     323  */ 
     324 
     325  void CField::writeUpdateData(const CArray<double,1>& data) 
     326  TRY 
     327  { 
     328    const CDate writeDate = last_Write_srv + freq_write_srv; 
     329    last_Write_srv = writeDate; 
     330    grid_->computeWrittenIndex(); 
     331    /* 
     332    recvDataSrv.resize(data.numElements()) ; 
     333    recvDataSrv = data ; 
     334    */ 
     335    writeField(data); 
     336    lastlast_Write_srv = last_Write_srv; 
     337  } 
     338  CATCH_DUMP_ATTR 
     339 
     340 
     341  void CField::writeField(const CArray<double,1>& data) 
    307342  TRY 
    308343  { 
     
    313348        getRelFile()->checkWriteFile(); 
    314349        this->incrementNStep(); 
    315         getRelFile()->getDataOutput()->writeFieldData(CField::get(this)); 
     350        getRelFile()->getDataOutput()->writeFieldData(CField::get(this), data); 
    316351      } 
    317352    } 
     
    403438    CEventClient event(getType(), EVENT_ID_READ_DATA_READY); 
    404439    std::list<CMessage> msgs; 
    405  
    406     EReadField hasData = readField(); 
     440     
     441    CArray<double,1> data ; 
     442    EReadField hasData = readField(data); 
    407443 
    408444    map<int, CArray<double,1> >::iterator it; 
     
    411447       if (client->isServerLeader()) 
    412448       { 
    413           if (0 != recvDataSrv.numElements()) 
     449          if (0 != data.numElements()) 
    414450          {             
    415451            const std::list<int>& ranks = client->getRanksServerLeader(); 
     
    422458              { 
    423459                case RF_DATA: 
    424                   msg << getNStep() - 1 << recvDataSrv; 
     460                  msg << getNStep() - 1 << data; 
    425461                  break; 
    426462                case RF_NODATA: 
    427                   msg << int(-2) << recvDataSrv; 
     463                  msg << int(-2) << data; 
    428464                  break; 
    429465                case RF_EOF:                   
     
    452488        for (int idx = 0; idx < indexTmp.numElements(); ++idx) 
    453489        { 
    454           tmp(idx) = recvDataSrv(indexTmp(idx)); 
     490          tmp(idx) = data(indexTmp(idx)); 
    455491        }  
    456492 
     
    484520    \return State of field can be read from a file 
    485521  */ 
    486   CField::EReadField CField::readField(void) 
     522  CField::EReadField CField::readField(CArray<double,1>& data) 
    487523  TRY 
    488524  { 
     
    496532      if (grid_->doGridHaveDataToWrite() || getRelFile()->type == CFile::type_attr::one_file)       
    497533      { 
    498         if (0 == recvDataSrv.numElements()) 
    499         {             
    500534          CArray<int,1>& storeClient = grid_->getStoreIndex_client();           
    501           recvDataSrv.resize(storeClient.numElements());           
    502         } 
     535          data.resize(storeClient.numElements());           
    503536         
    504537        getRelFile()->checkReadFile(); 
     
    515548 
    516549        if (RF_EOF != readState) 
    517           getRelFile()->getDataInput()->readFieldData(CField::get(this)); 
     550          getRelFile()->getDataInput()->readFieldData(CField::get(this),data); 
    518551      } 
    519552    } 
     
    20182051  CATCH_DUMP_ATTR 
    20192052 
    2020   void CField::scaleFactorAddOffset(double scaleFactor, double addOffset) 
    2021   TRY 
    2022   { 
    2023     recvDataSrv = (recvDataSrv - addOffset) / scaleFactor; 
    2024   } 
    2025   CATCH_DUMP_ATTR 
    2026  
    2027   void CField::invertScaleFactorAddOffset(double scaleFactor, double addOffset) 
    2028   TRY 
    2029   { 
    2030     recvDataSrv = recvDataSrv * scaleFactor + addOffset; 
    2031   } 
    2032   CATCH_DUMP_ATTR 
    2033  
    2034   void CField::outputField(CArray<double,1>& fieldOut) 
     2053  void CField::scaleFactorAddOffset(CArray<double,1>& data, double scaleFactor, double addOffset) 
     2054  TRY 
     2055  { 
     2056    data = (data - addOffset) / scaleFactor; 
     2057  } 
     2058  CATCH_DUMP_ATTR 
     2059 
     2060  void CField::invertScaleFactorAddOffset(CArray<double,1>& data, double scaleFactor, double addOffset) 
     2061  TRY 
     2062  { 
     2063    data = data * scaleFactor + addOffset; 
     2064  } 
     2065  CATCH_DUMP_ATTR 
     2066 
     2067  void CField::outputField(const CArray<double,1>& dataIn, CArray<double,1>& dataOut) 
    20352068  TRY 
    20362069  {  
     
    20392072    for (size_t idx = 0; idx < outIndexServer.numElements(); ++idx) 
    20402073    { 
    2041       fieldOut(outIndexServer(idx)) = recvDataSrv(outIndexClient(idx)); 
    2042     } 
    2043   } 
    2044   CATCH_DUMP_ATTR 
    2045  
    2046   void CField::inputField(CArray<double,1>& fieldIn) 
     2074      dataOut(outIndexServer(idx)) = dataIn(outIndexClient(idx)); 
     2075    } 
     2076  } 
     2077  CATCH_DUMP_ATTR 
     2078 
     2079  void CField::inputField(const CArray<double,1>& dataIn, CArray<double,1>& dataOut) 
    20472080  TRY 
    20482081  { 
     
    20512084    for (size_t idx = 0; idx < outIndexServer.numElements(); ++idx) 
    20522085    { 
    2053       recvDataSrv(outIndexClient(idx)) = fieldIn(outIndexServer(idx)); 
    2054     } 
    2055   } 
    2056   CATCH_DUMP_ATTR 
    2057  
    2058  void CField::outputCompressedField(CArray<double,1>& fieldOut) 
     2086      dataOut(outIndexClient(idx)) = dataIn(outIndexServer(idx)); 
     2087    } 
     2088  } 
     2089  CATCH_DUMP_ATTR 
     2090 
     2091 void CField::outputCompressedField(const CArray<double,1>& dataIn, CArray<double,1>& dataOut) 
    20592092 TRY 
    20602093 { 
     
    20632096    for (size_t idx = 0; idx < outIndexServer.numElements(); ++idx) 
    20642097    { 
    2065       fieldOut((idx)) = recvDataSrv(outIndexClient(idx)); 
     2098      dataOut((idx)) = dataIn(outIndexClient(idx)); 
    20662099    } 
    20672100  } 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/node/field.hpp

    r1875 r1882  
    190190        void recvUpdateDataFromCoupler(std::map<int,CBufferIn*>& rankBuffers); 
    191191         
    192         void writeField(void); 
     192        void writeField(const CArray<double,1>& data); 
    193193        bool sendReadDataRequest(const CDate& tsDataRequested, CContextClient* client); 
    194194        bool sendReadDataRequestIfNeeded(void); 
    195195        static void recvReadDataRequest(CEventServer& event); 
    196196        void recvReadDataRequest(CContextServer* server); 
    197         EReadField readField(void); 
     197        EReadField readField(CArray<double,1>& data); 
    198198        static void recvReadDataReady(CEventServer& event); 
    199199        void recvReadDataReady(vector<int> ranks, vector<CBufferIn*> buffers); 
     
    206206        void triggerLateField(void) ; 
    207207 
    208         void outputField(CArray<double,3>& fieldOut); 
    209         void outputField(CArray<double,2>& fieldOut); 
    210         void outputField(CArray<double,1>& fieldOut); 
    211         void inputField(CArray<double,3>& fieldOut); 
    212         void inputField(CArray<double,2>& fieldOut); 
    213         void inputField(CArray<double,1>& fieldOut); 
    214         void outputCompressedField(CArray<double, 1>& fieldOut); 
    215         void scaleFactorAddOffset(double scaleFactor, double addOffset); 
    216         void invertScaleFactorAddOffset(double scaleFactor, double addOffset); 
     208//        void outputField(CArray<double,3>& fieldOut); 
     209//        void outputField(CArray<double,2>& fieldOut); 
     210        void outputField(const CArray<double,1>& dataIn, CArray<double,1>& dataOut); 
     211 
     212//        void inputField(CArray<double,3>& fieldOut); 
     213//        void inputField(CArray<double,2>& fieldOut); 
     214        void inputField(const CArray<double,1>& dataIn, CArray<double,1>& dataOut); 
     215        void outputCompressedField(const CArray<double,1>& dataIn, CArray<double, 1>& dataOut); 
     216        void scaleFactorAddOffset(CArray<double,1>& data, double scaleFactor, double addOffset); 
     217        void invertScaleFactorAddOffset(CArray<double,1>& data, double scaleFactor, double addOffset); 
    217218        void parse(xml::CXMLNode& node); 
    218219 
     
    329330 
    330331         // map<int, CArray<double,1> > data_srv; 
    331          CArray<double,1> recvDataSrv; 
     332//         CArray<double,1> recvDataSrv; // not usefull anymore 
    332333          
    333334         std::shared_ptr<func::CFunctor> recvFoperationSrv; 
Note: See TracChangeset for help on using the changeset viewer.