Format
The .ndtbl format stores one multidimensional field group in a compact
binary layout with self-describing metadata followed by one contiguous payload
block.
On-disk encoding
All integers and floating-point values are encoded in little-endian byte order.
Floating-point values use IEEE-754 binary32 and binary64.
Header
Each file begins with this fixed header:
magic[8]:"NDTBL\0\0\0"version:u8: currently1scalar_type:u8:1=float32,2=float64reserved:u16: must be zeropayload_offset:u64: byte offset of the first payload valuedimension:u64: number of axesfield_count:u64: number of named fields per grid pointpoint_count:u64: total number of grid points
Axis records
One axis record is stored for each axis in axis order:
kind:u8:1=uniform,2=explicit_coordinatesreserved0:u8: must be zeroreserved1:u16: must be zeroextent:u64: number of points on the axis
Uniform axes append:
min:f64max:f64
Explicit-coordinate axes append:
extentrepeatedf64coordinates
Field names
Field names are written in payload order as:
name_length:u64name_bytes[name_length]encoded as UTF-8
Payload ordering
The payload stores raw scalar values in point-major order.
Logical point traversal follows row-major / C-order over the grid axes:
axis
0is the slowest-varying grid indexthe last axis is the fastest-varying grid index
for each logical point, all field values are written consecutively in
field_namesorder
Equivalently, the payload is the flattened form of an array shaped as
(*axis_sizes, field_count) in C-order.
Validation rules
Readers should reject files when:
reserved fields are nonzero
point_countdoes not match the product of axis extentspayload_offsetdoes not match the parsed metadata lengthencoded sizes exceed supported host limits