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
Line 
1#ifndef __XIOS_NC4_DATA_INPUT__
2#define __XIOS_NC4_DATA_INPUT__
3
4/// XIOS headers ///
5#include "xios_spl.hpp"
6#include "data_input.hpp"
7#include "inetcdf4.hpp"
8
9namespace xios
10{
11  class CDomain;
12  class CAxis;
13
14  class CNc4DataInput
15    : protected CINetCDF4
16    , public virtual CDataInput
17  {
18  public:
19    /// Type definitions ///
20    typedef CINetCDF4  SuperClassWriter;
21    typedef CDataInput SuperClass;
22
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.
27
28    /// Destructor ///
29    virtual ~CNc4DataInput(void);
30
31    /// Getters ///
32    const StdString& getFileName(void) const;
33
34  protected:
35    // Read methods
36    virtual StdSize getFieldNbRecords_(CField* field);
37    virtual void readFieldData_(CField* field);
38    virtual void readFieldAttributes_(CField* field, bool readAttributeValues);
39    virtual void closeFile_(void);
40
41  private:
42    void readDomainAttributesFromFile(CDomain* domain, std::list<std::pair<StdString, StdSize> >& dimSizeMap,
43                                      int elementPosition, const StdString& fieldId);
44    void readDomainAttributeValueFromFile(CDomain* domain, std::list<std::pair<StdString, StdSize> >& dimSizeMap,
45                                          int elementPosition, const StdString& fieldId);
46
47    void readAxisAttributesFromFile(CAxis* axis, std::list<std::pair<StdString, StdSize> >& dimSizeMap,
48                                    int elementPosition, const StdString& fieldId);
49    void readAxisAttributeValueFromFile(CAxis* axis, std::list<std::pair<StdString, StdSize> >& dimSizeMap,
50                                        int elementPosition, const StdString& fieldId);
51
52    template <typename T, int Ndim>
53    void readFieldVariableValue(CArray<T, Ndim>& var, const StdString& varId,
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:
63    /// Private attributes ///
64    MPI_Comm comm_file;
65    const StdString filename;
66    bool isCollective;
67  }; // class CNc4DataInput
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}
92} // namespace xios
93
94#endif //__XIOS_NC4_DATA_INPUT__
Note: See TracBrowser for help on using the repository browser.