source: XIOS/trunk/src/io/nc4_data_input.hpp @ 783

Last change on this file since 783 was 783, checked in by mhnguyen, 8 years ago

Adding attribute reading of unstructured grid

+) Fix a minor bug relating to unstructured grid detection
+) Add attribute reading for unstructured domain

Test
+) On Curie
+) test_remap passes

  • Property copyright set to
    Software name : XIOS (Xml I/O Server)
    http://forge.ipsl.jussieu.fr/ioserver
    Creation date : January 2009
    Licence : CeCCIL version2
    see license file in root directory : Licence_CeCILL_V2-en.txt
    or http://www.cecill.info/licences/Licence_CeCILL_V2-en.html
    Holder : CEA/LSCE (Laboratoire des Sciences du CLimat et de l'Environnement)
    CNRS/IPSL (Institut Pierre Simon Laplace)
    Project Manager : Yann Meurdesoif
    yann.meurdesoif@cea.fr
File size: 3.3 KB
RevLine 
[591]1#ifndef __XIOS_NC4_DATA_INPUT__
2#define __XIOS_NC4_DATA_INPUT__
[219]3
[591]4/// XIOS headers ///
5#include "xios_spl.hpp"
[599]6#include "data_input.hpp"
[219]7#include "inetcdf4.hpp"
8
[335]9namespace xios
[219]10{
[775]11  class CDomain;
12  class CAxis;
13
[599]14  class CNc4DataInput
15    : protected CINetCDF4
16    , public virtual CDataInput
17  {
18  public:
19    /// Type definitions ///
20    typedef CINetCDF4  SuperClassWriter;
21    typedef CDataInput SuperClass;
[219]22
[599]23    /// Constructors ///
24    CNc4DataInput(const StdString& filename, MPI_Comm comm_file, bool multifile, bool isCollective = true);
25    CNc4DataInput(const CNc4DataInput& dataInput);       // Not implemented.
26    CNc4DataInput(const CNc4DataInput* const dataInput); // Not implemented.
[219]27
[599]28    /// Destructor ///
29    virtual ~CNc4DataInput(void);
[219]30
[599]31    /// Getters ///
32    const StdString& getFileName(void) const;
[219]33
[599]34  protected:
35    // Read methods
36    virtual StdSize getFieldNbRecords_(CField* field);
37    virtual void readFieldData_(CField* field);
[775]38    virtual void readFieldAttributes_(CField* field, bool readAttributeValues);
[599]39    virtual void closeFile_(void);
[219]40
[599]41  private:
[783]42    void readDomainAttributesFromFile(CDomain* domain, std::list<std::pair<StdString, StdSize> >& dimSizeMap,
[775]43                                      int elementPosition, const StdString& fieldId);
[783]44    void readDomainAttributeValueFromFile(CDomain* domain, std::list<std::pair<StdString, StdSize> >& dimSizeMap,
[775]45                                          int elementPosition, const StdString& fieldId);
46
[783]47    void readAxisAttributesFromFile(CAxis* axis, std::list<std::pair<StdString, StdSize> >& dimSizeMap,
[775]48                                    int elementPosition, const StdString& fieldId);
[783]49    void readAxisAttributeValueFromFile(CAxis* axis, std::list<std::pair<StdString, StdSize> >& dimSizeMap,
[775]50                                        int elementPosition, const StdString& fieldId);
51
[782]52    template <typename T, int Ndim>
53    void readFieldVariableValue(CArray<T, Ndim>& var, const StdString& varId,
[775]54                                const std::vector<StdSize>& nBegin,
55                                const std::vector<StdSize>& nSize,
56                                bool forceIndependent = false);
57
58  private:
59    std::set<StdString> readMetaDataDomains_, readValueDomains_;
60    std::set<StdString> readMetaDataAxis_, readValueAxis_;
61
62  private:
[599]63    /// Private attributes ///
64    MPI_Comm comm_file;
65    const StdString filename;
66    bool isCollective;
67  }; // class CNc4DataInput
[782]68
69template <typename T, int Ndim>
70void CNc4DataInput::readFieldVariableValue(CArray<T,Ndim>& var, const StdString& varId,
71                                           const std::vector<StdSize>& nBegin,
72                                           const std::vector<StdSize>& nSize,
73                                           bool forceIndependent)
74{
75  if (SuperClass::type==MULTI_FILE || !isCollective) return;
76
77  bool openCollective = isCollective;
78  if (forceIndependent) openCollective = !isCollective;
79  switch (SuperClass::type)
80  {
81    case MULTI_FILE:
82      ERROR("CINetCDF4::readFieldVariableValue(...)",
83            << "Only support attributes reading with one_file mode");
84      break;
85    case ONE_FILE:
86    {
87      SuperClassWriter::getData(var, varId, openCollective, 0, &nBegin, &nSize);
88      break;
89    }
90  }
91}
[335]92} // namespace xios
[219]93
[591]94#endif //__XIOS_NC4_DATA_INPUT__
Note: See TracBrowser for help on using the repository browser.