Ignore:
Timestamp:
06/25/19 16:14:54 (5 years ago)
Author:
yushan
Message:

MARK: Dynamic workflow graph developement. Branch up to date with trunk @1663.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_trunk_omp/src/node/field.cpp

    r1671 r1677  
    7070 
    7171  //---------------------------------------------------------------- 
     72 
    7273 
    7374   const StdString& CField::getOId(void) 
     
    11281129   TRY 
    11291130   {      
    1130     if (!isReferenceSolvedAndTransformed) solveAllEnabledFieldsAndTransform(); 
    1131     if (!isGridChecked) checkGridOfEnabledFields(); 
     1131     if (!isReferenceSolvedAndTransformed) solveAllEnabledFieldsAndTransform(); 
     1132     if (!isGridChecked) checkGridOfEnabledFields(); 
    11321133 
    11331134     const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 
     
    11661167         { 
    11671168           fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this)); 
    1168            instantDataFilter->connectOutput(fileWriterFilter, 0); 
     1169           instantDataFilter->connectOutput(fileWriterFilter, 0);         
    11691170         } 
    11701171       } 
     
    11801181           boost::scoped_ptr<IFilterExprNode> expr(parseExpr(getExpression() + '\0')); 
    11811182           std::shared_ptr<COutputPin> filter = expr->reduce(gc, *this); 
     1183           filter->output_field_id = this->getId(); 
    11821184 
    11831185           // Check if a spatial transformation is needed 
     
    11941196 
    11951197               filter->connectOutput(filters.first, 0); 
    1196  
    1197                if (buildWorkflowGraph) 
    1198                { 
    1199                  if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map <int, StdString>; 
    1200                  if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map <StdString, vector <int> >; 
    1201                  int filterOut = filter->getFilterId(); 
    1202                  int filterIn = (std::static_pointer_cast<COutputPin>(filters.second))->getFilterId(); 
    1203                  (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterOut); 
    1204                  (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterIn); 
    1205                  (*CWorkflowGraph::mapFilters_ptr)[filterOut] = filter->GetName(); 
    1206                  (*CWorkflowGraph::mapFilters_ptr)[filterIn] = filters.second->GetName(); 
    1207                  std::cout<<"CField::buildFilterGraph (*CWorkflowGraph::mapFilters_ptr)["<<filterOut<<"] = "<<filter->GetName()<<std::endl; 
    1208                } 
     1198               filters.second->output_field_id = this->getId(); 
     1199 
     1200 
    12091201               filter = filters.second; 
     1202                
    12101203             } 
    12111204           } 
    12121205 
    12131206           instantDataFilter = filter; 
     1207           instantDataFilter->output_field_id = this->getId(); 
     1208           filter->output_field_id = this->getId(); 
     1209           filter->tag = buildWorkflowGraph; 
     1210           // std::cout<<"=====1============= output_field_id = "<<this->getId()<<" =========== tag="<<filter->tag<<std::endl; 
     1211           for(int i=0; i<filter->parent_filters.size(); i++) 
     1212           { 
     1213             // std::cout<<"transforme filter cout= "<<std::shared_ptr<COutputPin>(filter)<<" parent filter = "<<filter->parent_filters[i]<<std::endl;  
     1214             filter->tag = filter->tag || filter->parent_filters[i]->tag; 
     1215           } 
     1216            
     1217            
     1218 
     1219 
     1220 
    12141221         } 
    12151222         // Check if we have a reference on another field 
     
    12181225           CField::get(field_ref)->build_workflow_graph.setValue(buildWorkflowGraph); 
    12191226           instantDataFilter = getFieldReference(gc); 
     1227           instantDataFilter->tag = buildWorkflowGraph; 
    12201228         } 
    12211229         // Check if the data is to be read from a file 
     
    12251233           instantDataFilter = serverSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, false, freq_offset, true, 
    12261234                                                                                                       detectMissingValues, defaultValue, buildWorkflowGraph)); 
     1235           instantDataFilter->tag = buildWorkflowGraph; 
    12271236         } 
    12281237         else // The data might be passed from the model 
     
    12301239            if (check_if_active.isEmpty()) check_if_active = false;  
    12311240            instantDataFilter = clientSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, false, true, NoneDu, false, 
    1232                                                                                                       detectMissingValues, defaultValue, buildWorkflowGraph)); 
    1233             if (buildWorkflowGraph)  
    1234             { 
    1235               if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map <int, StdString>; 
    1236               (*CWorkflowGraph::mapFilters_ptr)[instantDataFilter->getFilterId()] = instantDataFilter->GetName(); 
    1237               std::cout<<"CField::buildFilterGraph2 (*CWorkflowGraph::mapFilters_ptr)["<<instantDataFilter->getFilterId()<<"] = "<<instantDataFilter->GetName()<<std::endl; 
    1238             }   
     1241                                                                                                      detectMissingValues, defaultValue, buildWorkflowGraph));  
     1242            instantDataFilter->tag = buildWorkflowGraph; 
     1243            // std::cout<<"=====4============= output_field_id = "<<this->getId()<<" =========== tag="<<instantDataFilter->tag<<std::endl; 
     1244            // std::cout<<"Source filter cout = "<<std::shared_ptr<COutputPin>(clientSourceFilter)<<std::endl; 
    12391245         } 
    12401246       } 
     
    12481254                                                                          detectMissingValues, defaultValue)); 
    12491255           instantDataFilter->connectOutput(storeFilter, 0); 
     1256 
     1257           storeFilter->tag = (instantDataFilter->tag || buildWorkflowGraph); 
     1258           instantDataFilter->setParentFiltersTag(); 
    12501259         } 
    12511260 
     
    12541263           fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this, buildWorkflowGraph)); 
    12551264           getTemporalDataFilter(gc, file->output_freq)->connectOutput(fileWriterFilter, 0); 
    1256            if (buildWorkflowGraph) 
    1257            { 
    1258              if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map <int, StdString>; 
    1259              if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map <StdString, vector <int> >; 
    1260              int filterOut = getTemporalDataFilter(gc, file->output_freq)->getFilterId(); 
    1261              int filterIn = fileWriterFilter->getFilterId(); 
    1262              (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterOut); 
    1263              (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterIn); 
    1264              (*CWorkflowGraph::mapFilters_ptr)[filterOut] = "Temporal filter"; 
    1265              (*CWorkflowGraph::mapFilters_ptr)[filterIn] = fileWriterFilter->GetName(); 
    1266            } 
     1265           std::cout<<"=====10============= output_field_id = "<<this->name<<std::endl; 
     1266           // std::cout<<"CFileWriterFilter filter = "<<fileWriterFilter<<" parent filter = "<<std::shared_ptr<COutputPin>(getTemporalDataFilter(gc, file->output_freq))<<std::endl; 
     1267            
     1268           fileWriterFilter->tag = (getTemporalDataFilter(gc, file->output_freq)->tag || buildWorkflowGraph); 
     1269           fileWriterFilter->output_field_id = this->name; 
     1270           getTemporalDataFilter(gc, file->output_freq)->setParentFiltersTag(); 
    12671271         } 
    12681272       } 
     
    12961300       double defaultValue  = hasMissingValue ? default_value : (!default_value.isEmpty() ? default_value : 0.0);                                 
    12971301       filters = CSpatialTransformFilter::buildFilterGraph(gc, fieldRef->grid, grid, hasMissingValue, defaultValue, buildWorkflowGraph); 
     1302 
     1303       fieldRef->getInstantDataFilter()->connectOutput(filters.first, 0); 
     1304 
     1305       filters.second->output_field_id = this->getId(); 
     1306      
     1307 
     1308       filters.second->parent_filters.resize(1); 
     1309       filters.second->parent_filters[0]= fieldRef->getInstantDataFilter(); 
     1310 
     1311       filters.second->tag = (buildWorkflowGraph || filters.second->parent_filters[0]->tag); 
     1312 
     1313       // std::cout<<"=====5============= output_field_id = "<<this->getId()<<std::endl; 
     1314       // std::cout<<"CSpatialTransformFilter first filter cout = "<<std::shared_ptr<COutputPin>(filters.first)<<"  second filter cout = "<<std::shared_ptr<COutputPin>(filters.second)<< " parent filter = "<<fieldRef->getInstantDataFilter()<<std::endl; 
     1315        
    12981316     } 
    12991317     else 
    13001318     { 
    13011319       filters.first = filters.second = std::shared_ptr<CFilter>(new CPassThroughFilter(gc, buildWorkflowGraph)); 
    1302      } 
    1303  
    1304      fieldRef->getInstantDataFilter()->connectOutput(filters.first, 0); 
    1305  
    1306      if (buildWorkflowGraph) 
    1307      { 
    1308        if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map <int, StdString>; 
    1309        if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map <StdString, vector <int> >; 
    1310        int filterOut = fieldRef->instantDataFilter->getFilterId(); 
    1311        int filterIn = (std::static_pointer_cast<COutputPin>(filters.first))->getFilterId(); 
    1312        (*CWorkflowGraph::mapFieldToFilters_ptr)[fieldRef->getOId()].push_back(filterOut); 
    1313        (*CWorkflowGraph::mapFieldToFilters_ptr)[fieldRef->getOId()].push_back(filterIn); 
    1314        (*CWorkflowGraph::mapFilters_ptr)[filterOut] = fieldRef->getInstantDataFilter()->GetName(); 
    1315        (*CWorkflowGraph::mapFilters_ptr)[filterIn] = filters.first->GetName(); 
    1316        std::cout<<"CField::getFieldReference (*CWorkflowGraph::mapFilters_ptr)["<<filterOut<<"] = "<<fieldRef->getInstantDataFilter()->GetName()<<std::endl; 
    1317      } 
     1320 
     1321       fieldRef->getInstantDataFilter()->connectOutput(filters.first, 0); 
     1322       filters.second->output_field_id = this->getId(); 
     1323      
     1324 
     1325       filters.second->parent_filters.resize(1); 
     1326       filters.second->parent_filters[0]= fieldRef->getInstantDataFilter(); 
     1327 
     1328       filters.second->tag = buildWorkflowGraph || filters.second->parent_filters[0]->tag; 
     1329 
     1330       // std::cout<<"=====6============= output_field_id = "<<this->getId()<<" =========== tag="<<filters.second->tag<<std::endl; 
     1331       // std::cout<<"Pass through filter cout = "<<std::shared_ptr<COutputPin>(filters.second)<<" parent filter = "<<filters.second->parent_filters[0]<<std::endl; 
     1332 
     1333     } 
     1334 
    13181335     return filters.second; 
    13191336   } 
     
    13351352       ERROR("COutputPin* CField::getSelfReference(CGarbageCollector& gc)", 
    13361353             "Impossible to add a self reference to a field which has already been parsed or which does not have an expression."); 
     1354      
     1355     bool buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true); 
    13371356 
    13381357     if (!selfReferenceFilter) 
     
    13681387 
    13691388         selfReferenceFilter = clientSourceFilter; 
    1370        } 
    1371      } 
    1372  
     1389       }     
     1390     } 
     1391 
     1392     selfReferenceFilter->tag = buildWorkflowGraph; 
    13731393     return selfReferenceFilter; 
    13741394   } 
     
    13881408   { 
    13891409     std::map<CDuration, std::shared_ptr<COutputPin> >::iterator it = temporalDataFilters.find(outFreq); 
    1390      const bool buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true); 
     1410     bool buildWorkflowGraph = buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true); 
    13911411 
    13921412     if (it == temporalDataFilters.end()) 
     
    14041424 
    14051425       instantDataFilter->connectOutput(temporalFilter, 0); 
    1406  
    1407        if (buildWorkflowGraph) 
    1408        { 
    1409          if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map <int, StdString>; 
    1410          if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map <StdString, vector <int> >; 
    1411          int filterOut = instantDataFilter->getFilterId(); 
    1412          int filterIn = (std::static_pointer_cast<COutputPin>(temporalFilter))->getFilterId(); 
    1413          (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterOut); 
    1414          (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterIn); 
    1415          (*CWorkflowGraph::mapFilters_ptr)[filterOut] = getInstantDataFilter()->GetName(); 
    1416          (*CWorkflowGraph::mapFilters_ptr)[filterIn] = temporalFilter->GetName(); 
    1417          std::cout<<"CField::getTemporalDataFilter (*CWorkflowGraph::mapFilters_ptr)["<<filterOut<<"] = "<<getInstantDataFilter()->GetName()<<std::endl; 
    1418        } 
     1426       temporalFilter->output_field_id = this->getId(); 
     1427       temporalFilter->tag = buildWorkflowGraph; 
     1428        
     1429       temporalFilter->parent_filters.resize(1); 
     1430       temporalFilter->parent_filters[0] = instantDataFilter; 
     1431        
     1432 
     1433       // std::cout<<"=====8============= output_field_id = "<<this->getId()<<" =========== tag="<<temporalFilter->tag<<std::endl; 
     1434       // std::cout<<"Temporal filter cout = "<<std::shared_ptr<COutputPin>(temporalFilter)<<" parent filter = "<<temporalFilter->parent_filters[0]<<std::endl; 
     1435       if(temporalFilter->parent_filters[0]->tag) temporalFilter->tag=true; 
    14191436 
    14201437       it = temporalDataFilters.insert(std::make_pair(outFreq, temporalFilter)).first; 
     
    14521469 
    14531470       const bool detectMissingValues = (!detect_missing_value.isEmpty() && detect_missing_value == true); 
    1454        const bool buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true); 
     1471       bool buildWorkflowGraph = buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true); 
    14551472       std::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation, 
    14561473                                                                           CContext::getCurrent()->getCalendar()->getInitDate(), 
     
    14591476 
    14601477       selfReferenceFilter->connectOutput(temporalFilter, 0); 
    1461        if (buildWorkflowGraph) 
    1462  
    1463        { 
    1464          if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map <int, StdString>; 
    1465          if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map <StdString, vector <int> >; 
    1466          int filterOut = selfReferenceFilter->getFilterId(); 
    1467          int filterIn = (std::static_pointer_cast<COutputPin>(temporalFilter))->getFilterId(); 
    1468          (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterOut); 
    1469          (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterIn); 
    1470          (*CWorkflowGraph::mapFilters_ptr)[filterOut] = selfReferenceFilter->GetName(); 
    1471          (*CWorkflowGraph::mapFilters_ptr)[filterIn] = temporalFilter->GetName(); 
    1472          std::cout<<"CField::getSelfTemporalDataFilter (*CWorkflowGraph::mapFilters_ptr)["<<filterOut<<"] = "<<selfReferenceFilter->GetName()<<std::endl; 
    1473        } 
     1478       temporalFilter->output_field_id = this->getId(); 
     1479       temporalFilter->tag = buildWorkflowGraph; 
     1480       // std::cout<<"=====9============= output_field_id = "<<this->getId()<<" =========== tag="<<temporalFilter->tag<<std::endl; 
    14741481 
    14751482       return temporalFilter ; 
Note: See TracChangeset for help on using the changeset viewer.