Ignore:
Timestamp:
09/06/11 11:57:45 (13 years ago)
Author:
hozdoba
Message:

Corrections après tests sur titane

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XMLIO_V2/dev/dev_rv/src/xmlio/output/onetcdf4.cpp

    r254 r265  
    142142      } 
    143143       
     144      StdString CONetCDF4::getUnlimitedDimensionName(void) 
     145      { 
     146         char full_name_in[NC_MAX_NAME +1]; 
     147         int grpid = this->getGroup(path); 
     148         int dimid = this->getUnlimitedDimension(); 
     149                               
     150         if (dimid == -1) return (std::string()); 
     151            CheckError(nc_inq_dimname(grpid, dimid, full_name_in)); 
     152                                           
     153         StdString dimname(full_name_in); 
     154         return (dimname); 
     155      } 
     156       
    144157      //--------------------------------------------------------------- 
    145158       
     
    166179         return (retvalue); 
    167180      } 
     181 
     182      std::vector<std::string> CONetCDF4::getDimensionsIdList (const std::string * _varname) 
     183      { 
     184         char full_name_in[NC_MAX_NAME +1]; 
     185         int nbdim = 0, *dimid = NULL; 
     186         int grpid = this->getCurrentGroup(); 
     187         int varid = (_varname != NULL) ? this->getVariable(*_varname) : NC_GLOBAL; 
     188         std::vector<std::string> retvalue; 
     189                                    
     190         if (_varname != NULL) 
     191         { 
     192            CheckError(nc_inq_varndims(grpid, varid, &nbdim)); 
     193            dimid = new int[nbdim](); 
     194            CheckError(nc_inq_vardimid(grpid, varid, dimid)); 
     195         } 
     196         else 
     197         { 
     198            CheckError(nc_inq_dimids(grpid, &nbdim, NULL, 1)); 
     199            dimid = new int[nbdim](); 
     200            CheckError(nc_inq_dimids(grpid, NULL, dimid, 1)); 
     201         } 
     202                                         
     203         for (int i = 0; i < nbdim; i++) 
     204         { 
     205            CheckError(nc_inq_dimname(grpid, dimid[i], full_name_in)); 
     206            std::string dimname(full_name_in); 
     207            retvalue.push_back(dimname); 
     208         } 
     209         delete [] dimid; 
     210                                                                                                                                                       
     211         return (retvalue); 
     212      } 
     213 
    168214 
    169215      //--------------------------------------------------------------- 
     
    271317                                        const std::vector<StdSize> * start, 
    272318                                        const std::vector<StdSize> * count) 
    273       { 
    274          std::vector<StdSize> sizes = this->getDimensions(name);        
    275          std::vector<StdSize>::const_iterator 
     319      {    
     320         std::vector<std::size_t> sizes  = this->getDimensions(name); 
     321         std::vector<std::string> iddims = this->getDimensionsIdList (&name);    
     322         std::vector<std::size_t>::const_iterator 
    276323            it  = sizes.begin(), end = sizes.end(); 
    277324         int i = 0; 
     325       
     326         if (iddims.begin()->compare(this->getUnlimitedDimensionName()) == 0) 
     327         { 
     328            sstart.push_back(record); 
     329            scount.push_back(1);  
     330            if ((start == NULL) && 
     331                (count == NULL)) i++; 
     332            it++; 
     333         } 
    278334 
    279335         for (;it != end; it++) 
    280          { 
    281             StdSize  s = *it; 
     336         {       
    282337            if ((start != NULL) && (count != NULL)) 
    283338            { 
    284                if (s == UNLIMITED_DIM) 
    285                { 
    286                   sstart.push_back(record); 
    287                   scount.push_back(1); 
    288                } 
    289                else 
    290                { 
    291                   sstart.push_back((*start)[i]); 
    292                   scount.push_back((*count)[i]); 
    293                   array_size *= (*count)[i]; 
    294                   i++; 
    295                } 
     339               sstart.push_back((*start)[i]); 
     340               scount.push_back((*count)[i]); 
     341               array_size *= (*count)[i]; 
     342               i++; 
    296343            } 
    297344            else 
    298345            { 
    299                if (s == UNLIMITED_DIM) 
    300                { 
    301                   sstart.push_back(record); 
    302                   scount.push_back(1); 
    303                } 
    304                else 
    305                { 
    306                   sstart.push_back(0); 
    307                   scount.push_back(sizes[i]); 
    308                   array_size *= sizes[i]; 
    309                } 
     346               sstart.push_back(0); 
     347               scount.push_back(sizes[i]); 
     348               array_size *= sizes[i]; 
    310349               i++; 
    311350            } 
    312351         } 
     352          
     353          
     354//         for (StdSize u = 0; u < sstart.size(); u++) 
     355//            std::cout << "(" << sstart[u] << "," << scount[u]  << ")" ; 
     356//         std::cout << std::endl; 
    313357      } 
    314358 
Note: See TracChangeset for help on using the changeset viewer.