source: XIOS/dev/dev_olga/src/transformation/domain_algorithm_transformation.cpp @ 1204

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

Adding new transformation for scalar: Reducing an axis to a scalar

+) Add new xml node for new transformation
+) Add new algorithms for axis reduction
+) Make change in some place to make sure everything work fine

Test
+) On Curie
+) Tests pass and are correct

File size: 2.2 KB
Line 
1/*!
2   \file domain_algorithm_transformation.hpp
3   \author Ha NGUYEN
4   \since 02 Jul 2015
5   \date 02 Jul 2015
6
7   \brief Interface for all domain transformation algorithms.
8 */
9
10#include "domain_algorithm_transformation.hpp"
11#include "context.hpp"
12#include "context_client.hpp"
13#include "domain.hpp"
14
15namespace xios {
16
17CDomainAlgorithmTransformation::CDomainAlgorithmTransformation(CDomain* domainDestination, CDomain* domainSource)
18 : CGenericAlgorithmTransformation(), domainDest_(domainDestination), domainSrc_(domainSource)
19{
20}
21
22CDomainAlgorithmTransformation::~CDomainAlgorithmTransformation()
23{
24}
25
26void CDomainAlgorithmTransformation::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs)
27{
28}
29
30/*!
31  Compute global index of domain on different processes
32  \param [in] globalDomainIndex global index of domain source
33  \param [out] globalDomainIndexOnProc processes which contain the corresponding global index of domain source
34*/
35void CDomainAlgorithmTransformation::computeExchangeGlobalIndex(const CArray<size_t,1>& globalDomainIndex,
36                                                                int elementType,
37                                                                CClientClientDHTInt::Index2VectorInfoTypeMap& globalDomainIndexOnProc)
38{
39  CContext* context = CContext::getCurrent();
40  CContextClient* client=context->client;
41  int clientRank = client->clientRank;
42  int clientSize = client->clientSize;
43
44  int niGlob = domainSrc_->ni_glo.getValue();
45  int njGlob = domainSrc_->nj_glo.getValue();
46  size_t globalIndex;
47  int nIndexSize = domainSrc_->i_index.numElements(), i_ind, j_ind;
48  CClientClientDHTInt::Index2VectorInfoTypeMap globalIndex2ProcRank;
49  globalIndex2ProcRank.rehash(std::ceil(nIndexSize/globalIndex2ProcRank.max_load_factor()));
50  for (int idx = 0; idx < nIndexSize; ++idx)
51  {
52    i_ind=domainSrc_->i_index(idx) ;
53    j_ind=domainSrc_->j_index(idx) ;
54
55    globalIndex = i_ind + j_ind * niGlob;
56    globalIndex2ProcRank[globalIndex].push_back(clientRank);
57  }
58
59  CClientClientDHTInt dhtIndexProcRank(globalIndex2ProcRank, client->intraComm);
60  dhtIndexProcRank.computeIndexInfoMapping(globalDomainIndex);
61  globalDomainIndexOnProc = dhtIndexProcRank.getInfoIndexMap();
62}
63
64}
Note: See TracBrowser for help on using the repository browser.