# Function¶

The function module defines the Evaluable class and derived objects, commonly referred to as nutils functions. They represent mappings from a nutils.topology onto Python space. The notabe class of ArrayFunc objects map onto the space of Numpy arrays of predefined dimension and shape. Most functions used in nutils applicatons are of this latter type, including the geometry and function bases for analysis.

Nutils functions are essentially postponed python functions, stored in a tree structure of input/output dependencies. Many ArrayFunc objects have directly recognizable numpy equivalents, such as Sin or Inverse. By not evaluating directly but merely stacking operations, coplex operations can be defined prior to entering a quadrature loop, allowing for a higher lever style programming. It also allows for automatic differentiation and code optimization.

It is important to realize that nutils functions do not map for a physical xy-domain but from a topology, where a point is characterized by the combination of an element and its local coordinate. This is a natural fit for typical finite element operations such as quadrature. Evaluation from physical coordinates is possible only via inverting of the geometry function, which is a fundamentally expensive and currently unsupported operation.

class nutils.function.Evaluable(args, evalf)[source]

Base class

recurse_index(data, operations, cbuild)[source]

compile

compile()[source]
graphviz(title='graphviz')[source]

create function graph

stackstr(values=None)[source]

print stack

asciitree()[source]

string representation

exception nutils.function.EvaluationError(etype, evalue, evaluable, values)[source]

evaluation error

class nutils.function.Tuple(items)[source]

combine

static vartuple(*f)[source]

evaluate

class nutils.function.PointShape[source]

shape of integration points

static pointshape(points)[source]

evaluate

point cascade: list of (elem,points) tuples

evaluate

class nutils.function.ArrayFunc(evalf, args, shape, dtype=<type 'float'>)[source]

array function

vector(ndims)[source]

vectorize

dot(weights, axis=0)[source]

array contraction

find(elem, C)[source]

iteratively find x for f(x) = target, starting at x=start

normalized()[source]

normalize last axis

normal(ndims=-1)[source]
curvature(ndims=-1)[source]
swapaxes(n1, n2)[source]

swap axes

transpose(trans=None)[source]

laplace(coords, ndims=0)[source]

laplacian

div(coords, ndims=0)[source]

dotnorm(coords, ndims=0)[source]

normal component

T[source]

transpose

class nutils.function.ElemArea(weights)[source]

element area

static elemarea(weights)[source]

evaluate

class nutils.function.ElemInt(func, weights)[source]

elementwise integration

static elemint(w, f, ndim)[source]

evaluate

class nutils.function.Align(func, axes, ndim)[source]

align axes

static align(arr, trans, ndim)[source]
class nutils.function.Get(func, axis, item)[source]

get

class nutils.function.Product(func, axis)[source]

product

class nutils.function.IWeights[source]

integration weights

static iweights(elem, weights)[source]

evaluate

class nutils.function.OrientationHack(side=0)[source]

orientation hack for 1d elements; VERY dirty

static orientation(elem, side)[source]

evaluate

transform

function

evaluate

class nutils.function.Choose(level, choices)[source]

piecewise function

static choose(level, *choices)[source]
class nutils.function.Choose2D(coords, contour, fin, fout)[source]

piecewise function

static choose2d(xy, contour, fin, fout)[source]

evaluate

class nutils.function.Inverse(func)[source]

inverse

dof axis

evaluate

class nutils.function.Concatenate(funcs, axis=0)[source]

concatenate

static concatenate(iax, *arrays)[source]

evaluate

class nutils.function.Interpolate(x, xp, fp, left=None, right=None)[source]

interpolate uniformly spaced data; stepwise for now

class nutils.function.Cross(func1, func2, axis)[source]

cross product

class nutils.function.Determinant(func)[source]

normal

class nutils.function.DofIndex(array, iax, index)[source]

element-based indexing

static dofindex(arr, *item)[source]

evaluate

class nutils.function.Multiply(func1, func2)[source]

multiply

cdef()[source]

generate C code

class nutils.function.Negative(func)[source]

negate

cdef()[source]

generate C code

class nutils.function.Dot(func1, func2, naxes)[source]

dot

cdef()[source]

generate C code

class nutils.function.Sum(func, axis)[source]

sum

class nutils.function.Debug(func)[source]

debug

static debug(arr)[source]
class nutils.function.TakeDiag(func)[source]

extract diagonal

class nutils.function.Take(func, indices, axis)[source]

