atlas
Public Member Functions | Protected Member Functions | Friends | List of all members
atlas::mesh::MultiBlockConnectivityImpl Class Reference

Connectivity contiguously composed of multiple BlockConnectivityImpl. More...

#include <Connectivity.h>

Inheritance diagram for atlas::mesh::MultiBlockConnectivityImpl:
Inheritance graph
[legend]
Collaboration diagram for atlas::mesh::MultiBlockConnectivityImpl:
Collaboration graph
[legend]

Public Member Functions

 MultiBlockConnectivityImpl (const std::string &name="")
 Construct connectivity table that needs resizing a-posteriori Data is owned.
 
 MultiBlockConnectivityImpl (eckit::Stream &)
 Construct a mesh from a Stream (serialization)
 
ATLAS_HOST_DEVICE idx_t blocks () const
 Number of blocks.
 
ATLAS_HOST_DEVICE const BlockConnectivityImplblock (idx_t block_idx) const
 Access to a block connectivity.
 
ATLAS_HOST_DEVICE BlockConnectivityImplblock (idx_t block_idx)
 
ATLAS_HOST_DEVICE idx_t operator() (idx_t row_idx, idx_t col_idx) const
 Access to connectivity table elements for given row and column The row_idx counts up from 0, from block 0, as in IrregularConnectivity The returned index has base 0 regardless if ATLAS_HAVE_FORTRAN is defined. More...
 
ATLAS_HOST_DEVICE idx_t operator() (idx_t block_idx, idx_t block_row_idx, idx_t block_col_idx) const
 Access to connectivity table elements for given row and column The block_row_idx counts up from zero for every block_idx. More...
 
virtual void add (idx_t rows, idx_t cols, const idx_t values[], bool fortran_array=false)
 Resize connectivity, and add given rows as a new block. More...
 
virtual void add (const BlockConnectivityImpl &)
 Resize connectivity, and copy from a BlockConnectivity to a new block. More...
 
virtual void add (idx_t rows, idx_t cols)
 Resize connectivity, and add given rows with missing values. More...
 
virtual void add (idx_t rows, const idx_t cols[])
 Resize connectivity, and add given rows with missing values. More...
 
virtual void insert (idx_t position, idx_t rows, idx_t cols, const idx_t values[], bool fortran_array=false)
 Resize connectivity, and insert given rows. More...
 
virtual void insert (idx_t position, idx_t rows, idx_t cols)
 Resize connectivity, and insert given rows with missing values. More...
 
virtual void insert (idx_t position, idx_t rows, const idx_t cols[])
 Resize connectivity, and insert given rows with missing values. More...
 
virtual void clear ()
 
virtual size_t footprint () const
 
virtual void encode (eckit::Stream &s) const
 
virtual void decode (eckit::Stream &s)
 
- Public Member Functions inherited from atlas::mesh::IrregularConnectivityImpl
 IrregularConnectivityImpl (const std::string &name="")
 Construct connectivity table that needs resizing a-posteriori Data is owned.
 
 IrregularConnectivityImpl (idx_t values[], idx_t rows, idx_t displs[], idx_t counts[])
 Construct connectivity table wrapping existing raw data. More...
 
 IrregularConnectivityImpl (eckit::Stream &)
 Construct a mesh from a Stream (serialization)
 
const std::string name () const
 Name associated to this Connetivity.
 
void rename (const std::string &name)
 Rename this Connectivity.
 
ATLAS_HOST_DEVICE idx_t rows () const
 Number of rows in the connectivity table.
 
ATLAS_HOST_DEVICE idx_t cols (idx_t row_idx) const
 Number of columns for specified row in the connectivity table.
 
ATLAS_HOST_DEVICE idx_t maxcols () const
 Maximum value for number of columns over all rows.
 
ATLAS_HOST_DEVICE idx_t mincols () const
 Minimum value for number of columns over all rows.
 
ATLAS_HOST_DEVICE idx_t operator() (idx_t row_idx, idx_t col_idx) const
 Access to connectivity table elements for given row and column The returned index has base 0 regardless if ATLAS_HAVE_FORTRAN is defined. More...
 
idx_t size () const
 
ATLAS_HOST_DEVICE idx_t missing_value () const
 
ATLAS_HOST_DEVICE Row row (idx_t row_idx) const
 
void set (idx_t row_idx, const idx_t column_values[])
 Modify row with given values. Values must be given with base 0.
 
void set (idx_t row_idx, idx_t col_idx, const idx_t value)
 Modify (row,col) with given value. Value must be given with base 0.
 
virtual void resize (idx_t old_size, idx_t size, bool initialize, const idx_t values[], bool fortran_array)
 Resize connectivity. More...
 
idx_t displs (const idx_t row) const
 
void dump (std::ostream &os) const
 

Protected Member Functions

void encode_ (eckit::Stream &) const
 Serialization to Stream.
 
void decode_ (eckit::Stream &)
 Serialization from Stream.
 
- Protected Member Functions inherited from atlas::mesh::IrregularConnectivityImpl
bool owns ()
 
const idx_tdispls () const
 
