#include "workflow_graph.hpp" namespace xios { std::unordered_map *CWorkflowGraph::mapFilters_ptr_with_info = 0; std::unordered_map *CWorkflowGraph::mapFieldToFilters_ptr_with_info = 0; std::unordered_map *CWorkflowGraph::mapHashFilterID_ptr = 0; std::unordered_map *CWorkflowGraph::mapContext_ptr = 0; vector CWorkflowGraph::filters; vector CWorkflowGraph::fields; vector > CWorkflowGraph::fieldsToFilters; bool CWorkflowGraph::build_begin = false; CWorkflowGraph::CWorkflowGraph() { } /*! * Reorganize information collected by XIOS for visualization. */ void CWorkflowGraph::buildStaticWorkflow() TRY { if(mapFilters_ptr_with_info==0 || mapFieldToFilters_ptr_with_info==0) std::cout<<"No graph information provided"<size()); fieldsToFilters.clear(); fields.clear(); for (auto it=mapFilters_ptr_with_info->begin(); it != mapFilters_ptr_with_info->end(); it++) { filters[it->first]=it->second.filter_name; } // Create a list of fields and their filter connectivity (graph edges and edge-to-node connectivity) for (auto it=mapFieldToFilters_ptr_with_info->begin(); it != mapFieldToFilters_ptr_with_info->end(); it++) { fieldsToFilters.push_back(make_pair(it->second.from,it->second.to)); fields.push_back(it->second.field_id + " "+it->second.date.toString()); } } } CATCH /*! * Reorganize information collected by XIOS for visualization. */ void CWorkflowGraph::buildStaticWorkflow_with_info() TRY { // showStaticWorkflow(); if(mapFilters_ptr_with_info==0 || mapFieldToFilters_ptr_with_info==0) std::cout<<"No graph information provided"<size()); fieldsToFilters.clear(); fields.clear(); for (auto it=mapFilters_ptr_with_info->begin(); it != mapFilters_ptr_with_info->end(); it++) { // std::cout<<"it->first = "<first<first]=it->second.filter_name; } // Create a list of fields and their filter connectivity (graph edges and edge-to-node connectivity) for (auto it=mapFieldToFilters_ptr_with_info->begin(); it != mapFieldToFilters_ptr_with_info->end(); it++) { fieldsToFilters.push_back(make_pair(it->second.from,it->second.to)); fields.push_back(it->second.field_id + " "+it->second.date.toString()); } } } CATCH void CWorkflowGraph::showStaticWorkflow() TRY { if(mapFilters_ptr_with_info!=0 && !mapFilters_ptr_with_info->empty()) for (auto it=mapFilters_ptr_with_info->begin(); it != mapFilters_ptr_with_info->end(); it++) { std::cout<<"mapFilters_ptr_with_info["<first<<"].filter_name="<second.filter_name<first<<"].filter_class="<second.filter_class<first<<"].filter_fillled="<second.filter_filled<first<<"].expected_entry_nb="<second.expected_entry_nb<first<<"].date="<second.date<first<<"].timestamp="<second.timestamp<first<<"].transform_type="<second.transform_type<empty()) for (auto it=mapFieldToFilters_ptr_with_info->begin(); it != mapFieldToFilters_ptr_with_info->end(); it++) { std::cout<<"mapFieldToFilters_ptr_with_info["<first<<"].from = "<second.from<first<<"].to = "<second.to<first<<"].field_id = "<second.field_id<first<<"].field_name = "<second.field_name<first<<"].date = "<second.date<; std::string current_context_id = CContext::getCurrent()->getId(); std::unordered_map::const_iterator found = mapContext_ptr->find(current_context_id); if (found == mapContext_ptr->end()) { std::pair mypair (current_context_id, mapContext_ptr->size()); mapContext_ptr->insert(mypair); } (*mapFilters_ptr_with_info)[nodeID].filter_name = filterName; (*mapFilters_ptr_with_info)[nodeID].filter_class = filterClass; (*mapFilters_ptr_with_info)[nodeID].filter_filled = filterFilled; (*mapFilters_ptr_with_info)[nodeID].expected_entry_nb = entry_nb; (*mapFilters_ptr_with_info)[nodeID].date = packet->date; (*mapFilters_ptr_with_info)[nodeID].timestamp = packet->timestamp; (*mapFilters_ptr_with_info)[nodeID].node_context_id = CContext::getCurrent()->getId(); } CATCH void CWorkflowGraph::addEdge(int edgeID, int toID, CDataPacketPtr packet) TRY { std::string current_context_id = CContext::getCurrent()->getId(); (*mapFieldToFilters_ptr_with_info)[edgeID].from = packet->src_filterID; (*mapFieldToFilters_ptr_with_info)[edgeID].to = toID; (*mapFieldToFilters_ptr_with_info)[edgeID].field_id = packet->field->getId(); (*mapFieldToFilters_ptr_with_info)[edgeID].field_name = packet->field->name; (*mapFieldToFilters_ptr_with_info)[edgeID].grid_id = packet->field->grid->getId(); (*mapFieldToFilters_ptr_with_info)[edgeID].date = packet->date; (*mapFieldToFilters_ptr_with_info)[edgeID].timestamp = packet->timestamp; (*mapFieldToFilters_ptr_with_info)[edgeID].field = packet->field; (*mapFieldToFilters_ptr_with_info)[edgeID].attributes = packet->field->record4graphXiosAttributes(); (*mapFieldToFilters_ptr_with_info)[edgeID].edge_context_id = CContext::getCurrent()->getId(); } CATCH void CWorkflowGraph::allocNodeEdge() TRY { if(mapFilters_ptr_with_info==0) mapFilters_ptr_with_info = new std::unordered_map ; if(mapFieldToFilters_ptr_with_info==0) mapFieldToFilters_ptr_with_info = new std::unordered_map ; if(mapHashFilterID_ptr==0) mapHashFilterID_ptr = new std::unordered_map ; } CATCH }