0. Introduction and Scope
This document is Part 1 of the F5 extension specification series. It extends the F5 Master Specification (F5Layout.md, hereafter “the core spec”) with normative conventions for:
- the structure of ChartDomain groups (chart types) and their associated named HDF5 compound types
- the structure of chart object groups within a ChartDomain
- a component naming scheme encoding topological and algebraic structure
- an optional set of algebraic meta-information attributes on named types
- the distinction between chart types (ChartDomains) and chart objects
This extension is strictly additive. All constructs are layered on top of the core spec without modifying any existing rules. A reader implementing only the core spec MUST correctly ignore unknown attributes on named types.
The guiding principle is: keep things as simple as possible, but not simpler. Attributes are added only where they resolve genuine ambiguity. The covariance attribute, for example, is absent from scalar types — its absence is informative.
Part 2 (F5_Extension_CombMaps.md) extends this document with combinatorial map and half-edge structures.
1. Relationship to the Core Specification
All rules from F5Layout.md apply without modification. Key sections extended here:
- §6.1 (Charts and coordinate representations) — extended by §3, §4, §5
- §7.1 (Field identification by datatype) — extended by §5
- §8.5 (TypeInfo) — clarified in §7
1.1 The Chart-as-Type-Registry Pattern
The core spec defines Charts as the authority for coordinate system semantics (§6.1). This extension makes explicit what the implementation established: ChartDomain groups are also the type registry. Named HDF5 compound types are committed as objects inside the ChartDomain group that defines their semantics. This co-location ensures that algebraic type information (stored in attributes on the committed type) and coordinate system information (expressed by the group structure) are always found together.
2. The Mathematical Nature of Charts in F5
2.1 Charts as atlas elements — open-ended by design
In differential geometry, an atlas is a collection of charts covering a manifold. Each chart is a homeomorphism from an open set of the manifold to R^n. F5 adopts this structure directly. The set of possible Charts is not closed. This extension defines the structural pattern that any Chart MUST follow; it does not enumerate all charts. Any coordinate system describable by a named compound type and optional transformation rules is a valid F5 Chart.
F5 is agnostic to the physical interpretation of a Chart. What “Schwarzschild coordinates” or “body-fixed frame” means physically is left to the application.
2.2 ChartDomains (chart types) versus chart objects
A ChartDomain is defined by its component names — it represents a chart type. The component names x, y, z define the “Cartesian 3D” chart type.
A chart object is a specific instance of a chart type. A file may contain multiple chart objects of the same type — for example, two overlapping coordinate patches of the same chart type, with transformation rules between them.
The ChartDomain group contains: - the named HDF5 compound types used by all chart objects of that type - all chart object subgroups
Named datatypes are committed at the ChartDomain level, not at individual chart object level. This means they are shared across all chart objects of that type.
Consequence for validators: A Representation
group is bound to a specific chart object. All datasets in that
Representation MUST use named types whose
ChartDomain attribute matches the chart type of
that Representation. A Representation must never contain
datasets from a different chart type. This consistency rule
SHOULD be checked by conforming validators.
Minimalism: The ChartDomain SHOULD contain only the named datatypes that are actually used in Fields throughout the file. Defining types in advance that are never used by any dataset is discouraged. An empty ChartDomain (no named types, no chart objects) is meaningless and SHOULD NOT appear in a valid file.
2.3 Component names define chart type
The member names of the named HDF5 compound type are the coordinate function names x^u : M -> R of the chart. They are the axioms from which all other names in the chart are derived (tangential vector names, co-vector names, tensor component names). Within a ChartDomain, they MUST be used consistently.
F5 does not normatively specify relationships between chart types. Whether the chart type with members {x, y} is a “subset” of the chart type with members {x, y, z} is not a statement F5 makes. What F5 does guarantee is that HDF5 compound subsetting works: a reader requesting only {x, y} from an {x, y, z} dataset gets exactly those components via HDF5’s native type conversion, without any code changes. This is a consequence of HDF5 mechanics, not an F5 semantic claim.
Similarly, the component name r in Schwarzschild
coordinates and the component name r in
Kruskal-Szekeres coordinates are not the same quantity. A
correct implementation SHOULD use distinct component names
(e.g., r vs. r_K) and distinct
ChartDomains for coordinate systems whose quantities differ
physically. Using identical component names for physically
distinct quantities is permitted but removes a safety check that
F5 would otherwise provide. Whether to enforce this distinction
is an application-level design decision; F5 RECOMMENDS distinct
names when physical interpretation differs.
2.4 Automatic embedding via HDF5 compound subsetting
A compound type with members {x, y, z} permits reading only {x, y} via HDF5 native type conversion. This embedding extends to tensor types: a symmetric 2-tensor with {xx, xy, yy} can be read as a subset of one with {xx, xy, xz, yy, yz, zz}.
Storing coordinates as a plain float array is explicitly discouraged. Named compound members make this automatic embedding available without code changes. A plain float[3] forces the reader to handle dimensionality explicitly and defeats HDF5’s native subsetting capability.
2.5 Global and local charts
Global ChartDomains under /Charts/ are valid across the entire file.
Local chart objects under
GlobalChart soft link and MAY carry additional
local information:
- time-dependent transformation rules (a Grid is associated with a specific Timeslice)
- spatially varying transformation matrices specified as datasets at each vertex
In tangential space, the coordinate transformation rule is always a matrix — either the Jacobian (for tangential vectors) or its inverse (for co-vectors). This is one more reason to store different algebraic types with explicitly different component names: a reader that confuses a tangential vector for a co-vector applies the wrong transformation matrix silently.
The specific encoding of transformation data in local chart objects is not yet normatively defined. The structural pattern (global ChartDomain + local object with GlobalChart back-reference) is fixed; transformation content is left to a future extension.
3. ChartDomain and Chart Object Structure
3.1 ChartDomain structure
A ChartDomain group contains named HDF5 types and chart object subgroups:
/Charts/<ChartDomainName>/
<PrecisionName>/
Point <- committed HDF5 named type
... <- additional precision variants (any number)
Point <- HDF5 soft link -> <default_precision>/Point
<ChartObject1>/ <- chart object subgroup
...
<ChartObject2>/ <- chart object subgroup (optional)
...
<ChartDomainName> is a human-readable
identifier. It has no normative F5 meaning — the normative
content is in the type structure and attributes.
Precision variants are named subgroups, each
containing a Point committed type. The naming of
precision subgroups is not fixed — common names include
SinglePrecision, DoublePrecision,
HalfPrecision, QuadPrecision, but any
consistent naming is valid. Integer types, user-defined
precision types, and any other HDF5 primitive type are also
permitted. There is no requirement to provide exactly two
precision variants; a ChartDomain may contain as many or as few
as the application requires.
The Point soft link at the ChartDomain level
provides a precision-independent default reference to the
“primary” type for that chart. It SHOULD point to the precision
variant most commonly used in the file.
A ChartDomain MUST contain at least one chart object. A ChartDomain without any chart object has no operational purpose and SHOULD NOT appear in a valid file.
HDF5 performs automatic conversion between compatible
compound types of different precision. A dataset written with a
DoublePrecision/Point type can be read using
SinglePrecision/Point type definition without
additional reader code.
3.2 Chart object structure
A chart object is a subgroup of a ChartDomain. It represents a specific instance of the chart type and MAY contain transformation rules to other chart objects:
/Charts/<ChartDomainName>/<ChartObjectName>/
Coordinates <- soft link -> /Charts/<ChartDomainName>
<TransformTo>/ <- subgroup for transformation to another chart object
...
The Coordinates self-referential link connects
the chart object back to its parent ChartDomain. This is the
link referenced by local Grid charts:
<Timeslice>/<Grid>/Charts/<ChartObjectName>/
GlobalChart <- soft link -> /Charts/<ChartDomainName>/<ChartObjectName>
The naming Coordinates for the back-reference
link is conventional. It mirrors the pattern visible in existing
F5 files (e.g.,
/Charts/triangular/Points/Coordinates).
Example from an actual F5 file:
/Charts/Cartesian3D/
DoublePrecision/Point Type
SinglePrecision/Point Type
Point Soft Link {SinglePrecision/Point}
StandardCartesianChart3D/
Coordinates Soft Link -> /Charts/Cartesian3D
/Charts/triangular/
SinglePrecision/Point Type
DoublePrecision/Point Type
Point Soft Link {SinglePrecision/Point}
Points/
Coordinates Soft Link -> /Charts/triangular
4. Component Naming: Coordinate Types
4.1 Principle
Component member names in an HDF5 compound type are the coordinate function names of the chart. They are the starting axioms. Within a ChartDomain they MUST be used consistently; across different ChartDomains there is no constraint.
Member names SHOULD use simple, conventional notation — the
same names used in standard mathematical or physics literature
for the coordinate functions. For example, a coordinate along
the x-axis is named x, not Dx or
dx (those are reserved for derived algebraic types;
see §5). Using derivative or differential notation for
coordinate names would create confusion with the naming scheme
of §5.
Member names MAY use UTF-8 encoding. Greek letters
(theta, phi, or the actual characters
θ, φ) are permitted. The choice
between ASCII approximations and Unicode is an application
convention.
4.2 Coordinate component names — examples
The following are representative examples. They do not constitute a catalogue; F5 does not enumerate or standardise chart types:
| Coordinate system | Component names | Note |
|---|---|---|
| Cartesian 2D | x, y | |
| Cartesian 3D | x, y, z | |
| Cartesian 4D | t, x, y, z | |
| Cylindrical 3D | r, phi, z | or r, φ, z with UTF-8 |
| Spherical 3D | r, theta, phi | or r, θ, φ |
F5 does not assert that “Cartesian 2D is a subset of Cartesian 3D.” The embedding {x, y} ⊂ {x, y, z} is available mechanically via HDF5 compound subsetting, but it is not a normative F5 claim. A chart with members {x, z} is also an HDF5 subset of one with {x, y, z}, but physically it represents a different 2D slice.
Component names carry semantic weight across ChartDomains. A
component named r in one chart and r
in another chart implies those quantities are the same — readers
and downstream tools may treat them as such. For coordinate
systems where a shared name would be misleading (e.g., the
radial coordinate in Schwarzschild vs. Kruskal coordinates),
distinct names SHOULD be used.
5. Component Naming: Algebraic Types
5.1 The Dx/dx naming convention for tensorial types
Tangential vectors and co-vectors share identical memory
layout but transform differently under coordinate changes. In
standard graphics code (e.g., GLSL vec3), both are
represented identically — a known source of errors under
non-isotropic transformations, because applying a vector
transformation to a co-vector (or vice versa) produces silently
wrong results.
F5 resolves this at the type level using component names derived from mathematical notation:
- Tangential vectors (contravariant,
partial_mu basis): uppercase D prefix —
Dx,Dy,Dz— representing partial_x, partial_y, partial_z - Co-vectors (covariant, dx^mu basis):
lowercase d prefix —
dx,dy,dz— representing the differential forms dx, dy, dz
With this scheme, a reader cannot accidentally treat a
tangential vector as a co-vector while staying within F5’s type
system. Doing so requires deliberately misreading
{Dx, Dy, Dz} as {dx, dy, dz}, which is
an active choice, not a silent default.
5.2 Exterior products — the ^ notation is required, not optional
Exterior products of basis elements use the ^
separator:
| Type | Dim | Component names |
|---|---|---|
| Tangential vector | 3 | Dx, Dy, Dz |
| Co-vector | 3 | dx, dy, dz |
| Bivector (Dx^Dy basis) | 3 | Dx^Dy, Dy^Dz, Dz^Dx |
| Bi-co-vector (dx^dy) | 3 | dx^dy, dy^dz, dz^dx |
| Mixed (Dx^dy) | 3 | Dx^dy, Dy^dz, Dz^dx |
| Trivector | 3 | DxDyDz |
| Pseudo-co-scalar | 3 | dxdydz |
The ^ separator is required in
these component names, not merely preferred. The reason is that
dxdy already has a defined meaning in this scheme:
it is the component gxy of a metric tensor (see
§5.3). A bivector component cannot be named dxdy —
it MUST be named dx^dy to avoid collision. The
^ notation thus resolves a genuine naming conflict,
not just a stylistic preference.
The ^ character is valid in HDF5 member names,
which are arbitrary strings. Tools that require alphanumeric
identifiers must transform these names; that responsibility lies
with the tool, not with F5.
Grade and dimension: In 3D, a grade-2
bivector has 3 components, the same count as a grade-1
co-vector. In 4D, a grade-2 bivector has 6 components while a
co-vector has 4. Component names and the grade
attribute (§6.3) together provide dimension-independent type
identification. Avoid reasoning that relies on 3D-specific
coincidences.
5.3 Metric and symmetric tensor types
Metric tensor components are named from the product of the
coordinate function names, using lowercase d
(covariant) notation since a metric has two lower indices:
For a symmetric metric tensor g_{ij} = g_{ji} in 3D Cartesian coordinates:
| Component | Name |
|---|---|
| g_{xx} | dxdx |
| g_{xy} = g_{yx} | dxdy |
| g_{xz} = g_{zx} | dxdz |
| g_{yy} | dydy |
| g_{yz} = g_{zy} | dydz |
| g_{zz} | dzdz |
Note that dxdy here (a metric component,
symmetric product) is distinct from dx^dy (a
bivector component, antisymmetric exterior product). This is why
the ^ is required in exterior product names:
dxdy is already taken.
For the contravariant co-metric g^{uv}: DxDx, DxDy, DxDz, DyDy, DyDz, DzDz.
5.4 Connectivity component names — the simplex scheme
For connectivity types in relative Representations (indexing into vertex Skeletons), member names SHOULD use the simplex barycentric scheme: degree-n symmetric monomials in symbols {i, j}:
| Simplex | k | Members | Count |
|---|---|---|---|
| edge | 1 | i, j | 2 |
| triangle | 2 | ii, ij, jj | 3 |
| tetrahedron | 3 | iii, iij, ijj, jjj | 4 |
| 4-simplex | 4 | iiii, iiij, iijj, ijjj, jjjj | 5 |
| n-simplex | n | all length-n strings over {i,j} | n+1 |
This generates exactly n+1 names for an n-simplex without enumeration, and the simplex dimension is recoverable from member count. For non-simplex polytopes a third symbol k is introduced (ii, ij, ji, jj for quads; etc.).
6. Algebraic Meta-Information Attributes
6.1 Placement
Algebraic meta-information attributes are placed on the
committed named type object inside the
ChartDomain group — for example, on
/Charts/Cartesian3D/SinglePrecision/Point. They are
NOT placed on individual dataset instances. They are declared
once per type and shared by all datasets using that type.
Named datatypes are committed on the ChartDomain group (chart
type). They are thus available for all chart objects of that
type. This sharing is precisely why the ChartDomain
attribute (§6.2) must exist: it allows a reader that has a
reference to a named type to immediately identify the chart type
without traversing the group hierarchy.
6.2 Principle: attributes are optional; absence has semantic meaning
All attributes in this section are OPTIONAL unless otherwise stated.
- Absent
covariance: the type is scalar — no tensor indices - Absent
grade: grade equals rank (a simple non-k-vector type) - Absent attributes entirely: the type is a raw array of numbers, interpreted by the reader’s own conventions
A reader that does not understand these attributes MUST treat the type as a raw array and MUST NOT reject a file because they are present.
6.3 Attribute definitions
ChartDomain
- Type: null-terminated ASCII or UTF-8 string
- Value: the name of the ChartDomain group (chart type) this committed type belongs to
- Status: REQUIRED for all committed named types in F5 files
ChartDomain is a back-reference from the named
type to its ChartDomain group. It enables O(1) lookup: a reader
that opens a dataset, reads its type, and reads the
ChartDomain attribute immediately knows the chart
type — no group traversal needed. Without this attribute, a
reader would need to scan the entire /Charts/
hierarchy to find which ChartDomain group contains the type in
question.
Example from an actual F5 file:
/Charts/Cartesian3D/SinglePrecision/Point Type
Attribute: ChartDomain "Cartesian3D"
Type: struct {
"x" +0 native float
"y" +4 native float
"z" +8 native float
} 12 bytes
Dimensions
- Type: int scalar
- Value: dimensionality of the manifold. For coordinate types: embedding dimension. For connectivity types: cell dimension (1=edge, 2=triangle, 3=tetrahedron).
- Status: RECOMMENDED
rank
- Type: int scalar
- Value: total number of tensor indices (0=scalar, 1=vector-like, 2=matrix-representable, n=nth-order tensor)
- Status: OPTIONAL
grade
- Type: int scalar
- Value: the grade k of a k-vector in geometric algebra. Grade 0 = scalar; grade 1 = tangential vector or co-vector; grade 2 = bivector or bi-co-vector; grade n = n-vector (volume form in n dimensions). Required when grade differs from rank — e.g., a bivector has rank 1 but grade 2.
- Status: OPTIONAL; REQUIRED when grade != rank to avoid ambiguity
covariance
Type: int array of length = rank
Value: per-index variance using Einstein notation:
+1: upper index (contravariant, partial_mu basis)-1: lower index (covariant, dx^mu basis)
For scalars (rank = 0): the
covarianceattribute is absent. HDF5 cannot store a zero-length array; absence ofcovarianceis the normative signal for a scalar type. This is a deliberate encoding choice: the existence of the attribute carries semantic meaning (the type has at least one tensor index), not just its value.Values with |value| > 1 are reserved for future use. A possible application is encoding non-tensorial objects such as Christoffel symbols, which transform with an inhomogeneous additional term and are rank-3 but not tensors in the standard sense. Whether covariance values of ±2 are appropriate for this purpose is left open; it is noted here as a potential direction.
Status: OPTIONAL for scalars (absent); RECOMMENDED for all tensor and vector types
From the F5 reference implementation (F5Bchart.c):
int covariance[] = {+1}; /* Tangential vector: one upper index */
int covariance[] = {-1}; /* Co-vector: one lower index */
int covariance[] = {+1, +1}; /* Bivector: two upper indices */
int covariance[] = {-1, -1}; /* Bi-co-vector: two lower indices */
int covariance[] = {-1, -1}; /* Metric tensor: two lower indices */
int covariance[] = {+1, +1}; /* Co-metric tensor: two upper indices */Mixed tensor (one upper, one lower index):
covariance[] = {+1, -1}.
Description
- Type: null-terminated UTF-8 string
- Value: human/AI-readable description of the coordinate system, type, or object
- Placement: MAY appear on the ChartDomain group, on any chart object subgroup, or on any committed named type
- Status: NON-NORMATIVE; advisory only; RECOMMENDED for coordinate systems whose physical meaning might be ambiguous from component names alone
7. TypeInfo
TypeInfo (core spec §8.5) remains necessary and is not superseded by the named type attributes of §6. It serves a distinct purpose.
TypeInfo MUST be an attribute on the named datatype associated with a Field. It identifies how to interpret a Field whose data may not be in a simple contiguous dataset. In particular:
- For separated compound fields (core spec §8.3), there is no single named datatype covering the whole compound — TypeInfo on each component’s type identifies the field type that the component belongs to
- For fields with partial coverage, TypeInfo MAY provide a default value or interpretation for uncovered regions
- For performance: identifying a Field from its TypeInfo attribute is faster than scanning datasets; TypeInfo SHOULD therefore always be present even when it could theoretically be inferred
TypeInfo MAY be omitted only when a Field consists entirely of contiguous datasets whose named type already unambiguously identifies the field. Even then, its presence is recommended.
TypeInfo MUST be consistent with the named type of the Field. Inconsistency SHOULD produce a warning from validators.
8. Symmetry Tables (Reserved, Encoding TBD)
For symmetric and antisymmetric tensors, only a subset of components need be stored. Two attribute names are reserved for the description of which components are stored and how the rest are derived:
symmetry_stored: identifies
which components are stored (as indices into the full component
list for the unreduced tensor).
symmetry_derivation: for each
component of the full tensor, a prescription for deriving it
from stored components — typically +stored[k],
-stored[k], or 0.
Symmetric 3x3 metric tensor (6 stored of 9 total):
Stored: [0]=dxdx [1]=dxdy [2]=dxdz [3]=dydy [4]=dydz [5]=dzdz
Full 9: dxdx=+[0] dxdy=+[1] dxdz=+[2]
dydx=+[1] dydy=+[3] dydz=+[4]
dzdx=+[2] dzdy=+[4] dzdz=+[5]
Antisymmetric 3x3 bivector (3 stored of 9 total):
Stored: [0]=Dx^Dy [1]=Dx^Dz [2]=Dy^Dz
Full 9: Dx^Dx= 0 Dx^Dy=+[0] Dx^Dz=+[1]
Dy^Dx=-[0] Dy^Dy= 0 Dy^Dz=+[2]
Dz^Dx=-[1] Dz^Dy=-[2] Dz^Dz= 0
These attribute names are RESERVED. Their HDF5 encoding format is not yet normatively defined. Implementations MUST NOT use these attribute names for other purposes. A future sub-extension will define the encoding.
9. Type Examples
These examples illustrate the naming and attribute pattern. They do not constitute a catalogue — F5 Charts are open-ended (§2.1).
9.1 Cartesian 3D — coordinate Point (minimal, no tensor attributes needed)
/Charts/Cartesian3D/
SinglePrecision/
Point struct { float x, y, z }
Attribute ChartDomain: "Cartesian3D"
DoublePrecision/
Point struct { double x, y, z }
Attribute ChartDomain: "Cartesian3D"
Point soft link -> SinglePrecision/Point
StandardCartesianChart3D/
Coordinates soft link -> /Charts/Cartesian3D
No covariance — coordinates are not tensors.
9.2 Tangential vector type
/Charts/Cartesian3D/
Tangent/
SinglePrecision/
Point struct { float Dx, Dy, Dz }
Attribute ChartDomain: "Cartesian3D"
Attribute rank: 1
Attribute covariance: [+1]
9.3 Co-vector type
/Charts/Cartesian3D/
Cotangent/
SinglePrecision/
Point struct { float dx, dy, dz }
Attribute ChartDomain: "Cartesian3D"
Attribute rank: 1
Attribute covariance: [-1]
9.4 Bivector type
/Charts/Cartesian3D/
Bivector/
SinglePrecision/
Point struct { float Dx^Dy, Dy^Dz, Dz^Dx }
Attribute ChartDomain: "Cartesian3D"
Attribute rank: 1
Attribute grade: 2
Attribute covariance: [+1, +1]
grade=2 with rank=1 distinguishes this from a co-vector (rank=1, grade=1). In 4D a bivector has 6 components, a co-vector has 4 — they diverge. The grade attribute is the reliable discriminator across dimensions.
9.5 Symmetric metric tensor
/Charts/Cartesian3D/
Metric/
DoublePrecision/
Point struct { double dxdx, dxdy, dxdz, dydy, dydz, dzdz }
Attribute ChartDomain: "Cartesian3D"
Attribute rank: 2
Attribute covariance: [-1, -1]
9.6 Triangle connectivity chart
/Charts/triangular/
SinglePrecision/
Point struct { int32 ii, ij, jj }
Attribute ChartDomain: "triangular"
DoublePrecision/
Point struct { int64 ii, ij, jj }
Point soft link -> SinglePrecision/Point
Points/
Coordinates soft link -> /Charts/triangular
No covariance — integer connectivity arrays are not tensors.
10. Open Questions and Future Work
Christoffel symbols and non-tensorial objects: Christoffel symbols are rank-3 objects that do not transform as tensors (they acquire an inhomogeneous term under coordinate changes). The current attribute scheme does not accommodate this. A possible direction is to use covariance values with |value| > 1 as a signal for non-tensorial transformation behaviour. This is explicitly left open for future work.
Newman-Penrose pseudo-scalars: The five complex NP scalars (psi_0 through psi_4) characterizing gravitational waves carry spin weight and boost weight. These are pseudo-scalar quantities with specific algebraic properties under the NP tetrad transformations. It is believed that the current attribute scheme (rank, grade, covariance) is sufficient to model these quantities within the F5 framework, but this has not yet been worked out in detail. It is not claimed that NP scalars cannot be expressed — rather, their precise encoding within this scheme is an open derivation.
Transformation rule encoding: The covariance array determines the form of the transformation rule (Jacobian or inverse Jacobian). The content — specific matrices for linear charts, trigonometric functions for curvilinear charts — is not yet normatively encoded in chart objects. This is the most significant gap for applications requiring cross-chart field evaluation.
Symmetry attribute encoding: The conceptual framework of §8 is defined; the HDF5 encoding format is reserved for a future sub-extension.
11. Summary of Normative Elements
| Element | Status |
|---|---|
| ChartDomain group with precision subgroups (§3.1) | Normative |
| Point soft link at ChartDomain level (§3.1) | Normative |
| Chart object subgroup with Coordinates link (§3.2) | Normative |
| Local chart object GlobalChart link (core spec §6.1.2) | Normative |
| Minimalism: only used types committed (§2.2) | SHOULD |
| Coordinate member names: simple convention (§4.2) | Recommended |
| Dx/dx naming for tangential/co-vector types (§5.1) | Recommended |
| ^ separator in exterior product names (§5.2) | Required |
| dxdy for symmetric metric, dx^dy for bivector (§5.2/5.3) | Required |
| Simplex barycentric naming {ii, ij, jj…} (§5.4) | Recommended |
| ChartDomain attribute on committed types (§6.3) | REQUIRED |
| Dimensions attribute (§6.3) | Recommended |
| rank attribute (§6.3) | Optional |
| grade attribute (§6.3) | Required when grade != rank |
| covariance int array {+1/-1} (§6.3) | Absent=scalar; Recommended for tensor types |
| Description advisory string (§6.3) | Non-normative |
| TypeInfo on named datatypes (§7) | SHOULD always be present |
| symmetry_stored attribute name (§8) | Reserved |
| symmetry_derivation attribute name (§8) | Reserved |
12. Literature and Conceptual Background
GraVisMa 2009 (primary reference for §6): Benger, W., Hamilton, A., Folk, M., Koziol, Q., Su, S., Schnetter, E., Ritter, M., Ritter, G.: “Using Geometric Algebra for Navigation in Riemannian and Hard Disc Space.” In: Skala, V., Hildenbrand, D. (eds.) GraVisMa 2009 — Computer Graphics, Vision and Mathematics for Scientific Computing, pp. 80–89. UNION Agency, Na Mazinach 9, CZ-322 00 Plzen, Czech Republic, 2010. Conference: University of West Bohemia, Plzen (Pilsen), Czech Republic, September 2–4, 2009. Proceedings PDF: http://gravisma.zcu.cz/GraVisMa-2009/Papers_2009/!_2009_GraVisMa_proceedings-FINAL.pdf
Section §5 of that paper defines the meta-information properties implemented here: multiplicity, rank, grade, dimensions, coordinatename, covariance.
PhD thesis (foundational F5 data model): Benger, W.: “Visualization of General Relativistic Tensor Fields via a Fiber Bundle Data Model.” Dissertation, Fachbereich Mathematik und Informatik, Freie Universität Berlin / Zuse-Institut Berlin (ZIB), August 2004. Published: Berlin, Lehmanns Media-LOB.de, 2005. ISBN 3-86541-108-8. Supervisor: Prof. Dr. Peter Deuflhard. https://www.fiberbundle.net/papers/TensorFieldViz.pdf
Reference implementation: F5Bchart.c, FiberBundleHDF5 library (FiberLib v2). https://www.fiberbundle.net/doc/F5Bchart_8c_source.html
The covariance array encoding {+1/-1} and the
F5B_init_tangential_types function establish the
actual committed type structure implemented in HDF5.
Original fiber-bundle data model concept: Butler, D.M., Bryson, S.: “Vector Bundle Classes make Powerful Tool for Scientific Visualization.” Computers in Physics 6(6), pp. 576–584 (1992). Implemented in IBM Data Explorer / OpenDX.
The simplex naming scheme (§5.4) and the Dx/dx convention (§5.1) are original contributions of this specification.