- Timestamp:
- 03/22/18 10:43:20 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/branch_openmp/src/filter/spatial_transform_filter.cpp
r1328 r1460 4 4 #include "context.hpp" 5 5 #include "context_client.hpp" 6 #include "timer.hpp" 6 7 using namespace ep_lib; 7 8 … … 29 30 size_t inputCount = 1 + (auxInputs.empty() ? 0 : auxInputs.size()); 30 31 double defaultValue = (hasMissingValue) ? std::numeric_limits<double>::quiet_NaN() : 0.0; 31 boost::shared_ptr<CSpatialTransformFilter> filter(new CSpatialTransformFilter(gc, engine, defaultValue, inputCount)); 32 32 33 34 const CGridTransformationSelector::ListAlgoType& algoList = gridTransformation->getAlgoList() ; 35 CGridTransformationSelector::ListAlgoType::const_iterator it ; 36 37 bool isSpatialTemporal=false ; 38 for (it=algoList.begin();it!=algoList.end();++it) if (it->second.first == TRANS_TEMPORAL_SPLITTING) isSpatialTemporal=true ; 39 40 boost::shared_ptr<CSpatialTransformFilter> filter ; 41 if( isSpatialTemporal) filter = boost::shared_ptr<CSpatialTransformFilter>(new CSpatialTemporalFilter(gc, engine, gridTransformation, defaultValue, inputCount)); 42 else filter = boost::shared_ptr<CSpatialTransformFilter>(new CSpatialTransformFilter(gc, engine, defaultValue, inputCount)); 43 44 33 45 if (!lastFilter) 34 46 lastFilter = filter; … … 58 70 onOutputReady(outputPacket); 59 71 } 72 73 74 75 76 77 CSpatialTemporalFilter::CSpatialTemporalFilter(CGarbageCollector& gc, CSpatialTransformFilterEngine* engine, CGridTransformation* gridTransformation, double outputValue, size_t inputSlotsCount) 78 : CSpatialTransformFilter(gc, engine, outputValue, inputSlotsCount), record(0) 79 { 80 const CGridTransformationSelector::ListAlgoType& algoList = gridTransformation->getAlgoList() ; 81 CGridTransformationSelector::ListAlgoType::const_iterator it ; 82 83 int pos ; 84 for (it=algoList.begin();it!=algoList.end();++it) 85 if (it->second.first == TRANS_TEMPORAL_SPLITTING) 86 { 87 pos=it->first ; 88 if (pos < algoList.size()-1) 89 ERROR("SpatialTemporalFilter::CSpatialTemporalFilter(CGarbageCollector& gc, CSpatialTransformFilterEngine* engine, CGridTransformation* gridTransformation, double outputValue, size_t inputSlotsCount))", 90 "temporal splitting operation must be the last of whole transformation on same grid") ; 91 } 92 93 CGrid* grid=gridTransformation->getGridDestination() ; 94 95 CAxis* axis = grid->getAxis(gridTransformation->getElementPositionInGridDst2AxisPosition().find(pos)->second) ; 96 97 nrecords = axis->index.numElements() ; 98 } 99 100 101 void CSpatialTemporalFilter::onInputReady(std::vector<CDataPacketPtr> data) 102 { 103 CSpatialTransformFilterEngine* spaceFilter = static_cast<CSpatialTransformFilterEngine*>(engine); 104 CDataPacketPtr outputPacket = spaceFilter->applyFilter(data, outputDefaultValue); 105 106 if (outputPacket) 107 { 108 size_t nelements=outputPacket->data.numElements() ; 109 if (!tmpData.numElements()) 110 { 111 tmpData.resize(nelements); 112 tmpData=outputDefaultValue ; 113 } 114 115 nelements/=nrecords ; 116 size_t offset=nelements*record ; 117 for(size_t i=0;i<nelements;++i) tmpData(i+offset) = outputPacket->data(i) ; 118 119 record ++ ; 120 if (record==nrecords) 121 { 122 record=0 ; 123 CDataPacketPtr packet = CDataPacketPtr(new CDataPacket); 124 packet->date = data[0]->date; 125 packet->timestamp = data[0]->timestamp; 126 packet->status = data[0]->status; 127 packet->data.resize(tmpData.numElements()); 128 packet->data = tmpData; 129 onOutputReady(packet); 130 tmpData.resize(0) ; 131 } 132 } 133 } 134 60 135 61 136 CSpatialTransformFilterEngine::CSpatialTransformFilterEngine(CGridTransformation* gridTransformation) … … 122 197 void CSpatialTransformFilterEngine::apply(const CArray<double, 1>& dataSrc, CArray<double,1>& dataDest) 123 198 { 199 CTimer::get("CSpatialTransformFilterEngine::apply").resume(); 200 124 201 CContextClient* client = CContext::getCurrent()->client; 125 202 … … 235 312 236 313 dataDest = dataCurrentDest; 314 315 CTimer::get("CSpatialTransformFilterEngine::apply").suspend() ; 237 316 } 238 317 } // namespace xios
Note: See TracChangeset
for help on using the changeset viewer.