const idx_tcounts () const
 
void encode_ (eckit::Stream &) const
 Serialization to Stream.
 
void decode_ (eckit::Stream &)
 Serialization from Stream.
 

Friends

eckit::Stream & operator<< (eckit::Stream &s, const MultiBlockConnectivityImpl &x)
 
eckit::Stream & operator>> (eckit::Stream &s, MultiBlockConnectivityImpl &x)
 

Additional Inherited Members

- Public Types inherited from atlas::mesh::IrregularConnectivityImpl
typedef ConnectivityRow Row
 
typedef void * ctxt_t
 
typedef void(* callback_t) (ctxt_t)
 
- Protected Attributes inherited from atlas::mesh::IrregularConnectivityImpl
array::SVector< idx_tvalues_
 
array::SVector< idx_tdispls_
 
array::SVector< idx_tcounts_
 
idx_t missing_value_
 
idx_t rows_
 
idx_t maxcols_
 
idx_t mincols_
 

Detailed Description

Connectivity contiguously composed of multiple BlockConnectivityImpl.

Author
Willem Deconinck

Container for connectivity tables that are layed out in memory as multiple BlockConnectivities stitched together. This is e.g. the case for a element-node connectivity, with element-types grouped together:

connectivity = [
# triangles (block 0)
1 2 3
4 5 6
7 8 9
10 11 12
# quadrilaterals (block 1)
13 14 15 16
17 18 19 20
21 22 23 24
]

This class can also be interpreted as a atlas::IrregularConnectivity without distinction between blocks

There are 2 modes of construction:

In case ATLAS_HAVE_FORTRAN is defined (which is usually the case), the raw data will be stored with base 1 for Fortran interoperability. The operator(row,col) will then do the conversion to base 0.

In the first mode of construction, the connectivity table cannot be resized. In the second mode of construction, resizing is possible

Member Function Documentation

◆ add() [1/4]

void atlas::mesh::MultiBlockConnectivityImpl::add ( idx_t  rows,
idx_t  cols,
const idx_t  values[],
bool  fortran_array = false 
)
virtual

Resize connectivity, and add given rows as a new block.

Note
Can only be used when data is owned.

Reimplemented from atlas::mesh::IrregularConnectivityImpl.

◆ add() [2/4]

void atlas::mesh::MultiBlockConnectivityImpl::add ( const BlockConnectivityImpl block)
virtual

Resize connectivity, and copy from a BlockConnectivity to a new block.

Note
Can only be used when data is owned.

Reimplemented from atlas::mesh::IrregularConnectivityImpl.

◆ add() [3/4]

void atlas::mesh::MultiBlockConnectivityImpl::add ( idx_t  rows,
idx_t  cols 
)
virtual

Resize connectivity, and add given rows with missing values.

Note
Can only be used when data is owned.

Reimplemented from atlas::mesh::IrregularConnectivityImpl.

◆ add() [4/4]

void atlas::mesh::MultiBlockConnectivityImpl::add ( idx_t  rows,
const idx_t  cols[] 
)
virtual

Resize connectivity, and add given rows with missing values.

Note
Can only be used when data is owned.

Reimplemented from atlas::mesh::IrregularConnectivityImpl.

◆ insert() [1/3]

void atlas::mesh::MultiBlockConnectivityImpl::insert ( idx_t  position,
idx_t  rows,
idx_t  cols,
const idx_t  values[],
bool  fortran_array = false 
)
virtual

Resize connectivity, and insert given rows.

Note
Can only be used when data is owned.

Reimplemented from atlas::mesh::IrregularConnectivityImpl.

◆ insert() [2/3]

void atlas::mesh::MultiBlockConnectivityImpl::insert ( idx_t  position,
idx_t  rows,
idx_t  cols 
)
virtual

Resize connectivity, and insert given rows with missing values.

Note
Can only be used when data is owned.

Reimplemented from atlas::mesh::IrregularConnectivityImpl.

◆ insert() [3/3]

void atlas::mesh::MultiBlockConnectivityImpl::insert ( idx_t  position,
idx_t  rows,
const idx_t  cols[] 
)
virtual

Resize connectivity, and insert given rows with missing values.

Note
Can only be used when data is owned.

Reimplemented from atlas::mesh::IrregularConnectivityImpl.

◆ operator()() [1/2]

idx_t atlas::mesh::MultiBlockConnectivityImpl::operator() ( idx_t  row_idx,
idx_t  col_idx 
) const
inline

Access to connectivity table elements for given row and column The row_idx counts up from 0, from block 0, as in IrregularConnectivity The returned index has base 0 regardless if ATLAS_HAVE_FORTRAN is defined.

◆ operator()() [2/2]

idx_t atlas::mesh::MultiBlockConnectivityImpl::operator() ( idx_t  block_idx,
idx_t  block_row_idx,
idx_t  block_col_idx 
) const
inline

Access to connectivity table elements for given row and column The block_row_idx counts up from zero for every block_idx.

The returned index has base 0 regardless if ATLAS_HAVE_FORTRAN is defined.


The documentation for this class was generated from the following files: