--- /dev/null
+# Parameter information
+Array[SpatialIndex, FunctionIndex, FunctionIndex] kinet
+FunctionSet bra, ket
+FunctionIndex alpha, beta
+SpatialIndex i
+
+# Computation
+kinet[i, alpha, beta] = inner(bra[alpha], derivative(ket[beta], i))
+
+# Implementation specific
+target ONETEP
+Variable kinet = FortranVariable("kinet", spam3(:))
+Variable bra_basis = FortranVariable("bra_basis", func_basis)
+Variable bras_on_grid = FortranVariable("bras_on_grid", double(:))
+Variable ket_basis = FortranVariable("ket_basis", func_basis)
+Variable kets_on_grid = FortranVariable("kets_on_grid", double(:))
+Variable bra = PPDFunctionSet(bras_on_grid, bra_basis)
+Variable ket = PPDFunctionSet(kets_on_grid, ket_basis)
+
+FortranFunction("integrals_grad", kinet, bras_on_grid, bra_basis, kets_on_grid, ket_basis)
# Parameter information
-Matrix kinet
+Array[FunctionIndex, FunctionIndex] kinet
FunctionSet bra, ket
-Index alpha, beta
+FunctionIndex alpha, beta
# Computation
kinet[alpha, beta] = inner(bra[alpha], laplacian(ket[beta])*-0.5)
# Implementation specific
target ONETEP
-kinet is SPAM3("kinet")
-bra is PPDFunctionSet("bra_basis", "bras_on_grid")
-ket is PPDFunctionSet("ket_basis", "kets_on_grid")
-output is FortranFunction("integrals_kinetic", ["kinet", "bras_on_grid", "bra_basis", "kets_on_grid", "ket_basis"])
+Variable kinet = FortranVariable("kinet", spam3)
+Variable bra_basis = FortranVariable("bra_basis", func_basis)
+Variable bras_on_grid = FortranVariable("bras_on_grid", double(:))
+Variable ket_basis = FortranVariable("ket_basis", func_basis)
+Variable kets_on_grid = FortranVariable("kets_on_grid", double(:))
+Variable bra = PPDFunctionSet(bras_on_grid, bra_basis)
+Variable ket = PPDFunctionSet(kets_on_grid, ket_basis)
+
+FortranFunction("integrals_kinetic", kinet, bras_on_grid, bra_basis, kets_on_grid, ket_basis)