source: XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_temporal_splitting.cpp @ 1301

Last change on this file since 1301 was 1275, checked in by ymipsl, 7 years ago

implement diurnal cycle transformation taken as a grid tranformation : scalar -> axis

YM

  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 3.1 KB
Line 
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
13namespace xios {
14CGenericAlgorithmTransformation* CAxisAlgorithmTemporalSplitting::create(CGrid* gridDst, CGrid* gridSrc,
15                                                                     CTransformation<CAxis>* 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{
24  std::vector<CAxis*> axisListDestP = gridDst->getAxis();
25  std::vector<CScalar*> scalarListSrcP = gridSrc->getScalars();
26
27  CTemporalSplitting* temporalSplitting = dynamic_cast<CTemporalSplitting*> (transformation);
28  int axisDstIndex = elementPositionInGridDst2AxisPosition[elementPositionInGrid];
29  int scalarSrcIndex = elementPositionInGridSrc2ScalarPosition[elementPositionInGrid];
30
31  return (new CAxisAlgorithmTemporalSplitting(axisListDestP[axisDstIndex], scalarListSrcP[scalarSrcIndex], temporalSplitting));
32}
33
34bool CAxisAlgorithmTemporalSplitting::registerTrans()
35{
36  CGridTransformationFactory<CAxis>::registerTransformation(TRANS_TEMPORAL_SPLITTING, create);
37}
38
39
40CAxisAlgorithmTemporalSplitting::CAxisAlgorithmTemporalSplitting(CAxis* axisDestination, CScalar* scalarSource, CTemporalSplitting* algo)
41 : CAxisAlgorithmTransformation(axisDestination, scalarSource)
42{
43
44}
45
46
47CAxisAlgorithmTemporalSplitting::~CAxisAlgorithmTemporalSplitting()
48{
49}
50
51void CAxisAlgorithmTemporalSplitting::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs)
52{
53  this->transformationMapping_.resize(1);
54  this->transformationWeight_.resize(1);
55
56  TransformationIndexMap& transMap = this->transformationMapping_[0];
57  TransformationWeightMap& transWeight = this->transformationWeight_[0];
58
59  CArray<int,1>& axisDstIndex = axisDest_->index;
60
61  int nbAxisIdx = axisDstIndex.numElements();
62  for (int idxAxis = 0; idxAxis < nbAxisIdx; ++idxAxis)
63  {
64    int globalAxisIdx = axisDstIndex(idxAxis);
65    if (idxAxis==0)
66    {
67      transMap[globalAxisIdx].resize(1);
68      transWeight[globalAxisIdx].resize(1);
69      transMap[globalAxisIdx][0] = 0 ;
70      transWeight[globalAxisIdx][0] = 1.0 ;
71    }
72  }
73}
74
75}
Note: See TracBrowser for help on using the repository browser.