/*! \file domain_algorithm_generate_rectilinear.hpp \author Ha NGUYEN \since 31 Aug 2015 \date 01 Sep 2015 \brief Algorithm for automatic generation of rectilinear domain. */ #ifndef __XIOS_DOMAIN_ALGORITHM_GENERATE_RECTILINEAR_HPP__ #define __XIOS_DOMAIN_ALGORITHM_GENERATE_RECTILINEAR_HPP__ #include "algorithm_transformation_no_data_modification.hpp" #include "transformation.hpp" namespace xios { class CGrid; class CDomain; class CGenerateRectilinearDomain; /*! \class CDomainAlgorithmGenerateRectilinear Generate a rectilinear or CURVILINEAR domain and fill in necessary its attributes automatically A new rectilinear (or CURVILINEAR) domain will also be distributed automatically among the processes. The number of processes is deduced from the distribution of the grid source. */ class CDomainAlgorithmGenerateRectilinear : public CAlgorithmTransformationNoDataModification { public: CDomainAlgorithmGenerateRectilinear(bool isSource, CDomain* domainDestination, CDomain* domainSource, CGrid* gridDest, CGrid* gridSource, CGenerateRectilinearDomain* zoomDomain); virtual ~CDomainAlgorithmGenerateRectilinear() {} static bool registerTrans(); virtual bool isGenerateTransformation(void) { return true ;} virtual StdString getAlgoName() {return "\\ngenerate_rectilinear_domain";} protected: void computeIndexSourceMapping_(const std::vector* >& dataAuxInputs); private: void computeDistributionGridSource(CGrid* gridSrc); void computeDistributionGridDestination(CGrid* gridDest); void fillInAttributesDomainDestination(); public: static shared_ptr 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); private: int nbDomainDistributedPart_; //! Number of local domain. CDomain* domainDest_ ; static bool dummyRegistered_; }; } #endif // __XIOS_DOMAIN_ALGORITHM_GENERATE_RECTILINEAR_HPP__