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

Last change on this file since 1620 was 1612, checked in by oabramkina, 19 months ago

Dev: adding exception handling.

To activate it, compilation flag -DXIOS_EXCEPTION should be added.

File size: 2.3 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)
38TRY
39{
40  CContext* context = CContext::getCurrent();
41  CContextClient* client=context->client;
42  int clientRank = client->clientRank;
43  int clientSize = client->clientSize;
44
45  int niGlob = domainSrc_->ni_glo.getValue();
46  int njGlob = domainSrc_->nj_glo.getValue();
47  size_t globalIndex;
48  int nIndexSize = domainSrc_->i_index.numElements(), i_ind, j_ind;
49  CClientClientDHTInt::Index2VectorInfoTypeMap globalIndex2ProcRank;
50  globalIndex2ProcRank.rehash(std::ceil(nIndexSize/globalIndex2ProcRank.max_load_factor()));
51  CArray<bool,1>& localMask=domainSrc_->localMask ;
52  for (int idx = 0; idx < nIndexSize; ++idx)
53  {
54    if (localMask(idx))
55    {
56      i_ind=domainSrc_->i_index(idx) ;
57      j_ind=domainSrc_->j_index(idx) ;
58
59      globalIndex = i_ind + j_ind * niGlob;
60      globalIndex2ProcRank[globalIndex].push_back(clientRank);
61    }
62  }
63
64  CClientClientDHTInt dhtIndexProcRank(globalIndex2ProcRank, client->intraComm);
65  dhtIndexProcRank.computeIndexInfoMapping(globalDomainIndex);
66  globalDomainIndexOnProc = dhtIndexProcRank.getInfoIndexMap();
67}
68CATCH
69
70}
Note: See TracBrowser for help on using the repository browser.