14 #include <type_traits> 17 #include "atlas/util/Object.h" 19 #include "atlas/library/config.h" 31 class PartitionPolygon;
32 class PartitionPolygons;
37 namespace functionspace {
39 #define FunctionspaceT_nonconst typename std::remove_const<FunctionSpaceT>::type 40 #define FunctionspaceT_const typename std::add_const<FunctionSpaceT>::type 48 virtual std::string type()
const = 0;
49 virtual operator bool()
const {
return true; }
50 virtual size_t footprint()
const = 0;
52 virtual atlas::Field createField(
const eckit::Configuration& )
const = 0;
58 template <
typename DATATYPE>
59 atlas::Field createField(
const eckit::Configuration& )
const;
61 template <
typename DATATYPE>
67 template <
typename FunctionSpaceT>
68 FunctionspaceT_nonconst* cast();
70 template <
typename FunctionSpaceT>
71 FunctionspaceT_const* cast()
const;
73 virtual std::string distribution()
const = 0;
75 virtual void haloExchange(
const FieldSet&,
bool =
false )
const;
76 virtual void haloExchange(
const Field&,
bool =
false )
const;
78 virtual void adjointHaloExchange(
const FieldSet&,
bool =
false )
const;
79 virtual void adjointHaloExchange(
const Field&,
bool =
false )
const;
81 virtual idx_t size()
const = 0;
83 virtual idx_t nb_partitions()
const;
99 template <
typename FunctionSpaceT>
100 inline FunctionspaceT_nonconst* FunctionSpaceImpl::cast() {
101 return dynamic_cast<FunctionspaceT_nonconst*
>( this );
104 template <
typename FunctionSpaceT>
105 inline FunctionspaceT_const* FunctionSpaceImpl::cast()
const {
106 return dynamic_cast<FunctionspaceT_const*
>( this );
109 #undef FunctionspaceT_const 110 #undef FunctionspaceT_nonconst 119 virtual std::string type()
const {
return "NoFunctionSpace"; }
120 virtual operator bool()
const {
return false; }
121 virtual size_t footprint()
const {
return sizeof( *this ); }
122 virtual std::string distribution()
const {
return std::string(); }
124 virtual Field createField(
const eckit::Configuration& )
const;
125 virtual Field createField(
const Field&,
const eckit::Configuration& )
const;
126 virtual idx_t size()
const {
return 0; }
A Field contains an Array, Metadata, and a reference to a FunctionSpace.
Definition: Field.h:59
Dummy Functionspace class that evaluates to false.
Definition: FunctionSpaceImpl.h:115
Definition: Polygon.h:155
Definition: Projection.h:49
Represents a set of fields, where order is preserved.
Definition: FieldSet.h:146
Contains all atlas classes and methods.
Definition: atlas-grids.cc:33
long idx_t
Integer type for indices in connectivity tables.
Definition: config.h:42
FunctionSpace class helps to interprete Fields.
Definition: FunctionSpaceImpl.h:44