/*! \file domain_algorithm_redistribute.cpp \brief Algorithm for redistribute a domain. */ #include "domain_algorithm_redistribute.hpp" #include "redistribute_domain.hpp" #include "domain.hpp" #include "grid.hpp" #include "grid_transformation_factory_impl.hpp" namespace xios { shared_ptr CDomainAlgorithmRedistribute::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) TRY { std::vector domainListDestP = gridDst->getDomains(); std::vector domainListSrcP = gridSrc->getDomains(); CRedistributeDomain* redistributeDomain = dynamic_cast (transformation); int domainDstIndex = elementPositionInGridDst2DomainPosition[elementPositionInGrid]; int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid]; return make_shared(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], redistributeDomain); } CATCH bool CDomainAlgorithmRedistribute::dummyRegistered_ = CDomainAlgorithmRedistribute::registerTrans(); bool CDomainAlgorithmRedistribute::registerTrans() TRY { return CGridTransformationFactory::registerTransformation(TRANS_REDISTRIBUTE_DOMAIN, create); } CATCH CDomainAlgorithmRedistribute::CDomainAlgorithmRedistribute(bool isSource, CDomain* domainDestination, CDomain* domainSource, CRedistributeDomain* redistributeDomain) : CAlgorithmTransformationTransfer(isSource) TRY { domainDestination->checkAttributes() ; } CATCH }