Ignore:
Timestamp:
07/06/11 13:55:03 (13 years ago)
Author:
hozdoba
Message:

Ajout d'une partie d'Interface fortran pour la version 4
Ajout des sorties netcdf4 pour la version 4

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XMLIO_V2/dev/dev_rv/src4/xmlio/netcdf/inetcdf4.cpp

    r241 r249  
    2020namespace io { 
    2121     
     22     
     23   // ------------------------------ Constructeurs ----------------------------- 
     24    
    2225   CINetCDF4::CINetCDF4(const std::string & filename) 
    2326   { 
     
    2528   } 
    2629 
     30   // ------------------------------- Destructeur ------------------------------ 
     31    
    2732   CINetCDF4::~CINetCDF4(void) 
    2833   { 
    2934       CheckError(nc_close(this->ncidp)); 
    3035   } 
     36    
     37   // --------------------- Vérification des erreurs NetCDF -------------------- 
    3138    
    3239   void CINetCDF4::CheckError(int _status) throw (CException) 
     
    3946      } 
    4047   } 
     48    
     49   // --------------------------- Accesseurs protégés -------------------------- 
    4150    
    4251   int CINetCDF4::getCurrentGroup(void) 
     
    107116   } 
    108117    
     118   bool CINetCDF4::varExist(const std::string & _varname) 
     119   { 
     120      int varid = 0; 
     121      int grpid = this->getCurrentGroup(); 
     122      return (nc_inq_varid (grpid, _varname.c_str(), &varid) == NC_NOERR); 
     123   } 
     124    
     125   // ------------------------------- Accesseurs ------------------------------- 
     126    
    109127   const CINetCDF4::CNetCDF4Path & CINetCDF4::getCurrentPath(void) const 
    110128   {  
     
    112130   } 
    113131 
     132   // ------------------------------- Mutateurs -------------------------------- 
     133 
    114134   void CINetCDF4::setCurrentPath(const CNetCDF4Path & path) 
    115135   {  
    116136       this->path = path;  
    117137   } 
     138    
     139   // ----------------- Obtention des informations de lecture ------------------ 
    118140    
    119141   void CINetCDF4::getReadDataInfos(const std::string & _varname, 
     
    159181   } 
    160182    
     183   // ------------------------- Lecture des données -------------------------- 
     184    
     185   template <> 
     186      void CINetCDF4::readData_(int _grpid, int _varid, 
     187                                const std::vector<std::size_t> & _sstart, 
     188                                const std::vector<std::size_t> & _scount, 
     189                                float * _data) 
     190   { 
     191      CheckError(nc_get_vara_float(_grpid, _varid, &(_sstart[0]), &(_scount[0]), _data));        
     192   } 
     193    
     194   template <> 
     195      void CINetCDF4::readData_(int _grpid, int _varid, 
     196                                const std::vector<std::size_t> & _sstart, 
     197                                const std::vector<std::size_t> & _scount, 
     198                                int * _data) 
     199   { 
     200      CheckError(nc_get_vara_int(_grpid, _varid, &(_sstart[0]), &(_scount[0]), _data));        
     201   } 
     202    
     203   template <> 
     204      void CINetCDF4::readData_(int _grpid, int _varid, 
     205                                const std::vector<std::size_t> & _sstart, 
     206                                const std::vector<std::size_t> & _scount, 
     207                                double * _data) 
     208   { 
     209      CheckError(nc_get_vara_double(_grpid, _varid, &(_sstart[0]), &(_scount[0]), _data));        
     210   } 
     211 
     212   // ------------------------- Lecture des attributs -------------------------- 
    161213   void CINetCDF4::readAttribute 
    162214      (const std::string & _attname, std::string & _value, const std::string * _varname) 
     
    166218        _value.assign(&(chart[0]), chart.size()); 
    167219   } 
     220    
     221   template <> 
     222      void CINetCDF4::readAttribute_ 
     223         (const std::string & _attname, double * _value, int _grpid, int _varid) 
     224   {        
     225        CheckError(nc_get_att_double(_grpid, _varid, _attname.c_str(), _value)); 
     226   } 
     227    
     228   template <> 
     229      void CINetCDF4::readAttribute_ 
     230         (const std::string & _attname, float * _value, int _grpid, int _varid) 
     231   { 
     232       CheckError(nc_get_att_float(_grpid, _varid, _attname.c_str(), _value)); 
     233   } 
     234    
     235   template <> 
     236      void CINetCDF4::readAttribute_ 
     237         (const std::string & _attname, int * _value, int _grpid, int _varid) 
     238   { 
     239       CheckError(nc_get_att_int(_grpid, _varid, _attname.c_str(), _value)); 
     240   } 
     241    
     242   template <> 
     243      void CINetCDF4::readAttribute_ 
     244         (const std::string & _attname, char * _value, int _grpid, int _varid) 
     245   { 
     246       CheckError(nc_get_att_text(_grpid, _varid, _attname.c_str(), _value)); 
     247   } 
     248    
     249   // ----------------- Accesseur de parcours (d'exploration) ------------------ 
    168250 
    169251   std::vector<std::string> CINetCDF4::getAttributes(const std::string * const _varname) 
     
    187269      } 
    188270      return (retvalue); 
    189    } 
    190     
     271   }    
    191272    
    192273   std::map<std::string, std::size_t> CINetCDF4::getDimensions(const std::string * const _varname) 
     
    322403   } 
    323404    
    324    template <> 
    325       void CINetCDF4::readData_(int _grpid, int _varid, 
    326                                 const std::vector<std::size_t> & _sstart, 
    327                                 const std::vector<std::size_t> & _scount, 
    328                                 float * _data) 
    329    { 
    330       CheckError(nc_get_vara_float(_grpid, _varid, &(_sstart[0]), &(_scount[0]), _data));        
    331    } 
    332     
    333    template <> 
    334       void CINetCDF4::readData_(int _grpid, int _varid, 
    335                                 const std::vector<std::size_t> & _sstart, 
    336                                 const std::vector<std::size_t> & _scount, 
    337                                 int * _data) 
    338    { 
    339       CheckError(nc_get_vara_int(_grpid, _varid, &(_sstart[0]), &(_scount[0]), _data));        
    340    } 
    341     
    342    template <> 
    343       void CINetCDF4::readData_(int _grpid, int _varid, 
    344                                 const std::vector<std::size_t> & _sstart, 
    345                                 const std::vector<std::size_t> & _scount, 
    346                                 double * _data) 
    347    { 
    348       CheckError(nc_get_vara_double(_grpid, _varid, &(_sstart[0]), &(_scount[0]), _data));        
    349    } 
    350     
    351    template <> 
    352       void CINetCDF4::readAttribute_ 
    353          (const std::string & _attname, double * _value, int _grpid, int _varid) 
    354    {        
    355         CheckError(nc_get_att_double(_grpid, _varid, _attname.c_str(), _value)); 
    356    } 
    357     
    358    template <> 
    359       void CINetCDF4::readAttribute_ 
    360          (const std::string & _attname, float * _value, int _grpid, int _varid) 
    361    { 
    362        CheckError(nc_get_att_float(_grpid, _varid, _attname.c_str(), _value)); 
    363    } 
    364     
    365    template <> 
    366       void CINetCDF4::readAttribute_ 
    367          (const std::string & _attname, int * _value, int _grpid, int _varid) 
    368    { 
    369        CheckError(nc_get_att_int(_grpid, _varid, _attname.c_str(), _value)); 
    370    } 
    371     
    372    template <> 
    373       void CINetCDF4::readAttribute_ 
    374          (const std::string & _attname, char * _value, int _grpid, int _varid) 
    375    { 
    376        CheckError(nc_get_att_text(_grpid, _varid, _attname.c_str(), _value)); 
    377    } 
    378     
    379    bool CINetCDF4::varExist(const std::string & _varname) 
    380    { 
    381       int varid = 0; 
    382       int grpid = this->getCurrentGroup(); 
    383       return (nc_inq_varid (grpid, _varname.c_str(), &varid) == NC_NOERR); 
    384    } 
    385     
    386405} // namespace io 
    387406} // namespace xmlioserver 
Note: See TracChangeset for help on using the changeset viewer.