|
DNDSR 0.1.0.dev1+gcd065ad
Distributed Numeric Data Structure for CFV
|
Core 2D variable-length array container, the storage foundation of DNDSR. More...
#include <Array.hpp>
Classes | |
| class | iterator |
| Random-access iterator over rows for a given device backend. More... | |
| struct | ReadSerializerMetaResult |
| Result type for ReadSerializerMeta. More... | |
Public Types | |
| using | self_type = Array< T, _row_size, _row_max, _align > |
| using | t_Layout = ArrayLayout< T, _row_size, _row_max, _align > |
| using | t_View = ArrayView< T, _row_size, _row_max, _align > |
| using | t_Data = host_device_vector< value_type > |
| using | t_DataUncompressed = std::vector< std::vector< value_type > > |
| using | t_RowStart = host_device_vector< index > |
| using | t_pRowStart = ssp< t_RowStart > |
| using | t_RowSizes = host_device_vector< rowsize > |
| using | t_pRowSizes = ssp< t_RowSizes > |
| template<DeviceBackend B> | |
| using | t_deviceView = ArrayDeviceView< B, T, _row_size, _row_max, _align > |
| template<DeviceBackend B> | |
| using | t_deviceViewConst = ArrayDeviceView< B, const T, _row_size, _row_max, _align > |
Public Types inherited from DNDS::ArrayLayout< T, _row_size, _row_max, _align > | |
| using | value_type = T |
Public Member Functions | |
| t_pRowStart | getRowStart () |
| Shared pointer to the row-start index (CSR layout only). | |
| t_pRowSizes | getRowSizes () |
| Shared pointer to the per-row size vector (TABLE_Max / TABLE_StaticMax). | |
| Array ()=default | |
| Default-constructed array: empty, no storage. | |
| Array (ObjName objName) | |
| Named constructor: sets the object name for tracing/debugging. Delegates to the default constructor, then sets the name. | |
| index | Size () const |
| Number of rows currently stored. O(1). | |
| rowsize | RowSize () const |
| Uniform row width for fixed layouts (no row index needed). | |
| rowsize | DataStride () const |
| Number of T elements per row in flat storage (data stride). For TABLE_StaticMax/TABLE_Max, this is _row_max (padded), not RowSize (used). Not valid for CSR (variable stride per row). | |
| rowsize | RowSize (index iRow) const |
Width used by row iRow in number of T elements. | |
| rowsize | RowSizeMax () const |
Maximum allowed row width for TABLE_Max / TABLE_StaticMax. | |
| rowsize | RowSizeField () const |
| "Logical" row-field width used by derived (Eigen) arrays: max for padded layouts, uniform width for fixed layouts. Not valid for CSR. | |
| rowsize | RowSizeField (index iRow) const |
| Per-row "field" size for CSR (= actual row width). Invalid elsewhere. | |
| bool | IfCompressed () const |
| (CSR only) Whether the array is in packed / flat form. | |
| void | CSRDecompress () |
| (CSR only) Switch to the uncompressed (nested vector) representation. | |
| void | CSRCompress () |
(CSR only) Pack the nested-vector representation into a flat buffer plus _pRowStart. No-op if already compressed. | |
| void | Compress () |
| Layout-polymorphic compress: no-op for non-CSR, calls CSRCompress for CSR. | |
| void | Decompress () |
| Layout-polymorphic decompress: no-op for non-CSR, calls CSRDecompress for CSR. | |
| t_Data & | RawDataVector () |
Access to the underlying flat buffer (host_device_vector<T>). | |
| void | Resize (index nSize, rowsize nRow_size_dynamic) |
| Resize the array, setting a uniform or maximum row width. | |
| void | Resize (index nSize) |
| Resize using only the row count (layouts with an implicit row width). | |
| template<class TFRowSize > | |
| void | Resize (index nSize, TFRowSize &&FRowSize) |
| Resize a CSR array directly to the compressed form via a width functor. | |
| void | ResizeRow (index iRow, rowsize nRowSize) |
| Change the width of a single row. | |
| void | ReserveRow (index iRow, rowsize nRowSize) |
| Reserve capacity for a CSR decompressed row without changing its size. | |
| t_View | view () |
| Produce a lightweight, device-agnostic view onto the array. | |
| const T & | at (index iRow, rowsize iCol) const |
| Bounds-checked element access. | |
| T & | operator() (index iRow, rowsize iCol=0) |
| Bounds-checked 2D element access (writable). | |
| const T & | operator() (index iRow, rowsize iCol=0) const |
| Bounds-checked 2D element access (read-only). | |
| T * | operator[] (index iRow) |
Return a raw pointer to the start of row iRow. | |
| const T * | operator[] (index iRow) const |
| Const row pointer, see the non-const overload. | |
| T * | data (DeviceBackend B=DeviceBackend::Unknown) |
| Raw pointer to the flat data buffer. | |
| size_t | DataSize () const |
Total number of T elements currently stored in the flat buffer. | |
| size_t | DataSizeBytes () const |
Flat buffer size in bytes (= DataSize() * sizeof(T)). | |
| void | CopyRowFrom (index dstRow, const self_type &src, index srcRow) |
| Copy raw row data from another Array of the same type. Works for all layouts (StaticFixed, Fixed, CSR, etc.) and is not hidden by derived types that make operator()/operator[] private. | |
| template<class TRowSizeFunc > | |
| void | ResizeRowsAndCompress (TRowSizeFunc &&rowSizeFunc) |
| Set per-row sizes from a source, applying an index mapping, then compress. For CSR layout only. rowSizeFunc(i) returns the desired row size for row i. Not hidden by derived types that make ResizeRow private. | |
| size_t | FullSizeBytes () const |
| Total footprint in bytes including structural arrays. | |
| std::size_t | hash () |
| Combined hash of size, structural arrays, and data. | |
| constexpr DataLayout | GetDataLayout () |
| Runtime accessor for the layout tag (constexpr-folded). | |
| void | clone (const self_type &R) |
| Shallow clone: copies all metadata and shares structural/data storage. | |
| void | CopyData (const self_type &R) |
| Deep copy alias. Currently delegates to clone; kept for API compatibility and to allow a future true deep-copy implementation. | |
| self_type & | operator= (const self_type &R) |
| Copy-assignment; implemented via clone with self-assign guard. | |
| Array (const self_type &R) | |
| Copy constructor (same semantics as clone). | |
| void | SwapData (self_type &R) |
| Swap the storage of two arrays in-place. | |
| void | __WriteSerializerData (const Serializer::SerializerBaseSSP &serializerP, Serializer::ArrayGlobalOffset offset) |
| void | __ReadSerializerData (const Serializer::SerializerBaseSSP &serializerP, Serializer::ArrayGlobalOffset &offset) |
| void | WriteSerializer (Serializer::SerializerBaseSSP serializerP, const std::string &name, Serializer::ArrayGlobalOffset offset, Serializer::ArrayGlobalOffset dataOffset=Serializer::ArrayGlobalOffset_Unknown) |
| Serialize (write) array data to a serializer. | |
| void | ReadSerializer (Serializer::SerializerBaseSSP serializerP, const std::string &name, Serializer::ArrayGlobalOffset &offset) |
| Convenience overload that discards the dataOffset output. | |
| void | ReadSerializer (Serializer::SerializerBaseSSP serializerP, const std::string &name, Serializer::ArrayGlobalOffset &offset, Serializer::ArrayGlobalOffset &dataOffset) |
| Deserialize (read) array data from a serializer. | |
| ReadSerializerMetaResult | ReadSerializerMeta (Serializer::SerializerBaseSSP serializerP, const std::string &name) |
| Reads only metadata from a serialized array without reading data. | |
| void | __ReadSerializerStructuralAndResolveDataOffset (const Serializer::SerializerBaseSSP &serializerP, Serializer::ArrayGlobalOffset &offset, Serializer::ArrayGlobalOffset &dataOffset) |
| Reads structural data (pRowStart / pRowSizes) and resolves dataOffset. | |
| void | __ReadSerializerDataAndPropagateOffset (const Serializer::SerializerBaseSSP &serializerP, Serializer::ArrayGlobalOffset &offset, Serializer::ArrayGlobalOffset &dataOffset) |
| Reads flat data and propagates resolved offsets back to the caller. | |
| void | to_host () |
| Mirror the flat/structural buffers back to host memory. | |
| void | to_device (DeviceBackend backend=DeviceBackend::Host) |
| Mirror the flat/structural buffers to a target device (e.g. CUDA). | |
| void | clear_device () |
| Release any device-side mirror of this array's buffers. | |
| template<DeviceBackend B> | |
| t_deviceView< B > | deviceView () |
Mutable device-callable view (Eigen::Map-style row access on GPU). | |
| template<DeviceBackend B> | |
| t_deviceViewConst< B > | deviceView () const |
| Const device-callable view. See non-const overload. | |
| DeviceBackend | device () const |
| Current device backend the data is mirrored on, or Unknown if host-only. | |
| template<DeviceBackend B> | |
| iterator< B > | begin () |
Iterator to the first row, viewed on device backend B. | |
| template<DeviceBackend B> | |
| iterator< B > | end () |
Iterator one past the last row, viewed on device backend B. | |
Public Member Functions inherited from DNDS::ObjectNaming | |
| ObjectNaming ()=default | |
| ObjectNaming (const ObjectNaming &)=default | |
| ObjectNaming (ObjectNaming &&)=default | |
| ObjectNaming & | operator= (const ObjectNaming &)=default |
| ObjectNaming & | operator= (ObjectNaming &&)=default |
| ~ObjectNaming ()=default | |
| void | setObjectName (const std::string &name) |
| const std::string & | getObjectName () const |
| std::string | getObjectIdentity (const std::string &sig) const |
Static Public Member Functions | |
| static constexpr bool | IsCSR () |
| static constexpr DataLayout | GetDataLayoutStatic () |
Compile-time layout tag (one of TABLE_StaticFixed, TABLE_Fixed, TABLE_StaticMax, TABLE_Max, CSR). | |
Static Public Member Functions inherited from DNDS::ArrayLayout< T, _row_size, _row_max, _align > | |
| static constexpr DataLayout | _GetDataLayout () |
| Deduce the DataLayout tag from the template parameters. | |
| static std::string | GetArrayName () |
| Human-readable type identifier including element typeid, sizes, and alignment. | |
| static std::string | GetArraySignature () |
| Compiler-independent identifier used by serializers to tag an array. | |
| static std::string | GetArraySignatureRelaxed () |
Signature with _row_size / _row_max replaced by DynamicSize. | |
| static std::tuple< int, int, int, int > | ParseArraySignatureTuple (const std::string &v) |
Parse a signature string into (sizeof_T, row_size, row_max, align). | |
| static bool | ArraySignatureIsCompatible (const std::string &v) |
| Whether a stored signature can be read into this array type. | |
Protected Member Functions | |
| bool | IfCompressed_ () const |
Protected Attributes | |
| t_pRowStart | _pRowStart |
| t_pRowSizes | _pRowSizes |
| t_Data | _data |
| DeviceBackend | deviceBackend = DeviceBackend::Unknown |
| t_DataUncompressed | _dataUncompressed |
| index | _size = 0 |
| rowsize | _row_size_dynamic = 0 |
Friends | |
| std::ostream & | operator<< (std::ostream &o, const Array< T, _row_size, _row_max, _align > &A) |
| Pretty-print rows, one per line, tab-separated. | |
Additional Inherited Members | |
Static Public Attributes inherited from DNDS::ArrayLayout< T, _row_size, _row_max, _align > | |
| static const rowsize | al = _align |
| static const rowsize | rs = _row_size |
| static const rowsize | rm = _row_max |
| static const size_t | sizeof_T = sizeof(value_type) |
| static const rowsize | s_T = al == NoAlign ? sizeof_T : (sizeof_T / al + 1) * al |
| static const DataLayout | _dataLayout = _GetDataLayout() |
| static const bool | isCSR = _dataLayout == CSR |
Core 2D variable-length array container, the storage foundation of DNDSR.
Array is a single template that unifies five distinct storage layouts used throughout the CFD code base (cell volumes, conservative variables, mesh connectivity, reconstruction coefficients, etc.). The layout is chosen at compile time by combining _row_size and _row_max:
| _row_size>=0 | _row_size==DynamicSize | _row_size==NonUniformSize | |
|---|---|---|---|
| _row_max>=0 | TABLE_StaticFixed | TABLE_Fixed | TABLE_StaticMax |
| _row_max==DynamicSize | TABLE_StaticFixed _row_max ignored | TABLE_Fixed _row_max ignored | TABLE_Max |
| _row_max==NonUniformSize | TABLE_StaticFixed _row_max ignored | TABLE_Fixed _row_max ignored | CSR |
Concrete semantics per layout:
_row_size elements (compile-time constant). Used for Euler state vectors (5 reals), cell volumes (1), coordinates (3), etc._row_size_dynamic). Used when the width depends on solver settings (e.g., reconstruction polynomial order)._row_max compile-time or runtime), with an auxiliary _pRowSizes vector giving the actual used width per row. Offers O(1) random access at the cost of wasted space for short rows._pRowStart[n+1]. No wasted space but needs pointer indirection. Two internal sub-states: compressed (flat) and decompressed (vector<vector<T>>, used during incremental row growth). Compress() must be called before MPI communication or serialization.The class inherits from ObjectNaming so each instance may carry a human-readable name (e.g. "coords", "cell2node") shown in assertions.
| T | Element type. Typically real (double) or index (int64_t). Must be trivially copyable for CUDA / MPI paths. |
| _row_size | Row width:
|
| _row_max | Only relevant when _row_size == NonUniformSize:
|
| _align | Alignment hint (currently only NoAlign is used). |
_align feature (currently ignored). | using DNDS::Array< T, _row_size, _row_max, _align >::t_Data = host_device_vector<value_type> |
| using DNDS::Array< T, _row_size, _row_max, _align >::t_DataUncompressed = std::vector<std::vector<value_type> > |
| using DNDS::Array< T, _row_size, _row_max, _align >::t_deviceView = ArrayDeviceView<B, T, _row_size, _row_max, _align> |
| using DNDS::Array< T, _row_size, _row_max, _align >::t_deviceViewConst = ArrayDeviceView<B, const T, _row_size, _row_max, _align> |
| using DNDS::Array< T, _row_size, _row_max, _align >::t_Layout = ArrayLayout<T, _row_size, _row_max, _align> |
| using DNDS::Array< T, _row_size, _row_max, _align >::t_pRowSizes = ssp<t_RowSizes> |
| using DNDS::Array< T, _row_size, _row_max, _align >::t_pRowStart = ssp<t_RowStart> |
| using DNDS::Array< T, _row_size, _row_max, _align >::t_RowSizes = host_device_vector<rowsize> |
| using DNDS::Array< T, _row_size, _row_max, _align >::t_RowStart = host_device_vector<index> |
|
default |
Default-constructed array: empty, no storage.
|
inlineexplicit |
|
inline |
|
inline |
|
inline |
Reads flat data and propagates resolved offsets back to the caller.
| serializerP | Serializer instance (already at the array's sub-path). |
| offset | [in/out] Row-level offset; updated from dataOffset for non-CSR. |
| dataOffset | [in/out] Element-level data offset; may be updated from Unknown to Parts-resolved by __ReadSerializerData. |
Definition at line 1176 of file Array.hpp.
|
inline |
Reads structural data (pRowStart / pRowSizes) and resolves dataOffset.
After metadata has been read and _size / _row_size_dynamic set, this method reads layout-specific structural data from the serializer and computes the element-level dataOffset from the row-level offset.
| serializerP | Serializer instance (already at the array's sub-path). |
| offset | [in/out] Row-level offset; updated for non-CSR if dataOffset could be derived. |
| dataOffset | [out] Element-level data offset resolved from structural data (CSR: from global pRowStart; non-CSR: offset * DataStride). |
Definition at line 1130 of file Array.hpp.
|
inline |
|
inline |
Bounds-checked element access.
Asserts that iRow and iCol are in range (taking the used row size into account, not just the stride). Works for every layout.
| iRow | Row index in [0, Size()). |
| iCol | Column index in [0, RowSize(iRow)). |
Definition at line 573 of file Array.hpp.
|
inline |
|
inline |
Shallow clone: copies all metadata and shares structural/data storage.
Copies _size, _row_size_dynamic, device backend, and the nested-vector storage. The _data, _pRowStart, _pRowSizes members are host_device_vector / shared_ptr, so they share ownership with the source; subsequent modifications to one may affect the other.
Definition at line 791 of file Array.hpp.
|
inline |
Layout-polymorphic compress: no-op for non-CSR, calls CSRCompress for CSR.
Definition at line 355 of file Array.hpp.
|
inline |
Copy raw row data from another Array of the same type. Works for all layouts (StaticFixed, Fixed, CSR, etc.) and is not hidden by derived types that make operator()/operator[] private.
Definition at line 706 of file Array.hpp.
|
inline |
(CSR only) Pack the nested-vector representation into a flat buffer plus _pRowStart. No-op if already compressed.
Row widths are frozen; further per-row resizing requires another Decompress. Mandatory before MPI ghost exchange, CUDA transfer, or serialization.
any better way?
Definition at line 324 of file Array.hpp.
|
inline |
(CSR only) Switch to the uncompressed (nested vector) representation.
Copies each row out of the flat buffer into an entry of _dataUncompressed, then clears the flat buffer. No-op if already uncompressed. After this, ResizeRow and ReserveRow may be used to reshape individual rows.
Definition at line 304 of file Array.hpp.
|
inline |
Raw pointer to the flat data buffer.
| B | Target device. DeviceBackend::Unknown (default) returns the host pointer; otherwise returns the device pointer (must match the array's current device). |
Definition at line 673 of file Array.hpp.
|
inline |
|
inline |
Flat buffer size in bytes (= DataSize() * sizeof(T)).
Definition at line 698 of file Array.hpp.
|
inline |
|
inline |
Layout-polymorphic decompress: no-op for non-CSR, calls CSRDecompress for CSR.
Definition at line 361 of file Array.hpp.
|
inline |
|
inline |
Mutable device-callable view (Eigen::Map-style row access on GPU).
| B | Device backend; must either match the array's current device or be DeviceBackend::Host (which yields a host-backed view). |
Definition at line 1249 of file Array.hpp.
|
inline |
|
inline |
|
inline |
Total footprint in bytes including structural arrays.
Sums the flat data buffer, _pRowStart (if any), and _pRowSizes (if any). Approximate because shared-ownership of row structures is not deduplicated.
Definition at line 735 of file Array.hpp.
|
inlineconstexpr |
|
inlinestaticconstexpr |
|
inline |
|
inline |
Shared pointer to the row-start index (CSR layout only).
_pRowStart->at(i) gives the flat-buffer offset of row i. Size is Size()+1; the sentinel at the end equals DataSize().
|
inline |
Combined hash of size, structural arrays, and data.
Byte-hashes non-hashable elements. Intended for testing / equality diagnostics; not guaranteed cryptographically strong.
Definition at line 748 of file Array.hpp.
|
inline |
(CSR only) Whether the array is in packed / flat form.
true means data sits in a single _data buffer plus _pRowStart; false means rows live in a vector<vector<T>> (_dataUncompressed), which allows per-row ResizeRow(). MPI / serialization / CUDA require the compressed form – call Compress() first.
Definition at line 294 of file Array.hpp.
|
inlineprotected |
|
inline |
|
inline |
|
inline |
|
inline |
Return a raw pointer to the start of row iRow.
Fast, untyped access used by stencil loops. Derived classes (e.g. ArrayEigenVector, ArrayEigenMatrix) override this to return typed Eigen maps instead of T*.
| iRow | Row index. For CSR compressed, iRow == Size() is allowed and returns the past-the-end pointer, useful for computing the flat buffer end in sweeps. |
iRow. Definition at line 630 of file Array.hpp.
|
inline |
|
inline |
|
inline |
|
inline |
Deserialize (read) array data from a serializer.
Reads metadata (array_sig, size, row_size_dynamic), structural data (pRowStart for CSR, pRowSizes for TABLE_Max/StaticMax), and the flat data buffer from a sub-path name under the serializer's current path.
This method is called by ParArray::ReadSerializer. Users should call the ParArray version, which handles EvenSplit resolution and CSR offset computation.
Input offset must NOT be EvenSplit; ParArray resolves that before calling.
| serializerP | Serializer instance (JSON per-rank or H5 collective). |
| name | Sub-path name for this array. |
| offset | [in/out] Row-level offset.
|
| dataOffset | [out] Element-level data offset resolved during the read.
|
Definition at line 1023 of file Array.hpp.
|
inline |
Reads only metadata from a serialized array without reading data.
Navigates to sub-path name and reads array_sig, row_size_dynamic, and size. Does NOT read structural data (pRowStart, pRowSizes) or the flat data buffer. The array's internal state is not modified.
Derived types (ArrayEigenMatrix, ArrayEigenUniMatrixBatch) override this method to also read their own extra metadata and to call the base version with the "array" sub-path they wrap around the base Array serialization.
| serializerP | Serializer instance. |
| name | Sub-path name for this array. |
Definition at line 1104 of file Array.hpp.
|
inline |
Resize using only the row count (layouts with an implicit row width).
Valid for:
TABLE_StaticFixed / TABLE_StaticMax (width comes from template params);CSR decompressed (rows start empty, grow via ResizeRow). Asserts for other layouts – use the two-argument overload instead. | nSize | New number of rows. |
Definition at line 432 of file Array.hpp.
|
inline |
Resize the array, setting a uniform or maximum row width.
Invalidates all existing data and resets row-size metadata.
Layout-specific semantics:
TABLE_StaticFixed: nRow_size_dynamic must equal rs.TABLE_StaticMax: nRow_size_dynamic must equal rm.TABLE_Fixed: sets the runtime uniform row width.TABLE_Max: sets the runtime maximum row width (per-row sizes start at 0).CSR: requires the array to be decompressed; allocates nSize empty rows (nested vectors sized to nRow_size_dynamic).| nSize | New number of rows. |
| nRow_size_dynamic | Row width (uniform layouts) or max width (padded layouts) or initial row length (CSR). |
Definition at line 395 of file Array.hpp.
|
inline |
Resize a CSR array directly to the compressed form via a width functor.
CSR-only. Allocates nSize+1 _pRowStart entries populated from the prefix sum of FRowSize(i), then sizes the flat buffer to match. No nested-vector intermediate step; the array is compressed on return.
| TFRowSize | Callable with signature rowsize(index). |
| nSize | New number of rows. |
| FRowSize | Width-of-row-i functor. |
Definition at line 477 of file Array.hpp.
|
inline |
Change the width of a single row.
Valid for CSR (decompressed only) and TABLE_*Max. For TABLE_*Max, the new size must not exceed the configured maximum and the per-row-size vector is copied-on-write if shared with another array. For CSR, the array must be uncompressed; call Decompress first.
| iRow | Row index in [0, Size()). |
| nRowSize | New width in T elements. |
Definition at line 504 of file Array.hpp.
|
inline |
Set per-row sizes from a source, applying an index mapping, then compress. For CSR layout only. rowSizeFunc(i) returns the desired row size for row i. Not hidden by derived types that make ResizeRow private.
Definition at line 723 of file Array.hpp.
|
inline |
|
inline |
Width used by row iRow in number of T elements.
Works for every layout:
TABLE_*Fixed: returns the uniform row width (iRow ignored for value);TABLE_*Max: returns _pRowSizes->at(iRow);CSR: returns pRowStart[iRow+1] - pRowStart[iRow] when compressed, else the nested vector size. | iRow | Row index in [0, Size()). Asserted in non-fixed layouts. |
Definition at line 214 of file Array.hpp.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Swap the storage of two arrays in-place.
Both arrays must already have identical logical size and flat-buffer size. Swaps only what the current layout uses (flat buffer plus structural pointers, or the nested vectors for CSR decompressed).
Definition at line 831 of file Array.hpp.
|
inline |
Mirror the flat/structural buffers to a target device (e.g. CUDA).
CSR arrays must be compressed. backend must match a supported backend from DeviceBackend; see DeviceStorage.hpp.
Definition at line 1213 of file Array.hpp.
|
inline |
Mirror the flat/structural buffers back to host memory.
CSR arrays must be compressed before calling. After this the array still has a device mirror unless clear_device is also called.
Definition at line 1200 of file Array.hpp.
|
inline |
Produce a lightweight, device-agnostic view onto the array.
The returned ArrayView captures pointers and sizes but does not own any storage. It is the type that implements actual operator[] indexing for all layouts; it is also host/device-callable and is the building block for ArrayDeviceView on CUDA.
Definition at line 559 of file Array.hpp.
|
inline |
Serialize (write) array data to a serializer.
Writes metadata (array_sig, array_type, size, row_size_dynamic), structural data (pRowStart for CSR, pRowSizes for TABLE_Max/StaticMax), and the flat data buffer into a sub-path name under the serializer's current path.
This method is called by ParArray::WriteSerializer. Users should call the ParArray version, which handles MPI coordination and CSR global offsets.
| serializerP | Serializer instance (JSON per-rank or H5 collective). |
| name | Sub-path name under which the array is stored. |
| offset | [in] Row-level partitioning offset. Typically Parts (serializer computes per-rank offsets automatically). |
| dataOffset | [in] Element-level data range for this rank. |
Definition at line 939 of file Array.hpp.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |