Loading [MathJax]/extensions/tex2jax.js
PISM, A Parallel Ice Sheet Model 2.2.2-d6b3a29ca committed by Constantine Khrulev on 2025-03-28
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
PNCFile.hh
Go to the documentation of this file.
1// Copyright (C) 2012, 2013, 2014, 2015, 2016, 2017, 2019, 2020, 2023, 2024 PISM Authors
2//
3// This file is part of PISM.
4//
5// PISM is free software; you can redistribute it and/or modify it under the
6// terms of the GNU General Public License as published by the Free Software
7// Foundation; either version 3 of the License, or (at your option) any later
8// version.
9//
10// PISM is distributed in the hope that it will be useful, but WITHOUT ANY
11// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
13// details.
14//
15// You should have received a copy of the GNU General Public License
16// along with PISM; if not, write to the Free Software
17// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18
19#ifndef _PISMPNCFILE_H_
20#define _PISMPNCFILE_H_
21
22#include "pism/util/io/NCFile.hh"
23
24namespace pism {
25
26class ErrorLocation;
27
28namespace io {
29
30//! \brief PISM's PnetCDF I/O wrapper.
31class PNCFile : public NCFile
32{
33public:
34 PNCFile(MPI_Comm com);
35 virtual ~PNCFile();
36protected:
37 // implementations:
38 // open/create/close
39 void open_impl(const std::string &filename, io::Mode mode);
40
41 void create_impl(const std::string &filename);
42
43 void sync_impl() const;
44
45 void close_impl();
46
47 // redef/enddef
48 void enddef_impl() const;
49
50 void redef_impl() const;
51
52 // dim
53 void def_dim_impl(const std::string &name, size_t length) const;
54
55 void inq_dimid_impl(const std::string &dimension_name, bool &exists) const;
56
57 void inq_dimlen_impl(const std::string &dimension_name, unsigned int &result) const;
58
59 void inq_unlimdim_impl(std::string &result) const;
60
61 // var
62 void def_var_impl(const std::string &name, io::Type nctype,
63 const std::vector<std::string> &dims) const;
64
65 void get_vara_double_impl(const std::string &variable_name,
66 const std::vector<unsigned int> &start,
67 const std::vector<unsigned int> &count,
68 double *ip) const;
69
70 void put_vara_double_impl(const std::string &variable_name,
71 const std::vector<unsigned int> &start,
72 const std::vector<unsigned int> &count,
73 const double *op) const;
74
75 void inq_nvars_impl(int &result) const;
76
77 void inq_vardimid_impl(const std::string &variable_name, std::vector<std::string> &result) const;
78
79 void inq_varnatts_impl(const std::string &variable_name, int &result) const;
80
81 void inq_varid_impl(const std::string &variable_name, bool &exists) const;
82
83 void inq_varname_impl(unsigned int j, std::string &result) const;
84
85 void set_compression_level_impl(int level) const;
86
87 // att
88 void get_att_double_impl(const std::string &variable_name, const std::string &att_name,
89 std::vector<double> &result) const;
90
91 void get_att_text_impl(const std::string &variable_name, const std::string &att_name,
92 std::string &result) const;
93
94 void put_att_double_impl(const std::string &variable_name, const std::string &att_name,
95 io::Type xtype, const std::vector<double> &data) const;
96
97 void put_att_text_impl(const std::string &variable_name, const std::string &att_name,
98 const std::string &value) const;
99
100 void inq_attname_impl(const std::string &variable_name, unsigned int n,
101 std::string &result) const;
102
103 void inq_atttype_impl(const std::string &variable_name, const std::string &att_name,
104 io::Type &result) const;
105
106 // misc
107 void set_fill_impl(int fillmode, int &old_modep) const;
108
109 void del_att_impl(const std::string &variable_name, const std::string &att_name) const;
110
111private:
112 std::vector<std::string> m_mpi_io_hints;
113
114 void get_var_double(const std::string &variable_name, const std::vector<unsigned int> &start,
115 const std::vector<unsigned int> &count, double *ip) const;
116
117 void init_hints();
118
119 int get_varid(const std::string &variable_name) const;
120
121 MPI_Info m_mpi_info; // MPI hints
122};
123
124} // end of namespace io
125} // end of namespace pism
126
127#endif /* _PISMPNCFILE_H_ */
std::string filename() const
Definition NCFile.cc:39
The PISM wrapper for a subset of the NetCDF C API.
Definition NCFile.hh:59
void def_dim_impl(const std::string &name, size_t length) const
Definition PNCFile.cc:99
void inq_unlimdim_impl(std::string &result) const
Definition PNCFile.cc:134
void get_vara_double_impl(const std::string &variable_name, const std::vector< unsigned int > &start, const std::vector< unsigned int > &count, double *ip) const
Definition PNCFile.cc:169
void inq_varid_impl(const std::string &variable_name, bool &exists) const
Definition PNCFile.cc:255
void close_impl()
Definition PNCFile.cc:77
void inq_varname_impl(unsigned int j, std::string &result) const
Definition PNCFile.cc:264
void inq_dimid_impl(const std::string &dimension_name, bool &exists) const
Definition PNCFile.cc:107
void inq_nvars_impl(int &result) const
Definition PNCFile.cc:195
void del_att_impl(const std::string &variable_name, const std::string &att_name) const
Definition PNCFile.cc:336
void enddef_impl() const
Definition PNCFile.cc:85
void put_vara_double_impl(const std::string &variable_name, const std::vector< unsigned int > &start, const std::vector< unsigned int > &count, const double *op) const
Definition PNCFile.cc:176
void inq_varnatts_impl(const std::string &variable_name, int &result) const
Definition PNCFile.cc:248
void inq_dimlen_impl(const std::string &dimension_name, unsigned int &result) const
Definition PNCFile.cc:120
std::vector< std::string > m_mpi_io_hints
Definition PNCFile.hh:112
void sync_impl() const
Definition PNCFile.cc:70
void put_att_double_impl(const std::string &variable_name, const std::string &att_name, io::Type xtype, const std::vector< double > &data) const
Definition PNCFile.cc:341
void inq_attname_impl(const std::string &variable_name, unsigned int n, std::string &result) const
Definition PNCFile.cc:358
void get_var_double(const std::string &variable_name, const std::vector< unsigned int > &start, const std::vector< unsigned int > &count, double *ip) const
Definition PNCFile.cc:395
void inq_atttype_impl(const std::string &variable_name, const std::string &att_name, io::Type &result) const
Definition PNCFile.cc:373
virtual ~PNCFile()
Definition PNCFile.cc:39
void inq_vardimid_impl(const std::string &variable_name, std::vector< std::string > &result) const
Definition PNCFile.cc:203
void get_att_text_impl(const std::string &variable_name, const std::string &att_name, std::string &result) const
Definition PNCFile.cc:311
MPI_Info m_mpi_info
Definition PNCFile.hh:121
void redef_impl() const
Definition PNCFile.cc:92
void set_fill_impl(int fillmode, int &old_modep) const
Definition PNCFile.cc:389
void set_compression_level_impl(int level) const
Definition PNCFile.cc:437
void create_impl(const std::string &filename)
Definition PNCFile.cc:61
void get_att_double_impl(const std::string &variable_name, const std::string &att_name, std::vector< double > &result) const
Definition PNCFile.cc:275
int get_varid(const std::string &variable_name) const
Definition PNCFile.cc:236
void open_impl(const std::string &filename, io::Mode mode)
Definition PNCFile.cc:49
void put_att_text_impl(const std::string &variable_name, const std::string &att_name, const std::string &value) const
Definition PNCFile.cc:350
void def_var_impl(const std::string &name, io::Type nctype, const std::vector< std::string > &dims) const
Definition PNCFile.cc:151
PISM's PnetCDF I/O wrapper.
Definition PNCFile.hh:32
#define n
Definition exactTestM.c:37
int count
Definition test_cube.c:16