# Unstructured ###### tags: `GTScript` `unstructured` * **Location**: enum of *vertex*, *edge* or *cell* * **Field[Location, T]**: contiguously allocated typed data. It has *location* as a static attribute. > [name=havogt] ~~contiguously allocated typed data.~~ a function that takes n-dim index and returns T * **Neighborhood[InLocation, OutLocation]**: a enum that describes neighbor relationships. It can be several *neighborhoods* defined for the given (*InLocation, OutLocation*) pair. * **NeighborhoodChain[InLocation, OutLocation]**: non empty list of *neighborhoods* where *InLocation* of the element is the same as *OutLocation* of the previous * **Acc[Neighborhood, T]**: a function from *Neighborhood* to optional *T*. * **Accessor[NeighborhoodChain, T]**: *Acc[Neighborhood0, Acc[Neighborhood1, ... Acc[NeighborhoodN, T]...]]* * **Sparse field**: a field of *accessors*. * **Connectivity[NeighborhoodChain]**: a function that takes *Field[NeighborhoodChain.OutLocation, T]* and returns *Field[NeighborhoodChain.InLocation, Accessor[NeighborhoodChain, T]]* * **Concat[NeighborhoodChainA NeighborhoodChainB]**: an alias for chain concatenation * **Mult[ConnectivityA, ConnectivityB]**: function composition of *ConnectivityB* and *ConnectivityA*. It is the connectivity itself with the *NeighborhoodChain* attribute equals to *Concat[ConnectivityA.NeighborhoodChain, ConnectivityB.NeighborhoodChain]* * **Stencil** a function from accessors to value * **Lift[InNChain]** a function that takes *Stencil* with the signature *T(Accessor[OutNChains, Us]...)* and returns a function with the signature *Accessor[InNChain, T](Accessor[Concat[InNChain, OutNChains], Us]...)* ## Cartesian discussion Acc[Cart, Acc[Cart,T]] foldable to Acc[Cart,T] ## Thoughts (Hannes) Location is a safety mechanism but not required to unambigously describe the semantics of a program (similar to unstructured). Neighborhood can just be a tag.