Ignore:
Timestamp:
02/01/22 15:28:48 (2 years ago)
Author:
ymipsl
Message:

Improve reduction transformation

  • make the difference between reduction over geometry or reduction between process.
  • geometrical reduction :

domain -> axis
axis -> scalar
domain -> scalar

  • reduction across processes for redondant geometrical cell :

axis -> axis
scalar -> scalar

Reduction can be local (only for the geometrical cell owned by current process) or global, using the "local" attribute (bool) over the reduction.

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/reduce_transform_connector.hpp

    r2267 r2291  
    6868      { 
    6969        vector<bool> touched(repeat* dstSlice, false) ; 
    70         int pos=0 ; 
    71         for(int r=0;r<repeat;r++, input+=srcSlice, output+=dstSlice, pos+=dstSlice) 
    72         { 
    73           const double* in = input; 
    74           double* out = output ; 
    75           int k=0 ; 
     70        int posr=0 ; 
     71        for(int r=0;r<repeat;r++, input+=srcSlice, output+=dstSlice, posr+=dstSlice) 
     72        { 
     73          const double* in = input; 
     74          double* out = output ; 
     75          int k=0 ; 
     76          int pos = posr ; 
    7677          for(int i=0; i<dstSize_; i++, out+=sizeT, pos+=sizeT) 
    7778          { 
     
    9798 
    9899        output = dataOut.dataFirst()  ; 
    99         pos=0 ; 
    100         for(int r=0;r<repeat;r++, input+=srcSlice, output+=dstSlice, pos+=dstSlice) 
    101         { 
    102           const double* in = input; 
    103           double* out = output ; 
    104           int k=0 ; 
    105           int pos=0 ; 
     100        posr=0 ; 
     101        for(int r=0;r<repeat;r++, input+=srcSlice, output+=dstSlice, posr+=dstSlice) 
     102        { 
     103          const double* in = input; 
     104          double* out = output ; 
     105          int k=0 ; 
     106          int pos=posr ; 
    106107          for(int i=0; i<dstSize_; i++, out+=sizeT, pos+=sizeT) 
    107108              for(int j=0 ; j<nSrc_[i] ; j++,k++) 
     
    144145      { 
    145146        vector<bool> touched(repeat* dstSlice, false) ; 
    146         int pos=0 ; 
    147         for(int r=0;r<repeat;r++, input+=srcSlice, output+=dstSlice, pos+=dstSlice) 
    148         { 
    149           const double* in = input; 
    150           double* out = output ; 
    151           int k=0 ; 
     147        int posr=0 ; 
     148        for(int r=0;r<repeat;r++, input+=srcSlice, output+=dstSlice, posr+=dstSlice) 
     149        { 
     150          const double* in = input; 
     151          double* out = output ; 
     152          int k=0 ; 
     153          int pos=posr ; 
    152154          for(int i=0; i<dstSize_; i++, out+=sizeT, pos+=sizeT) 
    153155          { 
     
    173175 
    174176        output = dataOut.dataFirst()  ; 
    175         pos=0 ; 
    176         for(int r=0;r<repeat;r++, input+=srcSlice, output+=dstSlice, pos+=dstSlice) 
    177         { 
    178           const double* in = input; 
    179           double* out = output ; 
    180           int k=0 ; 
    181           int pos=0 ; 
     177        posr=0 ; 
     178        for(int r=0;r<repeat;r++, input+=srcSlice, output+=dstSlice, posr+=dstSlice) 
     179        { 
     180          const double* in = input; 
     181          double* out = output ; 
     182          int k=0 ; 
     183          int pos=posr ; 
    182184          for(int i=0; i<dstSize_; i++, out+=sizeT, pos+=sizeT) 
    183185              for(int j=0 ; j<nSrc_[i] ; j++,k++) 
     
    220222      { 
    221223        vector<bool> touched(repeat* dstSlice, false) ; 
    222         int pos=0 ; 
    223         for(int r=0;r<repeat;r++, input+=srcSlice, output+=dstSlice, pos+=dstSlice) 
    224         { 
    225           const double* in = input; 
    226           double* out = output ; 
    227           int k=0 ; 
     224        int posr=0 ; 
     225        for(int r=0;r<repeat;r++, input+=srcSlice, output+=dstSlice, posr+=dstSlice) 
     226        { 
     227          const double* in = input; 
     228          double* out = output ; 
     229          int k=0 ; 
     230          int pos=posr ; 
    228231          for(int i=0; i<dstSize_; i++, out+=sizeT, pos+=sizeT) 
    229232          { 
     
    249252 
    250253        output = dataOut.dataFirst()  ; 
    251         pos=0 ; 
    252         for(int r=0;r<repeat;r++, input+=srcSlice, output+=dstSlice, pos+=dstSlice) 
    253         { 
    254           const double* in = input; 
    255           double* out = output ; 
    256           int k=0 ; 
    257           int pos=0 ; 
     254        posr=0 ; 
     255        for(int r=0;r<repeat;r++, input+=srcSlice, output+=dstSlice, posr+=dstSlice) 
     256        { 
     257          const double* in = input; 
     258          double* out = output ; 
     259          int k=0 ; 
     260          int pos=posr ; 
    258261          for(int i=0; i<dstSize_; i++, out+=sizeT, pos+=sizeT) 
    259262              for(int j=0 ; j<nSrc_[i] ; j++,k++) 
     
    296299      { 
    297300        vector<int> touched(repeat* dstSlice, 0) ; 
    298         int pos=0 ; 
    299         for(int r=0;r<repeat;r++, input+=srcSlice, output+=dstSlice, pos+=dstSlice) 
    300         { 
    301           const double* in = input; 
    302           double* out = output ; 
    303           int k=0 ; 
     301        int posr=0 ; 
     302        for(int r=0;r<repeat;r++, input+=srcSlice, output+=dstSlice, posr+=dstSlice) 
     303        { 
     304          const double* in = input; 
     305          double* out = output ; 
     306          int k=0 ; 
     307          int pos=posr ; 
    304308          for(int i=0; i<dstSize_; i++, out+=sizeT, pos+=sizeT) 
    305309          { 
     
    331335 
    332336        output = dataOut.dataFirst()  ; 
    333         pos=0 ; 
    334         for(int r=0;r<repeat;r++, input+=srcSlice, output+=dstSlice, pos+=dstSlice) 
    335         { 
    336           const double* in = input; 
    337           double* out = output ; 
    338           int k=0 ; 
    339           int pos=0 ; 
     337        posr=0 ; 
     338        for(int r=0;r<repeat;r++, input+=srcSlice, output+=dstSlice, posr+=dstSlice) 
     339        { 
     340          const double* in = input; 
     341          double* out = output ; 
     342          int k=0 ; 
     343          int pos=posr ; 
    340344          for(int i=0; i<dstSize_; i++, out+=sizeT, pos+=sizeT) 
    341345              for(int j=0 ; j<nSrc_[i] ; j++,k++) 
Note: See TracChangeset for help on using the changeset viewer.