Ignore:
Timestamp:
04/15/20 13:23:39 (4 years ago)
Author:
ymipsl
Message:

Some update...

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/parse_expr/filter_expr_node.cpp

    r1575 r1869  
    4040                << "Use the keyword \"this\" if you want to reference the input data sent to this field."); 
    4141 
    42         field->buildFilterGraph(gc, false); 
    43         outputPin = field->getInstantDataFilter(); 
     42        bool ret=field->buildWorkflowGraph(gc); 
     43        if (ret) outputPin = field->getInstantDataFilter(); // if dependency is complete build the graph other return nullptr 
    4444      } 
    4545      else ERROR("boost::shared_ptr<COutputPin> CFilterFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const", 
     
    8484                << "Use the keyword \"this\" if you want to reference the input data sent to this field."); 
    8585 
    86         field->buildFilterGraph(gc, false); 
    87         outputPin = field->getTemporalDataFilter(gc, thisField.freq_op.isEmpty() ? TimeStep : thisField.freq_op); 
     86        bool ret=field->buildWorkflowGraph(gc); 
     87        if (ret) outputPin = field->getTemporalDataFilter(gc, thisField.freq_op.isEmpty() ? TimeStep : thisField.freq_op); 
    8888      } 
    8989      else 
     
    107107  { 
    108108    std::shared_ptr<CUnaryArithmeticFilter> filter(new CUnaryArithmeticFilter(gc, opId)); 
    109     child->reduce(gc, thisField)->connectOutput(filter, 0); 
     109    auto ret=child->reduce(gc, thisField) ; 
     110    if (ret) ret->connectOutput(filter, 0); 
     111    else filter.reset() ; 
    110112    return filter; 
    111113  } 
     
    124126  { 
    125127    std::shared_ptr<CScalarFieldArithmeticFilter> filter(new CScalarFieldArithmeticFilter(gc, opId, child1->reduce())); 
    126     child2->reduce(gc, thisField)->connectOutput(filter, 0); 
     128     
     129    auto ret=child2->reduce(gc, thisField) ; 
     130    if (ret) ret->connectOutput(filter, 0); 
     131    else filter.reset() ; 
    127132    return filter; 
    128133  } 
     
    141146  { 
    142147    std::shared_ptr<CFieldScalarArithmeticFilter> filter(new CFieldScalarArithmeticFilter(gc, opId, child2->reduce())); 
    143     child1->reduce(gc, thisField)->connectOutput(filter, 0); 
     148    auto ret=child1->reduce(gc, thisField) ; 
     149    if (ret) ret->connectOutput(filter, 0); 
     150    else filter.reset() ; 
    144151    return filter; 
    145152  } 
     
    158165  { 
    159166    std::shared_ptr<CFieldFieldArithmeticFilter> filter(new CFieldFieldArithmeticFilter(gc, opId)); 
    160     child1->reduce(gc, thisField)->connectOutput(filter, 0); 
    161     child2->reduce(gc, thisField)->connectOutput(filter, 1); 
     167    auto ret1 = child1->reduce(gc, thisField); 
     168    auto ret2 = child2->reduce(gc, thisField); 
     169    if (ret1 && ret2)  
     170    { 
     171      ret1->connectOutput(filter, 0) ; 
     172      ret2->connectOutput(filter, 1) ; 
     173    } 
     174    else filter.reset() ; 
    162175    return filter; 
    163176  } 
     
    180193  { 
    181194    std::shared_ptr<CScalarScalarFieldArithmeticFilter> filter(new CScalarScalarFieldArithmeticFilter(gc, opId, child1->reduce(),child2->reduce())); 
    182     child3->reduce(gc, thisField)->connectOutput(filter, 0); 
     195    auto ret=child3->reduce(gc, thisField) ; 
     196    if (ret) ret->connectOutput(filter, 0); 
     197    else filter.reset() ; 
    183198    return filter; 
    184199  } 
     
    199214  { 
    200215    std::shared_ptr<CScalarFieldScalarArithmeticFilter> filter(new CScalarFieldScalarArithmeticFilter(gc, opId, child1->reduce(),child3->reduce())); 
    201     child2->reduce(gc, thisField)->connectOutput(filter, 0); 
     216    auto ret=child2->reduce(gc, thisField); 
     217    if (ret) ret->connectOutput(filter, 0); 
     218    else filter.reset() ; 
    202219    return filter; 
    203220  } 
     
    218235  { 
    219236    std::shared_ptr<CScalarFieldFieldArithmeticFilter> filter(new CScalarFieldFieldArithmeticFilter(gc, opId, child1->reduce())); 
    220     child2->reduce(gc, thisField)->connectOutput(filter, 0); 
    221     child3->reduce(gc, thisField)->connectOutput(filter, 1); 
     237    auto ret1=child2->reduce(gc, thisField); 
     238    auto ret2=child3->reduce(gc, thisField); 
     239    if (ret1 && ret2) 
     240    { 
     241      ret1->connectOutput(filter, 0); 
     242      ret2->connectOutput(filter, 1); 
     243    } 
     244    else filter.reset() ; 
    222245    return filter; 
    223246  } 
     
    239262  { 
    240263    std::shared_ptr<CFieldScalarScalarArithmeticFilter> filter(new CFieldScalarScalarArithmeticFilter(gc, opId, child2->reduce(),child3->reduce())); 
    241     child1->reduce(gc, thisField)->connectOutput(filter, 0); 
     264    auto ret = child1->reduce(gc, thisField) ; 
     265    if (ret) ret->connectOutput(filter, 0); 
     266    else filter.reset() ; 
    242267    return filter; 
    243268  } 
     
    259284  { 
    260285    std::shared_ptr<CFieldScalarFieldArithmeticFilter> filter(new CFieldScalarFieldArithmeticFilter(gc, opId, child2->reduce())); 
    261     child1->reduce(gc, thisField)->connectOutput(filter, 0); 
    262     child3->reduce(gc, thisField)->connectOutput(filter, 1); 
     286    auto ret1 = child1->reduce(gc, thisField); 
     287    auto ret2 = child3->reduce(gc, thisField); 
     288    if (ret1 && ret2) 
     289    { 
     290      ret1 -> connectOutput(filter, 0); 
     291      ret2 -> connectOutput(filter, 1); 
     292    } 
     293    else filter.reset() ; 
    263294    return filter; 
    264295  } 
     
    280311  { 
    281312    std::shared_ptr<CFieldFieldScalarArithmeticFilter> filter(new CFieldFieldScalarArithmeticFilter(gc, opId, child3->reduce())); 
    282     child1->reduce(gc, thisField)->connectOutput(filter, 0); 
    283     child2->reduce(gc, thisField)->connectOutput(filter, 1); 
     313    auto ret1 = child1->reduce(gc, thisField); 
     314    auto ret2 = child2->reduce(gc, thisField); 
     315    if (ret1 && ret2) 
     316    { 
     317      ret1->connectOutput(filter, 0); 
     318      ret2->connectOutput(filter, 1); 
     319    } 
     320    else filter.reset() ; 
    284321    return filter; 
    285322  } 
     
    300337  { 
    301338    std::shared_ptr<CFieldFieldFieldArithmeticFilter> filter(new CFieldFieldFieldArithmeticFilter(gc, opId)); 
    302     child1->reduce(gc, thisField)->connectOutput(filter, 0); 
    303     child2->reduce(gc, thisField)->connectOutput(filter, 1); 
    304     child3->reduce(gc, thisField)->connectOutput(filter, 2); 
     339    auto ret1=child1->reduce(gc, thisField); 
     340    auto ret2=child2->reduce(gc, thisField); 
     341    auto ret3=child3->reduce(gc, thisField); 
     342    if (ret1 && ret2 && ret3) 
     343    { 
     344      ret1->connectOutput(filter, 0); 
     345      ret2->connectOutput(filter, 1); 
     346      ret3->connectOutput(filter, 2); 
     347    } 
     348    else filter.reset() ; 
    305349    return filter; 
    306350  } 
Note: See TracChangeset for help on using the changeset viewer.