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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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  } 
Note: See TracChangeset for help on using the changeset viewer.