- Timestamp:
- 03/22/18 10:43:20 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/branch_openmp/src/transformation/axis_algorithm_reduce_domain.cpp
r1339 r1460 13 13 #include "grid.hpp" 14 14 #include "grid_transformation_factory_impl.hpp" 15 //#include "reduction.hpp" 15 16 16 17 namespace xios { … … 73 74 CReductionAlgorithm::initReductionOperation(); 74 75 } 76 //reduction_ = CReductionAlgorithm::createOperation(CReductionAlgorithm::ReductionOperations[op]); 75 77 reduction_ = CReductionAlgorithm::createOperation(CReductionAlgorithm::ReductionOperations_ptr->at(op)); 78 local = algo->local ; 76 79 } 77 80 … … 107 110 if (iDir == dir_) 108 111 { 109 int nbAxisIdx = axisDstIndex.numElements(); 110 for (int idxAxis = 0; idxAxis < nbAxisIdx; ++idxAxis) 112 if (local) 111 113 { 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) 116 120 { 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 } 119 141 } 120 142 } … … 123 145 { 124 146 int nbAxisIdx = axisDstIndex.numElements(); 125 for (int idxAxis = 0; idxAxis < nbAxisIdx; ++idxAxis)147 if (local) 126 148 { 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) 131 155 { 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 } 134 175 } 135 176 }
Note: See TracChangeset
for help on using the changeset viewer.