Ignore:
Timestamp:
01/22/21 12:00:29 (3 years ago)
Author:
yushan
Message:

Graph intermedia commit to a tmp branch

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_trunk_graph/src/node/file.cpp

    r1612 r2019  
    145145   TRY 
    146146   { 
    147       if (!this->enabledFields.empty()) 
    148          return (this->enabledFields); 
    149  
    150       const int _outputlevel = 
    151          (!output_level.isEmpty()) ? output_level.getValue() : default_outputlevel; 
     147      if (!this->enabledFields.empty()) return (this->enabledFields); 
     148 
     149      const int _outputlevel = (!output_level.isEmpty()) ? output_level.getValue() : default_outputlevel; 
    152150      std::vector<CField*>::iterator it; 
    153151      this->enabledFields = this->getAllFields(); 
     
    176174 
    177175         newEnabledFields.push_back(*it); 
    178          // Le champ est finalement actif, on y ajoute la rfrence au champ de base. 
    179          (*it)->setRelFile(CFile::get(this)); 
    180176      } 
    181177      enabledFields = newEnabledFields; 
     
    226222      CContext* context = CContext::getCurrent(); 
    227223      const CDate& currentDate = context->calendar->getCurrentDate(); 
    228       CContextServer* server = context->server; 
    229224 
    230225      lastSync  = currentDate; 
     
    245240      isOpen = false;       
    246241 
    247 //      if (!record_offset.isEmpty() && record_offset < 0) 
    248 //        ERROR("void CFile::initFile(void)", 
    249 //              "Invalid 'record_offset', this attribute cannot be negative."); 
    250       const int recordOffset = record_offset.isEmpty() ? 0 : record_offset; 
    251  
    252242      set<StdString> setAxis; 
    253243      set<StdString> setDomains; 
     
    257247      { 
    258248         CField* field = *it;          
    259          std::vector<CAxis*> vecAxis = field->grid->getAxis(); 
     249         std::vector<CAxis*> vecAxis = field->getGrid()->getAxis(); 
    260250         for (size_t i = 0; i < vecAxis.size(); ++i) 
    261251           setAxis.insert(vecAxis[i]->getAxisOutputName()); 
    262          std::vector<CDomain*> vecDomains = field->grid->getDomains(); 
     252         std::vector<CDomain*> vecDomains = field->getGrid()->getDomains(); 
    263253         for (size_t i = 0; i < vecDomains.size(); ++i) 
    264254           setDomains.insert(vecDomains[i]->getDomainOutputName()); 
    265  
    266          field->resetNStep(recordOffset); 
    267255      } 
    268256      nbAxis = setAxis.size(); 
     
    272260      createSubComFile(); 
    273261 
    274       // if (time_counter.isEmpty()) time_counter.setValue(time_counter_attr::centered); 
    275262      if (time_counter_name.isEmpty()) time_counter_name = "time_counter"; 
    276263    } 
     
    281268    TRY 
    282269    { 
     270      CContext* context = CContext::getCurrent(); 
    283271      if (checkRead) return; 
    284       createSubComFile(); 
     272      //createSubComFile(); 
     273      allZoneEmpty = false;  
     274      MPI_Comm_dup(context->intraComm_, &fileComm) ; 
    285275      checkRead = true; 
    286276    } 
     
    294284    { 
    295285      CContext* context = CContext::getCurrent(); 
    296       CContextServer* server = context->server; 
    297286 
    298287      // create sub communicator for file 
     
    302291      { 
    303292         CField* field = *it; 
    304          bool nullGrid = (0 == field->grid); 
    305          allZoneEmpty &= nullGrid ? false : !field->grid->doGridHaveDataToWrite(); 
     293         bool nullGrid = (nullptr == field->getGrid()); 
     294         allZoneEmpty &= nullGrid ? false : !field->getGrid()->doGridHaveDataToWrite(); 
    306295      } 
    307296 
    308297      int color = allZoneEmpty ? 0 : 1; 
    309       MPI_Comm_split(server->intraComm, color, server->intraCommRank, &fileComm); 
     298      MPI_Comm_split(context->intraComm_, color, context->intraCommRank_, &fileComm); 
    310299      if (allZoneEmpty) MPI_Comm_free(&fileComm); 
    311300    } 
     
    321310    { 
    322311      CContext* context = CContext::getCurrent(); 
    323       // Done by classical server or secondary server 
    324       // This condition should be changed soon 
    325       if (CServer::serverLevel == 0 || CServer::serverLevel == 2) 
     312 
     313      if (mode.isEmpty() || mode.getValue() == mode_attr::write) 
    326314      { 
    327         if (mode.isEmpty() || mode.getValue() == mode_attr::write) 
    328         { 
    329           CTimer::get("Files : create headers").resume(); 
    330           if (!isOpen) createHeader(); 
    331           CTimer::get("Files : create headers").suspend(); 
    332           checkSync(); 
    333         }         
    334         checkSplit(); // REally need this? 
    335       } 
     315        CTimer::get("Files : create headers").resume(); 
     316        if (!isOpen) createHeader(); 
     317        CTimer::get("Files : create headers").suspend(); 
     318        checkSync(); 
     319      }         
     320      checkSplit();  
    336321    } 
    337322    CATCH_DUMP_ATTR 
     
    349334      // Done by classical server or secondary server 
    350335      // TODO: This condition should be changed soon. It only works with maximum number of level as 2 
    351       if (CServer::serverLevel == 0 || CServer::serverLevel == 1) 
    352       { 
     336 
     337//ym      if (CServer::serverLevel == 0 || CServer::serverLevel == 1)  
     338// ym client must doing it also 
     339//      if (context->getServiceType()==CServicesManager::IO_SERVER || context->getServiceType()==CServicesManager::GATHERER) 
     340//      { 
    353341        if (!mode.isEmpty() && mode.getValue() == mode_attr::read) 
    354342        { 
     
    360348        } 
    361349        //checkSplit(); // Really need for reading? 
    362       } 
     350 //     } 
    363351    } 
    364352    CATCH_DUMP_ATTR 
     
    416404          lastSplit = lastSplit + split_freq.getValue(); 
    417405          std::vector<CField*>::iterator it, end = this->enabledFields.end(); 
    418           for (it = this->enabledFields.begin(); it != end; it++) 
     406/*          for (it = this->enabledFields.begin(); it != end; it++) 
    419407          { 
    420408            (*it)->resetNStep(); 
    421409            (*it)->resetNStepMax(); 
    422           } 
     410          }*/ 
    423411          if (mode.isEmpty() || mode.getValue() == mode_attr::write) 
    424412            createHeader(); 
     
    432420    CATCH_DUMP_ATTR 
    433421 
     422 
    434423   /*! 
    435424   \brief Create header of netcdf file 
     
    440429   { 
    441430      CContext* context = CContext::getCurrent(); 
    442       CContextServer* server = context->server; 
    443  
     431       
    444432      if (!allZoneEmpty) 
    445433      { 
     
    557545            MPI_Comm_rank(fileComm, &commRank); 
    558546 
    559             if (server->intraCommSize > 1) 
     547            if (context->intraCommSize_ > 1) 
    560548            { 
    561549              oss << "_" ; 
     
    633621  { 
    634622    CContext* context = CContext::getCurrent(); 
    635     CContextServer* server = context->server; 
    636623    MPI_Comm readComm = this->fileComm; 
    637624 
     
    680667        MPI_Comm_rank(readComm, &commRank); 
    681668 
    682         if (server->intraCommSize > 1) 
     669        if (context->intraCommSize_ > 1) 
    683670        { 
    684671          oss << "_"; 
     
    696683      bool isCollective = par_access.isEmpty() || par_access == par_access_attr::collective; 
    697684      bool readMetaDataPar = true; 
    698       if (!context->hasServer) readMetaDataPar = (read_metadata_par.isEmpty()) ? false : read_metadata_par; 
     685      if (context->getServiceType()==CServicesManager::CLIENT) readMetaDataPar = (read_metadata_par.isEmpty()) ? false : read_metadata_par; 
    699686 
    700687      if (isOpen) data_out->closeFile(); 
     
    747734 
    748735        // Now complete domain and axis associated with this field 
    749         enabledFields[idx]->solveGenerateGrid(); 
     736        
     737       //ym => this a problem in wich order are done the grid generation. Probably metadata are read in file and after the grid is ditributed by the filter 
     738       // => must be checked in detail. But solveGenerated grid is not existing any more with new transformation framework 
     739       // enabledFields[idx]->solveGenerateGrid(); 
    750740 
    751741        // Read necessary value from file 
     
    761751   CATCH_DUMP_ATTR 
    762752 
     753   void CFile::readFieldAttributesMetaData(CField* field) 
     754   { 
     755     this->data_in->readFieldAttributesMetaData(field); 
     756   } 
     757 
     758   void CFile::readFieldAttributesValues(CField* field) 
     759   { 
     760     this->data_in->readFieldAttributesValues(field); 
     761   } 
    763762   /*! 
    764763   \brief Parse xml file and write information into file object 
     
    822821 
    823822   //---------------------------------------------------------------- 
    824  
    825    /*! 
    826    \brief Resolve all reference of active fields. 
    827       In order to know exactly which data each active field has, a search for all its 
    828    reference to find its parents or/and its base reference object must be done. Moreover 
    829    during this search, there are some information that can only be sent to server AFTER 
    830    all information of active fields are created on server side, e.g: checking mask or index 
    831    \param [in] sendToServer: Send all info to server (true) or only a part of it (false) 
    832    */ 
    833    void CFile::solveOnlyRefOfEnabledFields(bool sendToServer) 
    834    TRY 
    835    { 
    836      int size = this->enabledFields.size(); 
    837      for (int i = 0; i < size; ++i) 
    838      { 
    839        this->enabledFields[i]->solveOnlyReferenceEnabledField(sendToServer); 
    840      } 
    841    } 
    842    CATCH_DUMP_ATTR 
    843823 
    844824   void CFile::checkGridOfEnabledFields() 
     
    931911   CATCH_DUMP_ATTR 
    932912 
    933    void CFile::generateNewTransformationGridDest() 
    934    TRY 
    935    { 
    936      int size = this->enabledFields.size(); 
    937      for (int i = 0; i < size; ++i) 
    938      { 
    939        this->enabledFields[i]->generateNewTransformationGridDest(); 
    940      } 
    941    } 
    942    CATCH_DUMP_ATTR 
    943  
    944    /*! 
    945    \brief Resolve all reference of active fields. 
    946       In order to know exactly which data each active field has, a search for all its 
    947    reference to find its parents or/and its base reference object must be done. Moreover 
    948    during this search, there are some information that can only be sent to server AFTER 
    949    all information of active fields are created on server side, e.g: checking mask or index 
    950    \param [in] sendToServer: Send all info to server (true) or only a part of it (false) 
    951    */ 
    952    void CFile::solveAllRefOfEnabledFieldsAndTransform(bool sendToServer) 
    953    TRY 
    954    { 
    955      int size = this->enabledFields.size(); 
    956      for (int i = 0; i < size; ++i) 
    957      {        
    958       this->enabledFields[i]->solveAllEnabledFieldsAndTransform(); 
    959      } 
    960    } 
    961    CATCH_DUMP_ATTR 
    962  
    963    /*! 
    964     * Constructs the filter graph for each active field. 
    965     * 
    966     * \param gc the garbage collector to use when building the filter graph 
    967     */ 
    968    void CFile::buildFilterGraphOfEnabledFields(CGarbageCollector& gc) 
    969    TRY 
    970    { 
    971      int size = this->enabledFields.size(); 
    972      for (int i = 0; i < size; ++i) 
    973      { 
    974        this->enabledFields[i]->buildFilterGraph(gc, true); 
    975      } 
    976    } 
    977    CATCH_DUMP_ATTR 
    978913 
    979914   /*! 
     
    13501285   CATCH_DUMP_ATTR 
    13511286 
     1287 
     1288   
     1289   /*! 
     1290    * Send file attribute, related variable and chield field tree to a given file server. 
     1291    * \param[in] client : the context client where to send file 
     1292    */ 
     1293   void CFile::sendFileToFileServer(CContextClient* client) 
     1294   TRY 
     1295   { 
     1296     if (sendFileToFileServer_done_.count(client)!=0) return ; 
     1297     else sendFileToFileServer_done_.insert(client) ; 
     1298      
     1299     StdString fileDefRoot("file_definition"); 
     1300     CFileGroup* cfgrpPtr = CFileGroup::get(fileDefRoot); 
     1301     cfgrpPtr->sendCreateChild(this->getId(), client); 
     1302     this->sendAllAttributesToServer(client); 
     1303     this->sendAddAllVariables(client); 
     1304     for(auto field : enabledFields) this->sendAddField(field->getId(), client); 
     1305   } 
     1306   CATCH_DUMP_ATTR 
    13521307   /*! 
    13531308   \brief Dispatch event received from client 
Note: See TracChangeset for help on using the changeset viewer.