source: XIOS/dev/dev_trunk_omp/src/workflow_graph.cpp @ 1733

Last change on this file since 1733 was 1681, checked in by yushan, 5 years ago

MARK: Dynamic workflow graph developement. Branch up to date with trunk @1676. Bug fixed

File size: 6.6 KB
Line 
1#include "workflow_graph.hpp"
2
3namespace xios
4{
5
6  std::unordered_map <int, graph_info_box_node> *CWorkflowGraph::mapFilters_ptr_with_info = 0;
7  #pragma omp threadprivate(CWorkflowGraph::mapFilters_ptr_with_info)
8
9  std::unordered_map <int, graph_info_box_edge > *CWorkflowGraph::mapFieldToFilters_ptr_with_info = 0;
10  #pragma omp threadprivate(CWorkflowGraph::mapFieldToFilters_ptr_with_info)
11
12  std::unordered_map <size_t, int> *CWorkflowGraph::mapHashFilterID_ptr = 0;
13  #pragma omp threadprivate(CWorkflowGraph::mapHashFilterID_ptr)
14
15
16  vector <StdString> CWorkflowGraph::filters;
17  vector <StdString> CWorkflowGraph::fields;
18  vector <pair<int, int> > CWorkflowGraph::fieldsToFilters;
19
20  bool CWorkflowGraph::build_begin = false;
21  #pragma omp threadprivate(CWorkflowGraph::build_begin)
22
23  CWorkflowGraph::CWorkflowGraph()
24  { }
25
26  /*!
27   * Reorganize information collected by XIOS for visualization.
28   */
29  void CWorkflowGraph::buildStaticWorkflow()
30  TRY
31  {
32   
33    if(mapFilters_ptr_with_info==0 || mapFieldToFilters_ptr_with_info==0) 
34      std::cout<<"No graph information provided"<<std::endl;
35
36    else // Create a list of filters (graph nodes)
37    {
38      size_t filterIdx = 0;
39      filters.resize(mapFilters_ptr_with_info->size());
40      fieldsToFilters.clear();
41      fields.clear();
42      for (auto it=mapFilters_ptr_with_info->begin(); it != mapFilters_ptr_with_info->end(); it++)
43      {
44        filters[it->first]=it->second.filter_name;
45      }
46
47      // Create a list of fields and their filter connectivity (graph edges and edge-to-node connectivity)
48      for (auto it=mapFieldToFilters_ptr_with_info->begin(); it != mapFieldToFilters_ptr_with_info->end(); it++)
49      {
50        fieldsToFilters.push_back(make_pair(it->second.from,it->second.to));
51        fields.push_back(it->second.field_id + " "+it->second.date.toString());
52      }
53    }
54  }
55  CATCH
56
57
58
59
60/*!
61   * Reorganize information collected by XIOS for visualization.
62   */
63  void CWorkflowGraph::buildStaticWorkflow_with_info()
64  TRY
65  {
66    // showStaticWorkflow();
67   
68    if(mapFilters_ptr_with_info==0 || mapFieldToFilters_ptr_with_info==0) 
69      std::cout<<"No graph information provided"<<std::endl;
70
71    else // Create a list of filters (graph nodes)
72    {
73      size_t filterIdx = 0;
74      filters.resize(mapFilters_ptr_with_info->size());
75      fieldsToFilters.clear();
76      fields.clear();
77      for (auto it=mapFilters_ptr_with_info->begin(); it != mapFilters_ptr_with_info->end(); it++)
78      {
79        // std::cout<<"it->first = "<<it->first<<std::endl;
80        filters[it->first]=it->second.filter_name;
81      }
82
83      // Create a list of fields and their filter connectivity (graph edges and edge-to-node connectivity)
84      for (auto it=mapFieldToFilters_ptr_with_info->begin(); it != mapFieldToFilters_ptr_with_info->end(); it++)
85      {
86        fieldsToFilters.push_back(make_pair(it->second.from,it->second.to));
87        fields.push_back(it->second.field_id + " "+it->second.date.toString());
88      }
89    }
90  }
91  CATCH
92
93
94
95  void CWorkflowGraph::showStaticWorkflow()
96  TRY
97  {
98    if(mapFilters_ptr_with_info!=0 && !mapFilters_ptr_with_info->empty())
99    for (auto it=mapFilters_ptr_with_info->begin(); it != mapFilters_ptr_with_info->end(); it++)
100    {
101      std::cout<<"mapFilters_ptr_with_info["<<it->first<<"].filter_name="<<it->second.filter_name<<std::endl;
102      std::cout<<"mapFilters_ptr_with_info["<<it->first<<"].filter_class="<<it->second.filter_class<<std::endl;
103      std::cout<<"mapFilters_ptr_with_info["<<it->first<<"].filter_fillled="<<it->second.filter_filled<<std::endl;
104      std::cout<<"mapFilters_ptr_with_info["<<it->first<<"].expected_entry_nb="<<it->second.expected_entry_nb<<std::endl;
105      std::cout<<"mapFilters_ptr_with_info["<<it->first<<"].date="<<it->second.date<<std::endl;
106      std::cout<<"mapFilters_ptr_with_info["<<it->first<<"].timestamp="<<it->second.timestamp<<std::endl;
107      std::cout<<"mapFilters_ptr_with_info["<<it->first<<"].transform_type="<<it->second.transform_type<<std::endl;
108    }
109    else std::cout<<"mapFilters_ptr_with_info empty"<<std::endl;
110
111    if(mapFieldToFilters_ptr_with_info!=0 && !mapFieldToFilters_ptr_with_info->empty())
112    for (auto it=mapFieldToFilters_ptr_with_info->begin(); it != mapFieldToFilters_ptr_with_info->end(); it++)
113    {
114      std::cout<<"mapFieldToFilters_ptr_with_info["<<it->first<<"].from = "<<it->second.from<<std::endl;
115      std::cout<<"mapFieldToFilters_ptr_with_info["<<it->first<<"].to = "<<it->second.to<<std::endl;
116      std::cout<<"mapFieldToFilters_ptr_with_info["<<it->first<<"].field_id = "<<it->second.field_id<<std::endl;
117      std::cout<<"mapFieldToFilters_ptr_with_info["<<it->first<<"].field_name = "<<it->second.field_name<<std::endl;
118      std::cout<<"mapFieldToFilters_ptr_with_info["<<it->first<<"].date = "<<it->second.date<<std::endl;
119     
120    }
121    else std::cout<<"mapFieldToFilters_ptr_with_info empty"<<std::endl;
122
123
124  }
125  CATCH
126
127
128  void CWorkflowGraph::addNode(int nodeID, StdString filterName, int filterClass, bool filterFilled, int entry_nb, CDataPacketPtr packet)
129  TRY
130  {
131    (*mapFilters_ptr_with_info)[nodeID].filter_name = filterName;
132    (*mapFilters_ptr_with_info)[nodeID].filter_class = filterClass;
133    (*mapFilters_ptr_with_info)[nodeID].filter_filled = filterFilled;
134    (*mapFilters_ptr_with_info)[nodeID].expected_entry_nb = entry_nb;
135    (*mapFilters_ptr_with_info)[nodeID].date = packet->date;
136    (*mapFilters_ptr_with_info)[nodeID].timestamp = packet->timestamp;
137  }
138  CATCH
139
140
141
142  void CWorkflowGraph::addEdge(int edgeID, int toID, CDataPacketPtr packet)
143  TRY
144  {
145    (*mapFieldToFilters_ptr_with_info)[edgeID].from = packet->src_filterID;
146    (*mapFieldToFilters_ptr_with_info)[edgeID].to = toID;
147    (*mapFieldToFilters_ptr_with_info)[edgeID].field_id = packet->field->getId();
148    (*mapFieldToFilters_ptr_with_info)[edgeID].field_name = packet->field->name;
149    (*mapFieldToFilters_ptr_with_info)[edgeID].grid_id = packet->field->grid->getId();
150    (*mapFieldToFilters_ptr_with_info)[edgeID].date = packet->date;
151    (*mapFieldToFilters_ptr_with_info)[edgeID].timestamp = packet->timestamp;
152    (*mapFieldToFilters_ptr_with_info)[edgeID].field = packet->field;
153    (*mapFieldToFilters_ptr_with_info)[edgeID].attributes = packet->field->record4graphXiosAttributes();
154  }
155  CATCH
156
157
158  void CWorkflowGraph::allocNodeEdge()
159  TRY
160  {
161    if(mapFilters_ptr_with_info==0) mapFilters_ptr_with_info = new std::unordered_map <int, graph_info_box_node>;
162    if(mapFieldToFilters_ptr_with_info==0) mapFieldToFilters_ptr_with_info = new std::unordered_map <int, graph_info_box_edge >;
163    if(mapHashFilterID_ptr==0) mapHashFilterID_ptr = new std::unordered_map <size_t, int >;
164  }
165  CATCH
166
167}
Note: See TracBrowser for help on using the repository browser.