PISM, A Parallel Ice Sheet Model 2.3.0-79cae578d committed by Constantine Khrulev on 2026-03-22
Loading...
Searching...
No Matches
io_helpers.hh
Go to the documentation of this file.
1/* Copyright (C) 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2023, 2024, 2025, 2026 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 <set>
24#include <memory>
25#include <string>
26#include <vector>
27#include <mpi.h>
28
29namespace pism {
30
31namespace units {
32class System;
33}
34
35class Config;
36class VariableMetadata;
37class Grid;
38class File;
39class Logger;
40
41namespace grid {
42class InputGridInfo;
43class DistributedGridInfo;
44}
45
46class LocalInterpCtx;
47
48class OutputFile;
49
50namespace io {
51
52std::string time_dimension(std::shared_ptr<units::System> unit_system,
53 const File &file,
54 const std::string &variable_name);
55
56void check_input_grid(const grid::InputGridInfo &input_grid,
57 const grid::DistributedGridInfo& internal_grid,
58 const std::vector<double> &internal_z_levels,
59 bool allow_extrapolation);
60
61void regrid_spatial_variable(const VariableMetadata &variable,
62 const Grid& internal_grid,
63 const LocalInterpCtx &lic,
64 const File &file,
65 const Logger &log,
66 double *output);
67
68void read_spatial_variable(const VariableMetadata &variable,
69 const Grid& grid, const File &file,
70 unsigned int time, double *output);
71
72std::vector<double> read_1d_variable(const File &file, const std::string &name,
73 const std::string &units,
74 std::shared_ptr<units::System> unit_system);
75
76std::vector<double> read_timeseries_variable(const File &file, const std::string &variable_name,
77 const std::string &units,
78 std::shared_ptr<units::System> unit_system,
79 size_t start, size_t count);
80
81std::vector<double> read_bounds(const File &file, const std::string &bounds_variable_name,
82 const std::string &units,
83 std::shared_ptr<units::System> unit_system);
84
85void read_time_info(std::shared_ptr<units::System> unit_system, const File &file,
86 const std::string &time_name, const std::string &time_units,
87 std::vector<double> &times, std::vector<double> &bounds);
88
89VariableMetadata read_attributes(const File &file, const std::string &variable_name,
90 std::shared_ptr<units::System> unit_system);
91
92void define_variables(const OutputFile &file,
93 const std::set<VariableMetadata> &variables,
94 const VariableMetadata &mapping,
95 bool use_internal_units);
96
97// writing utilities
98
99void write_config(const Config &config, const std::string &variable_name, const OutputFile &file);
100
101void move_if_exists(MPI_Comm com, const std::string &file_to_move, int rank_to_use = 0);
102
103void remove_if_exists(MPI_Comm com, const std::string &file_to_remove, int rank_to_use = 0);
104
105} // end of namespace io
106} // end of namespace pism
107
108#endif /* PISM_IO_HELPERS_H */
A class for storing and accessing PISM configuration flags and parameters.
Definition Config.hh:56
High-level PISM I/O class.
Definition File.hh:57
Describes the PISM grid and the distribution of data across processors.
Definition Grid.hh:285
A basic logging class.
Definition Logger.hh:40
std::vector< double > read_timeseries_variable(const File &file, const std::string &variable_name, const std::string &units, std::shared_ptr< units::System > unit_system, size_t start, size_t count)
void read_spatial_variable(const VariableMetadata &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 check_input_grid(const grid::InputGridInfo &input_grid, const grid::DistributedGridInfo &internal_grid, const std::vector< double > &internal_z_levels, bool allow_extrapolation)
Check that x, y, and z coordinates of the input grid are strictly increasing.
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_config(const Config &config, const std::string &variable_name, const OutputFile &file)
void move_if_exists(MPI_Comm com, const std::string &file_to_move, int rank_to_use=0)
Moves the file aside (file.nc -> file.nc~).
void define_variables(const OutputFile &file, const std::set< VariableMetadata > &variables, const VariableMetadata &mapping, bool use_internal_units)
void regrid_spatial_variable(const VariableMetadata &variable, const Grid &target_grid, const LocalInterpCtx &interp_context, const File &file, const Logger &log, double *output)
Regrid from a NetCDF file into a distributed array output.
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=0)
Check if a file is present are remove it.
std::string time_dimension(units::System::Ptr unit_system, const File &file, const std::string &variable_name)
std::shared_ptr< Grid > grid(std::shared_ptr< Context > ctx)
Definition pism.cc:173
int count
Definition test_cube.c:16