- Timestamp:
- 11/02/15 11:46:25 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/transformation/domain_algorithm_generate_rectilinear.cpp
r727 r775 17 17 18 18 CDomainAlgorithmGenerateRectilinear::CDomainAlgorithmGenerateRectilinear(CDomain* domainDestination, CDomain* domainSource, 19 CGrid* gridSource, CGenerateRectilinearDomain* genRectDomain) 20 : CDomainAlgorithmTransformation(domainDestination, domainSource), gridSrc_(gridSource), nbDomainDistributedPart_(0) 19 CGrid* gridDest, CGrid* gridSource, 20 CGenerateRectilinearDomain* genRectDomain) 21 : CDomainAlgorithmTransformation(domainDestination, domainSource), nbDomainDistributedPart_(0) 21 22 { 22 23 genRectDomain->checkValid(domainDestination); 23 computeDistributionGridSource(); 24 if (0 != gridSource) computeDistributionGridSource(gridSource); 25 else 26 { 27 computeDistributionGridDestination(gridDest); 28 } 24 29 fillInAttributesDomainDestination(); 25 30 } … … 36 41 Calculate the number of distributed parts on domain source 37 42 */ 38 void CDomainAlgorithmGenerateRectilinear::computeDistributionGridSource( )43 void CDomainAlgorithmGenerateRectilinear::computeDistributionGridSource(CGrid* gridSrc) 39 44 { 40 45 CContext* context = CContext::getCurrent(); 41 46 CContextClient* client = context->client; 42 47 43 std::vector<CDomain*> domListSrcP = gridSrc _->getDomains();44 std::vector<CAxis*> axisListSrcP = gridSrc _->getAxis();48 std::vector<CDomain*> domListSrcP = gridSrc->getDomains(); 49 std::vector<CAxis*> axisListSrcP = gridSrc->getAxis(); 45 50 46 51 for (int i = 0; i < domListSrcP.size(); ++i) // support we have only domain, more than one, for now, dont know how to process … … 50 55 else 51 56 { 52 gridSrc _->solveAxisRef(false);57 gridSrc->solveAxisRef(false); 53 58 int nbAxis = axisListSrcP.size(); 54 59 std::vector<int> nbLocalAxis(nbAxis, 0); … … 90 95 91 96 /*! 97 Compute the distribution of the domain destination by using available information provided by user such as n_distributed_partition of axis 98 */ 99 void CDomainAlgorithmGenerateRectilinear::computeDistributionGridDestination(CGrid* gridDest) 100 { 101 // For now, just suppose that the grid contains only one domain 102 std::vector<CAxis*> axisListDestP = gridDest->getAxis(); 103 int nbPartition = 1, idx = 0; 104 for (int i = 0; i < gridDest->axis_domain_order.numElements(); ++i) 105 { 106 if (false == (gridDest->axis_domain_order)(i)) 107 { 108 nbPartition *= (axisListDestP[idx]->n_distributed_partition.isEmpty()) ? 1: (axisListDestP[idx]->n_distributed_partition.getValue()); 109 ++idx; 110 } 111 } 112 113 CContext* context = CContext::getCurrent(); 114 CContextClient* client = context->client; 115 int modPart = (client->clientSize) % nbPartition; 116 if (0 != modPart) 117 ERROR("CDomainAlgorithmGenerateRectilinear::computeDistributionGridDestination(CGrid* gridDest)", 118 << "The grid " <<gridDest->getId() << " is not well-distributed. There is an incompatibility between distribution of axis and domain."); 119 nbDomainDistributedPart_ = client->clientSize/nbPartition; 120 121 } 122 123 /*! 92 124 Fill in all necessary attributes of domain destination and their values 93 125 */
Note: See TracChangeset
for help on using the changeset viewer.