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

Last change on this file since 2030 was 2030, checked in by yushan, 6 months ago

Graph intermediate commit to a tmp branch.

  • Property svn:executable set to *
File size: 2.8 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 StdString getAlgoName() {return "\\ninterpolate_axis";}
38  virtual CTransformFilter* createTransformFilter(CGarbageCollector& gc, CGridAlgorithm* algo, bool detectMissingValues, double defaultValue) ;
39 
40private:
41  void computeInterp(int nsrc, vector<double>& srcCoordinate, vector<double>& srcValue, vector<int>& srcIndex,
42                     int ndst, vector<double>& dstCoordinate, vector<double>& dstValue, vector<int>& dstIndex) ;
43
44  // Interpolation order
45  int order_;
46  StdString coordinate_;
47  bool hasCoordinate_=false ;
48
49  CAxis* axisSrc_=nullptr ;
50  CAxis* axisDest_=nullptr;
51  size_t ngloSrc_ ;
52  size_t nDest_ ;
53  vector<double> destCoordinate_ ;
54
55public:
56  static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
57                                                CTransformation<CAxis>* transformation,
58                                                int elementPositionInGrid,
59                                                std::map<int, int>& elementPositionInGridSrc2ScalarPosition,
60                                                std::map<int, int>& elementPositionInGridSrc2AxisPosition,
61                                                std::map<int, int>& elementPositionInGridSrc2DomainPosition,
62                                                std::map<int, int>& elementPositionInGridDst2ScalarPosition,
63                                                std::map<int, int>& elementPositionInGridDst2AxisPosition,
64                                                std::map<int, int>& elementPositionInGridDst2DomainPosition);
65  static bool dummyRegistered_;
66};
67
68}
69
70#endif // __XIOS_AXIS_ALGORITHM_INTERPOLATE_HPP__
Note: See TracBrowser for help on using the repository browser.