Ignore:
Timestamp:
04/27/16 17:23:48 (8 years ago)
Author:
ymipsl
Message:

Management of masked cell for remapping algorithm.

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/extern/remap/src/mapper.cpp

    r694 r844  
    109109} 
    110110 
    111 vector<double> Mapper::computeWeights(int interpOrder) 
     111vector<double> Mapper::computeWeights(int interpOrder, bool renormalize) 
    112112{ 
    113113        vector<double> timings; 
     
    152152        if (mpiRank == 0 && verbose) cout << "Remapping..." << endl; 
    153153        tic = cputime(); 
    154         nWeights = remap(&targetElements[0], targetElements.size(), interpOrder); 
     154        nWeights = remap(&targetElements[0], targetElements.size(), interpOrder, renormalize); 
    155155        timings.push_back(cputime() - tic); 
    156156 
     
    166166   @param order is the order of interpolaton (must be 1 or 2). 
    167167*/ 
    168 int Mapper::remap(Elt *elements, int nbElements, int order) 
     168int Mapper::remap(Elt *elements, int nbElements, int order, bool renormalize) 
    169169{ 
    170170        int mpiSize, mpiRank; 
     
    281281                                { 
    282282                                        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 ; 
    283284                                        sendNeighIds[rank][jj] = sstree.localElements[recvElement[rank][j]].src_id; 
    284285                                        jj++; 
     
    286287                                        { 
    287288                                                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]; 
    289291                                                jj++; 
    290292                                        } 
     
    368370                                        int kk = n1 * (NMAX + 1) + k; 
    369371                                        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); 
    373373                                } 
    374374 
    375375                        } 
    376376                } 
    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; 
    380386                        this->srcAddress[i] = it->first.ind; 
    381387                        this->srcRank[i] = it->first.rank; 
     
    669675                } 
    670676 
     677/* 
    671678                for (int i = 0; i < elt->n; i++) 
    672679                { 
     
    674681                                error_exit("neighbour not found"); 
    675682                } 
     683*/ 
    676684        } 
    677685} 
Note: See TracChangeset for help on using the changeset viewer.