source: XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.hpp @ 2122

Last change on this file since 2122 was 2122, checked in by ymipsl, 3 years ago

Improve axis interpolate feature :
introduce : coordinate_src and coordinate_dst feature :

  • level -> pressure
  • pressure -> pressure

YM

  • Property svn:executable set to *
File size: 3.0 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 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 coordinateSrc_; // pressure src
47  StdString coordinateDest_; // pressure dst
48  bool hasCoordinate_=false ;
49  bool hasCoordinateSrc_=false ;
50  bool hasCoordinateDest_=false ;
51
52  CAxis* axisSrc_=nullptr ;
53  CAxis* axisDest_=nullptr;
54  size_t ngloSrc_ ;
55  size_t nDest_ ;
56  vector<double> srcCoordinate_  ; // src axis value
57  vector<double> destCoordinate_ ; // dst axis value
58
59public:
60  static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
61                                                CTransformation<CAxis>* transformation,
62                                                int elementPositionInGrid,
63                                                std::map<int, int>& elementPositionInGridSrc2ScalarPosition,
64                                                std::map<int, int>& elementPositionInGridSrc2AxisPosition,
65                                                std::map<int, int>& elementPositionInGridSrc2DomainPosition,
66                                                std::map<int, int>& elementPositionInGridDst2ScalarPosition,
67                                                std::map<int, int>& elementPositionInGridDst2AxisPosition,
68                                                std::map<int, int>& elementPositionInGridDst2DomainPosition);
69  static bool dummyRegistered_;
70};
71
72}
73
74#endif // __XIOS_AXIS_ALGORITHM_INTERPOLATE_HPP__
Note: See TracBrowser for help on using the repository browser.