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_inverse.cpp

    r869 r933  
    1111#include "context_client.hpp" 
    1212#include "axis.hpp" 
     13#include "grid.hpp" 
     14#include "grid_transformation_factory_impl.hpp" 
     15#include "inverse_axis.hpp" 
    1316#include "client_client_dht_template.hpp" 
    1417 
    1518namespace xios { 
    1619 
    17 CAxisAlgorithmInverse::CAxisAlgorithmInverse(CAxis* axisDestination, CAxis* axisSource) 
     20CGenericAlgorithmTransformation* CAxisAlgorithmInverse::create(CGrid* gridDst, CGrid* gridSrc, 
     21                                                               CTransformation<CAxis>* transformation, 
     22                                                               int elementPositionInGrid, 
     23                                                               std::map<int, int>& elementPositionInGridSrc2ScalarPosition, 
     24                                                               std::map<int, int>& elementPositionInGridSrc2AxisPosition, 
     25                                                               std::map<int, int>& elementPositionInGridSrc2DomainPosition, 
     26                                                               std::map<int, int>& elementPositionInGridDst2ScalarPosition, 
     27                                                               std::map<int, int>& elementPositionInGridDst2AxisPosition, 
     28                                                               std::map<int, int>& elementPositionInGridDst2DomainPosition) 
     29{ 
     30  std::vector<CAxis*> axisListDestP = gridDst->getAxis(); 
     31  std::vector<CAxis*> axisListSrcP  = gridSrc->getAxis(); 
     32 
     33  CInverseAxis* inverseAxis = dynamic_cast<CInverseAxis*> (transformation); 
     34  int axisDstIndex = elementPositionInGridDst2AxisPosition[elementPositionInGrid]; 
     35  int axisSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid]; 
     36 
     37  return (new CAxisAlgorithmInverse(axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], inverseAxis)); 
     38} 
     39 
     40bool CAxisAlgorithmInverse::registerTrans() 
     41{ 
     42  CGridTransformationFactory<CAxis>::registerTransformation(TRANS_INVERSE_AXIS, create); 
     43} 
     44 
     45 
     46CAxisAlgorithmInverse::CAxisAlgorithmInverse(CAxis* axisDestination, CAxis* axisSource, CInverseAxis* inverseAxis) 
    1847 : CAxisAlgorithmTransformation(axisDestination, axisSource) 
    1948{ 
Note: See TracChangeset for help on using the changeset viewer.