PISM, A Parallel Ice Sheet Model
stable v2.1-1-g6902d5502 committed by Ed Bueler on 2023-12-20 08:38:27 -0800
src
util
io
IO_Flags.hh
Go to the documentation of this file.
1
/* Copyright (C) 2014, 2015, 2018, 2019, 2020, 2023 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
20
#ifndef PISM_IO_FLAGS_H
21
#define PISM_IO_FLAGS_H
22
23
#include <string>
24
25
namespace
pism
{
26
27
/*!
28
* Axis corresponding to dimensions (and coordinate variables) in a NetCDF file.
29
*
30
* These values are also used as indexes in `start` and `count` arrays -- this is why they
31
* have consecutive values starting from 0.
32
*/
33
enum
AxisType
:
int
{
T_AXIS
= 0,
X_AXIS
= 1,
Y_AXIS
= 2,
Z_AXIS
= 3,
UNKNOWN_AXIS
= 4 };
34
35
AxisType
axis_type_from_string
(
const
std::string &input);
36
37
namespace
io {
38
39
// I/O Flags used by File and NCFile. They are used in both interfaces,
40
// but I want to be able to create Python wrappers for File without
41
// exposing NCFile, and NCFile should compile without File, so it does
42
// not belong in either File.hh or NCFile.hh.
43
44
// This is a subset of NetCDF data-types.
45
enum
Type
:
int
{
46
PISM_NAT
= 0,
/* NAT = 'Not A Type' (c.f. NaN) */
47
PISM_BYTE
= 1,
/* signed 1 byte integer */
48
PISM_CHAR
= 2,
/* ISO/ASCII character */
49
PISM_SHORT
= 3,
/* signed 2 byte integer */
50
PISM_INT
= 4,
/* signed 4 byte integer */
51
PISM_FLOAT
= 5,
/* single precision floating point number */
52
PISM_DOUBLE
= 6
/* double precision floating point number */
53
};
54
55
enum
Backend
:
int
{
56
PISM_GUESS
,
57
PISM_NETCDF3
,
58
PISM_NETCDF4_SERIAL
,
59
PISM_NETCDF4_PARALLEL
,
60
PISM_PNETCDF
,
61
PISM_PIO_PNETCDF
,
62
PISM_PIO_NETCDF
,
63
PISM_PIO_NETCDF4C
,
64
PISM_PIO_NETCDF4P
65
};
66
67
// This is a subset of NetCDF file modes. Use values that don't match
68
// NetCDF flags so that we can detect errors caused by passing these
69
// straight to NetCDF.
70
enum
Mode
:
int
{
71
//! open an existing file for reading only
72
PISM_READONLY
= 7,
73
//! open an existing file for reading and writing
74
PISM_READWRITE
= 8,
75
//! create a file for writing, overwrite if present
76
PISM_READWRITE_CLOBBER
= 9,
77
//! create a file for writing, move foo.nc to foo.nc~ if present
78
PISM_READWRITE_MOVE
= 10
79
};
80
81
// This is the special value corresponding to the "unlimited" dimension length.
82
// Gets cast to "int", so it should match the value used by NetCDF.
83
enum
Dim_Length
:
int
{
PISM_UNLIMITED
= 0 };
84
85
// "Fill" mode. Gets cast to "int", so it should match values used by NetCDF.
86
enum
Fill_Mode
:
int
{
PISM_FILL
= 0,
PISM_NOFILL
= 0x100 };
87
88
/*!
89
* Default value to use when a regridding variable is not found.
90
*/
91
class
Default
{
92
public
:
93
94
/*!
95
* No default value: stop if the variable was not found.
96
*/
97
static
Default
Nil
() {
98
return
{};
99
}
100
101
/*!
102
* Use this default value if the variable was not found.
103
*/
104
Default
(
double
v) {
105
m_exists
=
true
;
106
m_value
= v;
107
}
108
109
/*!
110
* True if the default value exists.
111
*/
112
bool
exists
()
const
{
113
return
m_exists
;
114
}
115
116
/*!
117
* Convert the default value to `double`.
118
*/
119
operator
double()
const
{
120
return
m_value
;
121
}
122
123
private
:
124
Default
() {
125
m_exists
=
false
;
126
m_value
= 0;
127
}
128
double
m_value
;
129
bool
m_exists
;
130
};
131
132
}
// namespace io
133
134
}
// end of namespace pism
135
136
#endif
/* PISM_IO_FLAGS_H */
pism::io::Default::m_value
double m_value
Definition:
IO_Flags.hh:128
pism::io::Default::Default
Default()
Definition:
IO_Flags.hh:124
pism::io::Default::Nil
static Default Nil()
Definition:
IO_Flags.hh:97
pism::io::Default::exists
bool exists() const
Definition:
IO_Flags.hh:112
pism::io::Default::Default
Default(double v)
Definition:
IO_Flags.hh:104
pism::io::Default::m_exists
bool m_exists
Definition:
IO_Flags.hh:129
pism::io::Default
Definition:
IO_Flags.hh:91
pism::io::Backend
Backend
Definition:
IO_Flags.hh:55
pism::io::PISM_PIO_NETCDF
@ PISM_PIO_NETCDF
Definition:
IO_Flags.hh:62
pism::io::PISM_GUESS
@ PISM_GUESS
Definition:
IO_Flags.hh:56
pism::io::PISM_PIO_NETCDF4P
@ PISM_PIO_NETCDF4P
Definition:
IO_Flags.hh:64
pism::io::PISM_NETCDF3
@ PISM_NETCDF3
Definition:
IO_Flags.hh:57
pism::io::PISM_PNETCDF
@ PISM_PNETCDF
Definition:
IO_Flags.hh:60
pism::io::PISM_NETCDF4_PARALLEL
@ PISM_NETCDF4_PARALLEL
Definition:
IO_Flags.hh:59
pism::io::PISM_NETCDF4_SERIAL
@ PISM_NETCDF4_SERIAL
Definition:
IO_Flags.hh:58
pism::io::PISM_PIO_PNETCDF
@ PISM_PIO_PNETCDF
Definition:
IO_Flags.hh:61
pism::io::PISM_PIO_NETCDF4C
@ PISM_PIO_NETCDF4C
Definition:
IO_Flags.hh:63
pism::io::Mode
Mode
Definition:
IO_Flags.hh:70
pism::io::PISM_READWRITE_CLOBBER
@ PISM_READWRITE_CLOBBER
create a file for writing, overwrite if present
Definition:
IO_Flags.hh:76
pism::io::PISM_READWRITE_MOVE
@ PISM_READWRITE_MOVE
create a file for writing, move foo.nc to foo.nc~ if present
Definition:
IO_Flags.hh:78
pism::io::PISM_READONLY
@ PISM_READONLY
open an existing file for reading only
Definition:
IO_Flags.hh:72
pism::io::PISM_READWRITE
@ PISM_READWRITE
open an existing file for reading and writing
Definition:
IO_Flags.hh:74
pism::io::Dim_Length
Dim_Length
Definition:
IO_Flags.hh:83
pism::io::PISM_UNLIMITED
@ PISM_UNLIMITED
Definition:
IO_Flags.hh:83
pism::io::Type
Type
Definition:
IO_Flags.hh:45
pism::io::PISM_SHORT
@ PISM_SHORT
Definition:
IO_Flags.hh:49
pism::io::PISM_FLOAT
@ PISM_FLOAT
Definition:
IO_Flags.hh:51
pism::io::PISM_DOUBLE
@ PISM_DOUBLE
Definition:
IO_Flags.hh:52
pism::io::PISM_NAT
@ PISM_NAT
Definition:
IO_Flags.hh:46
pism::io::PISM_BYTE
@ PISM_BYTE
Definition:
IO_Flags.hh:47
pism::io::PISM_INT
@ PISM_INT
Definition:
IO_Flags.hh:50
pism::io::PISM_CHAR
@ PISM_CHAR
Definition:
IO_Flags.hh:48
pism::io::Fill_Mode
Fill_Mode
Definition:
IO_Flags.hh:86
pism::io::PISM_FILL
@ PISM_FILL
Definition:
IO_Flags.hh:86
pism::io::PISM_NOFILL
@ PISM_NOFILL
Definition:
IO_Flags.hh:86
pism::AxisType
AxisType
Definition:
IO_Flags.hh:33
pism::UNKNOWN_AXIS
@ UNKNOWN_AXIS
Definition:
IO_Flags.hh:33
pism::T_AXIS
@ T_AXIS
Definition:
IO_Flags.hh:33
pism::X_AXIS
@ X_AXIS
Definition:
IO_Flags.hh:33
pism::Z_AXIS
@ Z_AXIS
Definition:
IO_Flags.hh:33
pism::Y_AXIS
@ Y_AXIS
Definition:
IO_Flags.hh:33
pism::axis_type_from_string
AxisType axis_type_from_string(const std::string &input)
Definition:
File.cc:469
pism
Definition:
AgeColumnSystem.cc:23
Generated by
1.9.1