source: XIOS/trunk/src/parse_expr/expr_node.cpp @ 501

Last change on this file since 501 was 501, checked in by ymipsl, 10 years ago

Add licence copyright to all file ond directory src using the command :
svn propset -R copyright -F header_licence src

XIOS is now officialy under CeCILL licence

YM

  • Property copyright set to
    Software name : XIOS (Xml I/O Server)
    http://forge.ipsl.jussieu.fr/ioserver
    Creation date : January 2009
    Licence : CeCCIL version2
    see license file in root directory : Licence_CeCILL_V2-en.txt
    or http://www.cecill.info/licences/Licence_CeCILL_V2-en.html
    Holder : CEA/LSCE (Laboratoire des Sciences du CLimat et de l'Environnement)
    CNRS/IPSL (Institut Pierre Simon Laplace)
    Project Manager : Yann Meurdesoif
    yann.meurdesoif@cea.fr
  • Property svn:eol-style set to native
File size: 2.3 KB
Line 
1#include "expr_node.hpp"
2#include "field.hpp"
3
4namespace xios
5{
6
7  CScalarNode* CScalarNode::newNode(CSimpleNodeExpr* simpleNode)
8  {
9    if (simpleNode->nodeType==CSimpleNodeExpr::scalarDouble) return new CScalarDouble(simpleNode) ;
10    else if (simpleNode->nodeType==CSimpleNodeExpr::scalarVariable) return new CScalarVariable(simpleNode) ;
11    else if (simpleNode->nodeType==CSimpleNodeExpr::opScalar) return new COperatorScalarNode(simpleNode) ;
12    else if (simpleNode->nodeType==CSimpleNodeExpr::opScalarScalar) return new COperatorScalarScalarNode(simpleNode) ;
13    else 
14    {
15      ERROR("CScalarNode* CScalarNode::allocateChild(CSimpleNodeExpr* simpleNode)",<<"Non coherent node")
16      return NULL;
17    }
18  };
19
20
21  CFieldNode* CFieldNode::newNode(CSimpleNodeExpr* simpleNode)
22  {
23    if (simpleNode->nodeType==CSimpleNodeExpr::fieldInstant) return new CInstantFieldNode(simpleNode) ;
24    else if (simpleNode->nodeType==CSimpleNodeExpr::fieldAverage) return new  CAverageFieldNode(simpleNode) ;
25    else if (simpleNode->nodeType==CSimpleNodeExpr::opFieldScalar) return new COperatorFieldScalarNode(simpleNode) ;
26    else if (simpleNode->nodeType==CSimpleNodeExpr::opScalarField) return new COperatorScalarFieldNode(simpleNode) ;
27    else if (simpleNode->nodeType==CSimpleNodeExpr::opFieldField) return new COperatorFieldFieldNode(simpleNode) ;
28    else if (simpleNode->nodeType==CSimpleNodeExpr::opField) return new COperatorFieldNode(simpleNode) ;
29    else 
30    {
31      ERROR("CScalarNode* CScalarNode::allocateChild(CSimpleNodeExpr* simpleNode)",<<"Non coherent node")
32      return NULL;
33    }
34  };
35
36  void CInstantFieldNode::reduce(CField* thisField, map<string,CField*>& associatedInstantField, map<string,CField*>& associatedAverageField)
37  {
38    if (!reduced)
39    {
40      if (fieldId=="this")
41      {
42        field=thisField ;
43        array=thisField->getInstantData() ;
44        reduced=true ;
45      }
46      else
47      {
48        field=associatedInstantField[fieldId] ;
49        array=field->getInstantData() ;
50        reduced=true ;
51      }
52    }
53  }   
54
55  void CAverageFieldNode::reduce(CField* thisField, map<string,CField*>& associatedInstantField, map<string,CField*>& associatedAverageField)
56  {
57    if (!reduced)
58    {
59      field=associatedAverageField[fieldId] ;
60      array=field->getInstantData() ;
61      reduced=true ;
62    }
63  }
64 
65}
Note: See TracBrowser for help on using the repository browser.