Changeset 821 for XIOS/trunk/src/node


Ignore:
Timestamp:
02/10/16 14:35:03 (8 years ago)
Author:
mhnguyen
Message:

Making some improvements of transformation algorithm

+) Correct the way to enlisting transformations in an element (domain, axis)
+) Optimize generic transformation to make sure temporary grid to be created on demand
+) Update some mpi tag to prevent conflict
+) Correct some minor stuffs
+) Update documents

Test
+) On Curie
+) all test pass

Location:
XIOS/trunk/src/node
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/node/axis.cpp

    r817 r821  
    2626      , isDistributed_(false), hasBounds_(false), isCompressible_(false) 
    2727      , numberWrittenIndexes_(0), totalNumberWrittenIndexes_(0), offsetWrittenIndexes_(0) 
    28       , transformationMap_(), global_zoom_begin(0), global_zoom_size(0), hasValue(false) 
     28      , transformationMap_(), hasValue(false) 
    2929   { 
    3030   } 
     
    3535      , isDistributed_(false), hasBounds_(false), isCompressible_(false) 
    3636      , numberWrittenIndexes_(0), totalNumberWrittenIndexes_(0), offsetWrittenIndexes_(0) 
    37       , transformationMap_(), global_zoom_begin(0), global_zoom_size(0), hasValue(false) 
     37      , transformationMap_(), hasValue(false) 
    3838   { 
    3939   } 
     
    266266   void CAxis::checkZoom(void) 
    267267   { 
    268      if (0 == global_zoom_size) global_zoom_size = this->n_glo.getValue(); 
     268     if (global_zoom_begin.isEmpty()) global_zoom_begin.setValue(0); 
     269     if (global_zoom_n.isEmpty()) global_zoom_n.setValue(n_glo.getValue()); 
    269270   } 
    270271 
     
    391392    size_t ni = this->n.getValue(); 
    392393    size_t ibegin = this->begin.getValue(); 
    393     size_t zoom_end = global_zoom_begin+global_zoom_size-1; 
     394    size_t zoom_end = global_zoom_begin+global_zoom_n-1; 
    394395    size_t nZoomCount = 0; 
    395396    size_t nbIndex = index.numElements(); 
     
    517518    CEventClient event(getType(), EVENT_ID_NON_DISTRIBUTED_VALUE); 
    518519 
    519     int zoom_end = global_zoom_begin + global_zoom_size - 1; 
     520    int zoom_end = global_zoom_begin + global_zoom_n - 1; 
    520521    int nb = 0; 
    521522    for (size_t idx = 0; idx < n; ++idx) 
     
    830831        msg << this->getId(); 
    831832        msg << ni << begin << end; 
    832         msg << global_zoom_begin << global_zoom_size; 
     833        msg << global_zoom_begin.getValue() << global_zoom_n.getValue(); 
    833834        msg << isCompressible_; 
    834835 
     
    850851  void CAxis::recvServerAttribut(CBufferIn& buffer) 
    851852  { 
    852     int ni_srv, begin_srv, end_srv, global_zoom_begin_tmp, global_zoom_size_tmp; 
     853    int ni_srv, begin_srv, end_srv, global_zoom_begin_tmp, global_zoom_n_tmp; 
    853854 
    854855    buffer >> ni_srv >> begin_srv >> end_srv; 
    855     buffer >> global_zoom_begin_tmp >> global_zoom_size_tmp; 
     856    buffer >> global_zoom_begin_tmp >> global_zoom_n_tmp; 
    856857    buffer >> isCompressible_; 
    857858    global_zoom_begin = global_zoom_begin_tmp; 
    858     global_zoom_size  = global_zoom_size_tmp; 
    859     int global_zoom_end = global_zoom_begin + global_zoom_size - 1; 
     859    global_zoom_n  = global_zoom_n_tmp; 
     860    int global_zoom_end = global_zoom_begin + global_zoom_n - 1; 
    860861 
    861862    zoom_begin_srv = global_zoom_begin > begin_srv ? global_zoom_begin : begin_srv ; 
  • XIOS/trunk/src/node/axis.hpp

    r816 r821  
    2929   BEGIN_DECLARE_ATTRIBUTE_MAP(CAxis) 
    3030#  include "axis_attribute.conf" 
     31#  include "axis_attribute_private.conf" 
    3132   END_DECLARE_ATTRIBUTE_MAP(CAxis) 
    3233 
     
    116117        int zoom_begin_srv, zoom_end_srv, zoom_size_srv; 
    117118        int ni_srv, begin_srv, end_srv; 
    118         int global_zoom_begin, global_zoom_size;  // The real global zoom begin and zoom size after axis is transformed (zoomed) 
    119119        CArray<double,1> value_srv; 
    120120        CArray<double,2> bound_srv; 
  • XIOS/trunk/src/node/domain.cpp

    r815 r821  
    3232      , isChecked(false), relFiles(), isClientChecked(false), nbConnectedClients_(), indSrv_(), connectedServerRank_() 
    3333      , hasBounds(false), hasArea(false), isDistributed_(false), nGlobDomain_(), isCompressible_(false), isUnstructed_(false) 
    34       , global_zoom_ni(0), global_zoom_ibegin(0), global_zoom_nj(0), global_zoom_jbegin(0) 
    3534      , isClientAfterTransformationChecked(false), hasLonLat(false) 
    3635      , lonvalue_client(), latvalue_client(), bounds_lon_client(), bounds_lat_client() 
     
    4241      , isChecked(false), relFiles(), isClientChecked(false), nbConnectedClients_(), indSrv_(), connectedServerRank_() 
    4342      , hasBounds(false), hasArea(false), isDistributed_(false), nGlobDomain_(), isCompressible_(false), isUnstructed_(false) 
    44       , global_zoom_ni(0), global_zoom_ibegin(0), global_zoom_nj(0), global_zoom_jbegin(0) 
    4543      , isClientAfterTransformationChecked(false), hasLonLat(false) 
    4644      , lonvalue_client(), latvalue_client(), bounds_lon_client(), bounds_lat_client() 
     
    663661     } 
    664662     computeNGlobDomain(); 
    665  
    666      if (0 == global_zoom_ni) global_zoom_ni = ni_glo; 
    667      if (0 == global_zoom_nj) global_zoom_nj = nj_glo; 
     663     checkZoom(); 
     664   } 
     665 
     666   void CDomain::checkZoom(void) 
     667   { 
     668     if (global_zoom_ibegin.isEmpty()) 
     669      global_zoom_ibegin.setValue(0); 
     670     if (global_zoom_ni.isEmpty()) 
     671      global_zoom_ni.setValue(ni_glo); 
     672     if (global_zoom_jbegin.isEmpty()) 
     673      global_zoom_jbegin.setValue(0); 
     674     if (global_zoom_nj.isEmpty()) 
     675      global_zoom_nj.setValue(nj_glo); 
    668676   } 
    669677 
     
    12531261        msg << this->getId() ; 
    12541262        msg << ni_srv << ibegin_srv << iend_srv << nj_srv << jbegin_srv << jend_srv; 
    1255         msg << global_zoom_ni << global_zoom_ibegin << global_zoom_nj << global_zoom_jbegin; 
     1263        msg << global_zoom_ni.getValue() << global_zoom_ibegin.getValue() << global_zoom_nj.getValue() << global_zoom_jbegin.getValue(); 
    12561264        msg << isCompressible_; 
    12571265 
     
    16801688  void CDomain::recvServerAttribut(CBufferIn& buffer) 
    16811689  { 
     1690    int global_zoom_ni_tmp, global_zoom_ibegin_tmp, global_zoom_nj_tmp, global_zoom_jbegin_tmp; 
    16821691    buffer >> ni_srv >> ibegin_srv >> iend_srv >> nj_srv >> jbegin_srv >> jend_srv 
    1683            >> global_zoom_ni >> global_zoom_ibegin >> global_zoom_nj >> global_zoom_jbegin 
     1692           >> global_zoom_ni_tmp >> global_zoom_ibegin_tmp >> global_zoom_nj_tmp >> global_zoom_jbegin_tmp 
    16841693           >> isCompressible_; 
     1694 
     1695    global_zoom_ni.setValue(global_zoom_ni_tmp); 
     1696    global_zoom_ibegin.setValue(global_zoom_ibegin_tmp); 
     1697    global_zoom_nj.setValue(global_zoom_nj_tmp); 
     1698    global_zoom_jbegin.setValue(global_zoom_jbegin_tmp); 
    16851699 
    16861700    int zoom_iend = global_zoom_ibegin + global_zoom_ni - 1; 
  • XIOS/trunk/src/node/domain.hpp

    r809 r821  
    9595         bool isCompressible(void) const; 
    9696 
    97          int global_zoom_ibegin, global_zoom_ni; 
    98          int global_zoom_jbegin, global_zoom_nj; 
    99  
    10097         int ni_srv,ibegin_srv,iend_srv ; 
    10198         int zoom_ni_srv,zoom_ibegin_srv,zoom_iend_srv ; 
     
    124121         void sendLonLatArea(void); 
    125122         void computeConnectedServer(void) ; 
    126           
    127          void AllgatherRectilinearLonLat(CArray<double,1>& lon, CArray<double,1>& lat,  
     123 
     124         void AllgatherRectilinearLonLat(CArray<double,1>& lon, CArray<double,1>& lat, 
    128125                                         CArray<double,1>& lon_g, CArray<double,1>& lat_g); 
    129           
    130          void fillInRectilinearBoundLonLat(CArray<double,1>& lon, CArray<double,1>& lat,  
     126 
     127         void fillInRectilinearBoundLonLat(CArray<double,1>& lon, CArray<double,1>& lat, 
    131128                                           CArray<double,2>& boundsLon, CArray<double,2>& boundsLat); 
    132129         void fillInRectilinearLonLat(); 
     
    170167         void checkArea(void); 
    171168         void checkLonLat(); 
     169         void checkZoom(void); 
    172170 
    173171         void checkTransformations(); 
  • XIOS/trunk/src/node/grid.cpp

    r817 r821  
    262262     } 
    263263     this->isChecked = true; 
     264   } 
     265 
     266   void CGrid::createMask(void) 
     267   { 
     268      using namespace std; 
     269      std::vector<CDomain*> domainP = this->getDomains(); 
     270      std::vector<CAxis*> axisP = this->getAxis(); 
     271      int dim = domainP.size() * 2 + axisP.size(); 
     272 
     273      std::vector<CArray<bool,1>* > domainMasks(domainP.size()); 
     274      for (int i = 0; i < domainMasks.size(); ++i) domainMasks[i] = &(domainP[i]->mask_1d); 
     275      std::vector<CArray<bool,1>* > axisMasks(axisP.size()); 
     276      for (int i = 0; i < axisMasks.size(); ++i) axisMasks[i] = &(axisP[i]->mask); 
     277 
     278      switch (dim) { 
     279        case 1: 
     280          checkGridMask(mask_1d, domainMasks, axisMasks, axis_domain_order, true); 
     281          break; 
     282        case 2: 
     283          checkGridMask(mask_2d, domainMasks, axisMasks, axis_domain_order, true); 
     284          break; 
     285        case 3: 
     286          checkGridMask(mask_3d, domainMasks, axisMasks, axis_domain_order, true); 
     287          break; 
     288        default: 
     289          break; 
     290      } 
    264291   } 
    265292 
  • XIOS/trunk/src/node/grid.hpp

    r775 r821  
    206206         map<int, CArray<size_t, 1> > outIndexFromClient, compressedOutIndexFromClient; 
    207207         void checkMask(void); 
     208         void createMask(void); 
    208209         void modifyMask(const CArray<int,1>& indexToModify); 
    209210 
     
    217218                          const std::vector<CArray<bool,1>* >& domainMasks, 
    218219                          const std::vector<CArray<bool,1>* >& axisMasks, 
    219                           const CArray<bool,1>& axisDomainOrder); 
     220                          const CArray<bool,1>& axisDomainOrder, 
     221                          bool createMask = false); 
    220222        template<int N> 
    221223        void modifyGridMask(CArray<bool,N>& gridMask, const CArray<int,1>& indexToModify); 
     
    295297                             const std::vector<CArray<bool,1>* >& domainMasks, 
    296298                             const std::vector<CArray<bool,1>* >& axisMasks, 
    297                              const CArray<bool,1>& axisDomainOrder) 
     299                             const CArray<bool,1>& axisDomainOrder, 
     300                             bool createMask) 
    298301   { 
    299302     int idx = 0; 
     
    319322    } 
    320323 
    321     if (!gridMask.isEmpty()) 
     324    if (!gridMask.isEmpty() && !createMask) 
    322325    { 
    323326      for (int i = 0; i < dim; ++i) 
Note: See TracChangeset for help on using the changeset viewer.