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

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

temporal commit for merging graph into XIOS_coupling

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