Changeset 1869 for XIOS/dev/dev_ym/XIOS_COUPLING/src/parse_expr
- Timestamp:
- 04/15/20 13:23:39 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/src/parse_expr/filter_expr_node.cpp
r1575 r1869 40 40 << "Use the keyword \"this\" if you want to reference the input data sent to this field."); 41 41 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 44 44 } 45 45 else ERROR("boost::shared_ptr<COutputPin> CFilterFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const", … … 84 84 << "Use the keyword \"this\" if you want to reference the input data sent to this field."); 85 85 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); 88 88 } 89 89 else … … 107 107 { 108 108 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() ; 110 112 return filter; 111 113 } … … 124 126 { 125 127 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() ; 127 132 return filter; 128 133 } … … 141 146 { 142 147 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() ; 144 151 return filter; 145 152 } … … 158 165 { 159 166 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() ; 162 175 return filter; 163 176 } … … 180 193 { 181 194 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() ; 183 198 return filter; 184 199 } … … 199 214 { 200 215 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() ; 202 219 return filter; 203 220 } … … 218 235 { 219 236 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() ; 222 245 return filter; 223 246 } … … 239 262 { 240 263 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() ; 242 267 return filter; 243 268 } … … 259 284 { 260 285 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() ; 263 294 return filter; 264 295 } … … 280 311 { 281 312 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() ; 284 321 return filter; 285 322 } … … 300 337 { 301 338 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() ; 305 349 return filter; 306 350 }
Note: See TracChangeset
for help on using the changeset viewer.