Changeset 2019 for XIOS/dev/dev_trunk_graph/src/node/file.cpp
- Timestamp:
- 01/22/21 12:00:29 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_trunk_graph/src/node/file.cpp
r1612 r2019 145 145 TRY 146 146 { 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; 152 150 std::vector<CField*>::iterator it; 153 151 this->enabledFields = this->getAllFields(); … … 176 174 177 175 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));180 176 } 181 177 enabledFields = newEnabledFields; … … 226 222 CContext* context = CContext::getCurrent(); 227 223 const CDate& currentDate = context->calendar->getCurrentDate(); 228 CContextServer* server = context->server;229 224 230 225 lastSync = currentDate; … … 245 240 isOpen = false; 246 241 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 252 242 set<StdString> setAxis; 253 243 set<StdString> setDomains; … … 257 247 { 258 248 CField* field = *it; 259 std::vector<CAxis*> vecAxis = field->g rid->getAxis();249 std::vector<CAxis*> vecAxis = field->getGrid()->getAxis(); 260 250 for (size_t i = 0; i < vecAxis.size(); ++i) 261 251 setAxis.insert(vecAxis[i]->getAxisOutputName()); 262 std::vector<CDomain*> vecDomains = field->g rid->getDomains();252 std::vector<CDomain*> vecDomains = field->getGrid()->getDomains(); 263 253 for (size_t i = 0; i < vecDomains.size(); ++i) 264 254 setDomains.insert(vecDomains[i]->getDomainOutputName()); 265 266 field->resetNStep(recordOffset);267 255 } 268 256 nbAxis = setAxis.size(); … … 272 260 createSubComFile(); 273 261 274 // if (time_counter.isEmpty()) time_counter.setValue(time_counter_attr::centered);275 262 if (time_counter_name.isEmpty()) time_counter_name = "time_counter"; 276 263 } … … 281 268 TRY 282 269 { 270 CContext* context = CContext::getCurrent(); 283 271 if (checkRead) return; 284 createSubComFile(); 272 //createSubComFile(); 273 allZoneEmpty = false; 274 MPI_Comm_dup(context->intraComm_, &fileComm) ; 285 275 checkRead = true; 286 276 } … … 294 284 { 295 285 CContext* context = CContext::getCurrent(); 296 CContextServer* server = context->server;297 286 298 287 // create sub communicator for file … … 302 291 { 303 292 CField* field = *it; 304 bool nullGrid = ( 0 == field->grid);305 allZoneEmpty &= nullGrid ? false : !field->g rid->doGridHaveDataToWrite();293 bool nullGrid = (nullptr == field->getGrid()); 294 allZoneEmpty &= nullGrid ? false : !field->getGrid()->doGridHaveDataToWrite(); 306 295 } 307 296 308 297 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); 310 299 if (allZoneEmpty) MPI_Comm_free(&fileComm); 311 300 } … … 321 310 { 322 311 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) 326 314 { 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(); 336 321 } 337 322 CATCH_DUMP_ATTR … … 349 334 // Done by classical server or secondary server 350 335 // 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 // { 353 341 if (!mode.isEmpty() && mode.getValue() == mode_attr::read) 354 342 { … … 360 348 } 361 349 //checkSplit(); // Really need for reading? 362 }350 // } 363 351 } 364 352 CATCH_DUMP_ATTR … … 416 404 lastSplit = lastSplit + split_freq.getValue(); 417 405 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++) 419 407 { 420 408 (*it)->resetNStep(); 421 409 (*it)->resetNStepMax(); 422 } 410 }*/ 423 411 if (mode.isEmpty() || mode.getValue() == mode_attr::write) 424 412 createHeader(); … … 432 420 CATCH_DUMP_ATTR 433 421 422 434 423 /*! 435 424 \brief Create header of netcdf file … … 440 429 { 441 430 CContext* context = CContext::getCurrent(); 442 CContextServer* server = context->server; 443 431 444 432 if (!allZoneEmpty) 445 433 { … … 557 545 MPI_Comm_rank(fileComm, &commRank); 558 546 559 if ( server->intraCommSize> 1)547 if (context->intraCommSize_ > 1) 560 548 { 561 549 oss << "_" ; … … 633 621 { 634 622 CContext* context = CContext::getCurrent(); 635 CContextServer* server = context->server;636 623 MPI_Comm readComm = this->fileComm; 637 624 … … 680 667 MPI_Comm_rank(readComm, &commRank); 681 668 682 if ( server->intraCommSize> 1)669 if (context->intraCommSize_ > 1) 683 670 { 684 671 oss << "_"; … … 696 683 bool isCollective = par_access.isEmpty() || par_access == par_access_attr::collective; 697 684 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; 699 686 700 687 if (isOpen) data_out->closeFile(); … … 747 734 748 735 // 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(); 750 740 751 741 // Read necessary value from file … … 761 751 CATCH_DUMP_ATTR 762 752 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 } 763 762 /*! 764 763 \brief Parse xml file and write information into file object … … 822 821 823 822 //---------------------------------------------------------------- 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 its828 reference to find its parents or/and its base reference object must be done. Moreover829 during this search, there are some information that can only be sent to server AFTER830 all information of active fields are created on server side, e.g: checking mask or index831 \param [in] sendToServer: Send all info to server (true) or only a part of it (false)832 */833 void CFile::solveOnlyRefOfEnabledFields(bool sendToServer)834 TRY835 {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_ATTR843 823 844 824 void CFile::checkGridOfEnabledFields() … … 931 911 CATCH_DUMP_ATTR 932 912 933 void CFile::generateNewTransformationGridDest()934 TRY935 {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_ATTR943 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 its947 reference to find its parents or/and its base reference object must be done. Moreover948 during this search, there are some information that can only be sent to server AFTER949 all information of active fields are created on server side, e.g: checking mask or index950 \param [in] sendToServer: Send all info to server (true) or only a part of it (false)951 */952 void CFile::solveAllRefOfEnabledFieldsAndTransform(bool sendToServer)953 TRY954 {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_ATTR962 963 /*!964 * Constructs the filter graph for each active field.965 *966 * \param gc the garbage collector to use when building the filter graph967 */968 void CFile::buildFilterGraphOfEnabledFields(CGarbageCollector& gc)969 TRY970 {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_ATTR978 913 979 914 /*! … … 1350 1285 CATCH_DUMP_ATTR 1351 1286 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 1352 1307 /*! 1353 1308 \brief Dispatch event received from client
Note: See TracChangeset
for help on using the changeset viewer.