Ignore:
Timestamp:
09/22/16 10:58:32 (8 years ago)
Author:
mhnguyen
Message:

Improving transformation selection. Instead of modifying directly grid_transformation
we only need to register a new transformation with the framework

+) Update all transformations with this new method

Test
+) On Curie
+) Basic tests pass

File:
1 edited

Legend:

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

    r918 r933  
    88 */ 
    99#include "axis_algorithm_interpolate.hpp" 
     10#include "axis.hpp" 
     11#include "interpolate_axis.hpp" 
    1012#include <algorithm> 
    1113#include "context.hpp" 
     
    1315#include "utils.hpp" 
    1416#include "grid.hpp" 
     17#include "grid_transformation_factory_impl.hpp" 
    1518#include "distribution_client.hpp" 
    1619 
    1720namespace xios { 
     21CGenericAlgorithmTransformation* CAxisAlgorithmInterpolate::create(CGrid* gridDst, CGrid* gridSrc, 
     22                                                                   CTransformation<CAxis>* transformation, 
     23                                                                   int elementPositionInGrid, 
     24                                                                   std::map<int, int>& elementPositionInGridSrc2ScalarPosition, 
     25                                                                   std::map<int, int>& elementPositionInGridSrc2AxisPosition, 
     26                                                                   std::map<int, int>& elementPositionInGridSrc2DomainPosition, 
     27                                                                   std::map<int, int>& elementPositionInGridDst2ScalarPosition, 
     28                                                                   std::map<int, int>& elementPositionInGridDst2AxisPosition, 
     29                                                                   std::map<int, int>& elementPositionInGridDst2DomainPosition) 
     30{ 
     31  std::vector<CAxis*> axisListDestP = gridDst->getAxis(); 
     32  std::vector<CAxis*> axisListSrcP  = gridSrc->getAxis(); 
     33 
     34  CInterpolateAxis* interpolateAxis = dynamic_cast<CInterpolateAxis*> (transformation); 
     35  int axisDstIndex = elementPositionInGridDst2AxisPosition[elementPositionInGrid]; 
     36  int axisSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid]; 
     37 
     38  return (new CAxisAlgorithmInterpolate(axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], interpolateAxis)); 
     39} 
     40 
     41bool CAxisAlgorithmInterpolate::registerTrans() 
     42{ 
     43  CGridTransformationFactory<CAxis>::registerTransformation(TRANS_INTERPOLATE_AXIS, create); 
     44} 
     45 
    1846 
    1947CAxisAlgorithmInterpolate::CAxisAlgorithmInterpolate(CAxis* axisDestination, CAxis* axisSource, CInterpolateAxis* interpAxis) 
Note: See TracChangeset for help on using the changeset viewer.