source: XIOS3/dev/XIOS_ATTACHED/src/transformation/scalar_algorithm/scalar_algorithm_redistribute.cpp @ 2460

Last change on this file since 2460 was 2460, checked in by ymipsl, 17 months ago

Squeletton to had new transformations : redistribute_domain, redistribute_axis, redistribute_scalar

YM

  • Property svn:executable set to *
File size: 2.5 KB
Line 
1/*!
2   \file scalar_algorithm_redistribute.cpp
3   \brief Algorithm for redistribute a scalar.
4 */
5#include "scalar_algorithm_redistribute.hpp"
6#include "redistribute_scalar.hpp"
7#include "scalar.hpp"
8#include "grid.hpp"
9#include "grid_transformation_factory_impl.hpp"
10
11namespace xios
12{
13
14  shared_ptr<CGenericAlgorithmTransformation> CScalarAlgorithmRedistribute::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
15                                                               CTransformation<CScalar>* transformation,
16                                                               int elementPositionInGrid,
17                                                               std::map<int, int>& elementPositionInGridSrc2ScalarPosition,
18                                                               std::map<int, int>& elementPositionInGridSrc2AxisPosition,
19                                                               std::map<int, int>& elementPositionInGridSrc2DomainPosition, 
20                                                               std::map<int, int>& elementPositionInGridDst2ScalarPosition,
21                                                               std::map<int, int>& elementPositionInGridDst2AxisPosition,
22                                                               std::map<int, int>& elementPositionInGridDst2DomainPosition)
23  TRY
24  {
25    std::vector<CScalar*> scalarListDestP = gridDst->getScalars();
26    std::vector<CScalar*> scalarListSrcP  = gridSrc->getScalars();
27
28    CRedistributeScalar* redistributeScalar = dynamic_cast<CRedistributeScalar*> (transformation);
29    int scalarDstIndex = elementPositionInGridDst2ScalarPosition[elementPositionInGrid];
30    int scalarSrcIndex = elementPositionInGridSrc2ScalarPosition[elementPositionInGrid];
31
32    return make_shared<CScalarAlgorithmRedistribute>(isSource, scalarListDestP[scalarDstIndex], scalarListSrcP[scalarSrcIndex], redistributeScalar);
33  }
34  CATCH
35
36  bool CScalarAlgorithmRedistribute::dummyRegistered_ = CScalarAlgorithmRedistribute::registerTrans();
37  bool CScalarAlgorithmRedistribute::registerTrans()
38  TRY
39  {
40    return CGridTransformationFactory<CScalar>::registerTransformation(TRANS_REDISTRIBUTE_SCALAR, create);
41  }
42  CATCH
43
44  CScalarAlgorithmRedistribute::CScalarAlgorithmRedistribute(bool isSource, CScalar* scalarDestination, CScalar* scalarSource, CRedistributeScalar* redistributeScalar)
45  : CAlgorithmTransformationTransfer(isSource)
46  TRY
47  {
48
49
50    scalarDestination->checkAttributes() ;
51  }
52  CATCH
53
54
55}
Note: See TracBrowser for help on using the repository browser.