/*! \file scalar_algorithm_redistribute.cpp \brief Algorithm for redistribute a scalar. */ #include "scalar_algorithm_redistribute.hpp" #include "redistribute_scalar.hpp" #include "scalar.hpp" #include "grid.hpp" #include "grid_transformation_factory_impl.hpp" namespace xios { shared_ptr CScalarAlgorithmRedistribute::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 scalarListDestP = gridDst->getScalars(); std::vector scalarListSrcP = gridSrc->getScalars(); CRedistributeScalar* redistributeScalar = dynamic_cast (transformation); int scalarDstIndex = elementPositionInGridDst2ScalarPosition[elementPositionInGrid]; int scalarSrcIndex = elementPositionInGridSrc2ScalarPosition[elementPositionInGrid]; return make_shared(isSource, scalarListDestP[scalarDstIndex], scalarListSrcP[scalarSrcIndex], redistributeScalar); } CATCH bool CScalarAlgorithmRedistribute::dummyRegistered_ = CScalarAlgorithmRedistribute::registerTrans(); bool CScalarAlgorithmRedistribute::registerTrans() TRY { return CGridTransformationFactory::registerTransformation(TRANS_REDISTRIBUTE_SCALAR, create); } CATCH CScalarAlgorithmRedistribute::CScalarAlgorithmRedistribute(bool isSource, CScalar* scalarDestination, CScalar* scalarSource, CRedistributeScalar* redistributeScalar) : CAlgorithmTransformationTransfer(isSource) TRY { scalarDestination->checkAttributes() ; } CATCH }