Ignore:
Timestamp:
07/05/16 15:59:10 (8 years ago)
Author:
mhnguyen
Message:

Adding new transformation for scalar: Reducing an axis to a scalar

+) Add new xml node for new transformation
+) Add new algorithms for axis reduction
+) Make change in some place to make sure everything work fine

Test
+) On Curie
+) Tests pass and are correct

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/transformation/grid_transformation.cpp

    r887 r888  
    88 */ 
    99#include "grid_transformation.hpp" 
     10#include "reduce_axis_to_scalar.hpp" 
     11#include "scalar_algorithm_reduce_axis.hpp" 
    1012#include "axis_algorithm_inverse.hpp" 
    1113#include "axis_algorithm_zoom.hpp" 
     
    4244void CGridTransformation::selectScalarAlgo(int elementPositionInGrid, ETranformationType transType, int transformationOrder) 
    4345{ 
    44  
     46  int scalarSrcIndex = -1, axisSrcIndex = -1, domainSrcIndex = -1; 
     47  std::vector<CScalar*> scaListDestP = gridDestination_->getScalars(); 
     48  std::vector<CScalar*> scaListSrcP  = gridSource_->getScalars(); 
     49  std::vector<CAxis*> axisListSrcP   = gridSource_->getAxis(); 
     50  std::vector<CDomain*> domainListSrcP = gridSource_->getDomains(); 
     51 
     52  int scalarDstIndex =  elementPositionInGridDst2ScalarPosition_[elementPositionInGrid]; 
     53  CScalar::TransMapTypes trans = scaListDestP[scalarDstIndex]->getAllTransformations(); 
     54  CScalar::TransMapTypes::const_iterator it = trans.begin(); 
     55 
     56  for (int i = 0; i < transformationOrder; ++i, ++it) {}  // Find the correct transformation 
     57 
     58  CReduceAxisToScalar* reduceAxis = 0; 
     59  CGenericAlgorithmTransformation* algo = 0; 
     60  switch (transType) 
     61  { 
     62    case TRANS_REDUCE_AXIS_TO_SCALAR: 
     63      reduceAxis = dynamic_cast<CReduceAxisToScalar*> (it->second); 
     64      axisSrcIndex = elementPositionInGridSrc2AxisPosition_[elementPositionInGrid]; 
     65      algo = new CScalarAlgorithmReduceScalar(scaListDestP[scalarDstIndex], axisListSrcP[axisSrcIndex], reduceAxis); 
     66      break; 
     67    default: 
     68      break; 
     69  } 
     70  algoTransformation_.push_back(algo); 
    4571} 
    4672 
     
    5379void CGridTransformation::selectAxisAlgo(int elementPositionInGrid, ETranformationType transType, int transformationOrder) 
    5480{ 
     81  int axisSrcIndex = -1, domainSrcIndex = -1; 
    5582  std::vector<CAxis*> axisListDestP = gridDestination_->getAxis(); 
    5683  std::vector<CAxis*> axisListSrcP = gridSource_->getAxis(); 
    57  
    58   int axisIndex =  elementPositionInGridDst2AxisPosition_[elementPositionInGrid]; 
    59   CAxis::TransMapTypes trans = axisListDestP[axisIndex]->getAllTransformations(); 
     84  std::vector<CDomain*> domainListSrcP = gridSource_->getDomains(); 
     85 
     86  int axisDstIndex =  elementPositionInGridDst2AxisPosition_[elementPositionInGrid]; 
     87  CAxis::TransMapTypes trans = axisListDestP[axisDstIndex]->getAllTransformations(); 
    6088  CAxis::TransMapTypes::const_iterator it = trans.begin(); 
    6189 
     
    6997    case TRANS_INTERPOLATE_AXIS: 
    7098      interpAxis = dynamic_cast<CInterpolateAxis*> (it->second); 
    71       algo = new CAxisAlgorithmInterpolate(axisListDestP[axisIndex], axisListSrcP[axisIndex], interpAxis); 
     99      axisSrcIndex = elementPositionInGridSrc2AxisPosition_[elementPositionInGrid]; 
     100      algo = new CAxisAlgorithmInterpolate(axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], interpAxis); 
    72101      break; 
    73102    case TRANS_ZOOM_AXIS: 
    74103      zoomAxis = dynamic_cast<CZoomAxis*> (it->second); 
    75       algo = new CAxisAlgorithmZoom(axisListDestP[axisIndex], axisListSrcP[axisIndex], zoomAxis); 
     104      axisSrcIndex = elementPositionInGridSrc2AxisPosition_[elementPositionInGrid]; 
     105      algo = new CAxisAlgorithmZoom(axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], zoomAxis); 
    76106      break; 
    77107    case TRANS_INVERSE_AXIS: 
    78       algo = new CAxisAlgorithmInverse(axisListDestP[axisIndex], axisListSrcP[axisIndex]); 
     108      axisSrcIndex = elementPositionInGridSrc2AxisPosition_[elementPositionInGrid]; 
     109      algo = new CAxisAlgorithmInverse(axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex]); 
    79110      break; 
    80111    default: 
     
    159190    case TRANS_INVERSE_AXIS: 
    160191      axisIndex =  elementPositionInGridDst2AxisPosition_[elementPositionInGrid]; 
     192      break; 
     193 
     194    case TRANS_REDUCE_AXIS_TO_SCALAR: 
     195      scalarIndex = elementPositionInGridDst2ScalarPosition_[elementPositionInGrid]; 
    161196      break; 
    162197    default: 
     
    233268    case TRANS_INVERSE_AXIS: 
    234269      axisIndex =  elementPositionInGridDst2AxisPosition_[elementPositionInGrid]; 
     270      break; 
     271 
     272    case TRANS_REDUCE_AXIS_TO_SCALAR: 
     273      scalarIndex = elementPositionInGridDst2ScalarPosition_[elementPositionInGrid]; 
    235274      break; 
    236275    default: 
Note: See TracChangeset for help on using the changeset viewer.