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

Corrections après tests sur titane

Location:
XMLIO_V2/dev/dev_rv/src/xmlio/output
Files:
3 edited

Legend:

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

    r205 r265  
     1 
    12#include "nc4_data_output.hpp" 
    23 
     
    137138                  domain->data_jbegin.getValue()*/); 
    138139                   
    139                SuperClassWriter::setDefaultValue(maskid, &dvm); 
     140               //SuperClassWriter::setDefaultValue(maskid, &dvm); 
    140141 
    141142               SuperClassWriter::definition_end(); 
     
    223224                             ? field->name.getValue() : field->getBaseFieldReference()->getId(); 
    224225 
    225          unsigned int ssize = domain->ni.getValue() * domain->nj.getValue(); 
     226         unsigned int ssize = domain->zoom_ni_loc.getValue() * domain->zoom_nj_loc.getValue(); 
    226227         bool isCurvilinear = (domain->lonvalue.getValue()->size() == ssize); 
    227228 
     
    380381         if (grid->hasAxis()) // 3D 
    381382         { 
    382             ARRAY(double, 3) field_data3D;             
     383            ARRAY(double, 3) field_data3D (new CArray<double,3>(grid->getLocalShape()/*, boost::c_storage_order()*/));             
    383384            grid->outputField(field_data, field_data3D); 
    384             SuperClassWriter::writeData(field_data3D, fieldid, true, 0); 
     385            SuperClassWriter::writeData(field_data3D, fieldid, true, field->getNStep()-1); 
    385386             
    386387         } 
    387388         else // 2D 
    388389         { 
    389             ARRAY(double, 3) field_data2D; 
     390            ARRAY(double, 2) field_data2D (new CArray<double, 2>(grid->getLocalShape()/*, boost::c_storage_order()*/)); 
    390391            grid->outputField(field_data,  field_data2D); 
    391             SuperClassWriter::writeData(field_data2D, fieldid, true, 0); 
     392            SuperClassWriter::writeData(field_data2D, fieldid, true, field->getNStep()-1); 
    392393         } 
    393394      } 
  • 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 
  • XMLIO_V2/dev/dev_rv/src/xmlio/output/onetcdf4.hpp

    r264 r265  
    1212#define MPI_INCLUDED 
    1313#include <netcdf.h> 
    14 extern "C" 
    15 { 
     14extern "C" { 
    1615#include <netcdf_par.h> 
    1716} 
     
    9594            int getVariable(const StdString & varname); 
    9695            int getDimension(const StdString & dimname); 
    97             std::vector<StdSize> getDimensions(const StdString & varname); 
    98             int getUnlimitedDimension(void); 
     96            std::vector<StdSize>   getDimensions       (const StdString & varname); 
     97            std::vector<StdString> getDimensionsIdList (const StdString * varname); 
     98            int       getUnlimitedDimension(void); 
     99            StdString getUnlimitedDimensionName(void); 
    99100 
    100101            bool varExist(const StdString & varname); 
     
    145146         this->getWriteDataInfos 
    146147         (name, record, array_size,  sstart, scount, start, count); 
     148         if (data->num_elements() != array_size) 
     149         { 
     150            ERROR("CONetCDF4::writeData(...)", 
     151                  << "[ input array size = "  << data->num_elements() 
     152                  << ", intern array size = " << array_size 
     153                  << " ] Invalid input data !" ); 
     154         } 
     155          
    147156         this->writeData_(grpid, varid, sstart, scount, data->data()); 
    148157      } 
Note: See TracChangeset for help on using the changeset viewer.