1 | /*! |
---|
2 | \file axis_algorithm_temporal_splitting.cpp |
---|
3 | |
---|
4 | \brief Algorithm to split scalar into axis by temporal accumulation |
---|
5 | */ |
---|
6 | #include "axis_algorithm_temporal_splitting.hpp" |
---|
7 | #include "temporal_splitting.hpp" |
---|
8 | #include "axis.hpp" |
---|
9 | #include "scalar.hpp" |
---|
10 | #include "grid.hpp" |
---|
11 | #include "grid_transformation_factory_impl.hpp" |
---|
12 | #include "temporal_transform_filter.hpp" |
---|
13 | |
---|
14 | namespace xios { |
---|
15 | shared_ptr<CGenericAlgorithmTransformation> CAxisAlgorithmTemporalSplitting::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, |
---|
16 | CTransformation<CAxis>* transformation, |
---|
17 | int elementPositionInGrid, |
---|
18 | std::map<int, int>& elementPositionInGridSrc2ScalarPosition, |
---|
19 | std::map<int, int>& elementPositionInGridSrc2AxisPosition, |
---|
20 | std::map<int, int>& elementPositionInGridSrc2DomainPosition, |
---|
21 | std::map<int, int>& elementPositionInGridDst2ScalarPosition, |
---|
22 | std::map<int, int>& elementPositionInGridDst2AxisPosition, |
---|
23 | std::map<int, int>& elementPositionInGridDst2DomainPosition) |
---|
24 | TRY |
---|
25 | { |
---|
26 | std::vector<CAxis*> axisListDestP = gridDst->getAxis(); |
---|
27 | std::vector<CScalar*> scalarListSrcP = gridSrc->getScalars(); |
---|
28 | |
---|
29 | CTemporalSplitting* temporalSplitting = dynamic_cast<CTemporalSplitting*> (transformation); |
---|
30 | int axisDstIndex = elementPositionInGridDst2AxisPosition[elementPositionInGrid]; |
---|
31 | int scalarSrcIndex = elementPositionInGridSrc2ScalarPosition[elementPositionInGrid]; |
---|
32 | |
---|
33 | return make_shared<CAxisAlgorithmTemporalSplitting>(isSource, axisListDestP[axisDstIndex], scalarListSrcP[scalarSrcIndex], temporalSplitting); |
---|
34 | } |
---|
35 | CATCH |
---|
36 | |
---|
37 | bool CAxisAlgorithmTemporalSplitting::dummyRegistered_ = CAxisAlgorithmTemporalSplitting::registerTrans(); |
---|
38 | bool CAxisAlgorithmTemporalSplitting::registerTrans() |
---|
39 | TRY |
---|
40 | { |
---|
41 | return CGridTransformationFactory<CAxis>::registerTransformation(TRANS_TEMPORAL_SPLITTING, create); |
---|
42 | } |
---|
43 | CATCH |
---|
44 | |
---|
45 | CAxisAlgorithmTemporalSplitting::CAxisAlgorithmTemporalSplitting(bool isSource, CAxis* axisDestination, CScalar* scalarSource, CTemporalSplitting* algo) |
---|
46 | : CAlgorithmTransformationNoDataModification(isSource) |
---|
47 | { |
---|
48 | nrecords_ = axisDestination->n_glo ; // also axis must not be distributed, make more test later |
---|
49 | } |
---|
50 | |
---|
51 | CTransformFilter* CAxisAlgorithmTemporalSplitting::createTransformFilter(CGarbageCollector& gc, shared_ptr<CGridAlgorithm> algo, bool detectMissingValues, double defaultValue) |
---|
52 | { |
---|
53 | return new CTemporalTransformFilter(gc, 1, algo, nrecords_, detectMissingValues, defaultValue) ; |
---|
54 | } |
---|
55 | |
---|
56 | CAxisAlgorithmTemporalSplitting::~CAxisAlgorithmTemporalSplitting() |
---|
57 | { |
---|
58 | } |
---|
59 | |
---|
60 | |
---|
61 | } |
---|