Ignore:
Timestamp:
05/29/19 13:58:48 (5 years ago)
Author:
yushan
Message:

MARK: branch merged with trunk @1663. Generate one static graph for each output file

Location:
XIOS/dev/dev_trunk_omp/src/node
Files:
3 edited

Legend:

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

    r1669 r1670  
    11971197               if (buildWorkflowGraph) 
    11981198               { 
    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> >; 
     1199                 if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map< StdString, std::unordered_map <int, StdString> >; 
     1200                 if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map< StdString, std::unordered_map <StdString, vector <int> > >; 
    12011201                 int filterOut = filter->getFilterId(); 
    12021202                 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(); 
     1203                 (*CWorkflowGraph::mapFieldToFilters_ptr)[CWorkflowGraph::my_filename][this->getOId()].push_back(filterOut); 
     1204                 (*CWorkflowGraph::mapFieldToFilters_ptr)[CWorkflowGraph::my_filename][this->getOId()].push_back(filterIn); 
     1205                 (*CWorkflowGraph::mapFilters_ptr)[CWorkflowGraph::my_filename][filterOut] = filter->GetName(); 
     1206                 (*CWorkflowGraph::mapFilters_ptr)[CWorkflowGraph::my_filename][filterIn] = filters.second->GetName(); 
     1207                 std::cout<<"CField::buildFilterGraph1 filterIn["<<filterIn<< "] = "<<filters.second->GetName()<< std::endl; 
     1208                 std::cout<<"CField::buildFilterGraph1 filterOut["<<filterOut<< "] = "<<filter->GetName()<< std::endl; 
    12071209               } 
    12081210               filter = filters.second; 
     
    12321234            if (buildWorkflowGraph)  
    12331235            { 
    1234               if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map <int, StdString>; 
    1235               (*CWorkflowGraph::mapFilters_ptr)[instantDataFilter->getFilterId()] = instantDataFilter->GetName(); 
     1236              //CWorkflowGraph::my_filename = file->name; 
     1237              if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map< StdString, std::unordered_map <int, StdString> >; 
     1238              (*CWorkflowGraph::mapFilters_ptr)[CWorkflowGraph::my_filename][instantDataFilter->getFilterId()] = instantDataFilter->GetName(); 
     1239              std::cout<<"CField::buildFilterGraph1.else filter["<<instantDataFilter->getFilterId()<< "] = "<<instantDataFilter->GetName()<< std::endl; 
    12361240            }   
    12371241         } 
     
    12541258           if (buildWorkflowGraph) 
    12551259           { 
    1256              if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map <int, StdString>; 
    1257              if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map <StdString, vector <int> >; 
     1260             CWorkflowGraph::my_filename = file->name; 
     1261             if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map< StdString, std::unordered_map <int, StdString> >; 
     1262             if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map< StdString, std::unordered_map <StdString, vector <int> > >; 
    12581263             int filterOut = getTemporalDataFilter(gc, file->output_freq)->getFilterId(); 
    12591264             int filterIn = fileWriterFilter->getFilterId(); 
    1260              (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterOut); 
    1261              (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterIn); 
    1262              (*CWorkflowGraph::mapFilters_ptr)[filterOut] = "Temporal filter"; 
    1263              (*CWorkflowGraph::mapFilters_ptr)[filterIn] = fileWriterFilter->GetName(); 
    1264              std::cout<<"CField::buildFilterGraph this->getId() = "<<this->getId() <<" ; this->getOId() = "<<this->getOId()<< std::endl; 
     1265             (*CWorkflowGraph::mapFieldToFilters_ptr)[CWorkflowGraph::my_filename][this->getOId()].push_back(filterOut); 
     1266             (*CWorkflowGraph::mapFieldToFilters_ptr)[CWorkflowGraph::my_filename][this->getOId()].push_back(filterIn); 
     1267             (*CWorkflowGraph::mapFilters_ptr)[CWorkflowGraph::my_filename][filterOut] = "Temporal filter"; 
     1268             (*CWorkflowGraph::mapFilters_ptr)[CWorkflowGraph::my_filename][filterIn] = fileWriterFilter->GetName(); 
     1269             std::cout<<"CField::buildFilterGraph2 filterIn["<<filterIn<< "] = "<<fileWriterFilter->GetName()<< std::endl; 
     1270             std::cout<<"CField::buildFilterGraph2 filterOut["<<filterOut<< "] = "<<"Temporal filter"<< std::endl; 
    12651271           } 
    12661272         } 
     
    12701276   CATCH_DUMP_ATTR 
    12711277 
     1278   void CField::buildFilterGraph(CGarbageCollector& gc, bool enableOutput, StdString output_filename) 
     1279   TRY 
     1280   {      
     1281    CWorkflowGraph::my_filename = output_filename; 
     1282    if (!isReferenceSolvedAndTransformed) solveAllEnabledFieldsAndTransform(); 
     1283    if (!isGridChecked) checkGridOfEnabledFields(); 
     1284 
     1285     const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 
     1286     const bool buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true); 
     1287     const double defaultValue  = detectMissingValues ? default_value : (!default_value.isEmpty() ? default_value : 0.0); 
     1288 
     1289     CContext* context = CContext::getCurrent(); 
     1290     bool hasWriterServer = context->hasServer && !context->hasClient; 
     1291     bool hasIntermediateServer = context->hasServer && context->hasClient; 
     1292 
     1293     if (hasWriterServer) 
     1294     { 
     1295        if (!instantDataFilter) 
     1296          instantDataFilter = clientSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, false)); 
     1297 
     1298 
     1299       // If the field data is to be read by the client or/and written to a file 
     1300       if (enableOutput && !storeFilter && !fileWriterFilter) 
     1301       { 
     1302         if (file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write)) 
     1303         { 
     1304           fileServerWriterFilter = std::shared_ptr<CFileServerWriterFilter>(new CFileServerWriterFilter(gc, this)); 
     1305           instantDataFilter->connectOutput(fileServerWriterFilter, 0); 
     1306         } 
     1307       } 
     1308     } 
     1309     else if (hasIntermediateServer) 
     1310     { 
     1311       if (!instantDataFilter) 
     1312         instantDataFilter = clientSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, false, false)); 
     1313 
     1314             // If the field data is to be read by the client or/and written to a file 
     1315       if (enableOutput && !storeFilter && !fileWriterFilter) 
     1316       { 
     1317         if (file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write)) 
     1318         { 
     1319           fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this)); 
     1320           instantDataFilter->connectOutput(fileWriterFilter, 0); 
     1321         } 
     1322       } 
     1323     } 
     1324     else 
     1325     { 
     1326       // Start by building a filter which can provide the field's instant data 
     1327       if (!instantDataFilter) 
     1328       { 
     1329         // Check if we have an expression to parse 
     1330         if (hasExpression()) 
     1331         { 
     1332           boost::scoped_ptr<IFilterExprNode> expr(parseExpr(getExpression() + '\0')); 
     1333           std::shared_ptr<COutputPin> filter = expr->reduce(gc, *this); 
     1334 
     1335           // Check if a spatial transformation is needed 
     1336           if (!field_ref.isEmpty()) 
     1337           { 
     1338             CField* fieldRef = CField::get(field_ref); 
     1339             fieldRef->build_workflow_graph.setValue(buildWorkflowGraph); 
     1340             CGrid* gridRef = fieldRef->grid; 
     1341 
     1342             if (grid && grid != gridRef && grid->hasTransform()) 
     1343             { 
     1344               std::pair<std::shared_ptr<CFilter>, std::shared_ptr<CFilter> > filters = CSpatialTransformFilter::buildFilterGraph(gc, gridRef, grid, 
     1345                                                                                         detectMissingValues, defaultValue, buildWorkflowGraph); 
     1346 
     1347               filter->connectOutput(filters.first, 0); 
     1348 
     1349               if (buildWorkflowGraph) 
     1350               {  
     1351                 CWorkflowGraph::my_filename = output_filename; 
     1352                 if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map< StdString, std::unordered_map <int, StdString> >; 
     1353                 if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map< StdString, std::unordered_map <StdString, vector <int> > >; 
     1354                 int filterOut = filter->getFilterId(); 
     1355                 int filterIn = (std::static_pointer_cast<COutputPin>(filters.second))->getFilterId(); 
     1356                 (*CWorkflowGraph::mapFieldToFilters_ptr)[CWorkflowGraph::my_filename][this->getOId()].push_back(filterOut); 
     1357                 (*CWorkflowGraph::mapFieldToFilters_ptr)[CWorkflowGraph::my_filename][this->getOId()].push_back(filterIn); 
     1358                 (*CWorkflowGraph::mapFilters_ptr)[CWorkflowGraph::my_filename][filterOut] = filter->GetName(); 
     1359                 (*CWorkflowGraph::mapFilters_ptr)[CWorkflowGraph::my_filename][filterIn] = filters.second->GetName(); 
     1360                 std::cout<<"***CField::buildFilterGraph1 filterIn["<<filterIn<< "] = "<<filters.second->GetName()<< std::endl; 
     1361                 std::cout<<"***CField::buildFilterGraph1 filterOut["<<filterOut<< "] = "<<filter->GetName()<< std::endl; 
     1362               } 
     1363               filter = filters.second; 
     1364             } 
     1365           } 
     1366 
     1367           instantDataFilter = filter; 
     1368         } 
     1369         // Check if we have a reference on another field 
     1370         else if (!field_ref.isEmpty()) 
     1371         { 
     1372           CField::get(field_ref)->build_workflow_graph.setValue(buildWorkflowGraph); 
     1373           //instantDataFilter = getFieldReference2(gc, output_filename); 
     1374           instantDataFilter = getFieldReference(gc, output_filename); 
     1375         } 
     1376         // Check if the data is to be read from a file 
     1377         else if (file && !file->mode.isEmpty() && file->mode == CFile::mode_attr::read) 
     1378         { 
     1379           checkTimeAttributes(); 
     1380           instantDataFilter = serverSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, false, freq_offset, true, 
     1381                                                                                                       detectMissingValues, defaultValue, buildWorkflowGraph)); 
     1382         } 
     1383         else // The data might be passed from the model 
     1384         { 
     1385            if (check_if_active.isEmpty()) check_if_active = false;  
     1386            instantDataFilter = clientSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, false, true, NoneDu, false, 
     1387                                                                                                      detectMissingValues, defaultValue, buildWorkflowGraph)); 
     1388            if (buildWorkflowGraph)  
     1389            { 
     1390              CWorkflowGraph::my_filename = output_filename;//CWorkflowGraph::my_filename = file->name; 
     1391              printf("*** *** my_filename = %s\n", CWorkflowGraph::my_filename.c_str()); 
     1392              if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map< StdString, std::unordered_map <int, StdString> >; 
     1393              (*CWorkflowGraph::mapFilters_ptr)[CWorkflowGraph::my_filename][instantDataFilter->getFilterId()] = instantDataFilter->GetName(); 
     1394              std::cout<<"***CField::buildFilterGraph1.else filter["<<instantDataFilter->getFilterId()<< "] = "<<instantDataFilter->GetName()<< std::endl; 
     1395            }   
     1396         } 
     1397       } 
     1398 
     1399       // If the field data is to be read by the client or/and written to a file 
     1400       if (enableOutput && !storeFilter && !fileWriterFilter) 
     1401       { 
     1402         if (!read_access.isEmpty() && read_access) 
     1403         { 
     1404           storeFilter = std::shared_ptr<CStoreFilter>(new CStoreFilter(gc, CContext::getCurrent(), grid, 
     1405                                                                          detectMissingValues, defaultValue)); 
     1406           instantDataFilter->connectOutput(storeFilter, 0); 
     1407         } 
     1408 
     1409         if (file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write)) 
     1410         { 
     1411           fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this, buildWorkflowGraph)); 
     1412           getTemporalDataFilter(gc, file->output_freq)->connectOutput(fileWriterFilter, 0); 
     1413           if (buildWorkflowGraph) 
     1414           { 
     1415             CWorkflowGraph::my_filename = output_filename;//CWorkflowGraph::my_filename = file->name; 
     1416             if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map< StdString, std::unordered_map <int, StdString> >; 
     1417             if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map< StdString, std::unordered_map <StdString, vector <int> > >; 
     1418             int filterOut = getTemporalDataFilter(gc, file->output_freq)->getFilterId(); 
     1419             int filterIn = fileWriterFilter->getFilterId(); 
     1420             (*CWorkflowGraph::mapFieldToFilters_ptr)[CWorkflowGraph::my_filename][this->getOId()].push_back(filterOut); 
     1421             (*CWorkflowGraph::mapFieldToFilters_ptr)[CWorkflowGraph::my_filename][this->getOId()].push_back(filterIn); 
     1422             (*CWorkflowGraph::mapFilters_ptr)[CWorkflowGraph::my_filename][filterOut] = "Temporal filter"; 
     1423             (*CWorkflowGraph::mapFilters_ptr)[CWorkflowGraph::my_filename][filterIn] = fileWriterFilter->GetName(); 
     1424             std::cout<<"***CField::buildFilterGraph2 filterIn["<<filterIn<< "] = "<<fileWriterFilter->GetName()<< std::endl; 
     1425             std::cout<<"***CField::buildFilterGraph2 filterOut["<<filterOut<< "] = "<<"Temporal filter"<< std::endl; 
     1426           } 
     1427         } 
     1428       } 
     1429     } 
     1430   } 
     1431   CATCH_DUMP_ATTR 
    12721432   /*! 
    12731433    * Returns the filter needed to handle the field reference. 
     
    13051465     if (buildWorkflowGraph) 
    13061466     { 
    1307        if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map <int, StdString>; 
    1308        if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map <StdString, vector <int> >; 
     1467       CWorkflowGraph::my_filename = file->name; 
     1468       if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map<StdString, std::unordered_map <int, StdString> >; 
     1469       if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map< StdString, std::unordered_map <StdString, vector <int> > >;  
    13091470       int filterOut = fieldRef->instantDataFilter->getFilterId(); 
    13101471       int filterIn = (std::static_pointer_cast<COutputPin>(filters.first))->getFilterId(); 
    1311        (*CWorkflowGraph::mapFieldToFilters_ptr)[fieldRef->getOId()].push_back(filterOut); 
    1312        (*CWorkflowGraph::mapFieldToFilters_ptr)[fieldRef->getOId()].push_back(filterIn); 
    1313        (*CWorkflowGraph::mapFilters_ptr)[filterOut] = fieldRef->getInstantDataFilter()->GetName(); 
    1314        (*CWorkflowGraph::mapFilters_ptr)[filterIn] = filters.first->GetName(); 
     1472       (*CWorkflowGraph::mapFieldToFilters_ptr)[CWorkflowGraph::my_filename][fieldRef->getOId()].push_back(filterOut); 
     1473       (*CWorkflowGraph::mapFieldToFilters_ptr)[CWorkflowGraph::my_filename][fieldRef->getOId()].push_back(filterIn); 
     1474       (*CWorkflowGraph::mapFilters_ptr)[CWorkflowGraph::my_filename][filterOut] = fieldRef->getInstantDataFilter()->GetName(); 
     1475       (*CWorkflowGraph::mapFilters_ptr)[CWorkflowGraph::my_filename][filterIn] = filters.first->GetName(); 
     1476       std::cout<<"CField::getFieldReference filterIn["<<filterIn<< "] = "<<filters.first->GetName()<< std::endl; 
     1477       std::cout<<"CField::getFieldReference filterOut["<<filterOut<< "] = "<<fieldRef->getInstantDataFilter()->GetName()<< std::endl; 
    13151478     } 
    13161479     return filters.second; 
    13171480   } 
    13181481   CATCH_DUMP_ATTR 
    1319  
     1482   
     1483   std::shared_ptr<COutputPin> CField::getFieldReference(CGarbageCollector& gc, StdString output_filename) 
     1484   TRY 
     1485   { 
     1486     CWorkflowGraph::my_filename = output_filename; 
     1487     if (instantDataFilter || field_ref.isEmpty()) 
     1488       ERROR("COutputPin* CField::getFieldReference(CGarbageCollector& gc)", 
     1489             "Impossible to get the field reference for a field which has already been parsed or which does not have a field_ref."); 
     1490 
     1491     CField* fieldRef = CField::get(field_ref); 
     1492     //fieldRef->buildFilterGraph2(gc, false, output_filename); 
     1493     fieldRef->buildFilterGraph(gc, false, output_filename); 
     1494     bool buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true); 
     1495 
     1496     std::pair<std::shared_ptr<CFilter>, std::shared_ptr<CFilter> > filters; 
     1497     // Check if a spatial transformation is needed 
     1498     if (grid && grid != fieldRef->grid && grid->hasTransform()) 
     1499     {        
     1500       bool hasMissingValue = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 
     1501       double defaultValue  = hasMissingValue ? default_value : (!default_value.isEmpty() ? default_value : 0.0);                                 
     1502       filters = CSpatialTransformFilter::buildFilterGraph(gc, fieldRef->grid, grid, hasMissingValue, defaultValue, buildWorkflowGraph); 
     1503     } 
     1504     else 
     1505     { 
     1506       filters.first = filters.second = std::shared_ptr<CFilter>(new CPassThroughFilter(gc, buildWorkflowGraph)); 
     1507     } 
     1508 
     1509     fieldRef->getInstantDataFilter()->connectOutput(filters.first, 0); 
     1510 
     1511     if (buildWorkflowGraph) 
     1512     { 
     1513       CWorkflowGraph::my_filename = output_filename; 
     1514       if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map<StdString, std::unordered_map <int, StdString> >; 
     1515       if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map< StdString, std::unordered_map <StdString, vector <int> > >;  
     1516       int filterOut = fieldRef->instantDataFilter->getFilterId(); 
     1517       int filterIn = (std::static_pointer_cast<COutputPin>(filters.first))->getFilterId(); 
     1518       (*CWorkflowGraph::mapFieldToFilters_ptr)[CWorkflowGraph::my_filename][fieldRef->getOId()].push_back(filterOut); 
     1519       (*CWorkflowGraph::mapFieldToFilters_ptr)[CWorkflowGraph::my_filename][fieldRef->getOId()].push_back(filterIn); 
     1520       (*CWorkflowGraph::mapFilters_ptr)[CWorkflowGraph::my_filename][filterOut] = fieldRef->getInstantDataFilter()->GetName(); 
     1521       (*CWorkflowGraph::mapFilters_ptr)[CWorkflowGraph::my_filename][filterIn] = filters.first->GetName(); 
     1522       std::cout<<"CField::getFieldReference filterIn["<<filterIn<< "] = "<<filters.first->GetName()<< std::endl; 
     1523       std::cout<<"CField::getFieldReference filterOut["<<filterOut<< "] = "<<fieldRef->getInstantDataFilter()->GetName()<< std::endl; 
     1524     } 
     1525     return filters.second; 
     1526   } 
     1527   CATCH_DUMP_ATTR 
    13201528   /*! 
    13211529    * Returns the filter needed to handle a self reference in the field's expression. 
     
    14051613       if (buildWorkflowGraph) 
    14061614       { 
    1407          if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map <int, StdString>; 
    1408          if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map <StdString, vector <int> >; 
     1615         if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map< StdString, std::unordered_map <int, StdString> >; 
     1616         if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map<StdString, std::unordered_map <StdString, vector <int> > >; 
    14091617         int filterOut = instantDataFilter->getFilterId(); 
    14101618         int filterIn = (std::static_pointer_cast<COutputPin>(temporalFilter))->getFilterId(); 
    1411          (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterOut); 
    1412          (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterIn); 
    1413          (*CWorkflowGraph::mapFilters_ptr)[filterOut] = getInstantDataFilter()->GetName(); 
    1414          (*CWorkflowGraph::mapFilters_ptr)[filterIn] = temporalFilter->GetName(); 
     1619         (*CWorkflowGraph::mapFieldToFilters_ptr)[CWorkflowGraph::my_filename][this->getOId()].push_back(filterOut); 
     1620         (*CWorkflowGraph::mapFieldToFilters_ptr)[CWorkflowGraph::my_filename][this->getOId()].push_back(filterIn); 
     1621         (*CWorkflowGraph::mapFilters_ptr)[CWorkflowGraph::my_filename][filterOut] = getInstantDataFilter()->GetName(); 
     1622         (*CWorkflowGraph::mapFilters_ptr)[CWorkflowGraph::my_filename][filterIn] = temporalFilter->GetName(); 
     1623         std::cout<<"CField::getTemporalDataFilter filterIn["<<filterIn<< "] = "<<temporalFilter->GetName()<< std::endl; 
     1624         std::cout<<"CField::getTemporalDataFilter filterOut["<<filterOut<< "] = "<<getInstantDataFilter()->GetName()<< std::endl; 
    14151625       } 
    14161626 
     
    14591669 
    14601670       { 
    1461          if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map <int, StdString>; 
    1462          if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map <StdString, vector <int> >; 
     1671         if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map<StdString, std::unordered_map <int, StdString> >; 
     1672         if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map< StdString, std::unordered_map <StdString, vector <int> > >; 
    14631673         int filterOut = selfReferenceFilter->getFilterId(); 
    14641674         int filterIn = (std::static_pointer_cast<COutputPin>(temporalFilter))->getFilterId(); 
    1465          (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterOut); 
    1466          (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterIn); 
    1467          (*CWorkflowGraph::mapFilters_ptr)[filterOut] = selfReferenceFilter->GetName(); 
    1468          (*CWorkflowGraph::mapFilters_ptr)[filterIn] = temporalFilter->GetName(); 
     1675         (*CWorkflowGraph::mapFieldToFilters_ptr)[CWorkflowGraph::my_filename][this->getOId()].push_back(filterOut); 
     1676         (*CWorkflowGraph::mapFieldToFilters_ptr)[CWorkflowGraph::my_filename][this->getOId()].push_back(filterIn); 
     1677         (*CWorkflowGraph::mapFilters_ptr)[CWorkflowGraph::my_filename][filterOut] = selfReferenceFilter->GetName(); 
     1678         (*CWorkflowGraph::mapFilters_ptr)[CWorkflowGraph::my_filename][filterIn] = temporalFilter->GetName(); 
     1679         std::cout<<"CField::getSelfTemporalDataFilter filterIn["<<filterIn<< "] = "<<temporalFilter->GetName()<< std::endl; 
     1680         std::cout<<"CField::getSelfTemporalDataFilter filterOut["<<filterOut<< "] = "<<selfReferenceFilter->GetName()<< std::endl; 
    14691681       } 
    14701682 
     
    19932205   DEFINE_REF_FUNC(Field,field) 
    19942206} // namespace xios 
     2207 
  • XIOS/dev/dev_trunk_omp/src/node/field.hpp

    r1669 r1670  
    143143 
    144144         void buildFilterGraph(CGarbageCollector& gc, bool enableOutput); 
     145         void buildFilterGraph(CGarbageCollector& gc, bool enableOutput, StdString out_filename); 
    145146         size_t getGlobalWrittenSize(void) ; 
    146147          
    147148          
    148149         std::shared_ptr<COutputPin> getFieldReference(CGarbageCollector& gc); 
     150         std::shared_ptr<COutputPin> getFieldReference(CGarbageCollector& gc, StdString out_filename); 
    149151         std::shared_ptr<COutputPin> getSelfReference(CGarbageCollector& gc); 
    150152         std::shared_ptr<COutputPin> getTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq); 
     
    295297 
    296298#endif // __XIOS_CField__ 
     299 
  • XIOS/dev/dev_trunk_omp/src/node/file.cpp

    r1665 r1670  
    983983     for (int i = 0; i < size; ++i) 
    984984     { 
    985        this->enabledFields[i]->buildFilterGraph(gc, true); 
     985       //this->enabledFields[i]->buildFilterGraph(gc, true); 
     986       //this->enabledFields[i]->buildFilterGraph2(gc, true, this->name); 
     987      this->enabledFields[i]->buildFilterGraph(gc, true, this->name); 
    986988     } 
    987989   } 
Note: See TracChangeset for help on using the changeset viewer.