Ignore:
Timestamp:
03/22/18 10:43:20 (6 years ago)
Author:
yushan
Message:

branch_openmp merged with XIOS_DEV_CMIP6@1459

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/branch_openmp/src/transformation/axis_algorithm_reduce_domain.cpp

    r1339 r1460  
    1313#include "grid.hpp" 
    1414#include "grid_transformation_factory_impl.hpp" 
     15//#include "reduction.hpp" 
    1516 
    1617namespace xios { 
     
    7374    CReductionAlgorithm::initReductionOperation(); 
    7475  } 
     76  //reduction_ = CReductionAlgorithm::createOperation(CReductionAlgorithm::ReductionOperations[op]); 
    7577  reduction_ = CReductionAlgorithm::createOperation(CReductionAlgorithm::ReductionOperations_ptr->at(op)); 
     78  local = algo->local ; 
    7679} 
    7780 
     
    107110  if (iDir == dir_) 
    108111  { 
    109     int nbAxisIdx = axisDstIndex.numElements(); 
    110     for (int idxAxis = 0; idxAxis < nbAxisIdx; ++idxAxis) 
     112    if (local) 
    111113    { 
    112       int globalAxisIdx = axisDstIndex(idxAxis); 
    113       transMap[globalAxisIdx].resize(ni_glo); 
    114       transWeight[globalAxisIdx].resize(ni_glo); 
    115       for (int idx = 0; idx < ni_glo; ++idx) 
     114      const CArray<int, 1>& i_index = domainSrc_-> i_index.getValue() ; 
     115      const CArray<int, 1>& j_index = domainSrc_-> j_index.getValue() ; 
     116      const CArray<bool,1>& localMask = domainSrc_-> localMask ; 
     117      int nbDomainIdx = i_index.numElements(); 
     118       
     119      for (int idxDomain = 0; idxDomain < nbDomainIdx; ++idxDomain) 
    116120      { 
    117         transMap[globalAxisIdx][idx] = globalAxisIdx * ni_glo + idx; 
    118         transWeight[globalAxisIdx][idx] = 1.0; 
     121        if (localMask(idxDomain)) 
     122        {  
     123          transMap[j_index(idxDomain)].push_back(j_index(idxDomain)* ni_glo + i_index(idxDomain)); 
     124          transWeight[j_index(idxDomain)].push_back(1.0) ; 
     125        } 
     126      } 
     127    } 
     128    else 
     129    { 
     130      int nbAxisIdx = axisDstIndex.numElements(); 
     131      for (int idxAxis = 0; idxAxis < nbAxisIdx; ++idxAxis) 
     132      { 
     133        int globalAxisIdx = axisDstIndex(idxAxis); 
     134        transMap[globalAxisIdx].resize(ni_glo); 
     135        transWeight[globalAxisIdx].resize(ni_glo); 
     136        for (int idx = 0; idx < ni_glo; ++idx) 
     137        { 
     138          transMap[globalAxisIdx][idx] = globalAxisIdx * ni_glo + idx; 
     139          transWeight[globalAxisIdx][idx] = 1.0; 
     140        } 
    119141      } 
    120142    } 
     
    123145  { 
    124146    int nbAxisIdx = axisDstIndex.numElements(); 
    125     for (int idxAxis = 0; idxAxis < nbAxisIdx; ++idxAxis) 
     147    if (local) 
    126148    { 
    127       int globalAxisIdx = axisDstIndex(idxAxis); 
    128       transMap[globalAxisIdx].resize(nj_glo); 
    129       transWeight[globalAxisIdx].resize(nj_glo); 
    130       for (int idx = 0; idx < nj_glo; ++idx) 
     149      const CArray<int, 1>& i_index = domainSrc_-> i_index.getValue() ; 
     150      const CArray<int, 1>& j_index = domainSrc_-> j_index.getValue() ; 
     151      const CArray<bool,1>& localMask = domainSrc_-> localMask ; 
     152      int nbDomainIdx = i_index.numElements(); 
     153       
     154      for (int idxDomain = 0; idxDomain < nbDomainIdx; ++idxDomain) 
    131155      { 
    132         transMap[globalAxisIdx][idx] = globalAxisIdx + ni_glo*idx; 
    133         transWeight[globalAxisIdx][idx] = 1.0; 
     156        if (localMask(idxDomain)) 
     157        {  
     158          transMap[i_index(idxDomain)].push_back(j_index(idxDomain)* ni_glo + i_index(idxDomain)); 
     159          transWeight[i_index(idxDomain)].push_back(1.0) ; 
     160        } 
     161      } 
     162    } 
     163    else 
     164    { 
     165      for (int idxAxis = 0; idxAxis < nbAxisIdx; ++idxAxis) 
     166      { 
     167        int globalAxisIdx = axisDstIndex(idxAxis); 
     168        transMap[globalAxisIdx].resize(nj_glo); 
     169        transWeight[globalAxisIdx].resize(nj_glo); 
     170        for (int idx = 0; idx < nj_glo; ++idx) 
     171        { 
     172          transMap[globalAxisIdx][idx] = globalAxisIdx + ni_glo*idx; 
     173          transWeight[globalAxisIdx][idx] = 1.0; 
     174        } 
    134175      } 
    135176    } 
Note: See TracChangeset for help on using the changeset viewer.