source: XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/temporal_transform_filter.cpp @ 2010

Last change on this file since 2010 was 2007, checked in by ymipsl, 3 years ago
  • fix some problem in transformation
  • implement new temporal splitting transformation

YM

  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 1.5 KB
Line 
1#include "temporal_transform_filter.hpp"
2
3namespace xios
4{
5
6  CTemporalTransformFilter::CTemporalTransformFilter(CGarbageCollector& gc, CGridAlgorithm* algo, int nrecords, bool detectMissingValues, double defaultValue)
7  : CTransformFilter(gc, algo, detectMissingValues, defaultValue), nrecords_(nrecords)
8  {
9
10  }
11
12  CDataPacketPtr CTemporalTransformFilter::apply(std::vector<CDataPacketPtr> data)
13  {
14    if (data[0]->status == CDataPacket::NO_ERROR)
15    {
16      if (record_==0) tmpData_.resize(nrecords_) ;
17      algorithm_->apply(data[0]->data, tmpData_[record_]);
18      record_++ ;
19      if (record_==nrecords_)
20      {
21        size_t size=0 ;
22        for(auto& it : tmpData_) size += it.numElements() ;
23        // for now, no auxilliairy field
24        CDataPacketPtr packet(new CDataPacket);
25        packet->date = data[0]->date;
26        packet->timestamp = data[0]->timestamp;
27        packet->status = data[0]->status;
28        packet->data.resize(size) ;
29        double* out = packet->data.dataFirst() ;
30        for(auto& it : tmpData_) 
31        {
32          size = it.numElements() ; 
33          double* tmp = it.dataFirst() ;
34          for(size_t i=0 ; i<size ; i++, out++, tmp++) *out=*tmp ;   
35        }
36        tmpData_.clear() ;
37        record_=0 ;
38        return packet ;
39      }
40      else return nullptr ;
41    }
42    else // error
43    {
44      CDataPacketPtr packet(new CDataPacket);
45      packet->date = data[0]->date;
46      packet->timestamp = data[0]->timestamp;
47      packet->status = data[0]->status;
48      return packet ;
49    }   
50  }
51}
Note: See TracBrowser for help on using the repository browser.