/*! \file axis_algorithm_zoom.hpp \brief Algorithm for zooming an axis. */ #ifndef __XIOS_AXIS_ALGORITHM_ZOOM_HPP__ #define __XIOS_AXIS_ALGORITHM_ZOOM_HPP__ #include "algorithm_transformation_transfer.hpp" #include "transformation.hpp" namespace xios { class CAxis; class CZoomAxis; /*! \class CAxisAlgorithmZoom Implementing zoom on axis A zoomed region can be considered as region that isn't masked. Only this zoomed region is zoomed to write on Netcdf. */ class CAxisAlgorithmZoom : public CAlgorithmTransformationTransfer { public: CAxisAlgorithmZoom(bool isSource, CAxis* axisDestination, CAxis* axisSource, CZoomAxis* zoomAxis); virtual ~CAxisAlgorithmZoom() {} static bool registerTrans(); private: private: //! Global zoom begin on axis StdSize zoomBegin_; //! Global zoom end on axis StdSize zoomEnd_; //! Global zoom size on axis StdSize zoomN_; std::vector zoomIndex_; private: CAxis* axisSrc_; CAxis* axisDest_; 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_ZOOM_HPP__