/*! \file domain_algorithm_expand.hpp \author Ha NGUYEN \since 08 Aug 2016 \date 08 Aug 2016 \brief Algorithm for expanding an domain. */ #ifndef __XIOS_DOMAIN_ALGORITHM_EXPAND_HPP__ #define __XIOS_DOMAIN_ALGORITHM_EXPAND_HPP__ #include "algorithm_transformation_transfer.hpp" #include "transformation.hpp" namespace xios { class CDomain; class CExpandDomain; /*! \class CDomainAlgorithmExpand */ class CDomainAlgorithmExpand : public CAlgorithmTransformationTransfer { public: CDomainAlgorithmExpand(bool isSource, CDomain* domainDestination, CDomain* domainSource, CExpandDomain* expandDomain); virtual ~CDomainAlgorithmExpand() {} static bool registerTrans(); virtual StdString getAlgoName() {return "\\nexpand_domain";} protected: bool isXPeriodic_; // Flag to determine the periodicity of expansion (only for rectilinear) bool isYPeriodic_; // Flag to determine the periodicity of expansion (only for rectilinear) protected: void expandDomainEdgeConnectivity(CDomain* domainDestination, CDomain* domainSource); void expandDomainNodeConnectivity(CDomain* domainDestination, CDomain* domainSource); void updateRectilinearDomainAttributes(CDomain* domainDestination, CDomain* domainSource, CArray& neighborsDomainSrc); void updateUnstructuredDomainAttributes(CDomain* domainDestination, CDomain* domainSource, CArray& neighborsDomainSrc); 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); static bool dummyRegistered_; }; } #endif // __XIOS_DOMAIN_ALGORITHM_EXPAND_HPP__