source: XIOS/dev/branch_openmp/src/io/nc4_data_input.hpp @ 1538

Last change on this file since 1538 was 1491, checked in by yushan, 6 years ago

Branch EP merged with Dev_cmip6 @r1490

  • 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: 4.0 KB
RevLine 
[591]1#ifndef __XIOS_NC4_DATA_INPUT__
2#define __XIOS_NC4_DATA_INPUT__
[219]3
[591]4/// XIOS headers ///
[1328]5#include "mpi_std.hpp"
[591]6#include "xios_spl.hpp"
[599]7#include "data_input.hpp"
[219]8#include "inetcdf4.hpp"
9
[335]10namespace xios
[219]11{
[775]12  class CDomain;
13  class CAxis;
[967]14  class CScalar;
[775]15
[599]16  class CNc4DataInput
17    : protected CINetCDF4
18    , public virtual CDataInput
19  {
20  public:
21    /// Type definitions ///
22    typedef CINetCDF4  SuperClassWriter;
23    typedef CDataInput SuperClass;
[219]24
[599]25    /// Constructors ///
[1328]26    CNc4DataInput(const StdString& filename, ep_lib::MPI_Comm comm_file, bool multifile, bool isCollective = true,
[1491]27                  bool readMetaDataPar = false, bool ugridConvention = false, const StdString& timeCounterName = "time_counter");
28                  //const StdString& timeCounterName = "time_counter");
[599]29    CNc4DataInput(const CNc4DataInput& dataInput);       // Not implemented.
30    CNc4DataInput(const CNc4DataInput* const dataInput); // Not implemented.
[219]31
[599]32    /// Destructor ///
33    virtual ~CNc4DataInput(void);
[219]34
[599]35    /// Getters ///
36    const StdString& getFileName(void) const;
[219]37
[599]38  protected:
39    // Read methods
40    virtual StdSize getFieldNbRecords_(CField* field);
41    virtual void readFieldData_(CField* field);
[775]42    virtual void readFieldAttributes_(CField* field, bool readAttributeValues);
[599]43    virtual void closeFile_(void);
[219]44
[599]45  private:
[783]46    void readDomainAttributesFromFile(CDomain* domain, std::list<std::pair<StdString, StdSize> >& dimSizeMap,
[775]47                                      int elementPosition, const StdString& fieldId);
[783]48    void readDomainAttributeValueFromFile(CDomain* domain, std::list<std::pair<StdString, StdSize> >& dimSizeMap,
[775]49                                          int elementPosition, const StdString& fieldId);
50
[783]51    void readAxisAttributesFromFile(CAxis* axis, std::list<std::pair<StdString, StdSize> >& dimSizeMap,
[775]52                                    int elementPosition, const StdString& fieldId);
[783]53    void readAxisAttributeValueFromFile(CAxis* axis, std::list<std::pair<StdString, StdSize> >& dimSizeMap,
[775]54                                        int elementPosition, const StdString& fieldId);
55
[967]56    void readScalarAttributesFromFile(CScalar* scalar, std::list<std::pair<StdString, StdSize> >& dimSizeMap,
57                                      int elementPosition, const StdString& fieldId);
58    void readScalarAttributeValueFromFile(CScalar* scalar, std::list<std::pair<StdString, StdSize> >& dimSizeMap,
59                                          int elementPosition, const StdString& fieldId);
60
[782]61    template <typename T, int Ndim>
62    void readFieldVariableValue(CArray<T, Ndim>& var, const StdString& varId,
[775]63                                const std::vector<StdSize>& nBegin,
64                                const std::vector<StdSize>& nSize,
65                                bool forceIndependent = false);
66
67  private:
68    std::set<StdString> readMetaDataDomains_, readValueDomains_;
69    std::set<StdString> readMetaDataAxis_, readValueAxis_;
[967]70    std::set<StdString> readMetaDataScalar_, readValueScalar_;
[775]71
72  private:
[599]73    /// Private attributes ///
[1328]74    ep_lib::MPI_Comm comm_file;
[599]75    const StdString filename;
76    bool isCollective;
[1491]77    bool ugridConvention;
[599]78  }; // class CNc4DataInput
[782]79
80template <typename T, int Ndim>
81void CNc4DataInput::readFieldVariableValue(CArray<T,Ndim>& var, const StdString& varId,
82                                           const std::vector<StdSize>& nBegin,
83                                           const std::vector<StdSize>& nSize,
84                                           bool forceIndependent)
85{
86  if (SuperClass::type==MULTI_FILE || !isCollective) return;
87
88  bool openCollective = isCollective;
89  if (forceIndependent) openCollective = !isCollective;
90  switch (SuperClass::type)
91  {
92    case MULTI_FILE:
93      ERROR("CINetCDF4::readFieldVariableValue(...)",
94            << "Only support attributes reading with one_file mode");
95      break;
96    case ONE_FILE:
97    {
98      SuperClassWriter::getData(var, varId, openCollective, 0, &nBegin, &nSize);
99      break;
100    }
101  }
102}
[335]103} // namespace xios
[219]104
[591]105#endif //__XIOS_NC4_DATA_INPUT__
Note: See TracBrowser for help on using the repository browser.