- Timestamp:
- 09/25/17 10:59:29 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/XIOS_DEV_CMIP6/src/filter/spatial_transform_filter.cpp
r1260 r1275 27 27 size_t inputCount = 1 + (auxInputs.empty() ? 0 : auxInputs.size()); 28 28 double defaultValue = (hasMissingValue) ? std::numeric_limits<double>::quiet_NaN() : 0.0; 29 boost::shared_ptr<CSpatialTransformFilter> filter(new CSpatialTransformFilter(gc, engine, defaultValue, inputCount)); 30 29 30 31 const CGridTransformationSelector::ListAlgoType& algoList = gridTransformation->getAlgoList() ; 32 CGridTransformationSelector::ListAlgoType::const_iterator it ; 33 34 bool isSpatialTemporal=false ; 35 for (it=algoList.begin();it!=algoList.end();++it) if (it->second.first == TRANS_TEMPORAL_SPLITTING) isSpatialTemporal=true ; 36 37 boost::shared_ptr<CSpatialTransformFilter> filter ; 38 if( isSpatialTemporal) filter = boost::shared_ptr<CSpatialTransformFilter>(new CSpatialTemporalFilter(gc, engine, gridTransformation, defaultValue, inputCount)); 39 else filter = boost::shared_ptr<CSpatialTransformFilter>(new CSpatialTransformFilter(gc, engine, defaultValue, inputCount)); 40 41 31 42 if (!lastFilter) 32 43 lastFilter = filter; … … 56 67 onOutputReady(outputPacket); 57 68 } 69 70 71 72 73 74 CSpatialTemporalFilter::CSpatialTemporalFilter(CGarbageCollector& gc, CSpatialTransformFilterEngine* engine, CGridTransformation* gridTransformation, double outputValue, size_t inputSlotsCount) 75 : CSpatialTransformFilter(gc, engine, outputValue, inputSlotsCount), record(0) 76 { 77 const CGridTransformationSelector::ListAlgoType& algoList = gridTransformation->getAlgoList() ; 78 CGridTransformationSelector::ListAlgoType::const_iterator it ; 79 80 int pos ; 81 for (it=algoList.begin();it!=algoList.end();++it) 82 if (it->second.first == TRANS_TEMPORAL_SPLITTING) 83 { 84 pos=it->first ; 85 if (pos < algoList.size()-1) 86 ERROR("SpatialTemporalFilter::CSpatialTemporalFilter(CGarbageCollector& gc, CSpatialTransformFilterEngine* engine, CGridTransformation* gridTransformation, double outputValue, size_t inputSlotsCount))", 87 "temporal splitting operation must be the last of whole transformation on same grid") ; 88 } 89 90 CGrid* grid=gridTransformation->getGridDestination() ; 91 92 CAxis* axis = grid->getAxis(gridTransformation->getElementPositionInGridDst2AxisPosition().find(pos)->second) ; 93 94 nrecords = axis->index.numElements() ; 95 } 96 97 98 void CSpatialTemporalFilter::onInputReady(std::vector<CDataPacketPtr> data) 99 { 100 CSpatialTransformFilterEngine* spaceFilter = static_cast<CSpatialTransformFilterEngine*>(engine); 101 CDataPacketPtr outputPacket = spaceFilter->applyFilter(data, outputDefaultValue); 102 103 if (outputPacket) 104 { 105 size_t nelements=outputPacket->data.numElements() ; 106 if (!tmpData.numElements()) 107 { 108 tmpData.resize(nelements); 109 tmpData=outputDefaultValue ; 110 } 111 112 nelements/=nrecords ; 113 size_t offset=nelements*record ; 114 for(size_t i=0;i<nelements;++i) tmpData(i+offset) = outputPacket->data(i) ; 115 116 record ++ ; 117 if (record==nrecords) 118 { 119 record=0 ; 120 CDataPacketPtr packet = CDataPacketPtr(new CDataPacket); 121 packet->date = data[0]->date; 122 packet->timestamp = data[0]->timestamp; 123 packet->status = data[0]->status; 124 packet->data.resize(tmpData.numElements()); 125 packet->data = tmpData; 126 onOutputReady(packet); 127 tmpData.resize(0) ; 128 } 129 } 130 } 131 58 132 59 133 CSpatialTransformFilterEngine::CSpatialTransformFilterEngine(CGridTransformation* gridTransformation)
Note: See TracChangeset
for help on using the changeset viewer.