PISM, A Parallel Ice Sheet Model 2.3.0-79cae578d committed by Constantine Khrulev on 2026-03-22
Loading...
Searching...
No Matches
File.hh
Go to the documentation of this file.
1// Copyright (C) 2012, 2013, 2014, 2015, 2016, 2017, 2019, 2020, 2023, 2024, 2025 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 _PISM_FILE_ACCESS_H_
20#define _PISM_FILE_ACCESS_H_
21
22#include <vector>
23#include <string>
24#include <mpi.h>
25
26#include "pism/util/Units.hh"
27
28namespace pism {
29
30enum AxisType : int;
31
32namespace io {
33enum Type : int;
34enum Backend : int;
35enum Mode : int;
36} // namespace io
37
38namespace grid {
39class DistributedGridInfo;
40}
41
42/*!
43 * Convert a string to PISM's backend type.
44 */
45io::Backend string_to_backend(const std::string &backend);
46
48 bool exists;
49 std::string name;
50};
51
52//! \brief High-level PISM I/O class.
53/*!
54 * Hides the low-level NetCDF wrapper.
55 */
56class File
57{
58public:
59 File(MPI_Comm com, const std::string &filename, io::Backend backend, io::Mode mode);
60 ~File();
61
62 MPI_Comm com() const;
63
64 void close();
65
66 void redef() const;
67
68 void enddef() const;
69
70 void sync() const;
71
72 std::string name() const;
73
74 unsigned int nrecords() const;
75
76 unsigned int nrecords(const std::string &name, const std::string &std_name,
77 units::System::Ptr unit_system) const;
78
79 unsigned int nvariables() const;
80
81 unsigned int nattributes(const std::string &var_name) const;
82
83 // dimensions
84
85 void define_dimension(const std::string &name, size_t length) const;
86
87 unsigned int dimension_length(const std::string &name) const;
88
89 std::vector<std::string> dimensions(const std::string &variable_name) const;
90
91 bool dimension_exists(const std::string &name) const;
92
93 AxisType dimension_type(const std::string &name,
94 units::System::Ptr unit_system) const;
95
96 // variables
97
98 std::string variable_name(unsigned int id) const;
99
100 void define_variable(const std::string &name, io::Type nctype,
101 const std::vector<std::string> &dims) const;
102
103 VariableLookupData find_variable(const std::string &short_name, const std::string &std_name) const;
104
105 bool variable_exists(const std::string &short_name) const;
106
107 void read_variable(const std::string &variable_name,
108 const std::vector<unsigned int> &start,
109 const std::vector<unsigned int> &count,
110 double *ip) const;
111
112 void write_variable(const std::string &variable_name,
113 const std::vector<unsigned int> &start,
114 const std::vector<unsigned int> &count,
115 const double *op) const;
116
117 void write_text_variable(const std::string &variable_name, const std::vector<unsigned int> &start,
118 const std::vector<unsigned int> &count, const std::string &input) const;
119
120 void set_variable_was_written(const std::string &name) const;
121 bool get_variable_was_written(const std::string &name) const;
122
123 void write_distributed_array(const std::string &variable_name,
124 const grid::DistributedGridInfo &grid,
125 unsigned int z_count,
126 bool time_dependent,
127 const double *input) const;
128
129 void set_compression_level(int level) const;
130
131 // attributes
132
133 void remove_attribute(const std::string &variable_name, const std::string &att_name) const;
134
135 std::string attribute_name(const std::string &var_name, unsigned int n) const;
136
137 io::Type attribute_type(const std::string &var_name, const std::string &att_name) const;
138
139 void write_attribute(const std::string &var_name, const std::string &att_name,
140 io::Type nctype, const std::vector<double> &values) const;
141
142 void write_attribute(const std::string &var_name, const std::string &att_name,
143 const std::string &value) const;
144
145 std::vector<double> read_double_attribute(const std::string &var_name,
146 const std::string &att_name) const;
147
148 std::string read_text_attribute(const std::string &var_name, const std::string &att_name) const;
149
150 void append_history(const std::string &history) const;
151private:
152 struct Impl;
154
155 void open(const std::string &filename, io::Mode mode);
156
157 // disable copying and assignments
158 File(const File &other);
159 File & operator=(const File &);
160};
161
162} // end of namespace pism
163
164#endif /* _PISM_FILE_ACCESS_H_ */
bool dimension_exists(const std::string &name) const
Checks if a dimension exists.
Definition File.cc:404
unsigned int nvariables() const
Definition File.cc:759
Impl * m_impl
Definition File.hh:153
void read_variable(const std::string &variable_name, const std::vector< unsigned int > &start, const std::vector< unsigned int > &count, double *ip) const
Definition File.cc:704
void define_dimension(const std::string &name, size_t length) const
Definition File.cc:537
std::string attribute_name(const std::string &var_name, unsigned int n) const
Definition File.cc:680
File & operator=(const File &)
AxisType dimension_type(const std::string &name, units::System::Ptr unit_system) const
Get the "type" of a dimension.
Definition File.cc:460
void set_compression_level(int level) const
Definition File.cc:189
void open(const std::string &filename, io::Mode mode)
Definition File.cc:193
void set_variable_was_written(const std::string &name) const
Definition File.cc:784
void redef() const
Definition File.cc:255
VariableLookupData find_variable(const std::string &short_name, const std::string &std_name) const
Find a variable using its standard name and/or short name.
Definition File.cc:328
void enddef() const
Definition File.cc:265
unsigned int nrecords() const
Get the number of records. Uses the length of an unlimited dimension.
Definition File.cc:280
MPI_Comm com() const
Definition File.cc:185
std::string variable_name(unsigned int id) const
Definition File.cc:772
bool variable_exists(const std::string &short_name) const
Checks if a variable exists.
Definition File.cc:378
void write_variable(const std::string &variable_name, const std::vector< unsigned int > &start, const std::vector< unsigned int > &count, const double *op) const
Definition File.cc:717
void sync() const
Definition File.cc:246
void close()
Definition File.cc:237
void define_variable(const std::string &name, io::Type nctype, const std::vector< std::string > &dims) const
Define a variable.
Definition File.cc:548
io::Type attribute_type(const std::string &var_name, const std::string &att_name) const
Definition File.cc:692
void write_text_variable(const std::string &variable_name, const std::vector< unsigned int > &start, const std::vector< unsigned int > &count, const std::string &input) const
Definition File.cc:729
void remove_attribute(const std::string &variable_name, const std::string &att_name) const
Definition File.cc:228
std::string name() const
Definition File.cc:274
void write_attribute(const std::string &var_name, const std::string &att_name, io::Type nctype, const std::vector< double > &values) const
Write a multiple-valued double attribute.
Definition File.cc:595
void write_distributed_array(const std::string &variable_name, const grid::DistributedGridInfo &grid, unsigned int z_count, bool time_dependent, const double *input) const
Definition File.cc:742
std::vector< double > read_double_attribute(const std::string &var_name, const std::string &att_name) const
Get a double attribute.
Definition File.cc:622
bool get_variable_was_written(const std::string &name) const
Definition File.cc:788
unsigned int nattributes(const std::string &var_name) const
Definition File.cc:668
void append_history(const std::string &history) const
Append to the history global attribute.
Definition File.cc:583
unsigned int dimension_length(const std::string &name) const
Get the length of a dimension.
Definition File.cc:420
File(const File &other)
std::vector< std::string > dimensions(const std::string &variable_name) const
Definition File.cc:390
std::string read_text_attribute(const std::string &var_name, const std::string &att_name) const
Get a text attribute.
Definition File.cc:650
High-level PISM I/O class.
Definition File.hh:57
std::shared_ptr< System > Ptr
Definition Units.hh:47
#define n
Definition exactTestM.c:37
AxisType
Definition IO_Flags.hh:34
io::Backend string_to_backend(const std::string &backend)
Definition File.cc:56
std::shared_ptr< Grid > grid(std::shared_ptr< Context > ctx)
Definition pism.cc:173
std::string name
Definition File.hh:49
int count
Definition test_cube.c:16