Changeset 2195 for XIOS


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

workflow graph : enable temporal splitting filter

Location:
XIOS/dev/dev_ym/XIOS_COUPLING/src/filter
Files:
3 edited

Legend:

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

    r2193 r2195  
    6666 
    6767  } 
     68   
    6869  CDataPacketPtr CTemporalFilter::apply(std::vector<CDataPacketPtr> data) 
    6970  { 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/temporal_transform_filter.cpp

    r2011 r2195  
    11#include "temporal_transform_filter.hpp" 
     2#include "workflow_graph.hpp" 
    23 
    34namespace xios 
     
    56 
    67  CTemporalTransformFilter::CTemporalTransformFilter(CGarbageCollector& gc, int slots, CGridAlgorithm* algo, int nrecords, bool detectMissingValues, double defaultValue) 
    7   : CTransformFilter(gc, slots, algo, detectMissingValues, defaultValue), nrecords_(nrecords) 
     8  : CTransformFilter(gc, slots, algo, detectMissingValues, defaultValue), nrecords_(nrecords), graphCycleCompleted(true) 
    89  { 
     10  } 
     11 
     12  void CTemporalTransformFilter::buildWorkflowGraph(std::vector<CDataPacketPtr> data) 
     13  { 
     14    if(this->graphEnabled ) 
     15    { 
     16      if(!data[0]->graphPackage) 
     17      { 
     18        data[0]->graphPackage = new CGraphDataPackage; 
     19      } 
     20       
     21      if(graphCycleCompleted) 
     22      {   
     23        this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); 
     24        CWorkflowGraph::addNode("Temporal splitting filter", 7, false, 0, data[0]); 
     25        graphCycleCompleted = false; 
     26      } 
     27       
     28      data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; 
     29      std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end()); 
     30       
     31      CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]); 
     32      data[0]->graphPackage->fromFilter = this->graphPackage->filterId; 
     33      data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; 
     34      std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end()); 
     35    } 
    936 
    1037  } 
    11  
     38   
    1239  CDataPacketPtr CTemporalTransformFilter::apply(std::vector<CDataPacketPtr> data) 
    1340  { 
    1441    if (data[0]->status == CDataPacket::NO_ERROR) 
    1542    { 
     43      buildWorkflowGraph(data); 
    1644      if (record_==0) tmpData_.resize(nrecords_) ; 
    1745      algorithm_->apply(data[0]->data, tmpData_[record_]); 
     
    2755        packet->status = data[0]->status; 
    2856        packet->data.resize(size) ; 
     57        packet->graphPackage = data[0]->graphPackage; 
    2958        double* out = packet->data.dataFirst() ; 
    3059        for(auto& it : tmpData_)  
     
    3665        tmpData_.clear() ; 
    3766        record_=0 ; 
     67        graphCycleCompleted = true; 
    3868        return packet ; 
    3969      } 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/temporal_transform_filter.hpp

    r2011 r2195  
    2121      */ 
    2222      CDataPacketPtr virtual apply(std::vector<CDataPacketPtr> data) ; 
     23      void buildWorkflowGraph(std::vector<CDataPacketPtr> data); 
     24      bool graphCycleCompleted; 
    2325//      void apply(const CArray<double, 1>& dataSrc, CArray<double,1>& dataDest); 
    2426 
Note: See TracChangeset for help on using the changeset viewer.