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/domain_algorithm_interpolate.cpp

    r915 r933  
    1616#include "mapper.hpp" 
    1717#include "mpi_tag.hpp" 
     18#include "domain.hpp" 
     19#include "grid_transformation_factory_impl.hpp" 
     20#include "interpolate_domain.hpp" 
     21#include "grid.hpp" 
    1822 
    1923namespace xios { 
     24CGenericAlgorithmTransformation* CDomainAlgorithmInterpolate::create(CGrid* gridDst, CGrid* gridSrc, 
     25                                                                     CTransformation<CDomain>* transformation, 
     26                                                                     int elementPositionInGrid, 
     27                                                                     std::map<int, int>& elementPositionInGridSrc2ScalarPosition, 
     28                                                                     std::map<int, int>& elementPositionInGridSrc2AxisPosition, 
     29                                                                     std::map<int, int>& elementPositionInGridSrc2DomainPosition, 
     30                                                                     std::map<int, int>& elementPositionInGridDst2ScalarPosition, 
     31                                                                     std::map<int, int>& elementPositionInGridDst2AxisPosition, 
     32                                                                     std::map<int, int>& elementPositionInGridDst2DomainPosition) 
     33{ 
     34  std::vector<CDomain*> domainListDestP = gridDst->getDomains(); 
     35  std::vector<CDomain*> domainListSrcP  = gridSrc->getDomains(); 
     36 
     37  CInterpolateDomain* interpolateDomain = dynamic_cast<CInterpolateDomain*> (transformation); 
     38  int domainDstIndex = elementPositionInGridDst2AxisPosition[elementPositionInGrid]; 
     39  int domainSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid]; 
     40 
     41  return (new CDomainAlgorithmInterpolate(domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], interpolateDomain)); 
     42} 
     43 
     44bool CDomainAlgorithmInterpolate::registerTrans() 
     45{ 
     46  CGridTransformationFactory<CDomain>::registerTransformation(TRANS_INTERPOLATE_DOMAIN, create); 
     47} 
    2048 
    2149CDomainAlgorithmInterpolate::CDomainAlgorithmInterpolate(CDomain* domainDestination, CDomain* domainSource, CInterpolateDomain* interpDomain) 
Note: See TracChangeset for help on using the changeset viewer.