Changeset 844 for XIOS/trunk/extern/remap/src/mapper.cpp
- Timestamp:
- 04/27/16 17:23:48 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/extern/remap/src/mapper.cpp
r694 r844 109 109 } 110 110 111 vector<double> Mapper::computeWeights(int interpOrder )111 vector<double> Mapper::computeWeights(int interpOrder, bool renormalize) 112 112 { 113 113 vector<double> timings; … … 152 152 if (mpiRank == 0 && verbose) cout << "Remapping..." << endl; 153 153 tic = cputime(); 154 nWeights = remap(&targetElements[0], targetElements.size(), interpOrder );154 nWeights = remap(&targetElements[0], targetElements.size(), interpOrder, renormalize); 155 155 timings.push_back(cputime() - tic); 156 156 … … 166 166 @param order is the order of interpolaton (must be 1 or 2). 167 167 */ 168 int Mapper::remap(Elt *elements, int nbElements, int order )168 int Mapper::remap(Elt *elements, int nbElements, int order, bool renormalize) 169 169 { 170 170 int mpiSize, mpiRank; … … 281 281 { 282 282 sendGrad[rank][jj] = sstree.localElements[recvElement[rank][j]].grad; 283 // cout<<"grad "<<jj<<" "<<recvElement[rank][j]<<" "<<sendGrad[rank][jj]<<" "<<sstree.localElements[recvElement[rank][j]].grad<<endl ; 283 284 sendNeighIds[rank][jj] = sstree.localElements[recvElement[rank][j]].src_id; 284 285 jj++; … … 286 287 { 287 288 sendGrad[rank][jj] = sstree.localElements[recvElement[rank][j]].gradNeigh[i]; 288 sendNeighIds[rank][jj] = sstree.localElements[recvElement[rank][j]].neighId[i]; 289 // cout<<"grad "<<jj<<" "<<sendGrad[rank][jj]<<" "<<sstree.localElements[recvElement[rank][j]].grad<<endl ; 290 sendNeighIds[rank][jj] = sstree.localElements[recvElement[rank][j]].neighId[i]; 289 291 jj++; 290 292 } … … 368 370 int kk = n1 * (NMAX + 1) + k; 369 371 GloId neighID = recvNeighIds[rank][kk]; 370 if (neighID.ind == -1) break; 371 wgt_map[neighID] += 372 w * scalarprod(recvGrad[rank][kk], (*it)->x); 372 if (neighID.ind != -1) wgt_map[neighID] += w * scalarprod(recvGrad[rank][kk], (*it)->x); 373 373 } 374 374 375 375 } 376 376 } 377 for (map<GloId,double>::iterator it = wgt_map.begin(); it != wgt_map.end(); it++) 378 { 379 this->remapMatrix[i] = it->second / e.area; 377 378 double renorm=0; 379 if (renormalize) 380 for (map<GloId,double>::iterator it = wgt_map.begin(); it != wgt_map.end(); it++) renorm+=it->second / e.area; 381 else renorm=1. ; 382 383 for (map<GloId,double>::iterator it = wgt_map.begin(); it != wgt_map.end(); it++) 384 { 385 this->remapMatrix[i] = (it->second / e.area) / renorm; 380 386 this->srcAddress[i] = it->first.ind; 381 387 this->srcRank[i] = it->first.rank; … … 669 675 } 670 676 677 /* 671 678 for (int i = 0; i < elt->n; i++) 672 679 { … … 674 681 error_exit("neighbour not found"); 675 682 } 683 */ 676 684 } 677 685 }
Note: See TracChangeset
for help on using the changeset viewer.