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

Last change on this file since 2328 was 2328, checked in by jderouillat, 2 years ago

Set extrapolation as an option (set by default to true) in axis interpolation using the coordinate attribute

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