# 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.