Changeset 1677 for XIOS/dev/dev_trunk_omp/src/node/field.cpp
- Timestamp:
- 06/25/19 16:14:54 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_trunk_omp/src/node/field.cpp
r1671 r1677 70 70 71 71 //---------------------------------------------------------------- 72 72 73 73 74 const StdString& CField::getOId(void) … … 1128 1129 TRY 1129 1130 { 1130 if (!isReferenceSolvedAndTransformed) solveAllEnabledFieldsAndTransform();1131 if (!isGridChecked) checkGridOfEnabledFields();1131 if (!isReferenceSolvedAndTransformed) solveAllEnabledFieldsAndTransform(); 1132 if (!isGridChecked) checkGridOfEnabledFields(); 1132 1133 1133 1134 const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); … … 1166 1167 { 1167 1168 fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this)); 1168 instantDataFilter->connectOutput(fileWriterFilter, 0); 1169 instantDataFilter->connectOutput(fileWriterFilter, 0); 1169 1170 } 1170 1171 } … … 1180 1181 boost::scoped_ptr<IFilterExprNode> expr(parseExpr(getExpression() + '\0')); 1181 1182 std::shared_ptr<COutputPin> filter = expr->reduce(gc, *this); 1183 filter->output_field_id = this->getId(); 1182 1184 1183 1185 // Check if a spatial transformation is needed … … 1194 1196 1195 1197 filter->connectOutput(filters.first, 0); 1196 1197 if (buildWorkflowGraph) 1198 { 1199 if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map <int, StdString>; 1200 if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map <StdString, vector <int> >; 1201 int filterOut = filter->getFilterId(); 1202 int filterIn = (std::static_pointer_cast<COutputPin>(filters.second))->getFilterId(); 1203 (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterOut); 1204 (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterIn); 1205 (*CWorkflowGraph::mapFilters_ptr)[filterOut] = filter->GetName(); 1206 (*CWorkflowGraph::mapFilters_ptr)[filterIn] = filters.second->GetName(); 1207 std::cout<<"CField::buildFilterGraph (*CWorkflowGraph::mapFilters_ptr)["<<filterOut<<"] = "<<filter->GetName()<<std::endl; 1208 } 1198 filters.second->output_field_id = this->getId(); 1199 1200 1209 1201 filter = filters.second; 1202 1210 1203 } 1211 1204 } 1212 1205 1213 1206 instantDataFilter = filter; 1207 instantDataFilter->output_field_id = this->getId(); 1208 filter->output_field_id = this->getId(); 1209 filter->tag = buildWorkflowGraph; 1210 // std::cout<<"=====1============= output_field_id = "<<this->getId()<<" =========== tag="<<filter->tag<<std::endl; 1211 for(int i=0; i<filter->parent_filters.size(); i++) 1212 { 1213 // std::cout<<"transforme filter cout= "<<std::shared_ptr<COutputPin>(filter)<<" parent filter = "<<filter->parent_filters[i]<<std::endl; 1214 filter->tag = filter->tag || filter->parent_filters[i]->tag; 1215 } 1216 1217 1218 1219 1220 1214 1221 } 1215 1222 // Check if we have a reference on another field … … 1218 1225 CField::get(field_ref)->build_workflow_graph.setValue(buildWorkflowGraph); 1219 1226 instantDataFilter = getFieldReference(gc); 1227 instantDataFilter->tag = buildWorkflowGraph; 1220 1228 } 1221 1229 // Check if the data is to be read from a file … … 1225 1233 instantDataFilter = serverSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, false, freq_offset, true, 1226 1234 detectMissingValues, defaultValue, buildWorkflowGraph)); 1235 instantDataFilter->tag = buildWorkflowGraph; 1227 1236 } 1228 1237 else // The data might be passed from the model … … 1230 1239 if (check_if_active.isEmpty()) check_if_active = false; 1231 1240 instantDataFilter = clientSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, false, true, NoneDu, false, 1232 detectMissingValues, defaultValue, buildWorkflowGraph)); 1233 if (buildWorkflowGraph) 1234 { 1235 if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map <int, StdString>; 1236 (*CWorkflowGraph::mapFilters_ptr)[instantDataFilter->getFilterId()] = instantDataFilter->GetName(); 1237 std::cout<<"CField::buildFilterGraph2 (*CWorkflowGraph::mapFilters_ptr)["<<instantDataFilter->getFilterId()<<"] = "<<instantDataFilter->GetName()<<std::endl; 1238 } 1241 detectMissingValues, defaultValue, buildWorkflowGraph)); 1242 instantDataFilter->tag = buildWorkflowGraph; 1243 // std::cout<<"=====4============= output_field_id = "<<this->getId()<<" =========== tag="<<instantDataFilter->tag<<std::endl; 1244 // std::cout<<"Source filter cout = "<<std::shared_ptr<COutputPin>(clientSourceFilter)<<std::endl; 1239 1245 } 1240 1246 } … … 1248 1254 detectMissingValues, defaultValue)); 1249 1255 instantDataFilter->connectOutput(storeFilter, 0); 1256 1257 storeFilter->tag = (instantDataFilter->tag || buildWorkflowGraph); 1258 instantDataFilter->setParentFiltersTag(); 1250 1259 } 1251 1260 … … 1254 1263 fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this, buildWorkflowGraph)); 1255 1264 getTemporalDataFilter(gc, file->output_freq)->connectOutput(fileWriterFilter, 0); 1256 if (buildWorkflowGraph) 1257 { 1258 if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map <int, StdString>; 1259 if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map <StdString, vector <int> >; 1260 int filterOut = getTemporalDataFilter(gc, file->output_freq)->getFilterId(); 1261 int filterIn = fileWriterFilter->getFilterId(); 1262 (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterOut); 1263 (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterIn); 1264 (*CWorkflowGraph::mapFilters_ptr)[filterOut] = "Temporal filter"; 1265 (*CWorkflowGraph::mapFilters_ptr)[filterIn] = fileWriterFilter->GetName(); 1266 } 1265 std::cout<<"=====10============= output_field_id = "<<this->name<<std::endl; 1266 // std::cout<<"CFileWriterFilter filter = "<<fileWriterFilter<<" parent filter = "<<std::shared_ptr<COutputPin>(getTemporalDataFilter(gc, file->output_freq))<<std::endl; 1267 1268 fileWriterFilter->tag = (getTemporalDataFilter(gc, file->output_freq)->tag || buildWorkflowGraph); 1269 fileWriterFilter->output_field_id = this->name; 1270 getTemporalDataFilter(gc, file->output_freq)->setParentFiltersTag(); 1267 1271 } 1268 1272 } … … 1296 1300 double defaultValue = hasMissingValue ? default_value : (!default_value.isEmpty() ? default_value : 0.0); 1297 1301 filters = CSpatialTransformFilter::buildFilterGraph(gc, fieldRef->grid, grid, hasMissingValue, defaultValue, buildWorkflowGraph); 1302 1303 fieldRef->getInstantDataFilter()->connectOutput(filters.first, 0); 1304 1305 filters.second->output_field_id = this->getId(); 1306 1307 1308 filters.second->parent_filters.resize(1); 1309 filters.second->parent_filters[0]= fieldRef->getInstantDataFilter(); 1310 1311 filters.second->tag = (buildWorkflowGraph || filters.second->parent_filters[0]->tag); 1312 1313 // std::cout<<"=====5============= output_field_id = "<<this->getId()<<std::endl; 1314 // std::cout<<"CSpatialTransformFilter first filter cout = "<<std::shared_ptr<COutputPin>(filters.first)<<" second filter cout = "<<std::shared_ptr<COutputPin>(filters.second)<< " parent filter = "<<fieldRef->getInstantDataFilter()<<std::endl; 1315 1298 1316 } 1299 1317 else 1300 1318 { 1301 1319 filters.first = filters.second = std::shared_ptr<CFilter>(new CPassThroughFilter(gc, buildWorkflowGraph)); 1302 } 1303 1304 fieldRef->getInstantDataFilter()->connectOutput(filters.first, 0); 1305 1306 if (buildWorkflowGraph) 1307 { 1308 if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map <int, StdString>; 1309 if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map <StdString, vector <int> >; 1310 int filterOut = fieldRef->instantDataFilter->getFilterId(); 1311 int filterIn = (std::static_pointer_cast<COutputPin>(filters.first))->getFilterId(); 1312 (*CWorkflowGraph::mapFieldToFilters_ptr)[fieldRef->getOId()].push_back(filterOut); 1313 (*CWorkflowGraph::mapFieldToFilters_ptr)[fieldRef->getOId()].push_back(filterIn); 1314 (*CWorkflowGraph::mapFilters_ptr)[filterOut] = fieldRef->getInstantDataFilter()->GetName(); 1315 (*CWorkflowGraph::mapFilters_ptr)[filterIn] = filters.first->GetName(); 1316 std::cout<<"CField::getFieldReference (*CWorkflowGraph::mapFilters_ptr)["<<filterOut<<"] = "<<fieldRef->getInstantDataFilter()->GetName()<<std::endl; 1317 } 1320 1321 fieldRef->getInstantDataFilter()->connectOutput(filters.first, 0); 1322 filters.second->output_field_id = this->getId(); 1323 1324 1325 filters.second->parent_filters.resize(1); 1326 filters.second->parent_filters[0]= fieldRef->getInstantDataFilter(); 1327 1328 filters.second->tag = buildWorkflowGraph || filters.second->parent_filters[0]->tag; 1329 1330 // std::cout<<"=====6============= output_field_id = "<<this->getId()<<" =========== tag="<<filters.second->tag<<std::endl; 1331 // std::cout<<"Pass through filter cout = "<<std::shared_ptr<COutputPin>(filters.second)<<" parent filter = "<<filters.second->parent_filters[0]<<std::endl; 1332 1333 } 1334 1318 1335 return filters.second; 1319 1336 } … … 1335 1352 ERROR("COutputPin* CField::getSelfReference(CGarbageCollector& gc)", 1336 1353 "Impossible to add a self reference to a field which has already been parsed or which does not have an expression."); 1354 1355 bool buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true); 1337 1356 1338 1357 if (!selfReferenceFilter) … … 1368 1387 1369 1388 selfReferenceFilter = clientSourceFilter; 1370 } 1371 } 1372 1389 } 1390 } 1391 1392 selfReferenceFilter->tag = buildWorkflowGraph; 1373 1393 return selfReferenceFilter; 1374 1394 } … … 1388 1408 { 1389 1409 std::map<CDuration, std::shared_ptr<COutputPin> >::iterator it = temporalDataFilters.find(outFreq); 1390 const boolbuildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true);1410 bool buildWorkflowGraph = buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true); 1391 1411 1392 1412 if (it == temporalDataFilters.end()) … … 1404 1424 1405 1425 instantDataFilter->connectOutput(temporalFilter, 0); 1406 1407 if (buildWorkflowGraph) 1408 { 1409 if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map <int, StdString>; 1410 if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map <StdString, vector <int> >; 1411 int filterOut = instantDataFilter->getFilterId(); 1412 int filterIn = (std::static_pointer_cast<COutputPin>(temporalFilter))->getFilterId(); 1413 (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterOut); 1414 (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterIn); 1415 (*CWorkflowGraph::mapFilters_ptr)[filterOut] = getInstantDataFilter()->GetName(); 1416 (*CWorkflowGraph::mapFilters_ptr)[filterIn] = temporalFilter->GetName(); 1417 std::cout<<"CField::getTemporalDataFilter (*CWorkflowGraph::mapFilters_ptr)["<<filterOut<<"] = "<<getInstantDataFilter()->GetName()<<std::endl; 1418 } 1426 temporalFilter->output_field_id = this->getId(); 1427 temporalFilter->tag = buildWorkflowGraph; 1428 1429 temporalFilter->parent_filters.resize(1); 1430 temporalFilter->parent_filters[0] = instantDataFilter; 1431 1432 1433 // std::cout<<"=====8============= output_field_id = "<<this->getId()<<" =========== tag="<<temporalFilter->tag<<std::endl; 1434 // std::cout<<"Temporal filter cout = "<<std::shared_ptr<COutputPin>(temporalFilter)<<" parent filter = "<<temporalFilter->parent_filters[0]<<std::endl; 1435 if(temporalFilter->parent_filters[0]->tag) temporalFilter->tag=true; 1419 1436 1420 1437 it = temporalDataFilters.insert(std::make_pair(outFreq, temporalFilter)).first; … … 1452 1469 1453 1470 const bool detectMissingValues = (!detect_missing_value.isEmpty() && detect_missing_value == true); 1454 const boolbuildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true);1471 bool buildWorkflowGraph = buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true); 1455 1472 std::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation, 1456 1473 CContext::getCurrent()->getCalendar()->getInitDate(), … … 1459 1476 1460 1477 selfReferenceFilter->connectOutput(temporalFilter, 0); 1461 if (buildWorkflowGraph) 1462 1463 { 1464 if(CWorkflowGraph::mapFilters_ptr==0) CWorkflowGraph::mapFilters_ptr = new std::unordered_map <int, StdString>; 1465 if(CWorkflowGraph::mapFieldToFilters_ptr==0) CWorkflowGraph::mapFieldToFilters_ptr = new std::unordered_map <StdString, vector <int> >; 1466 int filterOut = selfReferenceFilter->getFilterId(); 1467 int filterIn = (std::static_pointer_cast<COutputPin>(temporalFilter))->getFilterId(); 1468 (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterOut); 1469 (*CWorkflowGraph::mapFieldToFilters_ptr)[this->getOId()].push_back(filterIn); 1470 (*CWorkflowGraph::mapFilters_ptr)[filterOut] = selfReferenceFilter->GetName(); 1471 (*CWorkflowGraph::mapFilters_ptr)[filterIn] = temporalFilter->GetName(); 1472 std::cout<<"CField::getSelfTemporalDataFilter (*CWorkflowGraph::mapFilters_ptr)["<<filterOut<<"] = "<<selfReferenceFilter->GetName()<<std::endl; 1473 } 1478 temporalFilter->output_field_id = this->getId(); 1479 temporalFilter->tag = buildWorkflowGraph; 1480 // std::cout<<"=====9============= output_field_id = "<<this->getId()<<" =========== tag="<<temporalFilter->tag<<std::endl; 1474 1481 1475 1482 return temporalFilter ;
Note: See TracChangeset
for help on using the changeset viewer.