21using std::dynamic_pointer_cast;
23#include "pism/util/Vars.hh"
24#include "pism/util/VariableMetadata.hh"
25#include "pism/util/array/CellType.hh"
26#include "pism/util/array/Vector.hh"
27#include "pism/util/array/Array3D.hh"
28#include "pism/util/error_handling.hh"
56 " was added already.",
75 std::string standard_name = m[
"standard_name"];
80 " was added already.",
81 standard_name.c_str());
89 " was added already.",
103 std::string std_name = m[
"standard_name"];
135 std::string short_name = j->second;
157const A*
get_(
const Vars *vars,
const std::string &name,
const std::string &kind) {
158 auto tmp =
dynamic_cast<const A*
>(vars->
get(name));
162 kind.c_str(), name.c_str());
157const A*
get_(
const Vars *vars,
const std::string &name,
const std::string &kind) {
…}
169 return get_<array::Scalar>(
this, name,
"2D scalar");
173 return get_<array::Scalar1>(
this, name,
"2D scalar (ghosted)");
177 return get_<array::Scalar2>(
this, name,
"2D scalar (ghosted, stencil width=2)");
181 return get_<array::Vector>(
this, name,
"2D vector");
185 return get_<array::CellType>(
this, name,
"2D cell type");
189 return get_<array::Array3D>(
this, name,
"3D scalar");
202 std::set<std::string> result;
205 result.insert(v.first);
209 result.insert(v.first);
218 std::string name = variable->
get_name();
222 std::string standard_name = m[
"standard_name"];
227 " was added already.",
228 standard_name.c_str());
236 " was added already.",
246 " was added already.",
268std::shared_ptr<A>
get_shared_(
const Vars *vars,
const std::string &name,
const std::string &kind) {
269 auto tmp = dynamic_pointer_cast<A, array::Array>(vars->
get_shared(name));
273 kind.c_str(), name.c_str());
268std::shared_ptr<A>
get_shared_(
const Vars *vars,
const std::string &name,
const std::string &kind) {
…}
288 return get_shared_<array::Scalar>(
this, name,
"2D scalar");
292 return get_shared_<array::Scalar1>(
this, name,
"2D scalar (ghosted)");
296 return get_shared_<array::Scalar2>(
this, name,
"2D scalar (ghosted, stencil width=2)");
301 return get_shared_<array::Vector>(
this, name,
"2D vector");
305 return get_shared_<array::CellType>(
this, name,
"2D cell type");
310 return get_shared_<array::Array3D>(
this, name,
"3D scalar");
315 std::set<std::string> result;
317 result.insert(v.first);
327 std::string short_name = j->second;
334 return std::shared_ptr<array::Array>();
342 return std::shared_ptr<array::Array>();
static RuntimeError formatted(const ErrorLocation &location, const char format[],...) __attribute__((format(printf
build a RuntimeError with a formatted message
std::map< std::string, std::shared_ptr< array::Array > > m_variables_shared
variables in shared ownership
const array::Array3D * get_3d_scalar(const std::string &name) const
const array::Vector * get_2d_vector(const std::string &name) const
const array::Scalar2 * get_2d_scalar2(const std::string &name) const
std::set< std::string > keys_shared() const
const array::Array * get_internal(const std::string &name) const
std::shared_ptr< array::Array3D > get_3d_scalar_shared(const std::string &name) const
std::set< std::string > keys() const
Returns the set of keys (variable names) in the dictionary.
const array::Scalar1 * get_2d_scalar1(const std::string &name) const
const array::CellType * get_2d_cell_type(const std::string &name) const
std::shared_ptr< array::Array > get_shared(const std::string &name) const
std::shared_ptr< array::CellType > get_2d_cell_type_shared(const std::string &name) const
bool is_available_shared(const std::string &name) const
void add_shared(std::shared_ptr< array::Array >)
const array::Scalar * get_2d_scalar(const std::string &name) const
std::shared_ptr< array::Scalar1 > get_2d_scalar1_shared(const std::string &name) const
const array::Array * get(const std::string &name) const
Returns a pointer to an array::Array containing variable name or NULL if that variable was not found.
void remove(const std::string &name)
Removes a variable with the key name from the dictionary.
bool is_available(const std::string &name) const
std::shared_ptr< array::Array > get_internal_shared(const std::string &name) const
std::shared_ptr< array::Scalar > get_2d_scalar_shared(const std::string &name) const
std::shared_ptr< array::Scalar2 > get_2d_scalar2_shared(const std::string &name) const
std::map< std::string, const array::Array * > m_variables
std::shared_ptr< array::Vector > get_2d_vector_shared(const std::string &name) const
void add(const array::Array &)
Add an array::Array to the dictionary.
std::map< std::string, std::string > m_standard_names
A class for passing PISM variables from the core to other parts of the code (such as climate couplers...
A virtual class collecting methods common to ice and bedrock 3D fields.
const std::string & get_name() const
Get the name of an Array object.
SpatialVariableMetadata & metadata(unsigned int N=0)
Returns a reference to the SpatialVariableMetadata object containing metadata for the compoment N.
Abstract class for reading, writing, allocating, and accessing a DA-based PETSc Vec (2D and 3D fields...
"Cell type" mask. Adds convenience methods to array::Scalar.
#define PISM_ERROR_LOCATION
const A * get_(const Vars *vars, const std::string &name, const std::string &kind)
std::shared_ptr< A > get_shared_(const Vars *vars, const std::string &name, const std::string &kind)