21 #include "atlas/util/Object.h" 22 #include "atlas/util/ObjectHandle.h" 24 #include "atlas/field/Field.h" 25 #include "atlas/util/Metadata.h" 52 class ConnectivityInterface;
53 class MultiBlockConnectivityImpl;
54 using MultiBlockConnectivity = ConnectivityInterface<MultiBlockConnectivityImpl>;
90 const std::string& name(
idx_t elem_idx )
const;
105 idx_t nb_types()
const;
115 const Field& field(
const std::string& name )
const;
116 Field& field(
const std::string& name );
117 bool has_field(
const std::string& name )
const {
return ( fields_.find( name ) != fields_.end() ); }
121 idx_t nb_fields()
const {
return static_cast<idx_t>( fields_.size() ); }
126 const Field& global_index()
const {
return field(
"glb_idx" ); }
127 Field& global_index() {
return field(
"glb_idx" ); }
129 const Field& remote_index()
const {
return field(
"remote_idx" ); }
130 Field& remote_index() {
return field(
"remote_idx" ); }
132 const Field& partition()
const {
return field(
"partition" ); }
133 Field& partition() {
return field(
"partition" ); }
135 const Field& halo()
const {
return field(
"halo" ); }
136 Field& halo() {
return field(
"halo" ); }
138 const Field& flags()
const {
return field(
"flags" ); }
139 Field& flags() {
return field(
"flags" ); }
169 void remove_field(
const std::string& name );
173 void updateDevice()
const;
175 void updateHost()
const;
177 void syncHostDevice()
const;
182 size_t footprint()
const;
185 typedef std::map<std::string, Field> FieldMap;
186 typedef std::map<std::string, util::ObjectHandle<Connectivity>> ConnectivityMap;
189 void resize(
idx_t size );
191 idx_t elemtype_nb_nodes(
idx_t elem_idx )
const;
192 idx_t elemtype_nb_edges(
idx_t elem_idx )
const;
194 Connectivity& add( Connectivity* );
201 std::vector<idx_t> elements_size_;
202 std::vector<idx_t> elements_begin_;
203 std::vector<util::ObjectHandle<const ElementType>> element_types_;
206 std::vector<idx_t> type_idx_;
209 std::vector<util::ObjectHandle<Elements>> elements_;
213 ConnectivityMap connectivities_;
219 Connectivity* node_connectivity_;
220 Connectivity* edge_connectivity_;
221 Connectivity* cell_connectivity_;
226 inline idx_t HybridElements::size()
const {
230 inline idx_t HybridElements::nb_types()
const {
231 return static_cast<idx_t>( element_types_.size() );
235 return *element_types_[type_idx].get();
239 return *node_connectivity_;
243 return *node_connectivity_;
247 return *edge_connectivity_;
251 return *edge_connectivity_;
255 return *cell_connectivity_;
259 return *cell_connectivity_;
263 return *elements_[type_idx].get();
266 inline Elements& HybridElements::elements(
idx_t type_idx ) {
267 return *elements_[type_idx].get();
270 inline idx_t HybridElements::nb_nodes(
idx_t elem_idx )
const {
271 return node_connectivity_->rows() ? node_connectivity_->cols( elem_idx ) : elemtype_nb_nodes( elem_idx );
274 inline idx_t HybridElements::nb_edges(
idx_t elem_idx )
const {
275 return edge_connectivity_->rows() ? edge_connectivity_->cols( elem_idx ) : elemtype_nb_edges( elem_idx );
278 inline idx_t HybridElements::type_idx(
idx_t elem_idx )
const {
279 return type_idx_[elem_idx];
297 int atlas__mesh__HybridElements__has_field(
const HybridElements* This,
char* name );
298 int atlas__mesh__HybridElements__nb_fields(
const HybridElements* This );
299 int atlas__mesh__HybridElements__nb_types(
const HybridElements* This );
A Field contains an Array, Metadata, and a reference to a FunctionSpace.
Definition: Field.h:59
Describe elements of a single type.
Definition: Elements.h:37
Definition: Connectivity.h:53
ElementType class (abstract) that provides access to geometric information of an element.
Definition: ElementType.h:29
HybridElements class that describes elements of different types.
Definition: HybridElements.h:64
Contains all atlas classes and methods.
Definition: atlas-grids.cc:33
Definition: FieldImpl.h:40
long idx_t
Integer type for indices in connectivity tables.
Definition: config.h:42