Changeset 1999 for XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_reduce_axis.cpp
- Timestamp:
- 01/03/21 18:00:43 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_reduce_axis.cpp
r1988 r1999 12 12 #include "grid.hpp" 13 13 #include "grid_transformation_factory_impl.hpp" 14 #include "reduction.hpp" 14 15 15 16 16 namespace xios { … … 47 47 48 48 CAxisAlgorithmReduceAxis::CAxisAlgorithmReduceAxis(bool isSource, CAxis* axisDestination, CAxis* axisSource, CReduceAxisToAxis* algo) 49 : CA xisAlgorithmTransformation(isSource, axisDestination, axisSource), reduction_(0)49 : CAlgorithmTransformationReduce(isSource) 50 50 TRY 51 51 { 52 52 eliminateRedondantSrc_= false ; 53 53 algo->checkValid(axisDestination, axisSource); 54 StdString op; 54 55 55 switch (algo->operation) 56 56 { 57 57 case CReduceAxisToAxis::operation_attr::sum: 58 op = "sum";58 operator_ = EReduction::sum; 59 59 break; 60 60 case CReduceAxisToAxis::operation_attr::min: 61 op = "min";61 operator_ = EReduction::min; 62 62 break; 63 63 case CReduceAxisToAxis::operation_attr::max: 64 op = "max";64 operator_ = EReduction::max; 65 65 break; 66 66 case CReduceAxisToAxis::operation_attr::average: 67 op = "average";67 operator_ = EReduction::average; 68 68 break; 69 69 default: … … 73 73 << "Axis destination " << axisDestination->getId()); 74 74 75 TransformationIndexMap& transMap = this->transformationMapping_; 76 CArray<int,1>& axisDstIndex = axisDestination->index; 77 int nbAxisIdx = axisDstIndex.numElements(); 78 for (int idxAxis = 0; idxAxis < nbAxisIdx; ++idxAxis) 79 { 80 int globalAxisIdx = axisDstIndex(idxAxis); 81 transMap[globalAxisIdx].resize(1); 82 transMap[globalAxisIdx][0]=globalAxisIdx ; 83 } 84 75 85 } 76 77 reduction_ = CReductionAlgorithm::createOperation(CReductionAlgorithm::ReductionOperations[op]); 86 87 axisDestination->checkAttributes() ; 88 this->computeAlgorithm(axisSource->getLocalView(CElementView::WORKFLOW), axisDestination->getLocalView(CElementView::WORKFLOW)) ; 78 89 } 79 90 CATCH 80 91 81 void CAxisAlgorithmReduceAxis::apply(const std::vector<std::pair<int,double> >& localIndex,82 const double* dataInput,83 CArray<double,1>& dataOut,84 std::vector<bool>& flagInitial,85 bool ignoreMissingValue, bool firstPass)86 TRY87 {88 reduction_->apply(localIndex, dataInput, dataOut, flagInitial, ignoreMissingValue, firstPass);89 }90 CATCH91 92 void CAxisAlgorithmReduceAxis::updateData(CArray<double,1>& dataOut)93 TRY94 {95 reduction_->updateData(dataOut);96 }97 CATCH98 92 99 93 CAxisAlgorithmReduceAxis::~CAxisAlgorithmReduceAxis() 100 94 TRY 101 95 { 102 if (0 != reduction_) delete reduction_;96 103 97 } 104 98 CATCH 105 99 106 void CAxisAlgorithmReduceAxis::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs)107 TRY108 {109 this->transformationMapping_.resize(1);110 this->transformationWeight_.resize(1);111 112 TransformationIndexMap& transMap = this->transformationMapping_[0];113 TransformationWeightMap& transWeight = this->transformationWeight_[0];114 CArray<int,1>& axisDstIndex = axisDest_->index;115 int nbAxisIdx = axisDstIndex.numElements();116 for (int idxAxis = 0; idxAxis < nbAxisIdx; ++idxAxis)117 {118 int globalAxisIdx = axisDstIndex(idxAxis);119 transMap[globalAxisIdx].resize(1);120 transWeight[globalAxisIdx].resize(1);121 transMap[globalAxisIdx][0]=globalAxisIdx ;122 transWeight[globalAxisIdx][0] = 1.0 ;123 }124 }125 CATCH126 100 127 101 }
Note: See TracChangeset
for help on using the changeset viewer.