source: XIOS/trunk/src/transformation/transformation_mapping.hpp @ 829

Last change on this file since 829 was 829, checked in by mhnguyen, 8 years ago

Refactoring transformation code

+) On exchanging information during transformation, not only global index are sent but also local index
+) Correct a bug in distributed hash table (dht)
+) Add new type for dht
+) Clean up some redundant codes

Test
+) On Curie
+) Every test passes
+) Code runs faster in some cases (up to 30%)

File size: 2.3 KB
RevLine 
[623]1/*!
2   \file transformation_mapping.hpp
3   \author Ha NGUYEN
4   \since 14 May 2015
5   \date 09 June 2015
6
7   \brief Take charge of communication among clients to exchange transformed data.
8 */
[620]9#ifndef __XIOS_TRANSFORMATION_MAPPING_HPP__
10#define __XIOS_TRANSFORMATION_MAPPING_HPP__
11
12#include <map>
13#include <set>
14#include "grid.hpp"
[630]15#include "axis.hpp"
[620]16#include "array_new.hpp"
17#include "client_server_mapping_distributed.hpp"
18
19namespace xios {
20
21/*!
22  \class CTransformationMapping
23  This class is in charge of transfer the global index form grid from grid source to grid destination in a rather generic way.
24In order to make a transformation, the grid destination will make a request to grid source about the global indexes which it needs.
25The same discovering algorithm as the case of client-server is applied to find the corresponding client which contains the demanding global index.
26*/
27class CTransformationMapping
28{
29public:
[829]30  typedef boost::unordered_map<size_t, std::vector<std::pair<int, std::pair<size_t,double> > > > DestinationIndexMap;
31  typedef boost::unordered_map<int,std::vector<std::vector<std::pair<int, std::pair<size_t,double> > > > > ReceivedIndexMap;
32  typedef boost::unordered_map<int,std::vector<std::pair<int, size_t> > > SentIndexMap;
33
34public:
[620]35  /** Default constructor */
36  CTransformationMapping(CGrid* destination, CGrid* source);
[630]37  CTransformationMapping(CAxis* destination, CAxis* source);
38
[620]39  ~CTransformationMapping();
40
[829]41  void computeTransformationMapping(const DestinationIndexMap& globaIndexMapFromDestToSource);
42  const ReceivedIndexMap& getGlobalIndexReceivedOnGridDestMapping() const;
43  const SentIndexMap& getGlobalIndexSendToGridDestMapping() const;
[620]44
45protected:
46  CGrid* gridSource_;  // Grid source
47  CGrid* gridDestination_; // Grid destination demande the necessary global index from grid source
48
49  //! Global index mapping of grid source and grid destination between two clients
[829]50  CClientClientDHTPairIntInt* gridIndexClientClientMapping_;
[620]51
52  //! Mapping of client rank of grid source and global index received in grid destination
[829]53  ReceivedIndexMap globalIndexReceivedOnGridDestMapping_;
[620]54
55  //! Mapping of client rank of grid destination and global index to send from grid source
[829]56  SentIndexMap globalIndexSendToGridDestMapping_;
[620]57};
58
59}
60#endif // __XIOS_TRANSFORMATION_MAPPING_HPP__
Note: See TracBrowser for help on using the repository browser.