generalization of numpy.take(), to accept lists, slices, arrays

class nutils.function.Power(func, power)[source]

power

class nutils.function.ElemFunc(domainelem, side=0)[source]

trivial func

evaluate

find(elem, C)[source]

find coordinates

class nutils.function.Pointwise(args, evalf, deriv)[source]

pointwise transformation

class nutils.function.Sign(func)[source]

sign

class nutils.function.Eig(func, symmetric=False, sort=False)[source]

Eig

class nutils.function.Zeros(shape)[source]

zero

static zeros(points, shape)[source]

prepend point axes

class nutils.function.Inflate(func, dofmap, length, axis)[source]

inflate

static inflate(array, indices, length, axis)[source]
class nutils.function.Diagonalize(func)[source]

diagonal matrix

class nutils.function.Repeat(func, length, axis)[source]

repeat singleton axis

class nutils.function.Const(func)[source]

pointwise transformation

static const(points, arr)[source]

prepend point axes

nutils.function.asarray(arg)[source]

convert to ArrayFunc or numpy.ndarray

nutils.function.insert(arg, n)[source]

insert axis

nutils.function.stack(args, axis=0)[source]

stack functions along new axis

nutils.function.chain(funcs)[source]
nutils.function.merge(funcs)[source]

Combines unchained funcs into one function object.

nutils.function.vectorize(args)[source]
nutils.function.expand(arg, shape)[source]
nutils.function.repeat(arg, length, axis)[source]
nutils.function.get(arg, iax, item)[source]

get item

nutils.function.align(arg, axes, ndim)[source]
nutils.function.bringforward(arg, axis)[source]

bring axis forward

nutils.function.elemint(arg, weights)[source]

elementwise integration

local derivative

nutils.function.div(arg, coords, ndims=0)[source]

nutils.function.sum(arg, axes=-1)[source]

sum over multiply axes

nutils.function.dot(arg1, arg2, axes)[source]

dot product

nutils.function.determinant(arg, axes=(-2, -1))[source]
nutils.function.inverse(arg, axes=(-2, -1))[source]
nutils.function.takediag(arg, ax1=-2, ax2=-1)[source]

local derivative

nutils.function.dotnorm(arg, coords, ndims=0)[source]

normal component

nutils.function.kronecker(arg, axis, length, pos)[source]
nutils.function.diagonalize(arg)[source]
nutils.function.concatenate(args, axis=0)[source]
nutils.function.transpose(arg, trans=None)[source]
nutils.function.product(arg, axis)[source]
nutils.function.choose(level, choices)[source]
nutils.function.cross(arg1, arg2, axis)[source]

cross product

nutils.function.outer(arg1, arg2=None, axis=0)[source]

outer product

nutils.function.pointwise(args, evalf, deriv)[source]

general pointwise operation

nutils.function.multiply(arg1, arg2)[source]
nutils.function.negative(arg)[source]

make negative

nutils.function.power(arg, n)[source]
nutils.function.sign(arg)[source]
nutils.function.eig( arg, axes [ symmetric ] )[source]

Compute the eigenvalues and vectors of a matrix. The eigenvalues and vectors are positioned on the last axes.

• tuple axes The axis on which the eigenvalues and vectors are calculated
• bool symmetric Is the matrix symmetric
• int sort Sort the eigenvalues and vectors (-1=descending, 0=unsorted, 1=ascending)
nutils.function.swapaxes(arg, axes=(-2, -1))[source]

swap axes

nutils.function.opposite(arg)[source]

evaluate jump over interface

nutils.function.function(fmap, nmap, ndofs, ndims)[source]

create function on ndims-element

nutils.function.take(arg, index, axis)[source]

take index

nutils.function.inflate(arg, dofmap, length, axis)[source]
nutils.function.pointdata(topo, ischeme, func=None, shape=None, value=None)[source]

point data

nutils.function.fdapprox(func, w, dofs, delta=1e-05)[source]

Finite difference approximation of the variation of func in directions w around dofs. Input arguments: * func, the functional to differentiate * dofs, DOF vector of linearization point * w, the function space or a tuple of chained spaces * delta, finite difference step scaling of ||dofs||_inf

nutils.function.iwscale(coords, ndims)[source]

integration weights scale

nutils.function.supp(funcsp, indices)[source]

find support of selection of basis functions

class nutils.function.CBuilder(cachedir='/tmp/nutils')[source]

cbuilder