Changeset 569 for XIOS/trunk/src/node/domain.cpp
- Timestamp:
- 03/10/15 10:49:13 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/node/domain.cpp
r553 r569 15 15 #include "array_new.hpp" 16 16 #include "server_distribution_description.hpp" 17 #include "client_server_mapping_distributed.hpp" 17 18 18 19 namespace xios { … … 667 668 int zoom_jend=zoom_jbegin+zoom_nj-1 ; 668 669 669 std::vector<int> nGlobDomain(2);670 nGlobDomain[0] = ni_glo.getValue();671 nGlobDomain[1] = nj_glo.getValue();672 CServerDistributionDescription serverDescription(nGlobDomain);673 serverDescription.computeServerDistribution(nbServer, doComputeGlobalIndexServer);674 670 675 671 // Precompute number of index … … 706 702 } 707 703 708 CClientServerMapping clientServerMap; 709 clientServerMap.computeServerIndexMapping(globalIndexDomain, serverDescription.getGlobalIndex()); 710 const std::map<int, std::vector<size_t> >& globalIndexDomainOnServer = clientServerMap.getGlobalIndexOnServer(); 704 std::vector<int> nGlobDomain(2); 705 nGlobDomain[0] = ni_glo.getValue(); 706 nGlobDomain[1] = nj_glo.getValue(); 707 size_t globalSizeIndex = 1, indexBegin, indexEnd; 708 int range, clientSize = client->clientSize; 709 for (int i = 0; i < nGlobDomain.size(); ++i) globalSizeIndex *= nGlobDomain[i]; 710 indexBegin = 0; 711 for (int i = 0; i < clientSize; ++i) 712 { 713 range = globalSizeIndex / clientSize; 714 if (i < (globalSizeIndex%clientSize)) ++range; 715 if (i == client->clientRank) break; 716 indexBegin += range; 717 } 718 indexEnd = indexBegin + range - 1; 719 720 CServerDistributionDescription serverDescription(nGlobDomain); 721 serverDescription.computeServerGlobalIndexInRange(nbServer, std::make_pair<size_t,size_t>(indexBegin, indexEnd)); 722 CClientServerMapping* clientServerMap = new CClientServerMappingDistributed(serverDescription.getGlobalIndexRange(), 723 client->intraComm); 724 clientServerMap->computeServerIndexMapping(globalIndexDomain); 725 const std::map<int, std::vector<size_t> >& globalIndexDomainOnServer = clientServerMap->getGlobalIndexOnServer(); 711 726 std::vector<int> connectedServerRank; 712 727 for (std::map<int, std::vector<size_t> >::const_iterator it = globalIndexDomainOnServer.begin(); it != globalIndexDomainOnServer.end(); ++it) { 713 728 connectedServerRank.push_back(it->first); 714 729 } 715 nbConnectedClients_ = clientServerMap .computeConnectedClients(client->serverSize, client->clientSize, client->intraComm, connectedServerRank);730 nbConnectedClients_ = clientServerMap->computeConnectedClients(client->serverSize, client->clientSize, client->intraComm, connectedServerRank); 716 731 indSrv_ = globalIndexDomainOnServer; 732 733 delete clientServerMap; 717 734 } 718 735
Note: See TracChangeset
for help on using the changeset viewer.