source: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_domain.cpp @ 2247

Last change on this file since 2247 was 2196, checked in by jderouillat, 3 years ago

Backporting commit 1852 : Compiler fix for recent version of GCCfor optimised mode > O1

File size: 4.0 KB
Line 
1#include "extract_domain.hpp"
2#include "domain_algorithm_extract.hpp"
3#include "type.hpp"
4
5namespace xios {
6
7  /// ////////////////////// Définitions ////////////////////// ///
8
9  CExtractDomain::CExtractDomain(void)
10    : CObjectTemplate<CExtractDomain>(), CExtractDomainAttributes(), CTransformation<CDomain>()
11  { /* Ne rien faire de plus */ }
12
13  CExtractDomain::CExtractDomain(const StdString & id)
14    : CObjectTemplate<CExtractDomain>(id), CExtractDomainAttributes(), CTransformation<CDomain>()
15  { /* Ne rien faire de plus */ }
16
17  CExtractDomain::~CExtractDomain(void)
18  {}
19
20  CTransformation<CDomain>* CExtractDomain::create(const StdString& id, xml::CXMLNode* node)
21  {
22    CExtractDomain* extractDomain = CExtractDomainGroup::get("extract_domain_definition")->createChild(id);
23    if (node) extractDomain->parse(*node);
24    return static_cast<CTransformation<CDomain>*>(extractDomain);
25  }
26
27  bool CExtractDomain::_dummyRegistered = CExtractDomain::registerTrans();
28  bool CExtractDomain::registerTrans()
29  {
30    return registerTransformation(TRANS_EXTRACT_DOMAIN, {create, getTransformation});
31  }
32
33  //----------------------------------------------------------------
34
35  StdString CExtractDomain::GetName(void)    { return StdString("extract_domain"); }
36  StdString CExtractDomain::GetDefName(void) { return StdString("extract_domain"); }
37  ENodeType CExtractDomain::GetType(void)    { return eExtractDomain; }
38
39  void CExtractDomain::checkValid(CDomain* domainSrc)
40  {
41    int ni_glo = domainSrc->ni_glo.getValue();
42    int nj_glo = domainSrc->nj_glo.getValue();
43
44    // Résolution et vérification des données globales de extract.
45    if (!this->ni.isEmpty() || !this->nj.isEmpty() ||
46        !this->ibegin.isEmpty() || !this->jbegin.isEmpty())
47    {
48       if (this->ni.isEmpty()     || this->nj.isEmpty() ||
49           this->ibegin.isEmpty() || this->jbegin.isEmpty())
50       {
51         ERROR("CExtractDomain::checkValid(CDomain* domainSrc)",
52               << "If one of extract attributes is defined then all extract attributes must be defined.") ;
53       }
54       else
55       {
56          int iend = ibegin + ni - 1;
57          int jend = jbegin + nj - 1;
58
59          if (ibegin < 0  || jbegin < 0 || iend > ni_glo - 1 || jend > nj_glo - 1)
60            ERROR("CExtractDomain::checkValid(CDomain* domainSrc)",
61                  << "Extract is wrongly defined, "
62                  << "please check the values : 'ni' (" << ni.getValue() << "), 'nj' (" << nj.getValue() << "), "
63                  << "'ibegin' (" << ibegin.getValue() << "), 'jbegin' (" << jbegin.getValue() << ")");
64       }
65    }
66    else
67    {
68       ni = ni_glo;
69       nj = nj_glo;
70       ibegin = 0;
71       jbegin = 0;
72    }
73  }
74
75  CGenericAlgorithmTransformation* CExtractDomain::createAlgorithm(bool isSource,
76                                                        CGrid* gridDst, CGrid* gridSrc,
77                                                        int elementPositionInGrid,
78                                                        std::map<int, int>& elementPositionInGridSrc2ScalarPosition,
79                                                        std::map<int, int>& elementPositionInGridSrc2AxisPosition,
80                                                        std::map<int, int>& elementPositionInGridSrc2DomainPosition,
81                                                        std::map<int, int>& elementPositionInGridDst2ScalarPosition,
82                                                        std::map<int, int>& elementPositionInGridDst2AxisPosition,
83                                                        std::map<int, int>& elementPositionInGridDst2DomainPosition)
84  {
85    return CDomainAlgorithmExtract::create(isSource, gridDst,  gridSrc, this, elementPositionInGrid,
86                       elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition,
87                       elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition);
88  }
89}
Note: See TracBrowser for help on using the repository browser.