# Bases

In Nutils, a basis is a vector-valued function object that evaluates, in any given point $$ξ$$ on the topology, to the full array of basis function values $$φ_0(ξ), φ_1(ξ), \dots, φ_{n-1}(ξ)$$. It must be pointed out that Nutils will in practice operate only on the basis functions that are locally non-zero, a key optimization in Finite Element computations. But as a concept, it helps to think of a basis as evaluating always to the full array.

Several nutils.topology.Topology objects support creating bases via the Topology.basis() method. A nutils.topology.StructuredTopology, as generated by nutils.mesh.rectilinear, can create a spline basis with arbitrary degree and arbitrary continuity. The following generates a degree one spline basis on our previously created unit line topology topo:

basis = topo.basis('spline', degree=1)


The five basis functions are

plot_line(basis)


We will use this basis throughout the following sections.

Change the degree argument to 2 for a quadratic spline basis:

plot_line(topo.basis('spline', degree=2))


By default the continuity of the spline functions at element edges is the degree minus one. To change this, pass the desired continuity via keyword argument continuity. For example, a quadratic spline basis with $$C^0$$ continuity is generated with

plot_line(topo.basis('spline', degree=2, continuity=0))


$$C^0$$ continuous spline bases can also be generated by the 'std' basis:

plot_line(topo.basis('std', degree=2))


The 'std' basis is supported by topologies with square and/or triangular elements without hanging nodes.

Discontinuous basis functions are generated using the 'discont' type, e.g.

plot_line(topo.basis('discont', degree=2))