source: XIOS/dev/dev_trunk_graph/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.hpp @ 2019

Last change on this file since 2019 was 2019, checked in by yushan, 3 years ago

Graph intermedia commit to a tmp branch

  • Property svn:executable set to *
File size: 2.7 KB
Line 
1/*!
2   \file axis_algorithm_interpolate.hpp
3   \author Ha NGUYEN
4   \since 23 June 2015
5   \date 23 June 2015
6
7   \brief Algorithm for interpolation on an axis.
8 */
9#ifndef __XIOS_AXIS_ALGORITHM_INTERPOLATE_COORDINATE_HPP__
10#define __XIOS_AXIS_ALGORITHM_INTERPOLATE_COORDINATE_HPP__
11
12#include "algorithm_transformation_transfer.hpp"
13#include "transformation.hpp"
14
15namespace xios {
16
17class CAxis;
18class CGrid;
19class CInterpolateAxis;
20class CTransformFilter;
21
22/*!
23  \class CAxisAlgorithmInterpolateCoordinate
24  Implementing interpolation on axis
25  The values on axis source are assumed monotonic
26*/
27class CAxisAlgorithmInterpolateCoordinate : public CAlgorithmTransformationTransfer
28{
29public:
30  CAxisAlgorithmInterpolateCoordinate(bool isSource, CAxis* axisDestination, CAxis* axisSource, CInterpolateAxis* interpAxis);
31
32  virtual ~CAxisAlgorithmInterpolateCoordinate() {}
33  virtual vector<string> getAuxFieldId(void)  ;
34  virtual void apply(int dimBefore, int dimAfter, const CArray<double,1>& dataIn, 
35                     const vector<CArray<double,1>>& auxDataIn, CArray<double,1>& dataOut) ;
36  static bool registerTrans();
37  virtual CTransformFilter* createTransformFilter(CGarbageCollector& gc, CGridAlgorithm* algo, bool detectMissingValues, double defaultValue) ;
38 
39private:
40  void computeInterp(int nsrc, vector<double>& srcCoordinate, vector<double>& srcValue, vector<int>& srcIndex,
41                     int ndst, vector<double>& dstCoordinate, vector<double>& dstValue, vector<int>& dstIndex) ;
42
43  // Interpolation order
44  int order_;
45  StdString coordinate_;
46  bool hasCoordinate_=false ;
47
48  CAxis* axisSrc_=nullptr ;
49  CAxis* axisDest_=nullptr;
50  size_t ngloSrc_ ;
51  size_t nDest_ ;
52  vector<double> destCoordinate_ ;
53
54public:
55  static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
56                                                CTransformation<CAxis>* transformation,
57                                                int elementPositionInGrid,
58                                                std::map<int, int>& elementPositionInGridSrc2ScalarPosition,
59                                                std::map<int, int>& elementPositionInGridSrc2AxisPosition,
60                                                std::map<int, int>& elementPositionInGridSrc2DomainPosition,
61                                                std::map<int, int>& elementPositionInGridDst2ScalarPosition,
62                                                std::map<int, int>& elementPositionInGridDst2AxisPosition,
63                                                std::map<int, int>& elementPositionInGridDst2DomainPosition);
64  static bool dummyRegistered_;
65};
66
67}
68
69#endif // __XIOS_AXIS_ALGORITHM_INTERPOLATE_HPP__
Note: See TracBrowser for help on using the repository browser.