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
io_helpers.hh
Go to the documentation of this file.
1/* Copyright (C) 2015, 2016, 2017, 2018, 2019, 2020, 2021, 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
20#ifndef PISM_IO_HELPERS_H
21#define PISM_IO_HELPERS_H
22
23#include <string>
24#include <vector>
25#include <mpi.h>
26
27#include "IO_Flags.hh"
28#include "LocalInterpCtx.hh"
29#include "pism/util/Units.hh"
30
31namespace pism {
32
33class VariableMetadata;
34class SpatialVariableMetadata;
35class Grid;
36class File;
37class Time;
38class Logger;
39class Context;
40class Config;
41
42namespace grid {
43class InputGridInfo;
44}
45
47
48class LocalInterpCtx;
49
50namespace io {
51
52enum Type : int;
53
54void check_input_grid(const grid::InputGridInfo &input_grid,
55 const Grid& internal_grid,
56 const std::vector<double> &internal_z_levels);
57
58void regrid_spatial_variable(const SpatialVariableMetadata &variable,
59 const Grid& internal_grid,
60 const LocalInterpCtx &lic,
61 const File &file,
62 double *output);
63
64void read_spatial_variable(const SpatialVariableMetadata &variable,
65 const Grid& grid, const File &file,
66 unsigned int time, double *output);
67
68void write_spatial_variable(const SpatialVariableMetadata &metadata,
69 const Grid& grid, const File &file,
70 const double *input);
71
72void define_dimension(const File &nc, unsigned long int length,
73 const VariableMetadata &metadata);
74
75void define_time(const File &file, const Context &ctx);
76
77void define_time(const File &nc, const std::string &name, const std::string &calendar,
78 const std::string &units, units::System::Ptr unit_system);
79
80void append_time(const File &file, const Config &ctx, double time_seconds);
81void append_time(const File &nc, const std::string &name, double time_seconds);
82
83void define_spatial_variable(const SpatialVariableMetadata &metadata,
84 const Grid &grid, const File &file,
85 io::Type default_type);
86
87void define_timeseries(const VariableMetadata& var,
88 const std::string &dimension_name,
89 const File &nc, io::Type nctype);
90
91void define_time_bounds(const VariableMetadata& metadata,
92 const std::string &dimension_name,
93 const std::string &bounds_name,
94 const File &file, io::Type nctype);
95
96std::vector<double> read_1d_variable(const File &file, const std::string &name,
97 const std::string &units,
98 std::shared_ptr<units::System> unit_system);
99
100void write_timeseries(const File &nc, const VariableMetadata &metadata,
101 size_t t_start, const std::vector<double> &data);
102
103std::vector<double> read_bounds(const File &file, const std::string &bounds_variable_name,
104 const std::string &units,
105 std::shared_ptr<units::System> unit_system);
106
107void write_time_bounds(const File &file, const VariableMetadata &metadata,
108 size_t t_start, const std::vector<double> &data);
109
110void read_time_info(std::shared_ptr<units::System> unit_system, const File &file,
111 const std::string &time_name, const std::string &time_units,
112 std::vector<double> &times, std::vector<double> &bounds);
113
114std::string time_dimension(units::System::Ptr unit_system,
115 const File &file,
116 const std::string &variable_name);
117
118VariableMetadata read_attributes(const File &file, const std::string &variable_name,
119 std::shared_ptr<units::System> unit_system);
120
121void write_attributes(const File &file, const VariableMetadata &variable, io::Type nctype);
122
123bool file_exists(MPI_Comm com, const std::string &filename);
124
125void move_if_exists(MPI_Comm com, const std::string &file_to_move, int rank_to_use = 0);
126
127void remove_if_exists(MPI_Comm com, const std::string &file_to_remove, int rank_to_use = 0);
128
129} // end of namespace io
130} // end of namespace pism
131
132#endif /* PISM_IO_HELPERS_H */
std::shared_ptr< System > Ptr
Definition Units.hh:47
void append_time(const File &file, const Config &config, double time_seconds)
Prepare a file for output.
void read_spatial_variable(const SpatialVariableMetadata &variable, const Grid &grid, const File &file, unsigned int time, double *output)
Read a variable from a file into an array output.
VariableMetadata read_attributes(const File &file, const std::string &variable_name, std::shared_ptr< units::System > unit_system)
void define_dimension(const File &file, unsigned long int length, const VariableMetadata &metadata)
Define a dimension and the associated coordinate variable. Set attributes.
void read_time_info(std::shared_ptr< units::System > unit_system, const File &file, const std::string &time_name, const std::string &time_units, std::vector< double > &times, std::vector< double > &bounds)
std::vector< double > read_1d_variable(const File &file, const std::string &variable_name, const std::string &units, std::shared_ptr< units::System > unit_system)
void write_spatial_variable(const SpatialVariableMetadata &metadata, const Grid &grid, const File &file, const double *input)
Write a double array to a file.
void write_attributes(const File &file, const VariableMetadata &variable, io::Type nctype)
Write variable attributes to a NetCDF file.
void define_time_bounds(const VariableMetadata &var, const std::string &dimension_name, const std::string &bounds_name, const File &file, io::Type nctype)
void write_time_bounds(const File &file, const VariableMetadata &metadata, size_t t_start, const std::vector< double > &data)
void define_spatial_variable(const SpatialVariableMetadata &metadata, const Grid &grid, const File &file, io::Type default_type)
Define a NetCDF variable corresponding to a VariableMetadata object.
void check_input_grid(const grid::InputGridInfo &input_grid, const Grid &internal_grid, const std::vector< double > &internal_z_levels)
Check that x, y, and z coordinates of the input grid are strictly increasing.
void move_if_exists(MPI_Comm com, const std::string &file_to_move, int rank_to_use)
Moves the file aside (file.nc -> file.nc~).
void write_timeseries(const File &file, const VariableMetadata &metadata, size_t t_start, const std::vector< double > &data)
Write a time-series data to a file.
bool file_exists(MPI_Comm com, const std::string &filename)
std::vector< double > read_bounds(const File &file, const std::string &bounds_variable_name, const std::string &internal_units, std::shared_ptr< units::System > unit_system)
void remove_if_exists(MPI_Comm com, const std::string &file_to_remove, int rank_to_use)
Check if a file is present are remove it.
void regrid_spatial_variable(const SpatialVariableMetadata &variable, const Grid &target_grid, const LocalInterpCtx &interp_context, const File &file, double *output)
Regrid from a NetCDF file into a distributed array output.
std::string time_dimension(units::System::Ptr unit_system, const File &file, const std::string &variable_name)
void define_time(const File &file, const Context &ctx)
Prepare a file for output.
void define_timeseries(const VariableMetadata &var, const std::string &dimension_name, const File &file, io::Type nctype)
Define a NetCDF variable corresponding to a time-series.
static std::string calendar(const File *input_file, const Config &config, const Logger &log)
Definition Time.cc:146
std::shared_ptr< Grid > grid(std::shared_ptr< Context > ctx, char testname)
Definition pism.cc:176