/*! \file axis_algorithm_interpolate.hpp \author Ha NGUYEN \since 23 June 2015 \date 23 June 2015 \brief Algorithm for interpolation on an axis. */ #ifndef __XIOS_AXIS_ALGORITHM_INTERPOLATE_COORDINATE_HPP__ #define __XIOS_AXIS_ALGORITHM_INTERPOLATE_COORDINATE_HPP__ #include "algorithm_transformation_transfer.hpp" #include "transformation.hpp" namespace xios { class CAxis; class CGrid; class CInterpolateAxis; class CTransformFilter; /*! \class CAxisAlgorithmInterpolateCoordinate Implementing interpolation on axis The values on axis source are assumed monotonic */ class CAxisAlgorithmInterpolateCoordinate : public CAlgorithmTransformationTransfer { public: CAxisAlgorithmInterpolateCoordinate(bool isSource, CAxis* axisDestination, CAxis* axisSource, CInterpolateAxis* interpAxis); virtual ~CAxisAlgorithmInterpolateCoordinate() {} virtual vector getAuxFieldId(void) ; virtual void apply(int dimBefore, int dimAfter, const CArray& dataIn, const vector>& auxDataIn, CArray& dataOut) ; static bool registerTrans(); virtual CTransformFilter* createTransformFilter(CGarbageCollector& gc, CGridAlgorithm* algo, bool detectMissingValues, double defaultValue) ; private: void computeInterp(int nsrc, vector& srcCoordinate, vector& srcValue, vector& srcIndex, int ndst, vector& dstCoordinate, vector& dstValue, vector& dstIndex) ; // Interpolation order int order_; StdString coordinate_; bool hasCoordinate_=false ; CAxis* axisSrc_=nullptr ; CAxis* axisDest_=nullptr; size_t ngloSrc_ ; size_t nDest_ ; vector destCoordinate_ ; public: static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc, CTransformation* transformation, int elementPositionInGrid, std::map& elementPositionInGridSrc2ScalarPosition, std::map& elementPositionInGridSrc2AxisPosition, std::map& elementPositionInGridSrc2DomainPosition, std::map& elementPositionInGridDst2ScalarPosition, std::map& elementPositionInGridDst2AxisPosition, std::map& elementPositionInGridDst2DomainPosition); static bool dummyRegistered_; }; } #endif // __XIOS_AXIS_ALGORITHM_INTERPOLATE_HPP__