Ignore:
Timestamp:
10/21/16 13:40:33 (8 years ago)
Author:
mhnguyen
Message:

Correcting various bugs relating to transformation

+) Fix the order of transformation selection
+) Correct domain transformation selection
+) Reorganize test_remap

Test
+) On Curie
+) All tests pass

File:
1 edited

Legend:

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

    r976 r978  
    102102 
    103103/*! 
    104   Initialize the algorithms (transformations) 
    105 */ 
    106 void CGridTransformationSelector::initializeAlgorithms() 
     104  Update position of elements in grid source and grid destination as well as their positions in element list 
     105*/ 
     106void CGridTransformationSelector::updateElementPosition() 
    107107{ 
    108108  int idxScalar = 0, idxAxis = 0, idxDomain = 0; 
    109109  CArray<int,1> axisDomainOrderDst = gridDestination_->axis_domain_order; 
     110  std::map<int, int>().swap(elementPositionInGridDst2DomainPosition_); 
     111  std::map<int, int>().swap(elementPositionInGridDst2AxisPosition_); 
     112  std::map<int, int>().swap(elementPositionInGridDst2ScalarPosition_); 
    110113  for (int i = 0; i < axisDomainOrderDst.numElements(); ++i) 
    111114  { 
     
    130133  idxScalar = idxAxis = idxDomain = 0; 
    131134  CArray<int,1> axisDomainOrderSrc = gridSource_->axis_domain_order; 
     135  std::map<int, int>().swap(elementPositionInGridSrc2DomainPosition_); 
     136  std::map<int, int>().swap(elementPositionInGridSrc2AxisPosition_); 
     137  std::map<int, int>().swap(elementPositionInGridSrc2ScalarPosition_); 
    132138  for (int i = 0; i < axisDomainOrderSrc.numElements(); ++i) 
    133139  { 
     
    149155    } 
    150156  } 
    151  
     157} 
     158 
     159/*! 
     160  Initialize the algorithms (transformations) 
     161*/ 
     162void CGridTransformationSelector::initializeAlgorithms() 
     163{ 
     164  updateElementPosition(); 
     165  CArray<int,1> axisDomainOrderDst = gridDestination_->axis_domain_order; 
    152166  for (int i = 0; i < axisDomainOrderDst.numElements(); ++i) 
    153167  { 
     
    183197    int scalarDstPos = -1, scalarSrcPos = -1; 
    184198    if (0 < elementPositionInGridDst2ScalarPosition_.count(scalarPositionInGrid)) 
    185       scalarDstPos = elementPositionInGridDst2AxisPosition_[scalarPositionInGrid]; 
     199      scalarDstPos = elementPositionInGridDst2ScalarPosition_[scalarPositionInGrid]; 
    186200    if (0 < elementPositionInGridSrc2ScalarPosition_.count(scalarPositionInGrid)) 
    187       scalarSrcPos = elementPositionInGridSrc2AxisPosition_[scalarPositionInGrid]; 
     201      scalarSrcPos = elementPositionInGridSrc2ScalarPosition_[scalarPositionInGrid]; 
    188202 
    189203    // If source and destination grid share the same scalar 
     
    199213      for (it = itb; it != ite; ++it) 
    200214      { 
    201         listAlgos_.push_back(std::make_pair(scalarPositionInGrid, std::make_pair(it->first, transformationOrder))); 
    202         algoTypes_.push_back(scalarType); 
     215        listAlgos_.push_back(std::make_pair(scalarPositionInGrid, std::make_pair(it->first, std::make_pair(transformationOrder,0))));         
    203216        ++transformationOrder; 
    204217        std::vector<StdString> auxInput = (it->second)->checkAuxInputs(); 
     
    240253      for (it = itb; it != ite; ++it) 
    241254      { 
    242         listAlgos_.push_back(std::make_pair(axisPositionInGrid, std::make_pair(it->first, transformationOrder))); 
    243         algoTypes_.push_back(axisType); 
     255        listAlgos_.push_back(std::make_pair(axisPositionInGrid, std::make_pair(it->first, std::make_pair(transformationOrder,1))));         
    244256        ++transformationOrder; 
    245257        std::vector<StdString> auxInput = (it->second)->checkAuxInputs(); 
     
    264276    int domDstPos = -1, domSrcPos = -1; 
    265277    if (0 < elementPositionInGridDst2DomainPosition_.count(domPositionInGrid)) 
    266       domDstPos = elementPositionInGridDst2AxisPosition_[domPositionInGrid]; 
     278      domDstPos = elementPositionInGridDst2DomainPosition_[domPositionInGrid]; 
    267279    if (0 < elementPositionInGridSrc2DomainPosition_.count(domPositionInGrid)) 
    268       domSrcPos = elementPositionInGridSrc2AxisPosition_[domPositionInGrid]; 
     280      domSrcPos = elementPositionInGridSrc2DomainPosition_[domPositionInGrid]; 
    269281 
    270282    // If source and destination grid share the same domain 
     
    280292      for (it = itb; it != ite; ++it) 
    281293      { 
    282         listAlgos_.push_back(std::make_pair(domPositionInGrid, std::make_pair(it->first, transformationOrder))); 
    283         algoTypes_.push_back(domainType); 
     294        listAlgos_.push_back(std::make_pair(domPositionInGrid, std::make_pair(it->first, std::make_pair(transformationOrder,2))));         
    284295        ++transformationOrder; 
    285296        std::vector<StdString> auxInput = (it->second)->checkAuxInputs(); 
     
    297308  \param [in] transType transformation type, for now we have Zoom_axis, inverse_axis 
    298309  \param [in] transformationOrder position of the transformation in an element (an element can have several transformation) 
    299   \param [in] isDomainAlgo flag to specify type of algorithm (for domain or axis) 
    300 */ 
    301 void CGridTransformationSelector::selectAlgo(int elementPositionInGrid, ETranformationType transType, int transformationOrder, AlgoType algoType) 
    302 { 
     310  \param [in] algoType flag to specify type of algorithm (2 for domain, 1 for axis and 0 for scalar)  
     311*/ 
     312void CGridTransformationSelector::selectAlgo(int elementPositionInGrid, ETranformationType transType, int transformationOrder, int algoType) 
     313{ 
     314  updateElementPosition(); 
    303315  switch (algoType) 
    304316  { 
    305   case scalarType: 
     317  case 0: 
    306318    selectScalarAlgo(elementPositionInGrid, transType, transformationOrder); 
    307319    break; 
    308   case axisType: 
     320  case 1: 
    309321    selectAxisAlgo(elementPositionInGrid, transType, transformationOrder); 
    310322    break; 
    311   case domainType: 
     323  case 2: 
    312324    selectDomainAlgo(elementPositionInGrid, transType, transformationOrder); 
    313325    break; 
Note: See TracChangeset for help on using the changeset viewer.