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

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

MARK: branch merged with trunk @1663. static graph OK with EP

File size: 3.1 KB
Line 
1#include "workflow_graph.hpp"
2
3namespace xios
4{
5
6  std::unordered_map <StdString, vector <int > > *CWorkflowGraph::mapFieldToFilters_ptr = 0;
7  #pragma omp threadprivate(CWorkflowGraph::mapFieldToFilters_ptr)
8
9  std::unordered_map <int, StdString> *CWorkflowGraph::mapFilters_ptr = 0;
10  #pragma omp threadprivate(CWorkflowGraph::mapFilters_ptr)
11
12  std::unordered_map <int,vector<Time> > *CWorkflowGraph::mapFilterTimestamps_ptr = 0;
13  #pragma omp threadprivate(CWorkflowGraph::mapFilterTimestamps_ptr)
14
15  set<Time>  *CWorkflowGraph::timestamps_ptr = 0;
16  #pragma omp threadprivate(CWorkflowGraph::timestamps_ptr)
17
18  vector <StdString> CWorkflowGraph::filters;
19  vector <StdString> CWorkflowGraph::fields;
20  vector <pair<int, int> > CWorkflowGraph::fieldsToFilters;
21
22  CWorkflowGraph::CWorkflowGraph()
23  { }
24
25  /*!
26   * Reorganize information collected by XIOS for visualization.
27   */
28  void CWorkflowGraph::buildStaticWorkflow()
29  TRY
30  {
31    // Create a list of filters (graph nodes)
32    if(mapFilters_ptr==0) mapFilters_ptr = new std::unordered_map <int, StdString>;
33    if(mapFieldToFilters_ptr==0) mapFieldToFilters_ptr = new std::unordered_map <StdString, vector <int > >;
34    size_t filterIdx = 0;
35    filters.resize(mapFilters_ptr->size());
36    for (auto it=mapFilters_ptr->begin(); it != mapFilters_ptr->end(); it++)
37    {
38      filters[it->first]=it->second;
39    }
40
41    // Create a list of fields and their filter connectivity (graph edges and edge-to-node connectivity)
42    for (auto it=mapFieldToFilters_ptr->begin(); it != mapFieldToFilters_ptr->end(); it++)
43    {
44      for (size_t i = 0; i < (it->second.size() - 1); i+=2)
45      {
46        fieldsToFilters.push_back(make_pair(it->second[i],it->second[i+1]));
47        fields.push_back(it->first);
48      }
49    }
50  }
51  CATCH
52
53
54  void CWorkflowGraph::showStaticWorkflow()
55  TRY
56  {
57    if(mapFilters_ptr!=0 && !mapFilters_ptr->empty())
58    for (auto it=mapFilters_ptr->begin(); it != mapFilters_ptr->end(); it++)
59    {
60      std::cout<<"mapFilters_ptr["<<it->first<<"]="<<it->second<<std::endl;
61    }
62    else std::cout<<"mapFilters_ptr empty"<<std::endl;
63
64    if(mapFieldToFilters_ptr!=0 && !mapFieldToFilters_ptr->empty())
65    for (auto it=mapFieldToFilters_ptr->begin(); it != mapFieldToFilters_ptr->end(); it++)
66    {
67      for (size_t i = 0; i < it->second.size(); i++)
68      {
69        std::cout<<"mapFieldToFilters_ptr["<<it->first<<"]["<<i<<"] = "<<it->second[i]<<std::endl;
70      }
71    }
72    else std::cout<<"mapFieldToFilters_ptr empty"<<mapFieldToFilters_ptr<<std::endl;
73
74    if(mapFilterTimestamps_ptr!=0 && !mapFilterTimestamps_ptr->empty())
75    for (auto it=mapFilterTimestamps_ptr->begin(); it != mapFilterTimestamps_ptr->end(); it++)
76    {
77      for (size_t i = 0; i < it->second.size(); i++)
78      {
79        std::cout<<"mapFilterTimestamps_ptr["<<it->first<<"]["<<i<<"] = "<<it->second[i]<<std::endl;
80      }
81    }
82    else std::cout<<"mapFilterTimestamps_ptr empty"<<std::endl;
83
84    if(timestamps_ptr!=0 && !timestamps_ptr->empty())
85    for (auto it=timestamps_ptr->begin(); it != timestamps_ptr->end(); it++)
86    {
87      std::cout<<"timestamps_ptr = "<<*it<<std::endl;
88    }
89    else std::cout<<"timestamps_ptr empty"<<std::endl;
90
91  }
92  CATCH
93
94}
Note: See TracBrowser for help on using the repository browser.