Ignore:
Timestamp:
01/20/14 11:16:48 (10 years ago)
Author:
ymipsl
Message:

New functionnalities : expression may combine fields after temporal operation (averaging, min, max ...) using the operator @

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/parse_expr/expr_node.hpp

    r458 r460  
    193193    CFieldNode(void) : CNodeExpr() {} 
    194194    static CFieldNode* newNode(CSimpleNodeExpr* simpleNode) ; 
    195     virtual void reduce(CField* thisField = NULL) =0 ;  
     195    virtual void reduce(CField* thisField, map<string,CField*>& associatedInstantField, map<string,CField*>& associatedAverageField) =0 ;  
    196196    virtual CArray<double,1> compute(void)=0 ; 
    197197    virtual void getFieldIds(set<string>& fieldIds)=0 ; 
     198    virtual void getInstantFieldIds(set<string>& fieldIds)=0 ; 
     199    virtual void getAverageFieldIds(set<string>& fieldIds)=0 ; 
    198200    virtual void getFields(set<CField*>& fields)=0 ; 
     201    virtual void getInstantFields(set<CField*>& fields)=0 ; 
     202    virtual void getAverageFields(set<CField*>& fields)=0 ; 
    199203       
    200204    virtual ~CFieldNode() {} 
     
    212216    public: 
    213217    CInstantFieldNode(CSimpleNodeExpr* simpleNode) : CFieldNode(), fieldId(simpleNode->id) {} 
    214     virtual void reduce(CField* thisField = NULL) ; 
     218    virtual void reduce(CField* thisField, map<string,CField*>& associatedInstantField, map<string,CField*>& associatedAverageField) ;  
    215219    virtual CArray<double,1> compute(void) { return CArray<double,1>(*array);} 
    216220    virtual ~CInstantFieldNode() { } 
    217221    virtual void getFieldIds(set<string>& fieldIds) { fieldIds.insert(fieldId) ;} 
     222    virtual void getInstantFieldIds(set<string>& fieldIds) { fieldIds.insert(fieldId) ;} 
     223    virtual void getAverageFieldIds(set<string>& fieldIds) { } 
    218224    virtual void getFields(set<CField*>& fields) { fields.insert(field) ;} 
     225    virtual void getInstantFields(set<CField*>& fields) { fields.insert(field) ;} 
     226    virtual void getAverageFields(set<CField*>& fields) { } 
    219227        
    220228    string fieldId; 
     
    238246    CAverageFieldNode(CSimpleNodeExpr* simpleNode) : CFieldNode(), fieldId(simpleNode->id) {} 
    239247     
    240     virtual void reduce(CField* thisField = NULL) ; 
     248    virtual void reduce(CField* thisField, map<string,CField*>& associatedInstantField, map<string,CField*>& associatedAverageField) ;  
    241249    virtual CArray<double,1> compute(void) { return CArray<double,1>(*array); } 
    242250    virtual void getFieldIds(set<string>& fieldIds) { fieldIds.insert(fieldId) ;} 
     251    virtual void getInstantFieldIds(set<string>& fieldIds) { } 
     252    virtual void getAverageFieldIds(set<string>& fieldIds) { fieldIds.insert(fieldId) ;} 
    243253    virtual void getFields(set<CField*>& fields) { fields.insert(field) ;} 
     254    virtual void getInstantFields(set<CField*>& fields) { }  
     255    virtual void getAverageFields(set<CField*>& fields) { fields.insert(field) ;} 
    244256    virtual ~CAverageFieldNode() {} 
    245257    string fieldId; 
     
    264276    } 
    265277     
    266     virtual void reduce(CField* thisField = NULL) 
    267     { 
    268       child->reduce(thisField) ; 
     278    virtual void reduce(CField* thisField, map<string,CField*>& associatedInstantField, map<string,CField*>& associatedAverageField)  
     279    { 
     280      child->reduce(thisField, associatedInstantField, associatedAverageField) ; 
    269281      op=operatorExpr.getOpField(opId) ; 
    270282      reduced=true ; 
     
    272284     
    273285    virtual void getFieldIds(set<string>& fieldIds) {child-> getFieldIds(fieldIds);} 
    274     virtual void getFields(set<CField*>& fields) {child-> getFields(fields);} 
    275      
     286    virtual void getInstantFieldIds(set<string>& fieldIds) {child->  getInstantFieldIds(fieldIds) ;} 
     287    virtual void getAverageFieldIds(set<string>& fieldIds) {child->  getAverageFieldIds(fieldIds) ;} 
     288    virtual void getFields(set<CField*>& fields) { child-> getFields(fields) ;} 
     289    virtual void getInstantFields(set<CField*>& fields) {child-> getInstantFields(fields) ; }  
     290    virtual void getAverageFields(set<CField*>& fields) {child-> getAverageFields(fields) ; }     
    276291    virtual CArray<double,1> compute(void) 
    277292    { 
     
    303318    } 
    304319     
    305     virtual void reduce(CField* thisField = NULL) 
    306     { 
    307       child1->reduce(thisField) ; 
    308       child2->reduce(thisField) ; 
     320    virtual void reduce(CField* thisField, map<string,CField*>& associatedInstantField, map<string,CField*>& associatedAverageField) 
     321    { 
     322      child1->reduce(thisField, associatedInstantField, associatedAverageField) ; 
     323      child2->reduce(thisField, associatedInstantField, associatedAverageField) ; 
    309324      op=operatorExpr.getOpFieldField(opId) ; 
    310325      reduced=true ; 
     
    312327 
    313328    virtual void getFieldIds(set<string>& fieldIds) {child1-> getFieldIds(fieldIds); child2-> getFieldIds(fieldIds);} 
     329    virtual void getInstantFieldIds(set<string>& fieldIds) {child1-> getInstantFieldIds(fieldIds); child2-> getInstantFieldIds(fieldIds);} 
     330    virtual void getAverageFieldIds(set<string>& fieldIds) {child1-> getAverageFieldIds(fieldIds); child2-> getAverageFieldIds(fieldIds);} 
    314331    virtual void getFields(set<CField*>& fields) {child1-> getFields(fields); child2-> getFields(fields);} 
     332    virtual void getInstantFields(set<CField*>& fields) {child1-> getInstantFields(fields); child2-> getInstantFields(fields);} 
     333    virtual void getAverageFields(set<CField*>& fields) {child1-> getAverageFields(fields); child2-> getAverageFields(fields);} 
    315334 
    316335    virtual CArray<double,1> compute(void) 
     
    344363    } 
    345364     
    346     virtual void reduce(CField* thisField = NULL) 
     365    virtual void reduce(CField* thisField, map<string,CField*>& associatedInstantField, map<string,CField*>& associatedAverageField) 
    347366    { 
    348367      child1->reduce() ; 
    349       child2->reduce(thisField) ; 
     368      child2->reduce(thisField, associatedInstantField, associatedAverageField) ; 
    350369      op=operatorExpr.getOpScalarField(opId) ; 
    351370      reduced=true ; 
     
    353372    
    354373    virtual void getFieldIds(set<string>& fieldIds) {child2-> getFieldIds(fieldIds);} 
     374    virtual void getInstantFieldIds(set<string>& fieldIds) {child2-> getInstantFieldIds(fieldIds);} 
     375    virtual void getAverageFieldIds(set<string>& fieldIds) {child2-> getAverageFieldIds(fieldIds);} 
    355376    virtual void getFields(set<CField*>& fields) {child2-> getFields(fields);} 
     377    virtual void getInstantFields(set<CField*>& fields) {child2-> getInstantFields(fields);} 
     378    virtual void getAverageFields(set<CField*>& fields) {child2-> getAverageFields(fields);} 
    356379 
    357380    virtual CArray<double,1> compute(void) 
     
    385408    } 
    386409     
    387     virtual void reduce(CField* thisField = NULL) 
    388     { 
    389       child1->reduce(thisField) ; 
     410    virtual void reduce(CField* thisField, map<string,CField*>& associatedInstantField, map<string,CField*>& associatedAverageField) 
     411    { 
     412      child1->reduce(thisField, associatedInstantField, associatedAverageField) ; 
    390413      child2->reduce() ; 
    391414      op=operatorExpr.getOpFieldScalar(opId) ; 
     
    399422     
    400423    virtual void getFieldIds(set<string>& fieldIds) {child1-> getFieldIds(fieldIds);} 
     424    virtual void getInstantFieldIds(set<string>& fieldIds) {child1-> getInstantFieldIds(fieldIds);} 
     425    virtual void getAverageFieldIds(set<string>& fieldIds) {child1-> getAverageFieldIds(fieldIds);} 
    401426    virtual void getFields(set<CField*>& fields) {child1-> getFields(fields);} 
     427    virtual void getInstantFields(set<CField*>& fields) {child1-> getInstantFields(fields);} 
     428    virtual void getAverageFields(set<CField*>& fields) {child1-> getAverageFields(fields);} 
    402429 
    403430    ~COperatorFieldScalarNode() {delete child1, delete child2; } 
Note: See TracChangeset for help on using the changeset viewer.