source: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_axis_to_scalar.cpp @ 2011

Last change on this file since 2011 was 2011, checked in by ymipsl, 3 years ago
  • bug fix when createing mask on server side when overlapping grid
  • implement axis interpolation on pressure coordinate
  • big cleaning in transformation

YM

File size: 3.7 KB
Line 
1#include "extract_axis_to_scalar.hpp"
2#include "scalar_algorithm_extract_axis.hpp"
3
4#include "type.hpp"
5#include "axis.hpp"
6#include "scalar.hpp"
7
8namespace xios {
9
10  /// ////////////////////// Définitions ////////////////////// ///
11
12  CExtractAxisToScalar::CExtractAxisToScalar(void)
13    : CObjectTemplate<CExtractAxisToScalar>(), CExtractAxisToScalarAttributes(), CTransformation<CScalar>()
14  { /* Ne rien faire de plus */ }
15
16  CExtractAxisToScalar::CExtractAxisToScalar(const StdString & id)
17    : CObjectTemplate<CExtractAxisToScalar>(id), CExtractAxisToScalarAttributes(), CTransformation<CScalar>()
18  { /* Ne rien faire de plus */ }
19
20  CExtractAxisToScalar::~CExtractAxisToScalar(void)
21  {}
22
23  CTransformation<CScalar>* CExtractAxisToScalar::create(const StdString& id, xml::CXMLNode* node)
24  {
25    CExtractAxisToScalar* extractAxis = CExtractAxisToScalarGroup::get("extract_axis_to_scalar_definition")->createChild(id);
26    if (node) extractAxis->parse(*node);
27    return static_cast<CTransformation<CScalar>*>(extractAxis);
28  }
29
30  bool CExtractAxisToScalar::registerTrans()
31  {
32    return registerTransformation(TRANS_EXTRACT_AXIS_TO_SCALAR, {create, getTransformation});
33  }
34
35  bool CExtractAxisToScalar::_dummyRegistered = CExtractAxisToScalar::registerTrans();
36
37  //----------------------------------------------------------------
38
39  StdString CExtractAxisToScalar::GetName(void)    { return StdString("extract_axis_to_scalar"); }
40  StdString CExtractAxisToScalar::GetDefName(void) { return StdString("extract_axis_to_scalar"); }
41  ENodeType CExtractAxisToScalar::GetType(void)    { return eExtractAxisToScalar; }
42
43  void CExtractAxisToScalar::checkValid(CScalar* scalarDst, CAxis* axisSrc)
44  {
45    int axis_n_glo = axisSrc->n_glo;
46    if (position.isEmpty())
47      ERROR("CExtractAxisToScalar::checkValid(CScalar* scalarDst, CAxis* axisSrc)",
48        << "Position should be specified"
49        << "Axis source " << axisSrc->getId() << std::endl
50        << "CScalar destination " << scalarDst->getId() << std::endl);
51
52    int position = this->position;
53
54    if ((position < 0) || (position > (axis_n_glo-1)))
55        ERROR("CExtractAxisToScalar::checkValid(CScalar* scalarDst, CAxis* axisSrc)",
56          << "Extract axis, position should be inside 0 and ni_glo of axis source"
57          << "Axis source " << axisSrc->getId() << std::endl
58          << "CScalar destination " << scalarDst->getId() << std::endl);
59  }
60
61  CGenericAlgorithmTransformation* CExtractAxisToScalar::createAlgorithm(bool isSource,
62                                                        CGrid* gridDst, CGrid* gridSrc,
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  {
71    return CScalarAlgorithmExtractAxis::create(isSource, gridDst,  gridSrc, this, elementPositionInGrid,
72                       elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition,
73                       elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition) ;
74  }
75}
Note: See TracBrowser for help on using the repository browser.