Changeset 2193 for XIOS


Ignore:
Timestamp:
07/22/21 14:05:58 (3 years ago)
Author:
yushan
Message:

workflow graph : enable unary and binary arithmetic filters

Location:
XIOS/dev/dev_ym/XIOS_COUPLING/src
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/binary_arithmetic_filter.cpp

    r804 r2193  
    11#include "binary_arithmetic_filter.hpp" 
     2#include "workflow_graph.hpp" 
    23 
    34namespace xios 
     
    910  { /* Nothing to do */ }; 
    1011 
     12  std::pair<int, int> CScalarFieldArithmeticFilter::buildGraph(std::vector<CDataPacketPtr> data) 
     13  { 
     14    bool building_graph = this->graphEnabled; 
     15    int unique_filter_id; 
     16    bool firstround = true; 
     17     
     18    if(building_graph) 
     19    { 
     20      if(!data[0]->graphPackage) 
     21      { 
     22        data[0]->graphPackage = new CGraphDataPackage; 
     23        data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; 
     24        data[0]->graphPackage->fromFilter = -1; 
     25      } 
     26 
     27      if(!CWorkflowGraph::mapHashFilterID_) CWorkflowGraph::mapHashFilterID_ = new std::unordered_map <size_t, int>; 
     28 
     29      size_t filterhash = std::hash<StdString>{}(this->graphPackage->inFields[0]->content+to_string(data[0]->timestamp)+this->graphPackage->inFields[0]->getId()); 
     30 
     31      // first round 
     32      if(CWorkflowGraph::mapHashFilterID_->find(filterhash) == CWorkflowGraph::mapHashFilterID_->end()) 
     33      { 
     34        this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); 
     35        unique_filter_id = this->graphPackage->filterId; 
     36        CWorkflowGraph::addNode("Arithmetic filter\\n ("+this->graphPackage->inFields[0]->content+")", 4, false, 0, data[0]);         
     37 
     38        CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]); 
     39        data[0]->graphPackage->fromFilter = this->graphPackage->filterId; 
     40        data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; 
     41        std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end()); 
     42 
     43        
     44        (*CWorkflowGraph::mapHashFilterID_)[filterhash] = unique_filter_id;  
     45         
     46      } 
     47      // not first round 
     48      else  
     49      { 
     50        unique_filter_id = (*CWorkflowGraph::mapHashFilterID_)[filterhash]; 
     51        if(data[0]->graphPackage->fromFilter != unique_filter_id) 
     52        { 
     53          CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, unique_filter_id, data[0]);   
     54        } 
     55      }   
     56    } 
     57 
     58    return std::make_pair(building_graph, unique_filter_id); 
     59  } 
     60 
    1161  CDataPacketPtr CScalarFieldArithmeticFilter::apply(std::vector<CDataPacketPtr> data) 
    1262  { 
     
    1565    packet->timestamp = data[0]->timestamp; 
    1666    packet->status = data[0]->status; 
     67     
     68    std::pair<int, int> graph = buildGraph(data); 
     69 
     70    if(std::get<0>(graph)) 
     71    {   
     72      packet->graphPackage = new CGraphDataPackage; 
     73      packet->graphPackage->fromFilter = std::get<1>(graph); 
     74      packet->graphPackage->currentField = this->graphPackage->inFields[0];  
     75    } 
    1776 
    1877    if (packet->status == CDataPacket::NO_ERROR) 
     
    2887  { /* Nothing to do */ }; 
    2988 
     89  std::pair<int, int> CFieldScalarArithmeticFilter::buildGraph(std::vector<CDataPacketPtr> data) 
     90  { 
     91    bool building_graph = this->graphEnabled; 
     92    int unique_filter_id; 
     93    bool firstround = true; 
     94 
     95    if(building_graph) 
     96    { 
     97      if(!data[0]->graphPackage) 
     98      { 
     99        data[0]->graphPackage = new CGraphDataPackage; 
     100        data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; 
     101        data[0]->graphPackage->fromFilter = -1; 
     102      } 
     103 
     104      if(!CWorkflowGraph::mapHashFilterID_) CWorkflowGraph::mapHashFilterID_ = new std::unordered_map <size_t, int>; 
     105 
     106      size_t filterhash = std::hash<StdString>{}(this->graphPackage->inFields[0]->content+to_string(data[0]->timestamp)+this->graphPackage->inFields[0]->getId()); 
     107 
     108      // first round 
     109      if(CWorkflowGraph::mapHashFilterID_->find(filterhash) == CWorkflowGraph::mapHashFilterID_->end()) 
     110      { 
     111        this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); 
     112        unique_filter_id = this->graphPackage->filterId; 
     113        CWorkflowGraph::addNode("Arithmetic filter\\n ("+this->graphPackage->inFields[0]->content+")", 4, false, 0, data[0]);         
     114 
     115        CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]); 
     116        data[0]->graphPackage->fromFilter = this->graphPackage->filterId; 
     117        data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; 
     118        std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end()); 
     119 
     120        
     121        (*CWorkflowGraph::mapHashFilterID_)[filterhash] = unique_filter_id;  
     122         
     123      } 
     124      // not first round 
     125      else  
     126      { 
     127        unique_filter_id = (*CWorkflowGraph::mapHashFilterID_)[filterhash]; 
     128        if(data[0]->graphPackage->fromFilter != unique_filter_id) 
     129        { 
     130          CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, unique_filter_id, data[0]);   
     131        } 
     132      }   
     133    } 
     134 
     135    return std::make_pair(building_graph, unique_filter_id); 
     136  } 
     137 
    30138  CDataPacketPtr CFieldScalarArithmeticFilter::apply(std::vector<CDataPacketPtr> data) 
    31139  { 
     
    35143    packet->status = data[0]->status; 
    36144 
     145    std::pair<int, int> graph = buildGraph(data); 
     146 
     147    if(std::get<0>(graph)) 
     148    {   
     149      packet->graphPackage = new CGraphDataPackage; 
     150      packet->graphPackage->fromFilter = std::get<1>(graph); 
     151      packet->graphPackage->currentField = this->graphPackage->inFields[0];  
     152    } 
     153 
    37154    if (packet->status == CDataPacket::NO_ERROR) 
    38155      packet->data.reference(op(data[0]->data, value)); 
     
    46163  { /* Nothing to do */ }; 
    47164 
     165  std::pair<int, int> CFieldFieldArithmeticFilter::buildGraph(std::vector<CDataPacketPtr> data) 
     166  { 
     167    bool building_graph = this->graphEnabled; 
     168    int unique_filter_id; 
     169    bool firstround = true; 
     170 
     171    if(building_graph) 
     172    { 
     173      if(!data[0]->graphPackage) 
     174      { 
     175        data[0]->graphPackage = new CGraphDataPackage; 
     176        data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; 
     177        data[0]->graphPackage->fromFilter = -1; 
     178      } 
     179      if(!data[1]->graphPackage) 
     180      { 
     181        data[1]->graphPackage = new CGraphDataPackage; 
     182        data[1]->graphPackage->currentField = this->graphPackage->inFields[0]; 
     183        data[1]->graphPackage->fromFilter = -1; 
     184      } 
     185 
     186      if(!CWorkflowGraph::mapHashFilterID_) CWorkflowGraph::mapHashFilterID_ = new std::unordered_map <size_t, int>; 
     187 
     188      size_t filterhash = std::hash<StdString>{}(this->graphPackage->inFields[0]->content+to_string(data[0]->timestamp)+this->graphPackage->inFields[0]->getId()); 
     189 
     190      // first round 
     191      if(CWorkflowGraph::mapHashFilterID_->find(filterhash) == CWorkflowGraph::mapHashFilterID_->end()) 
     192      { 
     193        this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); 
     194        unique_filter_id = this->graphPackage->filterId; 
     195        CWorkflowGraph::addNode("Arithmetic filter\\n ("+this->graphPackage->inFields[0]->content+")", 4, false, 0, data[0]);         
     196 
     197        CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]); 
     198        data[0]->graphPackage->fromFilter = this->graphPackage->filterId; 
     199        data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; 
     200 
     201        CWorkflowGraph::addEdge(data[1]->graphPackage->fromFilter, this->graphPackage->filterId, data[1]); 
     202        data[1]->graphPackage->fromFilter = this->graphPackage->filterId; 
     203        data[1]->graphPackage->currentField = this->graphPackage->inFields[0]; 
     204 
     205        std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end()); 
     206 
     207        (*CWorkflowGraph::mapHashFilterID_)[filterhash] = unique_filter_id;  
     208         
     209      } 
     210      // not first round 
     211      else  
     212      { 
     213        unique_filter_id = (*CWorkflowGraph::mapHashFilterID_)[filterhash]; 
     214        if(data[0]->graphPackage->fromFilter != unique_filter_id) 
     215        { 
     216          CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, unique_filter_id, data[0]);   
     217        } 
     218        if(data[1]->graphPackage->fromFilter != unique_filter_id) 
     219        { 
     220          CWorkflowGraph::addEdge(data[1]->graphPackage->fromFilter, unique_filter_id, data[1]);   
     221        } 
     222      }   
     223    } 
     224 
     225    return std::make_pair(building_graph, unique_filter_id); 
     226  } 
     227 
     228 
    48229  CDataPacketPtr CFieldFieldArithmeticFilter::apply(std::vector<CDataPacketPtr> data) 
    49230  { 
     
    51232    packet->date = data[0]->date; 
    52233    packet->timestamp = data[0]->timestamp; 
     234 
     235    std::pair<int, int> graph = buildGraph(data); 
     236 
     237    if(std::get<0>(graph)) 
     238    {   
     239      packet->graphPackage = new CGraphDataPackage; 
     240      packet->graphPackage->fromFilter = std::get<1>(graph); 
     241      packet->graphPackage->currentField = this->graphPackage->inFields[0];  
     242    } 
    53243 
    54244    if (data[0]->status != CDataPacket::NO_ERROR) 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/binary_arithmetic_filter.hpp

    r1542 r2193  
    3535       */ 
    3636      CDataPacketPtr virtual apply(std::vector<CDataPacketPtr> data); 
     37      std::pair<int, int> virtual buildGraph(std::vector<CDataPacketPtr> data); 
    3738  }; // class CScalarFieldArithmeticFilter 
    3839 
     
    6364       */ 
    6465      CDataPacketPtr virtual apply(std::vector<CDataPacketPtr> data); 
     66      std::pair<int, int> virtual buildGraph(std::vector<CDataPacketPtr> data); 
    6567  }; // class CFieldScalarArithmeticFilter 
    6668 
     
    8991       */ 
    9092      CDataPacketPtr virtual apply(std::vector<CDataPacketPtr> data); 
     93      std::pair<int, int> virtual buildGraph(std::vector<CDataPacketPtr> data); 
     94       
    9195  }; // class CFieldFieldArithmeticFilter 
    9296} // namespace xios 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/temporal_filter.cpp

    r2143 r2193  
    3030    , isFirstOperation(true) 
    3131    , graphCycleCompleted(true) 
     32    , temporalOperation(opId) 
    3233  { 
     34  } 
     35 
     36  std::string CTemporalFilter::getTemporalOperation() 
     37  { 
     38    return this->temporalOperation; 
    3339  } 
    3440 
     
    4551      {   
    4652        this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); 
    47         CWorkflowGraph::addNode("Temporal filter", 3, false, 0, data[0]); 
     53        CWorkflowGraph::addNode("Temporal filter \\n("+getTemporalOperation()+")", 3, false, 0, data[0]); 
    4854        graphCycleCompleted = false; 
    4955      } 
     
    5460      CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]); 
    5561      data[0]->graphPackage->fromFilter = this->graphPackage->filterId; 
    56       this->graphPackage->sourceFilterIds.push_back(data[0]->graphPackage->fromFilter);  
     62      // this->graphPackage->sourceFilterIds.push_back(data[0]->graphPackage->fromFilter);  
    5763      data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; 
    5864      std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end()); 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/temporal_filter.hpp

    r2143 r2193  
    5555      bool virtual isDataExpected(const CDate& date) const; 
    5656      bool graphCycleCompleted; 
     57      std::string getTemporalOperation(); 
    5758 
    5859    private: 
     
    7374//      CDate nextOperationDate; //!< The date of the next operation 
    7475      bool isFirstOperation; //!< True before the first operation was been computed 
     76      const std::string temporalOperation; 
    7577  }; // class CTemporalFilter 
    7678} // namespace xios 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/unary_arithmetic_filter.cpp

    r643 r2193  
    11#include "unary_arithmetic_filter.hpp" 
     2#include "workflow_graph.hpp" 
     3 
    24 
    35namespace xios 
     
    810  { /* Nothing to do */ }; 
    911 
     12  std::pair<int, int> CUnaryArithmeticFilter::buildGraph(std::vector<CDataPacketPtr> data) 
     13  { 
     14    bool building_graph = this->graphEnabled; 
     15    int unique_filter_id; 
     16    bool firstround = true; 
     17     
     18    if(building_graph) 
     19    { 
     20      if(!data[0]->graphPackage) 
     21      { 
     22        data[0]->graphPackage = new CGraphDataPackage; 
     23        data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; 
     24        data[0]->graphPackage->fromFilter = -1; 
     25      } 
     26 
     27      if(!CWorkflowGraph::mapHashFilterID_) CWorkflowGraph::mapHashFilterID_ = new std::unordered_map <size_t, int>; 
     28 
     29      size_t filterhash = std::hash<StdString>{}(this->graphPackage->inFields[0]->content+to_string(data[0]->timestamp)+this->graphPackage->inFields[0]->getId()); 
     30 
     31      // first round 
     32      if(CWorkflowGraph::mapHashFilterID_->find(filterhash) == CWorkflowGraph::mapHashFilterID_->end()) 
     33      { 
     34        this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); 
     35        unique_filter_id = this->graphPackage->filterId; 
     36        CWorkflowGraph::addNode("Arithmetic filter\\n ("+this->graphPackage->inFields[0]->content+")", 4, false, 0, data[0]);         
     37 
     38        CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]); 
     39        data[0]->graphPackage->fromFilter = this->graphPackage->filterId; 
     40        data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; 
     41        std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end()); 
     42 
     43        
     44        (*CWorkflowGraph::mapHashFilterID_)[filterhash] = unique_filter_id;  
     45         
     46      } 
     47      // not first round 
     48      else  
     49      { 
     50        unique_filter_id = (*CWorkflowGraph::mapHashFilterID_)[filterhash]; 
     51        if(data[0]->graphPackage->fromFilter != unique_filter_id) 
     52        { 
     53          CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, unique_filter_id, data[0]);   
     54        } 
     55      }   
     56    } 
     57 
     58    return std::make_pair(building_graph, unique_filter_id); 
     59  } 
     60 
     61 
    1062  CDataPacketPtr CUnaryArithmeticFilter::apply(std::vector<CDataPacketPtr> data) 
    1163  { 
     
    1567    packet->status = data[0]->status; 
    1668 
     69    std::pair<int, int> graph = buildGraph(data); 
     70 
     71    if(std::get<0>(graph)) 
     72    {   
     73      packet->graphPackage = new CGraphDataPackage; 
     74      packet->graphPackage->fromFilter = std::get<1>(graph); 
     75      packet->graphPackage->currentField = this->graphPackage->inFields[0];  
     76    } 
     77 
    1778    if (packet->status == CDataPacket::NO_ERROR) 
    1879      packet->data.reference(op(data[0]->data)); 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/unary_arithmetic_filter.hpp

    r642 r2193  
    3434       */ 
    3535      CDataPacketPtr virtual apply(std::vector<CDataPacketPtr> data); 
     36      std::pair<int, int> virtual buildGraph(std::vector<CDataPacketPtr> data); 
    3637  }; // class CUnaryArithmeticFilter 
    3738} // namespace xios 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/graph_package.hpp

    r2141 r2193  
    1212    StdString contextId; 
    1313    bool show; 
     14    std::pair< Time, Time > graphInterval; 
    1415 
    1516    CGraphPackage(): show(true) {} 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/node/field.cpp

    r2182 r2193  
    559559  { 
    560560    if (buildWorkflowGraphDone_) return true ; 
     561 
    561562     
    562563    const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 
    563564    const double defaultValue = detectMissingValues ? default_value : (!default_value.isEmpty() ? default_value : 0.0); 
    564565    bool buildGraph_ = !build_workflow_graph.isEmpty() && build_workflow_graph == true ; 
    565     info(100)<<"=== Workflow Graph === field id="<<this->getId()<<" build_workflow_graph="<<buildGraph_<<std::endl; 
     566 
    566567    if (!inputFilter) inputFilter = std::shared_ptr<CPassThroughFilter>(new CPassThroughFilter(gc));  
    567       
     568     
    568569    if (hasDirectFieldReference()) 
    569570    { 
    570571      CField* fieldRef = getDirectFieldReference(); 
    571       info(100)<<"=== Workflow Graph === fieldRef id="<<fieldRef->getId()<<std::endl; 
    572  
     572       
    573573      //------ build_workflow_graph start 
    574574      if(buildGraph_) 
     
    580580        this->build_workflow_graph.set(fieldRef->build_workflow_graph); 
    581581        buildGraph_ = !build_workflow_graph.isEmpty() && build_workflow_graph == true ; 
    582         info(100)<<"=== Workflow Graph === field id="<<this->getId()<<" updated build_workflow_graph="<<buildGraph_<<std::endl; 
    583582      } 
    584583 
    585584       
    586       if(buildGraph_) this->build_workflow_graph.set(build_workflow_graph); 
     585      // if(buildGraph_) this->build_workflow_graph.set(build_workflow_graph); 
    587586      //------ build_workflow_graph end 
    588587 
     
    604603      boost::scoped_ptr<IFilterExprNode> expr(parseExpr(getExpression() + '\0')); 
    605604      filterExpr = expr->reduce(gc, *this); 
     605       
     606       
    606607      if (!filterExpr) return false ; // workflow graph cannot be built at this stage 
    607608    } 
     
    636637      if(buildGraph_)  
    637638      { 
    638         info(100)<<"=== Workflow Graph === field "<<this->getId()<<" calls a transformation filter 2 ============== "<<getDirectFieldReference()->getInstantDataFilter()<<" _ "<<inputFilter<<std::endl; 
    639639        inputFilter->graphEnabled=true; 
    640640        inputFilter->graphPackage = new CGraphPackage; 
     
    648648      if (hasExpression()) 
    649649      { 
    650          if (filterExpr) lastFilter=filterExpr ; 
     650         if (filterExpr)  
     651         { 
     652           lastFilter=filterExpr ; 
     653         } 
    651654      } 
    652655       
     
    716719    if(buildGraph_)  
    717720    { 
    718       info(100)<<"=== Workflow Graph === field "<<this->getId()<<" calls a connectToFileServer  ============== "<<getTemporalDataFilter(gc, fileOut_->output_freq)<<" _ "<<clientToServerStoreFilter_<<std::endl; 
    719721      clientToServerStoreFilter_->graphPackage = new CGraphPackage; 
    720722      clientToServerStoreFilter_->graphEnabled = true; 
     
    731733    if(buildGraph_)  
    732734    { 
    733       info(100)<<"=== Workflow Graph === field "<<this->getId()<<" calls a connectToCouplerOut  ============== "<<instantDataFilter<<" _ "<<clientToServerStoreFilter_<<std::endl; 
    734735      clientToServerStoreFilter_->graphPackage = new CGraphPackage; 
    735736      clientToServerStoreFilter_->graphEnabled = true; 
     
    753754    if(buildGraph_ )  
    754755    { 
    755       info(100)<<"=== Workflow Graph === field "<<this->getId()<<" calls a connectToModelInput  ============== "<<modelToClientSourceFilter_<<" _ "<<inputFilter<<" ***** "<<std::endl; 
    756756      modelToClientSourceFilter_->graphPackage = new CGraphPackage; 
    757757      modelToClientSourceFilter_->graphEnabled = true; 
     
    770770    if(buildGraph_) 
    771771    { 
    772       info(100)<<"=== Workflow Graph === field "<<this->getId()<<" calls a connectToClientInput  ============== "<<serverFromClientSourceFilter_ << " _ "<<inputFilter<<" ***** "<<std::endl; 
    773772      serverFromClientSourceFilter_->graphPackage = new CGraphPackage; 
    774773      serverFromClientSourceFilter_->graphEnabled = true; 
     
    789788    if(buildGraph_) 
    790789    { 
    791       info(100)<<"=== Workflow Graph === field "<<this->getId()<<" calls a connectToServerInput  ============== "<<clientFromServerSourceFilter_ << " _ "<<inputFilter<<std::endl; 
    792790      clientFromServerSourceFilter_->graphPackage = new CGraphPackage; 
    793791      clientFromServerSourceFilter_->graphEnabled = true; 
     
    810808    if(buildGraph_) 
    811809    { 
    812       info(100)<<"=== Workflow Graph === field "<<this->getId()<<" calls a connectToCouplerIn  ============== "<<clientFromClientSourceFilter_ << " _ "<<inputFilter<<std::endl; 
    813810      clientFromClientSourceFilter_->graphPackage = new CGraphPackage; 
    814811      clientFromClientSourceFilter_->graphEnabled = true; 
     
    827824    if(buildGraph_) 
    828825    { 
    829       info(100)<<"=== Workflow Graph === field "<<this->getId()<<" calls a connectToFileWriter  ============== "<<instantDataFilter << " _ "<<fileWriterStoreFilter_<<std::endl; 
    830826      fileWriterStoreFilter_->graphPackage = new CGraphPackage; 
    831827      fileWriterStoreFilter_->graphEnabled = true; 
     
    844840    if(buildGraph_) 
    845841    { 
    846       info(100)<<"=== Workflow Graph === field "<<this->getId()<<" calls a connectToFileReader  ============== "<<fileReaderSourceFilter_ << " _ "<<inputFilter<<std::endl; 
    847842      fileReaderSourceFilter_->graphPackage = new CGraphPackage; 
    848843      fileReaderSourceFilter_->graphEnabled = true; 
     
    862857    if(buildGraph_) 
    863858    { 
    864       info(100)<<"=== Workflow Graph === field "<<this->getId()<<" calls a connectToModelOutput  ============== "<<instantDataFilter << " _ "<<clientToModelStoreFilter_<<std::endl; 
    865859      clientToModelStoreFilter_->graphPackage = new CGraphPackage; 
    866860      clientToModelStoreFilter_->graphEnabled = true; 
     
    878872    if(buildGraph_) 
    879873    { 
    880       info(100)<<"=== Workflow Graph === field "<<this->getId()<<" calls a connectToServerToClient  ============== "<<instantDataFilter << " _ "<<serverToClientStoreFilter_<<std::endl; 
    881874      serverToClientStoreFilter_->graphPackage = new CGraphPackage; 
    882875      serverToClientStoreFilter_->graphEnabled = true; 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/parse_expr/filter_expr_node.cpp

    r1869 r2193  
    4141 
    4242        bool ret=field->buildWorkflowGraph(gc); 
     43        if(field->build_workflow_graph) thisField.build_workflow_graph.set(field->build_workflow_graph); 
    4344        if (ret) outputPin = field->getInstantDataFilter(); // if dependency is complete build the graph other return nullptr 
     45         
    4446      } 
    4547      else ERROR("boost::shared_ptr<COutputPin> CFilterFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const", 
     
    110112    if (ret) ret->connectOutput(filter, 0); 
    111113    else filter.reset() ; 
     114     
     115    const bool buildGraph_ = !(thisField.build_workflow_graph.isEmpty()) && thisField.build_workflow_graph == true ; 
     116    if(buildGraph_) 
     117    { 
     118      filter->graphPackage = new CGraphPackage; 
     119      filter->graphEnabled = true; 
     120      filter->graphPackage->inFields.push_back(&thisField); 
     121    } 
     122 
    112123    return filter; 
    113124  } 
     
    130141    if (ret) ret->connectOutput(filter, 0); 
    131142    else filter.reset() ; 
     143     
     144    const bool buildGraph_ = !(thisField.build_workflow_graph.isEmpty()) && thisField.build_workflow_graph == true ; 
     145    if(buildGraph_) 
     146    { 
     147      filter->graphPackage = new CGraphPackage; 
     148      filter->graphEnabled = true; 
     149      filter->graphPackage->inFields.push_back(&thisField); 
     150    } 
     151 
    132152    return filter; 
    133153  } 
     
    149169    if (ret) ret->connectOutput(filter, 0); 
    150170    else filter.reset() ; 
     171     
     172    const bool buildGraph_ = !(thisField.build_workflow_graph.isEmpty()) && thisField.build_workflow_graph == true ; 
     173    if(buildGraph_) 
     174    { 
     175      filter->graphPackage = new CGraphPackage; 
     176      filter->graphEnabled = true; 
     177      filter->graphPackage->inFields.push_back(&thisField); 
     178    } 
    151179    return filter; 
    152180  } 
     
    173201    } 
    174202    else filter.reset() ; 
     203 
     204    const bool buildGraph_ = !(thisField.build_workflow_graph.isEmpty()) && thisField.build_workflow_graph == true ; 
     205    if(buildGraph_) 
     206    { 
     207      filter->graphPackage = new CGraphPackage; 
     208      filter->graphEnabled = true; 
     209      filter->graphPackage->inFields.push_back(&thisField); 
     210    } 
     211 
    175212    return filter; 
    176213  } 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/workflow_graph.cpp

    r2141 r2193  
    1717  bool CWorkflowGraph::build_begin = false; 
    1818 
     19  std::unordered_map <size_t, int> *CWorkflowGraph::mapHashFilterID_ = 0; 
     20  std::unordered_map <size_t, int> *CWorkflowGraph::mapHashFilterID_srv_ = 0; 
     21 
    1922 
    2023  CWorkflowGraph::CWorkflowGraph() 
     
    2932    for(int i=0; i<vectorOfNodes_->size(); i++) 
    3033    { 
     34      std::cout<<"Node["<<i<<"] is "<<(*vectorOfNodes_)[i].filter_name<<std::endl; 
    3135      info(100)<<"Node["<<i<<"] is "<<(*vectorOfNodes_)[i].filter_name<<std::endl; 
    3236    } 
     
    3438    for(int i=0; i<vectorOfEdges_->size(); i++) 
    3539    { 
     40      std::cout<<"Edge["<<i<<"] from "<<(*vectorOfEdges_)[i].from<<" to "<<(*vectorOfEdges_)[i].to<<std::endl; 
    3641      info(100)<<"Edge["<<i<<"] from "<<(*vectorOfEdges_)[i].from<<" to "<<(*vectorOfEdges_)[i].to<<std::endl; 
    3742    } 
     
    8590    if(CXios::isClient) 
    8691    { 
     92      // if(vectorOfEdges_&&vectorOfNodes_) outputWorkflowGraph_client_stdout(); 
     93      // std::cout<<"Trying to add an edge from "<<from<<" to "<<to<<std::endl; 
    8794      if(!vectorOfEdges_) vectorOfEdges_ = new std::vector<graph_edge_object>; 
    8895      std::string currentContextId = CContext::getCurrent()->getId(); 
     
    158165    if(CXios::isClient) 
    159166    { 
     167      //if(vectorOfEdges_&&vectorOfNodes_) outputWorkflowGraph_client_stdout(); 
     168      // std::cout<<"Trying to add a node naming "<<filterName<<std::endl; 
    160169      if(!vectorOfNodes_) vectorOfNodes_ = new std::vector<graph_node_object>; 
    161170      if(!vectorOfContexts_) vectorOfContexts_ = new std::vector<StdString>; 
     171      if(!mapHashFilterID_) mapHashFilterID_ = new std::unordered_map <size_t, int>; 
     172 
    162173      std::string currentContextId = CContext::getCurrent()->getId(); 
    163174      if ( std::find(vectorOfContexts_->begin(), vectorOfContexts_->end(), currentContextId) == vectorOfContexts_->end() ) 
     
    172183      node_obj.date = packet->date; 
    173184      node_obj.timestamp = packet->timestamp; 
     185       
    174186      for(int i=0; i<vectorOfContexts_->size(); i++) 
    175187      { 
     
    181193        } 
    182194      }     
     195       
    183196      node_obj.attributes = packet->graphPackage->currentField->recordXiosAttributes(); 
    184  
     197       
    185198      vectorOfNodes_->push_back(node_obj); 
    186       //info(100)<<"****************** Add node "<<filterName<<std::endl;    
    187199    } 
    188200    else 
     
    190202      if(!vectorOfNodes_srv_) vectorOfNodes_srv_ = new std::vector<graph_node_object>; 
    191203      if(!vectorOfContexts_srv_) vectorOfContexts_srv_ = new std::vector<StdString>; 
     204      if(!mapHashFilterID_srv_) mapHashFilterID_srv_ = new std::unordered_map <size_t, int>; 
     205 
    192206      std::string currentContextId = CContext::getCurrent()->getId(); 
    193207      if ( std::find(vectorOfContexts_srv_->begin(), vectorOfContexts_srv_->end(), currentContextId) == vectorOfContexts_srv_->end() ) 
     
    213227 
    214228      vectorOfNodes_srv_->push_back(node_obj); 
    215       //info(100)<<"******************Server side : Add node "<<filterName<<std::endl;  
    216229    } 
    217230 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/workflow_graph.hpp

    r2141 r2193  
    7878      static std::vector<StdString> *vectorOfContexts_srv_;  
    7979 
     80      static std::unordered_map <size_t, int> *mapHashFilterID_; 
     81      static std::unordered_map <size_t, int> *mapHashFilterID_srv_; 
     82 
    8083      // these variables are not yet used 
    8184      static bool clientGraphBuilt; 
Note: See TracChangeset for help on using the changeset viewer.