aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjthorn <jthorn@df1f8a13-aa1d-4dd4-9681-27ded5b42416>2002-08-18 15:05:50 +0000
committerjthorn <jthorn@df1f8a13-aa1d-4dd4-9681-27ded5b42416>2002-08-18 15:05:50 +0000
commit7be0a94bec4b4e89c433e5380fce2cf84e5e0681 (patch)
tree9d538be4e92709f55ca4d07a8b8f42fca1d04940 /src
parent36dedc21ced19dff3791de3c640eef34932cf6ec (diff)
new directory for files common to multiple interpolation operators
git-svn-id: http://svn.cactuscode.org/arrangements/CactusBase/LocalInterp/trunk@79 df1f8a13-aa1d-4dd4-9681-27ded5b42416
Diffstat (limited to 'src')
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/coeff-I.dcl.c2
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/coeff-I.store.c2
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/coeff-dx.dcl.c2
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/coeff-dx.store.c2
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/data-var.assign.c2
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/data-var.dcl.c2
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/interp-I.compute.c3
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/interp-dx.compute.c3
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-I.dcl.c3
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-I.store.c3
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-dx.dcl.c3
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-dx.store.c3
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-dxx.dcl.c3
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-dxx.store.c3
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/data-var.assign.c3
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/data-var.dcl.c3
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/interp-I.compute.c4
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/interp-dx.compute.c4
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/interp-dxx.compute.c4
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-I.dcl.c4
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-I.store.c4
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-dx.dcl.c4
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-dx.store.c4
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-dxx.dcl.c4
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-dxx.store.c4
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/data-var.assign.c4
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/data-var.dcl.c4
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/interp-I.compute.c5
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/interp-dx.compute.c5
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/interp-dxx.compute.c5
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-I.dcl.c5
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-I.store.c5
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-dx.dcl.c5
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-dx.store.c5
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-dxx.dcl.c5
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-dxx.store.c5
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/data-var.assign.c5
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/data-var.dcl.c5
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/interp-I.compute.c6
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/interp-dx.compute.c6
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/interp-dxx.compute.c6
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-I.dcl.c6
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-I.store.c6
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-dx.dcl.c6
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-dx.store.c6
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-dxx.dcl.c6
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-dxx.store.c6
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/data-var.assign.c6
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/data-var.dcl.c6
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/interp-I.compute.c7
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/interp-dx.compute.c7
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/interp-dxx.compute.c7
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-I.dcl.c7
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-I.store.c7
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-dx.dcl.c7
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-dx.store.c7
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-dxx.dcl.c7
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-dxx.store.c7
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/data-var.assign.c7
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/data-var.dcl.c7
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/interp-I.compute.c8
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/interp-dx.compute.c8
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/interp-dxx.compute.c8
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.log1309
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/1d.maple219
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-I.dcl.c4
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-I.store.c4
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-dx.dcl.c4
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-dx.store.c4
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-dy.dcl.c4
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-dy.store.c4
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/data-var.assign.c4
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/data-var.dcl.c4
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/interp-I.compute.c5
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/interp-dx.compute.c5
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/interp-dy.compute.c5
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-I.dcl.c9
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-I.store.c9
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dx.dcl.c9
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dx.store.c9
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dxx.dcl.c9
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dxx.store.c9
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dxy.dcl.c9
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dxy.store.c9
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dy.dcl.c9
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dy.store.c9
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dyy.dcl.c9
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dyy.store.c9
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/data-var.assign.c9
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/data-var.dcl.c9
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-I.compute.c10
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-dx.compute.c10
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-dxx.compute.c10
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-dxy.compute.c10
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-dy.compute.c10
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-dyy.compute.c10
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-I.dcl.c16
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-I.store.c16
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dx.dcl.c16
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dx.store.c16
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dxx.dcl.c16
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dxx.store.c16
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dxy.dcl.c16
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dxy.store.c16
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dy.dcl.c16
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dy.store.c16
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dyy.dcl.c16
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dyy.store.c16
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/data-var.assign.c16
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/data-var.dcl.c16
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-I.compute.c17
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-dx.compute.c17
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-dxx.compute.c17
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-dxy.compute.c17
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-dy.compute.c17
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-dyy.compute.c17
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-I.dcl.c25
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-I.store.c25
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dx.dcl.c25
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dx.store.c25
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dxx.dcl.c25
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dxx.store.c25
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dxy.dcl.c25
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dxy.store.c25
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dy.dcl.c25
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dy.store.c25
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dyy.dcl.c25
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dyy.store.c25
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/data-var.assign.c25
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/data-var.dcl.c25
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-I.compute.c26
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-dx.compute.c26
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-dxx.compute.c26
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-dxy.compute.c26
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-dy.compute.c26
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-dyy.compute.c26
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.log1314
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/2d.maple215
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-I.dcl.c8
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-I.store.c8
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dx.dcl.c8
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dx.store.c8
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dy.dcl.c8
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dy.store.c8
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dz.dcl.c8
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dz.store.c8
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/data-var.assign.c8
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/data-var.dcl.c8
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/interp-I.compute.c9
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/interp-dx.compute.c9
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/interp-dy.compute.c9
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/interp-dz.compute.c9
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-I.dcl.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-I.store.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dx.dcl.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dx.store.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxx.dcl.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxx.store.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxy.dcl.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxy.store.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxz.dcl.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxz.store.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dy.dcl.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dy.store.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dyy.dcl.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dyy.store.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dyz.dcl.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dyz.store.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dz.dcl.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dz.store.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dzz.dcl.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dzz.store.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/data-var.assign.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/data-var.dcl.c27
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-I.compute.c28
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dx.compute.c28
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dxx.compute.c28
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dxy.compute.c28
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dxz.compute.c28
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dy.compute.c28
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dyy.compute.c28
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dyz.compute.c28
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dz.compute.c28
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dzz.compute.c28
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-I.dcl.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-I.store.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dx.dcl.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dx.store.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxx.dcl.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxx.store.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxy.dcl.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxy.store.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxz.dcl.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxz.store.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dy.dcl.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dy.store.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dyy.dcl.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dyy.store.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dyz.dcl.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dyz.store.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dz.dcl.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dz.store.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dzz.dcl.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dzz.store.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/data-var.assign.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/data-var.dcl.c64
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-I.compute.c65
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dx.compute.c65
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dxx.compute.c65
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dxy.compute.c65
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dxz.compute.c65
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dy.compute.c65
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dyy.compute.c65
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dyz.compute.c65
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dz.compute.c65
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dzz.compute.c65
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-I.dcl.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-I.store.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dx.dcl.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dx.store.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxx.dcl.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxx.store.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxy.dcl.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxy.store.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxz.dcl.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxz.store.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dy.dcl.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dy.store.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dyy.dcl.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dyy.store.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dyz.dcl.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dyz.store.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dz.dcl.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dz.store.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dzz.dcl.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dzz.store.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/data-var.assign.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/data-var.dcl.c125
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-I.compute.c126
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dx.compute.c126
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dxx.compute.c126
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dxy.compute.c126
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dxz.compute.c126
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dy.compute.c126
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dyy.compute.c126
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dyz.compute.c126
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dz.compute.c126
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dzz.compute.c126
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.log1504
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/3d.maple306
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/README6
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/cube_posns.maple42
-rw-r--r--src/GeneralizedPolynomial-Uniform/common/makefile62
253 files changed, 13408 insertions, 0 deletions
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/coeff-I.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/coeff-I.dcl.c
new file mode 100644
index 0000000..0069517
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/coeff-I.dcl.c
@@ -0,0 +1,2 @@
+fp coeff_I_0,
+ coeff_I_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/coeff-I.store.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/coeff-I.store.c
new file mode 100644
index 0000000..585cac0
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/coeff-I.store.c
@@ -0,0 +1,2 @@
+COEFF(0) = coeff_I_0;
+COEFF(1) = coeff_I_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/coeff-dx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/coeff-dx.dcl.c
new file mode 100644
index 0000000..e5b0620
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/coeff-dx.dcl.c
@@ -0,0 +1,2 @@
+fp coeff_dx_0,
+ coeff_dx_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/coeff-dx.store.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/coeff-dx.store.c
new file mode 100644
index 0000000..eb49618
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/coeff-dx.store.c
@@ -0,0 +1,2 @@
+COEFF(0) = factor * coeff_dx_0;
+COEFF(1) = factor * coeff_dx_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/data-var.assign.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/data-var.assign.c
new file mode 100644
index 0000000..652f644
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/data-var.assign.c
@@ -0,0 +1,2 @@
+data_0 = DATA(0);
+data_p1 = DATA(1);
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/data-var.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/data-var.dcl.c
new file mode 100644
index 0000000..3719a9b
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/data-var.dcl.c
@@ -0,0 +1,2 @@
+fp data_0,
+ data_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/interp-I.compute.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/interp-I.compute.c
new file mode 100644
index 0000000..276ea36
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/interp-I.compute.c
@@ -0,0 +1,3 @@
+result =
+ coeff_I_0*data_0
+ + coeff_I_p1*data_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/interp-dx.compute.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/interp-dx.compute.c
new file mode 100644
index 0000000..eb6b63a
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size2/interp-dx.compute.c
@@ -0,0 +1,3 @@
+result =
+ coeff_dx_0*data_0
+ + coeff_dx_p1*data_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-I.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-I.dcl.c
new file mode 100644
index 0000000..01c8883
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-I.dcl.c
@@ -0,0 +1,3 @@
+fp coeff_I_m1,
+ coeff_I_0,
+ coeff_I_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-I.store.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-I.store.c
new file mode 100644
index 0000000..7a3e7d0
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-I.store.c
@@ -0,0 +1,3 @@
+COEFF(-1) = coeff_I_m1;
+COEFF(0) = coeff_I_0;
+COEFF(1) = coeff_I_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-dx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-dx.dcl.c
new file mode 100644
index 0000000..5c4daf6
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-dx.dcl.c
@@ -0,0 +1,3 @@
+fp coeff_dx_m1,
+ coeff_dx_0,
+ coeff_dx_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-dx.store.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-dx.store.c
new file mode 100644
index 0000000..672d338
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-dx.store.c
@@ -0,0 +1,3 @@
+COEFF(-1) = factor * coeff_dx_m1;
+COEFF(0) = factor * coeff_dx_0;
+COEFF(1) = factor * coeff_dx_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-dxx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-dxx.dcl.c
new file mode 100644
index 0000000..36c909e
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-dxx.dcl.c
@@ -0,0 +1,3 @@
+fp coeff_dxx_m1,
+ coeff_dxx_0,
+ coeff_dxx_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-dxx.store.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-dxx.store.c
new file mode 100644
index 0000000..72b7d92
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/coeff-dxx.store.c
@@ -0,0 +1,3 @@
+COEFF(-1) = factor * coeff_dxx_m1;
+COEFF(0) = factor * coeff_dxx_0;
+COEFF(1) = factor * coeff_dxx_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/data-var.assign.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/data-var.assign.c
new file mode 100644
index 0000000..0229a3c
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/data-var.assign.c
@@ -0,0 +1,3 @@
+data_m1 = DATA(-1);
+data_0 = DATA(0);
+data_p1 = DATA(1);
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/data-var.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/data-var.dcl.c
new file mode 100644
index 0000000..a38b9e6
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/data-var.dcl.c
@@ -0,0 +1,3 @@
+fp data_m1,
+ data_0,
+ data_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/interp-I.compute.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/interp-I.compute.c
new file mode 100644
index 0000000..46cfcbc
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/interp-I.compute.c
@@ -0,0 +1,4 @@
+result =
+ coeff_I_m1*data_m1
+ + coeff_I_0*data_0
+ + coeff_I_p1*data_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/interp-dx.compute.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/interp-dx.compute.c
new file mode 100644
index 0000000..cd754c6
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/interp-dx.compute.c
@@ -0,0 +1,4 @@
+result =
+ coeff_dx_m1*data_m1
+ + coeff_dx_0*data_0
+ + coeff_dx_p1*data_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/interp-dxx.compute.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/interp-dxx.compute.c
new file mode 100644
index 0000000..a4a5b16
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size3/interp-dxx.compute.c
@@ -0,0 +1,4 @@
+result =
+ coeff_dxx_m1*data_m1
+ + coeff_dxx_0*data_0
+ + coeff_dxx_p1*data_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-I.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-I.dcl.c
new file mode 100644
index 0000000..c79add1
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-I.dcl.c
@@ -0,0 +1,4 @@
+fp coeff_I_m1,
+ coeff_I_0,
+ coeff_I_p1,
+ coeff_I_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-I.store.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-I.store.c
new file mode 100644
index 0000000..6e02dfb
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-I.store.c
@@ -0,0 +1,4 @@
+COEFF(-1) = coeff_I_m1;
+COEFF(0) = coeff_I_0;
+COEFF(1) = coeff_I_p1;
+COEFF(2) = coeff_I_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-dx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-dx.dcl.c
new file mode 100644
index 0000000..ab7b0cf
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-dx.dcl.c
@@ -0,0 +1,4 @@
+fp coeff_dx_m1,
+ coeff_dx_0,
+ coeff_dx_p1,
+ coeff_dx_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-dx.store.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-dx.store.c
new file mode 100644
index 0000000..ebf3b47
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-dx.store.c
@@ -0,0 +1,4 @@
+COEFF(-1) = factor * coeff_dx_m1;
+COEFF(0) = factor * coeff_dx_0;
+COEFF(1) = factor * coeff_dx_p1;
+COEFF(2) = factor * coeff_dx_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-dxx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-dxx.dcl.c
new file mode 100644
index 0000000..6e56e96
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-dxx.dcl.c
@@ -0,0 +1,4 @@
+fp coeff_dxx_m1,
+ coeff_dxx_0,
+ coeff_dxx_p1,
+ coeff_dxx_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-dxx.store.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-dxx.store.c
new file mode 100644
index 0000000..487736f
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/coeff-dxx.store.c
@@ -0,0 +1,4 @@
+COEFF(-1) = factor * coeff_dxx_m1;
+COEFF(0) = factor * coeff_dxx_0;
+COEFF(1) = factor * coeff_dxx_p1;
+COEFF(2) = factor * coeff_dxx_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/data-var.assign.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/data-var.assign.c
new file mode 100644
index 0000000..946cb6d
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/data-var.assign.c
@@ -0,0 +1,4 @@
+data_m1 = DATA(-1);
+data_0 = DATA(0);
+data_p1 = DATA(1);
+data_p2 = DATA(2);
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/data-var.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/data-var.dcl.c
new file mode 100644
index 0000000..8f598d5
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/data-var.dcl.c
@@ -0,0 +1,4 @@
+fp data_m1,
+ data_0,
+ data_p1,
+ data_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/interp-I.compute.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/interp-I.compute.c
new file mode 100644
index 0000000..82eee03
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/interp-I.compute.c
@@ -0,0 +1,5 @@
+result =
+ coeff_I_m1*data_m1
+ + coeff_I_0*data_0
+ + coeff_I_p1*data_p1
+ + coeff_I_p2*data_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/interp-dx.compute.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/interp-dx.compute.c
new file mode 100644
index 0000000..791ca6b
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/interp-dx.compute.c
@@ -0,0 +1,5 @@
+result =
+ coeff_dx_m1*data_m1
+ + coeff_dx_0*data_0
+ + coeff_dx_p1*data_p1
+ + coeff_dx_p2*data_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/interp-dxx.compute.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/interp-dxx.compute.c
new file mode 100644
index 0000000..c2d6460
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size4/interp-dxx.compute.c
@@ -0,0 +1,5 @@
+result =
+ coeff_dxx_m1*data_m1
+ + coeff_dxx_0*data_0
+ + coeff_dxx_p1*data_p1
+ + coeff_dxx_p2*data_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-I.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-I.dcl.c
new file mode 100644
index 0000000..cadcf4f
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-I.dcl.c
@@ -0,0 +1,5 @@
+fp coeff_I_m2,
+ coeff_I_m1,
+ coeff_I_0,
+ coeff_I_p1,
+ coeff_I_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-I.store.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-I.store.c
new file mode 100644
index 0000000..3721c92
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-I.store.c
@@ -0,0 +1,5 @@
+COEFF(-2) = coeff_I_m2;
+COEFF(-1) = coeff_I_m1;
+COEFF(0) = coeff_I_0;
+COEFF(1) = coeff_I_p1;
+COEFF(2) = coeff_I_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-dx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-dx.dcl.c
new file mode 100644
index 0000000..ca9bbfe
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-dx.dcl.c
@@ -0,0 +1,5 @@
+fp coeff_dx_m2,
+ coeff_dx_m1,
+ coeff_dx_0,
+ coeff_dx_p1,
+ coeff_dx_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-dx.store.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-dx.store.c
new file mode 100644
index 0000000..1dc93a4
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-dx.store.c
@@ -0,0 +1,5 @@
+COEFF(-2) = factor * coeff_dx_m2;
+COEFF(-1) = factor * coeff_dx_m1;
+COEFF(0) = factor * coeff_dx_0;
+COEFF(1) = factor * coeff_dx_p1;
+COEFF(2) = factor * coeff_dx_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-dxx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-dxx.dcl.c
new file mode 100644
index 0000000..b0aadfc
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-dxx.dcl.c
@@ -0,0 +1,5 @@
+fp coeff_dxx_m2,
+ coeff_dxx_m1,
+ coeff_dxx_0,
+ coeff_dxx_p1,
+ coeff_dxx_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-dxx.store.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-dxx.store.c
new file mode 100644
index 0000000..2d5fd79
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/coeff-dxx.store.c
@@ -0,0 +1,5 @@
+COEFF(-2) = factor * coeff_dxx_m2;
+COEFF(-1) = factor * coeff_dxx_m1;
+COEFF(0) = factor * coeff_dxx_0;
+COEFF(1) = factor * coeff_dxx_p1;
+COEFF(2) = factor * coeff_dxx_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/data-var.assign.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/data-var.assign.c
new file mode 100644
index 0000000..ee87b78
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/data-var.assign.c
@@ -0,0 +1,5 @@
+data_m2 = DATA(-2);
+data_m1 = DATA(-1);
+data_0 = DATA(0);
+data_p1 = DATA(1);
+data_p2 = DATA(2);
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/data-var.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/data-var.dcl.c
new file mode 100644
index 0000000..2fdf4d9
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/data-var.dcl.c
@@ -0,0 +1,5 @@
+fp data_m2,
+ data_m1,
+ data_0,
+ data_p1,
+ data_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/interp-I.compute.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/interp-I.compute.c
new file mode 100644
index 0000000..f283cb6
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/interp-I.compute.c
@@ -0,0 +1,6 @@
+result =
+ coeff_I_m2*data_m2
+ + coeff_I_m1*data_m1
+ + coeff_I_0*data_0
+ + coeff_I_p1*data_p1
+ + coeff_I_p2*data_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/interp-dx.compute.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/interp-dx.compute.c
new file mode 100644
index 0000000..f6673ec
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/interp-dx.compute.c
@@ -0,0 +1,6 @@
+result =
+ coeff_dx_m2*data_m2
+ + coeff_dx_m1*data_m1
+ + coeff_dx_0*data_0
+ + coeff_dx_p1*data_p1
+ + coeff_dx_p2*data_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/interp-dxx.compute.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/interp-dxx.compute.c
new file mode 100644
index 0000000..ab21a19
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size5/interp-dxx.compute.c
@@ -0,0 +1,6 @@
+result =
+ coeff_dxx_m2*data_m2
+ + coeff_dxx_m1*data_m1
+ + coeff_dxx_0*data_0
+ + coeff_dxx_p1*data_p1
+ + coeff_dxx_p2*data_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-I.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-I.dcl.c
new file mode 100644
index 0000000..2b98276
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-I.dcl.c
@@ -0,0 +1,6 @@
+fp coeff_I_m2,
+ coeff_I_m1,
+ coeff_I_0,
+ coeff_I_p1,
+ coeff_I_p2,
+ coeff_I_p3;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-I.store.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-I.store.c
new file mode 100644
index 0000000..325435d
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-I.store.c
@@ -0,0 +1,6 @@
+COEFF(-2) = coeff_I_m2;
+COEFF(-1) = coeff_I_m1;
+COEFF(0) = coeff_I_0;
+COEFF(1) = coeff_I_p1;
+COEFF(2) = coeff_I_p2;
+COEFF(3) = coeff_I_p3;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-dx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-dx.dcl.c
new file mode 100644
index 0000000..82378bc
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-dx.dcl.c
@@ -0,0 +1,6 @@
+fp coeff_dx_m2,
+ coeff_dx_m1,
+ coeff_dx_0,
+ coeff_dx_p1,
+ coeff_dx_p2,
+ coeff_dx_p3;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-dx.store.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-dx.store.c
new file mode 100644
index 0000000..3a03b04
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-dx.store.c
@@ -0,0 +1,6 @@
+COEFF(-2) = factor * coeff_dx_m2;
+COEFF(-1) = factor * coeff_dx_m1;
+COEFF(0) = factor * coeff_dx_0;
+COEFF(1) = factor * coeff_dx_p1;
+COEFF(2) = factor * coeff_dx_p2;
+COEFF(3) = factor * coeff_dx_p3;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-dxx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-dxx.dcl.c
new file mode 100644
index 0000000..b903ceb
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-dxx.dcl.c
@@ -0,0 +1,6 @@
+fp coeff_dxx_m2,
+ coeff_dxx_m1,
+ coeff_dxx_0,
+ coeff_dxx_p1,
+ coeff_dxx_p2,
+ coeff_dxx_p3;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-dxx.store.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-dxx.store.c
new file mode 100644
index 0000000..d437161
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/coeff-dxx.store.c
@@ -0,0 +1,6 @@
+COEFF(-2) = factor * coeff_dxx_m2;
+COEFF(-1) = factor * coeff_dxx_m1;
+COEFF(0) = factor * coeff_dxx_0;
+COEFF(1) = factor * coeff_dxx_p1;
+COEFF(2) = factor * coeff_dxx_p2;
+COEFF(3) = factor * coeff_dxx_p3;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/data-var.assign.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/data-var.assign.c
new file mode 100644
index 0000000..3b1063a
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/data-var.assign.c
@@ -0,0 +1,6 @@
+data_m2 = DATA(-2);
+data_m1 = DATA(-1);
+data_0 = DATA(0);
+data_p1 = DATA(1);
+data_p2 = DATA(2);
+data_p3 = DATA(3);
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/data-var.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/data-var.dcl.c
new file mode 100644
index 0000000..fa8151e
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/data-var.dcl.c
@@ -0,0 +1,6 @@
+fp data_m2,
+ data_m1,
+ data_0,
+ data_p1,
+ data_p2,
+ data_p3;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/interp-I.compute.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/interp-I.compute.c
new file mode 100644
index 0000000..d5f93a0
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/interp-I.compute.c
@@ -0,0 +1,7 @@
+result =
+ coeff_I_m2*data_m2
+ + coeff_I_m1*data_m1
+ + coeff_I_0*data_0
+ + coeff_I_p1*data_p1
+ + coeff_I_p2*data_p2
+ + coeff_I_p3*data_p3;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/interp-dx.compute.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/interp-dx.compute.c
new file mode 100644
index 0000000..54a4c39
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/interp-dx.compute.c
@@ -0,0 +1,7 @@
+result =
+ coeff_dx_m2*data_m2
+ + coeff_dx_m1*data_m1
+ + coeff_dx_0*data_0
+ + coeff_dx_p1*data_p1
+ + coeff_dx_p2*data_p2
+ + coeff_dx_p3*data_p3;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/interp-dxx.compute.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/interp-dxx.compute.c
new file mode 100644
index 0000000..842312e
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size6/interp-dxx.compute.c
@@ -0,0 +1,7 @@
+result =
+ coeff_dxx_m2*data_m2
+ + coeff_dxx_m1*data_m1
+ + coeff_dxx_0*data_0
+ + coeff_dxx_p1*data_p1
+ + coeff_dxx_p2*data_p2
+ + coeff_dxx_p3*data_p3;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-I.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-I.dcl.c
new file mode 100644
index 0000000..ce86fb9
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-I.dcl.c
@@ -0,0 +1,7 @@
+fp coeff_I_m3,
+ coeff_I_m2,
+ coeff_I_m1,
+ coeff_I_0,
+ coeff_I_p1,
+ coeff_I_p2,
+ coeff_I_p3;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-I.store.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-I.store.c
new file mode 100644
index 0000000..1b97834
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-I.store.c
@@ -0,0 +1,7 @@
+COEFF(-3) = coeff_I_m3;
+COEFF(-2) = coeff_I_m2;
+COEFF(-1) = coeff_I_m1;
+COEFF(0) = coeff_I_0;
+COEFF(1) = coeff_I_p1;
+COEFF(2) = coeff_I_p2;
+COEFF(3) = coeff_I_p3;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-dx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-dx.dcl.c
new file mode 100644
index 0000000..a7cebad
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-dx.dcl.c
@@ -0,0 +1,7 @@
+fp coeff_dx_m3,
+ coeff_dx_m2,
+ coeff_dx_m1,
+ coeff_dx_0,
+ coeff_dx_p1,
+ coeff_dx_p2,
+ coeff_dx_p3;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-dx.store.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-dx.store.c
new file mode 100644
index 0000000..7b76907
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-dx.store.c
@@ -0,0 +1,7 @@
+COEFF(-3) = factor * coeff_dx_m3;
+COEFF(-2) = factor * coeff_dx_m2;
+COEFF(-1) = factor * coeff_dx_m1;
+COEFF(0) = factor * coeff_dx_0;
+COEFF(1) = factor * coeff_dx_p1;
+COEFF(2) = factor * coeff_dx_p2;
+COEFF(3) = factor * coeff_dx_p3;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-dxx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-dxx.dcl.c
new file mode 100644
index 0000000..58c0568
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-dxx.dcl.c
@@ -0,0 +1,7 @@
+fp coeff_dxx_m3,
+ coeff_dxx_m2,
+ coeff_dxx_m1,
+ coeff_dxx_0,
+ coeff_dxx_p1,
+ coeff_dxx_p2,
+ coeff_dxx_p3;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-dxx.store.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-dxx.store.c
new file mode 100644
index 0000000..b65bc24
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/coeff-dxx.store.c
@@ -0,0 +1,7 @@
+COEFF(-3) = factor * coeff_dxx_m3;
+COEFF(-2) = factor * coeff_dxx_m2;
+COEFF(-1) = factor * coeff_dxx_m1;
+COEFF(0) = factor * coeff_dxx_0;
+COEFF(1) = factor * coeff_dxx_p1;
+COEFF(2) = factor * coeff_dxx_p2;
+COEFF(3) = factor * coeff_dxx_p3;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/data-var.assign.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/data-var.assign.c
new file mode 100644
index 0000000..5375f17
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/data-var.assign.c
@@ -0,0 +1,7 @@
+data_m3 = DATA(-3);
+data_m2 = DATA(-2);
+data_m1 = DATA(-1);
+data_0 = DATA(0);
+data_p1 = DATA(1);
+data_p2 = DATA(2);
+data_p3 = DATA(3);
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/data-var.dcl.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/data-var.dcl.c
new file mode 100644
index 0000000..cdf1c5c
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/data-var.dcl.c
@@ -0,0 +1,7 @@
+fp data_m3,
+ data_m2,
+ data_m1,
+ data_0,
+ data_p1,
+ data_p2,
+ data_p3;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/interp-I.compute.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/interp-I.compute.c
new file mode 100644
index 0000000..0405d21
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/interp-I.compute.c
@@ -0,0 +1,8 @@
+result =
+ coeff_I_m3*data_m3
+ + coeff_I_m2*data_m2
+ + coeff_I_m1*data_m1
+ + coeff_I_0*data_0
+ + coeff_I_p1*data_p1
+ + coeff_I_p2*data_p2
+ + coeff_I_p3*data_p3;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/interp-dx.compute.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/interp-dx.compute.c
new file mode 100644
index 0000000..425e3d8
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/interp-dx.compute.c
@@ -0,0 +1,8 @@
+result =
+ coeff_dx_m3*data_m3
+ + coeff_dx_m2*data_m2
+ + coeff_dx_m1*data_m1
+ + coeff_dx_0*data_0
+ + coeff_dx_p1*data_p1
+ + coeff_dx_p2*data_p2
+ + coeff_dx_p3*data_p3;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/interp-dxx.compute.c b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/interp-dxx.compute.c
new file mode 100644
index 0000000..045a2b6
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.cube.size7/interp-dxx.compute.c
@@ -0,0 +1,8 @@
+result =
+ coeff_dxx_m3*data_m3
+ + coeff_dxx_m2*data_m2
+ + coeff_dxx_m1*data_m1
+ + coeff_dxx_0*data_0
+ + coeff_dxx_p1*data_p1
+ + coeff_dxx_p2*data_p2
+ + coeff_dxx_p3*data_p3;
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.log b/src/GeneralizedPolynomial-Uniform/common/1d.log
new file mode 100644
index 0000000..c3e9168
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.log
@@ -0,0 +1,1309 @@
+ |\^/| Maple 7 (IBM INTEL LINUX)
+._|\| |/|_. Copyright (c) 2001 by Waterloo Maple Inc.
+ \ MAPLE / All rights reserved. Maple is a registered trademark of
+ <____ ____> Waterloo Maple Inc.
+ | Type ? for help.
+# util.maple -- misc utility routines
+# $Id: util.maple,v 1.3 2002/05/19 13:12:18 jthorn Exp $
+>
+#
+# fix_rationals - convert numbers to RATIONAL() calls
+# nonmatching_names - find names in a list which *don't* have a specified prefix
+# sprint_numeric_list - convert a numeric list to a valid C identifier suffix
+# print_name_list_dcl - print a C declaration for a list of names
+#
+# hypercube_points - compute all (integer) points in an N-dimensional hypercube
+#
+# ftruncate - truncate a file to zero length
+#
+>
+################################################################################
+################################################################################
+################################################################################
+>
+#
+# This function converts all {integer, rational} subexpressions of its
+# input except integer exponents and -1 factors in products, into function
+# calls
+# RATIONAL(num,den)
+# This is useful in conjunction with the C() library function, since
+#
+# C( (1/3) * foo * bar )
+# t0 = foo*bar/3;
+#
+# generates a (slow) division (and runs the risk of mixed-mode-arithmetic
+# problems), while
+#
+# C((1.0/3.0) * foo * bar);
+# t0 = 0.3333333333*foo*bar;
+#
+# suffers from roundoff error. With this function,
+#
+# fix_rationals((1/3) * foo * bar);
+# RATIONAL(1,3) foo bar
+# C(%);
+# t0 = RATIONAL(1.0,3.0)*foo*bar;
+#
+# which a C preprocessor macro can easily convert to the desired
+#
+# t0 = (1.0/3.0)*foo*bar;
+#
+# Additionally, this function can be told to leave certain types of
+# subexpressions unconverged. For example,
+# fix_rationals(expr, type, specfunc(integer, DATA));
+# will leave all subexpressions of the form DATA(integer arguments)
+# unconverted.
+#
+# Arguments:
+# expr = (in) The expression to be converted.
+# inert_fn = (optional in)
+# If specified, this argument should be a Boolean procedure
+# or the name of a Boolean procedure. This procedure should
+# take one or more argument, and return true if and only if
+# the first argument should *not* be converted, i.e. if we
+# should leave this expression unchanged. See the last
+# example above.
+# ... = (optional in)
+# Any further arguments are passed as additional arguments to
+# the inert_fn procedure.
+#
+> fix_rationals :=
+> proc(
+> expr::{
+> algebraic, name = algebraic,
+> list({algebraic, name = algebraic}),
+> set ({algebraic, name = algebraic})
+> },
+> inert_fn::{name, procedure}
+> )
+> local nn, k,
+> base, power, fbase, fpower,
+> fn, fn_args_list,
+> num, den, mult;
+>
+# do we want to convert this expression?
+> if ((nargs >= 2) and inert_fn(expr, args[3..nargs]))
+> then return expr;
+> end if;
+>
+# recurse over lists and sets
+> if (type(expr, {list,set}))
+> then return map(fix_rationals, expr, args[2..nargs]);
+> end if;
+>
+# recurse over equation right hand sides
+> if (type(expr, name = algebraic))
+> then return ( lhs(expr) = fix_rationals(rhs(expr), args[2..nargs]) );
+> end if;
+>
+# recurse over functions other than RATIONAL()
+> if (type(expr, function))
+> then
+> fn := op(0, expr);
+> if (fn <> 'RATIONAL')
+> then
+> fn_args_list := [op(expr)];
+> fn_args_list := map(fix_rationals, fn_args_list, args[2..nargs]);
+> fn; return '%'( op(fn_args_list) );
+> end if;
+> end if;
+>
+> nn := nops(expr);
+>
+# recurse over sums
+> if (type(expr, `+`))
+> then return sum('fix_rationals(op(k,expr), args[2..nargs])', 'k'=1..nn);
+> end if;
+>
+# recurse over products
+# ... leaving leading -1 factors intact, i.e. not converted to RATIONAL(-1,1)
+> if (type(expr, `*`))
+> then
+> if (op(1, expr) = -1)
+> then return -1*fix_rationals(remove(type, expr, 'identical(-1)'),
+> args[2..nargs]);
+> else return product('fix_rationals(op(k,expr), args[2..nargs])',
+> 'k'=1..nn);
+> end if;
+> end if;
+>
+# recurse over powers
+# ... leaving integer exponents intact
+> if (type(expr, `^`))
+> then
+> base := op(1, expr);
+> power := op(2, expr);
+>
+> fbase := fix_rationals(base, args[2..nargs]);
+> if (type(power, integer))
+> then fpower := power;
+> else fpower := fix_rationals(power, args[2..nargs]);
+> end if;
+> return fbase ^ fpower;
+> end if;
+>
+# fix integers and fractions
+> if (type(expr, integer))
+> then return 'RATIONAL'(expr, 1);
+> end if;
+> if (type(expr, fraction))
+> then
+> num := op(1, expr);
+> den := op(2, expr);
+>
+> return 'RATIONAL'(num, den);
+> end if;
+>
+# turn Maple floating-point into integer fraction, then recursively fix that
+> if (type(expr, float))
+> then
+> mult := op(1, expr);
+> power := op(2, expr);
+> return fix_rationals(mult * 10^power, args[2..nargs]);
+> end if;
+>
+# identity op on names
+> if (type(expr, name))
+> then return expr;
+> end if;
+>
+# unknown type
+> error "%0",
+> "unknown type for expr!",
+> " whattype(expr) = ", whattype(expr),
+> " expr = ", expr;
+> end proc;
+fix_rationals := proc(expr::{algebraic, name = algebraic,
+list({algebraic, name = algebraic}), set({algebraic, name = algebraic})},
+inert_fn::{procedure, name})
+local nn, k, base, power, fbase, fpower, fn, fn_args_list, num, den, mult;
+ if 2 <= nargs and inert_fn(expr, args[3 .. nargs]) then return expr
+ end if;
+ if type(expr, {set, list}) then
+ return map(fix_rationals, expr, args[2 .. nargs])
+ end if;
+ if type(expr, name = algebraic) then
+ return lhs(expr) = fix_rationals(rhs(expr), args[2 .. nargs])
+ end if;
+ if type(expr, function) then
+ fn := op(0, expr);
+ if fn <> 'RATIONAL' then
+ fn_args_list := [op(expr)];
+ fn_args_list :=
+ map(fix_rationals, fn_args_list, args[2 .. nargs]);
+ fn;
+ return '%'(op(fn_args_list))
+ end if
+ end if;
+ nn := nops(expr);
+ if type(expr, `+`) then return
+ sum('fix_rationals(op(k, expr), args[2 .. nargs])', 'k' = 1 .. nn)
+ end if;
+ if type(expr, `*`) then
+ if op(1, expr) = -1 then return -fix_rationals(
+ remove(type, expr, 'identical(-1)'), args[2 .. nargs])
+ else return product('fix_rationals(op(k, expr), args[2 .. nargs])',
+ 'k' = 1 .. nn)
+ end if
+ end if;
+ if type(expr, `^`) then
+ base := op(1, expr);
+ power := op(2, expr);
+ fbase := fix_rationals(base, args[2 .. nargs]);
+ if type(power, integer) then fpower := power
+ else fpower := fix_rationals(power, args[2 .. nargs])
+ end if;
+ return fbase^fpower
+ end if;
+ if type(expr, integer) then return 'RATIONAL'(expr, 1) end if;
+ if type(expr, fraction) then
+ num := op(1, expr); den := op(2, expr); return 'RATIONAL'(num, den)
+ end if;
+ if type(expr, float) then
+ mult := op(1, expr);
+ power := op(2, expr);
+ return fix_rationals(mult*10^power, args[2 .. nargs])
+ end if;
+ if type(expr, name) then return expr end if;
+ error "%0", "unknown type for expr!", " whattype(expr) = ",
+ whattype(expr), " expr = ", expr
+end proc
+
+>
+################################################################################
+>
+#
+# This function finds names in a list which *don't* have a specified prefix.
+#
+# Arguments:
+# name_list = A list of the names.
+# prefix = The prefix we want to filter out.
+#
+# Results:
+# This function returns the subset list of names which don't have the
+# specified prefix.
+#
+> nonmatching_names :=
+> proc( name_list::list({name,string}), prefix::{name,string} )
+>
+> select( proc(n)
+> evalb(not StringTools[IsPrefix](prefix,n));
+> end proc
+> ,
+> name_list
+> );
+> end proc;
+nonmatching_names := proc(
+name_list::list({name, string}), prefix::{name, string})
+ select(proc(n) evalb(not StringTools[IsPrefix](prefix, n)) end proc,
+ name_list)
+end proc
+
+>
+################################################################################
+>
+#
+# This function converts a numeric list to a string which is a valid
+# C identifier suffix: elements are separated by "_", decimal points are
+# replaced by "x", and all nonzero values have explicit +/- signs, which
+# are replaced by "p"/"m".
+#
+# For example, [0,-3.5,+4] --> "0_m3x5_p4".
+#
+> sprint_numeric_list :=
+> proc(nlist::list(numeric))
+>
+# generate preliminary string, eg "+0_-3.5_+4"
+> map2(sprintf, "%+a", nlist);
+> ListTools[Join](%, "_");
+> cat(op(%));
+>
+# fixup bad characters
+> StringTools[SubstituteAll](%, "+0", "0");
+> StringTools[CharacterMap](".+-", "xpm", %);
+>
+> return %;
+> end proc;
+sprint_numeric_list := proc(nlist::list(numeric))
+ map2(sprintf, "%+a", nlist);
+ ListTools[Join](%, "_");
+ cat(op(%));
+ StringTools[SubstituteAll](%, "+0", "0");
+ StringTools[CharacterMap](".+-", "xpm", %);
+ return %
+end proc
+
+>
+################################################################################
+>
+#
+# This function prints a C declaration for a list of names.
+#
+# Argument:
+# name_list = A list of the names.
+# name_type = The C type of the names, eg. "double".
+# file_name = The file name to write the declaration to. This is
+# truncated before writing.
+#
+> print_name_list_dcl :=
+> proc( name_list::list({name,string}),
+> name_type::string,
+> file_name::string )
+> local blanks, separator_string;
+>
+> ftruncate(file_name);
+>
+# a sequence of blanks with the same length as name_type
+> seq(" ", i=1..length(name_type));
+>
+# string to separate names
+> separator_string := cat(",\n", %, " ");
+>
+> map(convert, name_list, string);
+> ListTools[Join](%, separator_string);
+> cat(op(%));
+>
+> fprintf(file_name,
+> "%s %s;\n",
+> name_type, %);
+>
+> fclose(file_name);
+> NULL;
+> end proc;
+print_name_list_dcl := proc(
+name_list::list({name, string}), name_type::string, file_name::string)
+local blanks, separator_string;
+ ftruncate(file_name);
+ seq(" ", i = 1 .. length(name_type));
+ separator_string := cat(",\n", %, " ");
+ map(convert, name_list, string);
+ ListTools[Join](%, separator_string);
+ cat(op(%));
+ fprintf(file_name, "%s %s;\n", name_type, %);
+ fclose(file_name);
+ NULL
+end proc
+
+>
+################################################################################
+################################################################################
+################################################################################
+>
+#
+# This function computes a list of all the (integer) points in an
+# N-dimensional hypercube, in lexicographic order. The present
+# implementation requires N <= 4.
+#
+# Arguments:
+# cmin,cmax = N-element lists of cube minimum/maximum coordinates.
+#
+# Results:
+# The function returns a set of d-element lists giving the coordinates.
+# For example,
+# hypercube([0,0], [2,1]
+# returns
+# { [0,0], [0,1], [1,0], [1,1], [2,0], [2,1] }
+> hypercube_points :=
+> proc(cmin::list(integer), cmax::list(integer))
+> local N, i,j,k,l;
+>
+> N := nops(cmin);
+> if (nops(cmax) <> N)
+> then error
+> "must have same number of dimensions for min and max coordinates!";
+> fi;
+>
+> if (N = 1)
+> then return [seq([i], i=cmin[1]..cmax[1])];
+> elif (N = 2)
+> then return [
+> seq(
+> seq([i,j], j=cmin[2]..cmax[2]),
+> i=cmin[1]..cmax[1])
+> ];
+> elif (N = 3)
+> then return [
+> seq(
+> seq(
+> seq([i,j,k], k=cmin[3]..cmax[3]),
+> j=cmin[2]..cmax[2] ),
+> i=cmin[1]..cmax[1])
+> ];
+> elif (N = 4)
+> then return [
+> seq(
+> seq(
+> seq(
+> seq([i,j,k,l], l=cmin[4]..cmax[4]),
+> k=cmin[3]..cmax[3] ),
+> j=cmin[2]..cmax[2]),
+> i=cmin[1]..cmax[1])
+> ];
+> else
+> error "implementation restriction: must have N <= 4, got %1!", N;
+> fi;
+> end proc;
+hypercube_points := proc(cmin::list(integer), cmax::list(integer))
+local N, i, j, k, l;
+ N := nops(cmin);
+ if nops(cmax) <> N then error
+ "must have same number of dimensions for min and max coordinates!"
+ end if;
+ if N = 1 then return [seq([i], i = cmin[1] .. cmax[1])]
+ elif N = 2 then return
+ [seq(seq([i, j], j = cmin[2] .. cmax[2]), i = cmin[1] .. cmax[1])]
+ elif N = 3 then return [seq(
+ seq(seq([i, j, k], k = cmin[3] .. cmax[3]), j = cmin[2] .. cmax[2])
+ , i = cmin[1] .. cmax[1])]
+ elif N = 4 then return [seq(seq(seq(
+ seq([i, j, k, l], l = cmin[4] .. cmax[4]), k = cmin[3] .. cmax[3]),
+ j = cmin[2] .. cmax[2]), i = cmin[1] .. cmax[1])]
+ else error "implementation restriction: must have N <= 4, got %1!", N
+ end if
+end proc
+
+>
+################################################################################
+################################################################################
+################################################################################
+>
+#
+# This function truncates a file to 0 length if it exists, or creates
+# it at that length if it doesn't exist.
+#
+# Arguments:
+# file_name = (in) The name of the file.
+#
+> ftruncate :=
+> proc(file_name::string)
+> fopen(file_name, 'WRITE');
+> fclose(%);
+> NULL;
+> end proc;
+ftruncate :=
+
+ proc(file_name::string) fopen(file_name, 'WRITE'); fclose(%); NULL end proc
+
+# interpolate.maple -- compute generalized interpolation formulas/coefficients
+# $Id: interpolate.maple,v 1.4 2002/05/14 15:52:50 jthorn Exp $
+>
+#
+# <<<representation of numbers, data values, etc>>>
+# polynomial_interpolant - compute polynomial interpolant
+# coeff_as_lc_of_data - coefficients of ... (linear combination of data)
+#
+# print_coeff__lc_of_data - print C code to compute coefficients
+# print_data_var_assign - print C code to assign data-value variables
+# print_interp_coeff_var_store - print C code to store coeff vars "somewhere"
+# print_interp_cmpt__lc_of_data - print C code for computation of interpolant
+#
+# coeff_name - name of coefficient of data at a given [m] coordinate
+# data_var_name - name of variable storing data value at a given [m] coordinate
+#
+>
+################################################################################
+>
+#
+# ***** representation of numbers, data values, etc *****
+#
+# We use RATIONAL(p.0,q.0) to denote the rational number p/q.
+#
+# We use DATA(...) to represent the data values being interpolated at a
+# specified [m] coordinate, where the arguments are the [m] coordinates.
+#
+# We use COEFF(...) to represent the molecule coefficient at a specified
+# [m] coordinate, where the arguments are the [m] coordinates.
+#
+# For example, the usual 1-D centered 2nd order 1st derivative molecule
+# would be written
+# RATIONAL(-1.0,2.0)*DATA(-1) + RATIONA(1.0,2.0)*DATA(1)
+# and its coefficients as
+# COEFF(-1) = RATIONAL(-1.0,2.0)
+# COEFF(1) = RATIONAL(1.0,2.0)
+#
+>
+################################################################################
+################################################################################
+################################################################################
+>
+#
+# This function computes a polynomial interpolant in any number of dimensions.
+#
+# Arguments:
+# fn = The interpolation function. This should be a procedure in the
+# coordinates, having the coefficients as global variables. For
+# example,
+# proc(x,y) c00 + c10*x + c01*y end proc
+# coeff_list = A set of the interpolation coefficients (coefficients in
+# the interpolation function), for example [c00, c10, c01].
+# coord_list = A list of the coordinates (independent variables in the
+# interpolation function), for example [x,y].
+# posn_list = A list of positions (each a list of numeric values) where the
+# interpolant is to use data, for example hypercube([0,0], [1,1]).
+# Any positions may be used; if they're redundant (as in the
+# example) the least-squares interpolant is computed.
+#
+# Results:
+# This function returns the interpolating polynomial, in the form of
+# an algebraic expression in the coordinates and the data values.
+#
+> polynomial_interpolant :=
+> proc(
+> fn::procedure, coeff_list::list(name),
+> coord_list::list(name), posn_list::list(list(numeric))
+> )
+> local posn, data_eqns, coeff_eqns;
+>
+# coefficients of interpolating polynomial
+> data_eqns := { seq( fn(op(posn))='DATA'(op(posn)) , posn=posn_list ) };
+> coeff_eqns := linalg[leastsqrs](data_eqns, {op(coeff_list)});
+> if (has(coeff_eqns, '_t'))
+> then error "interpolation coefficients aren't uniquely determined!";
+> end if;
+>
+# interpolant as a polynomial in the coordinates
+> return subs(coeff_eqns, eval(fn))(op(coord_list));
+> end proc;
+polynomial_interpolant := proc(fn::procedure, coeff_list::list(name),
+coord_list::list(name), posn_list::list(list(numeric)))
+local posn, data_eqns, coeff_eqns;
+ data_eqns := {seq(fn(op(posn)) = 'DATA'(op(posn)), posn = posn_list)};
+ coeff_eqns := linalg[leastsqrs](data_eqns, {op(coeff_list)});
+ if has(coeff_eqns, '_t') then
+ error "interpolation coefficients aren't uniquely determined!"
+ end if;
+ return subs(coeff_eqns, eval(fn))(op(coord_list))
+end proc
+
+>
+################################################################################
+>
+#
+# This function takes as input an interpolating polynomial, expresses
+# it as a linear combination of the data values, and returns the coefficeints
+# of that form.
+#
+# Arguments:
+# interpolant = The interpolating polynomial (an algebraic expression
+# in the coordinates and the data values).
+# posn_list = The same list of positions as was used to compute the
+# interpolating polynomial.
+#
+# Results:
+# This function returns the coefficients, as a list of equations of the
+# form COEFF(...) = value , where each value is a polynomial in the
+# coordinates. The order of the list matches that of posn_list.
+#
+> coeff_as_lc_of_data :=
+> proc(
+> interpolant::algebraic,
+> posn_list::list(list(numeric))
+> )
+> local data_list, interpolant_as_lc_of_data;
+>
+# interpolant as a linear combination of the data values
+> data_list := [ seq( 'DATA'(op(posn)) , posn=posn_list ) ];
+> interpolant_as_lc_of_data := collect(interpolant, data_list);
+>
+# coefficients of the data values in the linear combination
+> return map(
+> proc(posn::list(numeric))
+> coeff(interpolant_as_lc_of_data, DATA(op(posn)));
+> 'COEFF'(op(posn)) = %;
+> end proc
+> ,
+> posn_list
+> );
+> end proc;
+coeff_as_lc_of_data := proc(
+interpolant::algebraic, posn_list::list(list(numeric)))
+local data_list, interpolant_as_lc_of_data;
+ data_list := [seq('DATA'(op(posn)), posn = posn_list)];
+ interpolant_as_lc_of_data := collect(interpolant, data_list);
+ return map(proc(posn::list(numeric))
+ coeff(interpolant_as_lc_of_data, DATA(op(posn)));
+ 'COEFF'(op(posn)) = %
+ end proc, posn_list)
+end proc
+
+>
+################################################################################
+################################################################################
+################################################################################
+>
+#
+# This function prints C expressions for the coefficients of an
+# interpolating polynomial. (The polynomial is expressed as linear
+# combinations of the data values with coefficients which are
+# RATIONAL(p,q) calls.)
+#
+# Arguments:
+# coeff_list = A list of the coefficients, as returned from
+# coeff_as_lc_of_data() .
+# coeff_name_prefix = A prefix string for the coefficient names.
+# temp_name_type = The C type to be used for Maple-introduced temporary
+# names, eg. "double".
+# file_name = The file name to write the coefficients to. This is
+# truncated before writing.
+#
+> print_coeff__lc_of_data :=
+> proc( coeff_list::list(specfunc(numeric,COEFF) = algebraic),
+> coeff_name_prefix::string,
+> temp_name_type::string,
+> file_name::string )
+> global `codegen/C/function/informed`;
+> local coeff_list2, cmpt_list, temp_name_list;
+>
+# convert LHS of each equation from a COEFF() call (eg COEFF(-1,+1))
+# to a Maple/C variable name (eg coeff_I_m1_p1)
+> coeff_list2 := map(
+> proc(coeff_eqn::specfunc(numeric,COEFF) = algebraic)
+> local posn;
+> posn := [op(lhs(coeff_eqn))];
+> coeff_name(posn,coeff_name_prefix);
+> convert(%, name); # codegen[C] wants LHS
+> # to be an actual Maple *name*
+> % = fix_rationals(rhs(coeff_eqn));
+> end proc
+> ,
+> coeff_list
+> );
+>
+#
+# generate the C code
+#
+>
+# tell codegen[C] not to warn about unknown RATIONAL() and DATA() "fn calls"
+# via undocumented :( global table
+> `codegen/C/function/informed`['RATIONAL'] := true;
+> `codegen/C/function/informed`['DATA'] := true;
+>
+> ftruncate(file_name);
+>
+# optimized computation sequence for all the coefficients
+# (may use local variables t0,t1,t2,...)
+> cmpt_list := [codegen[optimize](coeff_list2, tryhard)];
+>
+# list of the t0,t1,t2,... local variables
+> temp_name_list := nonmatching_names(map(lhs,cmpt_list), coeff_name_prefix);
+>
+# declare the t0,t1,t2,... local variables (if there are any)
+> if (nops(temp_name_list) > 0)
+> then print_name_list_dcl(%, temp_name_type, file_name);
+> fi;
+>
+# now print the optimized computation sequence
+> codegen[C](cmpt_list, filename=file_name);
+>
+> fclose(file_name);
+>
+> NULL;
+> end proc;
+print_coeff__lc_of_data := proc(
+coeff_list::list(specfunc(numeric, COEFF) = algebraic),
+coeff_name_prefix::string, temp_name_type::string, file_name::string)
+local coeff_list2, cmpt_list, temp_name_list;
+global `codegen/C/function/informed`;
+ coeff_list2 := map(proc(
+ coeff_eqn::(specfunc(numeric, COEFF) = algebraic))
+ local posn;
+ posn := [op(lhs(coeff_eqn))];
+ coeff_name(posn, coeff_name_prefix);
+ convert(%, name);
+ % = fix_rationals(rhs(coeff_eqn))
+ end proc, coeff_list);
+ `codegen/C/function/informed`['RATIONAL'] := true;
+ `codegen/C/function/informed`['DATA'] := true;
+ ftruncate(file_name);
+ cmpt_list := [codegen[optimize](coeff_list2, tryhard)];
+ temp_name_list :=
+ nonmatching_names(map(lhs, cmpt_list), coeff_name_prefix);
+ if 0 < nops(temp_name_list) then
+ print_name_list_dcl(%, temp_name_type, file_name)
+ end if;
+ codegen[C](cmpt_list, filename = file_name);
+ fclose(file_name);
+ NULL
+end proc
+
+>
+################################################################################
+>
+#
+# This function prints a sequence of C expression to assign the data-value
+# variables, eg
+# data_m1_p1 = DATA(-1,1);
+#
+# Arguments:
+# posn_list = The same list of positions as was used to compute the
+# interpolating polynomial.
+# data_var_name_prefix = A prefix string for the data variable names.
+# file_name = The file name to write the coefficients to. This is
+# truncated before writing.
+#
+> print_data_var_assign :=
+> proc(
+> posn_list::list(list(numeric)),
+> data_var_name_prefix::string,
+> file_name::string
+> )
+>
+> ftruncate(file_name);
+> map(
+> proc(posn::list(numeric))
+> fprintf(file_name,
+> "%s = %a;\n",
+> data_var_name(posn,data_var_name_prefix),
+> DATA(op(posn)));
+> end proc
+> ,
+> posn_list
+> );
+> fclose(file_name);
+>
+> NULL;
+> end proc;
+print_data_var_assign := proc(posn_list::list(list(numeric)),
+data_var_name_prefix::string, file_name::string)
+ ftruncate(file_name);
+ map(proc(posn::list(numeric))
+ fprintf(file_name, "%s = %a;\n",
+ data_var_name(posn, data_var_name_prefix), DATA(op(posn)))
+ end proc, posn_list);
+ fclose(file_name);
+ NULL
+end proc
+
+>
+################################################################################
+>
+#
+# This function prints a sequence of C expression to store the interpolation
+# coefficients in COEFF(...) expressions, eg
+# COEFF(1,-1) = factor * coeff_dx_p1_m1;
+#
+# Arguments:
+# posn_list = The same list of positions as was used to compute the
+# interpolating polynomial.
+# RHS_factor_name = If this string is non-empty, then the coefficient is
+# multiplied by this factor before being stored, eg
+# setting this to "factor" would give the example above.
+# If this string is empty (""), the multiplication is
+# omitted, eg
+# COEFF(1,-1) = coeff_dx_p1_m1;
+# coeff_name_prefix = A prefix string for the coefficient names.
+# file_name = The file name to write the coefficients to. This is
+# truncated before writing.
+#
+> print_interp_coeff_var_store :=
+> proc(
+> posn_list::list(list(numeric)),
+> RHS_factor_name::string,
+> coeff_name_prefix::string,
+> file_name::string
+> )
+>
+> ftruncate(file_name);
+> map(
+> proc(posn::list(numeric))
+> if (length(RHS_factor_name) > 0)
+> then fprintf(file_name,
+> "%a = %s * %s;\n",
+> 'COEFF'(op(posn)),
+> RHS_factor_name,
+> coeff_name(posn,coeff_name_prefix));
+> else fprintf(file_name,
+> "%a = %s;\n",
+> 'COEFF'(op(posn)),
+> coeff_name(posn,coeff_name_prefix));
+> end if;
+> end proc
+> ,
+> posn_list
+> );
+> fclose(file_name);
+>
+> NULL;
+> end proc;
+print_interp_coeff_var_store := proc(posn_list::list(list(numeric)),
+RHS_factor_name::string, coeff_name_prefix::string, file_name::string)
+ ftruncate(file_name);
+ map(proc(posn::list(numeric))
+ if 0 < length(RHS_factor_name) then fprintf(file_name,
+ "%a = %s * %s;\n", 'COEFF'(op(posn)), RHS_factor_name,
+ coeff_name(posn, coeff_name_prefix))
+ else fprintf(file_name, "%a = %s;\n", 'COEFF'(op(posn)),
+ coeff_name(posn, coeff_name_prefix))
+ end if
+ end proc, posn_list);
+ fclose(file_name);
+ NULL
+end proc
+
+>
+################################################################################
+>
+#
+# This function prints a C expression to compute the interpolant,
+# using the coefficients computed by print_coeff__lc_of_data()
+# (i.e. expressing the interpolant as a linear combination of the
+# data values).
+#
+# Arguments:
+# posn_list = The same list of positions as was used to compute the
+# interpolating polynomial.
+# result_var_name = The (string) name of the variable to which the
+# result is to be assigned.
+# coeff_name_prefix = A prefix string for the coefficient names.
+# data_var_name_prefix = A prefix string for the data variable names.
+# file_name = The file name to write the coefficients to. This is
+# truncated before writing.
+#
+> print_interp_cmpt__lc_of_data :=
+> proc(
+> posn_list::list(list(numeric)),
+> result_var_name::string,
+> coeff_name_prefix::string,
+> data_var_name_prefix::string,
+> file_name::string
+> )
+>
+> ftruncate(file_name);
+>
+> fprintf(file_name, "%s =\n", result_var_name);
+>
+# list of "coeff*data_var" terms
+> map(
+> proc(posn::list(numeric))
+> sprintf("%s*%s",
+> coeff_name(posn,coeff_name_prefix),
+> data_var_name(posn,data_var_name_prefix));
+> end proc
+> ,
+> posn_list
+> );
+>
+> ListTools[Join](%, "\n\t+ ");
+> cat(op(%));
+> fprintf(file_name, "\t%s;\n", %);
+>
+> fclose(file_name);
+>
+> NULL;
+> end proc;
+print_interp_cmpt__lc_of_data := proc(posn_list::list(list(numeric)),
+result_var_name::string, coeff_name_prefix::string,
+data_var_name_prefix::string, file_name::string)
+ ftruncate(file_name);
+ fprintf(file_name, "%s =\n", result_var_name);
+ map(proc(posn::list(numeric))
+ sprintf("%s*%s", coeff_name(posn, coeff_name_prefix),
+ data_var_name(posn, data_var_name_prefix))
+ end proc, posn_list);
+ ListTools[Join](%, "\n\t+ ");
+ cat(op(%));
+ fprintf(file_name, "\t%s;\n", %);
+ fclose(file_name);
+ NULL
+end proc
+
+>
+################################################################################
+################################################################################
+################################################################################
+>
+#
+# This function computes the name of the coefficient of the data at a
+# given [m] position, i.e. it encapsulates our naming convention for this.
+#
+# Arguments:
+# posn = (in) The [m] coordinates.
+# name_prefix = A prefix string for the coefficient name.
+#
+# Results:
+# The function returns the coefficient, as a Maple string.
+#
+> coeff_name :=
+> proc(posn::list(numeric), name_prefix::string)
+> cat(name_prefix, sprint_numeric_list(posn));
+> end proc;
+coeff_name := proc(posn::list(numeric), name_prefix::string)
+ cat(name_prefix, sprint_numeric_list(posn))
+end proc
+
+>
+################################################################################
+>
+#
+# This function computes the name of the variable in which the C code
+# will store the input data at a given [m] position, i.e. it encapsulates
+# our naming convention for this.
+#
+# Arguments:
+# posn = (in) The [m] coordinates.
+# name_prefix = A prefix string for the variable name.
+#
+# Results:
+# The function returns the variable name, as a Maple string.
+#
+> data_var_name :=
+> proc(posn::list(numeric), name_prefix::string)
+> cat(name_prefix, sprint_numeric_list(posn));
+> end proc;
+data_var_name := proc(posn::list(numeric), name_prefix::string)
+ cat(name_prefix, sprint_numeric_list(posn))
+end proc
+
+# Maple code to compute lists of point positions in hypercube-shaped molecules
+# $Id: $
+>
+################################################################################
+>
+#
+# 1D interpolation points
+#
+> posn_list_1d_size2 := hypercube_points([ 0], [+1]);
+ posn_list_1d_size2 := [[0], [1]]
+
+> posn_list_1d_size3 := hypercube_points([-1], [+1]);
+ posn_list_1d_size3 := [[-1], [0], [1]]
+
+> posn_list_1d_size4 := hypercube_points([-1], [+2]);
+ posn_list_1d_size4 := [[-1], [0], [1], [2]]
+
+> posn_list_1d_size5 := hypercube_points([-2], [+2]);
+ posn_list_1d_size5 := [[-2], [-1], [0], [1], [2]]
+
+> posn_list_1d_size6 := hypercube_points([-2], [+3]);
+ posn_list_1d_size6 := [[-2], [-1], [0], [1], [2], [3]]
+
+> posn_list_1d_size7 := hypercube_points([-3], [+3]);
+ posn_list_1d_size7 := [[-3], [-2], [-1], [0], [1], [2], [3]]
+
+>
+################################################################################
+>
+#
+# 2D interpolation points (Fortran ordering)
+#
+> posn_list_2d_size2 := map(ListTools[Reverse],
+> hypercube_points([ 0, 0], [+1,+1]));
+ posn_list_2d_size2 := [[0, 0], [1, 0], [0, 1], [1, 1]]
+
+> posn_list_2d_size3 := map(ListTools[Reverse],
+> hypercube_points([-1,-1], [+1,+1]));
+posn_list_2d_size3 := [[-1, -1], [0, -1], [1, -1], [-1, 0], [0, 0], [1, 0],
+
+ [-1, 1], [0, 1], [1, 1]]
+
+> posn_list_2d_size4 := map(ListTools[Reverse],
+> hypercube_points([-1,-1], [+2,+2]));
+posn_list_2d_size4 := [[-1, -1], [0, -1], [1, -1], [2, -1], [-1, 0], [0, 0],
+
+ [1, 0], [2, 0], [-1, 1], [0, 1], [1, 1], [2, 1], [-1, 2], [0, 2], [1, 2],
+
+ [2, 2]]
+
+> posn_list_2d_size5 := map(ListTools[Reverse],
+> hypercube_points([-2,-2], [+2,+2]));
+posn_list_2d_size5 := [[-2, -2], [-1, -2], [0, -2], [1, -2], [2, -2], [-2, -1],
+
+ [-1, -1], [0, -1], [1, -1], [2, -1], [-2, 0], [-1, 0], [0, 0], [1, 0],
+
+ [2, 0], [-2, 1], [-1, 1], [0, 1], [1, 1], [2, 1], [-2, 2], [-1, 2], [0, 2],
+
+ [1, 2], [2, 2]]
+
+>
+################################################################################
+>
+#
+# 3D interpolation points (Fortran ordering)
+#
+> posn_list_3d_size2 := map(ListTools[Reverse],
+> hypercube_points([ 0, 0, 0], [+1,+1,+1]));
+posn_list_3d_size2 := [[0, 0, 0], [1, 0, 0], [0, 1, 0], [1, 1, 0], [0, 0, 1],
+
+ [1, 0, 1], [0, 1, 1], [1, 1, 1]]
+
+> posn_list_3d_size3 := map(ListTools[Reverse],
+> hypercube_points([-1,-1,-1], [+1,+1,+1]));
+posn_list_3d_size3 := [[-1, -1, -1], [0, -1, -1], [1, -1, -1], [-1, 0, -1],
+
+ [0, 0, -1], [1, 0, -1], [-1, 1, -1], [0, 1, -1], [1, 1, -1], [-1, -1, 0],
+
+ [0, -1, 0], [1, -1, 0], [-1, 0, 0], [0, 0, 0], [1, 0, 0], [-1, 1, 0],
+
+ [0, 1, 0], [1, 1, 0], [-1, -1, 1], [0, -1, 1], [1, -1, 1], [-1, 0, 1],
+
+ [0, 0, 1], [1, 0, 1], [-1, 1, 1], [0, 1, 1], [1, 1, 1]]
+
+> posn_list_3d_size4 := map(ListTools[Reverse],
+> hypercube_points([-1,-1,-1], [+2,+2,+2]));
+posn_list_3d_size4 := [[-1, -1, -1], [0, -1, -1], [1, -1, -1], [2, -1, -1],
+
+ [-1, 0, -1], [0, 0, -1], [1, 0, -1], [2, 0, -1], [-1, 1, -1], [0, 1, -1],
+
+ [1, 1, -1], [2, 1, -1], [-1, 2, -1], [0, 2, -1], [1, 2, -1], [2, 2, -1],
+
+ [-1, -1, 0], [0, -1, 0], [1, -1, 0], [2, -1, 0], [-1, 0, 0], [0, 0, 0],
+
+ [1, 0, 0], [2, 0, 0], [-1, 1, 0], [0, 1, 0], [1, 1, 0], [2, 1, 0],
+
+ [-1, 2, 0], [0, 2, 0], [1, 2, 0], [2, 2, 0], [-1, -1, 1], [0, -1, 1],
+
+ [1, -1, 1], [2, -1, 1], [-1, 0, 1], [0, 0, 1], [1, 0, 1], [2, 0, 1],
+
+ [-1, 1, 1], [0, 1, 1], [1, 1, 1], [2, 1, 1], [-1, 2, 1], [0, 2, 1],
+
+ [1, 2, 1], [2, 2, 1], [-1, -1, 2], [0, -1, 2], [1, -1, 2], [2, -1, 2],
+
+ [-1, 0, 2], [0, 0, 2], [1, 0, 2], [2, 0, 2], [-1, 1, 2], [0, 1, 2],
+
+ [1, 1, 2], [2, 1, 2], [-1, 2, 2], [0, 2, 2], [1, 2, 2], [2, 2, 2]]
+
+> posn_list_3d_size5 := map(ListTools[Reverse],
+> hypercube_points([-2,-2,-2], [+2,+2,+2]));
+posn_list_3d_size5 := [[-2, -2, -2], [-1, -2, -2], [0, -2, -2], [1, -2, -2],
+
+ [2, -2, -2], [-2, -1, -2], [-1, -1, -2], [0, -1, -2], [1, -1, -2],
+
+ [2, -1, -2], [-2, 0, -2], [-1, 0, -2], [0, 0, -2], [1, 0, -2], [2, 0, -2],
+
+ [-2, 1, -2], [-1, 1, -2], [0, 1, -2], [1, 1, -2], [2, 1, -2], [-2, 2, -2],
+
+ [-1, 2, -2], [0, 2, -2], [1, 2, -2], [2, 2, -2], [-2, -2, -1], [-1, -2, -1],
+
+ [0, -2, -1], [1, -2, -1], [2, -2, -1], [-2, -1, -1], [-1, -1, -1],
+
+ [0, -1, -1], [1, -1, -1], [2, -1, -1], [-2, 0, -1], [-1, 0, -1], [0, 0, -1],
+
+ [1, 0, -1], [2, 0, -1], [-2, 1, -1], [-1, 1, -1], [0, 1, -1], [1, 1, -1],
+
+ [2, 1, -1], [-2, 2, -1], [-1, 2, -1], [0, 2, -1], [1, 2, -1], [2, 2, -1],
+
+ [-2, -2, 0], [-1, -2, 0], [0, -2, 0], [1, -2, 0], [2, -2, 0], [-2, -1, 0],
+
+ [-1, -1, 0], [0, -1, 0], [1, -1, 0], [2, -1, 0], [-2, 0, 0], [-1, 0, 0],
+
+ [0, 0, 0], [1, 0, 0], [2, 0, 0], [-2, 1, 0], [-1, 1, 0], [0, 1, 0],
+
+ [1, 1, 0], [2, 1, 0], [-2, 2, 0], [-1, 2, 0], [0, 2, 0], [1, 2, 0],
+
+ [2, 2, 0], [-2, -2, 1], [-1, -2, 1], [0, -2, 1], [1, -2, 1], [2, -2, 1],
+
+ [-2, -1, 1], [-1, -1, 1], [0, -1, 1], [1, -1, 1], [2, -1, 1], [-2, 0, 1],
+
+ [-1, 0, 1], [0, 0, 1], [1, 0, 1], [2, 0, 1], [-2, 1, 1], [-1, 1, 1],
+
+ [0, 1, 1], [1, 1, 1], [2, 1, 1], [-2, 2, 1], [-1, 2, 1], [0, 2, 1],
+
+ [1, 2, 1], [2, 2, 1], [-2, -2, 2], [-1, -2, 2], [0, -2, 2], [1, -2, 2],
+
+ [2, -2, 2], [-2, -1, 2], [-1, -1, 2], [0, -1, 2], [1, -1, 2], [2, -1, 2],
+
+ [-2, 0, 2], [-1, 0, 2], [0, 0, 2], [1, 0, 2], [2, 0, 2], [-2, 1, 2],
+
+ [-1, 1, 2], [0, 1, 2], [1, 1, 2], [2, 1, 2], [-2, 2, 2], [-1, 2, 2],
+
+ [0, 2, 2], [1, 2, 2], [2, 2, 2]]
+
+# Maple code to compute common coefficients for all 1d interpolation schemes
+# $Id: 1d.maple,v 1.4 2002/05/14 15:54:01 jthorn Exp $
+>
+################################################################################
+>
+#
+# generic stuff for 1d, cube, size=2
+#
+>
+> data_var_list_1d_size2 := map(data_var_name, posn_list_1d_size2, "data_");
+ data_var_list_1d_size2 := ["data_0", "data_p1"]
+
+>
+> print_name_list_dcl(data_var_list_1d_size2, "fp",
+> "1d.cube.size2/data-var.dcl.c");
+> print_data_var_assign(posn_list_1d_size2, "data_",
+> "1d.cube.size2/data-var.assign.c");
+>
+> print_interp_coeff_var_store(posn_list_1d_size2, "", "coeff_I_",
+> "1d.cube.size2/coeff-I.store.c");
+> print_interp_coeff_var_store(posn_list_1d_size2, "factor", "coeff_dx_",
+> "1d.cube.size2/coeff-dx.store.c");
+>
+> print_name_list_dcl(map(coeff_name, posn_list_1d_size2, "coeff_I_"), "fp",
+> "1d.cube.size2/coeff-I.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_1d_size2, "coeff_dx_"), "fp",
+> "1d.cube.size2/coeff-dx.dcl.c");
+>
+> print_interp_cmpt__lc_of_data(posn_list_1d_size2,
+> "result", "coeff_I_", "data_",
+> "1d.cube.size2/interp-I.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_1d_size2,
+> "result", "coeff_dx_", "data_",
+> "1d.cube.size2/interp-dx.compute.c");
+>
+################################################################################
+>
+#
+# generic stuff for 1d, cube, size=3
+#
+>
+> data_var_list_1d_size3 := map(data_var_name, posn_list_1d_size3, "data_");
+ data_var_list_1d_size3 := ["data_m1", "data_0", "data_p1"]
+
+>
+> print_name_list_dcl(data_var_list_1d_size3, "fp",
+> "1d.cube.size3/data-var.dcl.c");
+> print_data_var_assign(posn_list_1d_size3, "data_",
+> "1d.cube.size3/data-var.assign.c");
+>
+> print_interp_coeff_var_store(posn_list_1d_size3, "", "coeff_I_",
+> "1d.cube.size3/coeff-I.store.c");
+> print_interp_coeff_var_store(posn_list_1d_size3, "factor", "coeff_dx_",
+> "1d.cube.size3/coeff-dx.store.c");
+> print_interp_coeff_var_store(posn_list_1d_size3, "factor", "coeff_dxx_",
+> "1d.cube.size3/coeff-dxx.store.c");
+>
+> print_name_list_dcl(map(coeff_name, posn_list_1d_size3, "coeff_I_"), "fp",
+> "1d.cube.size3/coeff-I.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_1d_size3, "coeff_dx_"), "fp",
+> "1d.cube.size3/coeff-dx.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_1d_size3, "coeff_dxx_"), "fp",
+> "1d.cube.size3/coeff-dxx.dcl.c");
+>
+> print_interp_cmpt__lc_of_data(posn_list_1d_size3,
+> "result", "coeff_I_", "data_",
+> "1d.cube.size3/interp-I.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_1d_size3,
+> "result", "coeff_dx_", "data_",
+> "1d.cube.size3/interp-dx.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_1d_size3,
+> "result", "coeff_dxx_", "data_",
+> "1d.cube.size3/interp-dxx.compute.c");
+>
+################################################################################
+>
+#
+# generic stuff for 1d, cube, size=4
+#
+>
+> data_var_list_1d_size4 := map(data_var_name, posn_list_1d_size4, "data_");
+ data_var_list_1d_size4 := ["data_m1", "data_0", "data_p1", "data_p2"]
+
+>
+> print_name_list_dcl(data_var_list_1d_size4, "fp",
+> "1d.cube.size4/data-var.dcl.c");
+> print_data_var_assign(posn_list_1d_size4, "data_",
+> "1d.cube.size4/data-var.assign.c");
+>
+> print_interp_coeff_var_store(posn_list_1d_size4, "", "coeff_I_",
+> "1d.cube.size4/coeff-I.store.c");
+> print_interp_coeff_var_store(posn_list_1d_size4, "factor", "coeff_dx_",
+> "1d.cube.size4/coeff-dx.store.c");
+> print_interp_coeff_var_store(posn_list_1d_size4, "factor", "coeff_dxx_",
+> "1d.cube.size4/coeff-dxx.store.c");
+>
+> print_name_list_dcl(map(coeff_name, posn_list_1d_size4, "coeff_I_"), "fp",
+> "1d.cube.size4/coeff-I.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_1d_size4, "coeff_dx_"), "fp",
+> "1d.cube.size4/coeff-dx.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_1d_size4, "coeff_dxx_"), "fp",
+> "1d.cube.size4/coeff-dxx.dcl.c");
+>
+> print_interp_cmpt__lc_of_data(posn_list_1d_size4,
+> "result", "coeff_I_", "data_",
+> "1d.cube.size4/interp-I.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_1d_size4,
+> "result", "coeff_dx_", "data_",
+> "1d.cube.size4/interp-dx.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_1d_size4,
+> "result", "coeff_dxx_", "data_",
+> "1d.cube.size4/interp-dxx.compute.c");
+>
+################################################################################
+>
+#
+# generic stuff for 1d, cube, size=5
+#
+>
+> data_var_list_1d_size5 := map(data_var_name, posn_list_1d_size5, "data_");
+data_var_list_1d_size5 :=
+
+ ["data_m2", "data_m1", "data_0", "data_p1", "data_p2"]
+
+>
+> print_name_list_dcl(data_var_list_1d_size5, "fp",
+> "1d.cube.size5/data-var.dcl.c");
+> print_data_var_assign(posn_list_1d_size5, "data_",
+> "1d.cube.size5/data-var.assign.c");
+>
+> print_interp_coeff_var_store(posn_list_1d_size5, "", "coeff_I_",
+> "1d.cube.size5/coeff-I.store.c");
+> print_interp_coeff_var_store(posn_list_1d_size5, "factor", "coeff_dx_",
+> "1d.cube.size5/coeff-dx.store.c");
+> print_interp_coeff_var_store(posn_list_1d_size5, "factor", "coeff_dxx_",
+> "1d.cube.size5/coeff-dxx.store.c");
+>
+> print_name_list_dcl(map(coeff_name, posn_list_1d_size5, "coeff_I_"), "fp",
+> "1d.cube.size5/coeff-I.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_1d_size5, "coeff_dx_"), "fp",
+> "1d.cube.size5/coeff-dx.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_1d_size5, "coeff_dxx_"), "fp",
+> "1d.cube.size5/coeff-dxx.dcl.c");
+>
+> print_interp_cmpt__lc_of_data(posn_list_1d_size5,
+> "result", "coeff_I_", "data_",
+> "1d.cube.size5/interp-I.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_1d_size5,
+> "result", "coeff_dx_", "data_",
+> "1d.cube.size5/interp-dx.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_1d_size5,
+> "result", "coeff_dxx_", "data_",
+> "1d.cube.size5/interp-dxx.compute.c");
+>
+################################################################################
+>
+#
+# generic stuff for 1d, cube, size=6
+#
+>
+> data_var_list_1d_size6 := map(data_var_name, posn_list_1d_size6, "data_");
+data_var_list_1d_size6 :=
+
+ ["data_m2", "data_m1", "data_0", "data_p1", "data_p2", "data_p3"]
+
+>
+> print_name_list_dcl(data_var_list_1d_size6, "fp",
+> "1d.cube.size6/data-var.dcl.c");
+> print_data_var_assign(posn_list_1d_size6, "data_",
+> "1d.cube.size6/data-var.assign.c");
+>
+> print_interp_coeff_var_store(posn_list_1d_size6, "", "coeff_I_",
+> "1d.cube.size6/coeff-I.store.c");
+> print_interp_coeff_var_store(posn_list_1d_size6, "factor", "coeff_dx_",
+> "1d.cube.size6/coeff-dx.store.c");
+> print_interp_coeff_var_store(posn_list_1d_size6, "factor", "coeff_dxx_",
+> "1d.cube.size6/coeff-dxx.store.c");
+>
+> print_name_list_dcl(map(coeff_name, posn_list_1d_size6, "coeff_I_"), "fp",
+> "1d.cube.size6/coeff-I.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_1d_size6, "coeff_dx_"), "fp",
+> "1d.cube.size6/coeff-dx.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_1d_size6, "coeff_dxx_"), "fp",
+> "1d.cube.size6/coeff-dxx.dcl.c");
+>
+> print_interp_cmpt__lc_of_data(posn_list_1d_size6,
+> "result", "coeff_I_", "data_",
+> "1d.cube.size6/interp-I.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_1d_size6,
+> "result", "coeff_dx_", "data_",
+> "1d.cube.size6/interp-dx.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_1d_size6,
+> "result", "coeff_dxx_", "data_",
+> "1d.cube.size6/interp-dxx.compute.c");
+>
+################################################################################
+>
+#
+# generic stuff for 1d, cube, size=7
+#
+>
+> data_var_list_1d_size7 := map(data_var_name, posn_list_1d_size7, "data_");
+data_var_list_1d_size7 := [
+
+ "data_m3", "data_m2", "data_m1", "data_0", "data_p1", "data_p2", "data_p3"]
+
+>
+> print_name_list_dcl(data_var_list_1d_size7, "fp",
+> "1d.cube.size7/data-var.dcl.c");
+> print_data_var_assign(posn_list_1d_size7, "data_",
+> "1d.cube.size7/data-var.assign.c");
+>
+> print_interp_coeff_var_store(posn_list_1d_size7, "", "coeff_I_",
+> "1d.cube.size7/coeff-I.store.c");
+> print_interp_coeff_var_store(posn_list_1d_size7, "factor", "coeff_dx_",
+> "1d.cube.size7/coeff-dx.store.c");
+> print_interp_coeff_var_store(posn_list_1d_size7, "factor", "coeff_dxx_",
+> "1d.cube.size7/coeff-dxx.store.c");
+>
+> print_name_list_dcl(map(coeff_name, posn_list_1d_size7, "coeff_I_"), "fp",
+> "1d.cube.size7/coeff-I.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_1d_size7, "coeff_dx_"), "fp",
+> "1d.cube.size7/coeff-dx.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_1d_size7, "coeff_dxx_"), "fp",
+> "1d.cube.size7/coeff-dxx.dcl.c");
+>
+> print_interp_cmpt__lc_of_data(posn_list_1d_size7,
+> "result", "coeff_I_", "data_",
+> "1d.cube.size7/interp-I.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_1d_size7,
+> "result", "coeff_dx_", "data_",
+> "1d.cube.size7/interp-dx.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_1d_size7,
+> "result", "coeff_dxx_", "data_",
+> "1d.cube.size7/interp-dxx.compute.c");
+>
+################################################################################
+> quit
+bytes used=716820, alloc=655240, time=0.16
diff --git a/src/GeneralizedPolynomial-Uniform/common/1d.maple b/src/GeneralizedPolynomial-Uniform/common/1d.maple
new file mode 100644
index 0000000..c51ed6c
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/1d.maple
@@ -0,0 +1,219 @@
+# Maple code to compute common coefficients for all 1d interpolation schemes
+# $Id$
+
+################################################################################
+
+#
+# generic stuff for 1d, cube, size=2
+#
+
+data_var_list_1d_size2 := map(data_var_name, posn_list_1d_size2, "data_");
+
+print_name_list_dcl(data_var_list_1d_size2, "fp",
+ "1d.cube.size2/data-var.dcl.c");
+print_data_var_assign(posn_list_1d_size2, "data_",
+ "1d.cube.size2/data-var.assign.c");
+
+print_interp_coeff_var_store(posn_list_1d_size2, "", "coeff_I_",
+ "1d.cube.size2/coeff-I.store.c");
+print_interp_coeff_var_store(posn_list_1d_size2, "factor", "coeff_dx_",
+ "1d.cube.size2/coeff-dx.store.c");
+
+print_name_list_dcl(map(coeff_name, posn_list_1d_size2, "coeff_I_"), "fp",
+ "1d.cube.size2/coeff-I.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_1d_size2, "coeff_dx_"), "fp",
+ "1d.cube.size2/coeff-dx.dcl.c");
+
+print_interp_cmpt__lc_of_data(posn_list_1d_size2,
+ "result", "coeff_I_", "data_",
+ "1d.cube.size2/interp-I.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_1d_size2,
+ "result", "coeff_dx_", "data_",
+ "1d.cube.size2/interp-dx.compute.c");
+
+################################################################################
+
+#
+# generic stuff for 1d, cube, size=3
+#
+
+data_var_list_1d_size3 := map(data_var_name, posn_list_1d_size3, "data_");
+
+print_name_list_dcl(data_var_list_1d_size3, "fp",
+ "1d.cube.size3/data-var.dcl.c");
+print_data_var_assign(posn_list_1d_size3, "data_",
+ "1d.cube.size3/data-var.assign.c");
+
+print_interp_coeff_var_store(posn_list_1d_size3, "", "coeff_I_",
+ "1d.cube.size3/coeff-I.store.c");
+print_interp_coeff_var_store(posn_list_1d_size3, "factor", "coeff_dx_",
+ "1d.cube.size3/coeff-dx.store.c");
+print_interp_coeff_var_store(posn_list_1d_size3, "factor", "coeff_dxx_",
+ "1d.cube.size3/coeff-dxx.store.c");
+
+print_name_list_dcl(map(coeff_name, posn_list_1d_size3, "coeff_I_"), "fp",
+ "1d.cube.size3/coeff-I.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_1d_size3, "coeff_dx_"), "fp",
+ "1d.cube.size3/coeff-dx.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_1d_size3, "coeff_dxx_"), "fp",
+ "1d.cube.size3/coeff-dxx.dcl.c");
+
+print_interp_cmpt__lc_of_data(posn_list_1d_size3,
+ "result", "coeff_I_", "data_",
+ "1d.cube.size3/interp-I.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_1d_size3,
+ "result", "coeff_dx_", "data_",
+ "1d.cube.size3/interp-dx.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_1d_size3,
+ "result", "coeff_dxx_", "data_",
+ "1d.cube.size3/interp-dxx.compute.c");
+
+################################################################################
+
+#
+# generic stuff for 1d, cube, size=4
+#
+
+data_var_list_1d_size4 := map(data_var_name, posn_list_1d_size4, "data_");
+
+print_name_list_dcl(data_var_list_1d_size4, "fp",
+ "1d.cube.size4/data-var.dcl.c");
+print_data_var_assign(posn_list_1d_size4, "data_",
+ "1d.cube.size4/data-var.assign.c");
+
+print_interp_coeff_var_store(posn_list_1d_size4, "", "coeff_I_",
+ "1d.cube.size4/coeff-I.store.c");
+print_interp_coeff_var_store(posn_list_1d_size4, "factor", "coeff_dx_",
+ "1d.cube.size4/coeff-dx.store.c");
+print_interp_coeff_var_store(posn_list_1d_size4, "factor", "coeff_dxx_",
+ "1d.cube.size4/coeff-dxx.store.c");
+
+print_name_list_dcl(map(coeff_name, posn_list_1d_size4, "coeff_I_"), "fp",
+ "1d.cube.size4/coeff-I.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_1d_size4, "coeff_dx_"), "fp",
+ "1d.cube.size4/coeff-dx.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_1d_size4, "coeff_dxx_"), "fp",
+ "1d.cube.size4/coeff-dxx.dcl.c");
+
+print_interp_cmpt__lc_of_data(posn_list_1d_size4,
+ "result", "coeff_I_", "data_",
+ "1d.cube.size4/interp-I.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_1d_size4,
+ "result", "coeff_dx_", "data_",
+ "1d.cube.size4/interp-dx.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_1d_size4,
+ "result", "coeff_dxx_", "data_",
+ "1d.cube.size4/interp-dxx.compute.c");
+
+################################################################################
+
+#
+# generic stuff for 1d, cube, size=5
+#
+
+data_var_list_1d_size5 := map(data_var_name, posn_list_1d_size5, "data_");
+
+print_name_list_dcl(data_var_list_1d_size5, "fp",
+ "1d.cube.size5/data-var.dcl.c");
+print_data_var_assign(posn_list_1d_size5, "data_",
+ "1d.cube.size5/data-var.assign.c");
+
+print_interp_coeff_var_store(posn_list_1d_size5, "", "coeff_I_",
+ "1d.cube.size5/coeff-I.store.c");
+print_interp_coeff_var_store(posn_list_1d_size5, "factor", "coeff_dx_",
+ "1d.cube.size5/coeff-dx.store.c");
+print_interp_coeff_var_store(posn_list_1d_size5, "factor", "coeff_dxx_",
+ "1d.cube.size5/coeff-dxx.store.c");
+
+print_name_list_dcl(map(coeff_name, posn_list_1d_size5, "coeff_I_"), "fp",
+ "1d.cube.size5/coeff-I.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_1d_size5, "coeff_dx_"), "fp",
+ "1d.cube.size5/coeff-dx.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_1d_size5, "coeff_dxx_"), "fp",
+ "1d.cube.size5/coeff-dxx.dcl.c");
+
+print_interp_cmpt__lc_of_data(posn_list_1d_size5,
+ "result", "coeff_I_", "data_",
+ "1d.cube.size5/interp-I.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_1d_size5,
+ "result", "coeff_dx_", "data_",
+ "1d.cube.size5/interp-dx.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_1d_size5,
+ "result", "coeff_dxx_", "data_",
+ "1d.cube.size5/interp-dxx.compute.c");
+
+################################################################################
+
+#
+# generic stuff for 1d, cube, size=6
+#
+
+data_var_list_1d_size6 := map(data_var_name, posn_list_1d_size6, "data_");
+
+print_name_list_dcl(data_var_list_1d_size6, "fp",
+ "1d.cube.size6/data-var.dcl.c");
+print_data_var_assign(posn_list_1d_size6, "data_",
+ "1d.cube.size6/data-var.assign.c");
+
+print_interp_coeff_var_store(posn_list_1d_size6, "", "coeff_I_",
+ "1d.cube.size6/coeff-I.store.c");
+print_interp_coeff_var_store(posn_list_1d_size6, "factor", "coeff_dx_",
+ "1d.cube.size6/coeff-dx.store.c");
+print_interp_coeff_var_store(posn_list_1d_size6, "factor", "coeff_dxx_",
+ "1d.cube.size6/coeff-dxx.store.c");
+
+print_name_list_dcl(map(coeff_name, posn_list_1d_size6, "coeff_I_"), "fp",
+ "1d.cube.size6/coeff-I.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_1d_size6, "coeff_dx_"), "fp",
+ "1d.cube.size6/coeff-dx.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_1d_size6, "coeff_dxx_"), "fp",
+ "1d.cube.size6/coeff-dxx.dcl.c");
+
+print_interp_cmpt__lc_of_data(posn_list_1d_size6,
+ "result", "coeff_I_", "data_",
+ "1d.cube.size6/interp-I.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_1d_size6,
+ "result", "coeff_dx_", "data_",
+ "1d.cube.size6/interp-dx.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_1d_size6,
+ "result", "coeff_dxx_", "data_",
+ "1d.cube.size6/interp-dxx.compute.c");
+
+################################################################################
+
+#
+# generic stuff for 1d, cube, size=7
+#
+
+data_var_list_1d_size7 := map(data_var_name, posn_list_1d_size7, "data_");
+
+print_name_list_dcl(data_var_list_1d_size7, "fp",
+ "1d.cube.size7/data-var.dcl.c");
+print_data_var_assign(posn_list_1d_size7, "data_",
+ "1d.cube.size7/data-var.assign.c");
+
+print_interp_coeff_var_store(posn_list_1d_size7, "", "coeff_I_",
+ "1d.cube.size7/coeff-I.store.c");
+print_interp_coeff_var_store(posn_list_1d_size7, "factor", "coeff_dx_",
+ "1d.cube.size7/coeff-dx.store.c");
+print_interp_coeff_var_store(posn_list_1d_size7, "factor", "coeff_dxx_",
+ "1d.cube.size7/coeff-dxx.store.c");
+
+print_name_list_dcl(map(coeff_name, posn_list_1d_size7, "coeff_I_"), "fp",
+ "1d.cube.size7/coeff-I.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_1d_size7, "coeff_dx_"), "fp",
+ "1d.cube.size7/coeff-dx.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_1d_size7, "coeff_dxx_"), "fp",
+ "1d.cube.size7/coeff-dxx.dcl.c");
+
+print_interp_cmpt__lc_of_data(posn_list_1d_size7,
+ "result", "coeff_I_", "data_",
+ "1d.cube.size7/interp-I.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_1d_size7,
+ "result", "coeff_dx_", "data_",
+ "1d.cube.size7/interp-dx.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_1d_size7,
+ "result", "coeff_dxx_", "data_",
+ "1d.cube.size7/interp-dxx.compute.c");
+
+################################################################################
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-I.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-I.dcl.c
new file mode 100644
index 0000000..af64cc9
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-I.dcl.c
@@ -0,0 +1,4 @@
+fp coeff_I_0_0,
+ coeff_I_p1_0,
+ coeff_I_0_p1,
+ coeff_I_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-I.store.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-I.store.c
new file mode 100644
index 0000000..6305377
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-I.store.c
@@ -0,0 +1,4 @@
+COEFF(0,0) = coeff_I_0_0;
+COEFF(1,0) = coeff_I_p1_0;
+COEFF(0,1) = coeff_I_0_p1;
+COEFF(1,1) = coeff_I_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-dx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-dx.dcl.c
new file mode 100644
index 0000000..7d73499
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-dx.dcl.c
@@ -0,0 +1,4 @@
+fp coeff_dx_0_0,
+ coeff_dx_p1_0,
+ coeff_dx_0_p1,
+ coeff_dx_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-dx.store.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-dx.store.c
new file mode 100644
index 0000000..21a0636
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-dx.store.c
@@ -0,0 +1,4 @@
+COEFF(0,0) = factor * coeff_dx_0_0;
+COEFF(1,0) = factor * coeff_dx_p1_0;
+COEFF(0,1) = factor * coeff_dx_0_p1;
+COEFF(1,1) = factor * coeff_dx_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-dy.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-dy.dcl.c
new file mode 100644
index 0000000..6f95065
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-dy.dcl.c
@@ -0,0 +1,4 @@
+fp coeff_dy_0_0,
+ coeff_dy_p1_0,
+ coeff_dy_0_p1,
+ coeff_dy_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-dy.store.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-dy.store.c
new file mode 100644
index 0000000..4362e3d
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/coeff-dy.store.c
@@ -0,0 +1,4 @@
+COEFF(0,0) = factor * coeff_dy_0_0;
+COEFF(1,0) = factor * coeff_dy_p1_0;
+COEFF(0,1) = factor * coeff_dy_0_p1;
+COEFF(1,1) = factor * coeff_dy_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/data-var.assign.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/data-var.assign.c
new file mode 100644
index 0000000..9aceea0
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/data-var.assign.c
@@ -0,0 +1,4 @@
+data_0_0 = DATA(0,0);
+data_p1_0 = DATA(1,0);
+data_0_p1 = DATA(0,1);
+data_p1_p1 = DATA(1,1);
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/data-var.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/data-var.dcl.c
new file mode 100644
index 0000000..b2090e4
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/data-var.dcl.c
@@ -0,0 +1,4 @@
+fp data_0_0,
+ data_p1_0,
+ data_0_p1,
+ data_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/interp-I.compute.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/interp-I.compute.c
new file mode 100644
index 0000000..9253b6c
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/interp-I.compute.c
@@ -0,0 +1,5 @@
+result =
+ coeff_I_0_0*data_0_0
+ + coeff_I_p1_0*data_p1_0
+ + coeff_I_0_p1*data_0_p1
+ + coeff_I_p1_p1*data_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/interp-dx.compute.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/interp-dx.compute.c
new file mode 100644
index 0000000..c29ba6d
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/interp-dx.compute.c
@@ -0,0 +1,5 @@
+result =
+ coeff_dx_0_0*data_0_0
+ + coeff_dx_p1_0*data_p1_0
+ + coeff_dx_0_p1*data_0_p1
+ + coeff_dx_p1_p1*data_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/interp-dy.compute.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/interp-dy.compute.c
new file mode 100644
index 0000000..ca30ad0
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size2/interp-dy.compute.c
@@ -0,0 +1,5 @@
+result =
+ coeff_dy_0_0*data_0_0
+ + coeff_dy_p1_0*data_p1_0
+ + coeff_dy_0_p1*data_0_p1
+ + coeff_dy_p1_p1*data_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-I.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-I.dcl.c
new file mode 100644
index 0000000..3f4b0cb
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-I.dcl.c
@@ -0,0 +1,9 @@
+fp coeff_I_m1_m1,
+ coeff_I_0_m1,
+ coeff_I_p1_m1,
+ coeff_I_m1_0,
+ coeff_I_0_0,
+ coeff_I_p1_0,
+ coeff_I_m1_p1,
+ coeff_I_0_p1,
+ coeff_I_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-I.store.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-I.store.c
new file mode 100644
index 0000000..5169a37
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-I.store.c
@@ -0,0 +1,9 @@
+COEFF(-1,-1) = coeff_I_m1_m1;
+COEFF(0,-1) = coeff_I_0_m1;
+COEFF(1,-1) = coeff_I_p1_m1;
+COEFF(-1,0) = coeff_I_m1_0;
+COEFF(0,0) = coeff_I_0_0;
+COEFF(1,0) = coeff_I_p1_0;
+COEFF(-1,1) = coeff_I_m1_p1;
+COEFF(0,1) = coeff_I_0_p1;
+COEFF(1,1) = coeff_I_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dx.dcl.c
new file mode 100644
index 0000000..3efed8a
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dx.dcl.c
@@ -0,0 +1,9 @@
+fp coeff_dx_m1_m1,
+ coeff_dx_0_m1,
+ coeff_dx_p1_m1,
+ coeff_dx_m1_0,
+ coeff_dx_0_0,
+ coeff_dx_p1_0,
+ coeff_dx_m1_p1,
+ coeff_dx_0_p1,
+ coeff_dx_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dx.store.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dx.store.c
new file mode 100644
index 0000000..bad0cff
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dx.store.c
@@ -0,0 +1,9 @@
+COEFF(-1,-1) = factor * coeff_dx_m1_m1;
+COEFF(0,-1) = factor * coeff_dx_0_m1;
+COEFF(1,-1) = factor * coeff_dx_p1_m1;
+COEFF(-1,0) = factor * coeff_dx_m1_0;
+COEFF(0,0) = factor * coeff_dx_0_0;
+COEFF(1,0) = factor * coeff_dx_p1_0;
+COEFF(-1,1) = factor * coeff_dx_m1_p1;
+COEFF(0,1) = factor * coeff_dx_0_p1;
+COEFF(1,1) = factor * coeff_dx_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dxx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dxx.dcl.c
new file mode 100644
index 0000000..2c62a96
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dxx.dcl.c
@@ -0,0 +1,9 @@
+fp coeff_dxx_m1_m1,
+ coeff_dxx_0_m1,
+ coeff_dxx_p1_m1,
+ coeff_dxx_m1_0,
+ coeff_dxx_0_0,
+ coeff_dxx_p1_0,
+ coeff_dxx_m1_p1,
+ coeff_dxx_0_p1,
+ coeff_dxx_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dxx.store.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dxx.store.c
new file mode 100644
index 0000000..d8dcd56
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dxx.store.c
@@ -0,0 +1,9 @@
+COEFF(-1,-1) = factor * coeff_dxx_m1_m1;
+COEFF(0,-1) = factor * coeff_dxx_0_m1;
+COEFF(1,-1) = factor * coeff_dxx_p1_m1;
+COEFF(-1,0) = factor * coeff_dxx_m1_0;
+COEFF(0,0) = factor * coeff_dxx_0_0;
+COEFF(1,0) = factor * coeff_dxx_p1_0;
+COEFF(-1,1) = factor * coeff_dxx_m1_p1;
+COEFF(0,1) = factor * coeff_dxx_0_p1;
+COEFF(1,1) = factor * coeff_dxx_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dxy.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dxy.dcl.c
new file mode 100644
index 0000000..0b6a45b
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dxy.dcl.c
@@ -0,0 +1,9 @@
+fp coeff_dxy_m1_m1,
+ coeff_dxy_0_m1,
+ coeff_dxy_p1_m1,
+ coeff_dxy_m1_0,
+ coeff_dxy_0_0,
+ coeff_dxy_p1_0,
+ coeff_dxy_m1_p1,
+ coeff_dxy_0_p1,
+ coeff_dxy_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dxy.store.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dxy.store.c
new file mode 100644
index 0000000..72febae
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dxy.store.c
@@ -0,0 +1,9 @@
+COEFF(-1,-1) = factor * coeff_dxy_m1_m1;
+COEFF(0,-1) = factor * coeff_dxy_0_m1;
+COEFF(1,-1) = factor * coeff_dxy_p1_m1;
+COEFF(-1,0) = factor * coeff_dxy_m1_0;
+COEFF(0,0) = factor * coeff_dxy_0_0;
+COEFF(1,0) = factor * coeff_dxy_p1_0;
+COEFF(-1,1) = factor * coeff_dxy_m1_p1;
+COEFF(0,1) = factor * coeff_dxy_0_p1;
+COEFF(1,1) = factor * coeff_dxy_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dy.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dy.dcl.c
new file mode 100644
index 0000000..1aebea8
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dy.dcl.c
@@ -0,0 +1,9 @@
+fp coeff_dy_m1_m1,
+ coeff_dy_0_m1,
+ coeff_dy_p1_m1,
+ coeff_dy_m1_0,
+ coeff_dy_0_0,
+ coeff_dy_p1_0,
+ coeff_dy_m1_p1,
+ coeff_dy_0_p1,
+ coeff_dy_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dy.store.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dy.store.c
new file mode 100644
index 0000000..a24c8dd
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dy.store.c
@@ -0,0 +1,9 @@
+COEFF(-1,-1) = factor * coeff_dy_m1_m1;
+COEFF(0,-1) = factor * coeff_dy_0_m1;
+COEFF(1,-1) = factor * coeff_dy_p1_m1;
+COEFF(-1,0) = factor * coeff_dy_m1_0;
+COEFF(0,0) = factor * coeff_dy_0_0;
+COEFF(1,0) = factor * coeff_dy_p1_0;
+COEFF(-1,1) = factor * coeff_dy_m1_p1;
+COEFF(0,1) = factor * coeff_dy_0_p1;
+COEFF(1,1) = factor * coeff_dy_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dyy.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dyy.dcl.c
new file mode 100644
index 0000000..52b76c9
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dyy.dcl.c
@@ -0,0 +1,9 @@
+fp coeff_dyy_m1_m1,
+ coeff_dyy_0_m1,
+ coeff_dyy_p1_m1,
+ coeff_dyy_m1_0,
+ coeff_dyy_0_0,
+ coeff_dyy_p1_0,
+ coeff_dyy_m1_p1,
+ coeff_dyy_0_p1,
+ coeff_dyy_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dyy.store.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dyy.store.c
new file mode 100644
index 0000000..51d8886
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/coeff-dyy.store.c
@@ -0,0 +1,9 @@
+COEFF(-1,-1) = factor * coeff_dyy_m1_m1;
+COEFF(0,-1) = factor * coeff_dyy_0_m1;
+COEFF(1,-1) = factor * coeff_dyy_p1_m1;
+COEFF(-1,0) = factor * coeff_dyy_m1_0;
+COEFF(0,0) = factor * coeff_dyy_0_0;
+COEFF(1,0) = factor * coeff_dyy_p1_0;
+COEFF(-1,1) = factor * coeff_dyy_m1_p1;
+COEFF(0,1) = factor * coeff_dyy_0_p1;
+COEFF(1,1) = factor * coeff_dyy_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/data-var.assign.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/data-var.assign.c
new file mode 100644
index 0000000..bb68189
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/data-var.assign.c
@@ -0,0 +1,9 @@
+data_m1_m1 = DATA(-1,-1);
+data_0_m1 = DATA(0,-1);
+data_p1_m1 = DATA(1,-1);
+data_m1_0 = DATA(-1,0);
+data_0_0 = DATA(0,0);
+data_p1_0 = DATA(1,0);
+data_m1_p1 = DATA(-1,1);
+data_0_p1 = DATA(0,1);
+data_p1_p1 = DATA(1,1);
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/data-var.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/data-var.dcl.c
new file mode 100644
index 0000000..77a064e
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/data-var.dcl.c
@@ -0,0 +1,9 @@
+fp data_m1_m1,
+ data_0_m1,
+ data_p1_m1,
+ data_m1_0,
+ data_0_0,
+ data_p1_0,
+ data_m1_p1,
+ data_0_p1,
+ data_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-I.compute.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-I.compute.c
new file mode 100644
index 0000000..b9249fa
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-I.compute.c
@@ -0,0 +1,10 @@
+result =
+ coeff_I_m1_m1*data_m1_m1
+ + coeff_I_0_m1*data_0_m1
+ + coeff_I_p1_m1*data_p1_m1
+ + coeff_I_m1_0*data_m1_0
+ + coeff_I_0_0*data_0_0
+ + coeff_I_p1_0*data_p1_0
+ + coeff_I_m1_p1*data_m1_p1
+ + coeff_I_0_p1*data_0_p1
+ + coeff_I_p1_p1*data_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-dx.compute.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-dx.compute.c
new file mode 100644
index 0000000..f7d5f3a
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-dx.compute.c
@@ -0,0 +1,10 @@
+result =
+ coeff_dx_m1_m1*data_m1_m1
+ + coeff_dx_0_m1*data_0_m1
+ + coeff_dx_p1_m1*data_p1_m1
+ + coeff_dx_m1_0*data_m1_0
+ + coeff_dx_0_0*data_0_0
+ + coeff_dx_p1_0*data_p1_0
+ + coeff_dx_m1_p1*data_m1_p1
+ + coeff_dx_0_p1*data_0_p1
+ + coeff_dx_p1_p1*data_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-dxx.compute.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-dxx.compute.c
new file mode 100644
index 0000000..9764dbc
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-dxx.compute.c
@@ -0,0 +1,10 @@
+result =
+ coeff_dxx_m1_m1*data_m1_m1
+ + coeff_dxx_0_m1*data_0_m1
+ + coeff_dxx_p1_m1*data_p1_m1
+ + coeff_dxx_m1_0*data_m1_0
+ + coeff_dxx_0_0*data_0_0
+ + coeff_dxx_p1_0*data_p1_0
+ + coeff_dxx_m1_p1*data_m1_p1
+ + coeff_dxx_0_p1*data_0_p1
+ + coeff_dxx_p1_p1*data_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-dxy.compute.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-dxy.compute.c
new file mode 100644
index 0000000..5c9faa7
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-dxy.compute.c
@@ -0,0 +1,10 @@
+result =
+ coeff_dxy_m1_m1*data_m1_m1
+ + coeff_dxy_0_m1*data_0_m1
+ + coeff_dxy_p1_m1*data_p1_m1
+ + coeff_dxy_m1_0*data_m1_0
+ + coeff_dxy_0_0*data_0_0
+ + coeff_dxy_p1_0*data_p1_0
+ + coeff_dxy_m1_p1*data_m1_p1
+ + coeff_dxy_0_p1*data_0_p1
+ + coeff_dxy_p1_p1*data_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-dy.compute.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-dy.compute.c
new file mode 100644
index 0000000..d4eb9ca
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-dy.compute.c
@@ -0,0 +1,10 @@
+result =
+ coeff_dy_m1_m1*data_m1_m1
+ + coeff_dy_0_m1*data_0_m1
+ + coeff_dy_p1_m1*data_p1_m1
+ + coeff_dy_m1_0*data_m1_0
+ + coeff_dy_0_0*data_0_0
+ + coeff_dy_p1_0*data_p1_0
+ + coeff_dy_m1_p1*data_m1_p1
+ + coeff_dy_0_p1*data_0_p1
+ + coeff_dy_p1_p1*data_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-dyy.compute.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-dyy.compute.c
new file mode 100644
index 0000000..6ee2445
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size3/interp-dyy.compute.c
@@ -0,0 +1,10 @@
+result =
+ coeff_dyy_m1_m1*data_m1_m1
+ + coeff_dyy_0_m1*data_0_m1
+ + coeff_dyy_p1_m1*data_p1_m1
+ + coeff_dyy_m1_0*data_m1_0
+ + coeff_dyy_0_0*data_0_0
+ + coeff_dyy_p1_0*data_p1_0
+ + coeff_dyy_m1_p1*data_m1_p1
+ + coeff_dyy_0_p1*data_0_p1
+ + coeff_dyy_p1_p1*data_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-I.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-I.dcl.c
new file mode 100644
index 0000000..d35d81b
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-I.dcl.c
@@ -0,0 +1,16 @@
+fp coeff_I_m1_m1,
+ coeff_I_0_m1,
+ coeff_I_p1_m1,
+ coeff_I_p2_m1,
+ coeff_I_m1_0,
+ coeff_I_0_0,
+ coeff_I_p1_0,
+ coeff_I_p2_0,
+ coeff_I_m1_p1,
+ coeff_I_0_p1,
+ coeff_I_p1_p1,
+ coeff_I_p2_p1,
+ coeff_I_m1_p2,
+ coeff_I_0_p2,
+ coeff_I_p1_p2,
+ coeff_I_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-I.store.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-I.store.c
new file mode 100644
index 0000000..729b8ea
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-I.store.c
@@ -0,0 +1,16 @@
+COEFF(-1,-1) = coeff_I_m1_m1;
+COEFF(0,-1) = coeff_I_0_m1;
+COEFF(1,-1) = coeff_I_p1_m1;
+COEFF(2,-1) = coeff_I_p2_m1;
+COEFF(-1,0) = coeff_I_m1_0;
+COEFF(0,0) = coeff_I_0_0;
+COEFF(1,0) = coeff_I_p1_0;
+COEFF(2,0) = coeff_I_p2_0;
+COEFF(-1,1) = coeff_I_m1_p1;
+COEFF(0,1) = coeff_I_0_p1;
+COEFF(1,1) = coeff_I_p1_p1;
+COEFF(2,1) = coeff_I_p2_p1;
+COEFF(-1,2) = coeff_I_m1_p2;
+COEFF(0,2) = coeff_I_0_p2;
+COEFF(1,2) = coeff_I_p1_p2;
+COEFF(2,2) = coeff_I_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dx.dcl.c
new file mode 100644
index 0000000..edfc9bb
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dx.dcl.c
@@ -0,0 +1,16 @@
+fp coeff_dx_m1_m1,
+ coeff_dx_0_m1,
+ coeff_dx_p1_m1,
+ coeff_dx_p2_m1,
+ coeff_dx_m1_0,
+ coeff_dx_0_0,
+ coeff_dx_p1_0,
+ coeff_dx_p2_0,
+ coeff_dx_m1_p1,
+ coeff_dx_0_p1,
+ coeff_dx_p1_p1,
+ coeff_dx_p2_p1,
+ coeff_dx_m1_p2,
+ coeff_dx_0_p2,
+ coeff_dx_p1_p2,
+ coeff_dx_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dx.store.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dx.store.c
new file mode 100644
index 0000000..c1bdc39
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dx.store.c
@@ -0,0 +1,16 @@
+COEFF(-1,-1) = factor * coeff_dx_m1_m1;
+COEFF(0,-1) = factor * coeff_dx_0_m1;
+COEFF(1,-1) = factor * coeff_dx_p1_m1;
+COEFF(2,-1) = factor * coeff_dx_p2_m1;
+COEFF(-1,0) = factor * coeff_dx_m1_0;
+COEFF(0,0) = factor * coeff_dx_0_0;
+COEFF(1,0) = factor * coeff_dx_p1_0;
+COEFF(2,0) = factor * coeff_dx_p2_0;
+COEFF(-1,1) = factor * coeff_dx_m1_p1;
+COEFF(0,1) = factor * coeff_dx_0_p1;
+COEFF(1,1) = factor * coeff_dx_p1_p1;
+COEFF(2,1) = factor * coeff_dx_p2_p1;
+COEFF(-1,2) = factor * coeff_dx_m1_p2;
+COEFF(0,2) = factor * coeff_dx_0_p2;
+COEFF(1,2) = factor * coeff_dx_p1_p2;
+COEFF(2,2) = factor * coeff_dx_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dxx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dxx.dcl.c
new file mode 100644
index 0000000..b5add16
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dxx.dcl.c
@@ -0,0 +1,16 @@
+fp coeff_dxx_m1_m1,
+ coeff_dxx_0_m1,
+ coeff_dxx_p1_m1,
+ coeff_dxx_p2_m1,
+ coeff_dxx_m1_0,
+ coeff_dxx_0_0,
+ coeff_dxx_p1_0,
+ coeff_dxx_p2_0,
+ coeff_dxx_m1_p1,
+ coeff_dxx_0_p1,
+ coeff_dxx_p1_p1,
+ coeff_dxx_p2_p1,
+ coeff_dxx_m1_p2,
+ coeff_dxx_0_p2,
+ coeff_dxx_p1_p2,
+ coeff_dxx_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dxx.store.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dxx.store.c
new file mode 100644
index 0000000..e65fc6f
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dxx.store.c
@@ -0,0 +1,16 @@
+COEFF(-1,-1) = factor * coeff_dxx_m1_m1;
+COEFF(0,-1) = factor * coeff_dxx_0_m1;
+COEFF(1,-1) = factor * coeff_dxx_p1_m1;
+COEFF(2,-1) = factor * coeff_dxx_p2_m1;
+COEFF(-1,0) = factor * coeff_dxx_m1_0;
+COEFF(0,0) = factor * coeff_dxx_0_0;
+COEFF(1,0) = factor * coeff_dxx_p1_0;
+COEFF(2,0) = factor * coeff_dxx_p2_0;
+COEFF(-1,1) = factor * coeff_dxx_m1_p1;
+COEFF(0,1) = factor * coeff_dxx_0_p1;
+COEFF(1,1) = factor * coeff_dxx_p1_p1;
+COEFF(2,1) = factor * coeff_dxx_p2_p1;
+COEFF(-1,2) = factor * coeff_dxx_m1_p2;
+COEFF(0,2) = factor * coeff_dxx_0_p2;
+COEFF(1,2) = factor * coeff_dxx_p1_p2;
+COEFF(2,2) = factor * coeff_dxx_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dxy.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dxy.dcl.c
new file mode 100644
index 0000000..853b503
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dxy.dcl.c
@@ -0,0 +1,16 @@
+fp coeff_dxy_m1_m1,
+ coeff_dxy_0_m1,
+ coeff_dxy_p1_m1,
+ coeff_dxy_p2_m1,
+ coeff_dxy_m1_0,
+ coeff_dxy_0_0,
+ coeff_dxy_p1_0,
+ coeff_dxy_p2_0,
+ coeff_dxy_m1_p1,
+ coeff_dxy_0_p1,
+ coeff_dxy_p1_p1,
+ coeff_dxy_p2_p1,
+ coeff_dxy_m1_p2,
+ coeff_dxy_0_p2,
+ coeff_dxy_p1_p2,
+ coeff_dxy_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dxy.store.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dxy.store.c
new file mode 100644
index 0000000..442cfe8
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dxy.store.c
@@ -0,0 +1,16 @@
+COEFF(-1,-1) = factor * coeff_dxy_m1_m1;
+COEFF(0,-1) = factor * coeff_dxy_0_m1;
+COEFF(1,-1) = factor * coeff_dxy_p1_m1;
+COEFF(2,-1) = factor * coeff_dxy_p2_m1;
+COEFF(-1,0) = factor * coeff_dxy_m1_0;
+COEFF(0,0) = factor * coeff_dxy_0_0;
+COEFF(1,0) = factor * coeff_dxy_p1_0;
+COEFF(2,0) = factor * coeff_dxy_p2_0;
+COEFF(-1,1) = factor * coeff_dxy_m1_p1;
+COEFF(0,1) = factor * coeff_dxy_0_p1;
+COEFF(1,1) = factor * coeff_dxy_p1_p1;
+COEFF(2,1) = factor * coeff_dxy_p2_p1;
+COEFF(-1,2) = factor * coeff_dxy_m1_p2;
+COEFF(0,2) = factor * coeff_dxy_0_p2;
+COEFF(1,2) = factor * coeff_dxy_p1_p2;
+COEFF(2,2) = factor * coeff_dxy_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dy.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dy.dcl.c
new file mode 100644
index 0000000..e27b5ff
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dy.dcl.c
@@ -0,0 +1,16 @@
+fp coeff_dy_m1_m1,
+ coeff_dy_0_m1,
+ coeff_dy_p1_m1,
+ coeff_dy_p2_m1,
+ coeff_dy_m1_0,
+ coeff_dy_0_0,
+ coeff_dy_p1_0,
+ coeff_dy_p2_0,
+ coeff_dy_m1_p1,
+ coeff_dy_0_p1,
+ coeff_dy_p1_p1,
+ coeff_dy_p2_p1,
+ coeff_dy_m1_p2,
+ coeff_dy_0_p2,
+ coeff_dy_p1_p2,
+ coeff_dy_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dy.store.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dy.store.c
new file mode 100644
index 0000000..fa3aefd
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dy.store.c
@@ -0,0 +1,16 @@
+COEFF(-1,-1) = factor * coeff_dy_m1_m1;
+COEFF(0,-1) = factor * coeff_dy_0_m1;
+COEFF(1,-1) = factor * coeff_dy_p1_m1;
+COEFF(2,-1) = factor * coeff_dy_p2_m1;
+COEFF(-1,0) = factor * coeff_dy_m1_0;
+COEFF(0,0) = factor * coeff_dy_0_0;
+COEFF(1,0) = factor * coeff_dy_p1_0;
+COEFF(2,0) = factor * coeff_dy_p2_0;
+COEFF(-1,1) = factor * coeff_dy_m1_p1;
+COEFF(0,1) = factor * coeff_dy_0_p1;
+COEFF(1,1) = factor * coeff_dy_p1_p1;
+COEFF(2,1) = factor * coeff_dy_p2_p1;
+COEFF(-1,2) = factor * coeff_dy_m1_p2;
+COEFF(0,2) = factor * coeff_dy_0_p2;
+COEFF(1,2) = factor * coeff_dy_p1_p2;
+COEFF(2,2) = factor * coeff_dy_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dyy.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dyy.dcl.c
new file mode 100644
index 0000000..ee37cfe
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dyy.dcl.c
@@ -0,0 +1,16 @@
+fp coeff_dyy_m1_m1,
+ coeff_dyy_0_m1,
+ coeff_dyy_p1_m1,
+ coeff_dyy_p2_m1,
+ coeff_dyy_m1_0,
+ coeff_dyy_0_0,
+ coeff_dyy_p1_0,
+ coeff_dyy_p2_0,
+ coeff_dyy_m1_p1,
+ coeff_dyy_0_p1,
+ coeff_dyy_p1_p1,
+ coeff_dyy_p2_p1,
+ coeff_dyy_m1_p2,
+ coeff_dyy_0_p2,
+ coeff_dyy_p1_p2,
+ coeff_dyy_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dyy.store.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dyy.store.c
new file mode 100644
index 0000000..3f29fbf
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/coeff-dyy.store.c
@@ -0,0 +1,16 @@
+COEFF(-1,-1) = factor * coeff_dyy_m1_m1;
+COEFF(0,-1) = factor * coeff_dyy_0_m1;
+COEFF(1,-1) = factor * coeff_dyy_p1_m1;
+COEFF(2,-1) = factor * coeff_dyy_p2_m1;
+COEFF(-1,0) = factor * coeff_dyy_m1_0;
+COEFF(0,0) = factor * coeff_dyy_0_0;
+COEFF(1,0) = factor * coeff_dyy_p1_0;
+COEFF(2,0) = factor * coeff_dyy_p2_0;
+COEFF(-1,1) = factor * coeff_dyy_m1_p1;
+COEFF(0,1) = factor * coeff_dyy_0_p1;
+COEFF(1,1) = factor * coeff_dyy_p1_p1;
+COEFF(2,1) = factor * coeff_dyy_p2_p1;
+COEFF(-1,2) = factor * coeff_dyy_m1_p2;
+COEFF(0,2) = factor * coeff_dyy_0_p2;
+COEFF(1,2) = factor * coeff_dyy_p1_p2;
+COEFF(2,2) = factor * coeff_dyy_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/data-var.assign.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/data-var.assign.c
new file mode 100644
index 0000000..d0316f1
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/data-var.assign.c
@@ -0,0 +1,16 @@
+data_m1_m1 = DATA(-1,-1);
+data_0_m1 = DATA(0,-1);
+data_p1_m1 = DATA(1,-1);
+data_p2_m1 = DATA(2,-1);
+data_m1_0 = DATA(-1,0);
+data_0_0 = DATA(0,0);
+data_p1_0 = DATA(1,0);
+data_p2_0 = DATA(2,0);
+data_m1_p1 = DATA(-1,1);
+data_0_p1 = DATA(0,1);
+data_p1_p1 = DATA(1,1);
+data_p2_p1 = DATA(2,1);
+data_m1_p2 = DATA(-1,2);
+data_0_p2 = DATA(0,2);
+data_p1_p2 = DATA(1,2);
+data_p2_p2 = DATA(2,2);
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/data-var.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/data-var.dcl.c
new file mode 100644
index 0000000..abbfb5d
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/data-var.dcl.c
@@ -0,0 +1,16 @@
+fp data_m1_m1,
+ data_0_m1,
+ data_p1_m1,
+ data_p2_m1,
+ data_m1_0,
+ data_0_0,
+ data_p1_0,
+ data_p2_0,
+ data_m1_p1,
+ data_0_p1,
+ data_p1_p1,
+ data_p2_p1,
+ data_m1_p2,
+ data_0_p2,
+ data_p1_p2,
+ data_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-I.compute.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-I.compute.c
new file mode 100644
index 0000000..cf13e49
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-I.compute.c
@@ -0,0 +1,17 @@
+result =
+ coeff_I_m1_m1*data_m1_m1
+ + coeff_I_0_m1*data_0_m1
+ + coeff_I_p1_m1*data_p1_m1
+ + coeff_I_p2_m1*data_p2_m1
+ + coeff_I_m1_0*data_m1_0
+ + coeff_I_0_0*data_0_0
+ + coeff_I_p1_0*data_p1_0
+ + coeff_I_p2_0*data_p2_0
+ + coeff_I_m1_p1*data_m1_p1
+ + coeff_I_0_p1*data_0_p1
+ + coeff_I_p1_p1*data_p1_p1
+ + coeff_I_p2_p1*data_p2_p1
+ + coeff_I_m1_p2*data_m1_p2
+ + coeff_I_0_p2*data_0_p2
+ + coeff_I_p1_p2*data_p1_p2
+ + coeff_I_p2_p2*data_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-dx.compute.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-dx.compute.c
new file mode 100644
index 0000000..69f9f56
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-dx.compute.c
@@ -0,0 +1,17 @@
+result =
+ coeff_dx_m1_m1*data_m1_m1
+ + coeff_dx_0_m1*data_0_m1
+ + coeff_dx_p1_m1*data_p1_m1
+ + coeff_dx_p2_m1*data_p2_m1
+ + coeff_dx_m1_0*data_m1_0
+ + coeff_dx_0_0*data_0_0
+ + coeff_dx_p1_0*data_p1_0
+ + coeff_dx_p2_0*data_p2_0
+ + coeff_dx_m1_p1*data_m1_p1
+ + coeff_dx_0_p1*data_0_p1
+ + coeff_dx_p1_p1*data_p1_p1
+ + coeff_dx_p2_p1*data_p2_p1
+ + coeff_dx_m1_p2*data_m1_p2
+ + coeff_dx_0_p2*data_0_p2
+ + coeff_dx_p1_p2*data_p1_p2
+ + coeff_dx_p2_p2*data_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-dxx.compute.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-dxx.compute.c
new file mode 100644
index 0000000..9ce20a1
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-dxx.compute.c
@@ -0,0 +1,17 @@
+result =
+ coeff_dxx_m1_m1*data_m1_m1
+ + coeff_dxx_0_m1*data_0_m1
+ + coeff_dxx_p1_m1*data_p1_m1
+ + coeff_dxx_p2_m1*data_p2_m1
+ + coeff_dxx_m1_0*data_m1_0
+ + coeff_dxx_0_0*data_0_0
+ + coeff_dxx_p1_0*data_p1_0
+ + coeff_dxx_p2_0*data_p2_0
+ + coeff_dxx_m1_p1*data_m1_p1
+ + coeff_dxx_0_p1*data_0_p1
+ + coeff_dxx_p1_p1*data_p1_p1
+ + coeff_dxx_p2_p1*data_p2_p1
+ + coeff_dxx_m1_p2*data_m1_p2
+ + coeff_dxx_0_p2*data_0_p2
+ + coeff_dxx_p1_p2*data_p1_p2
+ + coeff_dxx_p2_p2*data_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-dxy.compute.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-dxy.compute.c
new file mode 100644
index 0000000..5130c7b
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-dxy.compute.c
@@ -0,0 +1,17 @@
+result =
+ coeff_dxy_m1_m1*data_m1_m1
+ + coeff_dxy_0_m1*data_0_m1
+ + coeff_dxy_p1_m1*data_p1_m1
+ + coeff_dxy_p2_m1*data_p2_m1
+ + coeff_dxy_m1_0*data_m1_0
+ + coeff_dxy_0_0*data_0_0
+ + coeff_dxy_p1_0*data_p1_0
+ + coeff_dxy_p2_0*data_p2_0
+ + coeff_dxy_m1_p1*data_m1_p1
+ + coeff_dxy_0_p1*data_0_p1
+ + coeff_dxy_p1_p1*data_p1_p1
+ + coeff_dxy_p2_p1*data_p2_p1
+ + coeff_dxy_m1_p2*data_m1_p2
+ + coeff_dxy_0_p2*data_0_p2
+ + coeff_dxy_p1_p2*data_p1_p2
+ + coeff_dxy_p2_p2*data_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-dy.compute.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-dy.compute.c
new file mode 100644
index 0000000..f671033
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-dy.compute.c
@@ -0,0 +1,17 @@
+result =
+ coeff_dy_m1_m1*data_m1_m1
+ + coeff_dy_0_m1*data_0_m1
+ + coeff_dy_p1_m1*data_p1_m1
+ + coeff_dy_p2_m1*data_p2_m1
+ + coeff_dy_m1_0*data_m1_0
+ + coeff_dy_0_0*data_0_0
+ + coeff_dy_p1_0*data_p1_0
+ + coeff_dy_p2_0*data_p2_0
+ + coeff_dy_m1_p1*data_m1_p1
+ + coeff_dy_0_p1*data_0_p1
+ + coeff_dy_p1_p1*data_p1_p1
+ + coeff_dy_p2_p1*data_p2_p1
+ + coeff_dy_m1_p2*data_m1_p2
+ + coeff_dy_0_p2*data_0_p2
+ + coeff_dy_p1_p2*data_p1_p2
+ + coeff_dy_p2_p2*data_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-dyy.compute.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-dyy.compute.c
new file mode 100644
index 0000000..112e958
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size4/interp-dyy.compute.c
@@ -0,0 +1,17 @@
+result =
+ coeff_dyy_m1_m1*data_m1_m1
+ + coeff_dyy_0_m1*data_0_m1
+ + coeff_dyy_p1_m1*data_p1_m1
+ + coeff_dyy_p2_m1*data_p2_m1
+ + coeff_dyy_m1_0*data_m1_0
+ + coeff_dyy_0_0*data_0_0
+ + coeff_dyy_p1_0*data_p1_0
+ + coeff_dyy_p2_0*data_p2_0
+ + coeff_dyy_m1_p1*data_m1_p1
+ + coeff_dyy_0_p1*data_0_p1
+ + coeff_dyy_p1_p1*data_p1_p1
+ + coeff_dyy_p2_p1*data_p2_p1
+ + coeff_dyy_m1_p2*data_m1_p2
+ + coeff_dyy_0_p2*data_0_p2
+ + coeff_dyy_p1_p2*data_p1_p2
+ + coeff_dyy_p2_p2*data_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-I.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-I.dcl.c
new file mode 100644
index 0000000..64d7a53
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-I.dcl.c
@@ -0,0 +1,25 @@
+fp coeff_I_m2_m2,
+ coeff_I_m1_m2,
+ coeff_I_0_m2,
+ coeff_I_p1_m2,
+ coeff_I_p2_m2,
+ coeff_I_m2_m1,
+ coeff_I_m1_m1,
+ coeff_I_0_m1,
+ coeff_I_p1_m1,
+ coeff_I_p2_m1,
+ coeff_I_m2_0,
+ coeff_I_m1_0,
+ coeff_I_0_0,
+ coeff_I_p1_0,
+ coeff_I_p2_0,
+ coeff_I_m2_p1,
+ coeff_I_m1_p1,
+ coeff_I_0_p1,
+ coeff_I_p1_p1,
+ coeff_I_p2_p1,
+ coeff_I_m2_p2,
+ coeff_I_m1_p2,
+ coeff_I_0_p2,
+ coeff_I_p1_p2,
+ coeff_I_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-I.store.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-I.store.c
new file mode 100644
index 0000000..e57f3f8
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-I.store.c
@@ -0,0 +1,25 @@
+COEFF(-2,-2) = coeff_I_m2_m2;
+COEFF(-1,-2) = coeff_I_m1_m2;
+COEFF(0,-2) = coeff_I_0_m2;
+COEFF(1,-2) = coeff_I_p1_m2;
+COEFF(2,-2) = coeff_I_p2_m2;
+COEFF(-2,-1) = coeff_I_m2_m1;
+COEFF(-1,-1) = coeff_I_m1_m1;
+COEFF(0,-1) = coeff_I_0_m1;
+COEFF(1,-1) = coeff_I_p1_m1;
+COEFF(2,-1) = coeff_I_p2_m1;
+COEFF(-2,0) = coeff_I_m2_0;
+COEFF(-1,0) = coeff_I_m1_0;
+COEFF(0,0) = coeff_I_0_0;
+COEFF(1,0) = coeff_I_p1_0;
+COEFF(2,0) = coeff_I_p2_0;
+COEFF(-2,1) = coeff_I_m2_p1;
+COEFF(-1,1) = coeff_I_m1_p1;
+COEFF(0,1) = coeff_I_0_p1;
+COEFF(1,1) = coeff_I_p1_p1;
+COEFF(2,1) = coeff_I_p2_p1;
+COEFF(-2,2) = coeff_I_m2_p2;
+COEFF(-1,2) = coeff_I_m1_p2;
+COEFF(0,2) = coeff_I_0_p2;
+COEFF(1,2) = coeff_I_p1_p2;
+COEFF(2,2) = coeff_I_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dx.dcl.c
new file mode 100644
index 0000000..965e5ab
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dx.dcl.c
@@ -0,0 +1,25 @@
+fp coeff_dx_m2_m2,
+ coeff_dx_m1_m2,
+ coeff_dx_0_m2,
+ coeff_dx_p1_m2,
+ coeff_dx_p2_m2,
+ coeff_dx_m2_m1,
+ coeff_dx_m1_m1,
+ coeff_dx_0_m1,
+ coeff_dx_p1_m1,
+ coeff_dx_p2_m1,
+ coeff_dx_m2_0,
+ coeff_dx_m1_0,
+ coeff_dx_0_0,
+ coeff_dx_p1_0,
+ coeff_dx_p2_0,
+ coeff_dx_m2_p1,
+ coeff_dx_m1_p1,
+ coeff_dx_0_p1,
+ coeff_dx_p1_p1,
+ coeff_dx_p2_p1,
+ coeff_dx_m2_p2,
+ coeff_dx_m1_p2,
+ coeff_dx_0_p2,
+ coeff_dx_p1_p2,
+ coeff_dx_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dx.store.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dx.store.c
new file mode 100644
index 0000000..7477d7a
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dx.store.c
@@ -0,0 +1,25 @@
+COEFF(-2,-2) = factor * coeff_dx_m2_m2;
+COEFF(-1,-2) = factor * coeff_dx_m1_m2;
+COEFF(0,-2) = factor * coeff_dx_0_m2;
+COEFF(1,-2) = factor * coeff_dx_p1_m2;
+COEFF(2,-2) = factor * coeff_dx_p2_m2;
+COEFF(-2,-1) = factor * coeff_dx_m2_m1;
+COEFF(-1,-1) = factor * coeff_dx_m1_m1;
+COEFF(0,-1) = factor * coeff_dx_0_m1;
+COEFF(1,-1) = factor * coeff_dx_p1_m1;
+COEFF(2,-1) = factor * coeff_dx_p2_m1;
+COEFF(-2,0) = factor * coeff_dx_m2_0;
+COEFF(-1,0) = factor * coeff_dx_m1_0;
+COEFF(0,0) = factor * coeff_dx_0_0;
+COEFF(1,0) = factor * coeff_dx_p1_0;
+COEFF(2,0) = factor * coeff_dx_p2_0;
+COEFF(-2,1) = factor * coeff_dx_m2_p1;
+COEFF(-1,1) = factor * coeff_dx_m1_p1;
+COEFF(0,1) = factor * coeff_dx_0_p1;
+COEFF(1,1) = factor * coeff_dx_p1_p1;
+COEFF(2,1) = factor * coeff_dx_p2_p1;
+COEFF(-2,2) = factor * coeff_dx_m2_p2;
+COEFF(-1,2) = factor * coeff_dx_m1_p2;
+COEFF(0,2) = factor * coeff_dx_0_p2;
+COEFF(1,2) = factor * coeff_dx_p1_p2;
+COEFF(2,2) = factor * coeff_dx_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dxx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dxx.dcl.c
new file mode 100644
index 0000000..9aa0041
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dxx.dcl.c
@@ -0,0 +1,25 @@
+fp coeff_dxx_m2_m2,
+ coeff_dxx_m1_m2,
+ coeff_dxx_0_m2,
+ coeff_dxx_p1_m2,
+ coeff_dxx_p2_m2,
+ coeff_dxx_m2_m1,
+ coeff_dxx_m1_m1,
+ coeff_dxx_0_m1,
+ coeff_dxx_p1_m1,
+ coeff_dxx_p2_m1,
+ coeff_dxx_m2_0,
+ coeff_dxx_m1_0,
+ coeff_dxx_0_0,
+ coeff_dxx_p1_0,
+ coeff_dxx_p2_0,
+ coeff_dxx_m2_p1,
+ coeff_dxx_m1_p1,
+ coeff_dxx_0_p1,
+ coeff_dxx_p1_p1,
+ coeff_dxx_p2_p1,
+ coeff_dxx_m2_p2,
+ coeff_dxx_m1_p2,
+ coeff_dxx_0_p2,
+ coeff_dxx_p1_p2,
+ coeff_dxx_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dxx.store.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dxx.store.c
new file mode 100644
index 0000000..4f30337
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dxx.store.c
@@ -0,0 +1,25 @@
+COEFF(-2,-2) = factor * coeff_dxx_m2_m2;
+COEFF(-1,-2) = factor * coeff_dxx_m1_m2;
+COEFF(0,-2) = factor * coeff_dxx_0_m2;
+COEFF(1,-2) = factor * coeff_dxx_p1_m2;
+COEFF(2,-2) = factor * coeff_dxx_p2_m2;
+COEFF(-2,-1) = factor * coeff_dxx_m2_m1;
+COEFF(-1,-1) = factor * coeff_dxx_m1_m1;
+COEFF(0,-1) = factor * coeff_dxx_0_m1;
+COEFF(1,-1) = factor * coeff_dxx_p1_m1;
+COEFF(2,-1) = factor * coeff_dxx_p2_m1;
+COEFF(-2,0) = factor * coeff_dxx_m2_0;
+COEFF(-1,0) = factor * coeff_dxx_m1_0;
+COEFF(0,0) = factor * coeff_dxx_0_0;
+COEFF(1,0) = factor * coeff_dxx_p1_0;
+COEFF(2,0) = factor * coeff_dxx_p2_0;
+COEFF(-2,1) = factor * coeff_dxx_m2_p1;
+COEFF(-1,1) = factor * coeff_dxx_m1_p1;
+COEFF(0,1) = factor * coeff_dxx_0_p1;
+COEFF(1,1) = factor * coeff_dxx_p1_p1;
+COEFF(2,1) = factor * coeff_dxx_p2_p1;
+COEFF(-2,2) = factor * coeff_dxx_m2_p2;
+COEFF(-1,2) = factor * coeff_dxx_m1_p2;
+COEFF(0,2) = factor * coeff_dxx_0_p2;
+COEFF(1,2) = factor * coeff_dxx_p1_p2;
+COEFF(2,2) = factor * coeff_dxx_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dxy.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dxy.dcl.c
new file mode 100644
index 0000000..37cd8db
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dxy.dcl.c
@@ -0,0 +1,25 @@
+fp coeff_dxy_m2_m2,
+ coeff_dxy_m1_m2,
+ coeff_dxy_0_m2,
+ coeff_dxy_p1_m2,
+ coeff_dxy_p2_m2,
+ coeff_dxy_m2_m1,
+ coeff_dxy_m1_m1,
+ coeff_dxy_0_m1,
+ coeff_dxy_p1_m1,
+ coeff_dxy_p2_m1,
+ coeff_dxy_m2_0,
+ coeff_dxy_m1_0,
+ coeff_dxy_0_0,
+ coeff_dxy_p1_0,
+ coeff_dxy_p2_0,
+ coeff_dxy_m2_p1,
+ coeff_dxy_m1_p1,
+ coeff_dxy_0_p1,
+ coeff_dxy_p1_p1,
+ coeff_dxy_p2_p1,
+ coeff_dxy_m2_p2,
+ coeff_dxy_m1_p2,
+ coeff_dxy_0_p2,
+ coeff_dxy_p1_p2,
+ coeff_dxy_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dxy.store.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dxy.store.c
new file mode 100644
index 0000000..ae83bbb
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dxy.store.c
@@ -0,0 +1,25 @@
+COEFF(-2,-2) = factor * coeff_dxy_m2_m2;
+COEFF(-1,-2) = factor * coeff_dxy_m1_m2;
+COEFF(0,-2) = factor * coeff_dxy_0_m2;
+COEFF(1,-2) = factor * coeff_dxy_p1_m2;
+COEFF(2,-2) = factor * coeff_dxy_p2_m2;
+COEFF(-2,-1) = factor * coeff_dxy_m2_m1;
+COEFF(-1,-1) = factor * coeff_dxy_m1_m1;
+COEFF(0,-1) = factor * coeff_dxy_0_m1;
+COEFF(1,-1) = factor * coeff_dxy_p1_m1;
+COEFF(2,-1) = factor * coeff_dxy_p2_m1;
+COEFF(-2,0) = factor * coeff_dxy_m2_0;
+COEFF(-1,0) = factor * coeff_dxy_m1_0;
+COEFF(0,0) = factor * coeff_dxy_0_0;
+COEFF(1,0) = factor * coeff_dxy_p1_0;
+COEFF(2,0) = factor * coeff_dxy_p2_0;
+COEFF(-2,1) = factor * coeff_dxy_m2_p1;
+COEFF(-1,1) = factor * coeff_dxy_m1_p1;
+COEFF(0,1) = factor * coeff_dxy_0_p1;
+COEFF(1,1) = factor * coeff_dxy_p1_p1;
+COEFF(2,1) = factor * coeff_dxy_p2_p1;
+COEFF(-2,2) = factor * coeff_dxy_m2_p2;
+COEFF(-1,2) = factor * coeff_dxy_m1_p2;
+COEFF(0,2) = factor * coeff_dxy_0_p2;
+COEFF(1,2) = factor * coeff_dxy_p1_p2;
+COEFF(2,2) = factor * coeff_dxy_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dy.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dy.dcl.c
new file mode 100644
index 0000000..b90bf19
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dy.dcl.c
@@ -0,0 +1,25 @@
+fp coeff_dy_m2_m2,
+ coeff_dy_m1_m2,
+ coeff_dy_0_m2,
+ coeff_dy_p1_m2,
+ coeff_dy_p2_m2,
+ coeff_dy_m2_m1,
+ coeff_dy_m1_m1,
+ coeff_dy_0_m1,
+ coeff_dy_p1_m1,
+ coeff_dy_p2_m1,
+ coeff_dy_m2_0,
+ coeff_dy_m1_0,
+ coeff_dy_0_0,
+ coeff_dy_p1_0,
+ coeff_dy_p2_0,
+ coeff_dy_m2_p1,
+ coeff_dy_m1_p1,
+ coeff_dy_0_p1,
+ coeff_dy_p1_p1,
+ coeff_dy_p2_p1,
+ coeff_dy_m2_p2,
+ coeff_dy_m1_p2,
+ coeff_dy_0_p2,
+ coeff_dy_p1_p2,
+ coeff_dy_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dy.store.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dy.store.c
new file mode 100644
index 0000000..adc1413
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dy.store.c
@@ -0,0 +1,25 @@
+COEFF(-2,-2) = factor * coeff_dy_m2_m2;
+COEFF(-1,-2) = factor * coeff_dy_m1_m2;
+COEFF(0,-2) = factor * coeff_dy_0_m2;
+COEFF(1,-2) = factor * coeff_dy_p1_m2;
+COEFF(2,-2) = factor * coeff_dy_p2_m2;
+COEFF(-2,-1) = factor * coeff_dy_m2_m1;
+COEFF(-1,-1) = factor * coeff_dy_m1_m1;
+COEFF(0,-1) = factor * coeff_dy_0_m1;
+COEFF(1,-1) = factor * coeff_dy_p1_m1;
+COEFF(2,-1) = factor * coeff_dy_p2_m1;
+COEFF(-2,0) = factor * coeff_dy_m2_0;
+COEFF(-1,0) = factor * coeff_dy_m1_0;
+COEFF(0,0) = factor * coeff_dy_0_0;
+COEFF(1,0) = factor * coeff_dy_p1_0;
+COEFF(2,0) = factor * coeff_dy_p2_0;
+COEFF(-2,1) = factor * coeff_dy_m2_p1;
+COEFF(-1,1) = factor * coeff_dy_m1_p1;
+COEFF(0,1) = factor * coeff_dy_0_p1;
+COEFF(1,1) = factor * coeff_dy_p1_p1;
+COEFF(2,1) = factor * coeff_dy_p2_p1;
+COEFF(-2,2) = factor * coeff_dy_m2_p2;
+COEFF(-1,2) = factor * coeff_dy_m1_p2;
+COEFF(0,2) = factor * coeff_dy_0_p2;
+COEFF(1,2) = factor * coeff_dy_p1_p2;
+COEFF(2,2) = factor * coeff_dy_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dyy.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dyy.dcl.c
new file mode 100644
index 0000000..45b91b2
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dyy.dcl.c
@@ -0,0 +1,25 @@
+fp coeff_dyy_m2_m2,
+ coeff_dyy_m1_m2,
+ coeff_dyy_0_m2,
+ coeff_dyy_p1_m2,
+ coeff_dyy_p2_m2,
+ coeff_dyy_m2_m1,
+ coeff_dyy_m1_m1,
+ coeff_dyy_0_m1,
+ coeff_dyy_p1_m1,
+ coeff_dyy_p2_m1,
+ coeff_dyy_m2_0,
+ coeff_dyy_m1_0,
+ coeff_dyy_0_0,
+ coeff_dyy_p1_0,
+ coeff_dyy_p2_0,
+ coeff_dyy_m2_p1,
+ coeff_dyy_m1_p1,
+ coeff_dyy_0_p1,
+ coeff_dyy_p1_p1,
+ coeff_dyy_p2_p1,
+ coeff_dyy_m2_p2,
+ coeff_dyy_m1_p2,
+ coeff_dyy_0_p2,
+ coeff_dyy_p1_p2,
+ coeff_dyy_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dyy.store.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dyy.store.c
new file mode 100644
index 0000000..288060a
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/coeff-dyy.store.c
@@ -0,0 +1,25 @@
+COEFF(-2,-2) = factor * coeff_dyy_m2_m2;
+COEFF(-1,-2) = factor * coeff_dyy_m1_m2;
+COEFF(0,-2) = factor * coeff_dyy_0_m2;
+COEFF(1,-2) = factor * coeff_dyy_p1_m2;
+COEFF(2,-2) = factor * coeff_dyy_p2_m2;
+COEFF(-2,-1) = factor * coeff_dyy_m2_m1;
+COEFF(-1,-1) = factor * coeff_dyy_m1_m1;
+COEFF(0,-1) = factor * coeff_dyy_0_m1;
+COEFF(1,-1) = factor * coeff_dyy_p1_m1;
+COEFF(2,-1) = factor * coeff_dyy_p2_m1;
+COEFF(-2,0) = factor * coeff_dyy_m2_0;
+COEFF(-1,0) = factor * coeff_dyy_m1_0;
+COEFF(0,0) = factor * coeff_dyy_0_0;
+COEFF(1,0) = factor * coeff_dyy_p1_0;
+COEFF(2,0) = factor * coeff_dyy_p2_0;
+COEFF(-2,1) = factor * coeff_dyy_m2_p1;
+COEFF(-1,1) = factor * coeff_dyy_m1_p1;
+COEFF(0,1) = factor * coeff_dyy_0_p1;
+COEFF(1,1) = factor * coeff_dyy_p1_p1;
+COEFF(2,1) = factor * coeff_dyy_p2_p1;
+COEFF(-2,2) = factor * coeff_dyy_m2_p2;
+COEFF(-1,2) = factor * coeff_dyy_m1_p2;
+COEFF(0,2) = factor * coeff_dyy_0_p2;
+COEFF(1,2) = factor * coeff_dyy_p1_p2;
+COEFF(2,2) = factor * coeff_dyy_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/data-var.assign.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/data-var.assign.c
new file mode 100644
index 0000000..054be56
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/data-var.assign.c
@@ -0,0 +1,25 @@
+data_m2_m2 = DATA(-2,-2);
+data_m1_m2 = DATA(-1,-2);
+data_0_m2 = DATA(0,-2);
+data_p1_m2 = DATA(1,-2);
+data_p2_m2 = DATA(2,-2);
+data_m2_m1 = DATA(-2,-1);
+data_m1_m1 = DATA(-1,-1);
+data_0_m1 = DATA(0,-1);
+data_p1_m1 = DATA(1,-1);
+data_p2_m1 = DATA(2,-1);
+data_m2_0 = DATA(-2,0);
+data_m1_0 = DATA(-1,0);
+data_0_0 = DATA(0,0);
+data_p1_0 = DATA(1,0);
+data_p2_0 = DATA(2,0);
+data_m2_p1 = DATA(-2,1);
+data_m1_p1 = DATA(-1,1);
+data_0_p1 = DATA(0,1);
+data_p1_p1 = DATA(1,1);
+data_p2_p1 = DATA(2,1);
+data_m2_p2 = DATA(-2,2);
+data_m1_p2 = DATA(-1,2);
+data_0_p2 = DATA(0,2);
+data_p1_p2 = DATA(1,2);
+data_p2_p2 = DATA(2,2);
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/data-var.dcl.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/data-var.dcl.c
new file mode 100644
index 0000000..006894f
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/data-var.dcl.c
@@ -0,0 +1,25 @@
+fp data_m2_m2,
+ data_m1_m2,
+ data_0_m2,
+ data_p1_m2,
+ data_p2_m2,
+ data_m2_m1,
+ data_m1_m1,
+ data_0_m1,
+ data_p1_m1,
+ data_p2_m1,
+ data_m2_0,
+ data_m1_0,
+ data_0_0,
+ data_p1_0,
+ data_p2_0,
+ data_m2_p1,
+ data_m1_p1,
+ data_0_p1,
+ data_p1_p1,
+ data_p2_p1,
+ data_m2_p2,
+ data_m1_p2,
+ data_0_p2,
+ data_p1_p2,
+ data_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-I.compute.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-I.compute.c
new file mode 100644
index 0000000..63096fa
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-I.compute.c
@@ -0,0 +1,26 @@
+result =
+ coeff_I_m2_m2*data_m2_m2
+ + coeff_I_m1_m2*data_m1_m2
+ + coeff_I_0_m2*data_0_m2
+ + coeff_I_p1_m2*data_p1_m2
+ + coeff_I_p2_m2*data_p2_m2
+ + coeff_I_m2_m1*data_m2_m1
+ + coeff_I_m1_m1*data_m1_m1
+ + coeff_I_0_m1*data_0_m1
+ + coeff_I_p1_m1*data_p1_m1
+ + coeff_I_p2_m1*data_p2_m1
+ + coeff_I_m2_0*data_m2_0
+ + coeff_I_m1_0*data_m1_0
+ + coeff_I_0_0*data_0_0
+ + coeff_I_p1_0*data_p1_0
+ + coeff_I_p2_0*data_p2_0
+ + coeff_I_m2_p1*data_m2_p1
+ + coeff_I_m1_p1*data_m1_p1
+ + coeff_I_0_p1*data_0_p1
+ + coeff_I_p1_p1*data_p1_p1
+ + coeff_I_p2_p1*data_p2_p1
+ + coeff_I_m2_p2*data_m2_p2
+ + coeff_I_m1_p2*data_m1_p2
+ + coeff_I_0_p2*data_0_p2
+ + coeff_I_p1_p2*data_p1_p2
+ + coeff_I_p2_p2*data_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-dx.compute.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-dx.compute.c
new file mode 100644
index 0000000..f92b558
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-dx.compute.c
@@ -0,0 +1,26 @@
+result =
+ coeff_dx_m2_m2*data_m2_m2
+ + coeff_dx_m1_m2*data_m1_m2
+ + coeff_dx_0_m2*data_0_m2
+ + coeff_dx_p1_m2*data_p1_m2
+ + coeff_dx_p2_m2*data_p2_m2
+ + coeff_dx_m2_m1*data_m2_m1
+ + coeff_dx_m1_m1*data_m1_m1
+ + coeff_dx_0_m1*data_0_m1
+ + coeff_dx_p1_m1*data_p1_m1
+ + coeff_dx_p2_m1*data_p2_m1
+ + coeff_dx_m2_0*data_m2_0
+ + coeff_dx_m1_0*data_m1_0
+ + coeff_dx_0_0*data_0_0
+ + coeff_dx_p1_0*data_p1_0
+ + coeff_dx_p2_0*data_p2_0
+ + coeff_dx_m2_p1*data_m2_p1
+ + coeff_dx_m1_p1*data_m1_p1
+ + coeff_dx_0_p1*data_0_p1
+ + coeff_dx_p1_p1*data_p1_p1
+ + coeff_dx_p2_p1*data_p2_p1
+ + coeff_dx_m2_p2*data_m2_p2
+ + coeff_dx_m1_p2*data_m1_p2
+ + coeff_dx_0_p2*data_0_p2
+ + coeff_dx_p1_p2*data_p1_p2
+ + coeff_dx_p2_p2*data_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-dxx.compute.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-dxx.compute.c
new file mode 100644
index 0000000..699eb00
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-dxx.compute.c
@@ -0,0 +1,26 @@
+result =
+ coeff_dxx_m2_m2*data_m2_m2
+ + coeff_dxx_m1_m2*data_m1_m2
+ + coeff_dxx_0_m2*data_0_m2
+ + coeff_dxx_p1_m2*data_p1_m2
+ + coeff_dxx_p2_m2*data_p2_m2
+ + coeff_dxx_m2_m1*data_m2_m1
+ + coeff_dxx_m1_m1*data_m1_m1
+ + coeff_dxx_0_m1*data_0_m1
+ + coeff_dxx_p1_m1*data_p1_m1
+ + coeff_dxx_p2_m1*data_p2_m1
+ + coeff_dxx_m2_0*data_m2_0
+ + coeff_dxx_m1_0*data_m1_0
+ + coeff_dxx_0_0*data_0_0
+ + coeff_dxx_p1_0*data_p1_0
+ + coeff_dxx_p2_0*data_p2_0
+ + coeff_dxx_m2_p1*data_m2_p1
+ + coeff_dxx_m1_p1*data_m1_p1
+ + coeff_dxx_0_p1*data_0_p1
+ + coeff_dxx_p1_p1*data_p1_p1
+ + coeff_dxx_p2_p1*data_p2_p1
+ + coeff_dxx_m2_p2*data_m2_p2
+ + coeff_dxx_m1_p2*data_m1_p2
+ + coeff_dxx_0_p2*data_0_p2
+ + coeff_dxx_p1_p2*data_p1_p2
+ + coeff_dxx_p2_p2*data_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-dxy.compute.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-dxy.compute.c
new file mode 100644
index 0000000..57a6b8e
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-dxy.compute.c
@@ -0,0 +1,26 @@
+result =
+ coeff_dxy_m2_m2*data_m2_m2
+ + coeff_dxy_m1_m2*data_m1_m2
+ + coeff_dxy_0_m2*data_0_m2
+ + coeff_dxy_p1_m2*data_p1_m2
+ + coeff_dxy_p2_m2*data_p2_m2
+ + coeff_dxy_m2_m1*data_m2_m1
+ + coeff_dxy_m1_m1*data_m1_m1
+ + coeff_dxy_0_m1*data_0_m1
+ + coeff_dxy_p1_m1*data_p1_m1
+ + coeff_dxy_p2_m1*data_p2_m1
+ + coeff_dxy_m2_0*data_m2_0
+ + coeff_dxy_m1_0*data_m1_0
+ + coeff_dxy_0_0*data_0_0
+ + coeff_dxy_p1_0*data_p1_0
+ + coeff_dxy_p2_0*data_p2_0
+ + coeff_dxy_m2_p1*data_m2_p1
+ + coeff_dxy_m1_p1*data_m1_p1
+ + coeff_dxy_0_p1*data_0_p1
+ + coeff_dxy_p1_p1*data_p1_p1
+ + coeff_dxy_p2_p1*data_p2_p1
+ + coeff_dxy_m2_p2*data_m2_p2
+ + coeff_dxy_m1_p2*data_m1_p2
+ + coeff_dxy_0_p2*data_0_p2
+ + coeff_dxy_p1_p2*data_p1_p2
+ + coeff_dxy_p2_p2*data_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-dy.compute.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-dy.compute.c
new file mode 100644
index 0000000..74bfb00
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-dy.compute.c
@@ -0,0 +1,26 @@
+result =
+ coeff_dy_m2_m2*data_m2_m2
+ + coeff_dy_m1_m2*data_m1_m2
+ + coeff_dy_0_m2*data_0_m2
+ + coeff_dy_p1_m2*data_p1_m2
+ + coeff_dy_p2_m2*data_p2_m2
+ + coeff_dy_m2_m1*data_m2_m1
+ + coeff_dy_m1_m1*data_m1_m1
+ + coeff_dy_0_m1*data_0_m1
+ + coeff_dy_p1_m1*data_p1_m1
+ + coeff_dy_p2_m1*data_p2_m1
+ + coeff_dy_m2_0*data_m2_0
+ + coeff_dy_m1_0*data_m1_0
+ + coeff_dy_0_0*data_0_0
+ + coeff_dy_p1_0*data_p1_0
+ + coeff_dy_p2_0*data_p2_0
+ + coeff_dy_m2_p1*data_m2_p1
+ + coeff_dy_m1_p1*data_m1_p1
+ + coeff_dy_0_p1*data_0_p1
+ + coeff_dy_p1_p1*data_p1_p1
+ + coeff_dy_p2_p1*data_p2_p1
+ + coeff_dy_m2_p2*data_m2_p2
+ + coeff_dy_m1_p2*data_m1_p2
+ + coeff_dy_0_p2*data_0_p2
+ + coeff_dy_p1_p2*data_p1_p2
+ + coeff_dy_p2_p2*data_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-dyy.compute.c b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-dyy.compute.c
new file mode 100644
index 0000000..aaec7a2
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.cube.size5/interp-dyy.compute.c
@@ -0,0 +1,26 @@
+result =
+ coeff_dyy_m2_m2*data_m2_m2
+ + coeff_dyy_m1_m2*data_m1_m2
+ + coeff_dyy_0_m2*data_0_m2
+ + coeff_dyy_p1_m2*data_p1_m2
+ + coeff_dyy_p2_m2*data_p2_m2
+ + coeff_dyy_m2_m1*data_m2_m1
+ + coeff_dyy_m1_m1*data_m1_m1
+ + coeff_dyy_0_m1*data_0_m1
+ + coeff_dyy_p1_m1*data_p1_m1
+ + coeff_dyy_p2_m1*data_p2_m1
+ + coeff_dyy_m2_0*data_m2_0
+ + coeff_dyy_m1_0*data_m1_0
+ + coeff_dyy_0_0*data_0_0
+ + coeff_dyy_p1_0*data_p1_0
+ + coeff_dyy_p2_0*data_p2_0
+ + coeff_dyy_m2_p1*data_m2_p1
+ + coeff_dyy_m1_p1*data_m1_p1
+ + coeff_dyy_0_p1*data_0_p1
+ + coeff_dyy_p1_p1*data_p1_p1
+ + coeff_dyy_p2_p1*data_p2_p1
+ + coeff_dyy_m2_p2*data_m2_p2
+ + coeff_dyy_m1_p2*data_m1_p2
+ + coeff_dyy_0_p2*data_0_p2
+ + coeff_dyy_p1_p2*data_p1_p2
+ + coeff_dyy_p2_p2*data_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.log b/src/GeneralizedPolynomial-Uniform/common/2d.log
new file mode 100644
index 0000000..835c96e
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.log
@@ -0,0 +1,1314 @@
+ |\^/| Maple 7 (IBM INTEL LINUX)
+._|\| |/|_. Copyright (c) 2001 by Waterloo Maple Inc.
+ \ MAPLE / All rights reserved. Maple is a registered trademark of
+ <____ ____> Waterloo Maple Inc.
+ | Type ? for help.
+# util.maple -- misc utility routines
+# $Id: util.maple,v 1.3 2002/05/19 13:12:18 jthorn Exp $
+>
+#
+# fix_rationals - convert numbers to RATIONAL() calls
+# nonmatching_names - find names in a list which *don't* have a specified prefix
+# sprint_numeric_list - convert a numeric list to a valid C identifier suffix
+# print_name_list_dcl - print a C declaration for a list of names
+#
+# hypercube_points - compute all (integer) points in an N-dimensional hypercube
+#
+# ftruncate - truncate a file to zero length
+#
+>
+################################################################################
+################################################################################
+################################################################################
+>
+#
+# This function converts all {integer, rational} subexpressions of its
+# input except integer exponents and -1 factors in products, into function
+# calls
+# RATIONAL(num,den)
+# This is useful in conjunction with the C() library function, since
+#
+# C( (1/3) * foo * bar )
+# t0 = foo*bar/3;
+#
+# generates a (slow) division (and runs the risk of mixed-mode-arithmetic
+# problems), while
+#
+# C((1.0/3.0) * foo * bar);
+# t0 = 0.3333333333*foo*bar;
+#
+# suffers from roundoff error. With this function,
+#
+# fix_rationals((1/3) * foo * bar);
+# RATIONAL(1,3) foo bar
+# C(%);
+# t0 = RATIONAL(1.0,3.0)*foo*bar;
+#
+# which a C preprocessor macro can easily convert to the desired
+#
+# t0 = (1.0/3.0)*foo*bar;
+#
+# Additionally, this function can be told to leave certain types of
+# subexpressions unconverged. For example,
+# fix_rationals(expr, type, specfunc(integer, DATA));
+# will leave all subexpressions of the form DATA(integer arguments)
+# unconverted.
+#
+# Arguments:
+# expr = (in) The expression to be converted.
+# inert_fn = (optional in)
+# If specified, this argument should be a Boolean procedure
+# or the name of a Boolean procedure. This procedure should
+# take one or more argument, and return true if and only if
+# the first argument should *not* be converted, i.e. if we
+# should leave this expression unchanged. See the last
+# example above.
+# ... = (optional in)
+# Any further arguments are passed as additional arguments to
+# the inert_fn procedure.
+#
+> fix_rationals :=
+> proc(
+> expr::{
+> algebraic, name = algebraic,
+> list({algebraic, name = algebraic}),
+> set ({algebraic, name = algebraic})
+> },
+> inert_fn::{name, procedure}
+> )
+> local nn, k,
+> base, power, fbase, fpower,
+> fn, fn_args_list,
+> num, den, mult;
+>
+# do we want to convert this expression?
+> if ((nargs >= 2) and inert_fn(expr, args[3..nargs]))
+> then return expr;
+> end if;
+>
+# recurse over lists and sets
+> if (type(expr, {list,set}))
+> then return map(fix_rationals, expr, args[2..nargs]);
+> end if;
+>
+# recurse over equation right hand sides
+> if (type(expr, name = algebraic))
+> then return ( lhs(expr) = fix_rationals(rhs(expr), args[2..nargs]) );
+> end if;
+>
+# recurse over functions other than RATIONAL()
+> if (type(expr, function))
+> then
+> fn := op(0, expr);
+> if (fn <> 'RATIONAL')
+> then
+> fn_args_list := [op(expr)];
+> fn_args_list := map(fix_rationals, fn_args_list, args[2..nargs]);
+> fn; return '%'( op(fn_args_list) );
+> end if;
+> end if;
+>
+> nn := nops(expr);
+>
+# recurse over sums
+> if (type(expr, `+`))
+> then return sum('fix_rationals(op(k,expr), args[2..nargs])', 'k'=1..nn);
+> end if;
+>
+# recurse over products
+# ... leaving leading -1 factors intact, i.e. not converted to RATIONAL(-1,1)
+> if (type(expr, `*`))
+> then
+> if (op(1, expr) = -1)
+> then return -1*fix_rationals(remove(type, expr, 'identical(-1)'),
+> args[2..nargs]);
+> else return product('fix_rationals(op(k,expr), args[2..nargs])',
+> 'k'=1..nn);
+> end if;
+> end if;
+>
+# recurse over powers
+# ... leaving integer exponents intact
+> if (type(expr, `^`))
+> then
+> base := op(1, expr);
+> power := op(2, expr);
+>
+> fbase := fix_rationals(base, args[2..nargs]);
+> if (type(power, integer))
+> then fpower := power;
+> else fpower := fix_rationals(power, args[2..nargs]);
+> end if;
+> return fbase ^ fpower;
+> end if;
+>
+# fix integers and fractions
+> if (type(expr, integer))
+> then return 'RATIONAL'(expr, 1);
+> end if;
+> if (type(expr, fraction))
+> then
+> num := op(1, expr);
+> den := op(2, expr);
+>
+> return 'RATIONAL'(num, den);
+> end if;
+>
+# turn Maple floating-point into integer fraction, then recursively fix that
+> if (type(expr, float))
+> then
+> mult := op(1, expr);
+> power := op(2, expr);
+> return fix_rationals(mult * 10^power, args[2..nargs]);
+> end if;
+>
+# identity op on names
+> if (type(expr, name))
+> then return expr;
+> end if;
+>
+# unknown type
+> error "%0",
+> "unknown type for expr!",
+> " whattype(expr) = ", whattype(expr),
+> " expr = ", expr;
+> end proc;
+fix_rationals := proc(expr::{algebraic, name = algebraic,
+list({algebraic, name = algebraic}), set({algebraic, name = algebraic})},
+inert_fn::{procedure, name})
+local nn, k, base, power, fbase, fpower, fn, fn_args_list, num, den, mult;
+ if 2 <= nargs and inert_fn(expr, args[3 .. nargs]) then return expr
+ end if;
+ if type(expr, {set, list}) then
+ return map(fix_rationals, expr, args[2 .. nargs])
+ end if;
+ if type(expr, name = algebraic) then
+ return lhs(expr) = fix_rationals(rhs(expr), args[2 .. nargs])
+ end if;
+ if type(expr, function) then
+ fn := op(0, expr);
+ if fn <> 'RATIONAL' then
+ fn_args_list := [op(expr)];
+ fn_args_list :=
+ map(fix_rationals, fn_args_list, args[2 .. nargs]);
+ fn;
+ return '%'(op(fn_args_list))
+ end if
+ end if;
+ nn := nops(expr);
+ if type(expr, `+`) then return
+ sum('fix_rationals(op(k, expr), args[2 .. nargs])', 'k' = 1 .. nn)
+ end if;
+ if type(expr, `*`) then
+ if op(1, expr) = -1 then return -fix_rationals(
+ remove(type, expr, 'identical(-1)'), args[2 .. nargs])
+ else return product('fix_rationals(op(k, expr), args[2 .. nargs])',
+ 'k' = 1 .. nn)
+ end if
+ end if;
+ if type(expr, `^`) then
+ base := op(1, expr);
+ power := op(2, expr);
+ fbase := fix_rationals(base, args[2 .. nargs]);
+ if type(power, integer) then fpower := power
+ else fpower := fix_rationals(power, args[2 .. nargs])
+ end if;
+ return fbase^fpower
+ end if;
+ if type(expr, integer) then return 'RATIONAL'(expr, 1) end if;
+ if type(expr, fraction) then
+ num := op(1, expr); den := op(2, expr); return 'RATIONAL'(num, den)
+ end if;
+ if type(expr, float) then
+ mult := op(1, expr);
+ power := op(2, expr);
+ return fix_rationals(mult*10^power, args[2 .. nargs])
+ end if;
+ if type(expr, name) then return expr end if;
+ error "%0", "unknown type for expr!", " whattype(expr) = ",
+ whattype(expr), " expr = ", expr
+end proc
+
+>
+################################################################################
+>
+#
+# This function finds names in a list which *don't* have a specified prefix.
+#
+# Arguments:
+# name_list = A list of the names.
+# prefix = The prefix we want to filter out.
+#
+# Results:
+# This function returns the subset list of names which don't have the
+# specified prefix.
+#
+> nonmatching_names :=
+> proc( name_list::list({name,string}), prefix::{name,string} )
+>
+> select( proc(n)
+> evalb(not StringTools[IsPrefix](prefix,n));
+> end proc
+> ,
+> name_list
+> );
+> end proc;
+nonmatching_names := proc(
+name_list::list({name, string}), prefix::{name, string})
+ select(proc(n) evalb(not StringTools[IsPrefix](prefix, n)) end proc,
+ name_list)
+end proc
+
+>
+################################################################################
+>
+#
+# This function converts a numeric list to a string which is a valid
+# C identifier suffix: elements are separated by "_", decimal points are
+# replaced by "x", and all nonzero values have explicit +/- signs, which
+# are replaced by "p"/"m".
+#
+# For example, [0,-3.5,+4] --> "0_m3x5_p4".
+#
+> sprint_numeric_list :=
+> proc(nlist::list(numeric))
+>
+# generate preliminary string, eg "+0_-3.5_+4"
+> map2(sprintf, "%+a", nlist);
+> ListTools[Join](%, "_");
+> cat(op(%));
+>
+# fixup bad characters
+> StringTools[SubstituteAll](%, "+0", "0");
+> StringTools[CharacterMap](".+-", "xpm", %);
+>
+> return %;
+> end proc;
+sprint_numeric_list := proc(nlist::list(numeric))
+ map2(sprintf, "%+a", nlist);
+ ListTools[Join](%, "_");
+ cat(op(%));
+ StringTools[SubstituteAll](%, "+0", "0");
+ StringTools[CharacterMap](".+-", "xpm", %);
+ return %
+end proc
+
+>
+################################################################################
+>
+#
+# This function prints a C declaration for a list of names.
+#
+# Argument:
+# name_list = A list of the names.
+# name_type = The C type of the names, eg. "double".
+# file_name = The file name to write the declaration to. This is
+# truncated before writing.
+#
+> print_name_list_dcl :=
+> proc( name_list::list({name,string}),
+> name_type::string,
+> file_name::string )
+> local blanks, separator_string;
+>
+> ftruncate(file_name);
+>
+# a sequence of blanks with the same length as name_type
+> seq(" ", i=1..length(name_type));
+>
+# string to separate names
+> separator_string := cat(",\n", %, " ");
+>
+> map(convert, name_list, string);
+> ListTools[Join](%, separator_string);
+> cat(op(%));
+>
+> fprintf(file_name,
+> "%s %s;\n",
+> name_type, %);
+>
+> fclose(file_name);
+> NULL;
+> end proc;
+print_name_list_dcl := proc(
+name_list::list({name, string}), name_type::string, file_name::string)
+local blanks, separator_string;
+ ftruncate(file_name);
+ seq(" ", i = 1 .. length(name_type));
+ separator_string := cat(",\n", %, " ");
+ map(convert, name_list, string);
+ ListTools[Join](%, separator_string);
+ cat(op(%));
+ fprintf(file_name, "%s %s;\n", name_type, %);
+ fclose(file_name);
+ NULL
+end proc
+
+>
+################################################################################
+################################################################################
+################################################################################
+>
+#
+# This function computes a list of all the (integer) points in an
+# N-dimensional hypercube, in lexicographic order. The present
+# implementation requires N <= 4.
+#
+# Arguments:
+# cmin,cmax = N-element lists of cube minimum/maximum coordinates.
+#
+# Results:
+# The function returns a set of d-element lists giving the coordinates.
+# For example,
+# hypercube([0,0], [2,1]
+# returns
+# { [0,0], [0,1], [1,0], [1,1], [2,0], [2,1] }
+> hypercube_points :=
+> proc(cmin::list(integer), cmax::list(integer))
+> local N, i,j,k,l;
+>
+> N := nops(cmin);
+> if (nops(cmax) <> N)
+> then error
+> "must have same number of dimensions for min and max coordinates!";
+> fi;
+>
+> if (N = 1)
+> then return [seq([i], i=cmin[1]..cmax[1])];
+> elif (N = 2)
+> then return [
+> seq(
+> seq([i,j], j=cmin[2]..cmax[2]),
+> i=cmin[1]..cmax[1])
+> ];
+> elif (N = 3)
+> then return [
+> seq(
+> seq(
+> seq([i,j,k], k=cmin[3]..cmax[3]),
+> j=cmin[2]..cmax[2] ),
+> i=cmin[1]..cmax[1])
+> ];
+> elif (N = 4)
+> then return [
+> seq(
+> seq(
+> seq(
+> seq([i,j,k,l], l=cmin[4]..cmax[4]),
+> k=cmin[3]..cmax[3] ),
+> j=cmin[2]..cmax[2]),
+> i=cmin[1]..cmax[1])
+> ];
+> else
+> error "implementation restriction: must have N <= 4, got %1!", N;
+> fi;
+> end proc;
+hypercube_points := proc(cmin::list(integer), cmax::list(integer))
+local N, i, j, k, l;
+ N := nops(cmin);
+ if nops(cmax) <> N then error
+ "must have same number of dimensions for min and max coordinates!"
+ end if;
+ if N = 1 then return [seq([i], i = cmin[1] .. cmax[1])]
+ elif N = 2 then return
+ [seq(seq([i, j], j = cmin[2] .. cmax[2]), i = cmin[1] .. cmax[1])]
+ elif N = 3 then return [seq(
+ seq(seq([i, j, k], k = cmin[3] .. cmax[3]), j = cmin[2] .. cmax[2])
+ , i = cmin[1] .. cmax[1])]
+ elif N = 4 then return [seq(seq(seq(
+ seq([i, j, k, l], l = cmin[4] .. cmax[4]), k = cmin[3] .. cmax[3]),
+ j = cmin[2] .. cmax[2]), i = cmin[1] .. cmax[1])]
+ else error "implementation restriction: must have N <= 4, got %1!", N
+ end if
+end proc
+
+>
+################################################################################
+################################################################################
+################################################################################
+>
+#
+# This function truncates a file to 0 length if it exists, or creates
+# it at that length if it doesn't exist.
+#
+# Arguments:
+# file_name = (in) The name of the file.
+#
+> ftruncate :=
+> proc(file_name::string)
+> fopen(file_name, 'WRITE');
+> fclose(%);
+> NULL;
+> end proc;
+ftruncate :=
+
+ proc(file_name::string) fopen(file_name, 'WRITE'); fclose(%); NULL end proc
+
+# interpolate.maple -- compute generalized interpolation formulas/coefficients
+# $Id: interpolate.maple,v 1.4 2002/05/14 15:52:50 jthorn Exp $
+>
+#
+# <<<representation of numbers, data values, etc>>>
+# polynomial_interpolant - compute polynomial interpolant
+# coeff_as_lc_of_data - coefficients of ... (linear combination of data)
+#
+# print_coeff__lc_of_data - print C code to compute coefficients
+# print_data_var_assign - print C code to assign data-value variables
+# print_interp_coeff_var_store - print C code to store coeff vars "somewhere"
+# print_interp_cmpt__lc_of_data - print C code for computation of interpolant
+#
+# coeff_name - name of coefficient of data at a given [m] coordinate
+# data_var_name - name of variable storing data value at a given [m] coordinate
+#
+>
+################################################################################
+>
+#
+# ***** representation of numbers, data values, etc *****
+#
+# We use RATIONAL(p.0,q.0) to denote the rational number p/q.
+#
+# We use DATA(...) to represent the data values being interpolated at a
+# specified [m] coordinate, where the arguments are the [m] coordinates.
+#
+# We use COEFF(...) to represent the molecule coefficient at a specified
+# [m] coordinate, where the arguments are the [m] coordinates.
+#
+# For example, the usual 1-D centered 2nd order 1st derivative molecule
+# would be written
+# RATIONAL(-1.0,2.0)*DATA(-1) + RATIONA(1.0,2.0)*DATA(1)
+# and its coefficients as
+# COEFF(-1) = RATIONAL(-1.0,2.0)
+# COEFF(1) = RATIONAL(1.0,2.0)
+#
+>
+################################################################################
+################################################################################
+################################################################################
+>
+#
+# This function computes a polynomial interpolant in any number of dimensions.
+#
+# Arguments:
+# fn = The interpolation function. This should be a procedure in the
+# coordinates, having the coefficients as global variables. For
+# example,
+# proc(x,y) c00 + c10*x + c01*y end proc
+# coeff_list = A set of the interpolation coefficients (coefficients in
+# the interpolation function), for example [c00, c10, c01].
+# coord_list = A list of the coordinates (independent variables in the
+# interpolation function), for example [x,y].
+# posn_list = A list of positions (each a list of numeric values) where the
+# interpolant is to use data, for example hypercube([0,0], [1,1]).
+# Any positions may be used; if they're redundant (as in the
+# example) the least-squares interpolant is computed.
+#
+# Results:
+# This function returns the interpolating polynomial, in the form of
+# an algebraic expression in the coordinates and the data values.
+#
+> polynomial_interpolant :=
+> proc(
+> fn::procedure, coeff_list::list(name),
+> coord_list::list(name), posn_list::list(list(numeric))
+> )
+> local posn, data_eqns, coeff_eqns;
+>
+# coefficients of interpolating polynomial
+> data_eqns := { seq( fn(op(posn))='DATA'(op(posn)) , posn=posn_list ) };
+> coeff_eqns := linalg[leastsqrs](data_eqns, {op(coeff_list)});
+> if (has(coeff_eqns, '_t'))
+> then error "interpolation coefficients aren't uniquely determined!";
+> end if;
+>
+# interpolant as a polynomial in the coordinates
+> return subs(coeff_eqns, eval(fn))(op(coord_list));
+> end proc;
+polynomial_interpolant := proc(fn::procedure, coeff_list::list(name),
+coord_list::list(name), posn_list::list(list(numeric)))
+local posn, data_eqns, coeff_eqns;
+ data_eqns := {seq(fn(op(posn)) = 'DATA'(op(posn)), posn = posn_list)};
+ coeff_eqns := linalg[leastsqrs](data_eqns, {op(coeff_list)});
+ if has(coeff_eqns, '_t') then
+ error "interpolation coefficients aren't uniquely determined!"
+ end if;
+ return subs(coeff_eqns, eval(fn))(op(coord_list))
+end proc
+
+>
+################################################################################
+>
+#
+# This function takes as input an interpolating polynomial, expresses
+# it as a linear combination of the data values, and returns the coefficeints
+# of that form.
+#
+# Arguments:
+# interpolant = The interpolating polynomial (an algebraic expression
+# in the coordinates and the data values).
+# posn_list = The same list of positions as was used to compute the
+# interpolating polynomial.
+#
+# Results:
+# This function returns the coefficients, as a list of equations of the
+# form COEFF(...) = value , where each value is a polynomial in the
+# coordinates. The order of the list matches that of posn_list.
+#
+> coeff_as_lc_of_data :=
+> proc(
+> interpolant::algebraic,
+> posn_list::list(list(numeric))
+> )
+> local data_list, interpolant_as_lc_of_data;
+>
+# interpolant as a linear combination of the data values
+> data_list := [ seq( 'DATA'(op(posn)) , posn=posn_list ) ];
+> interpolant_as_lc_of_data := collect(interpolant, data_list);
+>
+# coefficients of the data values in the linear combination
+> return map(
+> proc(posn::list(numeric))
+> coeff(interpolant_as_lc_of_data, DATA(op(posn)));
+> 'COEFF'(op(posn)) = %;
+> end proc
+> ,
+> posn_list
+> );
+> end proc;
+coeff_as_lc_of_data := proc(
+interpolant::algebraic, posn_list::list(list(numeric)))
+local data_list, interpolant_as_lc_of_data;
+ data_list := [seq('DATA'(op(posn)), posn = posn_list)];
+ interpolant_as_lc_of_data := collect(interpolant, data_list);
+ return map(proc(posn::list(numeric))
+ coeff(interpolant_as_lc_of_data, DATA(op(posn)));
+ 'COEFF'(op(posn)) = %
+ end proc, posn_list)
+end proc
+
+>
+################################################################################
+################################################################################
+################################################################################
+>
+#
+# This function prints C expressions for the coefficients of an
+# interpolating polynomial. (The polynomial is expressed as linear
+# combinations of the data values with coefficients which are
+# RATIONAL(p,q) calls.)
+#
+# Arguments:
+# coeff_list = A list of the coefficients, as returned from
+# coeff_as_lc_of_data() .
+# coeff_name_prefix = A prefix string for the coefficient names.
+# temp_name_type = The C type to be used for Maple-introduced temporary
+# names, eg. "double".
+# file_name = The file name to write the coefficients to. This is
+# truncated before writing.
+#
+> print_coeff__lc_of_data :=
+> proc( coeff_list::list(specfunc(numeric,COEFF) = algebraic),
+> coeff_name_prefix::string,
+> temp_name_type::string,
+> file_name::string )
+> global `codegen/C/function/informed`;
+> local coeff_list2, cmpt_list, temp_name_list;
+>
+# convert LHS of each equation from a COEFF() call (eg COEFF(-1,+1))
+# to a Maple/C variable name (eg coeff_I_m1_p1)
+> coeff_list2 := map(
+> proc(coeff_eqn::specfunc(numeric,COEFF) = algebraic)
+> local posn;
+> posn := [op(lhs(coeff_eqn))];
+> coeff_name(posn,coeff_name_prefix);
+> convert(%, name); # codegen[C] wants LHS
+> # to be an actual Maple *name*
+> % = fix_rationals(rhs(coeff_eqn));
+> end proc
+> ,
+> coeff_list
+> );
+>
+#
+# generate the C code
+#
+>
+# tell codegen[C] not to warn about unknown RATIONAL() and DATA() "fn calls"
+# via undocumented :( global table
+> `codegen/C/function/informed`['RATIONAL'] := true;
+> `codegen/C/function/informed`['DATA'] := true;
+>
+> ftruncate(file_name);
+>
+# optimized computation sequence for all the coefficients
+# (may use local variables t0,t1,t2,...)
+> cmpt_list := [codegen[optimize](coeff_list2, tryhard)];
+>
+# list of the t0,t1,t2,... local variables
+> temp_name_list := nonmatching_names(map(lhs,cmpt_list), coeff_name_prefix);
+>
+# declare the t0,t1,t2,... local variables (if there are any)
+> if (nops(temp_name_list) > 0)
+> then print_name_list_dcl(%, temp_name_type, file_name);
+> fi;
+>
+# now print the optimized computation sequence
+> codegen[C](cmpt_list, filename=file_name);
+>
+> fclose(file_name);
+>
+> NULL;
+> end proc;
+print_coeff__lc_of_data := proc(
+coeff_list::list(specfunc(numeric, COEFF) = algebraic),
+coeff_name_prefix::string, temp_name_type::string, file_name::string)
+local coeff_list2, cmpt_list, temp_name_list;
+global `codegen/C/function/informed`;
+ coeff_list2 := map(proc(
+ coeff_eqn::(specfunc(numeric, COEFF) = algebraic))
+ local posn;
+ posn := [op(lhs(coeff_eqn))];
+ coeff_name(posn, coeff_name_prefix);
+ convert(%, name);
+ % = fix_rationals(rhs(coeff_eqn))
+ end proc, coeff_list);
+ `codegen/C/function/informed`['RATIONAL'] := true;
+ `codegen/C/function/informed`['DATA'] := true;
+ ftruncate(file_name);
+ cmpt_list := [codegen[optimize](coeff_list2, tryhard)];
+ temp_name_list :=
+ nonmatching_names(map(lhs, cmpt_list), coeff_name_prefix);
+ if 0 < nops(temp_name_list) then
+ print_name_list_dcl(%, temp_name_type, file_name)
+ end if;
+ codegen[C](cmpt_list, filename = file_name);
+ fclose(file_name);
+ NULL
+end proc
+
+>
+################################################################################
+>
+#
+# This function prints a sequence of C expression to assign the data-value
+# variables, eg
+# data_m1_p1 = DATA(-1,1);
+#
+# Arguments:
+# posn_list = The same list of positions as was used to compute the
+# interpolating polynomial.
+# data_var_name_prefix = A prefix string for the data variable names.
+# file_name = The file name to write the coefficients to. This is
+# truncated before writing.
+#
+> print_data_var_assign :=
+> proc(
+> posn_list::list(list(numeric)),
+> data_var_name_prefix::string,
+> file_name::string
+> )
+>
+> ftruncate(file_name);
+> map(
+> proc(posn::list(numeric))
+> fprintf(file_name,
+> "%s = %a;\n",
+> data_var_name(posn,data_var_name_prefix),
+> DATA(op(posn)));
+> end proc
+> ,
+> posn_list
+> );
+> fclose(file_name);
+>
+> NULL;
+> end proc;
+print_data_var_assign := proc(posn_list::list(list(numeric)),
+data_var_name_prefix::string, file_name::string)
+ ftruncate(file_name);
+ map(proc(posn::list(numeric))
+ fprintf(file_name, "%s = %a;\n",
+ data_var_name(posn, data_var_name_prefix), DATA(op(posn)))
+ end proc, posn_list);
+ fclose(file_name);
+ NULL
+end proc
+
+>
+################################################################################
+>
+#
+# This function prints a sequence of C expression to store the interpolation
+# coefficients in COEFF(...) expressions, eg
+# COEFF(1,-1) = factor * coeff_dx_p1_m1;
+#
+# Arguments:
+# posn_list = The same list of positions as was used to compute the
+# interpolating polynomial.
+# RHS_factor_name = If this string is non-empty, then the coefficient is
+# multiplied by this factor before being stored, eg
+# setting this to "factor" would give the example above.
+# If this string is empty (""), the multiplication is
+# omitted, eg
+# COEFF(1,-1) = coeff_dx_p1_m1;
+# coeff_name_prefix = A prefix string for the coefficient names.
+# file_name = The file name to write the coefficients to. This is
+# truncated before writing.
+#
+> print_interp_coeff_var_store :=
+> proc(
+> posn_list::list(list(numeric)),
+> RHS_factor_name::string,
+> coeff_name_prefix::string,
+> file_name::string
+> )
+>
+> ftruncate(file_name);
+> map(
+> proc(posn::list(numeric))
+> if (length(RHS_factor_name) > 0)
+> then fprintf(file_name,
+> "%a = %s * %s;\n",
+> 'COEFF'(op(posn)),
+> RHS_factor_name,
+> coeff_name(posn,coeff_name_prefix));
+> else fprintf(file_name,
+> "%a = %s;\n",
+> 'COEFF'(op(posn)),
+> coeff_name(posn,coeff_name_prefix));
+> end if;
+> end proc
+> ,
+> posn_list
+> );
+> fclose(file_name);
+>
+> NULL;
+> end proc;
+print_interp_coeff_var_store := proc(posn_list::list(list(numeric)),
+RHS_factor_name::string, coeff_name_prefix::string, file_name::string)
+ ftruncate(file_name);
+ map(proc(posn::list(numeric))
+ if 0 < length(RHS_factor_name) then fprintf(file_name,
+ "%a = %s * %s;\n", 'COEFF'(op(posn)), RHS_factor_name,
+ coeff_name(posn, coeff_name_prefix))
+ else fprintf(file_name, "%a = %s;\n", 'COEFF'(op(posn)),
+ coeff_name(posn, coeff_name_prefix))
+ end if
+ end proc, posn_list);
+ fclose(file_name);
+ NULL
+end proc
+
+>
+################################################################################
+>
+#
+# This function prints a C expression to compute the interpolant,
+# using the coefficients computed by print_coeff__lc_of_data()
+# (i.e. expressing the interpolant as a linear combination of the
+# data values).
+#
+# Arguments:
+# posn_list = The same list of positions as was used to compute the
+# interpolating polynomial.
+# result_var_name = The (string) name of the variable to which the
+# result is to be assigned.
+# coeff_name_prefix = A prefix string for the coefficient names.
+# data_var_name_prefix = A prefix string for the data variable names.
+# file_name = The file name to write the coefficients to. This is
+# truncated before writing.
+#
+> print_interp_cmpt__lc_of_data :=
+> proc(
+> posn_list::list(list(numeric)),
+> result_var_name::string,
+> coeff_name_prefix::string,
+> data_var_name_prefix::string,
+> file_name::string
+> )
+>
+> ftruncate(file_name);
+>
+> fprintf(file_name, "%s =\n", result_var_name);
+>
+# list of "coeff*data_var" terms
+> map(
+> proc(posn::list(numeric))
+> sprintf("%s*%s",
+> coeff_name(posn,coeff_name_prefix),
+> data_var_name(posn,data_var_name_prefix));
+> end proc
+> ,
+> posn_list
+> );
+>
+> ListTools[Join](%, "\n\t+ ");
+> cat(op(%));
+> fprintf(file_name, "\t%s;\n", %);
+>
+> fclose(file_name);
+>
+> NULL;
+> end proc;
+print_interp_cmpt__lc_of_data := proc(posn_list::list(list(numeric)),
+result_var_name::string, coeff_name_prefix::string,
+data_var_name_prefix::string, file_name::string)
+ ftruncate(file_name);
+ fprintf(file_name, "%s =\n", result_var_name);
+ map(proc(posn::list(numeric))
+ sprintf("%s*%s", coeff_name(posn, coeff_name_prefix),
+ data_var_name(posn, data_var_name_prefix))
+ end proc, posn_list);
+ ListTools[Join](%, "\n\t+ ");
+ cat(op(%));
+ fprintf(file_name, "\t%s;\n", %);
+ fclose(file_name);
+ NULL
+end proc
+
+>
+################################################################################
+################################################################################
+################################################################################
+>
+#
+# This function computes the name of the coefficient of the data at a
+# given [m] position, i.e. it encapsulates our naming convention for this.
+#
+# Arguments:
+# posn = (in) The [m] coordinates.
+# name_prefix = A prefix string for the coefficient name.
+#
+# Results:
+# The function returns the coefficient, as a Maple string.
+#
+> coeff_name :=
+> proc(posn::list(numeric), name_prefix::string)
+> cat(name_prefix, sprint_numeric_list(posn));
+> end proc;
+coeff_name := proc(posn::list(numeric), name_prefix::string)
+ cat(name_prefix, sprint_numeric_list(posn))
+end proc
+
+>
+################################################################################
+>
+#
+# This function computes the name of the variable in which the C code
+# will store the input data at a given [m] position, i.e. it encapsulates
+# our naming convention for this.
+#
+# Arguments:
+# posn = (in) The [m] coordinates.
+# name_prefix = A prefix string for the variable name.
+#
+# Results:
+# The function returns the variable name, as a Maple string.
+#
+> data_var_name :=
+> proc(posn::list(numeric), name_prefix::string)
+> cat(name_prefix, sprint_numeric_list(posn));
+> end proc;
+data_var_name := proc(posn::list(numeric), name_prefix::string)
+ cat(name_prefix, sprint_numeric_list(posn))
+end proc
+
+# Maple code to compute lists of point positions in hypercube-shaped molecules
+# $Id: $
+>
+################################################################################
+>
+#
+# 1D interpolation points
+#
+> posn_list_1d_size2 := hypercube_points([ 0], [+1]);
+ posn_list_1d_size2 := [[0], [1]]
+
+> posn_list_1d_size3 := hypercube_points([-1], [+1]);
+ posn_list_1d_size3 := [[-1], [0], [1]]
+
+> posn_list_1d_size4 := hypercube_points([-1], [+2]);
+ posn_list_1d_size4 := [[-1], [0], [1], [2]]
+
+> posn_list_1d_size5 := hypercube_points([-2], [+2]);
+ posn_list_1d_size5 := [[-2], [-1], [0], [1], [2]]
+
+> posn_list_1d_size6 := hypercube_points([-2], [+3]);
+ posn_list_1d_size6 := [[-2], [-1], [0], [1], [2], [3]]
+
+> posn_list_1d_size7 := hypercube_points([-3], [+3]);
+ posn_list_1d_size7 := [[-3], [-2], [-1], [0], [1], [2], [3]]
+
+>
+################################################################################
+>
+#
+# 2D interpolation points (Fortran ordering)
+#
+> posn_list_2d_size2 := map(ListTools[Reverse],
+> hypercube_points([ 0, 0], [+1,+1]));
+ posn_list_2d_size2 := [[0, 0], [1, 0], [0, 1], [1, 1]]
+
+> posn_list_2d_size3 := map(ListTools[Reverse],
+> hypercube_points([-1,-1], [+1,+1]));
+posn_list_2d_size3 := [[-1, -1], [0, -1], [1, -1], [-1, 0], [0, 0], [1, 0],
+
+ [-1, 1], [0, 1], [1, 1]]
+
+> posn_list_2d_size4 := map(ListTools[Reverse],
+> hypercube_points([-1,-1], [+2,+2]));
+posn_list_2d_size4 := [[-1, -1], [0, -1], [1, -1], [2, -1], [-1, 0], [0, 0],
+
+ [1, 0], [2, 0], [-1, 1], [0, 1], [1, 1], [2, 1], [-1, 2], [0, 2], [1, 2],
+
+ [2, 2]]
+
+> posn_list_2d_size5 := map(ListTools[Reverse],
+> hypercube_points([-2,-2], [+2,+2]));
+posn_list_2d_size5 := [[-2, -2], [-1, -2], [0, -2], [1, -2], [2, -2], [-2, -1],
+
+ [-1, -1], [0, -1], [1, -1], [2, -1], [-2, 0], [-1, 0], [0, 0], [1, 0],
+
+ [2, 0], [-2, 1], [-1, 1], [0, 1], [1, 1], [2, 1], [-2, 2], [-1, 2], [0, 2],
+
+ [1, 2], [2, 2]]
+
+>
+################################################################################
+>
+#
+# 3D interpolation points (Fortran ordering)
+#
+> posn_list_3d_size2 := map(ListTools[Reverse],
+> hypercube_points([ 0, 0, 0], [+1,+1,+1]));
+posn_list_3d_size2 := [[0, 0, 0], [1, 0, 0], [0, 1, 0], [1, 1, 0], [0, 0, 1],
+
+ [1, 0, 1], [0, 1, 1], [1, 1, 1]]
+
+> posn_list_3d_size3 := map(ListTools[Reverse],
+> hypercube_points([-1,-1,-1], [+1,+1,+1]));
+posn_list_3d_size3 := [[-1, -1, -1], [0, -1, -1], [1, -1, -1], [-1, 0, -1],
+
+ [0, 0, -1], [1, 0, -1], [-1, 1, -1], [0, 1, -1], [1, 1, -1], [-1, -1, 0],
+
+ [0, -1, 0], [1, -1, 0], [-1, 0, 0], [0, 0, 0], [1, 0, 0], [-1, 1, 0],
+
+ [0, 1, 0], [1, 1, 0], [-1, -1, 1], [0, -1, 1], [1, -1, 1], [-1, 0, 1],
+
+ [0, 0, 1], [1, 0, 1], [-1, 1, 1], [0, 1, 1], [1, 1, 1]]
+
+> posn_list_3d_size4 := map(ListTools[Reverse],
+> hypercube_points([-1,-1,-1], [+2,+2,+2]));
+posn_list_3d_size4 := [[-1, -1, -1], [0, -1, -1], [1, -1, -1], [2, -1, -1],
+
+ [-1, 0, -1], [0, 0, -1], [1, 0, -1], [2, 0, -1], [-1, 1, -1], [0, 1, -1],
+
+ [1, 1, -1], [2, 1, -1], [-1, 2, -1], [0, 2, -1], [1, 2, -1], [2, 2, -1],
+
+ [-1, -1, 0], [0, -1, 0], [1, -1, 0], [2, -1, 0], [-1, 0, 0], [0, 0, 0],
+
+ [1, 0, 0], [2, 0, 0], [-1, 1, 0], [0, 1, 0], [1, 1, 0], [2, 1, 0],
+
+ [-1, 2, 0], [0, 2, 0], [1, 2, 0], [2, 2, 0], [-1, -1, 1], [0, -1, 1],
+
+ [1, -1, 1], [2, -1, 1], [-1, 0, 1], [0, 0, 1], [1, 0, 1], [2, 0, 1],
+
+ [-1, 1, 1], [0, 1, 1], [1, 1, 1], [2, 1, 1], [-1, 2, 1], [0, 2, 1],
+
+ [1, 2, 1], [2, 2, 1], [-1, -1, 2], [0, -1, 2], [1, -1, 2], [2, -1, 2],
+
+ [-1, 0, 2], [0, 0, 2], [1, 0, 2], [2, 0, 2], [-1, 1, 2], [0, 1, 2],
+
+ [1, 1, 2], [2, 1, 2], [-1, 2, 2], [0, 2, 2], [1, 2, 2], [2, 2, 2]]
+
+> posn_list_3d_size5 := map(ListTools[Reverse],
+> hypercube_points([-2,-2,-2], [+2,+2,+2]));
+posn_list_3d_size5 := [[-2, -2, -2], [-1, -2, -2], [0, -2, -2], [1, -2, -2],
+
+ [2, -2, -2], [-2, -1, -2], [-1, -1, -2], [0, -1, -2], [1, -1, -2],
+
+ [2, -1, -2], [-2, 0, -2], [-1, 0, -2], [0, 0, -2], [1, 0, -2], [2, 0, -2],
+
+ [-2, 1, -2], [-1, 1, -2], [0, 1, -2], [1, 1, -2], [2, 1, -2], [-2, 2, -2],
+
+ [-1, 2, -2], [0, 2, -2], [1, 2, -2], [2, 2, -2], [-2, -2, -1], [-1, -2, -1],
+
+ [0, -2, -1], [1, -2, -1], [2, -2, -1], [-2, -1, -1], [-1, -1, -1],
+
+ [0, -1, -1], [1, -1, -1], [2, -1, -1], [-2, 0, -1], [-1, 0, -1], [0, 0, -1],
+
+ [1, 0, -1], [2, 0, -1], [-2, 1, -1], [-1, 1, -1], [0, 1, -1], [1, 1, -1],
+
+ [2, 1, -1], [-2, 2, -1], [-1, 2, -1], [0, 2, -1], [1, 2, -1], [2, 2, -1],
+
+ [-2, -2, 0], [-1, -2, 0], [0, -2, 0], [1, -2, 0], [2, -2, 0], [-2, -1, 0],
+
+ [-1, -1, 0], [0, -1, 0], [1, -1, 0], [2, -1, 0], [-2, 0, 0], [-1, 0, 0],
+
+ [0, 0, 0], [1, 0, 0], [2, 0, 0], [-2, 1, 0], [-1, 1, 0], [0, 1, 0],
+
+ [1, 1, 0], [2, 1, 0], [-2, 2, 0], [-1, 2, 0], [0, 2, 0], [1, 2, 0],
+
+ [2, 2, 0], [-2, -2, 1], [-1, -2, 1], [0, -2, 1], [1, -2, 1], [2, -2, 1],
+
+ [-2, -1, 1], [-1, -1, 1], [0, -1, 1], [1, -1, 1], [2, -1, 1], [-2, 0, 1],
+
+ [-1, 0, 1], [0, 0, 1], [1, 0, 1], [2, 0, 1], [-2, 1, 1], [-1, 1, 1],
+
+ [0, 1, 1], [1, 1, 1], [2, 1, 1], [-2, 2, 1], [-1, 2, 1], [0, 2, 1],
+
+ [1, 2, 1], [2, 2, 1], [-2, -2, 2], [-1, -2, 2], [0, -2, 2], [1, -2, 2],
+
+ [2, -2, 2], [-2, -1, 2], [-1, -1, 2], [0, -1, 2], [1, -1, 2], [2, -1, 2],
+
+ [-2, 0, 2], [-1, 0, 2], [0, 0, 2], [1, 0, 2], [2, 0, 2], [-2, 1, 2],
+
+ [-1, 1, 2], [0, 1, 2], [1, 1, 2], [2, 1, 2], [-2, 2, 2], [-1, 2, 2],
+
+ [0, 2, 2], [1, 2, 2], [2, 2, 2]]
+
+# Maple code to compute common coefficients for all 2d interpolation schemes
+# $Id: 2d.maple,v 1.3 2002/05/14 15:54:01 jthorn Exp $
+>
+################################################################################
+>
+#
+# generic stuff for 2d, cube, size=2
+#
+>
+> data_var_list_2d_size2 := map(data_var_name, posn_list_2d_size2, "data_");
+ data_var_list_2d_size2 := ["data_0_0", "data_p1_0", "data_0_p1", "data_p1_p1"]
+
+>
+> print_name_list_dcl(data_var_list_2d_size2, "fp",
+> "2d.cube.size2/data-var.dcl.c");
+> print_data_var_assign(posn_list_2d_size2, "data_",
+> "2d.cube.size2/data-var.assign.c");
+>
+> print_interp_coeff_var_store(posn_list_2d_size2, "", "coeff_I_",
+> "2d.cube.size2/coeff-I.store.c");
+> print_interp_coeff_var_store(posn_list_2d_size2, "factor", "coeff_dx_",
+> "2d.cube.size2/coeff-dx.store.c");
+> print_interp_coeff_var_store(posn_list_2d_size2, "factor", "coeff_dy_",
+> "2d.cube.size2/coeff-dy.store.c");
+>
+> print_name_list_dcl(map(coeff_name, posn_list_2d_size2, "coeff_I_"), "fp",
+> "2d.cube.size2/coeff-I.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_2d_size2, "coeff_dx_"), "fp",
+> "2d.cube.size2/coeff-dx.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_2d_size2, "coeff_dy_"), "fp",
+> "2d.cube.size2/coeff-dy.dcl.c");
+>
+> print_interp_cmpt__lc_of_data(posn_list_2d_size2,
+> "result", "coeff_I_", "data_",
+> "2d.cube.size2/interp-I.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_2d_size2,
+> "result", "coeff_dx_", "data_",
+> "2d.cube.size2/interp-dx.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_2d_size2,
+> "result", "coeff_dy_", "data_",
+> "2d.cube.size2/interp-dy.compute.c");
+>
+################################################################################
+>
+#
+# generic stuff for 2d, cube, size=3
+#
+>
+> data_var_list_2d_size3 := map(data_var_name, posn_list_2d_size3, "data_");
+data_var_list_2d_size3 := ["data_m1_m1", "data_0_m1", "data_p1_m1", "data_m1_0",
+
+ "data_0_0", "data_p1_0", "data_m1_p1", "data_0_p1", "data_p1_p1"]
+
+>
+> print_name_list_dcl(data_var_list_2d_size3, "fp",
+> "2d.cube.size3/data-var.dcl.c");
+> print_data_var_assign(posn_list_2d_size3, "data_",
+> "2d.cube.size3/data-var.assign.c");
+>
+> print_interp_coeff_var_store(posn_list_2d_size3, "", "coeff_I_",
+> "2d.cube.size3/coeff-I.store.c");
+> print_interp_coeff_var_store(posn_list_2d_size3, "factor", "coeff_dx_",
+> "2d.cube.size3/coeff-dx.store.c");
+> print_interp_coeff_var_store(posn_list_2d_size3, "factor", "coeff_dy_",
+> "2d.cube.size3/coeff-dy.store.c");
+> print_interp_coeff_var_store(posn_list_2d_size3, "factor", "coeff_dxx_",
+> "2d.cube.size3/coeff-dxx.store.c");
+> print_interp_coeff_var_store(posn_list_2d_size3, "factor", "coeff_dxy_",
+> "2d.cube.size3/coeff-dxy.store.c");
+> print_interp_coeff_var_store(posn_list_2d_size3, "factor", "coeff_dyy_",
+> "2d.cube.size3/coeff-dyy.store.c");
+>
+> print_name_list_dcl(map(coeff_name, posn_list_2d_size3, "coeff_I_"), "fp",
+> "2d.cube.size3/coeff-I.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_2d_size3, "coeff_dx_"), "fp",
+> "2d.cube.size3/coeff-dx.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_2d_size3, "coeff_dy_"), "fp",
+> "2d.cube.size3/coeff-dy.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_2d_size3, "coeff_dxx_"), "fp",
+> "2d.cube.size3/coeff-dxx.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_2d_size3, "coeff_dxy_"), "fp",
+> "2d.cube.size3/coeff-dxy.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_2d_size3, "coeff_dyy_"), "fp",
+> "2d.cube.size3/coeff-dyy.dcl.c");
+>
+> print_interp_cmpt__lc_of_data(posn_list_2d_size3,
+> "result", "coeff_I_", "data_",
+> "2d.cube.size3/interp-I.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_2d_size3,
+> "result", "coeff_dx_", "data_",
+> "2d.cube.size3/interp-dx.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_2d_size3,
+> "result", "coeff_dy_", "data_",
+> "2d.cube.size3/interp-dy.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_2d_size3,
+> "result", "coeff_dxx_", "data_",
+> "2d.cube.size3/interp-dxx.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_2d_size3,
+> "result", "coeff_dxy_", "data_",
+> "2d.cube.size3/interp-dxy.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_2d_size3,
+> "result", "coeff_dyy_", "data_",
+> "2d.cube.size3/interp-dyy.compute.c");
+>
+################################################################################
+>
+#
+# generic stuff for 2d, cube, size=4
+#
+>
+> data_var_list_2d_size4 := map(data_var_name, posn_list_2d_size4, "data_");
+data_var_list_2d_size4 := ["data_m1_m1", "data_0_m1", "data_p1_m1",
+
+ "data_p2_m1", "data_m1_0", "data_0_0", "data_p1_0", "data_p2_0",
+
+ "data_m1_p1", "data_0_p1", "data_p1_p1", "data_p2_p1", "data_m1_p2",
+
+ "data_0_p2", "data_p1_p2", "data_p2_p2"]
+
+>
+> print_name_list_dcl(data_var_list_2d_size4, "fp",
+> "2d.cube.size4/data-var.dcl.c");
+> print_data_var_assign(posn_list_2d_size4, "data_",
+> "2d.cube.size4/data-var.assign.c");
+>
+> print_interp_coeff_var_store(posn_list_2d_size4, "", "coeff_I_",
+> "2d.cube.size4/coeff-I.store.c");
+> print_interp_coeff_var_store(posn_list_2d_size4, "factor", "coeff_dx_",
+> "2d.cube.size4/coeff-dx.store.c");
+> print_interp_coeff_var_store(posn_list_2d_size4, "factor", "coeff_dy_",
+> "2d.cube.size4/coeff-dy.store.c");
+> print_interp_coeff_var_store(posn_list_2d_size4, "factor", "coeff_dxx_",
+> "2d.cube.size4/coeff-dxx.store.c");
+> print_interp_coeff_var_store(posn_list_2d_size4, "factor", "coeff_dxy_",
+> "2d.cube.size4/coeff-dxy.store.c");
+> print_interp_coeff_var_store(posn_list_2d_size4, "factor", "coeff_dyy_",
+> "2d.cube.size4/coeff-dyy.store.c");
+>
+> print_name_list_dcl(map(coeff_name, posn_list_2d_size4, "coeff_I_"), "fp",
+> "2d.cube.size4/coeff-I.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_2d_size4, "coeff_dx_"), "fp",
+> "2d.cube.size4/coeff-dx.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_2d_size4, "coeff_dy_"), "fp",
+> "2d.cube.size4/coeff-dy.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_2d_size4, "coeff_dxx_"), "fp",
+> "2d.cube.size4/coeff-dxx.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_2d_size4, "coeff_dxy_"), "fp",
+> "2d.cube.size4/coeff-dxy.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_2d_size4, "coeff_dyy_"), "fp",
+> "2d.cube.size4/coeff-dyy.dcl.c");
+>
+> print_interp_cmpt__lc_of_data(posn_list_2d_size4,
+> "result", "coeff_I_", "data_",
+> "2d.cube.size4/interp-I.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_2d_size4,
+> "result", "coeff_dx_", "data_",
+> "2d.cube.size4/interp-dx.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_2d_size4,
+> "result", "coeff_dy_", "data_",
+> "2d.cube.size4/interp-dy.compute.c");
+bytes used=1000024, alloc=917336, time=0.17
+> print_interp_cmpt__lc_of_data(posn_list_2d_size4,
+> "result", "coeff_dxx_", "data_",
+> "2d.cube.size4/interp-dxx.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_2d_size4,
+> "result", "coeff_dxy_", "data_",
+> "2d.cube.size4/interp-dxy.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_2d_size4,
+> "result", "coeff_dyy_", "data_",
+> "2d.cube.size4/interp-dyy.compute.c");
+>
+################################################################################
+>
+#
+# generic stuff for 2d, cube, size=5
+#
+>
+> data_var_list_2d_size5 := map(data_var_name, posn_list_2d_size5, "data_");
+data_var_list_2d_size5 := ["data_m2_m2", "data_m1_m2", "data_0_m2",
+
+ "data_p1_m2", "data_p2_m2", "data_m2_m1", "data_m1_m1", "data_0_m1",
+
+ "data_p1_m1", "data_p2_m1", "data_m2_0", "data_m1_0", "data_0_0",
+
+ "data_p1_0", "data_p2_0", "data_m2_p1", "data_m1_p1", "data_0_p1",
+
+ "data_p1_p1", "data_p2_p1", "data_m2_p2", "data_m1_p2", "data_0_p2",
+
+ "data_p1_p2", "data_p2_p2"]
+
+>
+> print_name_list_dcl(data_var_list_2d_size5, "fp",
+> "2d.cube.size5/data-var.dcl.c");
+> print_data_var_assign(posn_list_2d_size5, "data_",
+> "2d.cube.size5/data-var.assign.c");
+>
+> print_interp_coeff_var_store(posn_list_2d_size5, "", "coeff_I_",
+> "2d.cube.size5/coeff-I.store.c");
+> print_interp_coeff_var_store(posn_list_2d_size5, "factor", "coeff_dx_",
+> "2d.cube.size5/coeff-dx.store.c");
+> print_interp_coeff_var_store(posn_list_2d_size5, "factor", "coeff_dy_",
+> "2d.cube.size5/coeff-dy.store.c");
+> print_interp_coeff_var_store(posn_list_2d_size5, "factor", "coeff_dxx_",
+> "2d.cube.size5/coeff-dxx.store.c");
+> print_interp_coeff_var_store(posn_list_2d_size5, "factor", "coeff_dxy_",
+> "2d.cube.size5/coeff-dxy.store.c");
+> print_interp_coeff_var_store(posn_list_2d_size5, "factor", "coeff_dyy_",
+> "2d.cube.size5/coeff-dyy.store.c");
+>
+> print_name_list_dcl(map(coeff_name, posn_list_2d_size5, "coeff_I_"), "fp",
+> "2d.cube.size5/coeff-I.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_2d_size5, "coeff_dx_"), "fp",
+> "2d.cube.size5/coeff-dx.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_2d_size5, "coeff_dy_"), "fp",
+> "2d.cube.size5/coeff-dy.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_2d_size5, "coeff_dxx_"), "fp",
+> "2d.cube.size5/coeff-dxx.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_2d_size5, "coeff_dxy_"), "fp",
+> "2d.cube.size5/coeff-dxy.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_2d_size5, "coeff_dyy_"), "fp",
+> "2d.cube.size5/coeff-dyy.dcl.c");
+>
+> print_interp_cmpt__lc_of_data(posn_list_2d_size5,
+> "result", "coeff_I_", "data_",
+> "2d.cube.size5/interp-I.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_2d_size5,
+> "result", "coeff_dx_", "data_",
+> "2d.cube.size5/interp-dx.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_2d_size5,
+> "result", "coeff_dy_", "data_",
+> "2d.cube.size5/interp-dy.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_2d_size5,
+> "result", "coeff_dxx_", "data_",
+> "2d.cube.size5/interp-dxx.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_2d_size5,
+> "result", "coeff_dxy_", "data_",
+> "2d.cube.size5/interp-dxy.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_2d_size5,
+> "result", "coeff_dyy_", "data_",
+> "2d.cube.size5/interp-dyy.compute.c");
+>
+################################################################################
+> quit
+bytes used=1720848, alloc=917336, time=0.31
diff --git a/src/GeneralizedPolynomial-Uniform/common/2d.maple b/src/GeneralizedPolynomial-Uniform/common/2d.maple
new file mode 100644
index 0000000..4a7b939
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/2d.maple
@@ -0,0 +1,215 @@
+# Maple code to compute common coefficients for all 2d interpolation schemes
+# $Id$
+
+################################################################################
+
+#
+# generic stuff for 2d, cube, size=2
+#
+
+data_var_list_2d_size2 := map(data_var_name, posn_list_2d_size2, "data_");
+
+print_name_list_dcl(data_var_list_2d_size2, "fp",
+ "2d.cube.size2/data-var.dcl.c");
+print_data_var_assign(posn_list_2d_size2, "data_",
+ "2d.cube.size2/data-var.assign.c");
+
+print_interp_coeff_var_store(posn_list_2d_size2, "", "coeff_I_",
+ "2d.cube.size2/coeff-I.store.c");
+print_interp_coeff_var_store(posn_list_2d_size2, "factor", "coeff_dx_",
+ "2d.cube.size2/coeff-dx.store.c");
+print_interp_coeff_var_store(posn_list_2d_size2, "factor", "coeff_dy_",
+ "2d.cube.size2/coeff-dy.store.c");
+
+print_name_list_dcl(map(coeff_name, posn_list_2d_size2, "coeff_I_"), "fp",
+ "2d.cube.size2/coeff-I.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_2d_size2, "coeff_dx_"), "fp",
+ "2d.cube.size2/coeff-dx.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_2d_size2, "coeff_dy_"), "fp",
+ "2d.cube.size2/coeff-dy.dcl.c");
+
+print_interp_cmpt__lc_of_data(posn_list_2d_size2,
+ "result", "coeff_I_", "data_",
+ "2d.cube.size2/interp-I.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_2d_size2,
+ "result", "coeff_dx_", "data_",
+ "2d.cube.size2/interp-dx.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_2d_size2,
+ "result", "coeff_dy_", "data_",
+ "2d.cube.size2/interp-dy.compute.c");
+
+################################################################################
+
+#
+# generic stuff for 2d, cube, size=3
+#
+
+data_var_list_2d_size3 := map(data_var_name, posn_list_2d_size3, "data_");
+
+print_name_list_dcl(data_var_list_2d_size3, "fp",
+ "2d.cube.size3/data-var.dcl.c");
+print_data_var_assign(posn_list_2d_size3, "data_",
+ "2d.cube.size3/data-var.assign.c");
+
+print_interp_coeff_var_store(posn_list_2d_size3, "", "coeff_I_",
+ "2d.cube.size3/coeff-I.store.c");
+print_interp_coeff_var_store(posn_list_2d_size3, "factor", "coeff_dx_",
+ "2d.cube.size3/coeff-dx.store.c");
+print_interp_coeff_var_store(posn_list_2d_size3, "factor", "coeff_dy_",
+ "2d.cube.size3/coeff-dy.store.c");
+print_interp_coeff_var_store(posn_list_2d_size3, "factor", "coeff_dxx_",
+ "2d.cube.size3/coeff-dxx.store.c");
+print_interp_coeff_var_store(posn_list_2d_size3, "factor", "coeff_dxy_",
+ "2d.cube.size3/coeff-dxy.store.c");
+print_interp_coeff_var_store(posn_list_2d_size3, "factor", "coeff_dyy_",
+ "2d.cube.size3/coeff-dyy.store.c");
+
+print_name_list_dcl(map(coeff_name, posn_list_2d_size3, "coeff_I_"), "fp",
+ "2d.cube.size3/coeff-I.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_2d_size3, "coeff_dx_"), "fp",
+ "2d.cube.size3/coeff-dx.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_2d_size3, "coeff_dy_"), "fp",
+ "2d.cube.size3/coeff-dy.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_2d_size3, "coeff_dxx_"), "fp",
+ "2d.cube.size3/coeff-dxx.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_2d_size3, "coeff_dxy_"), "fp",
+ "2d.cube.size3/coeff-dxy.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_2d_size3, "coeff_dyy_"), "fp",
+ "2d.cube.size3/coeff-dyy.dcl.c");
+
+print_interp_cmpt__lc_of_data(posn_list_2d_size3,
+ "result", "coeff_I_", "data_",
+ "2d.cube.size3/interp-I.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_2d_size3,
+ "result", "coeff_dx_", "data_",
+ "2d.cube.size3/interp-dx.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_2d_size3,
+ "result", "coeff_dy_", "data_",
+ "2d.cube.size3/interp-dy.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_2d_size3,
+ "result", "coeff_dxx_", "data_",
+ "2d.cube.size3/interp-dxx.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_2d_size3,
+ "result", "coeff_dxy_", "data_",
+ "2d.cube.size3/interp-dxy.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_2d_size3,
+ "result", "coeff_dyy_", "data_",
+ "2d.cube.size3/interp-dyy.compute.c");
+
+################################################################################
+
+#
+# generic stuff for 2d, cube, size=4
+#
+
+data_var_list_2d_size4 := map(data_var_name, posn_list_2d_size4, "data_");
+
+print_name_list_dcl(data_var_list_2d_size4, "fp",
+ "2d.cube.size4/data-var.dcl.c");
+print_data_var_assign(posn_list_2d_size4, "data_",
+ "2d.cube.size4/data-var.assign.c");
+
+print_interp_coeff_var_store(posn_list_2d_size4, "", "coeff_I_",
+ "2d.cube.size4/coeff-I.store.c");
+print_interp_coeff_var_store(posn_list_2d_size4, "factor", "coeff_dx_",
+ "2d.cube.size4/coeff-dx.store.c");
+print_interp_coeff_var_store(posn_list_2d_size4, "factor", "coeff_dy_",
+ "2d.cube.size4/coeff-dy.store.c");
+print_interp_coeff_var_store(posn_list_2d_size4, "factor", "coeff_dxx_",
+ "2d.cube.size4/coeff-dxx.store.c");
+print_interp_coeff_var_store(posn_list_2d_size4, "factor", "coeff_dxy_",
+ "2d.cube.size4/coeff-dxy.store.c");
+print_interp_coeff_var_store(posn_list_2d_size4, "factor", "coeff_dyy_",
+ "2d.cube.size4/coeff-dyy.store.c");
+
+print_name_list_dcl(map(coeff_name, posn_list_2d_size4, "coeff_I_"), "fp",
+ "2d.cube.size4/coeff-I.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_2d_size4, "coeff_dx_"), "fp",
+ "2d.cube.size4/coeff-dx.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_2d_size4, "coeff_dy_"), "fp",
+ "2d.cube.size4/coeff-dy.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_2d_size4, "coeff_dxx_"), "fp",
+ "2d.cube.size4/coeff-dxx.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_2d_size4, "coeff_dxy_"), "fp",
+ "2d.cube.size4/coeff-dxy.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_2d_size4, "coeff_dyy_"), "fp",
+ "2d.cube.size4/coeff-dyy.dcl.c");
+
+print_interp_cmpt__lc_of_data(posn_list_2d_size4,
+ "result", "coeff_I_", "data_",
+ "2d.cube.size4/interp-I.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_2d_size4,
+ "result", "coeff_dx_", "data_",
+ "2d.cube.size4/interp-dx.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_2d_size4,
+ "result", "coeff_dy_", "data_",
+ "2d.cube.size4/interp-dy.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_2d_size4,
+ "result", "coeff_dxx_", "data_",
+ "2d.cube.size4/interp-dxx.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_2d_size4,
+ "result", "coeff_dxy_", "data_",
+ "2d.cube.size4/interp-dxy.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_2d_size4,
+ "result", "coeff_dyy_", "data_",
+ "2d.cube.size4/interp-dyy.compute.c");
+
+################################################################################
+
+#
+# generic stuff for 2d, cube, size=5
+#
+
+data_var_list_2d_size5 := map(data_var_name, posn_list_2d_size5, "data_");
+
+print_name_list_dcl(data_var_list_2d_size5, "fp",
+ "2d.cube.size5/data-var.dcl.c");
+print_data_var_assign(posn_list_2d_size5, "data_",
+ "2d.cube.size5/data-var.assign.c");
+
+print_interp_coeff_var_store(posn_list_2d_size5, "", "coeff_I_",
+ "2d.cube.size5/coeff-I.store.c");
+print_interp_coeff_var_store(posn_list_2d_size5, "factor", "coeff_dx_",
+ "2d.cube.size5/coeff-dx.store.c");
+print_interp_coeff_var_store(posn_list_2d_size5, "factor", "coeff_dy_",
+ "2d.cube.size5/coeff-dy.store.c");
+print_interp_coeff_var_store(posn_list_2d_size5, "factor", "coeff_dxx_",
+ "2d.cube.size5/coeff-dxx.store.c");
+print_interp_coeff_var_store(posn_list_2d_size5, "factor", "coeff_dxy_",
+ "2d.cube.size5/coeff-dxy.store.c");
+print_interp_coeff_var_store(posn_list_2d_size5, "factor", "coeff_dyy_",
+ "2d.cube.size5/coeff-dyy.store.c");
+
+print_name_list_dcl(map(coeff_name, posn_list_2d_size5, "coeff_I_"), "fp",
+ "2d.cube.size5/coeff-I.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_2d_size5, "coeff_dx_"), "fp",
+ "2d.cube.size5/coeff-dx.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_2d_size5, "coeff_dy_"), "fp",
+ "2d.cube.size5/coeff-dy.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_2d_size5, "coeff_dxx_"), "fp",
+ "2d.cube.size5/coeff-dxx.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_2d_size5, "coeff_dxy_"), "fp",
+ "2d.cube.size5/coeff-dxy.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_2d_size5, "coeff_dyy_"), "fp",
+ "2d.cube.size5/coeff-dyy.dcl.c");
+
+print_interp_cmpt__lc_of_data(posn_list_2d_size5,
+ "result", "coeff_I_", "data_",
+ "2d.cube.size5/interp-I.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_2d_size5,
+ "result", "coeff_dx_", "data_",
+ "2d.cube.size5/interp-dx.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_2d_size5,
+ "result", "coeff_dy_", "data_",
+ "2d.cube.size5/interp-dy.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_2d_size5,
+ "result", "coeff_dxx_", "data_",
+ "2d.cube.size5/interp-dxx.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_2d_size5,
+ "result", "coeff_dxy_", "data_",
+ "2d.cube.size5/interp-dxy.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_2d_size5,
+ "result", "coeff_dyy_", "data_",
+ "2d.cube.size5/interp-dyy.compute.c");
+
+################################################################################
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-I.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-I.dcl.c
new file mode 100644
index 0000000..601e5c7
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-I.dcl.c
@@ -0,0 +1,8 @@
+fp coeff_I_0_0_0,
+ coeff_I_p1_0_0,
+ coeff_I_0_p1_0,
+ coeff_I_p1_p1_0,
+ coeff_I_0_0_p1,
+ coeff_I_p1_0_p1,
+ coeff_I_0_p1_p1,
+ coeff_I_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-I.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-I.store.c
new file mode 100644
index 0000000..b90f5e0
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-I.store.c
@@ -0,0 +1,8 @@
+COEFF(0,0,0) = coeff_I_0_0_0;
+COEFF(1,0,0) = coeff_I_p1_0_0;
+COEFF(0,1,0) = coeff_I_0_p1_0;
+COEFF(1,1,0) = coeff_I_p1_p1_0;
+COEFF(0,0,1) = coeff_I_0_0_p1;
+COEFF(1,0,1) = coeff_I_p1_0_p1;
+COEFF(0,1,1) = coeff_I_0_p1_p1;
+COEFF(1,1,1) = coeff_I_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dx.dcl.c
new file mode 100644
index 0000000..c546b35
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dx.dcl.c
@@ -0,0 +1,8 @@
+fp coeff_dx_0_0_0,
+ coeff_dx_p1_0_0,
+ coeff_dx_0_p1_0,
+ coeff_dx_p1_p1_0,
+ coeff_dx_0_0_p1,
+ coeff_dx_p1_0_p1,
+ coeff_dx_0_p1_p1,
+ coeff_dx_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dx.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dx.store.c
new file mode 100644
index 0000000..469dacf
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dx.store.c
@@ -0,0 +1,8 @@
+COEFF(0,0,0) = factor * coeff_dx_0_0_0;
+COEFF(1,0,0) = factor * coeff_dx_p1_0_0;
+COEFF(0,1,0) = factor * coeff_dx_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dx_p1_p1_0;
+COEFF(0,0,1) = factor * coeff_dx_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dx_p1_0_p1;
+COEFF(0,1,1) = factor * coeff_dx_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dx_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dy.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dy.dcl.c
new file mode 100644
index 0000000..4e5bbb6
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dy.dcl.c
@@ -0,0 +1,8 @@
+fp coeff_dy_0_0_0,
+ coeff_dy_p1_0_0,
+ coeff_dy_0_p1_0,
+ coeff_dy_p1_p1_0,
+ coeff_dy_0_0_p1,
+ coeff_dy_p1_0_p1,
+ coeff_dy_0_p1_p1,
+ coeff_dy_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dy.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dy.store.c
new file mode 100644
index 0000000..cd659de
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dy.store.c
@@ -0,0 +1,8 @@
+COEFF(0,0,0) = factor * coeff_dy_0_0_0;
+COEFF(1,0,0) = factor * coeff_dy_p1_0_0;
+COEFF(0,1,0) = factor * coeff_dy_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dy_p1_p1_0;
+COEFF(0,0,1) = factor * coeff_dy_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dy_p1_0_p1;
+COEFF(0,1,1) = factor * coeff_dy_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dy_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dz.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dz.dcl.c
new file mode 100644
index 0000000..3ee8587
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dz.dcl.c
@@ -0,0 +1,8 @@
+fp coeff_dz_0_0_0,
+ coeff_dz_p1_0_0,
+ coeff_dz_0_p1_0,
+ coeff_dz_p1_p1_0,
+ coeff_dz_0_0_p1,
+ coeff_dz_p1_0_p1,
+ coeff_dz_0_p1_p1,
+ coeff_dz_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dz.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dz.store.c
new file mode 100644
index 0000000..30ae20c
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/coeff-dz.store.c
@@ -0,0 +1,8 @@
+COEFF(0,0,0) = factor * coeff_dz_0_0_0;
+COEFF(1,0,0) = factor * coeff_dz_p1_0_0;
+COEFF(0,1,0) = factor * coeff_dz_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dz_p1_p1_0;
+COEFF(0,0,1) = factor * coeff_dz_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dz_p1_0_p1;
+COEFF(0,1,1) = factor * coeff_dz_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dz_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/data-var.assign.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/data-var.assign.c
new file mode 100644
index 0000000..81a6619
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/data-var.assign.c
@@ -0,0 +1,8 @@
+data_0_0_0 = DATA(0,0,0);
+data_p1_0_0 = DATA(1,0,0);
+data_0_p1_0 = DATA(0,1,0);
+data_p1_p1_0 = DATA(1,1,0);
+data_0_0_p1 = DATA(0,0,1);
+data_p1_0_p1 = DATA(1,0,1);
+data_0_p1_p1 = DATA(0,1,1);
+data_p1_p1_p1 = DATA(1,1,1);
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/data-var.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/data-var.dcl.c
new file mode 100644
index 0000000..f1e21eb
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/data-var.dcl.c
@@ -0,0 +1,8 @@
+fp data_0_0_0,
+ data_p1_0_0,
+ data_0_p1_0,
+ data_p1_p1_0,
+ data_0_0_p1,
+ data_p1_0_p1,
+ data_0_p1_p1,
+ data_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/interp-I.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/interp-I.compute.c
new file mode 100644
index 0000000..3997d06
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/interp-I.compute.c
@@ -0,0 +1,9 @@
+result =
+ coeff_I_0_0_0*data_0_0_0
+ + coeff_I_p1_0_0*data_p1_0_0
+ + coeff_I_0_p1_0*data_0_p1_0
+ + coeff_I_p1_p1_0*data_p1_p1_0
+ + coeff_I_0_0_p1*data_0_0_p1
+ + coeff_I_p1_0_p1*data_p1_0_p1
+ + coeff_I_0_p1_p1*data_0_p1_p1
+ + coeff_I_p1_p1_p1*data_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/interp-dx.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/interp-dx.compute.c
new file mode 100644
index 0000000..452f263
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/interp-dx.compute.c
@@ -0,0 +1,9 @@
+result =
+ coeff_dx_0_0_0*data_0_0_0
+ + coeff_dx_p1_0_0*data_p1_0_0
+ + coeff_dx_0_p1_0*data_0_p1_0
+ + coeff_dx_p1_p1_0*data_p1_p1_0
+ + coeff_dx_0_0_p1*data_0_0_p1
+ + coeff_dx_p1_0_p1*data_p1_0_p1
+ + coeff_dx_0_p1_p1*data_0_p1_p1
+ + coeff_dx_p1_p1_p1*data_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/interp-dy.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/interp-dy.compute.c
new file mode 100644
index 0000000..e659b18
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/interp-dy.compute.c
@@ -0,0 +1,9 @@
+result =
+ coeff_dy_0_0_0*data_0_0_0
+ + coeff_dy_p1_0_0*data_p1_0_0
+ + coeff_dy_0_p1_0*data_0_p1_0
+ + coeff_dy_p1_p1_0*data_p1_p1_0
+ + coeff_dy_0_0_p1*data_0_0_p1
+ + coeff_dy_p1_0_p1*data_p1_0_p1
+ + coeff_dy_0_p1_p1*data_0_p1_p1
+ + coeff_dy_p1_p1_p1*data_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/interp-dz.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/interp-dz.compute.c
new file mode 100644
index 0000000..0074979
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size2/interp-dz.compute.c
@@ -0,0 +1,9 @@
+result =
+ coeff_dz_0_0_0*data_0_0_0
+ + coeff_dz_p1_0_0*data_p1_0_0
+ + coeff_dz_0_p1_0*data_0_p1_0
+ + coeff_dz_p1_p1_0*data_p1_p1_0
+ + coeff_dz_0_0_p1*data_0_0_p1
+ + coeff_dz_p1_0_p1*data_p1_0_p1
+ + coeff_dz_0_p1_p1*data_0_p1_p1
+ + coeff_dz_p1_p1_p1*data_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-I.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-I.dcl.c
new file mode 100644
index 0000000..4cf0632
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-I.dcl.c
@@ -0,0 +1,27 @@
+fp coeff_I_m1_m1_m1,
+ coeff_I_0_m1_m1,
+ coeff_I_p1_m1_m1,
+ coeff_I_m1_0_m1,
+ coeff_I_0_0_m1,
+ coeff_I_p1_0_m1,
+ coeff_I_m1_p1_m1,
+ coeff_I_0_p1_m1,
+ coeff_I_p1_p1_m1,
+ coeff_I_m1_m1_0,
+ coeff_I_0_m1_0,
+ coeff_I_p1_m1_0,
+ coeff_I_m1_0_0,
+ coeff_I_0_0_0,
+ coeff_I_p1_0_0,
+ coeff_I_m1_p1_0,
+ coeff_I_0_p1_0,
+ coeff_I_p1_p1_0,
+ coeff_I_m1_m1_p1,
+ coeff_I_0_m1_p1,
+ coeff_I_p1_m1_p1,
+ coeff_I_m1_0_p1,
+ coeff_I_0_0_p1,
+ coeff_I_p1_0_p1,
+ coeff_I_m1_p1_p1,
+ coeff_I_0_p1_p1,
+ coeff_I_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-I.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-I.store.c
new file mode 100644
index 0000000..fd656b0
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-I.store.c
@@ -0,0 +1,27 @@
+COEFF(-1,-1,-1) = coeff_I_m1_m1_m1;
+COEFF(0,-1,-1) = coeff_I_0_m1_m1;
+COEFF(1,-1,-1) = coeff_I_p1_m1_m1;
+COEFF(-1,0,-1) = coeff_I_m1_0_m1;
+COEFF(0,0,-1) = coeff_I_0_0_m1;
+COEFF(1,0,-1) = coeff_I_p1_0_m1;
+COEFF(-1,1,-1) = coeff_I_m1_p1_m1;
+COEFF(0,1,-1) = coeff_I_0_p1_m1;
+COEFF(1,1,-1) = coeff_I_p1_p1_m1;
+COEFF(-1,-1,0) = coeff_I_m1_m1_0;
+COEFF(0,-1,0) = coeff_I_0_m1_0;
+COEFF(1,-1,0) = coeff_I_p1_m1_0;
+COEFF(-1,0,0) = coeff_I_m1_0_0;
+COEFF(0,0,0) = coeff_I_0_0_0;
+COEFF(1,0,0) = coeff_I_p1_0_0;
+COEFF(-1,1,0) = coeff_I_m1_p1_0;
+COEFF(0,1,0) = coeff_I_0_p1_0;
+COEFF(1,1,0) = coeff_I_p1_p1_0;
+COEFF(-1,-1,1) = coeff_I_m1_m1_p1;
+COEFF(0,-1,1) = coeff_I_0_m1_p1;
+COEFF(1,-1,1) = coeff_I_p1_m1_p1;
+COEFF(-1,0,1) = coeff_I_m1_0_p1;
+COEFF(0,0,1) = coeff_I_0_0_p1;
+COEFF(1,0,1) = coeff_I_p1_0_p1;
+COEFF(-1,1,1) = coeff_I_m1_p1_p1;
+COEFF(0,1,1) = coeff_I_0_p1_p1;
+COEFF(1,1,1) = coeff_I_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dx.dcl.c
new file mode 100644
index 0000000..9fc8711
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dx.dcl.c
@@ -0,0 +1,27 @@
+fp coeff_dx_m1_m1_m1,
+ coeff_dx_0_m1_m1,
+ coeff_dx_p1_m1_m1,
+ coeff_dx_m1_0_m1,
+ coeff_dx_0_0_m1,
+ coeff_dx_p1_0_m1,
+ coeff_dx_m1_p1_m1,
+ coeff_dx_0_p1_m1,
+ coeff_dx_p1_p1_m1,
+ coeff_dx_m1_m1_0,
+ coeff_dx_0_m1_0,
+ coeff_dx_p1_m1_0,
+ coeff_dx_m1_0_0,
+ coeff_dx_0_0_0,
+ coeff_dx_p1_0_0,
+ coeff_dx_m1_p1_0,
+ coeff_dx_0_p1_0,
+ coeff_dx_p1_p1_0,
+ coeff_dx_m1_m1_p1,
+ coeff_dx_0_m1_p1,
+ coeff_dx_p1_m1_p1,
+ coeff_dx_m1_0_p1,
+ coeff_dx_0_0_p1,
+ coeff_dx_p1_0_p1,
+ coeff_dx_m1_p1_p1,
+ coeff_dx_0_p1_p1,
+ coeff_dx_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dx.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dx.store.c
new file mode 100644
index 0000000..e6b27e8
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dx.store.c
@@ -0,0 +1,27 @@
+COEFF(-1,-1,-1) = factor * coeff_dx_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dx_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dx_p1_m1_m1;
+COEFF(-1,0,-1) = factor * coeff_dx_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dx_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dx_p1_0_m1;
+COEFF(-1,1,-1) = factor * coeff_dx_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dx_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dx_p1_p1_m1;
+COEFF(-1,-1,0) = factor * coeff_dx_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dx_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dx_p1_m1_0;
+COEFF(-1,0,0) = factor * coeff_dx_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dx_0_0_0;
+COEFF(1,0,0) = factor * coeff_dx_p1_0_0;
+COEFF(-1,1,0) = factor * coeff_dx_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dx_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dx_p1_p1_0;
+COEFF(-1,-1,1) = factor * coeff_dx_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dx_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dx_p1_m1_p1;
+COEFF(-1,0,1) = factor * coeff_dx_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dx_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dx_p1_0_p1;
+COEFF(-1,1,1) = factor * coeff_dx_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dx_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dx_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxx.dcl.c
new file mode 100644
index 0000000..27144ed
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxx.dcl.c
@@ -0,0 +1,27 @@
+fp coeff_dxx_m1_m1_m1,
+ coeff_dxx_0_m1_m1,
+ coeff_dxx_p1_m1_m1,
+ coeff_dxx_m1_0_m1,
+ coeff_dxx_0_0_m1,
+ coeff_dxx_p1_0_m1,
+ coeff_dxx_m1_p1_m1,
+ coeff_dxx_0_p1_m1,
+ coeff_dxx_p1_p1_m1,
+ coeff_dxx_m1_m1_0,
+ coeff_dxx_0_m1_0,
+ coeff_dxx_p1_m1_0,
+ coeff_dxx_m1_0_0,
+ coeff_dxx_0_0_0,
+ coeff_dxx_p1_0_0,
+ coeff_dxx_m1_p1_0,
+ coeff_dxx_0_p1_0,
+ coeff_dxx_p1_p1_0,
+ coeff_dxx_m1_m1_p1,
+ coeff_dxx_0_m1_p1,
+ coeff_dxx_p1_m1_p1,
+ coeff_dxx_m1_0_p1,
+ coeff_dxx_0_0_p1,
+ coeff_dxx_p1_0_p1,
+ coeff_dxx_m1_p1_p1,
+ coeff_dxx_0_p1_p1,
+ coeff_dxx_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxx.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxx.store.c
new file mode 100644
index 0000000..83642b3
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxx.store.c
@@ -0,0 +1,27 @@
+COEFF(-1,-1,-1) = factor * coeff_dxx_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dxx_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dxx_p1_m1_m1;
+COEFF(-1,0,-1) = factor * coeff_dxx_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dxx_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dxx_p1_0_m1;
+COEFF(-1,1,-1) = factor * coeff_dxx_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dxx_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dxx_p1_p1_m1;
+COEFF(-1,-1,0) = factor * coeff_dxx_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dxx_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dxx_p1_m1_0;
+COEFF(-1,0,0) = factor * coeff_dxx_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dxx_0_0_0;
+COEFF(1,0,0) = factor * coeff_dxx_p1_0_0;
+COEFF(-1,1,0) = factor * coeff_dxx_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dxx_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dxx_p1_p1_0;
+COEFF(-1,-1,1) = factor * coeff_dxx_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dxx_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dxx_p1_m1_p1;
+COEFF(-1,0,1) = factor * coeff_dxx_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dxx_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dxx_p1_0_p1;
+COEFF(-1,1,1) = factor * coeff_dxx_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dxx_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dxx_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxy.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxy.dcl.c
new file mode 100644
index 0000000..1707bad
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxy.dcl.c
@@ -0,0 +1,27 @@
+fp coeff_dxy_m1_m1_m1,
+ coeff_dxy_0_m1_m1,
+ coeff_dxy_p1_m1_m1,
+ coeff_dxy_m1_0_m1,
+ coeff_dxy_0_0_m1,
+ coeff_dxy_p1_0_m1,
+ coeff_dxy_m1_p1_m1,
+ coeff_dxy_0_p1_m1,
+ coeff_dxy_p1_p1_m1,
+ coeff_dxy_m1_m1_0,
+ coeff_dxy_0_m1_0,
+ coeff_dxy_p1_m1_0,
+ coeff_dxy_m1_0_0,
+ coeff_dxy_0_0_0,
+ coeff_dxy_p1_0_0,
+ coeff_dxy_m1_p1_0,
+ coeff_dxy_0_p1_0,
+ coeff_dxy_p1_p1_0,
+ coeff_dxy_m1_m1_p1,
+ coeff_dxy_0_m1_p1,
+ coeff_dxy_p1_m1_p1,
+ coeff_dxy_m1_0_p1,
+ coeff_dxy_0_0_p1,
+ coeff_dxy_p1_0_p1,
+ coeff_dxy_m1_p1_p1,
+ coeff_dxy_0_p1_p1,
+ coeff_dxy_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxy.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxy.store.c
new file mode 100644
index 0000000..392d64f
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxy.store.c
@@ -0,0 +1,27 @@
+COEFF(-1,-1,-1) = factor * coeff_dxy_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dxy_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dxy_p1_m1_m1;
+COEFF(-1,0,-1) = factor * coeff_dxy_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dxy_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dxy_p1_0_m1;
+COEFF(-1,1,-1) = factor * coeff_dxy_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dxy_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dxy_p1_p1_m1;
+COEFF(-1,-1,0) = factor * coeff_dxy_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dxy_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dxy_p1_m1_0;
+COEFF(-1,0,0) = factor * coeff_dxy_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dxy_0_0_0;
+COEFF(1,0,0) = factor * coeff_dxy_p1_0_0;
+COEFF(-1,1,0) = factor * coeff_dxy_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dxy_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dxy_p1_p1_0;
+COEFF(-1,-1,1) = factor * coeff_dxy_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dxy_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dxy_p1_m1_p1;
+COEFF(-1,0,1) = factor * coeff_dxy_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dxy_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dxy_p1_0_p1;
+COEFF(-1,1,1) = factor * coeff_dxy_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dxy_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dxy_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxz.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxz.dcl.c
new file mode 100644
index 0000000..3ce552e
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxz.dcl.c
@@ -0,0 +1,27 @@
+fp coeff_dxz_m1_m1_m1,
+ coeff_dxz_0_m1_m1,
+ coeff_dxz_p1_m1_m1,
+ coeff_dxz_m1_0_m1,
+ coeff_dxz_0_0_m1,
+ coeff_dxz_p1_0_m1,
+ coeff_dxz_m1_p1_m1,
+ coeff_dxz_0_p1_m1,
+ coeff_dxz_p1_p1_m1,
+ coeff_dxz_m1_m1_0,
+ coeff_dxz_0_m1_0,
+ coeff_dxz_p1_m1_0,
+ coeff_dxz_m1_0_0,
+ coeff_dxz_0_0_0,
+ coeff_dxz_p1_0_0,
+ coeff_dxz_m1_p1_0,
+ coeff_dxz_0_p1_0,
+ coeff_dxz_p1_p1_0,
+ coeff_dxz_m1_m1_p1,
+ coeff_dxz_0_m1_p1,
+ coeff_dxz_p1_m1_p1,
+ coeff_dxz_m1_0_p1,
+ coeff_dxz_0_0_p1,
+ coeff_dxz_p1_0_p1,
+ coeff_dxz_m1_p1_p1,
+ coeff_dxz_0_p1_p1,
+ coeff_dxz_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxz.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxz.store.c
new file mode 100644
index 0000000..add5624
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dxz.store.c
@@ -0,0 +1,27 @@
+COEFF(-1,-1,-1) = factor * coeff_dxz_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dxz_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dxz_p1_m1_m1;
+COEFF(-1,0,-1) = factor * coeff_dxz_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dxz_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dxz_p1_0_m1;
+COEFF(-1,1,-1) = factor * coeff_dxz_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dxz_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dxz_p1_p1_m1;
+COEFF(-1,-1,0) = factor * coeff_dxz_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dxz_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dxz_p1_m1_0;
+COEFF(-1,0,0) = factor * coeff_dxz_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dxz_0_0_0;
+COEFF(1,0,0) = factor * coeff_dxz_p1_0_0;
+COEFF(-1,1,0) = factor * coeff_dxz_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dxz_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dxz_p1_p1_0;
+COEFF(-1,-1,1) = factor * coeff_dxz_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dxz_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dxz_p1_m1_p1;
+COEFF(-1,0,1) = factor * coeff_dxz_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dxz_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dxz_p1_0_p1;
+COEFF(-1,1,1) = factor * coeff_dxz_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dxz_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dxz_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dy.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dy.dcl.c
new file mode 100644
index 0000000..5c3f323
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dy.dcl.c
@@ -0,0 +1,27 @@
+fp coeff_dy_m1_m1_m1,
+ coeff_dy_0_m1_m1,
+ coeff_dy_p1_m1_m1,
+ coeff_dy_m1_0_m1,
+ coeff_dy_0_0_m1,
+ coeff_dy_p1_0_m1,
+ coeff_dy_m1_p1_m1,
+ coeff_dy_0_p1_m1,
+ coeff_dy_p1_p1_m1,
+ coeff_dy_m1_m1_0,
+ coeff_dy_0_m1_0,
+ coeff_dy_p1_m1_0,
+ coeff_dy_m1_0_0,
+ coeff_dy_0_0_0,
+ coeff_dy_p1_0_0,
+ coeff_dy_m1_p1_0,
+ coeff_dy_0_p1_0,
+ coeff_dy_p1_p1_0,
+ coeff_dy_m1_m1_p1,
+ coeff_dy_0_m1_p1,
+ coeff_dy_p1_m1_p1,
+ coeff_dy_m1_0_p1,
+ coeff_dy_0_0_p1,
+ coeff_dy_p1_0_p1,
+ coeff_dy_m1_p1_p1,
+ coeff_dy_0_p1_p1,
+ coeff_dy_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dy.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dy.store.c
new file mode 100644
index 0000000..1be220c
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dy.store.c
@@ -0,0 +1,27 @@
+COEFF(-1,-1,-1) = factor * coeff_dy_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dy_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dy_p1_m1_m1;
+COEFF(-1,0,-1) = factor * coeff_dy_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dy_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dy_p1_0_m1;
+COEFF(-1,1,-1) = factor * coeff_dy_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dy_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dy_p1_p1_m1;
+COEFF(-1,-1,0) = factor * coeff_dy_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dy_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dy_p1_m1_0;
+COEFF(-1,0,0) = factor * coeff_dy_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dy_0_0_0;
+COEFF(1,0,0) = factor * coeff_dy_p1_0_0;
+COEFF(-1,1,0) = factor * coeff_dy_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dy_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dy_p1_p1_0;
+COEFF(-1,-1,1) = factor * coeff_dy_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dy_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dy_p1_m1_p1;
+COEFF(-1,0,1) = factor * coeff_dy_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dy_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dy_p1_0_p1;
+COEFF(-1,1,1) = factor * coeff_dy_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dy_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dy_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dyy.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dyy.dcl.c
new file mode 100644
index 0000000..08b14b5
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dyy.dcl.c
@@ -0,0 +1,27 @@
+fp coeff_dyy_m1_m1_m1,
+ coeff_dyy_0_m1_m1,
+ coeff_dyy_p1_m1_m1,
+ coeff_dyy_m1_0_m1,
+ coeff_dyy_0_0_m1,
+ coeff_dyy_p1_0_m1,
+ coeff_dyy_m1_p1_m1,
+ coeff_dyy_0_p1_m1,
+ coeff_dyy_p1_p1_m1,
+ coeff_dyy_m1_m1_0,
+ coeff_dyy_0_m1_0,
+ coeff_dyy_p1_m1_0,
+ coeff_dyy_m1_0_0,
+ coeff_dyy_0_0_0,
+ coeff_dyy_p1_0_0,
+ coeff_dyy_m1_p1_0,
+ coeff_dyy_0_p1_0,
+ coeff_dyy_p1_p1_0,
+ coeff_dyy_m1_m1_p1,
+ coeff_dyy_0_m1_p1,
+ coeff_dyy_p1_m1_p1,
+ coeff_dyy_m1_0_p1,
+ coeff_dyy_0_0_p1,
+ coeff_dyy_p1_0_p1,
+ coeff_dyy_m1_p1_p1,
+ coeff_dyy_0_p1_p1,
+ coeff_dyy_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dyy.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dyy.store.c
new file mode 100644
index 0000000..28fba0b
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dyy.store.c
@@ -0,0 +1,27 @@
+COEFF(-1,-1,-1) = factor * coeff_dyy_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dyy_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dyy_p1_m1_m1;
+COEFF(-1,0,-1) = factor * coeff_dyy_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dyy_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dyy_p1_0_m1;
+COEFF(-1,1,-1) = factor * coeff_dyy_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dyy_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dyy_p1_p1_m1;
+COEFF(-1,-1,0) = factor * coeff_dyy_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dyy_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dyy_p1_m1_0;
+COEFF(-1,0,0) = factor * coeff_dyy_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dyy_0_0_0;
+COEFF(1,0,0) = factor * coeff_dyy_p1_0_0;
+COEFF(-1,1,0) = factor * coeff_dyy_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dyy_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dyy_p1_p1_0;
+COEFF(-1,-1,1) = factor * coeff_dyy_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dyy_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dyy_p1_m1_p1;
+COEFF(-1,0,1) = factor * coeff_dyy_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dyy_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dyy_p1_0_p1;
+COEFF(-1,1,1) = factor * coeff_dyy_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dyy_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dyy_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dyz.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dyz.dcl.c
new file mode 100644
index 0000000..a3d0575
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dyz.dcl.c
@@ -0,0 +1,27 @@
+fp coeff_dyz_m1_m1_m1,
+ coeff_dyz_0_m1_m1,
+ coeff_dyz_p1_m1_m1,
+ coeff_dyz_m1_0_m1,
+ coeff_dyz_0_0_m1,
+ coeff_dyz_p1_0_m1,
+ coeff_dyz_m1_p1_m1,
+ coeff_dyz_0_p1_m1,
+ coeff_dyz_p1_p1_m1,
+ coeff_dyz_m1_m1_0,
+ coeff_dyz_0_m1_0,
+ coeff_dyz_p1_m1_0,
+ coeff_dyz_m1_0_0,
+ coeff_dyz_0_0_0,
+ coeff_dyz_p1_0_0,
+ coeff_dyz_m1_p1_0,
+ coeff_dyz_0_p1_0,
+ coeff_dyz_p1_p1_0,
+ coeff_dyz_m1_m1_p1,
+ coeff_dyz_0_m1_p1,
+ coeff_dyz_p1_m1_p1,
+ coeff_dyz_m1_0_p1,
+ coeff_dyz_0_0_p1,
+ coeff_dyz_p1_0_p1,
+ coeff_dyz_m1_p1_p1,
+ coeff_dyz_0_p1_p1,
+ coeff_dyz_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dyz.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dyz.store.c
new file mode 100644
index 0000000..5c27ea5
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dyz.store.c
@@ -0,0 +1,27 @@
+COEFF(-1,-1,-1) = factor * coeff_dyz_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dyz_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dyz_p1_m1_m1;
+COEFF(-1,0,-1) = factor * coeff_dyz_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dyz_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dyz_p1_0_m1;
+COEFF(-1,1,-1) = factor * coeff_dyz_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dyz_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dyz_p1_p1_m1;
+COEFF(-1,-1,0) = factor * coeff_dyz_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dyz_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dyz_p1_m1_0;
+COEFF(-1,0,0) = factor * coeff_dyz_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dyz_0_0_0;
+COEFF(1,0,0) = factor * coeff_dyz_p1_0_0;
+COEFF(-1,1,0) = factor * coeff_dyz_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dyz_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dyz_p1_p1_0;
+COEFF(-1,-1,1) = factor * coeff_dyz_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dyz_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dyz_p1_m1_p1;
+COEFF(-1,0,1) = factor * coeff_dyz_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dyz_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dyz_p1_0_p1;
+COEFF(-1,1,1) = factor * coeff_dyz_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dyz_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dyz_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dz.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dz.dcl.c
new file mode 100644
index 0000000..e9cb0e9
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dz.dcl.c
@@ -0,0 +1,27 @@
+fp coeff_dz_m1_m1_m1,
+ coeff_dz_0_m1_m1,
+ coeff_dz_p1_m1_m1,
+ coeff_dz_m1_0_m1,
+ coeff_dz_0_0_m1,
+ coeff_dz_p1_0_m1,
+ coeff_dz_m1_p1_m1,
+ coeff_dz_0_p1_m1,
+ coeff_dz_p1_p1_m1,
+ coeff_dz_m1_m1_0,
+ coeff_dz_0_m1_0,
+ coeff_dz_p1_m1_0,
+ coeff_dz_m1_0_0,
+ coeff_dz_0_0_0,
+ coeff_dz_p1_0_0,
+ coeff_dz_m1_p1_0,
+ coeff_dz_0_p1_0,
+ coeff_dz_p1_p1_0,
+ coeff_dz_m1_m1_p1,
+ coeff_dz_0_m1_p1,
+ coeff_dz_p1_m1_p1,
+ coeff_dz_m1_0_p1,
+ coeff_dz_0_0_p1,
+ coeff_dz_p1_0_p1,
+ coeff_dz_m1_p1_p1,
+ coeff_dz_0_p1_p1,
+ coeff_dz_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dz.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dz.store.c
new file mode 100644
index 0000000..9024306
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dz.store.c
@@ -0,0 +1,27 @@
+COEFF(-1,-1,-1) = factor * coeff_dz_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dz_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dz_p1_m1_m1;
+COEFF(-1,0,-1) = factor * coeff_dz_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dz_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dz_p1_0_m1;
+COEFF(-1,1,-1) = factor * coeff_dz_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dz_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dz_p1_p1_m1;
+COEFF(-1,-1,0) = factor * coeff_dz_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dz_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dz_p1_m1_0;
+COEFF(-1,0,0) = factor * coeff_dz_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dz_0_0_0;
+COEFF(1,0,0) = factor * coeff_dz_p1_0_0;
+COEFF(-1,1,0) = factor * coeff_dz_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dz_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dz_p1_p1_0;
+COEFF(-1,-1,1) = factor * coeff_dz_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dz_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dz_p1_m1_p1;
+COEFF(-1,0,1) = factor * coeff_dz_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dz_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dz_p1_0_p1;
+COEFF(-1,1,1) = factor * coeff_dz_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dz_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dz_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dzz.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dzz.dcl.c
new file mode 100644
index 0000000..e87aa91
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dzz.dcl.c
@@ -0,0 +1,27 @@
+fp coeff_dzz_m1_m1_m1,
+ coeff_dzz_0_m1_m1,
+ coeff_dzz_p1_m1_m1,
+ coeff_dzz_m1_0_m1,
+ coeff_dzz_0_0_m1,
+ coeff_dzz_p1_0_m1,
+ coeff_dzz_m1_p1_m1,
+ coeff_dzz_0_p1_m1,
+ coeff_dzz_p1_p1_m1,
+ coeff_dzz_m1_m1_0,
+ coeff_dzz_0_m1_0,
+ coeff_dzz_p1_m1_0,
+ coeff_dzz_m1_0_0,
+ coeff_dzz_0_0_0,
+ coeff_dzz_p1_0_0,
+ coeff_dzz_m1_p1_0,
+ coeff_dzz_0_p1_0,
+ coeff_dzz_p1_p1_0,
+ coeff_dzz_m1_m1_p1,
+ coeff_dzz_0_m1_p1,
+ coeff_dzz_p1_m1_p1,
+ coeff_dzz_m1_0_p1,
+ coeff_dzz_0_0_p1,
+ coeff_dzz_p1_0_p1,
+ coeff_dzz_m1_p1_p1,
+ coeff_dzz_0_p1_p1,
+ coeff_dzz_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dzz.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dzz.store.c
new file mode 100644
index 0000000..3743cb7
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/coeff-dzz.store.c
@@ -0,0 +1,27 @@
+COEFF(-1,-1,-1) = factor * coeff_dzz_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dzz_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dzz_p1_m1_m1;
+COEFF(-1,0,-1) = factor * coeff_dzz_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dzz_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dzz_p1_0_m1;
+COEFF(-1,1,-1) = factor * coeff_dzz_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dzz_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dzz_p1_p1_m1;
+COEFF(-1,-1,0) = factor * coeff_dzz_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dzz_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dzz_p1_m1_0;
+COEFF(-1,0,0) = factor * coeff_dzz_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dzz_0_0_0;
+COEFF(1,0,0) = factor * coeff_dzz_p1_0_0;
+COEFF(-1,1,0) = factor * coeff_dzz_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dzz_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dzz_p1_p1_0;
+COEFF(-1,-1,1) = factor * coeff_dzz_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dzz_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dzz_p1_m1_p1;
+COEFF(-1,0,1) = factor * coeff_dzz_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dzz_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dzz_p1_0_p1;
+COEFF(-1,1,1) = factor * coeff_dzz_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dzz_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dzz_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/data-var.assign.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/data-var.assign.c
new file mode 100644
index 0000000..7ea5a98
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/data-var.assign.c
@@ -0,0 +1,27 @@
+data_m1_m1_m1 = DATA(-1,-1,-1);
+data_0_m1_m1 = DATA(0,-1,-1);
+data_p1_m1_m1 = DATA(1,-1,-1);
+data_m1_0_m1 = DATA(-1,0,-1);
+data_0_0_m1 = DATA(0,0,-1);
+data_p1_0_m1 = DATA(1,0,-1);
+data_m1_p1_m1 = DATA(-1,1,-1);
+data_0_p1_m1 = DATA(0,1,-1);
+data_p1_p1_m1 = DATA(1,1,-1);
+data_m1_m1_0 = DATA(-1,-1,0);
+data_0_m1_0 = DATA(0,-1,0);
+data_p1_m1_0 = DATA(1,-1,0);
+data_m1_0_0 = DATA(-1,0,0);
+data_0_0_0 = DATA(0,0,0);
+data_p1_0_0 = DATA(1,0,0);
+data_m1_p1_0 = DATA(-1,1,0);
+data_0_p1_0 = DATA(0,1,0);
+data_p1_p1_0 = DATA(1,1,0);
+data_m1_m1_p1 = DATA(-1,-1,1);
+data_0_m1_p1 = DATA(0,-1,1);
+data_p1_m1_p1 = DATA(1,-1,1);
+data_m1_0_p1 = DATA(-1,0,1);
+data_0_0_p1 = DATA(0,0,1);
+data_p1_0_p1 = DATA(1,0,1);
+data_m1_p1_p1 = DATA(-1,1,1);
+data_0_p1_p1 = DATA(0,1,1);
+data_p1_p1_p1 = DATA(1,1,1);
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/data-var.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/data-var.dcl.c
new file mode 100644
index 0000000..5128c77
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/data-var.dcl.c
@@ -0,0 +1,27 @@
+fp data_m1_m1_m1,
+ data_0_m1_m1,
+ data_p1_m1_m1,
+ data_m1_0_m1,
+ data_0_0_m1,
+ data_p1_0_m1,
+ data_m1_p1_m1,
+ data_0_p1_m1,
+ data_p1_p1_m1,
+ data_m1_m1_0,
+ data_0_m1_0,
+ data_p1_m1_0,
+ data_m1_0_0,
+ data_0_0_0,
+ data_p1_0_0,
+ data_m1_p1_0,
+ data_0_p1_0,
+ data_p1_p1_0,
+ data_m1_m1_p1,
+ data_0_m1_p1,
+ data_p1_m1_p1,
+ data_m1_0_p1,
+ data_0_0_p1,
+ data_p1_0_p1,
+ data_m1_p1_p1,
+ data_0_p1_p1,
+ data_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-I.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-I.compute.c
new file mode 100644
index 0000000..3a7cac2
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-I.compute.c
@@ -0,0 +1,28 @@
+result =
+ coeff_I_m1_m1_m1*data_m1_m1_m1
+ + coeff_I_0_m1_m1*data_0_m1_m1
+ + coeff_I_p1_m1_m1*data_p1_m1_m1
+ + coeff_I_m1_0_m1*data_m1_0_m1
+ + coeff_I_0_0_m1*data_0_0_m1
+ + coeff_I_p1_0_m1*data_p1_0_m1
+ + coeff_I_m1_p1_m1*data_m1_p1_m1
+ + coeff_I_0_p1_m1*data_0_p1_m1
+ + coeff_I_p1_p1_m1*data_p1_p1_m1
+ + coeff_I_m1_m1_0*data_m1_m1_0
+ + coeff_I_0_m1_0*data_0_m1_0
+ + coeff_I_p1_m1_0*data_p1_m1_0
+ + coeff_I_m1_0_0*data_m1_0_0
+ + coeff_I_0_0_0*data_0_0_0
+ + coeff_I_p1_0_0*data_p1_0_0
+ + coeff_I_m1_p1_0*data_m1_p1_0
+ + coeff_I_0_p1_0*data_0_p1_0
+ + coeff_I_p1_p1_0*data_p1_p1_0
+ + coeff_I_m1_m1_p1*data_m1_m1_p1
+ + coeff_I_0_m1_p1*data_0_m1_p1
+ + coeff_I_p1_m1_p1*data_p1_m1_p1
+ + coeff_I_m1_0_p1*data_m1_0_p1
+ + coeff_I_0_0_p1*data_0_0_p1
+ + coeff_I_p1_0_p1*data_p1_0_p1
+ + coeff_I_m1_p1_p1*data_m1_p1_p1
+ + coeff_I_0_p1_p1*data_0_p1_p1
+ + coeff_I_p1_p1_p1*data_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dx.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dx.compute.c
new file mode 100644
index 0000000..bd53de0
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dx.compute.c
@@ -0,0 +1,28 @@
+result =
+ coeff_dx_m1_m1_m1*data_m1_m1_m1
+ + coeff_dx_0_m1_m1*data_0_m1_m1
+ + coeff_dx_p1_m1_m1*data_p1_m1_m1
+ + coeff_dx_m1_0_m1*data_m1_0_m1
+ + coeff_dx_0_0_m1*data_0_0_m1
+ + coeff_dx_p1_0_m1*data_p1_0_m1
+ + coeff_dx_m1_p1_m1*data_m1_p1_m1
+ + coeff_dx_0_p1_m1*data_0_p1_m1
+ + coeff_dx_p1_p1_m1*data_p1_p1_m1
+ + coeff_dx_m1_m1_0*data_m1_m1_0
+ + coeff_dx_0_m1_0*data_0_m1_0
+ + coeff_dx_p1_m1_0*data_p1_m1_0
+ + coeff_dx_m1_0_0*data_m1_0_0
+ + coeff_dx_0_0_0*data_0_0_0
+ + coeff_dx_p1_0_0*data_p1_0_0
+ + coeff_dx_m1_p1_0*data_m1_p1_0
+ + coeff_dx_0_p1_0*data_0_p1_0
+ + coeff_dx_p1_p1_0*data_p1_p1_0
+ + coeff_dx_m1_m1_p1*data_m1_m1_p1
+ + coeff_dx_0_m1_p1*data_0_m1_p1
+ + coeff_dx_p1_m1_p1*data_p1_m1_p1
+ + coeff_dx_m1_0_p1*data_m1_0_p1
+ + coeff_dx_0_0_p1*data_0_0_p1
+ + coeff_dx_p1_0_p1*data_p1_0_p1
+ + coeff_dx_m1_p1_p1*data_m1_p1_p1
+ + coeff_dx_0_p1_p1*data_0_p1_p1
+ + coeff_dx_p1_p1_p1*data_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dxx.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dxx.compute.c
new file mode 100644
index 0000000..5ac4e94
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dxx.compute.c
@@ -0,0 +1,28 @@
+result =
+ coeff_dxx_m1_m1_m1*data_m1_m1_m1
+ + coeff_dxx_0_m1_m1*data_0_m1_m1
+ + coeff_dxx_p1_m1_m1*data_p1_m1_m1
+ + coeff_dxx_m1_0_m1*data_m1_0_m1
+ + coeff_dxx_0_0_m1*data_0_0_m1
+ + coeff_dxx_p1_0_m1*data_p1_0_m1
+ + coeff_dxx_m1_p1_m1*data_m1_p1_m1
+ + coeff_dxx_0_p1_m1*data_0_p1_m1
+ + coeff_dxx_p1_p1_m1*data_p1_p1_m1
+ + coeff_dxx_m1_m1_0*data_m1_m1_0
+ + coeff_dxx_0_m1_0*data_0_m1_0
+ + coeff_dxx_p1_m1_0*data_p1_m1_0
+ + coeff_dxx_m1_0_0*data_m1_0_0
+ + coeff_dxx_0_0_0*data_0_0_0
+ + coeff_dxx_p1_0_0*data_p1_0_0
+ + coeff_dxx_m1_p1_0*data_m1_p1_0
+ + coeff_dxx_0_p1_0*data_0_p1_0
+ + coeff_dxx_p1_p1_0*data_p1_p1_0
+ + coeff_dxx_m1_m1_p1*data_m1_m1_p1
+ + coeff_dxx_0_m1_p1*data_0_m1_p1
+ + coeff_dxx_p1_m1_p1*data_p1_m1_p1
+ + coeff_dxx_m1_0_p1*data_m1_0_p1
+ + coeff_dxx_0_0_p1*data_0_0_p1
+ + coeff_dxx_p1_0_p1*data_p1_0_p1
+ + coeff_dxx_m1_p1_p1*data_m1_p1_p1
+ + coeff_dxx_0_p1_p1*data_0_p1_p1
+ + coeff_dxx_p1_p1_p1*data_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dxy.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dxy.compute.c
new file mode 100644
index 0000000..d951b40
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dxy.compute.c
@@ -0,0 +1,28 @@
+result =
+ coeff_dxy_m1_m1_m1*data_m1_m1_m1
+ + coeff_dxy_0_m1_m1*data_0_m1_m1
+ + coeff_dxy_p1_m1_m1*data_p1_m1_m1
+ + coeff_dxy_m1_0_m1*data_m1_0_m1
+ + coeff_dxy_0_0_m1*data_0_0_m1
+ + coeff_dxy_p1_0_m1*data_p1_0_m1
+ + coeff_dxy_m1_p1_m1*data_m1_p1_m1
+ + coeff_dxy_0_p1_m1*data_0_p1_m1
+ + coeff_dxy_p1_p1_m1*data_p1_p1_m1
+ + coeff_dxy_m1_m1_0*data_m1_m1_0
+ + coeff_dxy_0_m1_0*data_0_m1_0
+ + coeff_dxy_p1_m1_0*data_p1_m1_0
+ + coeff_dxy_m1_0_0*data_m1_0_0
+ + coeff_dxy_0_0_0*data_0_0_0
+ + coeff_dxy_p1_0_0*data_p1_0_0
+ + coeff_dxy_m1_p1_0*data_m1_p1_0
+ + coeff_dxy_0_p1_0*data_0_p1_0
+ + coeff_dxy_p1_p1_0*data_p1_p1_0
+ + coeff_dxy_m1_m1_p1*data_m1_m1_p1
+ + coeff_dxy_0_m1_p1*data_0_m1_p1
+ + coeff_dxy_p1_m1_p1*data_p1_m1_p1
+ + coeff_dxy_m1_0_p1*data_m1_0_p1
+ + coeff_dxy_0_0_p1*data_0_0_p1
+ + coeff_dxy_p1_0_p1*data_p1_0_p1
+ + coeff_dxy_m1_p1_p1*data_m1_p1_p1
+ + coeff_dxy_0_p1_p1*data_0_p1_p1
+ + coeff_dxy_p1_p1_p1*data_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dxz.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dxz.compute.c
new file mode 100644
index 0000000..33e3969
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dxz.compute.c
@@ -0,0 +1,28 @@
+result =
+ coeff_dxz_m1_m1_m1*data_m1_m1_m1
+ + coeff_dxz_0_m1_m1*data_0_m1_m1
+ + coeff_dxz_p1_m1_m1*data_p1_m1_m1
+ + coeff_dxz_m1_0_m1*data_m1_0_m1
+ + coeff_dxz_0_0_m1*data_0_0_m1
+ + coeff_dxz_p1_0_m1*data_p1_0_m1
+ + coeff_dxz_m1_p1_m1*data_m1_p1_m1
+ + coeff_dxz_0_p1_m1*data_0_p1_m1
+ + coeff_dxz_p1_p1_m1*data_p1_p1_m1
+ + coeff_dxz_m1_m1_0*data_m1_m1_0
+ + coeff_dxz_0_m1_0*data_0_m1_0
+ + coeff_dxz_p1_m1_0*data_p1_m1_0
+ + coeff_dxz_m1_0_0*data_m1_0_0
+ + coeff_dxz_0_0_0*data_0_0_0
+ + coeff_dxz_p1_0_0*data_p1_0_0
+ + coeff_dxz_m1_p1_0*data_m1_p1_0
+ + coeff_dxz_0_p1_0*data_0_p1_0
+ + coeff_dxz_p1_p1_0*data_p1_p1_0
+ + coeff_dxz_m1_m1_p1*data_m1_m1_p1
+ + coeff_dxz_0_m1_p1*data_0_m1_p1
+ + coeff_dxz_p1_m1_p1*data_p1_m1_p1
+ + coeff_dxz_m1_0_p1*data_m1_0_p1
+ + coeff_dxz_0_0_p1*data_0_0_p1
+ + coeff_dxz_p1_0_p1*data_p1_0_p1
+ + coeff_dxz_m1_p1_p1*data_m1_p1_p1
+ + coeff_dxz_0_p1_p1*data_0_p1_p1
+ + coeff_dxz_p1_p1_p1*data_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dy.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dy.compute.c
new file mode 100644
index 0000000..59545ac
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dy.compute.c
@@ -0,0 +1,28 @@
+result =
+ coeff_dy_m1_m1_m1*data_m1_m1_m1
+ + coeff_dy_0_m1_m1*data_0_m1_m1
+ + coeff_dy_p1_m1_m1*data_p1_m1_m1
+ + coeff_dy_m1_0_m1*data_m1_0_m1
+ + coeff_dy_0_0_m1*data_0_0_m1
+ + coeff_dy_p1_0_m1*data_p1_0_m1
+ + coeff_dy_m1_p1_m1*data_m1_p1_m1
+ + coeff_dy_0_p1_m1*data_0_p1_m1
+ + coeff_dy_p1_p1_m1*data_p1_p1_m1
+ + coeff_dy_m1_m1_0*data_m1_m1_0
+ + coeff_dy_0_m1_0*data_0_m1_0
+ + coeff_dy_p1_m1_0*data_p1_m1_0
+ + coeff_dy_m1_0_0*data_m1_0_0
+ + coeff_dy_0_0_0*data_0_0_0
+ + coeff_dy_p1_0_0*data_p1_0_0
+ + coeff_dy_m1_p1_0*data_m1_p1_0
+ + coeff_dy_0_p1_0*data_0_p1_0
+ + coeff_dy_p1_p1_0*data_p1_p1_0
+ + coeff_dy_m1_m1_p1*data_m1_m1_p1
+ + coeff_dy_0_m1_p1*data_0_m1_p1
+ + coeff_dy_p1_m1_p1*data_p1_m1_p1
+ + coeff_dy_m1_0_p1*data_m1_0_p1
+ + coeff_dy_0_0_p1*data_0_0_p1
+ + coeff_dy_p1_0_p1*data_p1_0_p1
+ + coeff_dy_m1_p1_p1*data_m1_p1_p1
+ + coeff_dy_0_p1_p1*data_0_p1_p1
+ + coeff_dy_p1_p1_p1*data_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dyy.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dyy.compute.c
new file mode 100644
index 0000000..70ae839
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dyy.compute.c
@@ -0,0 +1,28 @@
+result =
+ coeff_dyy_m1_m1_m1*data_m1_m1_m1
+ + coeff_dyy_0_m1_m1*data_0_m1_m1
+ + coeff_dyy_p1_m1_m1*data_p1_m1_m1
+ + coeff_dyy_m1_0_m1*data_m1_0_m1
+ + coeff_dyy_0_0_m1*data_0_0_m1
+ + coeff_dyy_p1_0_m1*data_p1_0_m1
+ + coeff_dyy_m1_p1_m1*data_m1_p1_m1
+ + coeff_dyy_0_p1_m1*data_0_p1_m1
+ + coeff_dyy_p1_p1_m1*data_p1_p1_m1
+ + coeff_dyy_m1_m1_0*data_m1_m1_0
+ + coeff_dyy_0_m1_0*data_0_m1_0
+ + coeff_dyy_p1_m1_0*data_p1_m1_0
+ + coeff_dyy_m1_0_0*data_m1_0_0
+ + coeff_dyy_0_0_0*data_0_0_0
+ + coeff_dyy_p1_0_0*data_p1_0_0
+ + coeff_dyy_m1_p1_0*data_m1_p1_0
+ + coeff_dyy_0_p1_0*data_0_p1_0
+ + coeff_dyy_p1_p1_0*data_p1_p1_0
+ + coeff_dyy_m1_m1_p1*data_m1_m1_p1
+ + coeff_dyy_0_m1_p1*data_0_m1_p1
+ + coeff_dyy_p1_m1_p1*data_p1_m1_p1
+ + coeff_dyy_m1_0_p1*data_m1_0_p1
+ + coeff_dyy_0_0_p1*data_0_0_p1
+ + coeff_dyy_p1_0_p1*data_p1_0_p1
+ + coeff_dyy_m1_p1_p1*data_m1_p1_p1
+ + coeff_dyy_0_p1_p1*data_0_p1_p1
+ + coeff_dyy_p1_p1_p1*data_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dyz.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dyz.compute.c
new file mode 100644
index 0000000..87ba939
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dyz.compute.c
@@ -0,0 +1,28 @@
+result =
+ coeff_dyz_m1_m1_m1*data_m1_m1_m1
+ + coeff_dyz_0_m1_m1*data_0_m1_m1
+ + coeff_dyz_p1_m1_m1*data_p1_m1_m1
+ + coeff_dyz_m1_0_m1*data_m1_0_m1
+ + coeff_dyz_0_0_m1*data_0_0_m1
+ + coeff_dyz_p1_0_m1*data_p1_0_m1
+ + coeff_dyz_m1_p1_m1*data_m1_p1_m1
+ + coeff_dyz_0_p1_m1*data_0_p1_m1
+ + coeff_dyz_p1_p1_m1*data_p1_p1_m1
+ + coeff_dyz_m1_m1_0*data_m1_m1_0
+ + coeff_dyz_0_m1_0*data_0_m1_0
+ + coeff_dyz_p1_m1_0*data_p1_m1_0
+ + coeff_dyz_m1_0_0*data_m1_0_0
+ + coeff_dyz_0_0_0*data_0_0_0
+ + coeff_dyz_p1_0_0*data_p1_0_0
+ + coeff_dyz_m1_p1_0*data_m1_p1_0
+ + coeff_dyz_0_p1_0*data_0_p1_0
+ + coeff_dyz_p1_p1_0*data_p1_p1_0
+ + coeff_dyz_m1_m1_p1*data_m1_m1_p1
+ + coeff_dyz_0_m1_p1*data_0_m1_p1
+ + coeff_dyz_p1_m1_p1*data_p1_m1_p1
+ + coeff_dyz_m1_0_p1*data_m1_0_p1
+ + coeff_dyz_0_0_p1*data_0_0_p1
+ + coeff_dyz_p1_0_p1*data_p1_0_p1
+ + coeff_dyz_m1_p1_p1*data_m1_p1_p1
+ + coeff_dyz_0_p1_p1*data_0_p1_p1
+ + coeff_dyz_p1_p1_p1*data_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dz.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dz.compute.c
new file mode 100644
index 0000000..cd02ac9
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dz.compute.c
@@ -0,0 +1,28 @@
+result =
+ coeff_dz_m1_m1_m1*data_m1_m1_m1
+ + coeff_dz_0_m1_m1*data_0_m1_m1
+ + coeff_dz_p1_m1_m1*data_p1_m1_m1
+ + coeff_dz_m1_0_m1*data_m1_0_m1
+ + coeff_dz_0_0_m1*data_0_0_m1
+ + coeff_dz_p1_0_m1*data_p1_0_m1
+ + coeff_dz_m1_p1_m1*data_m1_p1_m1
+ + coeff_dz_0_p1_m1*data_0_p1_m1
+ + coeff_dz_p1_p1_m1*data_p1_p1_m1
+ + coeff_dz_m1_m1_0*data_m1_m1_0
+ + coeff_dz_0_m1_0*data_0_m1_0
+ + coeff_dz_p1_m1_0*data_p1_m1_0
+ + coeff_dz_m1_0_0*data_m1_0_0
+ + coeff_dz_0_0_0*data_0_0_0
+ + coeff_dz_p1_0_0*data_p1_0_0
+ + coeff_dz_m1_p1_0*data_m1_p1_0
+ + coeff_dz_0_p1_0*data_0_p1_0
+ + coeff_dz_p1_p1_0*data_p1_p1_0
+ + coeff_dz_m1_m1_p1*data_m1_m1_p1
+ + coeff_dz_0_m1_p1*data_0_m1_p1
+ + coeff_dz_p1_m1_p1*data_p1_m1_p1
+ + coeff_dz_m1_0_p1*data_m1_0_p1
+ + coeff_dz_0_0_p1*data_0_0_p1
+ + coeff_dz_p1_0_p1*data_p1_0_p1
+ + coeff_dz_m1_p1_p1*data_m1_p1_p1
+ + coeff_dz_0_p1_p1*data_0_p1_p1
+ + coeff_dz_p1_p1_p1*data_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dzz.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dzz.compute.c
new file mode 100644
index 0000000..4593efa
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size3/interp-dzz.compute.c
@@ -0,0 +1,28 @@
+result =
+ coeff_dzz_m1_m1_m1*data_m1_m1_m1
+ + coeff_dzz_0_m1_m1*data_0_m1_m1
+ + coeff_dzz_p1_m1_m1*data_p1_m1_m1
+ + coeff_dzz_m1_0_m1*data_m1_0_m1
+ + coeff_dzz_0_0_m1*data_0_0_m1
+ + coeff_dzz_p1_0_m1*data_p1_0_m1
+ + coeff_dzz_m1_p1_m1*data_m1_p1_m1
+ + coeff_dzz_0_p1_m1*data_0_p1_m1
+ + coeff_dzz_p1_p1_m1*data_p1_p1_m1
+ + coeff_dzz_m1_m1_0*data_m1_m1_0
+ + coeff_dzz_0_m1_0*data_0_m1_0
+ + coeff_dzz_p1_m1_0*data_p1_m1_0
+ + coeff_dzz_m1_0_0*data_m1_0_0
+ + coeff_dzz_0_0_0*data_0_0_0
+ + coeff_dzz_p1_0_0*data_p1_0_0
+ + coeff_dzz_m1_p1_0*data_m1_p1_0
+ + coeff_dzz_0_p1_0*data_0_p1_0
+ + coeff_dzz_p1_p1_0*data_p1_p1_0
+ + coeff_dzz_m1_m1_p1*data_m1_m1_p1
+ + coeff_dzz_0_m1_p1*data_0_m1_p1
+ + coeff_dzz_p1_m1_p1*data_p1_m1_p1
+ + coeff_dzz_m1_0_p1*data_m1_0_p1
+ + coeff_dzz_0_0_p1*data_0_0_p1
+ + coeff_dzz_p1_0_p1*data_p1_0_p1
+ + coeff_dzz_m1_p1_p1*data_m1_p1_p1
+ + coeff_dzz_0_p1_p1*data_0_p1_p1
+ + coeff_dzz_p1_p1_p1*data_p1_p1_p1;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-I.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-I.dcl.c
new file mode 100644
index 0000000..aed4eb3
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-I.dcl.c
@@ -0,0 +1,64 @@
+fp coeff_I_m1_m1_m1,
+ coeff_I_0_m1_m1,
+ coeff_I_p1_m1_m1,
+ coeff_I_p2_m1_m1,
+ coeff_I_m1_0_m1,
+ coeff_I_0_0_m1,
+ coeff_I_p1_0_m1,
+ coeff_I_p2_0_m1,
+ coeff_I_m1_p1_m1,
+ coeff_I_0_p1_m1,
+ coeff_I_p1_p1_m1,
+ coeff_I_p2_p1_m1,
+ coeff_I_m1_p2_m1,
+ coeff_I_0_p2_m1,
+ coeff_I_p1_p2_m1,
+ coeff_I_p2_p2_m1,
+ coeff_I_m1_m1_0,
+ coeff_I_0_m1_0,
+ coeff_I_p1_m1_0,
+ coeff_I_p2_m1_0,
+ coeff_I_m1_0_0,
+ coeff_I_0_0_0,
+ coeff_I_p1_0_0,
+ coeff_I_p2_0_0,
+ coeff_I_m1_p1_0,
+ coeff_I_0_p1_0,
+ coeff_I_p1_p1_0,
+ coeff_I_p2_p1_0,
+ coeff_I_m1_p2_0,
+ coeff_I_0_p2_0,
+ coeff_I_p1_p2_0,
+ coeff_I_p2_p2_0,
+ coeff_I_m1_m1_p1,
+ coeff_I_0_m1_p1,
+ coeff_I_p1_m1_p1,
+ coeff_I_p2_m1_p1,
+ coeff_I_m1_0_p1,
+ coeff_I_0_0_p1,
+ coeff_I_p1_0_p1,
+ coeff_I_p2_0_p1,
+ coeff_I_m1_p1_p1,
+ coeff_I_0_p1_p1,
+ coeff_I_p1_p1_p1,
+ coeff_I_p2_p1_p1,
+ coeff_I_m1_p2_p1,
+ coeff_I_0_p2_p1,
+ coeff_I_p1_p2_p1,
+ coeff_I_p2_p2_p1,
+ coeff_I_m1_m1_p2,
+ coeff_I_0_m1_p2,
+ coeff_I_p1_m1_p2,
+ coeff_I_p2_m1_p2,
+ coeff_I_m1_0_p2,
+ coeff_I_0_0_p2,
+ coeff_I_p1_0_p2,
+ coeff_I_p2_0_p2,
+ coeff_I_m1_p1_p2,
+ coeff_I_0_p1_p2,
+ coeff_I_p1_p1_p2,
+ coeff_I_p2_p1_p2,
+ coeff_I_m1_p2_p2,
+ coeff_I_0_p2_p2,
+ coeff_I_p1_p2_p2,
+ coeff_I_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-I.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-I.store.c
new file mode 100644
index 0000000..83c5b05
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-I.store.c
@@ -0,0 +1,64 @@
+COEFF(-1,-1,-1) = coeff_I_m1_m1_m1;
+COEFF(0,-1,-1) = coeff_I_0_m1_m1;
+COEFF(1,-1,-1) = coeff_I_p1_m1_m1;
+COEFF(2,-1,-1) = coeff_I_p2_m1_m1;
+COEFF(-1,0,-1) = coeff_I_m1_0_m1;
+COEFF(0,0,-1) = coeff_I_0_0_m1;
+COEFF(1,0,-1) = coeff_I_p1_0_m1;
+COEFF(2,0,-1) = coeff_I_p2_0_m1;
+COEFF(-1,1,-1) = coeff_I_m1_p1_m1;
+COEFF(0,1,-1) = coeff_I_0_p1_m1;
+COEFF(1,1,-1) = coeff_I_p1_p1_m1;
+COEFF(2,1,-1) = coeff_I_p2_p1_m1;
+COEFF(-1,2,-1) = coeff_I_m1_p2_m1;
+COEFF(0,2,-1) = coeff_I_0_p2_m1;
+COEFF(1,2,-1) = coeff_I_p1_p2_m1;
+COEFF(2,2,-1) = coeff_I_p2_p2_m1;
+COEFF(-1,-1,0) = coeff_I_m1_m1_0;
+COEFF(0,-1,0) = coeff_I_0_m1_0;
+COEFF(1,-1,0) = coeff_I_p1_m1_0;
+COEFF(2,-1,0) = coeff_I_p2_m1_0;
+COEFF(-1,0,0) = coeff_I_m1_0_0;
+COEFF(0,0,0) = coeff_I_0_0_0;
+COEFF(1,0,0) = coeff_I_p1_0_0;
+COEFF(2,0,0) = coeff_I_p2_0_0;
+COEFF(-1,1,0) = coeff_I_m1_p1_0;
+COEFF(0,1,0) = coeff_I_0_p1_0;
+COEFF(1,1,0) = coeff_I_p1_p1_0;
+COEFF(2,1,0) = coeff_I_p2_p1_0;
+COEFF(-1,2,0) = coeff_I_m1_p2_0;
+COEFF(0,2,0) = coeff_I_0_p2_0;
+COEFF(1,2,0) = coeff_I_p1_p2_0;
+COEFF(2,2,0) = coeff_I_p2_p2_0;
+COEFF(-1,-1,1) = coeff_I_m1_m1_p1;
+COEFF(0,-1,1) = coeff_I_0_m1_p1;
+COEFF(1,-1,1) = coeff_I_p1_m1_p1;
+COEFF(2,-1,1) = coeff_I_p2_m1_p1;
+COEFF(-1,0,1) = coeff_I_m1_0_p1;
+COEFF(0,0,1) = coeff_I_0_0_p1;
+COEFF(1,0,1) = coeff_I_p1_0_p1;
+COEFF(2,0,1) = coeff_I_p2_0_p1;
+COEFF(-1,1,1) = coeff_I_m1_p1_p1;
+COEFF(0,1,1) = coeff_I_0_p1_p1;
+COEFF(1,1,1) = coeff_I_p1_p1_p1;
+COEFF(2,1,1) = coeff_I_p2_p1_p1;
+COEFF(-1,2,1) = coeff_I_m1_p2_p1;
+COEFF(0,2,1) = coeff_I_0_p2_p1;
+COEFF(1,2,1) = coeff_I_p1_p2_p1;
+COEFF(2,2,1) = coeff_I_p2_p2_p1;
+COEFF(-1,-1,2) = coeff_I_m1_m1_p2;
+COEFF(0,-1,2) = coeff_I_0_m1_p2;
+COEFF(1,-1,2) = coeff_I_p1_m1_p2;
+COEFF(2,-1,2) = coeff_I_p2_m1_p2;
+COEFF(-1,0,2) = coeff_I_m1_0_p2;
+COEFF(0,0,2) = coeff_I_0_0_p2;
+COEFF(1,0,2) = coeff_I_p1_0_p2;
+COEFF(2,0,2) = coeff_I_p2_0_p2;
+COEFF(-1,1,2) = coeff_I_m1_p1_p2;
+COEFF(0,1,2) = coeff_I_0_p1_p2;
+COEFF(1,1,2) = coeff_I_p1_p1_p2;
+COEFF(2,1,2) = coeff_I_p2_p1_p2;
+COEFF(-1,2,2) = coeff_I_m1_p2_p2;
+COEFF(0,2,2) = coeff_I_0_p2_p2;
+COEFF(1,2,2) = coeff_I_p1_p2_p2;
+COEFF(2,2,2) = coeff_I_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dx.dcl.c
new file mode 100644
index 0000000..2afb4a1
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dx.dcl.c
@@ -0,0 +1,64 @@
+fp coeff_dx_m1_m1_m1,
+ coeff_dx_0_m1_m1,
+ coeff_dx_p1_m1_m1,
+ coeff_dx_p2_m1_m1,
+ coeff_dx_m1_0_m1,
+ coeff_dx_0_0_m1,
+ coeff_dx_p1_0_m1,
+ coeff_dx_p2_0_m1,
+ coeff_dx_m1_p1_m1,
+ coeff_dx_0_p1_m1,
+ coeff_dx_p1_p1_m1,
+ coeff_dx_p2_p1_m1,
+ coeff_dx_m1_p2_m1,
+ coeff_dx_0_p2_m1,
+ coeff_dx_p1_p2_m1,
+ coeff_dx_p2_p2_m1,
+ coeff_dx_m1_m1_0,
+ coeff_dx_0_m1_0,
+ coeff_dx_p1_m1_0,
+ coeff_dx_p2_m1_0,
+ coeff_dx_m1_0_0,
+ coeff_dx_0_0_0,
+ coeff_dx_p1_0_0,
+ coeff_dx_p2_0_0,
+ coeff_dx_m1_p1_0,
+ coeff_dx_0_p1_0,
+ coeff_dx_p1_p1_0,
+ coeff_dx_p2_p1_0,
+ coeff_dx_m1_p2_0,
+ coeff_dx_0_p2_0,
+ coeff_dx_p1_p2_0,
+ coeff_dx_p2_p2_0,
+ coeff_dx_m1_m1_p1,
+ coeff_dx_0_m1_p1,
+ coeff_dx_p1_m1_p1,
+ coeff_dx_p2_m1_p1,
+ coeff_dx_m1_0_p1,
+ coeff_dx_0_0_p1,
+ coeff_dx_p1_0_p1,
+ coeff_dx_p2_0_p1,
+ coeff_dx_m1_p1_p1,
+ coeff_dx_0_p1_p1,
+ coeff_dx_p1_p1_p1,
+ coeff_dx_p2_p1_p1,
+ coeff_dx_m1_p2_p1,
+ coeff_dx_0_p2_p1,
+ coeff_dx_p1_p2_p1,
+ coeff_dx_p2_p2_p1,
+ coeff_dx_m1_m1_p2,
+ coeff_dx_0_m1_p2,
+ coeff_dx_p1_m1_p2,
+ coeff_dx_p2_m1_p2,
+ coeff_dx_m1_0_p2,
+ coeff_dx_0_0_p2,
+ coeff_dx_p1_0_p2,
+ coeff_dx_p2_0_p2,
+ coeff_dx_m1_p1_p2,
+ coeff_dx_0_p1_p2,
+ coeff_dx_p1_p1_p2,
+ coeff_dx_p2_p1_p2,
+ coeff_dx_m1_p2_p2,
+ coeff_dx_0_p2_p2,
+ coeff_dx_p1_p2_p2,
+ coeff_dx_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dx.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dx.store.c
new file mode 100644
index 0000000..6e0bfe6
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dx.store.c
@@ -0,0 +1,64 @@
+COEFF(-1,-1,-1) = factor * coeff_dx_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dx_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dx_p1_m1_m1;
+COEFF(2,-1,-1) = factor * coeff_dx_p2_m1_m1;
+COEFF(-1,0,-1) = factor * coeff_dx_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dx_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dx_p1_0_m1;
+COEFF(2,0,-1) = factor * coeff_dx_p2_0_m1;
+COEFF(-1,1,-1) = factor * coeff_dx_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dx_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dx_p1_p1_m1;
+COEFF(2,1,-1) = factor * coeff_dx_p2_p1_m1;
+COEFF(-1,2,-1) = factor * coeff_dx_m1_p2_m1;
+COEFF(0,2,-1) = factor * coeff_dx_0_p2_m1;
+COEFF(1,2,-1) = factor * coeff_dx_p1_p2_m1;
+COEFF(2,2,-1) = factor * coeff_dx_p2_p2_m1;
+COEFF(-1,-1,0) = factor * coeff_dx_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dx_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dx_p1_m1_0;
+COEFF(2,-1,0) = factor * coeff_dx_p2_m1_0;
+COEFF(-1,0,0) = factor * coeff_dx_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dx_0_0_0;
+COEFF(1,0,0) = factor * coeff_dx_p1_0_0;
+COEFF(2,0,0) = factor * coeff_dx_p2_0_0;
+COEFF(-1,1,0) = factor * coeff_dx_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dx_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dx_p1_p1_0;
+COEFF(2,1,0) = factor * coeff_dx_p2_p1_0;
+COEFF(-1,2,0) = factor * coeff_dx_m1_p2_0;
+COEFF(0,2,0) = factor * coeff_dx_0_p2_0;
+COEFF(1,2,0) = factor * coeff_dx_p1_p2_0;
+COEFF(2,2,0) = factor * coeff_dx_p2_p2_0;
+COEFF(-1,-1,1) = factor * coeff_dx_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dx_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dx_p1_m1_p1;
+COEFF(2,-1,1) = factor * coeff_dx_p2_m1_p1;
+COEFF(-1,0,1) = factor * coeff_dx_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dx_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dx_p1_0_p1;
+COEFF(2,0,1) = factor * coeff_dx_p2_0_p1;
+COEFF(-1,1,1) = factor * coeff_dx_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dx_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dx_p1_p1_p1;
+COEFF(2,1,1) = factor * coeff_dx_p2_p1_p1;
+COEFF(-1,2,1) = factor * coeff_dx_m1_p2_p1;
+COEFF(0,2,1) = factor * coeff_dx_0_p2_p1;
+COEFF(1,2,1) = factor * coeff_dx_p1_p2_p1;
+COEFF(2,2,1) = factor * coeff_dx_p2_p2_p1;
+COEFF(-1,-1,2) = factor * coeff_dx_m1_m1_p2;
+COEFF(0,-1,2) = factor * coeff_dx_0_m1_p2;
+COEFF(1,-1,2) = factor * coeff_dx_p1_m1_p2;
+COEFF(2,-1,2) = factor * coeff_dx_p2_m1_p2;
+COEFF(-1,0,2) = factor * coeff_dx_m1_0_p2;
+COEFF(0,0,2) = factor * coeff_dx_0_0_p2;
+COEFF(1,0,2) = factor * coeff_dx_p1_0_p2;
+COEFF(2,0,2) = factor * coeff_dx_p2_0_p2;
+COEFF(-1,1,2) = factor * coeff_dx_m1_p1_p2;
+COEFF(0,1,2) = factor * coeff_dx_0_p1_p2;
+COEFF(1,1,2) = factor * coeff_dx_p1_p1_p2;
+COEFF(2,1,2) = factor * coeff_dx_p2_p1_p2;
+COEFF(-1,2,2) = factor * coeff_dx_m1_p2_p2;
+COEFF(0,2,2) = factor * coeff_dx_0_p2_p2;
+COEFF(1,2,2) = factor * coeff_dx_p1_p2_p2;
+COEFF(2,2,2) = factor * coeff_dx_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxx.dcl.c
new file mode 100644
index 0000000..7ccdd97
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxx.dcl.c
@@ -0,0 +1,64 @@
+fp coeff_dxx_m1_m1_m1,
+ coeff_dxx_0_m1_m1,
+ coeff_dxx_p1_m1_m1,
+ coeff_dxx_p2_m1_m1,
+ coeff_dxx_m1_0_m1,
+ coeff_dxx_0_0_m1,
+ coeff_dxx_p1_0_m1,
+ coeff_dxx_p2_0_m1,
+ coeff_dxx_m1_p1_m1,
+ coeff_dxx_0_p1_m1,
+ coeff_dxx_p1_p1_m1,
+ coeff_dxx_p2_p1_m1,
+ coeff_dxx_m1_p2_m1,
+ coeff_dxx_0_p2_m1,
+ coeff_dxx_p1_p2_m1,
+ coeff_dxx_p2_p2_m1,
+ coeff_dxx_m1_m1_0,
+ coeff_dxx_0_m1_0,
+ coeff_dxx_p1_m1_0,
+ coeff_dxx_p2_m1_0,
+ coeff_dxx_m1_0_0,
+ coeff_dxx_0_0_0,
+ coeff_dxx_p1_0_0,
+ coeff_dxx_p2_0_0,
+ coeff_dxx_m1_p1_0,
+ coeff_dxx_0_p1_0,
+ coeff_dxx_p1_p1_0,
+ coeff_dxx_p2_p1_0,
+ coeff_dxx_m1_p2_0,
+ coeff_dxx_0_p2_0,
+ coeff_dxx_p1_p2_0,
+ coeff_dxx_p2_p2_0,
+ coeff_dxx_m1_m1_p1,
+ coeff_dxx_0_m1_p1,
+ coeff_dxx_p1_m1_p1,
+ coeff_dxx_p2_m1_p1,
+ coeff_dxx_m1_0_p1,
+ coeff_dxx_0_0_p1,
+ coeff_dxx_p1_0_p1,
+ coeff_dxx_p2_0_p1,
+ coeff_dxx_m1_p1_p1,
+ coeff_dxx_0_p1_p1,
+ coeff_dxx_p1_p1_p1,
+ coeff_dxx_p2_p1_p1,
+ coeff_dxx_m1_p2_p1,
+ coeff_dxx_0_p2_p1,
+ coeff_dxx_p1_p2_p1,
+ coeff_dxx_p2_p2_p1,
+ coeff_dxx_m1_m1_p2,
+ coeff_dxx_0_m1_p2,
+ coeff_dxx_p1_m1_p2,
+ coeff_dxx_p2_m1_p2,
+ coeff_dxx_m1_0_p2,
+ coeff_dxx_0_0_p2,
+ coeff_dxx_p1_0_p2,
+ coeff_dxx_p2_0_p2,
+ coeff_dxx_m1_p1_p2,
+ coeff_dxx_0_p1_p2,
+ coeff_dxx_p1_p1_p2,
+ coeff_dxx_p2_p1_p2,
+ coeff_dxx_m1_p2_p2,
+ coeff_dxx_0_p2_p2,
+ coeff_dxx_p1_p2_p2,
+ coeff_dxx_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxx.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxx.store.c
new file mode 100644
index 0000000..a41b6f1
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxx.store.c
@@ -0,0 +1,64 @@
+COEFF(-1,-1,-1) = factor * coeff_dxx_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dxx_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dxx_p1_m1_m1;
+COEFF(2,-1,-1) = factor * coeff_dxx_p2_m1_m1;
+COEFF(-1,0,-1) = factor * coeff_dxx_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dxx_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dxx_p1_0_m1;
+COEFF(2,0,-1) = factor * coeff_dxx_p2_0_m1;
+COEFF(-1,1,-1) = factor * coeff_dxx_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dxx_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dxx_p1_p1_m1;
+COEFF(2,1,-1) = factor * coeff_dxx_p2_p1_m1;
+COEFF(-1,2,-1) = factor * coeff_dxx_m1_p2_m1;
+COEFF(0,2,-1) = factor * coeff_dxx_0_p2_m1;
+COEFF(1,2,-1) = factor * coeff_dxx_p1_p2_m1;
+COEFF(2,2,-1) = factor * coeff_dxx_p2_p2_m1;
+COEFF(-1,-1,0) = factor * coeff_dxx_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dxx_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dxx_p1_m1_0;
+COEFF(2,-1,0) = factor * coeff_dxx_p2_m1_0;
+COEFF(-1,0,0) = factor * coeff_dxx_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dxx_0_0_0;
+COEFF(1,0,0) = factor * coeff_dxx_p1_0_0;
+COEFF(2,0,0) = factor * coeff_dxx_p2_0_0;
+COEFF(-1,1,0) = factor * coeff_dxx_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dxx_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dxx_p1_p1_0;
+COEFF(2,1,0) = factor * coeff_dxx_p2_p1_0;
+COEFF(-1,2,0) = factor * coeff_dxx_m1_p2_0;
+COEFF(0,2,0) = factor * coeff_dxx_0_p2_0;
+COEFF(1,2,0) = factor * coeff_dxx_p1_p2_0;
+COEFF(2,2,0) = factor * coeff_dxx_p2_p2_0;
+COEFF(-1,-1,1) = factor * coeff_dxx_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dxx_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dxx_p1_m1_p1;
+COEFF(2,-1,1) = factor * coeff_dxx_p2_m1_p1;
+COEFF(-1,0,1) = factor * coeff_dxx_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dxx_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dxx_p1_0_p1;
+COEFF(2,0,1) = factor * coeff_dxx_p2_0_p1;
+COEFF(-1,1,1) = factor * coeff_dxx_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dxx_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dxx_p1_p1_p1;
+COEFF(2,1,1) = factor * coeff_dxx_p2_p1_p1;
+COEFF(-1,2,1) = factor * coeff_dxx_m1_p2_p1;
+COEFF(0,2,1) = factor * coeff_dxx_0_p2_p1;
+COEFF(1,2,1) = factor * coeff_dxx_p1_p2_p1;
+COEFF(2,2,1) = factor * coeff_dxx_p2_p2_p1;
+COEFF(-1,-1,2) = factor * coeff_dxx_m1_m1_p2;
+COEFF(0,-1,2) = factor * coeff_dxx_0_m1_p2;
+COEFF(1,-1,2) = factor * coeff_dxx_p1_m1_p2;
+COEFF(2,-1,2) = factor * coeff_dxx_p2_m1_p2;
+COEFF(-1,0,2) = factor * coeff_dxx_m1_0_p2;
+COEFF(0,0,2) = factor * coeff_dxx_0_0_p2;
+COEFF(1,0,2) = factor * coeff_dxx_p1_0_p2;
+COEFF(2,0,2) = factor * coeff_dxx_p2_0_p2;
+COEFF(-1,1,2) = factor * coeff_dxx_m1_p1_p2;
+COEFF(0,1,2) = factor * coeff_dxx_0_p1_p2;
+COEFF(1,1,2) = factor * coeff_dxx_p1_p1_p2;
+COEFF(2,1,2) = factor * coeff_dxx_p2_p1_p2;
+COEFF(-1,2,2) = factor * coeff_dxx_m1_p2_p2;
+COEFF(0,2,2) = factor * coeff_dxx_0_p2_p2;
+COEFF(1,2,2) = factor * coeff_dxx_p1_p2_p2;
+COEFF(2,2,2) = factor * coeff_dxx_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxy.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxy.dcl.c
new file mode 100644
index 0000000..72e7a3e
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxy.dcl.c
@@ -0,0 +1,64 @@
+fp coeff_dxy_m1_m1_m1,
+ coeff_dxy_0_m1_m1,
+ coeff_dxy_p1_m1_m1,
+ coeff_dxy_p2_m1_m1,
+ coeff_dxy_m1_0_m1,
+ coeff_dxy_0_0_m1,
+ coeff_dxy_p1_0_m1,
+ coeff_dxy_p2_0_m1,
+ coeff_dxy_m1_p1_m1,
+ coeff_dxy_0_p1_m1,
+ coeff_dxy_p1_p1_m1,
+ coeff_dxy_p2_p1_m1,
+ coeff_dxy_m1_p2_m1,
+ coeff_dxy_0_p2_m1,
+ coeff_dxy_p1_p2_m1,
+ coeff_dxy_p2_p2_m1,
+ coeff_dxy_m1_m1_0,
+ coeff_dxy_0_m1_0,
+ coeff_dxy_p1_m1_0,
+ coeff_dxy_p2_m1_0,
+ coeff_dxy_m1_0_0,
+ coeff_dxy_0_0_0,
+ coeff_dxy_p1_0_0,
+ coeff_dxy_p2_0_0,
+ coeff_dxy_m1_p1_0,
+ coeff_dxy_0_p1_0,
+ coeff_dxy_p1_p1_0,
+ coeff_dxy_p2_p1_0,
+ coeff_dxy_m1_p2_0,
+ coeff_dxy_0_p2_0,
+ coeff_dxy_p1_p2_0,
+ coeff_dxy_p2_p2_0,
+ coeff_dxy_m1_m1_p1,
+ coeff_dxy_0_m1_p1,
+ coeff_dxy_p1_m1_p1,
+ coeff_dxy_p2_m1_p1,
+ coeff_dxy_m1_0_p1,
+ coeff_dxy_0_0_p1,
+ coeff_dxy_p1_0_p1,
+ coeff_dxy_p2_0_p1,
+ coeff_dxy_m1_p1_p1,
+ coeff_dxy_0_p1_p1,
+ coeff_dxy_p1_p1_p1,
+ coeff_dxy_p2_p1_p1,
+ coeff_dxy_m1_p2_p1,
+ coeff_dxy_0_p2_p1,
+ coeff_dxy_p1_p2_p1,
+ coeff_dxy_p2_p2_p1,
+ coeff_dxy_m1_m1_p2,
+ coeff_dxy_0_m1_p2,
+ coeff_dxy_p1_m1_p2,
+ coeff_dxy_p2_m1_p2,
+ coeff_dxy_m1_0_p2,
+ coeff_dxy_0_0_p2,
+ coeff_dxy_p1_0_p2,
+ coeff_dxy_p2_0_p2,
+ coeff_dxy_m1_p1_p2,
+ coeff_dxy_0_p1_p2,
+ coeff_dxy_p1_p1_p2,
+ coeff_dxy_p2_p1_p2,
+ coeff_dxy_m1_p2_p2,
+ coeff_dxy_0_p2_p2,
+ coeff_dxy_p1_p2_p2,
+ coeff_dxy_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxy.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxy.store.c
new file mode 100644
index 0000000..3882463
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxy.store.c
@@ -0,0 +1,64 @@
+COEFF(-1,-1,-1) = factor * coeff_dxy_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dxy_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dxy_p1_m1_m1;
+COEFF(2,-1,-1) = factor * coeff_dxy_p2_m1_m1;
+COEFF(-1,0,-1) = factor * coeff_dxy_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dxy_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dxy_p1_0_m1;
+COEFF(2,0,-1) = factor * coeff_dxy_p2_0_m1;
+COEFF(-1,1,-1) = factor * coeff_dxy_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dxy_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dxy_p1_p1_m1;
+COEFF(2,1,-1) = factor * coeff_dxy_p2_p1_m1;
+COEFF(-1,2,-1) = factor * coeff_dxy_m1_p2_m1;
+COEFF(0,2,-1) = factor * coeff_dxy_0_p2_m1;
+COEFF(1,2,-1) = factor * coeff_dxy_p1_p2_m1;
+COEFF(2,2,-1) = factor * coeff_dxy_p2_p2_m1;
+COEFF(-1,-1,0) = factor * coeff_dxy_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dxy_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dxy_p1_m1_0;
+COEFF(2,-1,0) = factor * coeff_dxy_p2_m1_0;
+COEFF(-1,0,0) = factor * coeff_dxy_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dxy_0_0_0;
+COEFF(1,0,0) = factor * coeff_dxy_p1_0_0;
+COEFF(2,0,0) = factor * coeff_dxy_p2_0_0;
+COEFF(-1,1,0) = factor * coeff_dxy_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dxy_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dxy_p1_p1_0;
+COEFF(2,1,0) = factor * coeff_dxy_p2_p1_0;
+COEFF(-1,2,0) = factor * coeff_dxy_m1_p2_0;
+COEFF(0,2,0) = factor * coeff_dxy_0_p2_0;
+COEFF(1,2,0) = factor * coeff_dxy_p1_p2_0;
+COEFF(2,2,0) = factor * coeff_dxy_p2_p2_0;
+COEFF(-1,-1,1) = factor * coeff_dxy_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dxy_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dxy_p1_m1_p1;
+COEFF(2,-1,1) = factor * coeff_dxy_p2_m1_p1;
+COEFF(-1,0,1) = factor * coeff_dxy_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dxy_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dxy_p1_0_p1;
+COEFF(2,0,1) = factor * coeff_dxy_p2_0_p1;
+COEFF(-1,1,1) = factor * coeff_dxy_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dxy_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dxy_p1_p1_p1;
+COEFF(2,1,1) = factor * coeff_dxy_p2_p1_p1;
+COEFF(-1,2,1) = factor * coeff_dxy_m1_p2_p1;
+COEFF(0,2,1) = factor * coeff_dxy_0_p2_p1;
+COEFF(1,2,1) = factor * coeff_dxy_p1_p2_p1;
+COEFF(2,2,1) = factor * coeff_dxy_p2_p2_p1;
+COEFF(-1,-1,2) = factor * coeff_dxy_m1_m1_p2;
+COEFF(0,-1,2) = factor * coeff_dxy_0_m1_p2;
+COEFF(1,-1,2) = factor * coeff_dxy_p1_m1_p2;
+COEFF(2,-1,2) = factor * coeff_dxy_p2_m1_p2;
+COEFF(-1,0,2) = factor * coeff_dxy_m1_0_p2;
+COEFF(0,0,2) = factor * coeff_dxy_0_0_p2;
+COEFF(1,0,2) = factor * coeff_dxy_p1_0_p2;
+COEFF(2,0,2) = factor * coeff_dxy_p2_0_p2;
+COEFF(-1,1,2) = factor * coeff_dxy_m1_p1_p2;
+COEFF(0,1,2) = factor * coeff_dxy_0_p1_p2;
+COEFF(1,1,2) = factor * coeff_dxy_p1_p1_p2;
+COEFF(2,1,2) = factor * coeff_dxy_p2_p1_p2;
+COEFF(-1,2,2) = factor * coeff_dxy_m1_p2_p2;
+COEFF(0,2,2) = factor * coeff_dxy_0_p2_p2;
+COEFF(1,2,2) = factor * coeff_dxy_p1_p2_p2;
+COEFF(2,2,2) = factor * coeff_dxy_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxz.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxz.dcl.c
new file mode 100644
index 0000000..0457c9a
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxz.dcl.c
@@ -0,0 +1,64 @@
+fp coeff_dxz_m1_m1_m1,
+ coeff_dxz_0_m1_m1,
+ coeff_dxz_p1_m1_m1,
+ coeff_dxz_p2_m1_m1,
+ coeff_dxz_m1_0_m1,
+ coeff_dxz_0_0_m1,
+ coeff_dxz_p1_0_m1,
+ coeff_dxz_p2_0_m1,
+ coeff_dxz_m1_p1_m1,
+ coeff_dxz_0_p1_m1,
+ coeff_dxz_p1_p1_m1,
+ coeff_dxz_p2_p1_m1,
+ coeff_dxz_m1_p2_m1,
+ coeff_dxz_0_p2_m1,
+ coeff_dxz_p1_p2_m1,
+ coeff_dxz_p2_p2_m1,
+ coeff_dxz_m1_m1_0,
+ coeff_dxz_0_m1_0,
+ coeff_dxz_p1_m1_0,
+ coeff_dxz_p2_m1_0,
+ coeff_dxz_m1_0_0,
+ coeff_dxz_0_0_0,
+ coeff_dxz_p1_0_0,
+ coeff_dxz_p2_0_0,
+ coeff_dxz_m1_p1_0,
+ coeff_dxz_0_p1_0,
+ coeff_dxz_p1_p1_0,
+ coeff_dxz_p2_p1_0,
+ coeff_dxz_m1_p2_0,
+ coeff_dxz_0_p2_0,
+ coeff_dxz_p1_p2_0,
+ coeff_dxz_p2_p2_0,
+ coeff_dxz_m1_m1_p1,
+ coeff_dxz_0_m1_p1,
+ coeff_dxz_p1_m1_p1,
+ coeff_dxz_p2_m1_p1,
+ coeff_dxz_m1_0_p1,
+ coeff_dxz_0_0_p1,
+ coeff_dxz_p1_0_p1,
+ coeff_dxz_p2_0_p1,
+ coeff_dxz_m1_p1_p1,
+ coeff_dxz_0_p1_p1,
+ coeff_dxz_p1_p1_p1,
+ coeff_dxz_p2_p1_p1,
+ coeff_dxz_m1_p2_p1,
+ coeff_dxz_0_p2_p1,
+ coeff_dxz_p1_p2_p1,
+ coeff_dxz_p2_p2_p1,
+ coeff_dxz_m1_m1_p2,
+ coeff_dxz_0_m1_p2,
+ coeff_dxz_p1_m1_p2,
+ coeff_dxz_p2_m1_p2,
+ coeff_dxz_m1_0_p2,
+ coeff_dxz_0_0_p2,
+ coeff_dxz_p1_0_p2,
+ coeff_dxz_p2_0_p2,
+ coeff_dxz_m1_p1_p2,
+ coeff_dxz_0_p1_p2,
+ coeff_dxz_p1_p1_p2,
+ coeff_dxz_p2_p1_p2,
+ coeff_dxz_m1_p2_p2,
+ coeff_dxz_0_p2_p2,
+ coeff_dxz_p1_p2_p2,
+ coeff_dxz_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxz.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxz.store.c
new file mode 100644
index 0000000..d138c22
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dxz.store.c
@@ -0,0 +1,64 @@
+COEFF(-1,-1,-1) = factor * coeff_dxz_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dxz_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dxz_p1_m1_m1;
+COEFF(2,-1,-1) = factor * coeff_dxz_p2_m1_m1;
+COEFF(-1,0,-1) = factor * coeff_dxz_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dxz_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dxz_p1_0_m1;
+COEFF(2,0,-1) = factor * coeff_dxz_p2_0_m1;
+COEFF(-1,1,-1) = factor * coeff_dxz_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dxz_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dxz_p1_p1_m1;
+COEFF(2,1,-1) = factor * coeff_dxz_p2_p1_m1;
+COEFF(-1,2,-1) = factor * coeff_dxz_m1_p2_m1;
+COEFF(0,2,-1) = factor * coeff_dxz_0_p2_m1;
+COEFF(1,2,-1) = factor * coeff_dxz_p1_p2_m1;
+COEFF(2,2,-1) = factor * coeff_dxz_p2_p2_m1;
+COEFF(-1,-1,0) = factor * coeff_dxz_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dxz_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dxz_p1_m1_0;
+COEFF(2,-1,0) = factor * coeff_dxz_p2_m1_0;
+COEFF(-1,0,0) = factor * coeff_dxz_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dxz_0_0_0;
+COEFF(1,0,0) = factor * coeff_dxz_p1_0_0;
+COEFF(2,0,0) = factor * coeff_dxz_p2_0_0;
+COEFF(-1,1,0) = factor * coeff_dxz_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dxz_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dxz_p1_p1_0;
+COEFF(2,1,0) = factor * coeff_dxz_p2_p1_0;
+COEFF(-1,2,0) = factor * coeff_dxz_m1_p2_0;
+COEFF(0,2,0) = factor * coeff_dxz_0_p2_0;
+COEFF(1,2,0) = factor * coeff_dxz_p1_p2_0;
+COEFF(2,2,0) = factor * coeff_dxz_p2_p2_0;
+COEFF(-1,-1,1) = factor * coeff_dxz_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dxz_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dxz_p1_m1_p1;
+COEFF(2,-1,1) = factor * coeff_dxz_p2_m1_p1;
+COEFF(-1,0,1) = factor * coeff_dxz_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dxz_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dxz_p1_0_p1;
+COEFF(2,0,1) = factor * coeff_dxz_p2_0_p1;
+COEFF(-1,1,1) = factor * coeff_dxz_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dxz_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dxz_p1_p1_p1;
+COEFF(2,1,1) = factor * coeff_dxz_p2_p1_p1;
+COEFF(-1,2,1) = factor * coeff_dxz_m1_p2_p1;
+COEFF(0,2,1) = factor * coeff_dxz_0_p2_p1;
+COEFF(1,2,1) = factor * coeff_dxz_p1_p2_p1;
+COEFF(2,2,1) = factor * coeff_dxz_p2_p2_p1;
+COEFF(-1,-1,2) = factor * coeff_dxz_m1_m1_p2;
+COEFF(0,-1,2) = factor * coeff_dxz_0_m1_p2;
+COEFF(1,-1,2) = factor * coeff_dxz_p1_m1_p2;
+COEFF(2,-1,2) = factor * coeff_dxz_p2_m1_p2;
+COEFF(-1,0,2) = factor * coeff_dxz_m1_0_p2;
+COEFF(0,0,2) = factor * coeff_dxz_0_0_p2;
+COEFF(1,0,2) = factor * coeff_dxz_p1_0_p2;
+COEFF(2,0,2) = factor * coeff_dxz_p2_0_p2;
+COEFF(-1,1,2) = factor * coeff_dxz_m1_p1_p2;
+COEFF(0,1,2) = factor * coeff_dxz_0_p1_p2;
+COEFF(1,1,2) = factor * coeff_dxz_p1_p1_p2;
+COEFF(2,1,2) = factor * coeff_dxz_p2_p1_p2;
+COEFF(-1,2,2) = factor * coeff_dxz_m1_p2_p2;
+COEFF(0,2,2) = factor * coeff_dxz_0_p2_p2;
+COEFF(1,2,2) = factor * coeff_dxz_p1_p2_p2;
+COEFF(2,2,2) = factor * coeff_dxz_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dy.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dy.dcl.c
new file mode 100644
index 0000000..db377fb
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dy.dcl.c
@@ -0,0 +1,64 @@
+fp coeff_dy_m1_m1_m1,
+ coeff_dy_0_m1_m1,
+ coeff_dy_p1_m1_m1,
+ coeff_dy_p2_m1_m1,
+ coeff_dy_m1_0_m1,
+ coeff_dy_0_0_m1,
+ coeff_dy_p1_0_m1,
+ coeff_dy_p2_0_m1,
+ coeff_dy_m1_p1_m1,
+ coeff_dy_0_p1_m1,
+ coeff_dy_p1_p1_m1,
+ coeff_dy_p2_p1_m1,
+ coeff_dy_m1_p2_m1,
+ coeff_dy_0_p2_m1,
+ coeff_dy_p1_p2_m1,
+ coeff_dy_p2_p2_m1,
+ coeff_dy_m1_m1_0,
+ coeff_dy_0_m1_0,
+ coeff_dy_p1_m1_0,
+ coeff_dy_p2_m1_0,
+ coeff_dy_m1_0_0,
+ coeff_dy_0_0_0,
+ coeff_dy_p1_0_0,
+ coeff_dy_p2_0_0,
+ coeff_dy_m1_p1_0,
+ coeff_dy_0_p1_0,
+ coeff_dy_p1_p1_0,
+ coeff_dy_p2_p1_0,
+ coeff_dy_m1_p2_0,
+ coeff_dy_0_p2_0,
+ coeff_dy_p1_p2_0,
+ coeff_dy_p2_p2_0,
+ coeff_dy_m1_m1_p1,
+ coeff_dy_0_m1_p1,
+ coeff_dy_p1_m1_p1,
+ coeff_dy_p2_m1_p1,
+ coeff_dy_m1_0_p1,
+ coeff_dy_0_0_p1,
+ coeff_dy_p1_0_p1,
+ coeff_dy_p2_0_p1,
+ coeff_dy_m1_p1_p1,
+ coeff_dy_0_p1_p1,
+ coeff_dy_p1_p1_p1,
+ coeff_dy_p2_p1_p1,
+ coeff_dy_m1_p2_p1,
+ coeff_dy_0_p2_p1,
+ coeff_dy_p1_p2_p1,
+ coeff_dy_p2_p2_p1,
+ coeff_dy_m1_m1_p2,
+ coeff_dy_0_m1_p2,
+ coeff_dy_p1_m1_p2,
+ coeff_dy_p2_m1_p2,
+ coeff_dy_m1_0_p2,
+ coeff_dy_0_0_p2,
+ coeff_dy_p1_0_p2,
+ coeff_dy_p2_0_p2,
+ coeff_dy_m1_p1_p2,
+ coeff_dy_0_p1_p2,
+ coeff_dy_p1_p1_p2,
+ coeff_dy_p2_p1_p2,
+ coeff_dy_m1_p2_p2,
+ coeff_dy_0_p2_p2,
+ coeff_dy_p1_p2_p2,
+ coeff_dy_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dy.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dy.store.c
new file mode 100644
index 0000000..1db130f
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dy.store.c
@@ -0,0 +1,64 @@
+COEFF(-1,-1,-1) = factor * coeff_dy_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dy_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dy_p1_m1_m1;
+COEFF(2,-1,-1) = factor * coeff_dy_p2_m1_m1;
+COEFF(-1,0,-1) = factor * coeff_dy_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dy_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dy_p1_0_m1;
+COEFF(2,0,-1) = factor * coeff_dy_p2_0_m1;
+COEFF(-1,1,-1) = factor * coeff_dy_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dy_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dy_p1_p1_m1;
+COEFF(2,1,-1) = factor * coeff_dy_p2_p1_m1;
+COEFF(-1,2,-1) = factor * coeff_dy_m1_p2_m1;
+COEFF(0,2,-1) = factor * coeff_dy_0_p2_m1;
+COEFF(1,2,-1) = factor * coeff_dy_p1_p2_m1;
+COEFF(2,2,-1) = factor * coeff_dy_p2_p2_m1;
+COEFF(-1,-1,0) = factor * coeff_dy_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dy_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dy_p1_m1_0;
+COEFF(2,-1,0) = factor * coeff_dy_p2_m1_0;
+COEFF(-1,0,0) = factor * coeff_dy_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dy_0_0_0;
+COEFF(1,0,0) = factor * coeff_dy_p1_0_0;
+COEFF(2,0,0) = factor * coeff_dy_p2_0_0;
+COEFF(-1,1,0) = factor * coeff_dy_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dy_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dy_p1_p1_0;
+COEFF(2,1,0) = factor * coeff_dy_p2_p1_0;
+COEFF(-1,2,0) = factor * coeff_dy_m1_p2_0;
+COEFF(0,2,0) = factor * coeff_dy_0_p2_0;
+COEFF(1,2,0) = factor * coeff_dy_p1_p2_0;
+COEFF(2,2,0) = factor * coeff_dy_p2_p2_0;
+COEFF(-1,-1,1) = factor * coeff_dy_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dy_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dy_p1_m1_p1;
+COEFF(2,-1,1) = factor * coeff_dy_p2_m1_p1;
+COEFF(-1,0,1) = factor * coeff_dy_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dy_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dy_p1_0_p1;
+COEFF(2,0,1) = factor * coeff_dy_p2_0_p1;
+COEFF(-1,1,1) = factor * coeff_dy_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dy_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dy_p1_p1_p1;
+COEFF(2,1,1) = factor * coeff_dy_p2_p1_p1;
+COEFF(-1,2,1) = factor * coeff_dy_m1_p2_p1;
+COEFF(0,2,1) = factor * coeff_dy_0_p2_p1;
+COEFF(1,2,1) = factor * coeff_dy_p1_p2_p1;
+COEFF(2,2,1) = factor * coeff_dy_p2_p2_p1;
+COEFF(-1,-1,2) = factor * coeff_dy_m1_m1_p2;
+COEFF(0,-1,2) = factor * coeff_dy_0_m1_p2;
+COEFF(1,-1,2) = factor * coeff_dy_p1_m1_p2;
+COEFF(2,-1,2) = factor * coeff_dy_p2_m1_p2;
+COEFF(-1,0,2) = factor * coeff_dy_m1_0_p2;
+COEFF(0,0,2) = factor * coeff_dy_0_0_p2;
+COEFF(1,0,2) = factor * coeff_dy_p1_0_p2;
+COEFF(2,0,2) = factor * coeff_dy_p2_0_p2;
+COEFF(-1,1,2) = factor * coeff_dy_m1_p1_p2;
+COEFF(0,1,2) = factor * coeff_dy_0_p1_p2;
+COEFF(1,1,2) = factor * coeff_dy_p1_p1_p2;
+COEFF(2,1,2) = factor * coeff_dy_p2_p1_p2;
+COEFF(-1,2,2) = factor * coeff_dy_m1_p2_p2;
+COEFF(0,2,2) = factor * coeff_dy_0_p2_p2;
+COEFF(1,2,2) = factor * coeff_dy_p1_p2_p2;
+COEFF(2,2,2) = factor * coeff_dy_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dyy.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dyy.dcl.c
new file mode 100644
index 0000000..93735d8
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dyy.dcl.c
@@ -0,0 +1,64 @@
+fp coeff_dyy_m1_m1_m1,
+ coeff_dyy_0_m1_m1,
+ coeff_dyy_p1_m1_m1,
+ coeff_dyy_p2_m1_m1,
+ coeff_dyy_m1_0_m1,
+ coeff_dyy_0_0_m1,
+ coeff_dyy_p1_0_m1,
+ coeff_dyy_p2_0_m1,
+ coeff_dyy_m1_p1_m1,
+ coeff_dyy_0_p1_m1,
+ coeff_dyy_p1_p1_m1,
+ coeff_dyy_p2_p1_m1,
+ coeff_dyy_m1_p2_m1,
+ coeff_dyy_0_p2_m1,
+ coeff_dyy_p1_p2_m1,
+ coeff_dyy_p2_p2_m1,
+ coeff_dyy_m1_m1_0,
+ coeff_dyy_0_m1_0,
+ coeff_dyy_p1_m1_0,
+ coeff_dyy_p2_m1_0,
+ coeff_dyy_m1_0_0,
+ coeff_dyy_0_0_0,
+ coeff_dyy_p1_0_0,
+ coeff_dyy_p2_0_0,
+ coeff_dyy_m1_p1_0,
+ coeff_dyy_0_p1_0,
+ coeff_dyy_p1_p1_0,
+ coeff_dyy_p2_p1_0,
+ coeff_dyy_m1_p2_0,
+ coeff_dyy_0_p2_0,
+ coeff_dyy_p1_p2_0,
+ coeff_dyy_p2_p2_0,
+ coeff_dyy_m1_m1_p1,
+ coeff_dyy_0_m1_p1,
+ coeff_dyy_p1_m1_p1,
+ coeff_dyy_p2_m1_p1,
+ coeff_dyy_m1_0_p1,
+ coeff_dyy_0_0_p1,
+ coeff_dyy_p1_0_p1,
+ coeff_dyy_p2_0_p1,
+ coeff_dyy_m1_p1_p1,
+ coeff_dyy_0_p1_p1,
+ coeff_dyy_p1_p1_p1,
+ coeff_dyy_p2_p1_p1,
+ coeff_dyy_m1_p2_p1,
+ coeff_dyy_0_p2_p1,
+ coeff_dyy_p1_p2_p1,
+ coeff_dyy_p2_p2_p1,
+ coeff_dyy_m1_m1_p2,
+ coeff_dyy_0_m1_p2,
+ coeff_dyy_p1_m1_p2,
+ coeff_dyy_p2_m1_p2,
+ coeff_dyy_m1_0_p2,
+ coeff_dyy_0_0_p2,
+ coeff_dyy_p1_0_p2,
+ coeff_dyy_p2_0_p2,
+ coeff_dyy_m1_p1_p2,
+ coeff_dyy_0_p1_p2,
+ coeff_dyy_p1_p1_p2,
+ coeff_dyy_p2_p1_p2,
+ coeff_dyy_m1_p2_p2,
+ coeff_dyy_0_p2_p2,
+ coeff_dyy_p1_p2_p2,
+ coeff_dyy_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dyy.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dyy.store.c
new file mode 100644
index 0000000..745c07a
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dyy.store.c
@@ -0,0 +1,64 @@
+COEFF(-1,-1,-1) = factor * coeff_dyy_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dyy_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dyy_p1_m1_m1;
+COEFF(2,-1,-1) = factor * coeff_dyy_p2_m1_m1;
+COEFF(-1,0,-1) = factor * coeff_dyy_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dyy_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dyy_p1_0_m1;
+COEFF(2,0,-1) = factor * coeff_dyy_p2_0_m1;
+COEFF(-1,1,-1) = factor * coeff_dyy_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dyy_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dyy_p1_p1_m1;
+COEFF(2,1,-1) = factor * coeff_dyy_p2_p1_m1;
+COEFF(-1,2,-1) = factor * coeff_dyy_m1_p2_m1;
+COEFF(0,2,-1) = factor * coeff_dyy_0_p2_m1;
+COEFF(1,2,-1) = factor * coeff_dyy_p1_p2_m1;
+COEFF(2,2,-1) = factor * coeff_dyy_p2_p2_m1;
+COEFF(-1,-1,0) = factor * coeff_dyy_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dyy_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dyy_p1_m1_0;
+COEFF(2,-1,0) = factor * coeff_dyy_p2_m1_0;
+COEFF(-1,0,0) = factor * coeff_dyy_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dyy_0_0_0;
+COEFF(1,0,0) = factor * coeff_dyy_p1_0_0;
+COEFF(2,0,0) = factor * coeff_dyy_p2_0_0;
+COEFF(-1,1,0) = factor * coeff_dyy_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dyy_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dyy_p1_p1_0;
+COEFF(2,1,0) = factor * coeff_dyy_p2_p1_0;
+COEFF(-1,2,0) = factor * coeff_dyy_m1_p2_0;
+COEFF(0,2,0) = factor * coeff_dyy_0_p2_0;
+COEFF(1,2,0) = factor * coeff_dyy_p1_p2_0;
+COEFF(2,2,0) = factor * coeff_dyy_p2_p2_0;
+COEFF(-1,-1,1) = factor * coeff_dyy_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dyy_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dyy_p1_m1_p1;
+COEFF(2,-1,1) = factor * coeff_dyy_p2_m1_p1;
+COEFF(-1,0,1) = factor * coeff_dyy_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dyy_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dyy_p1_0_p1;
+COEFF(2,0,1) = factor * coeff_dyy_p2_0_p1;
+COEFF(-1,1,1) = factor * coeff_dyy_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dyy_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dyy_p1_p1_p1;
+COEFF(2,1,1) = factor * coeff_dyy_p2_p1_p1;
+COEFF(-1,2,1) = factor * coeff_dyy_m1_p2_p1;
+COEFF(0,2,1) = factor * coeff_dyy_0_p2_p1;
+COEFF(1,2,1) = factor * coeff_dyy_p1_p2_p1;
+COEFF(2,2,1) = factor * coeff_dyy_p2_p2_p1;
+COEFF(-1,-1,2) = factor * coeff_dyy_m1_m1_p2;
+COEFF(0,-1,2) = factor * coeff_dyy_0_m1_p2;
+COEFF(1,-1,2) = factor * coeff_dyy_p1_m1_p2;
+COEFF(2,-1,2) = factor * coeff_dyy_p2_m1_p2;
+COEFF(-1,0,2) = factor * coeff_dyy_m1_0_p2;
+COEFF(0,0,2) = factor * coeff_dyy_0_0_p2;
+COEFF(1,0,2) = factor * coeff_dyy_p1_0_p2;
+COEFF(2,0,2) = factor * coeff_dyy_p2_0_p2;
+COEFF(-1,1,2) = factor * coeff_dyy_m1_p1_p2;
+COEFF(0,1,2) = factor * coeff_dyy_0_p1_p2;
+COEFF(1,1,2) = factor * coeff_dyy_p1_p1_p2;
+COEFF(2,1,2) = factor * coeff_dyy_p2_p1_p2;
+COEFF(-1,2,2) = factor * coeff_dyy_m1_p2_p2;
+COEFF(0,2,2) = factor * coeff_dyy_0_p2_p2;
+COEFF(1,2,2) = factor * coeff_dyy_p1_p2_p2;
+COEFF(2,2,2) = factor * coeff_dyy_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dyz.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dyz.dcl.c
new file mode 100644
index 0000000..c82c714
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dyz.dcl.c
@@ -0,0 +1,64 @@
+fp coeff_dyz_m1_m1_m1,
+ coeff_dyz_0_m1_m1,
+ coeff_dyz_p1_m1_m1,
+ coeff_dyz_p2_m1_m1,
+ coeff_dyz_m1_0_m1,
+ coeff_dyz_0_0_m1,
+ coeff_dyz_p1_0_m1,
+ coeff_dyz_p2_0_m1,
+ coeff_dyz_m1_p1_m1,
+ coeff_dyz_0_p1_m1,
+ coeff_dyz_p1_p1_m1,
+ coeff_dyz_p2_p1_m1,
+ coeff_dyz_m1_p2_m1,
+ coeff_dyz_0_p2_m1,
+ coeff_dyz_p1_p2_m1,
+ coeff_dyz_p2_p2_m1,
+ coeff_dyz_m1_m1_0,
+ coeff_dyz_0_m1_0,
+ coeff_dyz_p1_m1_0,
+ coeff_dyz_p2_m1_0,
+ coeff_dyz_m1_0_0,
+ coeff_dyz_0_0_0,
+ coeff_dyz_p1_0_0,
+ coeff_dyz_p2_0_0,
+ coeff_dyz_m1_p1_0,
+ coeff_dyz_0_p1_0,
+ coeff_dyz_p1_p1_0,
+ coeff_dyz_p2_p1_0,
+ coeff_dyz_m1_p2_0,
+ coeff_dyz_0_p2_0,
+ coeff_dyz_p1_p2_0,
+ coeff_dyz_p2_p2_0,
+ coeff_dyz_m1_m1_p1,
+ coeff_dyz_0_m1_p1,
+ coeff_dyz_p1_m1_p1,
+ coeff_dyz_p2_m1_p1,
+ coeff_dyz_m1_0_p1,
+ coeff_dyz_0_0_p1,
+ coeff_dyz_p1_0_p1,
+ coeff_dyz_p2_0_p1,
+ coeff_dyz_m1_p1_p1,
+ coeff_dyz_0_p1_p1,
+ coeff_dyz_p1_p1_p1,
+ coeff_dyz_p2_p1_p1,
+ coeff_dyz_m1_p2_p1,
+ coeff_dyz_0_p2_p1,
+ coeff_dyz_p1_p2_p1,
+ coeff_dyz_p2_p2_p1,
+ coeff_dyz_m1_m1_p2,
+ coeff_dyz_0_m1_p2,
+ coeff_dyz_p1_m1_p2,
+ coeff_dyz_p2_m1_p2,
+ coeff_dyz_m1_0_p2,
+ coeff_dyz_0_0_p2,
+ coeff_dyz_p1_0_p2,
+ coeff_dyz_p2_0_p2,
+ coeff_dyz_m1_p1_p2,
+ coeff_dyz_0_p1_p2,
+ coeff_dyz_p1_p1_p2,
+ coeff_dyz_p2_p1_p2,
+ coeff_dyz_m1_p2_p2,
+ coeff_dyz_0_p2_p2,
+ coeff_dyz_p1_p2_p2,
+ coeff_dyz_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dyz.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dyz.store.c
new file mode 100644
index 0000000..89dae4f
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dyz.store.c
@@ -0,0 +1,64 @@
+COEFF(-1,-1,-1) = factor * coeff_dyz_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dyz_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dyz_p1_m1_m1;
+COEFF(2,-1,-1) = factor * coeff_dyz_p2_m1_m1;
+COEFF(-1,0,-1) = factor * coeff_dyz_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dyz_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dyz_p1_0_m1;
+COEFF(2,0,-1) = factor * coeff_dyz_p2_0_m1;
+COEFF(-1,1,-1) = factor * coeff_dyz_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dyz_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dyz_p1_p1_m1;
+COEFF(2,1,-1) = factor * coeff_dyz_p2_p1_m1;
+COEFF(-1,2,-1) = factor * coeff_dyz_m1_p2_m1;
+COEFF(0,2,-1) = factor * coeff_dyz_0_p2_m1;
+COEFF(1,2,-1) = factor * coeff_dyz_p1_p2_m1;
+COEFF(2,2,-1) = factor * coeff_dyz_p2_p2_m1;
+COEFF(-1,-1,0) = factor * coeff_dyz_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dyz_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dyz_p1_m1_0;
+COEFF(2,-1,0) = factor * coeff_dyz_p2_m1_0;
+COEFF(-1,0,0) = factor * coeff_dyz_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dyz_0_0_0;
+COEFF(1,0,0) = factor * coeff_dyz_p1_0_0;
+COEFF(2,0,0) = factor * coeff_dyz_p2_0_0;
+COEFF(-1,1,0) = factor * coeff_dyz_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dyz_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dyz_p1_p1_0;
+COEFF(2,1,0) = factor * coeff_dyz_p2_p1_0;
+COEFF(-1,2,0) = factor * coeff_dyz_m1_p2_0;
+COEFF(0,2,0) = factor * coeff_dyz_0_p2_0;
+COEFF(1,2,0) = factor * coeff_dyz_p1_p2_0;
+COEFF(2,2,0) = factor * coeff_dyz_p2_p2_0;
+COEFF(-1,-1,1) = factor * coeff_dyz_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dyz_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dyz_p1_m1_p1;
+COEFF(2,-1,1) = factor * coeff_dyz_p2_m1_p1;
+COEFF(-1,0,1) = factor * coeff_dyz_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dyz_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dyz_p1_0_p1;
+COEFF(2,0,1) = factor * coeff_dyz_p2_0_p1;
+COEFF(-1,1,1) = factor * coeff_dyz_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dyz_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dyz_p1_p1_p1;
+COEFF(2,1,1) = factor * coeff_dyz_p2_p1_p1;
+COEFF(-1,2,1) = factor * coeff_dyz_m1_p2_p1;
+COEFF(0,2,1) = factor * coeff_dyz_0_p2_p1;
+COEFF(1,2,1) = factor * coeff_dyz_p1_p2_p1;
+COEFF(2,2,1) = factor * coeff_dyz_p2_p2_p1;
+COEFF(-1,-1,2) = factor * coeff_dyz_m1_m1_p2;
+COEFF(0,-1,2) = factor * coeff_dyz_0_m1_p2;
+COEFF(1,-1,2) = factor * coeff_dyz_p1_m1_p2;
+COEFF(2,-1,2) = factor * coeff_dyz_p2_m1_p2;
+COEFF(-1,0,2) = factor * coeff_dyz_m1_0_p2;
+COEFF(0,0,2) = factor * coeff_dyz_0_0_p2;
+COEFF(1,0,2) = factor * coeff_dyz_p1_0_p2;
+COEFF(2,0,2) = factor * coeff_dyz_p2_0_p2;
+COEFF(-1,1,2) = factor * coeff_dyz_m1_p1_p2;
+COEFF(0,1,2) = factor * coeff_dyz_0_p1_p2;
+COEFF(1,1,2) = factor * coeff_dyz_p1_p1_p2;
+COEFF(2,1,2) = factor * coeff_dyz_p2_p1_p2;
+COEFF(-1,2,2) = factor * coeff_dyz_m1_p2_p2;
+COEFF(0,2,2) = factor * coeff_dyz_0_p2_p2;
+COEFF(1,2,2) = factor * coeff_dyz_p1_p2_p2;
+COEFF(2,2,2) = factor * coeff_dyz_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dz.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dz.dcl.c
new file mode 100644
index 0000000..5d1e021
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dz.dcl.c
@@ -0,0 +1,64 @@
+fp coeff_dz_m1_m1_m1,
+ coeff_dz_0_m1_m1,
+ coeff_dz_p1_m1_m1,
+ coeff_dz_p2_m1_m1,
+ coeff_dz_m1_0_m1,
+ coeff_dz_0_0_m1,
+ coeff_dz_p1_0_m1,
+ coeff_dz_p2_0_m1,
+ coeff_dz_m1_p1_m1,
+ coeff_dz_0_p1_m1,
+ coeff_dz_p1_p1_m1,
+ coeff_dz_p2_p1_m1,
+ coeff_dz_m1_p2_m1,
+ coeff_dz_0_p2_m1,
+ coeff_dz_p1_p2_m1,
+ coeff_dz_p2_p2_m1,
+ coeff_dz_m1_m1_0,
+ coeff_dz_0_m1_0,
+ coeff_dz_p1_m1_0,
+ coeff_dz_p2_m1_0,
+ coeff_dz_m1_0_0,
+ coeff_dz_0_0_0,
+ coeff_dz_p1_0_0,
+ coeff_dz_p2_0_0,
+ coeff_dz_m1_p1_0,
+ coeff_dz_0_p1_0,
+ coeff_dz_p1_p1_0,
+ coeff_dz_p2_p1_0,
+ coeff_dz_m1_p2_0,
+ coeff_dz_0_p2_0,
+ coeff_dz_p1_p2_0,
+ coeff_dz_p2_p2_0,
+ coeff_dz_m1_m1_p1,
+ coeff_dz_0_m1_p1,
+ coeff_dz_p1_m1_p1,
+ coeff_dz_p2_m1_p1,
+ coeff_dz_m1_0_p1,
+ coeff_dz_0_0_p1,
+ coeff_dz_p1_0_p1,
+ coeff_dz_p2_0_p1,
+ coeff_dz_m1_p1_p1,
+ coeff_dz_0_p1_p1,
+ coeff_dz_p1_p1_p1,
+ coeff_dz_p2_p1_p1,
+ coeff_dz_m1_p2_p1,
+ coeff_dz_0_p2_p1,
+ coeff_dz_p1_p2_p1,
+ coeff_dz_p2_p2_p1,
+ coeff_dz_m1_m1_p2,
+ coeff_dz_0_m1_p2,
+ coeff_dz_p1_m1_p2,
+ coeff_dz_p2_m1_p2,
+ coeff_dz_m1_0_p2,
+ coeff_dz_0_0_p2,
+ coeff_dz_p1_0_p2,
+ coeff_dz_p2_0_p2,
+ coeff_dz_m1_p1_p2,
+ coeff_dz_0_p1_p2,
+ coeff_dz_p1_p1_p2,
+ coeff_dz_p2_p1_p2,
+ coeff_dz_m1_p2_p2,
+ coeff_dz_0_p2_p2,
+ coeff_dz_p1_p2_p2,
+ coeff_dz_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dz.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dz.store.c
new file mode 100644
index 0000000..8b4cc5b
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dz.store.c
@@ -0,0 +1,64 @@
+COEFF(-1,-1,-1) = factor * coeff_dz_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dz_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dz_p1_m1_m1;
+COEFF(2,-1,-1) = factor * coeff_dz_p2_m1_m1;
+COEFF(-1,0,-1) = factor * coeff_dz_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dz_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dz_p1_0_m1;
+COEFF(2,0,-1) = factor * coeff_dz_p2_0_m1;
+COEFF(-1,1,-1) = factor * coeff_dz_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dz_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dz_p1_p1_m1;
+COEFF(2,1,-1) = factor * coeff_dz_p2_p1_m1;
+COEFF(-1,2,-1) = factor * coeff_dz_m1_p2_m1;
+COEFF(0,2,-1) = factor * coeff_dz_0_p2_m1;
+COEFF(1,2,-1) = factor * coeff_dz_p1_p2_m1;
+COEFF(2,2,-1) = factor * coeff_dz_p2_p2_m1;
+COEFF(-1,-1,0) = factor * coeff_dz_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dz_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dz_p1_m1_0;
+COEFF(2,-1,0) = factor * coeff_dz_p2_m1_0;
+COEFF(-1,0,0) = factor * coeff_dz_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dz_0_0_0;
+COEFF(1,0,0) = factor * coeff_dz_p1_0_0;
+COEFF(2,0,0) = factor * coeff_dz_p2_0_0;
+COEFF(-1,1,0) = factor * coeff_dz_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dz_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dz_p1_p1_0;
+COEFF(2,1,0) = factor * coeff_dz_p2_p1_0;
+COEFF(-1,2,0) = factor * coeff_dz_m1_p2_0;
+COEFF(0,2,0) = factor * coeff_dz_0_p2_0;
+COEFF(1,2,0) = factor * coeff_dz_p1_p2_0;
+COEFF(2,2,0) = factor * coeff_dz_p2_p2_0;
+COEFF(-1,-1,1) = factor * coeff_dz_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dz_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dz_p1_m1_p1;
+COEFF(2,-1,1) = factor * coeff_dz_p2_m1_p1;
+COEFF(-1,0,1) = factor * coeff_dz_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dz_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dz_p1_0_p1;
+COEFF(2,0,1) = factor * coeff_dz_p2_0_p1;
+COEFF(-1,1,1) = factor * coeff_dz_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dz_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dz_p1_p1_p1;
+COEFF(2,1,1) = factor * coeff_dz_p2_p1_p1;
+COEFF(-1,2,1) = factor * coeff_dz_m1_p2_p1;
+COEFF(0,2,1) = factor * coeff_dz_0_p2_p1;
+COEFF(1,2,1) = factor * coeff_dz_p1_p2_p1;
+COEFF(2,2,1) = factor * coeff_dz_p2_p2_p1;
+COEFF(-1,-1,2) = factor * coeff_dz_m1_m1_p2;
+COEFF(0,-1,2) = factor * coeff_dz_0_m1_p2;
+COEFF(1,-1,2) = factor * coeff_dz_p1_m1_p2;
+COEFF(2,-1,2) = factor * coeff_dz_p2_m1_p2;
+COEFF(-1,0,2) = factor * coeff_dz_m1_0_p2;
+COEFF(0,0,2) = factor * coeff_dz_0_0_p2;
+COEFF(1,0,2) = factor * coeff_dz_p1_0_p2;
+COEFF(2,0,2) = factor * coeff_dz_p2_0_p2;
+COEFF(-1,1,2) = factor * coeff_dz_m1_p1_p2;
+COEFF(0,1,2) = factor * coeff_dz_0_p1_p2;
+COEFF(1,1,2) = factor * coeff_dz_p1_p1_p2;
+COEFF(2,1,2) = factor * coeff_dz_p2_p1_p2;
+COEFF(-1,2,2) = factor * coeff_dz_m1_p2_p2;
+COEFF(0,2,2) = factor * coeff_dz_0_p2_p2;
+COEFF(1,2,2) = factor * coeff_dz_p1_p2_p2;
+COEFF(2,2,2) = factor * coeff_dz_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dzz.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dzz.dcl.c
new file mode 100644
index 0000000..f6fb93d
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dzz.dcl.c
@@ -0,0 +1,64 @@
+fp coeff_dzz_m1_m1_m1,
+ coeff_dzz_0_m1_m1,
+ coeff_dzz_p1_m1_m1,
+ coeff_dzz_p2_m1_m1,
+ coeff_dzz_m1_0_m1,
+ coeff_dzz_0_0_m1,
+ coeff_dzz_p1_0_m1,
+ coeff_dzz_p2_0_m1,
+ coeff_dzz_m1_p1_m1,
+ coeff_dzz_0_p1_m1,
+ coeff_dzz_p1_p1_m1,
+ coeff_dzz_p2_p1_m1,
+ coeff_dzz_m1_p2_m1,
+ coeff_dzz_0_p2_m1,
+ coeff_dzz_p1_p2_m1,
+ coeff_dzz_p2_p2_m1,
+ coeff_dzz_m1_m1_0,
+ coeff_dzz_0_m1_0,
+ coeff_dzz_p1_m1_0,
+ coeff_dzz_p2_m1_0,
+ coeff_dzz_m1_0_0,
+ coeff_dzz_0_0_0,
+ coeff_dzz_p1_0_0,
+ coeff_dzz_p2_0_0,
+ coeff_dzz_m1_p1_0,
+ coeff_dzz_0_p1_0,
+ coeff_dzz_p1_p1_0,
+ coeff_dzz_p2_p1_0,
+ coeff_dzz_m1_p2_0,
+ coeff_dzz_0_p2_0,
+ coeff_dzz_p1_p2_0,
+ coeff_dzz_p2_p2_0,
+ coeff_dzz_m1_m1_p1,
+ coeff_dzz_0_m1_p1,
+ coeff_dzz_p1_m1_p1,
+ coeff_dzz_p2_m1_p1,
+ coeff_dzz_m1_0_p1,
+ coeff_dzz_0_0_p1,
+ coeff_dzz_p1_0_p1,
+ coeff_dzz_p2_0_p1,
+ coeff_dzz_m1_p1_p1,
+ coeff_dzz_0_p1_p1,
+ coeff_dzz_p1_p1_p1,
+ coeff_dzz_p2_p1_p1,
+ coeff_dzz_m1_p2_p1,
+ coeff_dzz_0_p2_p1,
+ coeff_dzz_p1_p2_p1,
+ coeff_dzz_p2_p2_p1,
+ coeff_dzz_m1_m1_p2,
+ coeff_dzz_0_m1_p2,
+ coeff_dzz_p1_m1_p2,
+ coeff_dzz_p2_m1_p2,
+ coeff_dzz_m1_0_p2,
+ coeff_dzz_0_0_p2,
+ coeff_dzz_p1_0_p2,
+ coeff_dzz_p2_0_p2,
+ coeff_dzz_m1_p1_p2,
+ coeff_dzz_0_p1_p2,
+ coeff_dzz_p1_p1_p2,
+ coeff_dzz_p2_p1_p2,
+ coeff_dzz_m1_p2_p2,
+ coeff_dzz_0_p2_p2,
+ coeff_dzz_p1_p2_p2,
+ coeff_dzz_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dzz.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dzz.store.c
new file mode 100644
index 0000000..ba3a2c0
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/coeff-dzz.store.c
@@ -0,0 +1,64 @@
+COEFF(-1,-1,-1) = factor * coeff_dzz_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dzz_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dzz_p1_m1_m1;
+COEFF(2,-1,-1) = factor * coeff_dzz_p2_m1_m1;
+COEFF(-1,0,-1) = factor * coeff_dzz_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dzz_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dzz_p1_0_m1;
+COEFF(2,0,-1) = factor * coeff_dzz_p2_0_m1;
+COEFF(-1,1,-1) = factor * coeff_dzz_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dzz_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dzz_p1_p1_m1;
+COEFF(2,1,-1) = factor * coeff_dzz_p2_p1_m1;
+COEFF(-1,2,-1) = factor * coeff_dzz_m1_p2_m1;
+COEFF(0,2,-1) = factor * coeff_dzz_0_p2_m1;
+COEFF(1,2,-1) = factor * coeff_dzz_p1_p2_m1;
+COEFF(2,2,-1) = factor * coeff_dzz_p2_p2_m1;
+COEFF(-1,-1,0) = factor * coeff_dzz_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dzz_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dzz_p1_m1_0;
+COEFF(2,-1,0) = factor * coeff_dzz_p2_m1_0;
+COEFF(-1,0,0) = factor * coeff_dzz_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dzz_0_0_0;
+COEFF(1,0,0) = factor * coeff_dzz_p1_0_0;
+COEFF(2,0,0) = factor * coeff_dzz_p2_0_0;
+COEFF(-1,1,0) = factor * coeff_dzz_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dzz_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dzz_p1_p1_0;
+COEFF(2,1,0) = factor * coeff_dzz_p2_p1_0;
+COEFF(-1,2,0) = factor * coeff_dzz_m1_p2_0;
+COEFF(0,2,0) = factor * coeff_dzz_0_p2_0;
+COEFF(1,2,0) = factor * coeff_dzz_p1_p2_0;
+COEFF(2,2,0) = factor * coeff_dzz_p2_p2_0;
+COEFF(-1,-1,1) = factor * coeff_dzz_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dzz_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dzz_p1_m1_p1;
+COEFF(2,-1,1) = factor * coeff_dzz_p2_m1_p1;
+COEFF(-1,0,1) = factor * coeff_dzz_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dzz_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dzz_p1_0_p1;
+COEFF(2,0,1) = factor * coeff_dzz_p2_0_p1;
+COEFF(-1,1,1) = factor * coeff_dzz_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dzz_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dzz_p1_p1_p1;
+COEFF(2,1,1) = factor * coeff_dzz_p2_p1_p1;
+COEFF(-1,2,1) = factor * coeff_dzz_m1_p2_p1;
+COEFF(0,2,1) = factor * coeff_dzz_0_p2_p1;
+COEFF(1,2,1) = factor * coeff_dzz_p1_p2_p1;
+COEFF(2,2,1) = factor * coeff_dzz_p2_p2_p1;
+COEFF(-1,-1,2) = factor * coeff_dzz_m1_m1_p2;
+COEFF(0,-1,2) = factor * coeff_dzz_0_m1_p2;
+COEFF(1,-1,2) = factor * coeff_dzz_p1_m1_p2;
+COEFF(2,-1,2) = factor * coeff_dzz_p2_m1_p2;
+COEFF(-1,0,2) = factor * coeff_dzz_m1_0_p2;
+COEFF(0,0,2) = factor * coeff_dzz_0_0_p2;
+COEFF(1,0,2) = factor * coeff_dzz_p1_0_p2;
+COEFF(2,0,2) = factor * coeff_dzz_p2_0_p2;
+COEFF(-1,1,2) = factor * coeff_dzz_m1_p1_p2;
+COEFF(0,1,2) = factor * coeff_dzz_0_p1_p2;
+COEFF(1,1,2) = factor * coeff_dzz_p1_p1_p2;
+COEFF(2,1,2) = factor * coeff_dzz_p2_p1_p2;
+COEFF(-1,2,2) = factor * coeff_dzz_m1_p2_p2;
+COEFF(0,2,2) = factor * coeff_dzz_0_p2_p2;
+COEFF(1,2,2) = factor * coeff_dzz_p1_p2_p2;
+COEFF(2,2,2) = factor * coeff_dzz_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/data-var.assign.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/data-var.assign.c
new file mode 100644
index 0000000..4613787
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/data-var.assign.c
@@ -0,0 +1,64 @@
+data_m1_m1_m1 = DATA(-1,-1,-1);
+data_0_m1_m1 = DATA(0,-1,-1);
+data_p1_m1_m1 = DATA(1,-1,-1);
+data_p2_m1_m1 = DATA(2,-1,-1);
+data_m1_0_m1 = DATA(-1,0,-1);
+data_0_0_m1 = DATA(0,0,-1);
+data_p1_0_m1 = DATA(1,0,-1);
+data_p2_0_m1 = DATA(2,0,-1);
+data_m1_p1_m1 = DATA(-1,1,-1);
+data_0_p1_m1 = DATA(0,1,-1);
+data_p1_p1_m1 = DATA(1,1,-1);
+data_p2_p1_m1 = DATA(2,1,-1);
+data_m1_p2_m1 = DATA(-1,2,-1);
+data_0_p2_m1 = DATA(0,2,-1);
+data_p1_p2_m1 = DATA(1,2,-1);
+data_p2_p2_m1 = DATA(2,2,-1);
+data_m1_m1_0 = DATA(-1,-1,0);
+data_0_m1_0 = DATA(0,-1,0);
+data_p1_m1_0 = DATA(1,-1,0);
+data_p2_m1_0 = DATA(2,-1,0);
+data_m1_0_0 = DATA(-1,0,0);
+data_0_0_0 = DATA(0,0,0);
+data_p1_0_0 = DATA(1,0,0);
+data_p2_0_0 = DATA(2,0,0);
+data_m1_p1_0 = DATA(-1,1,0);
+data_0_p1_0 = DATA(0,1,0);
+data_p1_p1_0 = DATA(1,1,0);
+data_p2_p1_0 = DATA(2,1,0);
+data_m1_p2_0 = DATA(-1,2,0);
+data_0_p2_0 = DATA(0,2,0);
+data_p1_p2_0 = DATA(1,2,0);
+data_p2_p2_0 = DATA(2,2,0);
+data_m1_m1_p1 = DATA(-1,-1,1);
+data_0_m1_p1 = DATA(0,-1,1);
+data_p1_m1_p1 = DATA(1,-1,1);
+data_p2_m1_p1 = DATA(2,-1,1);
+data_m1_0_p1 = DATA(-1,0,1);
+data_0_0_p1 = DATA(0,0,1);
+data_p1_0_p1 = DATA(1,0,1);
+data_p2_0_p1 = DATA(2,0,1);
+data_m1_p1_p1 = DATA(-1,1,1);
+data_0_p1_p1 = DATA(0,1,1);
+data_p1_p1_p1 = DATA(1,1,1);
+data_p2_p1_p1 = DATA(2,1,1);
+data_m1_p2_p1 = DATA(-1,2,1);
+data_0_p2_p1 = DATA(0,2,1);
+data_p1_p2_p1 = DATA(1,2,1);
+data_p2_p2_p1 = DATA(2,2,1);
+data_m1_m1_p2 = DATA(-1,-1,2);
+data_0_m1_p2 = DATA(0,-1,2);
+data_p1_m1_p2 = DATA(1,-1,2);
+data_p2_m1_p2 = DATA(2,-1,2);
+data_m1_0_p2 = DATA(-1,0,2);
+data_0_0_p2 = DATA(0,0,2);
+data_p1_0_p2 = DATA(1,0,2);
+data_p2_0_p2 = DATA(2,0,2);
+data_m1_p1_p2 = DATA(-1,1,2);
+data_0_p1_p2 = DATA(0,1,2);
+data_p1_p1_p2 = DATA(1,1,2);
+data_p2_p1_p2 = DATA(2,1,2);
+data_m1_p2_p2 = DATA(-1,2,2);
+data_0_p2_p2 = DATA(0,2,2);
+data_p1_p2_p2 = DATA(1,2,2);
+data_p2_p2_p2 = DATA(2,2,2);
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/data-var.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/data-var.dcl.c
new file mode 100644
index 0000000..6c8b455
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/data-var.dcl.c
@@ -0,0 +1,64 @@
+fp data_m1_m1_m1,
+ data_0_m1_m1,
+ data_p1_m1_m1,
+ data_p2_m1_m1,
+ data_m1_0_m1,
+ data_0_0_m1,
+ data_p1_0_m1,
+ data_p2_0_m1,
+ data_m1_p1_m1,
+ data_0_p1_m1,
+ data_p1_p1_m1,
+ data_p2_p1_m1,
+ data_m1_p2_m1,
+ data_0_p2_m1,
+ data_p1_p2_m1,
+ data_p2_p2_m1,
+ data_m1_m1_0,
+ data_0_m1_0,
+ data_p1_m1_0,
+ data_p2_m1_0,
+ data_m1_0_0,
+ data_0_0_0,
+ data_p1_0_0,
+ data_p2_0_0,
+ data_m1_p1_0,
+ data_0_p1_0,
+ data_p1_p1_0,
+ data_p2_p1_0,
+ data_m1_p2_0,
+ data_0_p2_0,
+ data_p1_p2_0,
+ data_p2_p2_0,
+ data_m1_m1_p1,
+ data_0_m1_p1,
+ data_p1_m1_p1,
+ data_p2_m1_p1,
+ data_m1_0_p1,
+ data_0_0_p1,
+ data_p1_0_p1,
+ data_p2_0_p1,
+ data_m1_p1_p1,
+ data_0_p1_p1,
+ data_p1_p1_p1,
+ data_p2_p1_p1,
+ data_m1_p2_p1,
+ data_0_p2_p1,
+ data_p1_p2_p1,
+ data_p2_p2_p1,
+ data_m1_m1_p2,
+ data_0_m1_p2,
+ data_p1_m1_p2,
+ data_p2_m1_p2,
+ data_m1_0_p2,
+ data_0_0_p2,
+ data_p1_0_p2,
+ data_p2_0_p2,
+ data_m1_p1_p2,
+ data_0_p1_p2,
+ data_p1_p1_p2,
+ data_p2_p1_p2,
+ data_m1_p2_p2,
+ data_0_p2_p2,
+ data_p1_p2_p2,
+ data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-I.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-I.compute.c
new file mode 100644
index 0000000..4c1fdaa
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-I.compute.c
@@ -0,0 +1,65 @@
+result =
+ coeff_I_m1_m1_m1*data_m1_m1_m1
+ + coeff_I_0_m1_m1*data_0_m1_m1
+ + coeff_I_p1_m1_m1*data_p1_m1_m1
+ + coeff_I_p2_m1_m1*data_p2_m1_m1
+ + coeff_I_m1_0_m1*data_m1_0_m1
+ + coeff_I_0_0_m1*data_0_0_m1
+ + coeff_I_p1_0_m1*data_p1_0_m1
+ + coeff_I_p2_0_m1*data_p2_0_m1
+ + coeff_I_m1_p1_m1*data_m1_p1_m1
+ + coeff_I_0_p1_m1*data_0_p1_m1
+ + coeff_I_p1_p1_m1*data_p1_p1_m1
+ + coeff_I_p2_p1_m1*data_p2_p1_m1
+ + coeff_I_m1_p2_m1*data_m1_p2_m1
+ + coeff_I_0_p2_m1*data_0_p2_m1
+ + coeff_I_p1_p2_m1*data_p1_p2_m1
+ + coeff_I_p2_p2_m1*data_p2_p2_m1
+ + coeff_I_m1_m1_0*data_m1_m1_0
+ + coeff_I_0_m1_0*data_0_m1_0
+ + coeff_I_p1_m1_0*data_p1_m1_0
+ + coeff_I_p2_m1_0*data_p2_m1_0
+ + coeff_I_m1_0_0*data_m1_0_0
+ + coeff_I_0_0_0*data_0_0_0
+ + coeff_I_p1_0_0*data_p1_0_0
+ + coeff_I_p2_0_0*data_p2_0_0
+ + coeff_I_m1_p1_0*data_m1_p1_0
+ + coeff_I_0_p1_0*data_0_p1_0
+ + coeff_I_p1_p1_0*data_p1_p1_0
+ + coeff_I_p2_p1_0*data_p2_p1_0
+ + coeff_I_m1_p2_0*data_m1_p2_0
+ + coeff_I_0_p2_0*data_0_p2_0
+ + coeff_I_p1_p2_0*data_p1_p2_0
+ + coeff_I_p2_p2_0*data_p2_p2_0
+ + coeff_I_m1_m1_p1*data_m1_m1_p1
+ + coeff_I_0_m1_p1*data_0_m1_p1
+ + coeff_I_p1_m1_p1*data_p1_m1_p1
+ + coeff_I_p2_m1_p1*data_p2_m1_p1
+ + coeff_I_m1_0_p1*data_m1_0_p1
+ + coeff_I_0_0_p1*data_0_0_p1
+ + coeff_I_p1_0_p1*data_p1_0_p1
+ + coeff_I_p2_0_p1*data_p2_0_p1
+ + coeff_I_m1_p1_p1*data_m1_p1_p1
+ + coeff_I_0_p1_p1*data_0_p1_p1
+ + coeff_I_p1_p1_p1*data_p1_p1_p1
+ + coeff_I_p2_p1_p1*data_p2_p1_p1
+ + coeff_I_m1_p2_p1*data_m1_p2_p1
+ + coeff_I_0_p2_p1*data_0_p2_p1
+ + coeff_I_p1_p2_p1*data_p1_p2_p1
+ + coeff_I_p2_p2_p1*data_p2_p2_p1
+ + coeff_I_m1_m1_p2*data_m1_m1_p2
+ + coeff_I_0_m1_p2*data_0_m1_p2
+ + coeff_I_p1_m1_p2*data_p1_m1_p2
+ + coeff_I_p2_m1_p2*data_p2_m1_p2
+ + coeff_I_m1_0_p2*data_m1_0_p2
+ + coeff_I_0_0_p2*data_0_0_p2
+ + coeff_I_p1_0_p2*data_p1_0_p2
+ + coeff_I_p2_0_p2*data_p2_0_p2
+ + coeff_I_m1_p1_p2*data_m1_p1_p2
+ + coeff_I_0_p1_p2*data_0_p1_p2
+ + coeff_I_p1_p1_p2*data_p1_p1_p2
+ + coeff_I_p2_p1_p2*data_p2_p1_p2
+ + coeff_I_m1_p2_p2*data_m1_p2_p2
+ + coeff_I_0_p2_p2*data_0_p2_p2
+ + coeff_I_p1_p2_p2*data_p1_p2_p2
+ + coeff_I_p2_p2_p2*data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dx.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dx.compute.c
new file mode 100644
index 0000000..51caa53
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dx.compute.c
@@ -0,0 +1,65 @@
+result =
+ coeff_dx_m1_m1_m1*data_m1_m1_m1
+ + coeff_dx_0_m1_m1*data_0_m1_m1
+ + coeff_dx_p1_m1_m1*data_p1_m1_m1
+ + coeff_dx_p2_m1_m1*data_p2_m1_m1
+ + coeff_dx_m1_0_m1*data_m1_0_m1
+ + coeff_dx_0_0_m1*data_0_0_m1
+ + coeff_dx_p1_0_m1*data_p1_0_m1
+ + coeff_dx_p2_0_m1*data_p2_0_m1
+ + coeff_dx_m1_p1_m1*data_m1_p1_m1
+ + coeff_dx_0_p1_m1*data_0_p1_m1
+ + coeff_dx_p1_p1_m1*data_p1_p1_m1
+ + coeff_dx_p2_p1_m1*data_p2_p1_m1
+ + coeff_dx_m1_p2_m1*data_m1_p2_m1
+ + coeff_dx_0_p2_m1*data_0_p2_m1
+ + coeff_dx_p1_p2_m1*data_p1_p2_m1
+ + coeff_dx_p2_p2_m1*data_p2_p2_m1
+ + coeff_dx_m1_m1_0*data_m1_m1_0
+ + coeff_dx_0_m1_0*data_0_m1_0
+ + coeff_dx_p1_m1_0*data_p1_m1_0
+ + coeff_dx_p2_m1_0*data_p2_m1_0
+ + coeff_dx_m1_0_0*data_m1_0_0
+ + coeff_dx_0_0_0*data_0_0_0
+ + coeff_dx_p1_0_0*data_p1_0_0
+ + coeff_dx_p2_0_0*data_p2_0_0
+ + coeff_dx_m1_p1_0*data_m1_p1_0
+ + coeff_dx_0_p1_0*data_0_p1_0
+ + coeff_dx_p1_p1_0*data_p1_p1_0
+ + coeff_dx_p2_p1_0*data_p2_p1_0
+ + coeff_dx_m1_p2_0*data_m1_p2_0
+ + coeff_dx_0_p2_0*data_0_p2_0
+ + coeff_dx_p1_p2_0*data_p1_p2_0
+ + coeff_dx_p2_p2_0*data_p2_p2_0
+ + coeff_dx_m1_m1_p1*data_m1_m1_p1
+ + coeff_dx_0_m1_p1*data_0_m1_p1
+ + coeff_dx_p1_m1_p1*data_p1_m1_p1
+ + coeff_dx_p2_m1_p1*data_p2_m1_p1
+ + coeff_dx_m1_0_p1*data_m1_0_p1
+ + coeff_dx_0_0_p1*data_0_0_p1
+ + coeff_dx_p1_0_p1*data_p1_0_p1
+ + coeff_dx_p2_0_p1*data_p2_0_p1
+ + coeff_dx_m1_p1_p1*data_m1_p1_p1
+ + coeff_dx_0_p1_p1*data_0_p1_p1
+ + coeff_dx_p1_p1_p1*data_p1_p1_p1
+ + coeff_dx_p2_p1_p1*data_p2_p1_p1
+ + coeff_dx_m1_p2_p1*data_m1_p2_p1
+ + coeff_dx_0_p2_p1*data_0_p2_p1
+ + coeff_dx_p1_p2_p1*data_p1_p2_p1
+ + coeff_dx_p2_p2_p1*data_p2_p2_p1
+ + coeff_dx_m1_m1_p2*data_m1_m1_p2
+ + coeff_dx_0_m1_p2*data_0_m1_p2
+ + coeff_dx_p1_m1_p2*data_p1_m1_p2
+ + coeff_dx_p2_m1_p2*data_p2_m1_p2
+ + coeff_dx_m1_0_p2*data_m1_0_p2
+ + coeff_dx_0_0_p2*data_0_0_p2
+ + coeff_dx_p1_0_p2*data_p1_0_p2
+ + coeff_dx_p2_0_p2*data_p2_0_p2
+ + coeff_dx_m1_p1_p2*data_m1_p1_p2
+ + coeff_dx_0_p1_p2*data_0_p1_p2
+ + coeff_dx_p1_p1_p2*data_p1_p1_p2
+ + coeff_dx_p2_p1_p2*data_p2_p1_p2
+ + coeff_dx_m1_p2_p2*data_m1_p2_p2
+ + coeff_dx_0_p2_p2*data_0_p2_p2
+ + coeff_dx_p1_p2_p2*data_p1_p2_p2
+ + coeff_dx_p2_p2_p2*data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dxx.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dxx.compute.c
new file mode 100644
index 0000000..4d1c4fb
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dxx.compute.c
@@ -0,0 +1,65 @@
+result =
+ coeff_dxx_m1_m1_m1*data_m1_m1_m1
+ + coeff_dxx_0_m1_m1*data_0_m1_m1
+ + coeff_dxx_p1_m1_m1*data_p1_m1_m1
+ + coeff_dxx_p2_m1_m1*data_p2_m1_m1
+ + coeff_dxx_m1_0_m1*data_m1_0_m1
+ + coeff_dxx_0_0_m1*data_0_0_m1
+ + coeff_dxx_p1_0_m1*data_p1_0_m1
+ + coeff_dxx_p2_0_m1*data_p2_0_m1
+ + coeff_dxx_m1_p1_m1*data_m1_p1_m1
+ + coeff_dxx_0_p1_m1*data_0_p1_m1
+ + coeff_dxx_p1_p1_m1*data_p1_p1_m1
+ + coeff_dxx_p2_p1_m1*data_p2_p1_m1
+ + coeff_dxx_m1_p2_m1*data_m1_p2_m1
+ + coeff_dxx_0_p2_m1*data_0_p2_m1
+ + coeff_dxx_p1_p2_m1*data_p1_p2_m1
+ + coeff_dxx_p2_p2_m1*data_p2_p2_m1
+ + coeff_dxx_m1_m1_0*data_m1_m1_0
+ + coeff_dxx_0_m1_0*data_0_m1_0
+ + coeff_dxx_p1_m1_0*data_p1_m1_0
+ + coeff_dxx_p2_m1_0*data_p2_m1_0
+ + coeff_dxx_m1_0_0*data_m1_0_0
+ + coeff_dxx_0_0_0*data_0_0_0
+ + coeff_dxx_p1_0_0*data_p1_0_0
+ + coeff_dxx_p2_0_0*data_p2_0_0
+ + coeff_dxx_m1_p1_0*data_m1_p1_0
+ + coeff_dxx_0_p1_0*data_0_p1_0
+ + coeff_dxx_p1_p1_0*data_p1_p1_0
+ + coeff_dxx_p2_p1_0*data_p2_p1_0
+ + coeff_dxx_m1_p2_0*data_m1_p2_0
+ + coeff_dxx_0_p2_0*data_0_p2_0
+ + coeff_dxx_p1_p2_0*data_p1_p2_0
+ + coeff_dxx_p2_p2_0*data_p2_p2_0
+ + coeff_dxx_m1_m1_p1*data_m1_m1_p1
+ + coeff_dxx_0_m1_p1*data_0_m1_p1
+ + coeff_dxx_p1_m1_p1*data_p1_m1_p1
+ + coeff_dxx_p2_m1_p1*data_p2_m1_p1
+ + coeff_dxx_m1_0_p1*data_m1_0_p1
+ + coeff_dxx_0_0_p1*data_0_0_p1
+ + coeff_dxx_p1_0_p1*data_p1_0_p1
+ + coeff_dxx_p2_0_p1*data_p2_0_p1
+ + coeff_dxx_m1_p1_p1*data_m1_p1_p1
+ + coeff_dxx_0_p1_p1*data_0_p1_p1
+ + coeff_dxx_p1_p1_p1*data_p1_p1_p1
+ + coeff_dxx_p2_p1_p1*data_p2_p1_p1
+ + coeff_dxx_m1_p2_p1*data_m1_p2_p1
+ + coeff_dxx_0_p2_p1*data_0_p2_p1
+ + coeff_dxx_p1_p2_p1*data_p1_p2_p1
+ + coeff_dxx_p2_p2_p1*data_p2_p2_p1
+ + coeff_dxx_m1_m1_p2*data_m1_m1_p2
+ + coeff_dxx_0_m1_p2*data_0_m1_p2
+ + coeff_dxx_p1_m1_p2*data_p1_m1_p2
+ + coeff_dxx_p2_m1_p2*data_p2_m1_p2
+ + coeff_dxx_m1_0_p2*data_m1_0_p2
+ + coeff_dxx_0_0_p2*data_0_0_p2
+ + coeff_dxx_p1_0_p2*data_p1_0_p2
+ + coeff_dxx_p2_0_p2*data_p2_0_p2
+ + coeff_dxx_m1_p1_p2*data_m1_p1_p2
+ + coeff_dxx_0_p1_p2*data_0_p1_p2
+ + coeff_dxx_p1_p1_p2*data_p1_p1_p2
+ + coeff_dxx_p2_p1_p2*data_p2_p1_p2
+ + coeff_dxx_m1_p2_p2*data_m1_p2_p2
+ + coeff_dxx_0_p2_p2*data_0_p2_p2
+ + coeff_dxx_p1_p2_p2*data_p1_p2_p2
+ + coeff_dxx_p2_p2_p2*data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dxy.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dxy.compute.c
new file mode 100644
index 0000000..16c2e90
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dxy.compute.c
@@ -0,0 +1,65 @@
+result =
+ coeff_dxy_m1_m1_m1*data_m1_m1_m1
+ + coeff_dxy_0_m1_m1*data_0_m1_m1
+ + coeff_dxy_p1_m1_m1*data_p1_m1_m1
+ + coeff_dxy_p2_m1_m1*data_p2_m1_m1
+ + coeff_dxy_m1_0_m1*data_m1_0_m1
+ + coeff_dxy_0_0_m1*data_0_0_m1
+ + coeff_dxy_p1_0_m1*data_p1_0_m1
+ + coeff_dxy_p2_0_m1*data_p2_0_m1
+ + coeff_dxy_m1_p1_m1*data_m1_p1_m1
+ + coeff_dxy_0_p1_m1*data_0_p1_m1
+ + coeff_dxy_p1_p1_m1*data_p1_p1_m1
+ + coeff_dxy_p2_p1_m1*data_p2_p1_m1
+ + coeff_dxy_m1_p2_m1*data_m1_p2_m1
+ + coeff_dxy_0_p2_m1*data_0_p2_m1
+ + coeff_dxy_p1_p2_m1*data_p1_p2_m1
+ + coeff_dxy_p2_p2_m1*data_p2_p2_m1
+ + coeff_dxy_m1_m1_0*data_m1_m1_0
+ + coeff_dxy_0_m1_0*data_0_m1_0
+ + coeff_dxy_p1_m1_0*data_p1_m1_0
+ + coeff_dxy_p2_m1_0*data_p2_m1_0
+ + coeff_dxy_m1_0_0*data_m1_0_0
+ + coeff_dxy_0_0_0*data_0_0_0
+ + coeff_dxy_p1_0_0*data_p1_0_0
+ + coeff_dxy_p2_0_0*data_p2_0_0
+ + coeff_dxy_m1_p1_0*data_m1_p1_0
+ + coeff_dxy_0_p1_0*data_0_p1_0
+ + coeff_dxy_p1_p1_0*data_p1_p1_0
+ + coeff_dxy_p2_p1_0*data_p2_p1_0
+ + coeff_dxy_m1_p2_0*data_m1_p2_0
+ + coeff_dxy_0_p2_0*data_0_p2_0
+ + coeff_dxy_p1_p2_0*data_p1_p2_0
+ + coeff_dxy_p2_p2_0*data_p2_p2_0
+ + coeff_dxy_m1_m1_p1*data_m1_m1_p1
+ + coeff_dxy_0_m1_p1*data_0_m1_p1
+ + coeff_dxy_p1_m1_p1*data_p1_m1_p1
+ + coeff_dxy_p2_m1_p1*data_p2_m1_p1
+ + coeff_dxy_m1_0_p1*data_m1_0_p1
+ + coeff_dxy_0_0_p1*data_0_0_p1
+ + coeff_dxy_p1_0_p1*data_p1_0_p1
+ + coeff_dxy_p2_0_p1*data_p2_0_p1
+ + coeff_dxy_m1_p1_p1*data_m1_p1_p1
+ + coeff_dxy_0_p1_p1*data_0_p1_p1
+ + coeff_dxy_p1_p1_p1*data_p1_p1_p1
+ + coeff_dxy_p2_p1_p1*data_p2_p1_p1
+ + coeff_dxy_m1_p2_p1*data_m1_p2_p1
+ + coeff_dxy_0_p2_p1*data_0_p2_p1
+ + coeff_dxy_p1_p2_p1*data_p1_p2_p1
+ + coeff_dxy_p2_p2_p1*data_p2_p2_p1
+ + coeff_dxy_m1_m1_p2*data_m1_m1_p2
+ + coeff_dxy_0_m1_p2*data_0_m1_p2
+ + coeff_dxy_p1_m1_p2*data_p1_m1_p2
+ + coeff_dxy_p2_m1_p2*data_p2_m1_p2
+ + coeff_dxy_m1_0_p2*data_m1_0_p2
+ + coeff_dxy_0_0_p2*data_0_0_p2
+ + coeff_dxy_p1_0_p2*data_p1_0_p2
+ + coeff_dxy_p2_0_p2*data_p2_0_p2
+ + coeff_dxy_m1_p1_p2*data_m1_p1_p2
+ + coeff_dxy_0_p1_p2*data_0_p1_p2
+ + coeff_dxy_p1_p1_p2*data_p1_p1_p2
+ + coeff_dxy_p2_p1_p2*data_p2_p1_p2
+ + coeff_dxy_m1_p2_p2*data_m1_p2_p2
+ + coeff_dxy_0_p2_p2*data_0_p2_p2
+ + coeff_dxy_p1_p2_p2*data_p1_p2_p2
+ + coeff_dxy_p2_p2_p2*data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dxz.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dxz.compute.c
new file mode 100644
index 0000000..babbf0f
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dxz.compute.c
@@ -0,0 +1,65 @@
+result =
+ coeff_dxz_m1_m1_m1*data_m1_m1_m1
+ + coeff_dxz_0_m1_m1*data_0_m1_m1
+ + coeff_dxz_p1_m1_m1*data_p1_m1_m1
+ + coeff_dxz_p2_m1_m1*data_p2_m1_m1
+ + coeff_dxz_m1_0_m1*data_m1_0_m1
+ + coeff_dxz_0_0_m1*data_0_0_m1
+ + coeff_dxz_p1_0_m1*data_p1_0_m1
+ + coeff_dxz_p2_0_m1*data_p2_0_m1
+ + coeff_dxz_m1_p1_m1*data_m1_p1_m1
+ + coeff_dxz_0_p1_m1*data_0_p1_m1
+ + coeff_dxz_p1_p1_m1*data_p1_p1_m1
+ + coeff_dxz_p2_p1_m1*data_p2_p1_m1
+ + coeff_dxz_m1_p2_m1*data_m1_p2_m1
+ + coeff_dxz_0_p2_m1*data_0_p2_m1
+ + coeff_dxz_p1_p2_m1*data_p1_p2_m1
+ + coeff_dxz_p2_p2_m1*data_p2_p2_m1
+ + coeff_dxz_m1_m1_0*data_m1_m1_0
+ + coeff_dxz_0_m1_0*data_0_m1_0
+ + coeff_dxz_p1_m1_0*data_p1_m1_0
+ + coeff_dxz_p2_m1_0*data_p2_m1_0
+ + coeff_dxz_m1_0_0*data_m1_0_0
+ + coeff_dxz_0_0_0*data_0_0_0
+ + coeff_dxz_p1_0_0*data_p1_0_0
+ + coeff_dxz_p2_0_0*data_p2_0_0
+ + coeff_dxz_m1_p1_0*data_m1_p1_0
+ + coeff_dxz_0_p1_0*data_0_p1_0
+ + coeff_dxz_p1_p1_0*data_p1_p1_0
+ + coeff_dxz_p2_p1_0*data_p2_p1_0
+ + coeff_dxz_m1_p2_0*data_m1_p2_0
+ + coeff_dxz_0_p2_0*data_0_p2_0
+ + coeff_dxz_p1_p2_0*data_p1_p2_0
+ + coeff_dxz_p2_p2_0*data_p2_p2_0
+ + coeff_dxz_m1_m1_p1*data_m1_m1_p1
+ + coeff_dxz_0_m1_p1*data_0_m1_p1
+ + coeff_dxz_p1_m1_p1*data_p1_m1_p1
+ + coeff_dxz_p2_m1_p1*data_p2_m1_p1
+ + coeff_dxz_m1_0_p1*data_m1_0_p1
+ + coeff_dxz_0_0_p1*data_0_0_p1
+ + coeff_dxz_p1_0_p1*data_p1_0_p1
+ + coeff_dxz_p2_0_p1*data_p2_0_p1
+ + coeff_dxz_m1_p1_p1*data_m1_p1_p1
+ + coeff_dxz_0_p1_p1*data_0_p1_p1
+ + coeff_dxz_p1_p1_p1*data_p1_p1_p1
+ + coeff_dxz_p2_p1_p1*data_p2_p1_p1
+ + coeff_dxz_m1_p2_p1*data_m1_p2_p1
+ + coeff_dxz_0_p2_p1*data_0_p2_p1
+ + coeff_dxz_p1_p2_p1*data_p1_p2_p1
+ + coeff_dxz_p2_p2_p1*data_p2_p2_p1
+ + coeff_dxz_m1_m1_p2*data_m1_m1_p2
+ + coeff_dxz_0_m1_p2*data_0_m1_p2
+ + coeff_dxz_p1_m1_p2*data_p1_m1_p2
+ + coeff_dxz_p2_m1_p2*data_p2_m1_p2
+ + coeff_dxz_m1_0_p2*data_m1_0_p2
+ + coeff_dxz_0_0_p2*data_0_0_p2
+ + coeff_dxz_p1_0_p2*data_p1_0_p2
+ + coeff_dxz_p2_0_p2*data_p2_0_p2
+ + coeff_dxz_m1_p1_p2*data_m1_p1_p2
+ + coeff_dxz_0_p1_p2*data_0_p1_p2
+ + coeff_dxz_p1_p1_p2*data_p1_p1_p2
+ + coeff_dxz_p2_p1_p2*data_p2_p1_p2
+ + coeff_dxz_m1_p2_p2*data_m1_p2_p2
+ + coeff_dxz_0_p2_p2*data_0_p2_p2
+ + coeff_dxz_p1_p2_p2*data_p1_p2_p2
+ + coeff_dxz_p2_p2_p2*data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dy.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dy.compute.c
new file mode 100644
index 0000000..4dd8505
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dy.compute.c
@@ -0,0 +1,65 @@
+result =
+ coeff_dy_m1_m1_m1*data_m1_m1_m1
+ + coeff_dy_0_m1_m1*data_0_m1_m1
+ + coeff_dy_p1_m1_m1*data_p1_m1_m1
+ + coeff_dy_p2_m1_m1*data_p2_m1_m1
+ + coeff_dy_m1_0_m1*data_m1_0_m1
+ + coeff_dy_0_0_m1*data_0_0_m1
+ + coeff_dy_p1_0_m1*data_p1_0_m1
+ + coeff_dy_p2_0_m1*data_p2_0_m1
+ + coeff_dy_m1_p1_m1*data_m1_p1_m1
+ + coeff_dy_0_p1_m1*data_0_p1_m1
+ + coeff_dy_p1_p1_m1*data_p1_p1_m1
+ + coeff_dy_p2_p1_m1*data_p2_p1_m1
+ + coeff_dy_m1_p2_m1*data_m1_p2_m1
+ + coeff_dy_0_p2_m1*data_0_p2_m1
+ + coeff_dy_p1_p2_m1*data_p1_p2_m1
+ + coeff_dy_p2_p2_m1*data_p2_p2_m1
+ + coeff_dy_m1_m1_0*data_m1_m1_0
+ + coeff_dy_0_m1_0*data_0_m1_0
+ + coeff_dy_p1_m1_0*data_p1_m1_0
+ + coeff_dy_p2_m1_0*data_p2_m1_0
+ + coeff_dy_m1_0_0*data_m1_0_0
+ + coeff_dy_0_0_0*data_0_0_0
+ + coeff_dy_p1_0_0*data_p1_0_0
+ + coeff_dy_p2_0_0*data_p2_0_0
+ + coeff_dy_m1_p1_0*data_m1_p1_0
+ + coeff_dy_0_p1_0*data_0_p1_0
+ + coeff_dy_p1_p1_0*data_p1_p1_0
+ + coeff_dy_p2_p1_0*data_p2_p1_0
+ + coeff_dy_m1_p2_0*data_m1_p2_0
+ + coeff_dy_0_p2_0*data_0_p2_0
+ + coeff_dy_p1_p2_0*data_p1_p2_0
+ + coeff_dy_p2_p2_0*data_p2_p2_0
+ + coeff_dy_m1_m1_p1*data_m1_m1_p1
+ + coeff_dy_0_m1_p1*data_0_m1_p1
+ + coeff_dy_p1_m1_p1*data_p1_m1_p1
+ + coeff_dy_p2_m1_p1*data_p2_m1_p1
+ + coeff_dy_m1_0_p1*data_m1_0_p1
+ + coeff_dy_0_0_p1*data_0_0_p1
+ + coeff_dy_p1_0_p1*data_p1_0_p1
+ + coeff_dy_p2_0_p1*data_p2_0_p1
+ + coeff_dy_m1_p1_p1*data_m1_p1_p1
+ + coeff_dy_0_p1_p1*data_0_p1_p1
+ + coeff_dy_p1_p1_p1*data_p1_p1_p1
+ + coeff_dy_p2_p1_p1*data_p2_p1_p1
+ + coeff_dy_m1_p2_p1*data_m1_p2_p1
+ + coeff_dy_0_p2_p1*data_0_p2_p1
+ + coeff_dy_p1_p2_p1*data_p1_p2_p1
+ + coeff_dy_p2_p2_p1*data_p2_p2_p1
+ + coeff_dy_m1_m1_p2*data_m1_m1_p2
+ + coeff_dy_0_m1_p2*data_0_m1_p2
+ + coeff_dy_p1_m1_p2*data_p1_m1_p2
+ + coeff_dy_p2_m1_p2*data_p2_m1_p2
+ + coeff_dy_m1_0_p2*data_m1_0_p2
+ + coeff_dy_0_0_p2*data_0_0_p2
+ + coeff_dy_p1_0_p2*data_p1_0_p2
+ + coeff_dy_p2_0_p2*data_p2_0_p2
+ + coeff_dy_m1_p1_p2*data_m1_p1_p2
+ + coeff_dy_0_p1_p2*data_0_p1_p2
+ + coeff_dy_p1_p1_p2*data_p1_p1_p2
+ + coeff_dy_p2_p1_p2*data_p2_p1_p2
+ + coeff_dy_m1_p2_p2*data_m1_p2_p2
+ + coeff_dy_0_p2_p2*data_0_p2_p2
+ + coeff_dy_p1_p2_p2*data_p1_p2_p2
+ + coeff_dy_p2_p2_p2*data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dyy.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dyy.compute.c
new file mode 100644
index 0000000..75357b5
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dyy.compute.c
@@ -0,0 +1,65 @@
+result =
+ coeff_dyy_m1_m1_m1*data_m1_m1_m1
+ + coeff_dyy_0_m1_m1*data_0_m1_m1
+ + coeff_dyy_p1_m1_m1*data_p1_m1_m1
+ + coeff_dyy_p2_m1_m1*data_p2_m1_m1
+ + coeff_dyy_m1_0_m1*data_m1_0_m1
+ + coeff_dyy_0_0_m1*data_0_0_m1
+ + coeff_dyy_p1_0_m1*data_p1_0_m1
+ + coeff_dyy_p2_0_m1*data_p2_0_m1
+ + coeff_dyy_m1_p1_m1*data_m1_p1_m1
+ + coeff_dyy_0_p1_m1*data_0_p1_m1
+ + coeff_dyy_p1_p1_m1*data_p1_p1_m1
+ + coeff_dyy_p2_p1_m1*data_p2_p1_m1
+ + coeff_dyy_m1_p2_m1*data_m1_p2_m1
+ + coeff_dyy_0_p2_m1*data_0_p2_m1
+ + coeff_dyy_p1_p2_m1*data_p1_p2_m1
+ + coeff_dyy_p2_p2_m1*data_p2_p2_m1
+ + coeff_dyy_m1_m1_0*data_m1_m1_0
+ + coeff_dyy_0_m1_0*data_0_m1_0
+ + coeff_dyy_p1_m1_0*data_p1_m1_0
+ + coeff_dyy_p2_m1_0*data_p2_m1_0
+ + coeff_dyy_m1_0_0*data_m1_0_0
+ + coeff_dyy_0_0_0*data_0_0_0
+ + coeff_dyy_p1_0_0*data_p1_0_0
+ + coeff_dyy_p2_0_0*data_p2_0_0
+ + coeff_dyy_m1_p1_0*data_m1_p1_0
+ + coeff_dyy_0_p1_0*data_0_p1_0
+ + coeff_dyy_p1_p1_0*data_p1_p1_0
+ + coeff_dyy_p2_p1_0*data_p2_p1_0
+ + coeff_dyy_m1_p2_0*data_m1_p2_0
+ + coeff_dyy_0_p2_0*data_0_p2_0
+ + coeff_dyy_p1_p2_0*data_p1_p2_0
+ + coeff_dyy_p2_p2_0*data_p2_p2_0
+ + coeff_dyy_m1_m1_p1*data_m1_m1_p1
+ + coeff_dyy_0_m1_p1*data_0_m1_p1
+ + coeff_dyy_p1_m1_p1*data_p1_m1_p1
+ + coeff_dyy_p2_m1_p1*data_p2_m1_p1
+ + coeff_dyy_m1_0_p1*data_m1_0_p1
+ + coeff_dyy_0_0_p1*data_0_0_p1
+ + coeff_dyy_p1_0_p1*data_p1_0_p1
+ + coeff_dyy_p2_0_p1*data_p2_0_p1
+ + coeff_dyy_m1_p1_p1*data_m1_p1_p1
+ + coeff_dyy_0_p1_p1*data_0_p1_p1
+ + coeff_dyy_p1_p1_p1*data_p1_p1_p1
+ + coeff_dyy_p2_p1_p1*data_p2_p1_p1
+ + coeff_dyy_m1_p2_p1*data_m1_p2_p1
+ + coeff_dyy_0_p2_p1*data_0_p2_p1
+ + coeff_dyy_p1_p2_p1*data_p1_p2_p1
+ + coeff_dyy_p2_p2_p1*data_p2_p2_p1
+ + coeff_dyy_m1_m1_p2*data_m1_m1_p2
+ + coeff_dyy_0_m1_p2*data_0_m1_p2
+ + coeff_dyy_p1_m1_p2*data_p1_m1_p2
+ + coeff_dyy_p2_m1_p2*data_p2_m1_p2
+ + coeff_dyy_m1_0_p2*data_m1_0_p2
+ + coeff_dyy_0_0_p2*data_0_0_p2
+ + coeff_dyy_p1_0_p2*data_p1_0_p2
+ + coeff_dyy_p2_0_p2*data_p2_0_p2
+ + coeff_dyy_m1_p1_p2*data_m1_p1_p2
+ + coeff_dyy_0_p1_p2*data_0_p1_p2
+ + coeff_dyy_p1_p1_p2*data_p1_p1_p2
+ + coeff_dyy_p2_p1_p2*data_p2_p1_p2
+ + coeff_dyy_m1_p2_p2*data_m1_p2_p2
+ + coeff_dyy_0_p2_p2*data_0_p2_p2
+ + coeff_dyy_p1_p2_p2*data_p1_p2_p2
+ + coeff_dyy_p2_p2_p2*data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dyz.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dyz.compute.c
new file mode 100644
index 0000000..247cd6e
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dyz.compute.c
@@ -0,0 +1,65 @@
+result =
+ coeff_dyz_m1_m1_m1*data_m1_m1_m1
+ + coeff_dyz_0_m1_m1*data_0_m1_m1
+ + coeff_dyz_p1_m1_m1*data_p1_m1_m1
+ + coeff_dyz_p2_m1_m1*data_p2_m1_m1
+ + coeff_dyz_m1_0_m1*data_m1_0_m1
+ + coeff_dyz_0_0_m1*data_0_0_m1
+ + coeff_dyz_p1_0_m1*data_p1_0_m1
+ + coeff_dyz_p2_0_m1*data_p2_0_m1
+ + coeff_dyz_m1_p1_m1*data_m1_p1_m1
+ + coeff_dyz_0_p1_m1*data_0_p1_m1
+ + coeff_dyz_p1_p1_m1*data_p1_p1_m1
+ + coeff_dyz_p2_p1_m1*data_p2_p1_m1
+ + coeff_dyz_m1_p2_m1*data_m1_p2_m1
+ + coeff_dyz_0_p2_m1*data_0_p2_m1
+ + coeff_dyz_p1_p2_m1*data_p1_p2_m1
+ + coeff_dyz_p2_p2_m1*data_p2_p2_m1
+ + coeff_dyz_m1_m1_0*data_m1_m1_0
+ + coeff_dyz_0_m1_0*data_0_m1_0
+ + coeff_dyz_p1_m1_0*data_p1_m1_0
+ + coeff_dyz_p2_m1_0*data_p2_m1_0
+ + coeff_dyz_m1_0_0*data_m1_0_0
+ + coeff_dyz_0_0_0*data_0_0_0
+ + coeff_dyz_p1_0_0*data_p1_0_0
+ + coeff_dyz_p2_0_0*data_p2_0_0
+ + coeff_dyz_m1_p1_0*data_m1_p1_0
+ + coeff_dyz_0_p1_0*data_0_p1_0
+ + coeff_dyz_p1_p1_0*data_p1_p1_0
+ + coeff_dyz_p2_p1_0*data_p2_p1_0
+ + coeff_dyz_m1_p2_0*data_m1_p2_0
+ + coeff_dyz_0_p2_0*data_0_p2_0
+ + coeff_dyz_p1_p2_0*data_p1_p2_0
+ + coeff_dyz_p2_p2_0*data_p2_p2_0
+ + coeff_dyz_m1_m1_p1*data_m1_m1_p1
+ + coeff_dyz_0_m1_p1*data_0_m1_p1
+ + coeff_dyz_p1_m1_p1*data_p1_m1_p1
+ + coeff_dyz_p2_m1_p1*data_p2_m1_p1
+ + coeff_dyz_m1_0_p1*data_m1_0_p1
+ + coeff_dyz_0_0_p1*data_0_0_p1
+ + coeff_dyz_p1_0_p1*data_p1_0_p1
+ + coeff_dyz_p2_0_p1*data_p2_0_p1
+ + coeff_dyz_m1_p1_p1*data_m1_p1_p1
+ + coeff_dyz_0_p1_p1*data_0_p1_p1
+ + coeff_dyz_p1_p1_p1*data_p1_p1_p1
+ + coeff_dyz_p2_p1_p1*data_p2_p1_p1
+ + coeff_dyz_m1_p2_p1*data_m1_p2_p1
+ + coeff_dyz_0_p2_p1*data_0_p2_p1
+ + coeff_dyz_p1_p2_p1*data_p1_p2_p1
+ + coeff_dyz_p2_p2_p1*data_p2_p2_p1
+ + coeff_dyz_m1_m1_p2*data_m1_m1_p2
+ + coeff_dyz_0_m1_p2*data_0_m1_p2
+ + coeff_dyz_p1_m1_p2*data_p1_m1_p2
+ + coeff_dyz_p2_m1_p2*data_p2_m1_p2
+ + coeff_dyz_m1_0_p2*data_m1_0_p2
+ + coeff_dyz_0_0_p2*data_0_0_p2
+ + coeff_dyz_p1_0_p2*data_p1_0_p2
+ + coeff_dyz_p2_0_p2*data_p2_0_p2
+ + coeff_dyz_m1_p1_p2*data_m1_p1_p2
+ + coeff_dyz_0_p1_p2*data_0_p1_p2
+ + coeff_dyz_p1_p1_p2*data_p1_p1_p2
+ + coeff_dyz_p2_p1_p2*data_p2_p1_p2
+ + coeff_dyz_m1_p2_p2*data_m1_p2_p2
+ + coeff_dyz_0_p2_p2*data_0_p2_p2
+ + coeff_dyz_p1_p2_p2*data_p1_p2_p2
+ + coeff_dyz_p2_p2_p2*data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dz.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dz.compute.c
new file mode 100644
index 0000000..7bb7e24
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dz.compute.c
@@ -0,0 +1,65 @@
+result =
+ coeff_dz_m1_m1_m1*data_m1_m1_m1
+ + coeff_dz_0_m1_m1*data_0_m1_m1
+ + coeff_dz_p1_m1_m1*data_p1_m1_m1
+ + coeff_dz_p2_m1_m1*data_p2_m1_m1
+ + coeff_dz_m1_0_m1*data_m1_0_m1
+ + coeff_dz_0_0_m1*data_0_0_m1
+ + coeff_dz_p1_0_m1*data_p1_0_m1
+ + coeff_dz_p2_0_m1*data_p2_0_m1
+ + coeff_dz_m1_p1_m1*data_m1_p1_m1
+ + coeff_dz_0_p1_m1*data_0_p1_m1
+ + coeff_dz_p1_p1_m1*data_p1_p1_m1
+ + coeff_dz_p2_p1_m1*data_p2_p1_m1
+ + coeff_dz_m1_p2_m1*data_m1_p2_m1
+ + coeff_dz_0_p2_m1*data_0_p2_m1
+ + coeff_dz_p1_p2_m1*data_p1_p2_m1
+ + coeff_dz_p2_p2_m1*data_p2_p2_m1
+ + coeff_dz_m1_m1_0*data_m1_m1_0
+ + coeff_dz_0_m1_0*data_0_m1_0
+ + coeff_dz_p1_m1_0*data_p1_m1_0
+ + coeff_dz_p2_m1_0*data_p2_m1_0
+ + coeff_dz_m1_0_0*data_m1_0_0
+ + coeff_dz_0_0_0*data_0_0_0
+ + coeff_dz_p1_0_0*data_p1_0_0
+ + coeff_dz_p2_0_0*data_p2_0_0
+ + coeff_dz_m1_p1_0*data_m1_p1_0
+ + coeff_dz_0_p1_0*data_0_p1_0
+ + coeff_dz_p1_p1_0*data_p1_p1_0
+ + coeff_dz_p2_p1_0*data_p2_p1_0
+ + coeff_dz_m1_p2_0*data_m1_p2_0
+ + coeff_dz_0_p2_0*data_0_p2_0
+ + coeff_dz_p1_p2_0*data_p1_p2_0
+ + coeff_dz_p2_p2_0*data_p2_p2_0
+ + coeff_dz_m1_m1_p1*data_m1_m1_p1
+ + coeff_dz_0_m1_p1*data_0_m1_p1
+ + coeff_dz_p1_m1_p1*data_p1_m1_p1
+ + coeff_dz_p2_m1_p1*data_p2_m1_p1
+ + coeff_dz_m1_0_p1*data_m1_0_p1
+ + coeff_dz_0_0_p1*data_0_0_p1
+ + coeff_dz_p1_0_p1*data_p1_0_p1
+ + coeff_dz_p2_0_p1*data_p2_0_p1
+ + coeff_dz_m1_p1_p1*data_m1_p1_p1
+ + coeff_dz_0_p1_p1*data_0_p1_p1
+ + coeff_dz_p1_p1_p1*data_p1_p1_p1
+ + coeff_dz_p2_p1_p1*data_p2_p1_p1
+ + coeff_dz_m1_p2_p1*data_m1_p2_p1
+ + coeff_dz_0_p2_p1*data_0_p2_p1
+ + coeff_dz_p1_p2_p1*data_p1_p2_p1
+ + coeff_dz_p2_p2_p1*data_p2_p2_p1
+ + coeff_dz_m1_m1_p2*data_m1_m1_p2
+ + coeff_dz_0_m1_p2*data_0_m1_p2
+ + coeff_dz_p1_m1_p2*data_p1_m1_p2
+ + coeff_dz_p2_m1_p2*data_p2_m1_p2
+ + coeff_dz_m1_0_p2*data_m1_0_p2
+ + coeff_dz_0_0_p2*data_0_0_p2
+ + coeff_dz_p1_0_p2*data_p1_0_p2
+ + coeff_dz_p2_0_p2*data_p2_0_p2
+ + coeff_dz_m1_p1_p2*data_m1_p1_p2
+ + coeff_dz_0_p1_p2*data_0_p1_p2
+ + coeff_dz_p1_p1_p2*data_p1_p1_p2
+ + coeff_dz_p2_p1_p2*data_p2_p1_p2
+ + coeff_dz_m1_p2_p2*data_m1_p2_p2
+ + coeff_dz_0_p2_p2*data_0_p2_p2
+ + coeff_dz_p1_p2_p2*data_p1_p2_p2
+ + coeff_dz_p2_p2_p2*data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dzz.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dzz.compute.c
new file mode 100644
index 0000000..523242a
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size4/interp-dzz.compute.c
@@ -0,0 +1,65 @@
+result =
+ coeff_dzz_m1_m1_m1*data_m1_m1_m1
+ + coeff_dzz_0_m1_m1*data_0_m1_m1
+ + coeff_dzz_p1_m1_m1*data_p1_m1_m1
+ + coeff_dzz_p2_m1_m1*data_p2_m1_m1
+ + coeff_dzz_m1_0_m1*data_m1_0_m1
+ + coeff_dzz_0_0_m1*data_0_0_m1
+ + coeff_dzz_p1_0_m1*data_p1_0_m1
+ + coeff_dzz_p2_0_m1*data_p2_0_m1
+ + coeff_dzz_m1_p1_m1*data_m1_p1_m1
+ + coeff_dzz_0_p1_m1*data_0_p1_m1
+ + coeff_dzz_p1_p1_m1*data_p1_p1_m1
+ + coeff_dzz_p2_p1_m1*data_p2_p1_m1
+ + coeff_dzz_m1_p2_m1*data_m1_p2_m1
+ + coeff_dzz_0_p2_m1*data_0_p2_m1
+ + coeff_dzz_p1_p2_m1*data_p1_p2_m1
+ + coeff_dzz_p2_p2_m1*data_p2_p2_m1
+ + coeff_dzz_m1_m1_0*data_m1_m1_0
+ + coeff_dzz_0_m1_0*data_0_m1_0
+ + coeff_dzz_p1_m1_0*data_p1_m1_0
+ + coeff_dzz_p2_m1_0*data_p2_m1_0
+ + coeff_dzz_m1_0_0*data_m1_0_0
+ + coeff_dzz_0_0_0*data_0_0_0
+ + coeff_dzz_p1_0_0*data_p1_0_0
+ + coeff_dzz_p2_0_0*data_p2_0_0
+ + coeff_dzz_m1_p1_0*data_m1_p1_0
+ + coeff_dzz_0_p1_0*data_0_p1_0
+ + coeff_dzz_p1_p1_0*data_p1_p1_0
+ + coeff_dzz_p2_p1_0*data_p2_p1_0
+ + coeff_dzz_m1_p2_0*data_m1_p2_0
+ + coeff_dzz_0_p2_0*data_0_p2_0
+ + coeff_dzz_p1_p2_0*data_p1_p2_0
+ + coeff_dzz_p2_p2_0*data_p2_p2_0
+ + coeff_dzz_m1_m1_p1*data_m1_m1_p1
+ + coeff_dzz_0_m1_p1*data_0_m1_p1
+ + coeff_dzz_p1_m1_p1*data_p1_m1_p1
+ + coeff_dzz_p2_m1_p1*data_p2_m1_p1
+ + coeff_dzz_m1_0_p1*data_m1_0_p1
+ + coeff_dzz_0_0_p1*data_0_0_p1
+ + coeff_dzz_p1_0_p1*data_p1_0_p1
+ + coeff_dzz_p2_0_p1*data_p2_0_p1
+ + coeff_dzz_m1_p1_p1*data_m1_p1_p1
+ + coeff_dzz_0_p1_p1*data_0_p1_p1
+ + coeff_dzz_p1_p1_p1*data_p1_p1_p1
+ + coeff_dzz_p2_p1_p1*data_p2_p1_p1
+ + coeff_dzz_m1_p2_p1*data_m1_p2_p1
+ + coeff_dzz_0_p2_p1*data_0_p2_p1
+ + coeff_dzz_p1_p2_p1*data_p1_p2_p1
+ + coeff_dzz_p2_p2_p1*data_p2_p2_p1
+ + coeff_dzz_m1_m1_p2*data_m1_m1_p2
+ + coeff_dzz_0_m1_p2*data_0_m1_p2
+ + coeff_dzz_p1_m1_p2*data_p1_m1_p2
+ + coeff_dzz_p2_m1_p2*data_p2_m1_p2
+ + coeff_dzz_m1_0_p2*data_m1_0_p2
+ + coeff_dzz_0_0_p2*data_0_0_p2
+ + coeff_dzz_p1_0_p2*data_p1_0_p2
+ + coeff_dzz_p2_0_p2*data_p2_0_p2
+ + coeff_dzz_m1_p1_p2*data_m1_p1_p2
+ + coeff_dzz_0_p1_p2*data_0_p1_p2
+ + coeff_dzz_p1_p1_p2*data_p1_p1_p2
+ + coeff_dzz_p2_p1_p2*data_p2_p1_p2
+ + coeff_dzz_m1_p2_p2*data_m1_p2_p2
+ + coeff_dzz_0_p2_p2*data_0_p2_p2
+ + coeff_dzz_p1_p2_p2*data_p1_p2_p2
+ + coeff_dzz_p2_p2_p2*data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-I.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-I.dcl.c
new file mode 100644
index 0000000..f491306
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-I.dcl.c
@@ -0,0 +1,125 @@
+fp coeff_I_m2_m2_m2,
+ coeff_I_m1_m2_m2,
+ coeff_I_0_m2_m2,
+ coeff_I_p1_m2_m2,
+ coeff_I_p2_m2_m2,
+ coeff_I_m2_m1_m2,
+ coeff_I_m1_m1_m2,
+ coeff_I_0_m1_m2,
+ coeff_I_p1_m1_m2,
+ coeff_I_p2_m1_m2,
+ coeff_I_m2_0_m2,
+ coeff_I_m1_0_m2,
+ coeff_I_0_0_m2,
+ coeff_I_p1_0_m2,
+ coeff_I_p2_0_m2,
+ coeff_I_m2_p1_m2,
+ coeff_I_m1_p1_m2,
+ coeff_I_0_p1_m2,
+ coeff_I_p1_p1_m2,
+ coeff_I_p2_p1_m2,
+ coeff_I_m2_p2_m2,
+ coeff_I_m1_p2_m2,
+ coeff_I_0_p2_m2,
+ coeff_I_p1_p2_m2,
+ coeff_I_p2_p2_m2,
+ coeff_I_m2_m2_m1,
+ coeff_I_m1_m2_m1,
+ coeff_I_0_m2_m1,
+ coeff_I_p1_m2_m1,
+ coeff_I_p2_m2_m1,
+ coeff_I_m2_m1_m1,
+ coeff_I_m1_m1_m1,
+ coeff_I_0_m1_m1,
+ coeff_I_p1_m1_m1,
+ coeff_I_p2_m1_m1,
+ coeff_I_m2_0_m1,
+ coeff_I_m1_0_m1,
+ coeff_I_0_0_m1,
+ coeff_I_p1_0_m1,
+ coeff_I_p2_0_m1,
+ coeff_I_m2_p1_m1,
+ coeff_I_m1_p1_m1,
+ coeff_I_0_p1_m1,
+ coeff_I_p1_p1_m1,
+ coeff_I_p2_p1_m1,
+ coeff_I_m2_p2_m1,
+ coeff_I_m1_p2_m1,
+ coeff_I_0_p2_m1,
+ coeff_I_p1_p2_m1,
+ coeff_I_p2_p2_m1,
+ coeff_I_m2_m2_0,
+ coeff_I_m1_m2_0,
+ coeff_I_0_m2_0,
+ coeff_I_p1_m2_0,
+ coeff_I_p2_m2_0,
+ coeff_I_m2_m1_0,
+ coeff_I_m1_m1_0,
+ coeff_I_0_m1_0,
+ coeff_I_p1_m1_0,
+ coeff_I_p2_m1_0,
+ coeff_I_m2_0_0,
+ coeff_I_m1_0_0,
+ coeff_I_0_0_0,
+ coeff_I_p1_0_0,
+ coeff_I_p2_0_0,
+ coeff_I_m2_p1_0,
+ coeff_I_m1_p1_0,
+ coeff_I_0_p1_0,
+ coeff_I_p1_p1_0,
+ coeff_I_p2_p1_0,
+ coeff_I_m2_p2_0,
+ coeff_I_m1_p2_0,
+ coeff_I_0_p2_0,
+ coeff_I_p1_p2_0,
+ coeff_I_p2_p2_0,
+ coeff_I_m2_m2_p1,
+ coeff_I_m1_m2_p1,
+ coeff_I_0_m2_p1,
+ coeff_I_p1_m2_p1,
+ coeff_I_p2_m2_p1,
+ coeff_I_m2_m1_p1,
+ coeff_I_m1_m1_p1,
+ coeff_I_0_m1_p1,
+ coeff_I_p1_m1_p1,
+ coeff_I_p2_m1_p1,
+ coeff_I_m2_0_p1,
+ coeff_I_m1_0_p1,
+ coeff_I_0_0_p1,
+ coeff_I_p1_0_p1,
+ coeff_I_p2_0_p1,
+ coeff_I_m2_p1_p1,
+ coeff_I_m1_p1_p1,
+ coeff_I_0_p1_p1,
+ coeff_I_p1_p1_p1,
+ coeff_I_p2_p1_p1,
+ coeff_I_m2_p2_p1,
+ coeff_I_m1_p2_p1,
+ coeff_I_0_p2_p1,
+ coeff_I_p1_p2_p1,
+ coeff_I_p2_p2_p1,
+ coeff_I_m2_m2_p2,
+ coeff_I_m1_m2_p2,
+ coeff_I_0_m2_p2,
+ coeff_I_p1_m2_p2,
+ coeff_I_p2_m2_p2,
+ coeff_I_m2_m1_p2,
+ coeff_I_m1_m1_p2,
+ coeff_I_0_m1_p2,
+ coeff_I_p1_m1_p2,
+ coeff_I_p2_m1_p2,
+ coeff_I_m2_0_p2,
+ coeff_I_m1_0_p2,
+ coeff_I_0_0_p2,
+ coeff_I_p1_0_p2,
+ coeff_I_p2_0_p2,
+ coeff_I_m2_p1_p2,
+ coeff_I_m1_p1_p2,
+ coeff_I_0_p1_p2,
+ coeff_I_p1_p1_p2,
+ coeff_I_p2_p1_p2,
+ coeff_I_m2_p2_p2,
+ coeff_I_m1_p2_p2,
+ coeff_I_0_p2_p2,
+ coeff_I_p1_p2_p2,
+ coeff_I_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-I.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-I.store.c
new file mode 100644
index 0000000..cb80c36
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-I.store.c
@@ -0,0 +1,125 @@
+COEFF(-2,-2,-2) = coeff_I_m2_m2_m2;
+COEFF(-1,-2,-2) = coeff_I_m1_m2_m2;
+COEFF(0,-2,-2) = coeff_I_0_m2_m2;
+COEFF(1,-2,-2) = coeff_I_p1_m2_m2;
+COEFF(2,-2,-2) = coeff_I_p2_m2_m2;
+COEFF(-2,-1,-2) = coeff_I_m2_m1_m2;
+COEFF(-1,-1,-2) = coeff_I_m1_m1_m2;
+COEFF(0,-1,-2) = coeff_I_0_m1_m2;
+COEFF(1,-1,-2) = coeff_I_p1_m1_m2;
+COEFF(2,-1,-2) = coeff_I_p2_m1_m2;
+COEFF(-2,0,-2) = coeff_I_m2_0_m2;
+COEFF(-1,0,-2) = coeff_I_m1_0_m2;
+COEFF(0,0,-2) = coeff_I_0_0_m2;
+COEFF(1,0,-2) = coeff_I_p1_0_m2;
+COEFF(2,0,-2) = coeff_I_p2_0_m2;
+COEFF(-2,1,-2) = coeff_I_m2_p1_m2;
+COEFF(-1,1,-2) = coeff_I_m1_p1_m2;
+COEFF(0,1,-2) = coeff_I_0_p1_m2;
+COEFF(1,1,-2) = coeff_I_p1_p1_m2;
+COEFF(2,1,-2) = coeff_I_p2_p1_m2;
+COEFF(-2,2,-2) = coeff_I_m2_p2_m2;
+COEFF(-1,2,-2) = coeff_I_m1_p2_m2;
+COEFF(0,2,-2) = coeff_I_0_p2_m2;
+COEFF(1,2,-2) = coeff_I_p1_p2_m2;
+COEFF(2,2,-2) = coeff_I_p2_p2_m2;
+COEFF(-2,-2,-1) = coeff_I_m2_m2_m1;
+COEFF(-1,-2,-1) = coeff_I_m1_m2_m1;
+COEFF(0,-2,-1) = coeff_I_0_m2_m1;
+COEFF(1,-2,-1) = coeff_I_p1_m2_m1;
+COEFF(2,-2,-1) = coeff_I_p2_m2_m1;
+COEFF(-2,-1,-1) = coeff_I_m2_m1_m1;
+COEFF(-1,-1,-1) = coeff_I_m1_m1_m1;
+COEFF(0,-1,-1) = coeff_I_0_m1_m1;
+COEFF(1,-1,-1) = coeff_I_p1_m1_m1;
+COEFF(2,-1,-1) = coeff_I_p2_m1_m1;
+COEFF(-2,0,-1) = coeff_I_m2_0_m1;
+COEFF(-1,0,-1) = coeff_I_m1_0_m1;
+COEFF(0,0,-1) = coeff_I_0_0_m1;
+COEFF(1,0,-1) = coeff_I_p1_0_m1;
+COEFF(2,0,-1) = coeff_I_p2_0_m1;
+COEFF(-2,1,-1) = coeff_I_m2_p1_m1;
+COEFF(-1,1,-1) = coeff_I_m1_p1_m1;
+COEFF(0,1,-1) = coeff_I_0_p1_m1;
+COEFF(1,1,-1) = coeff_I_p1_p1_m1;
+COEFF(2,1,-1) = coeff_I_p2_p1_m1;
+COEFF(-2,2,-1) = coeff_I_m2_p2_m1;
+COEFF(-1,2,-1) = coeff_I_m1_p2_m1;
+COEFF(0,2,-1) = coeff_I_0_p2_m1;
+COEFF(1,2,-1) = coeff_I_p1_p2_m1;
+COEFF(2,2,-1) = coeff_I_p2_p2_m1;
+COEFF(-2,-2,0) = coeff_I_m2_m2_0;
+COEFF(-1,-2,0) = coeff_I_m1_m2_0;
+COEFF(0,-2,0) = coeff_I_0_m2_0;
+COEFF(1,-2,0) = coeff_I_p1_m2_0;
+COEFF(2,-2,0) = coeff_I_p2_m2_0;
+COEFF(-2,-1,0) = coeff_I_m2_m1_0;
+COEFF(-1,-1,0) = coeff_I_m1_m1_0;
+COEFF(0,-1,0) = coeff_I_0_m1_0;
+COEFF(1,-1,0) = coeff_I_p1_m1_0;
+COEFF(2,-1,0) = coeff_I_p2_m1_0;
+COEFF(-2,0,0) = coeff_I_m2_0_0;
+COEFF(-1,0,0) = coeff_I_m1_0_0;
+COEFF(0,0,0) = coeff_I_0_0_0;
+COEFF(1,0,0) = coeff_I_p1_0_0;
+COEFF(2,0,0) = coeff_I_p2_0_0;
+COEFF(-2,1,0) = coeff_I_m2_p1_0;
+COEFF(-1,1,0) = coeff_I_m1_p1_0;
+COEFF(0,1,0) = coeff_I_0_p1_0;
+COEFF(1,1,0) = coeff_I_p1_p1_0;
+COEFF(2,1,0) = coeff_I_p2_p1_0;
+COEFF(-2,2,0) = coeff_I_m2_p2_0;
+COEFF(-1,2,0) = coeff_I_m1_p2_0;
+COEFF(0,2,0) = coeff_I_0_p2_0;
+COEFF(1,2,0) = coeff_I_p1_p2_0;
+COEFF(2,2,0) = coeff_I_p2_p2_0;
+COEFF(-2,-2,1) = coeff_I_m2_m2_p1;
+COEFF(-1,-2,1) = coeff_I_m1_m2_p1;
+COEFF(0,-2,1) = coeff_I_0_m2_p1;
+COEFF(1,-2,1) = coeff_I_p1_m2_p1;
+COEFF(2,-2,1) = coeff_I_p2_m2_p1;
+COEFF(-2,-1,1) = coeff_I_m2_m1_p1;
+COEFF(-1,-1,1) = coeff_I_m1_m1_p1;
+COEFF(0,-1,1) = coeff_I_0_m1_p1;
+COEFF(1,-1,1) = coeff_I_p1_m1_p1;
+COEFF(2,-1,1) = coeff_I_p2_m1_p1;
+COEFF(-2,0,1) = coeff_I_m2_0_p1;
+COEFF(-1,0,1) = coeff_I_m1_0_p1;
+COEFF(0,0,1) = coeff_I_0_0_p1;
+COEFF(1,0,1) = coeff_I_p1_0_p1;
+COEFF(2,0,1) = coeff_I_p2_0_p1;
+COEFF(-2,1,1) = coeff_I_m2_p1_p1;
+COEFF(-1,1,1) = coeff_I_m1_p1_p1;
+COEFF(0,1,1) = coeff_I_0_p1_p1;
+COEFF(1,1,1) = coeff_I_p1_p1_p1;
+COEFF(2,1,1) = coeff_I_p2_p1_p1;
+COEFF(-2,2,1) = coeff_I_m2_p2_p1;
+COEFF(-1,2,1) = coeff_I_m1_p2_p1;
+COEFF(0,2,1) = coeff_I_0_p2_p1;
+COEFF(1,2,1) = coeff_I_p1_p2_p1;
+COEFF(2,2,1) = coeff_I_p2_p2_p1;
+COEFF(-2,-2,2) = coeff_I_m2_m2_p2;
+COEFF(-1,-2,2) = coeff_I_m1_m2_p2;
+COEFF(0,-2,2) = coeff_I_0_m2_p2;
+COEFF(1,-2,2) = coeff_I_p1_m2_p2;
+COEFF(2,-2,2) = coeff_I_p2_m2_p2;
+COEFF(-2,-1,2) = coeff_I_m2_m1_p2;
+COEFF(-1,-1,2) = coeff_I_m1_m1_p2;
+COEFF(0,-1,2) = coeff_I_0_m1_p2;
+COEFF(1,-1,2) = coeff_I_p1_m1_p2;
+COEFF(2,-1,2) = coeff_I_p2_m1_p2;
+COEFF(-2,0,2) = coeff_I_m2_0_p2;
+COEFF(-1,0,2) = coeff_I_m1_0_p2;
+COEFF(0,0,2) = coeff_I_0_0_p2;
+COEFF(1,0,2) = coeff_I_p1_0_p2;
+COEFF(2,0,2) = coeff_I_p2_0_p2;
+COEFF(-2,1,2) = coeff_I_m2_p1_p2;
+COEFF(-1,1,2) = coeff_I_m1_p1_p2;
+COEFF(0,1,2) = coeff_I_0_p1_p2;
+COEFF(1,1,2) = coeff_I_p1_p1_p2;
+COEFF(2,1,2) = coeff_I_p2_p1_p2;
+COEFF(-2,2,2) = coeff_I_m2_p2_p2;
+COEFF(-1,2,2) = coeff_I_m1_p2_p2;
+COEFF(0,2,2) = coeff_I_0_p2_p2;
+COEFF(1,2,2) = coeff_I_p1_p2_p2;
+COEFF(2,2,2) = coeff_I_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dx.dcl.c
new file mode 100644
index 0000000..0c923f3
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dx.dcl.c
@@ -0,0 +1,125 @@
+fp coeff_dx_m2_m2_m2,
+ coeff_dx_m1_m2_m2,
+ coeff_dx_0_m2_m2,
+ coeff_dx_p1_m2_m2,
+ coeff_dx_p2_m2_m2,
+ coeff_dx_m2_m1_m2,
+ coeff_dx_m1_m1_m2,
+ coeff_dx_0_m1_m2,
+ coeff_dx_p1_m1_m2,
+ coeff_dx_p2_m1_m2,
+ coeff_dx_m2_0_m2,
+ coeff_dx_m1_0_m2,
+ coeff_dx_0_0_m2,
+ coeff_dx_p1_0_m2,
+ coeff_dx_p2_0_m2,
+ coeff_dx_m2_p1_m2,
+ coeff_dx_m1_p1_m2,
+ coeff_dx_0_p1_m2,
+ coeff_dx_p1_p1_m2,
+ coeff_dx_p2_p1_m2,
+ coeff_dx_m2_p2_m2,
+ coeff_dx_m1_p2_m2,
+ coeff_dx_0_p2_m2,
+ coeff_dx_p1_p2_m2,
+ coeff_dx_p2_p2_m2,
+ coeff_dx_m2_m2_m1,
+ coeff_dx_m1_m2_m1,
+ coeff_dx_0_m2_m1,
+ coeff_dx_p1_m2_m1,
+ coeff_dx_p2_m2_m1,
+ coeff_dx_m2_m1_m1,
+ coeff_dx_m1_m1_m1,
+ coeff_dx_0_m1_m1,
+ coeff_dx_p1_m1_m1,
+ coeff_dx_p2_m1_m1,
+ coeff_dx_m2_0_m1,
+ coeff_dx_m1_0_m1,
+ coeff_dx_0_0_m1,
+ coeff_dx_p1_0_m1,
+ coeff_dx_p2_0_m1,
+ coeff_dx_m2_p1_m1,
+ coeff_dx_m1_p1_m1,
+ coeff_dx_0_p1_m1,
+ coeff_dx_p1_p1_m1,
+ coeff_dx_p2_p1_m1,
+ coeff_dx_m2_p2_m1,
+ coeff_dx_m1_p2_m1,
+ coeff_dx_0_p2_m1,
+ coeff_dx_p1_p2_m1,
+ coeff_dx_p2_p2_m1,
+ coeff_dx_m2_m2_0,
+ coeff_dx_m1_m2_0,
+ coeff_dx_0_m2_0,
+ coeff_dx_p1_m2_0,
+ coeff_dx_p2_m2_0,
+ coeff_dx_m2_m1_0,
+ coeff_dx_m1_m1_0,
+ coeff_dx_0_m1_0,
+ coeff_dx_p1_m1_0,
+ coeff_dx_p2_m1_0,
+ coeff_dx_m2_0_0,
+ coeff_dx_m1_0_0,
+ coeff_dx_0_0_0,
+ coeff_dx_p1_0_0,
+ coeff_dx_p2_0_0,
+ coeff_dx_m2_p1_0,
+ coeff_dx_m1_p1_0,
+ coeff_dx_0_p1_0,
+ coeff_dx_p1_p1_0,
+ coeff_dx_p2_p1_0,
+ coeff_dx_m2_p2_0,
+ coeff_dx_m1_p2_0,
+ coeff_dx_0_p2_0,
+ coeff_dx_p1_p2_0,
+ coeff_dx_p2_p2_0,
+ coeff_dx_m2_m2_p1,
+ coeff_dx_m1_m2_p1,
+ coeff_dx_0_m2_p1,
+ coeff_dx_p1_m2_p1,
+ coeff_dx_p2_m2_p1,
+ coeff_dx_m2_m1_p1,
+ coeff_dx_m1_m1_p1,
+ coeff_dx_0_m1_p1,
+ coeff_dx_p1_m1_p1,
+ coeff_dx_p2_m1_p1,
+ coeff_dx_m2_0_p1,
+ coeff_dx_m1_0_p1,
+ coeff_dx_0_0_p1,
+ coeff_dx_p1_0_p1,
+ coeff_dx_p2_0_p1,
+ coeff_dx_m2_p1_p1,
+ coeff_dx_m1_p1_p1,
+ coeff_dx_0_p1_p1,
+ coeff_dx_p1_p1_p1,
+ coeff_dx_p2_p1_p1,
+ coeff_dx_m2_p2_p1,
+ coeff_dx_m1_p2_p1,
+ coeff_dx_0_p2_p1,
+ coeff_dx_p1_p2_p1,
+ coeff_dx_p2_p2_p1,
+ coeff_dx_m2_m2_p2,
+ coeff_dx_m1_m2_p2,
+ coeff_dx_0_m2_p2,
+ coeff_dx_p1_m2_p2,
+ coeff_dx_p2_m2_p2,
+ coeff_dx_m2_m1_p2,
+ coeff_dx_m1_m1_p2,
+ coeff_dx_0_m1_p2,
+ coeff_dx_p1_m1_p2,
+ coeff_dx_p2_m1_p2,
+ coeff_dx_m2_0_p2,
+ coeff_dx_m1_0_p2,
+ coeff_dx_0_0_p2,
+ coeff_dx_p1_0_p2,
+ coeff_dx_p2_0_p2,
+ coeff_dx_m2_p1_p2,
+ coeff_dx_m1_p1_p2,
+ coeff_dx_0_p1_p2,
+ coeff_dx_p1_p1_p2,
+ coeff_dx_p2_p1_p2,
+ coeff_dx_m2_p2_p2,
+ coeff_dx_m1_p2_p2,
+ coeff_dx_0_p2_p2,
+ coeff_dx_p1_p2_p2,
+ coeff_dx_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dx.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dx.store.c
new file mode 100644
index 0000000..920f72d
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dx.store.c
@@ -0,0 +1,125 @@
+COEFF(-2,-2,-2) = factor * coeff_dx_m2_m2_m2;
+COEFF(-1,-2,-2) = factor * coeff_dx_m1_m2_m2;
+COEFF(0,-2,-2) = factor * coeff_dx_0_m2_m2;
+COEFF(1,-2,-2) = factor * coeff_dx_p1_m2_m2;
+COEFF(2,-2,-2) = factor * coeff_dx_p2_m2_m2;
+COEFF(-2,-1,-2) = factor * coeff_dx_m2_m1_m2;
+COEFF(-1,-1,-2) = factor * coeff_dx_m1_m1_m2;
+COEFF(0,-1,-2) = factor * coeff_dx_0_m1_m2;
+COEFF(1,-1,-2) = factor * coeff_dx_p1_m1_m2;
+COEFF(2,-1,-2) = factor * coeff_dx_p2_m1_m2;
+COEFF(-2,0,-2) = factor * coeff_dx_m2_0_m2;
+COEFF(-1,0,-2) = factor * coeff_dx_m1_0_m2;
+COEFF(0,0,-2) = factor * coeff_dx_0_0_m2;
+COEFF(1,0,-2) = factor * coeff_dx_p1_0_m2;
+COEFF(2,0,-2) = factor * coeff_dx_p2_0_m2;
+COEFF(-2,1,-2) = factor * coeff_dx_m2_p1_m2;
+COEFF(-1,1,-2) = factor * coeff_dx_m1_p1_m2;
+COEFF(0,1,-2) = factor * coeff_dx_0_p1_m2;
+COEFF(1,1,-2) = factor * coeff_dx_p1_p1_m2;
+COEFF(2,1,-2) = factor * coeff_dx_p2_p1_m2;
+COEFF(-2,2,-2) = factor * coeff_dx_m2_p2_m2;
+COEFF(-1,2,-2) = factor * coeff_dx_m1_p2_m2;
+COEFF(0,2,-2) = factor * coeff_dx_0_p2_m2;
+COEFF(1,2,-2) = factor * coeff_dx_p1_p2_m2;
+COEFF(2,2,-2) = factor * coeff_dx_p2_p2_m2;
+COEFF(-2,-2,-1) = factor * coeff_dx_m2_m2_m1;
+COEFF(-1,-2,-1) = factor * coeff_dx_m1_m2_m1;
+COEFF(0,-2,-1) = factor * coeff_dx_0_m2_m1;
+COEFF(1,-2,-1) = factor * coeff_dx_p1_m2_m1;
+COEFF(2,-2,-1) = factor * coeff_dx_p2_m2_m1;
+COEFF(-2,-1,-1) = factor * coeff_dx_m2_m1_m1;
+COEFF(-1,-1,-1) = factor * coeff_dx_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dx_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dx_p1_m1_m1;
+COEFF(2,-1,-1) = factor * coeff_dx_p2_m1_m1;
+COEFF(-2,0,-1) = factor * coeff_dx_m2_0_m1;
+COEFF(-1,0,-1) = factor * coeff_dx_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dx_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dx_p1_0_m1;
+COEFF(2,0,-1) = factor * coeff_dx_p2_0_m1;
+COEFF(-2,1,-1) = factor * coeff_dx_m2_p1_m1;
+COEFF(-1,1,-1) = factor * coeff_dx_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dx_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dx_p1_p1_m1;
+COEFF(2,1,-1) = factor * coeff_dx_p2_p1_m1;
+COEFF(-2,2,-1) = factor * coeff_dx_m2_p2_m1;
+COEFF(-1,2,-1) = factor * coeff_dx_m1_p2_m1;
+COEFF(0,2,-1) = factor * coeff_dx_0_p2_m1;
+COEFF(1,2,-1) = factor * coeff_dx_p1_p2_m1;
+COEFF(2,2,-1) = factor * coeff_dx_p2_p2_m1;
+COEFF(-2,-2,0) = factor * coeff_dx_m2_m2_0;
+COEFF(-1,-2,0) = factor * coeff_dx_m1_m2_0;
+COEFF(0,-2,0) = factor * coeff_dx_0_m2_0;
+COEFF(1,-2,0) = factor * coeff_dx_p1_m2_0;
+COEFF(2,-2,0) = factor * coeff_dx_p2_m2_0;
+COEFF(-2,-1,0) = factor * coeff_dx_m2_m1_0;
+COEFF(-1,-1,0) = factor * coeff_dx_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dx_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dx_p1_m1_0;
+COEFF(2,-1,0) = factor * coeff_dx_p2_m1_0;
+COEFF(-2,0,0) = factor * coeff_dx_m2_0_0;
+COEFF(-1,0,0) = factor * coeff_dx_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dx_0_0_0;
+COEFF(1,0,0) = factor * coeff_dx_p1_0_0;
+COEFF(2,0,0) = factor * coeff_dx_p2_0_0;
+COEFF(-2,1,0) = factor * coeff_dx_m2_p1_0;
+COEFF(-1,1,0) = factor * coeff_dx_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dx_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dx_p1_p1_0;
+COEFF(2,1,0) = factor * coeff_dx_p2_p1_0;
+COEFF(-2,2,0) = factor * coeff_dx_m2_p2_0;
+COEFF(-1,2,0) = factor * coeff_dx_m1_p2_0;
+COEFF(0,2,0) = factor * coeff_dx_0_p2_0;
+COEFF(1,2,0) = factor * coeff_dx_p1_p2_0;
+COEFF(2,2,0) = factor * coeff_dx_p2_p2_0;
+COEFF(-2,-2,1) = factor * coeff_dx_m2_m2_p1;
+COEFF(-1,-2,1) = factor * coeff_dx_m1_m2_p1;
+COEFF(0,-2,1) = factor * coeff_dx_0_m2_p1;
+COEFF(1,-2,1) = factor * coeff_dx_p1_m2_p1;
+COEFF(2,-2,1) = factor * coeff_dx_p2_m2_p1;
+COEFF(-2,-1,1) = factor * coeff_dx_m2_m1_p1;
+COEFF(-1,-1,1) = factor * coeff_dx_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dx_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dx_p1_m1_p1;
+COEFF(2,-1,1) = factor * coeff_dx_p2_m1_p1;
+COEFF(-2,0,1) = factor * coeff_dx_m2_0_p1;
+COEFF(-1,0,1) = factor * coeff_dx_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dx_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dx_p1_0_p1;
+COEFF(2,0,1) = factor * coeff_dx_p2_0_p1;
+COEFF(-2,1,1) = factor * coeff_dx_m2_p1_p1;
+COEFF(-1,1,1) = factor * coeff_dx_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dx_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dx_p1_p1_p1;
+COEFF(2,1,1) = factor * coeff_dx_p2_p1_p1;
+COEFF(-2,2,1) = factor * coeff_dx_m2_p2_p1;
+COEFF(-1,2,1) = factor * coeff_dx_m1_p2_p1;
+COEFF(0,2,1) = factor * coeff_dx_0_p2_p1;
+COEFF(1,2,1) = factor * coeff_dx_p1_p2_p1;
+COEFF(2,2,1) = factor * coeff_dx_p2_p2_p1;
+COEFF(-2,-2,2) = factor * coeff_dx_m2_m2_p2;
+COEFF(-1,-2,2) = factor * coeff_dx_m1_m2_p2;
+COEFF(0,-2,2) = factor * coeff_dx_0_m2_p2;
+COEFF(1,-2,2) = factor * coeff_dx_p1_m2_p2;
+COEFF(2,-2,2) = factor * coeff_dx_p2_m2_p2;
+COEFF(-2,-1,2) = factor * coeff_dx_m2_m1_p2;
+COEFF(-1,-1,2) = factor * coeff_dx_m1_m1_p2;
+COEFF(0,-1,2) = factor * coeff_dx_0_m1_p2;
+COEFF(1,-1,2) = factor * coeff_dx_p1_m1_p2;
+COEFF(2,-1,2) = factor * coeff_dx_p2_m1_p2;
+COEFF(-2,0,2) = factor * coeff_dx_m2_0_p2;
+COEFF(-1,0,2) = factor * coeff_dx_m1_0_p2;
+COEFF(0,0,2) = factor * coeff_dx_0_0_p2;
+COEFF(1,0,2) = factor * coeff_dx_p1_0_p2;
+COEFF(2,0,2) = factor * coeff_dx_p2_0_p2;
+COEFF(-2,1,2) = factor * coeff_dx_m2_p1_p2;
+COEFF(-1,1,2) = factor * coeff_dx_m1_p1_p2;
+COEFF(0,1,2) = factor * coeff_dx_0_p1_p2;
+COEFF(1,1,2) = factor * coeff_dx_p1_p1_p2;
+COEFF(2,1,2) = factor * coeff_dx_p2_p1_p2;
+COEFF(-2,2,2) = factor * coeff_dx_m2_p2_p2;
+COEFF(-1,2,2) = factor * coeff_dx_m1_p2_p2;
+COEFF(0,2,2) = factor * coeff_dx_0_p2_p2;
+COEFF(1,2,2) = factor * coeff_dx_p1_p2_p2;
+COEFF(2,2,2) = factor * coeff_dx_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxx.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxx.dcl.c
new file mode 100644
index 0000000..e7cb52f
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxx.dcl.c
@@ -0,0 +1,125 @@
+fp coeff_dxx_m2_m2_m2,
+ coeff_dxx_m1_m2_m2,
+ coeff_dxx_0_m2_m2,
+ coeff_dxx_p1_m2_m2,
+ coeff_dxx_p2_m2_m2,
+ coeff_dxx_m2_m1_m2,
+ coeff_dxx_m1_m1_m2,
+ coeff_dxx_0_m1_m2,
+ coeff_dxx_p1_m1_m2,
+ coeff_dxx_p2_m1_m2,
+ coeff_dxx_m2_0_m2,
+ coeff_dxx_m1_0_m2,
+ coeff_dxx_0_0_m2,
+ coeff_dxx_p1_0_m2,
+ coeff_dxx_p2_0_m2,
+ coeff_dxx_m2_p1_m2,
+ coeff_dxx_m1_p1_m2,
+ coeff_dxx_0_p1_m2,
+ coeff_dxx_p1_p1_m2,
+ coeff_dxx_p2_p1_m2,
+ coeff_dxx_m2_p2_m2,
+ coeff_dxx_m1_p2_m2,
+ coeff_dxx_0_p2_m2,
+ coeff_dxx_p1_p2_m2,
+ coeff_dxx_p2_p2_m2,
+ coeff_dxx_m2_m2_m1,
+ coeff_dxx_m1_m2_m1,
+ coeff_dxx_0_m2_m1,
+ coeff_dxx_p1_m2_m1,
+ coeff_dxx_p2_m2_m1,
+ coeff_dxx_m2_m1_m1,
+ coeff_dxx_m1_m1_m1,
+ coeff_dxx_0_m1_m1,
+ coeff_dxx_p1_m1_m1,
+ coeff_dxx_p2_m1_m1,
+ coeff_dxx_m2_0_m1,
+ coeff_dxx_m1_0_m1,
+ coeff_dxx_0_0_m1,
+ coeff_dxx_p1_0_m1,
+ coeff_dxx_p2_0_m1,
+ coeff_dxx_m2_p1_m1,
+ coeff_dxx_m1_p1_m1,
+ coeff_dxx_0_p1_m1,
+ coeff_dxx_p1_p1_m1,
+ coeff_dxx_p2_p1_m1,
+ coeff_dxx_m2_p2_m1,
+ coeff_dxx_m1_p2_m1,
+ coeff_dxx_0_p2_m1,
+ coeff_dxx_p1_p2_m1,
+ coeff_dxx_p2_p2_m1,
+ coeff_dxx_m2_m2_0,
+ coeff_dxx_m1_m2_0,
+ coeff_dxx_0_m2_0,
+ coeff_dxx_p1_m2_0,
+ coeff_dxx_p2_m2_0,
+ coeff_dxx_m2_m1_0,
+ coeff_dxx_m1_m1_0,
+ coeff_dxx_0_m1_0,
+ coeff_dxx_p1_m1_0,
+ coeff_dxx_p2_m1_0,
+ coeff_dxx_m2_0_0,
+ coeff_dxx_m1_0_0,
+ coeff_dxx_0_0_0,
+ coeff_dxx_p1_0_0,
+ coeff_dxx_p2_0_0,
+ coeff_dxx_m2_p1_0,
+ coeff_dxx_m1_p1_0,
+ coeff_dxx_0_p1_0,
+ coeff_dxx_p1_p1_0,
+ coeff_dxx_p2_p1_0,
+ coeff_dxx_m2_p2_0,
+ coeff_dxx_m1_p2_0,
+ coeff_dxx_0_p2_0,
+ coeff_dxx_p1_p2_0,
+ coeff_dxx_p2_p2_0,
+ coeff_dxx_m2_m2_p1,
+ coeff_dxx_m1_m2_p1,
+ coeff_dxx_0_m2_p1,
+ coeff_dxx_p1_m2_p1,
+ coeff_dxx_p2_m2_p1,
+ coeff_dxx_m2_m1_p1,
+ coeff_dxx_m1_m1_p1,
+ coeff_dxx_0_m1_p1,
+ coeff_dxx_p1_m1_p1,
+ coeff_dxx_p2_m1_p1,
+ coeff_dxx_m2_0_p1,
+ coeff_dxx_m1_0_p1,
+ coeff_dxx_0_0_p1,
+ coeff_dxx_p1_0_p1,
+ coeff_dxx_p2_0_p1,
+ coeff_dxx_m2_p1_p1,
+ coeff_dxx_m1_p1_p1,
+ coeff_dxx_0_p1_p1,
+ coeff_dxx_p1_p1_p1,
+ coeff_dxx_p2_p1_p1,
+ coeff_dxx_m2_p2_p1,
+ coeff_dxx_m1_p2_p1,
+ coeff_dxx_0_p2_p1,
+ coeff_dxx_p1_p2_p1,
+ coeff_dxx_p2_p2_p1,
+ coeff_dxx_m2_m2_p2,
+ coeff_dxx_m1_m2_p2,
+ coeff_dxx_0_m2_p2,
+ coeff_dxx_p1_m2_p2,
+ coeff_dxx_p2_m2_p2,
+ coeff_dxx_m2_m1_p2,
+ coeff_dxx_m1_m1_p2,
+ coeff_dxx_0_m1_p2,
+ coeff_dxx_p1_m1_p2,
+ coeff_dxx_p2_m1_p2,
+ coeff_dxx_m2_0_p2,
+ coeff_dxx_m1_0_p2,
+ coeff_dxx_0_0_p2,
+ coeff_dxx_p1_0_p2,
+ coeff_dxx_p2_0_p2,
+ coeff_dxx_m2_p1_p2,
+ coeff_dxx_m1_p1_p2,
+ coeff_dxx_0_p1_p2,
+ coeff_dxx_p1_p1_p2,
+ coeff_dxx_p2_p1_p2,
+ coeff_dxx_m2_p2_p2,
+ coeff_dxx_m1_p2_p2,
+ coeff_dxx_0_p2_p2,
+ coeff_dxx_p1_p2_p2,
+ coeff_dxx_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxx.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxx.store.c
new file mode 100644
index 0000000..e9a81ff
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxx.store.c
@@ -0,0 +1,125 @@
+COEFF(-2,-2,-2) = factor * coeff_dxx_m2_m2_m2;
+COEFF(-1,-2,-2) = factor * coeff_dxx_m1_m2_m2;
+COEFF(0,-2,-2) = factor * coeff_dxx_0_m2_m2;
+COEFF(1,-2,-2) = factor * coeff_dxx_p1_m2_m2;
+COEFF(2,-2,-2) = factor * coeff_dxx_p2_m2_m2;
+COEFF(-2,-1,-2) = factor * coeff_dxx_m2_m1_m2;
+COEFF(-1,-1,-2) = factor * coeff_dxx_m1_m1_m2;
+COEFF(0,-1,-2) = factor * coeff_dxx_0_m1_m2;
+COEFF(1,-1,-2) = factor * coeff_dxx_p1_m1_m2;
+COEFF(2,-1,-2) = factor * coeff_dxx_p2_m1_m2;
+COEFF(-2,0,-2) = factor * coeff_dxx_m2_0_m2;
+COEFF(-1,0,-2) = factor * coeff_dxx_m1_0_m2;
+COEFF(0,0,-2) = factor * coeff_dxx_0_0_m2;
+COEFF(1,0,-2) = factor * coeff_dxx_p1_0_m2;
+COEFF(2,0,-2) = factor * coeff_dxx_p2_0_m2;
+COEFF(-2,1,-2) = factor * coeff_dxx_m2_p1_m2;
+COEFF(-1,1,-2) = factor * coeff_dxx_m1_p1_m2;
+COEFF(0,1,-2) = factor * coeff_dxx_0_p1_m2;
+COEFF(1,1,-2) = factor * coeff_dxx_p1_p1_m2;
+COEFF(2,1,-2) = factor * coeff_dxx_p2_p1_m2;
+COEFF(-2,2,-2) = factor * coeff_dxx_m2_p2_m2;
+COEFF(-1,2,-2) = factor * coeff_dxx_m1_p2_m2;
+COEFF(0,2,-2) = factor * coeff_dxx_0_p2_m2;
+COEFF(1,2,-2) = factor * coeff_dxx_p1_p2_m2;
+COEFF(2,2,-2) = factor * coeff_dxx_p2_p2_m2;
+COEFF(-2,-2,-1) = factor * coeff_dxx_m2_m2_m1;
+COEFF(-1,-2,-1) = factor * coeff_dxx_m1_m2_m1;
+COEFF(0,-2,-1) = factor * coeff_dxx_0_m2_m1;
+COEFF(1,-2,-1) = factor * coeff_dxx_p1_m2_m1;
+COEFF(2,-2,-1) = factor * coeff_dxx_p2_m2_m1;
+COEFF(-2,-1,-1) = factor * coeff_dxx_m2_m1_m1;
+COEFF(-1,-1,-1) = factor * coeff_dxx_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dxx_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dxx_p1_m1_m1;
+COEFF(2,-1,-1) = factor * coeff_dxx_p2_m1_m1;
+COEFF(-2,0,-1) = factor * coeff_dxx_m2_0_m1;
+COEFF(-1,0,-1) = factor * coeff_dxx_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dxx_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dxx_p1_0_m1;
+COEFF(2,0,-1) = factor * coeff_dxx_p2_0_m1;
+COEFF(-2,1,-1) = factor * coeff_dxx_m2_p1_m1;
+COEFF(-1,1,-1) = factor * coeff_dxx_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dxx_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dxx_p1_p1_m1;
+COEFF(2,1,-1) = factor * coeff_dxx_p2_p1_m1;
+COEFF(-2,2,-1) = factor * coeff_dxx_m2_p2_m1;
+COEFF(-1,2,-1) = factor * coeff_dxx_m1_p2_m1;
+COEFF(0,2,-1) = factor * coeff_dxx_0_p2_m1;
+COEFF(1,2,-1) = factor * coeff_dxx_p1_p2_m1;
+COEFF(2,2,-1) = factor * coeff_dxx_p2_p2_m1;
+COEFF(-2,-2,0) = factor * coeff_dxx_m2_m2_0;
+COEFF(-1,-2,0) = factor * coeff_dxx_m1_m2_0;
+COEFF(0,-2,0) = factor * coeff_dxx_0_m2_0;
+COEFF(1,-2,0) = factor * coeff_dxx_p1_m2_0;
+COEFF(2,-2,0) = factor * coeff_dxx_p2_m2_0;
+COEFF(-2,-1,0) = factor * coeff_dxx_m2_m1_0;
+COEFF(-1,-1,0) = factor * coeff_dxx_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dxx_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dxx_p1_m1_0;
+COEFF(2,-1,0) = factor * coeff_dxx_p2_m1_0;
+COEFF(-2,0,0) = factor * coeff_dxx_m2_0_0;
+COEFF(-1,0,0) = factor * coeff_dxx_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dxx_0_0_0;
+COEFF(1,0,0) = factor * coeff_dxx_p1_0_0;
+COEFF(2,0,0) = factor * coeff_dxx_p2_0_0;
+COEFF(-2,1,0) = factor * coeff_dxx_m2_p1_0;
+COEFF(-1,1,0) = factor * coeff_dxx_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dxx_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dxx_p1_p1_0;
+COEFF(2,1,0) = factor * coeff_dxx_p2_p1_0;
+COEFF(-2,2,0) = factor * coeff_dxx_m2_p2_0;
+COEFF(-1,2,0) = factor * coeff_dxx_m1_p2_0;
+COEFF(0,2,0) = factor * coeff_dxx_0_p2_0;
+COEFF(1,2,0) = factor * coeff_dxx_p1_p2_0;
+COEFF(2,2,0) = factor * coeff_dxx_p2_p2_0;
+COEFF(-2,-2,1) = factor * coeff_dxx_m2_m2_p1;
+COEFF(-1,-2,1) = factor * coeff_dxx_m1_m2_p1;
+COEFF(0,-2,1) = factor * coeff_dxx_0_m2_p1;
+COEFF(1,-2,1) = factor * coeff_dxx_p1_m2_p1;
+COEFF(2,-2,1) = factor * coeff_dxx_p2_m2_p1;
+COEFF(-2,-1,1) = factor * coeff_dxx_m2_m1_p1;
+COEFF(-1,-1,1) = factor * coeff_dxx_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dxx_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dxx_p1_m1_p1;
+COEFF(2,-1,1) = factor * coeff_dxx_p2_m1_p1;
+COEFF(-2,0,1) = factor * coeff_dxx_m2_0_p1;
+COEFF(-1,0,1) = factor * coeff_dxx_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dxx_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dxx_p1_0_p1;
+COEFF(2,0,1) = factor * coeff_dxx_p2_0_p1;
+COEFF(-2,1,1) = factor * coeff_dxx_m2_p1_p1;
+COEFF(-1,1,1) = factor * coeff_dxx_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dxx_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dxx_p1_p1_p1;
+COEFF(2,1,1) = factor * coeff_dxx_p2_p1_p1;
+COEFF(-2,2,1) = factor * coeff_dxx_m2_p2_p1;
+COEFF(-1,2,1) = factor * coeff_dxx_m1_p2_p1;
+COEFF(0,2,1) = factor * coeff_dxx_0_p2_p1;
+COEFF(1,2,1) = factor * coeff_dxx_p1_p2_p1;
+COEFF(2,2,1) = factor * coeff_dxx_p2_p2_p1;
+COEFF(-2,-2,2) = factor * coeff_dxx_m2_m2_p2;
+COEFF(-1,-2,2) = factor * coeff_dxx_m1_m2_p2;
+COEFF(0,-2,2) = factor * coeff_dxx_0_m2_p2;
+COEFF(1,-2,2) = factor * coeff_dxx_p1_m2_p2;
+COEFF(2,-2,2) = factor * coeff_dxx_p2_m2_p2;
+COEFF(-2,-1,2) = factor * coeff_dxx_m2_m1_p2;
+COEFF(-1,-1,2) = factor * coeff_dxx_m1_m1_p2;
+COEFF(0,-1,2) = factor * coeff_dxx_0_m1_p2;
+COEFF(1,-1,2) = factor * coeff_dxx_p1_m1_p2;
+COEFF(2,-1,2) = factor * coeff_dxx_p2_m1_p2;
+COEFF(-2,0,2) = factor * coeff_dxx_m2_0_p2;
+COEFF(-1,0,2) = factor * coeff_dxx_m1_0_p2;
+COEFF(0,0,2) = factor * coeff_dxx_0_0_p2;
+COEFF(1,0,2) = factor * coeff_dxx_p1_0_p2;
+COEFF(2,0,2) = factor * coeff_dxx_p2_0_p2;
+COEFF(-2,1,2) = factor * coeff_dxx_m2_p1_p2;
+COEFF(-1,1,2) = factor * coeff_dxx_m1_p1_p2;
+COEFF(0,1,2) = factor * coeff_dxx_0_p1_p2;
+COEFF(1,1,2) = factor * coeff_dxx_p1_p1_p2;
+COEFF(2,1,2) = factor * coeff_dxx_p2_p1_p2;
+COEFF(-2,2,2) = factor * coeff_dxx_m2_p2_p2;
+COEFF(-1,2,2) = factor * coeff_dxx_m1_p2_p2;
+COEFF(0,2,2) = factor * coeff_dxx_0_p2_p2;
+COEFF(1,2,2) = factor * coeff_dxx_p1_p2_p2;
+COEFF(2,2,2) = factor * coeff_dxx_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxy.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxy.dcl.c
new file mode 100644
index 0000000..3b029c8
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxy.dcl.c
@@ -0,0 +1,125 @@
+fp coeff_dxy_m2_m2_m2,
+ coeff_dxy_m1_m2_m2,
+ coeff_dxy_0_m2_m2,
+ coeff_dxy_p1_m2_m2,
+ coeff_dxy_p2_m2_m2,
+ coeff_dxy_m2_m1_m2,
+ coeff_dxy_m1_m1_m2,
+ coeff_dxy_0_m1_m2,
+ coeff_dxy_p1_m1_m2,
+ coeff_dxy_p2_m1_m2,
+ coeff_dxy_m2_0_m2,
+ coeff_dxy_m1_0_m2,
+ coeff_dxy_0_0_m2,
+ coeff_dxy_p1_0_m2,
+ coeff_dxy_p2_0_m2,
+ coeff_dxy_m2_p1_m2,
+ coeff_dxy_m1_p1_m2,
+ coeff_dxy_0_p1_m2,
+ coeff_dxy_p1_p1_m2,
+ coeff_dxy_p2_p1_m2,
+ coeff_dxy_m2_p2_m2,
+ coeff_dxy_m1_p2_m2,
+ coeff_dxy_0_p2_m2,
+ coeff_dxy_p1_p2_m2,
+ coeff_dxy_p2_p2_m2,
+ coeff_dxy_m2_m2_m1,
+ coeff_dxy_m1_m2_m1,
+ coeff_dxy_0_m2_m1,
+ coeff_dxy_p1_m2_m1,
+ coeff_dxy_p2_m2_m1,
+ coeff_dxy_m2_m1_m1,
+ coeff_dxy_m1_m1_m1,
+ coeff_dxy_0_m1_m1,
+ coeff_dxy_p1_m1_m1,
+ coeff_dxy_p2_m1_m1,
+ coeff_dxy_m2_0_m1,
+ coeff_dxy_m1_0_m1,
+ coeff_dxy_0_0_m1,
+ coeff_dxy_p1_0_m1,
+ coeff_dxy_p2_0_m1,
+ coeff_dxy_m2_p1_m1,
+ coeff_dxy_m1_p1_m1,
+ coeff_dxy_0_p1_m1,
+ coeff_dxy_p1_p1_m1,
+ coeff_dxy_p2_p1_m1,
+ coeff_dxy_m2_p2_m1,
+ coeff_dxy_m1_p2_m1,
+ coeff_dxy_0_p2_m1,
+ coeff_dxy_p1_p2_m1,
+ coeff_dxy_p2_p2_m1,
+ coeff_dxy_m2_m2_0,
+ coeff_dxy_m1_m2_0,
+ coeff_dxy_0_m2_0,
+ coeff_dxy_p1_m2_0,
+ coeff_dxy_p2_m2_0,
+ coeff_dxy_m2_m1_0,
+ coeff_dxy_m1_m1_0,
+ coeff_dxy_0_m1_0,
+ coeff_dxy_p1_m1_0,
+ coeff_dxy_p2_m1_0,
+ coeff_dxy_m2_0_0,
+ coeff_dxy_m1_0_0,
+ coeff_dxy_0_0_0,
+ coeff_dxy_p1_0_0,
+ coeff_dxy_p2_0_0,
+ coeff_dxy_m2_p1_0,
+ coeff_dxy_m1_p1_0,
+ coeff_dxy_0_p1_0,
+ coeff_dxy_p1_p1_0,
+ coeff_dxy_p2_p1_0,
+ coeff_dxy_m2_p2_0,
+ coeff_dxy_m1_p2_0,
+ coeff_dxy_0_p2_0,
+ coeff_dxy_p1_p2_0,
+ coeff_dxy_p2_p2_0,
+ coeff_dxy_m2_m2_p1,
+ coeff_dxy_m1_m2_p1,
+ coeff_dxy_0_m2_p1,
+ coeff_dxy_p1_m2_p1,
+ coeff_dxy_p2_m2_p1,
+ coeff_dxy_m2_m1_p1,
+ coeff_dxy_m1_m1_p1,
+ coeff_dxy_0_m1_p1,
+ coeff_dxy_p1_m1_p1,
+ coeff_dxy_p2_m1_p1,
+ coeff_dxy_m2_0_p1,
+ coeff_dxy_m1_0_p1,
+ coeff_dxy_0_0_p1,
+ coeff_dxy_p1_0_p1,
+ coeff_dxy_p2_0_p1,
+ coeff_dxy_m2_p1_p1,
+ coeff_dxy_m1_p1_p1,
+ coeff_dxy_0_p1_p1,
+ coeff_dxy_p1_p1_p1,
+ coeff_dxy_p2_p1_p1,
+ coeff_dxy_m2_p2_p1,
+ coeff_dxy_m1_p2_p1,
+ coeff_dxy_0_p2_p1,
+ coeff_dxy_p1_p2_p1,
+ coeff_dxy_p2_p2_p1,
+ coeff_dxy_m2_m2_p2,
+ coeff_dxy_m1_m2_p2,
+ coeff_dxy_0_m2_p2,
+ coeff_dxy_p1_m2_p2,
+ coeff_dxy_p2_m2_p2,
+ coeff_dxy_m2_m1_p2,
+ coeff_dxy_m1_m1_p2,
+ coeff_dxy_0_m1_p2,
+ coeff_dxy_p1_m1_p2,
+ coeff_dxy_p2_m1_p2,
+ coeff_dxy_m2_0_p2,
+ coeff_dxy_m1_0_p2,
+ coeff_dxy_0_0_p2,
+ coeff_dxy_p1_0_p2,
+ coeff_dxy_p2_0_p2,
+ coeff_dxy_m2_p1_p2,
+ coeff_dxy_m1_p1_p2,
+ coeff_dxy_0_p1_p2,
+ coeff_dxy_p1_p1_p2,
+ coeff_dxy_p2_p1_p2,
+ coeff_dxy_m2_p2_p2,
+ coeff_dxy_m1_p2_p2,
+ coeff_dxy_0_p2_p2,
+ coeff_dxy_p1_p2_p2,
+ coeff_dxy_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxy.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxy.store.c
new file mode 100644
index 0000000..83fd574
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxy.store.c
@@ -0,0 +1,125 @@
+COEFF(-2,-2,-2) = factor * coeff_dxy_m2_m2_m2;
+COEFF(-1,-2,-2) = factor * coeff_dxy_m1_m2_m2;
+COEFF(0,-2,-2) = factor * coeff_dxy_0_m2_m2;
+COEFF(1,-2,-2) = factor * coeff_dxy_p1_m2_m2;
+COEFF(2,-2,-2) = factor * coeff_dxy_p2_m2_m2;
+COEFF(-2,-1,-2) = factor * coeff_dxy_m2_m1_m2;
+COEFF(-1,-1,-2) = factor * coeff_dxy_m1_m1_m2;
+COEFF(0,-1,-2) = factor * coeff_dxy_0_m1_m2;
+COEFF(1,-1,-2) = factor * coeff_dxy_p1_m1_m2;
+COEFF(2,-1,-2) = factor * coeff_dxy_p2_m1_m2;
+COEFF(-2,0,-2) = factor * coeff_dxy_m2_0_m2;
+COEFF(-1,0,-2) = factor * coeff_dxy_m1_0_m2;
+COEFF(0,0,-2) = factor * coeff_dxy_0_0_m2;
+COEFF(1,0,-2) = factor * coeff_dxy_p1_0_m2;
+COEFF(2,0,-2) = factor * coeff_dxy_p2_0_m2;
+COEFF(-2,1,-2) = factor * coeff_dxy_m2_p1_m2;
+COEFF(-1,1,-2) = factor * coeff_dxy_m1_p1_m2;
+COEFF(0,1,-2) = factor * coeff_dxy_0_p1_m2;
+COEFF(1,1,-2) = factor * coeff_dxy_p1_p1_m2;
+COEFF(2,1,-2) = factor * coeff_dxy_p2_p1_m2;
+COEFF(-2,2,-2) = factor * coeff_dxy_m2_p2_m2;
+COEFF(-1,2,-2) = factor * coeff_dxy_m1_p2_m2;
+COEFF(0,2,-2) = factor * coeff_dxy_0_p2_m2;
+COEFF(1,2,-2) = factor * coeff_dxy_p1_p2_m2;
+COEFF(2,2,-2) = factor * coeff_dxy_p2_p2_m2;
+COEFF(-2,-2,-1) = factor * coeff_dxy_m2_m2_m1;
+COEFF(-1,-2,-1) = factor * coeff_dxy_m1_m2_m1;
+COEFF(0,-2,-1) = factor * coeff_dxy_0_m2_m1;
+COEFF(1,-2,-1) = factor * coeff_dxy_p1_m2_m1;
+COEFF(2,-2,-1) = factor * coeff_dxy_p2_m2_m1;
+COEFF(-2,-1,-1) = factor * coeff_dxy_m2_m1_m1;
+COEFF(-1,-1,-1) = factor * coeff_dxy_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dxy_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dxy_p1_m1_m1;
+COEFF(2,-1,-1) = factor * coeff_dxy_p2_m1_m1;
+COEFF(-2,0,-1) = factor * coeff_dxy_m2_0_m1;
+COEFF(-1,0,-1) = factor * coeff_dxy_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dxy_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dxy_p1_0_m1;
+COEFF(2,0,-1) = factor * coeff_dxy_p2_0_m1;
+COEFF(-2,1,-1) = factor * coeff_dxy_m2_p1_m1;
+COEFF(-1,1,-1) = factor * coeff_dxy_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dxy_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dxy_p1_p1_m1;
+COEFF(2,1,-1) = factor * coeff_dxy_p2_p1_m1;
+COEFF(-2,2,-1) = factor * coeff_dxy_m2_p2_m1;
+COEFF(-1,2,-1) = factor * coeff_dxy_m1_p2_m1;
+COEFF(0,2,-1) = factor * coeff_dxy_0_p2_m1;
+COEFF(1,2,-1) = factor * coeff_dxy_p1_p2_m1;
+COEFF(2,2,-1) = factor * coeff_dxy_p2_p2_m1;
+COEFF(-2,-2,0) = factor * coeff_dxy_m2_m2_0;
+COEFF(-1,-2,0) = factor * coeff_dxy_m1_m2_0;
+COEFF(0,-2,0) = factor * coeff_dxy_0_m2_0;
+COEFF(1,-2,0) = factor * coeff_dxy_p1_m2_0;
+COEFF(2,-2,0) = factor * coeff_dxy_p2_m2_0;
+COEFF(-2,-1,0) = factor * coeff_dxy_m2_m1_0;
+COEFF(-1,-1,0) = factor * coeff_dxy_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dxy_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dxy_p1_m1_0;
+COEFF(2,-1,0) = factor * coeff_dxy_p2_m1_0;
+COEFF(-2,0,0) = factor * coeff_dxy_m2_0_0;
+COEFF(-1,0,0) = factor * coeff_dxy_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dxy_0_0_0;
+COEFF(1,0,0) = factor * coeff_dxy_p1_0_0;
+COEFF(2,0,0) = factor * coeff_dxy_p2_0_0;
+COEFF(-2,1,0) = factor * coeff_dxy_m2_p1_0;
+COEFF(-1,1,0) = factor * coeff_dxy_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dxy_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dxy_p1_p1_0;
+COEFF(2,1,0) = factor * coeff_dxy_p2_p1_0;
+COEFF(-2,2,0) = factor * coeff_dxy_m2_p2_0;
+COEFF(-1,2,0) = factor * coeff_dxy_m1_p2_0;
+COEFF(0,2,0) = factor * coeff_dxy_0_p2_0;
+COEFF(1,2,0) = factor * coeff_dxy_p1_p2_0;
+COEFF(2,2,0) = factor * coeff_dxy_p2_p2_0;
+COEFF(-2,-2,1) = factor * coeff_dxy_m2_m2_p1;
+COEFF(-1,-2,1) = factor * coeff_dxy_m1_m2_p1;
+COEFF(0,-2,1) = factor * coeff_dxy_0_m2_p1;
+COEFF(1,-2,1) = factor * coeff_dxy_p1_m2_p1;
+COEFF(2,-2,1) = factor * coeff_dxy_p2_m2_p1;
+COEFF(-2,-1,1) = factor * coeff_dxy_m2_m1_p1;
+COEFF(-1,-1,1) = factor * coeff_dxy_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dxy_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dxy_p1_m1_p1;
+COEFF(2,-1,1) = factor * coeff_dxy_p2_m1_p1;
+COEFF(-2,0,1) = factor * coeff_dxy_m2_0_p1;
+COEFF(-1,0,1) = factor * coeff_dxy_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dxy_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dxy_p1_0_p1;
+COEFF(2,0,1) = factor * coeff_dxy_p2_0_p1;
+COEFF(-2,1,1) = factor * coeff_dxy_m2_p1_p1;
+COEFF(-1,1,1) = factor * coeff_dxy_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dxy_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dxy_p1_p1_p1;
+COEFF(2,1,1) = factor * coeff_dxy_p2_p1_p1;
+COEFF(-2,2,1) = factor * coeff_dxy_m2_p2_p1;
+COEFF(-1,2,1) = factor * coeff_dxy_m1_p2_p1;
+COEFF(0,2,1) = factor * coeff_dxy_0_p2_p1;
+COEFF(1,2,1) = factor * coeff_dxy_p1_p2_p1;
+COEFF(2,2,1) = factor * coeff_dxy_p2_p2_p1;
+COEFF(-2,-2,2) = factor * coeff_dxy_m2_m2_p2;
+COEFF(-1,-2,2) = factor * coeff_dxy_m1_m2_p2;
+COEFF(0,-2,2) = factor * coeff_dxy_0_m2_p2;
+COEFF(1,-2,2) = factor * coeff_dxy_p1_m2_p2;
+COEFF(2,-2,2) = factor * coeff_dxy_p2_m2_p2;
+COEFF(-2,-1,2) = factor * coeff_dxy_m2_m1_p2;
+COEFF(-1,-1,2) = factor * coeff_dxy_m1_m1_p2;
+COEFF(0,-1,2) = factor * coeff_dxy_0_m1_p2;
+COEFF(1,-1,2) = factor * coeff_dxy_p1_m1_p2;
+COEFF(2,-1,2) = factor * coeff_dxy_p2_m1_p2;
+COEFF(-2,0,2) = factor * coeff_dxy_m2_0_p2;
+COEFF(-1,0,2) = factor * coeff_dxy_m1_0_p2;
+COEFF(0,0,2) = factor * coeff_dxy_0_0_p2;
+COEFF(1,0,2) = factor * coeff_dxy_p1_0_p2;
+COEFF(2,0,2) = factor * coeff_dxy_p2_0_p2;
+COEFF(-2,1,2) = factor * coeff_dxy_m2_p1_p2;
+COEFF(-1,1,2) = factor * coeff_dxy_m1_p1_p2;
+COEFF(0,1,2) = factor * coeff_dxy_0_p1_p2;
+COEFF(1,1,2) = factor * coeff_dxy_p1_p1_p2;
+COEFF(2,1,2) = factor * coeff_dxy_p2_p1_p2;
+COEFF(-2,2,2) = factor * coeff_dxy_m2_p2_p2;
+COEFF(-1,2,2) = factor * coeff_dxy_m1_p2_p2;
+COEFF(0,2,2) = factor * coeff_dxy_0_p2_p2;
+COEFF(1,2,2) = factor * coeff_dxy_p1_p2_p2;
+COEFF(2,2,2) = factor * coeff_dxy_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxz.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxz.dcl.c
new file mode 100644
index 0000000..4db13a0
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxz.dcl.c
@@ -0,0 +1,125 @@
+fp coeff_dxz_m2_m2_m2,
+ coeff_dxz_m1_m2_m2,
+ coeff_dxz_0_m2_m2,
+ coeff_dxz_p1_m2_m2,
+ coeff_dxz_p2_m2_m2,
+ coeff_dxz_m2_m1_m2,
+ coeff_dxz_m1_m1_m2,
+ coeff_dxz_0_m1_m2,
+ coeff_dxz_p1_m1_m2,
+ coeff_dxz_p2_m1_m2,
+ coeff_dxz_m2_0_m2,
+ coeff_dxz_m1_0_m2,
+ coeff_dxz_0_0_m2,
+ coeff_dxz_p1_0_m2,
+ coeff_dxz_p2_0_m2,
+ coeff_dxz_m2_p1_m2,
+ coeff_dxz_m1_p1_m2,
+ coeff_dxz_0_p1_m2,
+ coeff_dxz_p1_p1_m2,
+ coeff_dxz_p2_p1_m2,
+ coeff_dxz_m2_p2_m2,
+ coeff_dxz_m1_p2_m2,
+ coeff_dxz_0_p2_m2,
+ coeff_dxz_p1_p2_m2,
+ coeff_dxz_p2_p2_m2,
+ coeff_dxz_m2_m2_m1,
+ coeff_dxz_m1_m2_m1,
+ coeff_dxz_0_m2_m1,
+ coeff_dxz_p1_m2_m1,
+ coeff_dxz_p2_m2_m1,
+ coeff_dxz_m2_m1_m1,
+ coeff_dxz_m1_m1_m1,
+ coeff_dxz_0_m1_m1,
+ coeff_dxz_p1_m1_m1,
+ coeff_dxz_p2_m1_m1,
+ coeff_dxz_m2_0_m1,
+ coeff_dxz_m1_0_m1,
+ coeff_dxz_0_0_m1,
+ coeff_dxz_p1_0_m1,
+ coeff_dxz_p2_0_m1,
+ coeff_dxz_m2_p1_m1,
+ coeff_dxz_m1_p1_m1,
+ coeff_dxz_0_p1_m1,
+ coeff_dxz_p1_p1_m1,
+ coeff_dxz_p2_p1_m1,
+ coeff_dxz_m2_p2_m1,
+ coeff_dxz_m1_p2_m1,
+ coeff_dxz_0_p2_m1,
+ coeff_dxz_p1_p2_m1,
+ coeff_dxz_p2_p2_m1,
+ coeff_dxz_m2_m2_0,
+ coeff_dxz_m1_m2_0,
+ coeff_dxz_0_m2_0,
+ coeff_dxz_p1_m2_0,
+ coeff_dxz_p2_m2_0,
+ coeff_dxz_m2_m1_0,
+ coeff_dxz_m1_m1_0,
+ coeff_dxz_0_m1_0,
+ coeff_dxz_p1_m1_0,
+ coeff_dxz_p2_m1_0,
+ coeff_dxz_m2_0_0,
+ coeff_dxz_m1_0_0,
+ coeff_dxz_0_0_0,
+ coeff_dxz_p1_0_0,
+ coeff_dxz_p2_0_0,
+ coeff_dxz_m2_p1_0,
+ coeff_dxz_m1_p1_0,
+ coeff_dxz_0_p1_0,
+ coeff_dxz_p1_p1_0,
+ coeff_dxz_p2_p1_0,
+ coeff_dxz_m2_p2_0,
+ coeff_dxz_m1_p2_0,
+ coeff_dxz_0_p2_0,
+ coeff_dxz_p1_p2_0,
+ coeff_dxz_p2_p2_0,
+ coeff_dxz_m2_m2_p1,
+ coeff_dxz_m1_m2_p1,
+ coeff_dxz_0_m2_p1,
+ coeff_dxz_p1_m2_p1,
+ coeff_dxz_p2_m2_p1,
+ coeff_dxz_m2_m1_p1,
+ coeff_dxz_m1_m1_p1,
+ coeff_dxz_0_m1_p1,
+ coeff_dxz_p1_m1_p1,
+ coeff_dxz_p2_m1_p1,
+ coeff_dxz_m2_0_p1,
+ coeff_dxz_m1_0_p1,
+ coeff_dxz_0_0_p1,
+ coeff_dxz_p1_0_p1,
+ coeff_dxz_p2_0_p1,
+ coeff_dxz_m2_p1_p1,
+ coeff_dxz_m1_p1_p1,
+ coeff_dxz_0_p1_p1,
+ coeff_dxz_p1_p1_p1,
+ coeff_dxz_p2_p1_p1,
+ coeff_dxz_m2_p2_p1,
+ coeff_dxz_m1_p2_p1,
+ coeff_dxz_0_p2_p1,
+ coeff_dxz_p1_p2_p1,
+ coeff_dxz_p2_p2_p1,
+ coeff_dxz_m2_m2_p2,
+ coeff_dxz_m1_m2_p2,
+ coeff_dxz_0_m2_p2,
+ coeff_dxz_p1_m2_p2,
+ coeff_dxz_p2_m2_p2,
+ coeff_dxz_m2_m1_p2,
+ coeff_dxz_m1_m1_p2,
+ coeff_dxz_0_m1_p2,
+ coeff_dxz_p1_m1_p2,
+ coeff_dxz_p2_m1_p2,
+ coeff_dxz_m2_0_p2,
+ coeff_dxz_m1_0_p2,
+ coeff_dxz_0_0_p2,
+ coeff_dxz_p1_0_p2,
+ coeff_dxz_p2_0_p2,
+ coeff_dxz_m2_p1_p2,
+ coeff_dxz_m1_p1_p2,
+ coeff_dxz_0_p1_p2,
+ coeff_dxz_p1_p1_p2,
+ coeff_dxz_p2_p1_p2,
+ coeff_dxz_m2_p2_p2,
+ coeff_dxz_m1_p2_p2,
+ coeff_dxz_0_p2_p2,
+ coeff_dxz_p1_p2_p2,
+ coeff_dxz_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxz.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxz.store.c
new file mode 100644
index 0000000..b8e4a5b
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dxz.store.c
@@ -0,0 +1,125 @@
+COEFF(-2,-2,-2) = factor * coeff_dxz_m2_m2_m2;
+COEFF(-1,-2,-2) = factor * coeff_dxz_m1_m2_m2;
+COEFF(0,-2,-2) = factor * coeff_dxz_0_m2_m2;
+COEFF(1,-2,-2) = factor * coeff_dxz_p1_m2_m2;
+COEFF(2,-2,-2) = factor * coeff_dxz_p2_m2_m2;
+COEFF(-2,-1,-2) = factor * coeff_dxz_m2_m1_m2;
+COEFF(-1,-1,-2) = factor * coeff_dxz_m1_m1_m2;
+COEFF(0,-1,-2) = factor * coeff_dxz_0_m1_m2;
+COEFF(1,-1,-2) = factor * coeff_dxz_p1_m1_m2;
+COEFF(2,-1,-2) = factor * coeff_dxz_p2_m1_m2;
+COEFF(-2,0,-2) = factor * coeff_dxz_m2_0_m2;
+COEFF(-1,0,-2) = factor * coeff_dxz_m1_0_m2;
+COEFF(0,0,-2) = factor * coeff_dxz_0_0_m2;
+COEFF(1,0,-2) = factor * coeff_dxz_p1_0_m2;
+COEFF(2,0,-2) = factor * coeff_dxz_p2_0_m2;
+COEFF(-2,1,-2) = factor * coeff_dxz_m2_p1_m2;
+COEFF(-1,1,-2) = factor * coeff_dxz_m1_p1_m2;
+COEFF(0,1,-2) = factor * coeff_dxz_0_p1_m2;
+COEFF(1,1,-2) = factor * coeff_dxz_p1_p1_m2;
+COEFF(2,1,-2) = factor * coeff_dxz_p2_p1_m2;
+COEFF(-2,2,-2) = factor * coeff_dxz_m2_p2_m2;
+COEFF(-1,2,-2) = factor * coeff_dxz_m1_p2_m2;
+COEFF(0,2,-2) = factor * coeff_dxz_0_p2_m2;
+COEFF(1,2,-2) = factor * coeff_dxz_p1_p2_m2;
+COEFF(2,2,-2) = factor * coeff_dxz_p2_p2_m2;
+COEFF(-2,-2,-1) = factor * coeff_dxz_m2_m2_m1;
+COEFF(-1,-2,-1) = factor * coeff_dxz_m1_m2_m1;
+COEFF(0,-2,-1) = factor * coeff_dxz_0_m2_m1;
+COEFF(1,-2,-1) = factor * coeff_dxz_p1_m2_m1;
+COEFF(2,-2,-1) = factor * coeff_dxz_p2_m2_m1;
+COEFF(-2,-1,-1) = factor * coeff_dxz_m2_m1_m1;
+COEFF(-1,-1,-1) = factor * coeff_dxz_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dxz_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dxz_p1_m1_m1;
+COEFF(2,-1,-1) = factor * coeff_dxz_p2_m1_m1;
+COEFF(-2,0,-1) = factor * coeff_dxz_m2_0_m1;
+COEFF(-1,0,-1) = factor * coeff_dxz_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dxz_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dxz_p1_0_m1;
+COEFF(2,0,-1) = factor * coeff_dxz_p2_0_m1;
+COEFF(-2,1,-1) = factor * coeff_dxz_m2_p1_m1;
+COEFF(-1,1,-1) = factor * coeff_dxz_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dxz_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dxz_p1_p1_m1;
+COEFF(2,1,-1) = factor * coeff_dxz_p2_p1_m1;
+COEFF(-2,2,-1) = factor * coeff_dxz_m2_p2_m1;
+COEFF(-1,2,-1) = factor * coeff_dxz_m1_p2_m1;
+COEFF(0,2,-1) = factor * coeff_dxz_0_p2_m1;
+COEFF(1,2,-1) = factor * coeff_dxz_p1_p2_m1;
+COEFF(2,2,-1) = factor * coeff_dxz_p2_p2_m1;
+COEFF(-2,-2,0) = factor * coeff_dxz_m2_m2_0;
+COEFF(-1,-2,0) = factor * coeff_dxz_m1_m2_0;
+COEFF(0,-2,0) = factor * coeff_dxz_0_m2_0;
+COEFF(1,-2,0) = factor * coeff_dxz_p1_m2_0;
+COEFF(2,-2,0) = factor * coeff_dxz_p2_m2_0;
+COEFF(-2,-1,0) = factor * coeff_dxz_m2_m1_0;
+COEFF(-1,-1,0) = factor * coeff_dxz_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dxz_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dxz_p1_m1_0;
+COEFF(2,-1,0) = factor * coeff_dxz_p2_m1_0;
+COEFF(-2,0,0) = factor * coeff_dxz_m2_0_0;
+COEFF(-1,0,0) = factor * coeff_dxz_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dxz_0_0_0;
+COEFF(1,0,0) = factor * coeff_dxz_p1_0_0;
+COEFF(2,0,0) = factor * coeff_dxz_p2_0_0;
+COEFF(-2,1,0) = factor * coeff_dxz_m2_p1_0;
+COEFF(-1,1,0) = factor * coeff_dxz_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dxz_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dxz_p1_p1_0;
+COEFF(2,1,0) = factor * coeff_dxz_p2_p1_0;
+COEFF(-2,2,0) = factor * coeff_dxz_m2_p2_0;
+COEFF(-1,2,0) = factor * coeff_dxz_m1_p2_0;
+COEFF(0,2,0) = factor * coeff_dxz_0_p2_0;
+COEFF(1,2,0) = factor * coeff_dxz_p1_p2_0;
+COEFF(2,2,0) = factor * coeff_dxz_p2_p2_0;
+COEFF(-2,-2,1) = factor * coeff_dxz_m2_m2_p1;
+COEFF(-1,-2,1) = factor * coeff_dxz_m1_m2_p1;
+COEFF(0,-2,1) = factor * coeff_dxz_0_m2_p1;
+COEFF(1,-2,1) = factor * coeff_dxz_p1_m2_p1;
+COEFF(2,-2,1) = factor * coeff_dxz_p2_m2_p1;
+COEFF(-2,-1,1) = factor * coeff_dxz_m2_m1_p1;
+COEFF(-1,-1,1) = factor * coeff_dxz_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dxz_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dxz_p1_m1_p1;
+COEFF(2,-1,1) = factor * coeff_dxz_p2_m1_p1;
+COEFF(-2,0,1) = factor * coeff_dxz_m2_0_p1;
+COEFF(-1,0,1) = factor * coeff_dxz_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dxz_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dxz_p1_0_p1;
+COEFF(2,0,1) = factor * coeff_dxz_p2_0_p1;
+COEFF(-2,1,1) = factor * coeff_dxz_m2_p1_p1;
+COEFF(-1,1,1) = factor * coeff_dxz_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dxz_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dxz_p1_p1_p1;
+COEFF(2,1,1) = factor * coeff_dxz_p2_p1_p1;
+COEFF(-2,2,1) = factor * coeff_dxz_m2_p2_p1;
+COEFF(-1,2,1) = factor * coeff_dxz_m1_p2_p1;
+COEFF(0,2,1) = factor * coeff_dxz_0_p2_p1;
+COEFF(1,2,1) = factor * coeff_dxz_p1_p2_p1;
+COEFF(2,2,1) = factor * coeff_dxz_p2_p2_p1;
+COEFF(-2,-2,2) = factor * coeff_dxz_m2_m2_p2;
+COEFF(-1,-2,2) = factor * coeff_dxz_m1_m2_p2;
+COEFF(0,-2,2) = factor * coeff_dxz_0_m2_p2;
+COEFF(1,-2,2) = factor * coeff_dxz_p1_m2_p2;
+COEFF(2,-2,2) = factor * coeff_dxz_p2_m2_p2;
+COEFF(-2,-1,2) = factor * coeff_dxz_m2_m1_p2;
+COEFF(-1,-1,2) = factor * coeff_dxz_m1_m1_p2;
+COEFF(0,-1,2) = factor * coeff_dxz_0_m1_p2;
+COEFF(1,-1,2) = factor * coeff_dxz_p1_m1_p2;
+COEFF(2,-1,2) = factor * coeff_dxz_p2_m1_p2;
+COEFF(-2,0,2) = factor * coeff_dxz_m2_0_p2;
+COEFF(-1,0,2) = factor * coeff_dxz_m1_0_p2;
+COEFF(0,0,2) = factor * coeff_dxz_0_0_p2;
+COEFF(1,0,2) = factor * coeff_dxz_p1_0_p2;
+COEFF(2,0,2) = factor * coeff_dxz_p2_0_p2;
+COEFF(-2,1,2) = factor * coeff_dxz_m2_p1_p2;
+COEFF(-1,1,2) = factor * coeff_dxz_m1_p1_p2;
+COEFF(0,1,2) = factor * coeff_dxz_0_p1_p2;
+COEFF(1,1,2) = factor * coeff_dxz_p1_p1_p2;
+COEFF(2,1,2) = factor * coeff_dxz_p2_p1_p2;
+COEFF(-2,2,2) = factor * coeff_dxz_m2_p2_p2;
+COEFF(-1,2,2) = factor * coeff_dxz_m1_p2_p2;
+COEFF(0,2,2) = factor * coeff_dxz_0_p2_p2;
+COEFF(1,2,2) = factor * coeff_dxz_p1_p2_p2;
+COEFF(2,2,2) = factor * coeff_dxz_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dy.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dy.dcl.c
new file mode 100644
index 0000000..a26ddf8
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dy.dcl.c
@@ -0,0 +1,125 @@
+fp coeff_dy_m2_m2_m2,
+ coeff_dy_m1_m2_m2,
+ coeff_dy_0_m2_m2,
+ coeff_dy_p1_m2_m2,
+ coeff_dy_p2_m2_m2,
+ coeff_dy_m2_m1_m2,
+ coeff_dy_m1_m1_m2,
+ coeff_dy_0_m1_m2,
+ coeff_dy_p1_m1_m2,
+ coeff_dy_p2_m1_m2,
+ coeff_dy_m2_0_m2,
+ coeff_dy_m1_0_m2,
+ coeff_dy_0_0_m2,
+ coeff_dy_p1_0_m2,
+ coeff_dy_p2_0_m2,
+ coeff_dy_m2_p1_m2,
+ coeff_dy_m1_p1_m2,
+ coeff_dy_0_p1_m2,
+ coeff_dy_p1_p1_m2,
+ coeff_dy_p2_p1_m2,
+ coeff_dy_m2_p2_m2,
+ coeff_dy_m1_p2_m2,
+ coeff_dy_0_p2_m2,
+ coeff_dy_p1_p2_m2,
+ coeff_dy_p2_p2_m2,
+ coeff_dy_m2_m2_m1,
+ coeff_dy_m1_m2_m1,
+ coeff_dy_0_m2_m1,
+ coeff_dy_p1_m2_m1,
+ coeff_dy_p2_m2_m1,
+ coeff_dy_m2_m1_m1,
+ coeff_dy_m1_m1_m1,
+ coeff_dy_0_m1_m1,
+ coeff_dy_p1_m1_m1,
+ coeff_dy_p2_m1_m1,
+ coeff_dy_m2_0_m1,
+ coeff_dy_m1_0_m1,
+ coeff_dy_0_0_m1,
+ coeff_dy_p1_0_m1,
+ coeff_dy_p2_0_m1,
+ coeff_dy_m2_p1_m1,
+ coeff_dy_m1_p1_m1,
+ coeff_dy_0_p1_m1,
+ coeff_dy_p1_p1_m1,
+ coeff_dy_p2_p1_m1,
+ coeff_dy_m2_p2_m1,
+ coeff_dy_m1_p2_m1,
+ coeff_dy_0_p2_m1,
+ coeff_dy_p1_p2_m1,
+ coeff_dy_p2_p2_m1,
+ coeff_dy_m2_m2_0,
+ coeff_dy_m1_m2_0,
+ coeff_dy_0_m2_0,
+ coeff_dy_p1_m2_0,
+ coeff_dy_p2_m2_0,
+ coeff_dy_m2_m1_0,
+ coeff_dy_m1_m1_0,
+ coeff_dy_0_m1_0,
+ coeff_dy_p1_m1_0,
+ coeff_dy_p2_m1_0,
+ coeff_dy_m2_0_0,
+ coeff_dy_m1_0_0,
+ coeff_dy_0_0_0,
+ coeff_dy_p1_0_0,
+ coeff_dy_p2_0_0,
+ coeff_dy_m2_p1_0,
+ coeff_dy_m1_p1_0,
+ coeff_dy_0_p1_0,
+ coeff_dy_p1_p1_0,
+ coeff_dy_p2_p1_0,
+ coeff_dy_m2_p2_0,
+ coeff_dy_m1_p2_0,
+ coeff_dy_0_p2_0,
+ coeff_dy_p1_p2_0,
+ coeff_dy_p2_p2_0,
+ coeff_dy_m2_m2_p1,
+ coeff_dy_m1_m2_p1,
+ coeff_dy_0_m2_p1,
+ coeff_dy_p1_m2_p1,
+ coeff_dy_p2_m2_p1,
+ coeff_dy_m2_m1_p1,
+ coeff_dy_m1_m1_p1,
+ coeff_dy_0_m1_p1,
+ coeff_dy_p1_m1_p1,
+ coeff_dy_p2_m1_p1,
+ coeff_dy_m2_0_p1,
+ coeff_dy_m1_0_p1,
+ coeff_dy_0_0_p1,
+ coeff_dy_p1_0_p1,
+ coeff_dy_p2_0_p1,
+ coeff_dy_m2_p1_p1,
+ coeff_dy_m1_p1_p1,
+ coeff_dy_0_p1_p1,
+ coeff_dy_p1_p1_p1,
+ coeff_dy_p2_p1_p1,
+ coeff_dy_m2_p2_p1,
+ coeff_dy_m1_p2_p1,
+ coeff_dy_0_p2_p1,
+ coeff_dy_p1_p2_p1,
+ coeff_dy_p2_p2_p1,
+ coeff_dy_m2_m2_p2,
+ coeff_dy_m1_m2_p2,
+ coeff_dy_0_m2_p2,
+ coeff_dy_p1_m2_p2,
+ coeff_dy_p2_m2_p2,
+ coeff_dy_m2_m1_p2,
+ coeff_dy_m1_m1_p2,
+ coeff_dy_0_m1_p2,
+ coeff_dy_p1_m1_p2,
+ coeff_dy_p2_m1_p2,
+ coeff_dy_m2_0_p2,
+ coeff_dy_m1_0_p2,
+ coeff_dy_0_0_p2,
+ coeff_dy_p1_0_p2,
+ coeff_dy_p2_0_p2,
+ coeff_dy_m2_p1_p2,
+ coeff_dy_m1_p1_p2,
+ coeff_dy_0_p1_p2,
+ coeff_dy_p1_p1_p2,
+ coeff_dy_p2_p1_p2,
+ coeff_dy_m2_p2_p2,
+ coeff_dy_m1_p2_p2,
+ coeff_dy_0_p2_p2,
+ coeff_dy_p1_p2_p2,
+ coeff_dy_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dy.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dy.store.c
new file mode 100644
index 0000000..596a34a
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dy.store.c
@@ -0,0 +1,125 @@
+COEFF(-2,-2,-2) = factor * coeff_dy_m2_m2_m2;
+COEFF(-1,-2,-2) = factor * coeff_dy_m1_m2_m2;
+COEFF(0,-2,-2) = factor * coeff_dy_0_m2_m2;
+COEFF(1,-2,-2) = factor * coeff_dy_p1_m2_m2;
+COEFF(2,-2,-2) = factor * coeff_dy_p2_m2_m2;
+COEFF(-2,-1,-2) = factor * coeff_dy_m2_m1_m2;
+COEFF(-1,-1,-2) = factor * coeff_dy_m1_m1_m2;
+COEFF(0,-1,-2) = factor * coeff_dy_0_m1_m2;
+COEFF(1,-1,-2) = factor * coeff_dy_p1_m1_m2;
+COEFF(2,-1,-2) = factor * coeff_dy_p2_m1_m2;
+COEFF(-2,0,-2) = factor * coeff_dy_m2_0_m2;
+COEFF(-1,0,-2) = factor * coeff_dy_m1_0_m2;
+COEFF(0,0,-2) = factor * coeff_dy_0_0_m2;
+COEFF(1,0,-2) = factor * coeff_dy_p1_0_m2;
+COEFF(2,0,-2) = factor * coeff_dy_p2_0_m2;
+COEFF(-2,1,-2) = factor * coeff_dy_m2_p1_m2;
+COEFF(-1,1,-2) = factor * coeff_dy_m1_p1_m2;
+COEFF(0,1,-2) = factor * coeff_dy_0_p1_m2;
+COEFF(1,1,-2) = factor * coeff_dy_p1_p1_m2;
+COEFF(2,1,-2) = factor * coeff_dy_p2_p1_m2;
+COEFF(-2,2,-2) = factor * coeff_dy_m2_p2_m2;
+COEFF(-1,2,-2) = factor * coeff_dy_m1_p2_m2;
+COEFF(0,2,-2) = factor * coeff_dy_0_p2_m2;
+COEFF(1,2,-2) = factor * coeff_dy_p1_p2_m2;
+COEFF(2,2,-2) = factor * coeff_dy_p2_p2_m2;
+COEFF(-2,-2,-1) = factor * coeff_dy_m2_m2_m1;
+COEFF(-1,-2,-1) = factor * coeff_dy_m1_m2_m1;
+COEFF(0,-2,-1) = factor * coeff_dy_0_m2_m1;
+COEFF(1,-2,-1) = factor * coeff_dy_p1_m2_m1;
+COEFF(2,-2,-1) = factor * coeff_dy_p2_m2_m1;
+COEFF(-2,-1,-1) = factor * coeff_dy_m2_m1_m1;
+COEFF(-1,-1,-1) = factor * coeff_dy_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dy_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dy_p1_m1_m1;
+COEFF(2,-1,-1) = factor * coeff_dy_p2_m1_m1;
+COEFF(-2,0,-1) = factor * coeff_dy_m2_0_m1;
+COEFF(-1,0,-1) = factor * coeff_dy_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dy_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dy_p1_0_m1;
+COEFF(2,0,-1) = factor * coeff_dy_p2_0_m1;
+COEFF(-2,1,-1) = factor * coeff_dy_m2_p1_m1;
+COEFF(-1,1,-1) = factor * coeff_dy_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dy_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dy_p1_p1_m1;
+COEFF(2,1,-1) = factor * coeff_dy_p2_p1_m1;
+COEFF(-2,2,-1) = factor * coeff_dy_m2_p2_m1;
+COEFF(-1,2,-1) = factor * coeff_dy_m1_p2_m1;
+COEFF(0,2,-1) = factor * coeff_dy_0_p2_m1;
+COEFF(1,2,-1) = factor * coeff_dy_p1_p2_m1;
+COEFF(2,2,-1) = factor * coeff_dy_p2_p2_m1;
+COEFF(-2,-2,0) = factor * coeff_dy_m2_m2_0;
+COEFF(-1,-2,0) = factor * coeff_dy_m1_m2_0;
+COEFF(0,-2,0) = factor * coeff_dy_0_m2_0;
+COEFF(1,-2,0) = factor * coeff_dy_p1_m2_0;
+COEFF(2,-2,0) = factor * coeff_dy_p2_m2_0;
+COEFF(-2,-1,0) = factor * coeff_dy_m2_m1_0;
+COEFF(-1,-1,0) = factor * coeff_dy_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dy_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dy_p1_m1_0;
+COEFF(2,-1,0) = factor * coeff_dy_p2_m1_0;
+COEFF(-2,0,0) = factor * coeff_dy_m2_0_0;
+COEFF(-1,0,0) = factor * coeff_dy_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dy_0_0_0;
+COEFF(1,0,0) = factor * coeff_dy_p1_0_0;
+COEFF(2,0,0) = factor * coeff_dy_p2_0_0;
+COEFF(-2,1,0) = factor * coeff_dy_m2_p1_0;
+COEFF(-1,1,0) = factor * coeff_dy_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dy_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dy_p1_p1_0;
+COEFF(2,1,0) = factor * coeff_dy_p2_p1_0;
+COEFF(-2,2,0) = factor * coeff_dy_m2_p2_0;
+COEFF(-1,2,0) = factor * coeff_dy_m1_p2_0;
+COEFF(0,2,0) = factor * coeff_dy_0_p2_0;
+COEFF(1,2,0) = factor * coeff_dy_p1_p2_0;
+COEFF(2,2,0) = factor * coeff_dy_p2_p2_0;
+COEFF(-2,-2,1) = factor * coeff_dy_m2_m2_p1;
+COEFF(-1,-2,1) = factor * coeff_dy_m1_m2_p1;
+COEFF(0,-2,1) = factor * coeff_dy_0_m2_p1;
+COEFF(1,-2,1) = factor * coeff_dy_p1_m2_p1;
+COEFF(2,-2,1) = factor * coeff_dy_p2_m2_p1;
+COEFF(-2,-1,1) = factor * coeff_dy_m2_m1_p1;
+COEFF(-1,-1,1) = factor * coeff_dy_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dy_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dy_p1_m1_p1;
+COEFF(2,-1,1) = factor * coeff_dy_p2_m1_p1;
+COEFF(-2,0,1) = factor * coeff_dy_m2_0_p1;
+COEFF(-1,0,1) = factor * coeff_dy_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dy_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dy_p1_0_p1;
+COEFF(2,0,1) = factor * coeff_dy_p2_0_p1;
+COEFF(-2,1,1) = factor * coeff_dy_m2_p1_p1;
+COEFF(-1,1,1) = factor * coeff_dy_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dy_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dy_p1_p1_p1;
+COEFF(2,1,1) = factor * coeff_dy_p2_p1_p1;
+COEFF(-2,2,1) = factor * coeff_dy_m2_p2_p1;
+COEFF(-1,2,1) = factor * coeff_dy_m1_p2_p1;
+COEFF(0,2,1) = factor * coeff_dy_0_p2_p1;
+COEFF(1,2,1) = factor * coeff_dy_p1_p2_p1;
+COEFF(2,2,1) = factor * coeff_dy_p2_p2_p1;
+COEFF(-2,-2,2) = factor * coeff_dy_m2_m2_p2;
+COEFF(-1,-2,2) = factor * coeff_dy_m1_m2_p2;
+COEFF(0,-2,2) = factor * coeff_dy_0_m2_p2;
+COEFF(1,-2,2) = factor * coeff_dy_p1_m2_p2;
+COEFF(2,-2,2) = factor * coeff_dy_p2_m2_p2;
+COEFF(-2,-1,2) = factor * coeff_dy_m2_m1_p2;
+COEFF(-1,-1,2) = factor * coeff_dy_m1_m1_p2;
+COEFF(0,-1,2) = factor * coeff_dy_0_m1_p2;
+COEFF(1,-1,2) = factor * coeff_dy_p1_m1_p2;
+COEFF(2,-1,2) = factor * coeff_dy_p2_m1_p2;
+COEFF(-2,0,2) = factor * coeff_dy_m2_0_p2;
+COEFF(-1,0,2) = factor * coeff_dy_m1_0_p2;
+COEFF(0,0,2) = factor * coeff_dy_0_0_p2;
+COEFF(1,0,2) = factor * coeff_dy_p1_0_p2;
+COEFF(2,0,2) = factor * coeff_dy_p2_0_p2;
+COEFF(-2,1,2) = factor * coeff_dy_m2_p1_p2;
+COEFF(-1,1,2) = factor * coeff_dy_m1_p1_p2;
+COEFF(0,1,2) = factor * coeff_dy_0_p1_p2;
+COEFF(1,1,2) = factor * coeff_dy_p1_p1_p2;
+COEFF(2,1,2) = factor * coeff_dy_p2_p1_p2;
+COEFF(-2,2,2) = factor * coeff_dy_m2_p2_p2;
+COEFF(-1,2,2) = factor * coeff_dy_m1_p2_p2;
+COEFF(0,2,2) = factor * coeff_dy_0_p2_p2;
+COEFF(1,2,2) = factor * coeff_dy_p1_p2_p2;
+COEFF(2,2,2) = factor * coeff_dy_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dyy.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dyy.dcl.c
new file mode 100644
index 0000000..a78af2b
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dyy.dcl.c
@@ -0,0 +1,125 @@
+fp coeff_dyy_m2_m2_m2,
+ coeff_dyy_m1_m2_m2,
+ coeff_dyy_0_m2_m2,
+ coeff_dyy_p1_m2_m2,
+ coeff_dyy_p2_m2_m2,
+ coeff_dyy_m2_m1_m2,
+ coeff_dyy_m1_m1_m2,
+ coeff_dyy_0_m1_m2,
+ coeff_dyy_p1_m1_m2,
+ coeff_dyy_p2_m1_m2,
+ coeff_dyy_m2_0_m2,
+ coeff_dyy_m1_0_m2,
+ coeff_dyy_0_0_m2,
+ coeff_dyy_p1_0_m2,
+ coeff_dyy_p2_0_m2,
+ coeff_dyy_m2_p1_m2,
+ coeff_dyy_m1_p1_m2,
+ coeff_dyy_0_p1_m2,
+ coeff_dyy_p1_p1_m2,
+ coeff_dyy_p2_p1_m2,
+ coeff_dyy_m2_p2_m2,
+ coeff_dyy_m1_p2_m2,
+ coeff_dyy_0_p2_m2,
+ coeff_dyy_p1_p2_m2,
+ coeff_dyy_p2_p2_m2,
+ coeff_dyy_m2_m2_m1,
+ coeff_dyy_m1_m2_m1,
+ coeff_dyy_0_m2_m1,
+ coeff_dyy_p1_m2_m1,
+ coeff_dyy_p2_m2_m1,
+ coeff_dyy_m2_m1_m1,
+ coeff_dyy_m1_m1_m1,
+ coeff_dyy_0_m1_m1,
+ coeff_dyy_p1_m1_m1,
+ coeff_dyy_p2_m1_m1,
+ coeff_dyy_m2_0_m1,
+ coeff_dyy_m1_0_m1,
+ coeff_dyy_0_0_m1,
+ coeff_dyy_p1_0_m1,
+ coeff_dyy_p2_0_m1,
+ coeff_dyy_m2_p1_m1,
+ coeff_dyy_m1_p1_m1,
+ coeff_dyy_0_p1_m1,
+ coeff_dyy_p1_p1_m1,
+ coeff_dyy_p2_p1_m1,
+ coeff_dyy_m2_p2_m1,
+ coeff_dyy_m1_p2_m1,
+ coeff_dyy_0_p2_m1,
+ coeff_dyy_p1_p2_m1,
+ coeff_dyy_p2_p2_m1,
+ coeff_dyy_m2_m2_0,
+ coeff_dyy_m1_m2_0,
+ coeff_dyy_0_m2_0,
+ coeff_dyy_p1_m2_0,
+ coeff_dyy_p2_m2_0,
+ coeff_dyy_m2_m1_0,
+ coeff_dyy_m1_m1_0,
+ coeff_dyy_0_m1_0,
+ coeff_dyy_p1_m1_0,
+ coeff_dyy_p2_m1_0,
+ coeff_dyy_m2_0_0,
+ coeff_dyy_m1_0_0,
+ coeff_dyy_0_0_0,
+ coeff_dyy_p1_0_0,
+ coeff_dyy_p2_0_0,
+ coeff_dyy_m2_p1_0,
+ coeff_dyy_m1_p1_0,
+ coeff_dyy_0_p1_0,
+ coeff_dyy_p1_p1_0,
+ coeff_dyy_p2_p1_0,
+ coeff_dyy_m2_p2_0,
+ coeff_dyy_m1_p2_0,
+ coeff_dyy_0_p2_0,
+ coeff_dyy_p1_p2_0,
+ coeff_dyy_p2_p2_0,
+ coeff_dyy_m2_m2_p1,
+ coeff_dyy_m1_m2_p1,
+ coeff_dyy_0_m2_p1,
+ coeff_dyy_p1_m2_p1,
+ coeff_dyy_p2_m2_p1,
+ coeff_dyy_m2_m1_p1,
+ coeff_dyy_m1_m1_p1,
+ coeff_dyy_0_m1_p1,
+ coeff_dyy_p1_m1_p1,
+ coeff_dyy_p2_m1_p1,
+ coeff_dyy_m2_0_p1,
+ coeff_dyy_m1_0_p1,
+ coeff_dyy_0_0_p1,
+ coeff_dyy_p1_0_p1,
+ coeff_dyy_p2_0_p1,
+ coeff_dyy_m2_p1_p1,
+ coeff_dyy_m1_p1_p1,
+ coeff_dyy_0_p1_p1,
+ coeff_dyy_p1_p1_p1,
+ coeff_dyy_p2_p1_p1,
+ coeff_dyy_m2_p2_p1,
+ coeff_dyy_m1_p2_p1,
+ coeff_dyy_0_p2_p1,
+ coeff_dyy_p1_p2_p1,
+ coeff_dyy_p2_p2_p1,
+ coeff_dyy_m2_m2_p2,
+ coeff_dyy_m1_m2_p2,
+ coeff_dyy_0_m2_p2,
+ coeff_dyy_p1_m2_p2,
+ coeff_dyy_p2_m2_p2,
+ coeff_dyy_m2_m1_p2,
+ coeff_dyy_m1_m1_p2,
+ coeff_dyy_0_m1_p2,
+ coeff_dyy_p1_m1_p2,
+ coeff_dyy_p2_m1_p2,
+ coeff_dyy_m2_0_p2,
+ coeff_dyy_m1_0_p2,
+ coeff_dyy_0_0_p2,
+ coeff_dyy_p1_0_p2,
+ coeff_dyy_p2_0_p2,
+ coeff_dyy_m2_p1_p2,
+ coeff_dyy_m1_p1_p2,
+ coeff_dyy_0_p1_p2,
+ coeff_dyy_p1_p1_p2,
+ coeff_dyy_p2_p1_p2,
+ coeff_dyy_m2_p2_p2,
+ coeff_dyy_m1_p2_p2,
+ coeff_dyy_0_p2_p2,
+ coeff_dyy_p1_p2_p2,
+ coeff_dyy_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dyy.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dyy.store.c
new file mode 100644
index 0000000..3235bb4
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dyy.store.c
@@ -0,0 +1,125 @@
+COEFF(-2,-2,-2) = factor * coeff_dyy_m2_m2_m2;
+COEFF(-1,-2,-2) = factor * coeff_dyy_m1_m2_m2;
+COEFF(0,-2,-2) = factor * coeff_dyy_0_m2_m2;
+COEFF(1,-2,-2) = factor * coeff_dyy_p1_m2_m2;
+COEFF(2,-2,-2) = factor * coeff_dyy_p2_m2_m2;
+COEFF(-2,-1,-2) = factor * coeff_dyy_m2_m1_m2;
+COEFF(-1,-1,-2) = factor * coeff_dyy_m1_m1_m2;
+COEFF(0,-1,-2) = factor * coeff_dyy_0_m1_m2;
+COEFF(1,-1,-2) = factor * coeff_dyy_p1_m1_m2;
+COEFF(2,-1,-2) = factor * coeff_dyy_p2_m1_m2;
+COEFF(-2,0,-2) = factor * coeff_dyy_m2_0_m2;
+COEFF(-1,0,-2) = factor * coeff_dyy_m1_0_m2;
+COEFF(0,0,-2) = factor * coeff_dyy_0_0_m2;
+COEFF(1,0,-2) = factor * coeff_dyy_p1_0_m2;
+COEFF(2,0,-2) = factor * coeff_dyy_p2_0_m2;
+COEFF(-2,1,-2) = factor * coeff_dyy_m2_p1_m2;
+COEFF(-1,1,-2) = factor * coeff_dyy_m1_p1_m2;
+COEFF(0,1,-2) = factor * coeff_dyy_0_p1_m2;
+COEFF(1,1,-2) = factor * coeff_dyy_p1_p1_m2;
+COEFF(2,1,-2) = factor * coeff_dyy_p2_p1_m2;
+COEFF(-2,2,-2) = factor * coeff_dyy_m2_p2_m2;
+COEFF(-1,2,-2) = factor * coeff_dyy_m1_p2_m2;
+COEFF(0,2,-2) = factor * coeff_dyy_0_p2_m2;
+COEFF(1,2,-2) = factor * coeff_dyy_p1_p2_m2;
+COEFF(2,2,-2) = factor * coeff_dyy_p2_p2_m2;
+COEFF(-2,-2,-1) = factor * coeff_dyy_m2_m2_m1;
+COEFF(-1,-2,-1) = factor * coeff_dyy_m1_m2_m1;
+COEFF(0,-2,-1) = factor * coeff_dyy_0_m2_m1;
+COEFF(1,-2,-1) = factor * coeff_dyy_p1_m2_m1;
+COEFF(2,-2,-1) = factor * coeff_dyy_p2_m2_m1;
+COEFF(-2,-1,-1) = factor * coeff_dyy_m2_m1_m1;
+COEFF(-1,-1,-1) = factor * coeff_dyy_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dyy_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dyy_p1_m1_m1;
+COEFF(2,-1,-1) = factor * coeff_dyy_p2_m1_m1;
+COEFF(-2,0,-1) = factor * coeff_dyy_m2_0_m1;
+COEFF(-1,0,-1) = factor * coeff_dyy_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dyy_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dyy_p1_0_m1;
+COEFF(2,0,-1) = factor * coeff_dyy_p2_0_m1;
+COEFF(-2,1,-1) = factor * coeff_dyy_m2_p1_m1;
+COEFF(-1,1,-1) = factor * coeff_dyy_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dyy_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dyy_p1_p1_m1;
+COEFF(2,1,-1) = factor * coeff_dyy_p2_p1_m1;
+COEFF(-2,2,-1) = factor * coeff_dyy_m2_p2_m1;
+COEFF(-1,2,-1) = factor * coeff_dyy_m1_p2_m1;
+COEFF(0,2,-1) = factor * coeff_dyy_0_p2_m1;
+COEFF(1,2,-1) = factor * coeff_dyy_p1_p2_m1;
+COEFF(2,2,-1) = factor * coeff_dyy_p2_p2_m1;
+COEFF(-2,-2,0) = factor * coeff_dyy_m2_m2_0;
+COEFF(-1,-2,0) = factor * coeff_dyy_m1_m2_0;
+COEFF(0,-2,0) = factor * coeff_dyy_0_m2_0;
+COEFF(1,-2,0) = factor * coeff_dyy_p1_m2_0;
+COEFF(2,-2,0) = factor * coeff_dyy_p2_m2_0;
+COEFF(-2,-1,0) = factor * coeff_dyy_m2_m1_0;
+COEFF(-1,-1,0) = factor * coeff_dyy_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dyy_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dyy_p1_m1_0;
+COEFF(2,-1,0) = factor * coeff_dyy_p2_m1_0;
+COEFF(-2,0,0) = factor * coeff_dyy_m2_0_0;
+COEFF(-1,0,0) = factor * coeff_dyy_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dyy_0_0_0;
+COEFF(1,0,0) = factor * coeff_dyy_p1_0_0;
+COEFF(2,0,0) = factor * coeff_dyy_p2_0_0;
+COEFF(-2,1,0) = factor * coeff_dyy_m2_p1_0;
+COEFF(-1,1,0) = factor * coeff_dyy_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dyy_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dyy_p1_p1_0;
+COEFF(2,1,0) = factor * coeff_dyy_p2_p1_0;
+COEFF(-2,2,0) = factor * coeff_dyy_m2_p2_0;
+COEFF(-1,2,0) = factor * coeff_dyy_m1_p2_0;
+COEFF(0,2,0) = factor * coeff_dyy_0_p2_0;
+COEFF(1,2,0) = factor * coeff_dyy_p1_p2_0;
+COEFF(2,2,0) = factor * coeff_dyy_p2_p2_0;
+COEFF(-2,-2,1) = factor * coeff_dyy_m2_m2_p1;
+COEFF(-1,-2,1) = factor * coeff_dyy_m1_m2_p1;
+COEFF(0,-2,1) = factor * coeff_dyy_0_m2_p1;
+COEFF(1,-2,1) = factor * coeff_dyy_p1_m2_p1;
+COEFF(2,-2,1) = factor * coeff_dyy_p2_m2_p1;
+COEFF(-2,-1,1) = factor * coeff_dyy_m2_m1_p1;
+COEFF(-1,-1,1) = factor * coeff_dyy_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dyy_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dyy_p1_m1_p1;
+COEFF(2,-1,1) = factor * coeff_dyy_p2_m1_p1;
+COEFF(-2,0,1) = factor * coeff_dyy_m2_0_p1;
+COEFF(-1,0,1) = factor * coeff_dyy_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dyy_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dyy_p1_0_p1;
+COEFF(2,0,1) = factor * coeff_dyy_p2_0_p1;
+COEFF(-2,1,1) = factor * coeff_dyy_m2_p1_p1;
+COEFF(-1,1,1) = factor * coeff_dyy_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dyy_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dyy_p1_p1_p1;
+COEFF(2,1,1) = factor * coeff_dyy_p2_p1_p1;
+COEFF(-2,2,1) = factor * coeff_dyy_m2_p2_p1;
+COEFF(-1,2,1) = factor * coeff_dyy_m1_p2_p1;
+COEFF(0,2,1) = factor * coeff_dyy_0_p2_p1;
+COEFF(1,2,1) = factor * coeff_dyy_p1_p2_p1;
+COEFF(2,2,1) = factor * coeff_dyy_p2_p2_p1;
+COEFF(-2,-2,2) = factor * coeff_dyy_m2_m2_p2;
+COEFF(-1,-2,2) = factor * coeff_dyy_m1_m2_p2;
+COEFF(0,-2,2) = factor * coeff_dyy_0_m2_p2;
+COEFF(1,-2,2) = factor * coeff_dyy_p1_m2_p2;
+COEFF(2,-2,2) = factor * coeff_dyy_p2_m2_p2;
+COEFF(-2,-1,2) = factor * coeff_dyy_m2_m1_p2;
+COEFF(-1,-1,2) = factor * coeff_dyy_m1_m1_p2;
+COEFF(0,-1,2) = factor * coeff_dyy_0_m1_p2;
+COEFF(1,-1,2) = factor * coeff_dyy_p1_m1_p2;
+COEFF(2,-1,2) = factor * coeff_dyy_p2_m1_p2;
+COEFF(-2,0,2) = factor * coeff_dyy_m2_0_p2;
+COEFF(-1,0,2) = factor * coeff_dyy_m1_0_p2;
+COEFF(0,0,2) = factor * coeff_dyy_0_0_p2;
+COEFF(1,0,2) = factor * coeff_dyy_p1_0_p2;
+COEFF(2,0,2) = factor * coeff_dyy_p2_0_p2;
+COEFF(-2,1,2) = factor * coeff_dyy_m2_p1_p2;
+COEFF(-1,1,2) = factor * coeff_dyy_m1_p1_p2;
+COEFF(0,1,2) = factor * coeff_dyy_0_p1_p2;
+COEFF(1,1,2) = factor * coeff_dyy_p1_p1_p2;
+COEFF(2,1,2) = factor * coeff_dyy_p2_p1_p2;
+COEFF(-2,2,2) = factor * coeff_dyy_m2_p2_p2;
+COEFF(-1,2,2) = factor * coeff_dyy_m1_p2_p2;
+COEFF(0,2,2) = factor * coeff_dyy_0_p2_p2;
+COEFF(1,2,2) = factor * coeff_dyy_p1_p2_p2;
+COEFF(2,2,2) = factor * coeff_dyy_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dyz.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dyz.dcl.c
new file mode 100644
index 0000000..f932782
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dyz.dcl.c
@@ -0,0 +1,125 @@
+fp coeff_dyz_m2_m2_m2,
+ coeff_dyz_m1_m2_m2,
+ coeff_dyz_0_m2_m2,
+ coeff_dyz_p1_m2_m2,
+ coeff_dyz_p2_m2_m2,
+ coeff_dyz_m2_m1_m2,
+ coeff_dyz_m1_m1_m2,
+ coeff_dyz_0_m1_m2,
+ coeff_dyz_p1_m1_m2,
+ coeff_dyz_p2_m1_m2,
+ coeff_dyz_m2_0_m2,
+ coeff_dyz_m1_0_m2,
+ coeff_dyz_0_0_m2,
+ coeff_dyz_p1_0_m2,
+ coeff_dyz_p2_0_m2,
+ coeff_dyz_m2_p1_m2,
+ coeff_dyz_m1_p1_m2,
+ coeff_dyz_0_p1_m2,
+ coeff_dyz_p1_p1_m2,
+ coeff_dyz_p2_p1_m2,
+ coeff_dyz_m2_p2_m2,
+ coeff_dyz_m1_p2_m2,
+ coeff_dyz_0_p2_m2,
+ coeff_dyz_p1_p2_m2,
+ coeff_dyz_p2_p2_m2,
+ coeff_dyz_m2_m2_m1,
+ coeff_dyz_m1_m2_m1,
+ coeff_dyz_0_m2_m1,
+ coeff_dyz_p1_m2_m1,
+ coeff_dyz_p2_m2_m1,
+ coeff_dyz_m2_m1_m1,
+ coeff_dyz_m1_m1_m1,
+ coeff_dyz_0_m1_m1,
+ coeff_dyz_p1_m1_m1,
+ coeff_dyz_p2_m1_m1,
+ coeff_dyz_m2_0_m1,
+ coeff_dyz_m1_0_m1,
+ coeff_dyz_0_0_m1,
+ coeff_dyz_p1_0_m1,
+ coeff_dyz_p2_0_m1,
+ coeff_dyz_m2_p1_m1,
+ coeff_dyz_m1_p1_m1,
+ coeff_dyz_0_p1_m1,
+ coeff_dyz_p1_p1_m1,
+ coeff_dyz_p2_p1_m1,
+ coeff_dyz_m2_p2_m1,
+ coeff_dyz_m1_p2_m1,
+ coeff_dyz_0_p2_m1,
+ coeff_dyz_p1_p2_m1,
+ coeff_dyz_p2_p2_m1,
+ coeff_dyz_m2_m2_0,
+ coeff_dyz_m1_m2_0,
+ coeff_dyz_0_m2_0,
+ coeff_dyz_p1_m2_0,
+ coeff_dyz_p2_m2_0,
+ coeff_dyz_m2_m1_0,
+ coeff_dyz_m1_m1_0,
+ coeff_dyz_0_m1_0,
+ coeff_dyz_p1_m1_0,
+ coeff_dyz_p2_m1_0,
+ coeff_dyz_m2_0_0,
+ coeff_dyz_m1_0_0,
+ coeff_dyz_0_0_0,
+ coeff_dyz_p1_0_0,
+ coeff_dyz_p2_0_0,
+ coeff_dyz_m2_p1_0,
+ coeff_dyz_m1_p1_0,
+ coeff_dyz_0_p1_0,
+ coeff_dyz_p1_p1_0,
+ coeff_dyz_p2_p1_0,
+ coeff_dyz_m2_p2_0,
+ coeff_dyz_m1_p2_0,
+ coeff_dyz_0_p2_0,
+ coeff_dyz_p1_p2_0,
+ coeff_dyz_p2_p2_0,
+ coeff_dyz_m2_m2_p1,
+ coeff_dyz_m1_m2_p1,
+ coeff_dyz_0_m2_p1,
+ coeff_dyz_p1_m2_p1,
+ coeff_dyz_p2_m2_p1,
+ coeff_dyz_m2_m1_p1,
+ coeff_dyz_m1_m1_p1,
+ coeff_dyz_0_m1_p1,
+ coeff_dyz_p1_m1_p1,
+ coeff_dyz_p2_m1_p1,
+ coeff_dyz_m2_0_p1,
+ coeff_dyz_m1_0_p1,
+ coeff_dyz_0_0_p1,
+ coeff_dyz_p1_0_p1,
+ coeff_dyz_p2_0_p1,
+ coeff_dyz_m2_p1_p1,
+ coeff_dyz_m1_p1_p1,
+ coeff_dyz_0_p1_p1,
+ coeff_dyz_p1_p1_p1,
+ coeff_dyz_p2_p1_p1,
+ coeff_dyz_m2_p2_p1,
+ coeff_dyz_m1_p2_p1,
+ coeff_dyz_0_p2_p1,
+ coeff_dyz_p1_p2_p1,
+ coeff_dyz_p2_p2_p1,
+ coeff_dyz_m2_m2_p2,
+ coeff_dyz_m1_m2_p2,
+ coeff_dyz_0_m2_p2,
+ coeff_dyz_p1_m2_p2,
+ coeff_dyz_p2_m2_p2,
+ coeff_dyz_m2_m1_p2,
+ coeff_dyz_m1_m1_p2,
+ coeff_dyz_0_m1_p2,
+ coeff_dyz_p1_m1_p2,
+ coeff_dyz_p2_m1_p2,
+ coeff_dyz_m2_0_p2,
+ coeff_dyz_m1_0_p2,
+ coeff_dyz_0_0_p2,
+ coeff_dyz_p1_0_p2,
+ coeff_dyz_p2_0_p2,
+ coeff_dyz_m2_p1_p2,
+ coeff_dyz_m1_p1_p2,
+ coeff_dyz_0_p1_p2,
+ coeff_dyz_p1_p1_p2,
+ coeff_dyz_p2_p1_p2,
+ coeff_dyz_m2_p2_p2,
+ coeff_dyz_m1_p2_p2,
+ coeff_dyz_0_p2_p2,
+ coeff_dyz_p1_p2_p2,
+ coeff_dyz_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dyz.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dyz.store.c
new file mode 100644
index 0000000..f764141
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dyz.store.c
@@ -0,0 +1,125 @@
+COEFF(-2,-2,-2) = factor * coeff_dyz_m2_m2_m2;
+COEFF(-1,-2,-2) = factor * coeff_dyz_m1_m2_m2;
+COEFF(0,-2,-2) = factor * coeff_dyz_0_m2_m2;
+COEFF(1,-2,-2) = factor * coeff_dyz_p1_m2_m2;
+COEFF(2,-2,-2) = factor * coeff_dyz_p2_m2_m2;
+COEFF(-2,-1,-2) = factor * coeff_dyz_m2_m1_m2;
+COEFF(-1,-1,-2) = factor * coeff_dyz_m1_m1_m2;
+COEFF(0,-1,-2) = factor * coeff_dyz_0_m1_m2;
+COEFF(1,-1,-2) = factor * coeff_dyz_p1_m1_m2;
+COEFF(2,-1,-2) = factor * coeff_dyz_p2_m1_m2;
+COEFF(-2,0,-2) = factor * coeff_dyz_m2_0_m2;
+COEFF(-1,0,-2) = factor * coeff_dyz_m1_0_m2;
+COEFF(0,0,-2) = factor * coeff_dyz_0_0_m2;
+COEFF(1,0,-2) = factor * coeff_dyz_p1_0_m2;
+COEFF(2,0,-2) = factor * coeff_dyz_p2_0_m2;
+COEFF(-2,1,-2) = factor * coeff_dyz_m2_p1_m2;
+COEFF(-1,1,-2) = factor * coeff_dyz_m1_p1_m2;
+COEFF(0,1,-2) = factor * coeff_dyz_0_p1_m2;
+COEFF(1,1,-2) = factor * coeff_dyz_p1_p1_m2;
+COEFF(2,1,-2) = factor * coeff_dyz_p2_p1_m2;
+COEFF(-2,2,-2) = factor * coeff_dyz_m2_p2_m2;
+COEFF(-1,2,-2) = factor * coeff_dyz_m1_p2_m2;
+COEFF(0,2,-2) = factor * coeff_dyz_0_p2_m2;
+COEFF(1,2,-2) = factor * coeff_dyz_p1_p2_m2;
+COEFF(2,2,-2) = factor * coeff_dyz_p2_p2_m2;
+COEFF(-2,-2,-1) = factor * coeff_dyz_m2_m2_m1;
+COEFF(-1,-2,-1) = factor * coeff_dyz_m1_m2_m1;
+COEFF(0,-2,-1) = factor * coeff_dyz_0_m2_m1;
+COEFF(1,-2,-1) = factor * coeff_dyz_p1_m2_m1;
+COEFF(2,-2,-1) = factor * coeff_dyz_p2_m2_m1;
+COEFF(-2,-1,-1) = factor * coeff_dyz_m2_m1_m1;
+COEFF(-1,-1,-1) = factor * coeff_dyz_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dyz_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dyz_p1_m1_m1;
+COEFF(2,-1,-1) = factor * coeff_dyz_p2_m1_m1;
+COEFF(-2,0,-1) = factor * coeff_dyz_m2_0_m1;
+COEFF(-1,0,-1) = factor * coeff_dyz_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dyz_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dyz_p1_0_m1;
+COEFF(2,0,-1) = factor * coeff_dyz_p2_0_m1;
+COEFF(-2,1,-1) = factor * coeff_dyz_m2_p1_m1;
+COEFF(-1,1,-1) = factor * coeff_dyz_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dyz_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dyz_p1_p1_m1;
+COEFF(2,1,-1) = factor * coeff_dyz_p2_p1_m1;
+COEFF(-2,2,-1) = factor * coeff_dyz_m2_p2_m1;
+COEFF(-1,2,-1) = factor * coeff_dyz_m1_p2_m1;
+COEFF(0,2,-1) = factor * coeff_dyz_0_p2_m1;
+COEFF(1,2,-1) = factor * coeff_dyz_p1_p2_m1;
+COEFF(2,2,-1) = factor * coeff_dyz_p2_p2_m1;
+COEFF(-2,-2,0) = factor * coeff_dyz_m2_m2_0;
+COEFF(-1,-2,0) = factor * coeff_dyz_m1_m2_0;
+COEFF(0,-2,0) = factor * coeff_dyz_0_m2_0;
+COEFF(1,-2,0) = factor * coeff_dyz_p1_m2_0;
+COEFF(2,-2,0) = factor * coeff_dyz_p2_m2_0;
+COEFF(-2,-1,0) = factor * coeff_dyz_m2_m1_0;
+COEFF(-1,-1,0) = factor * coeff_dyz_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dyz_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dyz_p1_m1_0;
+COEFF(2,-1,0) = factor * coeff_dyz_p2_m1_0;
+COEFF(-2,0,0) = factor * coeff_dyz_m2_0_0;
+COEFF(-1,0,0) = factor * coeff_dyz_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dyz_0_0_0;
+COEFF(1,0,0) = factor * coeff_dyz_p1_0_0;
+COEFF(2,0,0) = factor * coeff_dyz_p2_0_0;
+COEFF(-2,1,0) = factor * coeff_dyz_m2_p1_0;
+COEFF(-1,1,0) = factor * coeff_dyz_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dyz_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dyz_p1_p1_0;
+COEFF(2,1,0) = factor * coeff_dyz_p2_p1_0;
+COEFF(-2,2,0) = factor * coeff_dyz_m2_p2_0;
+COEFF(-1,2,0) = factor * coeff_dyz_m1_p2_0;
+COEFF(0,2,0) = factor * coeff_dyz_0_p2_0;
+COEFF(1,2,0) = factor * coeff_dyz_p1_p2_0;
+COEFF(2,2,0) = factor * coeff_dyz_p2_p2_0;
+COEFF(-2,-2,1) = factor * coeff_dyz_m2_m2_p1;
+COEFF(-1,-2,1) = factor * coeff_dyz_m1_m2_p1;
+COEFF(0,-2,1) = factor * coeff_dyz_0_m2_p1;
+COEFF(1,-2,1) = factor * coeff_dyz_p1_m2_p1;
+COEFF(2,-2,1) = factor * coeff_dyz_p2_m2_p1;
+COEFF(-2,-1,1) = factor * coeff_dyz_m2_m1_p1;
+COEFF(-1,-1,1) = factor * coeff_dyz_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dyz_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dyz_p1_m1_p1;
+COEFF(2,-1,1) = factor * coeff_dyz_p2_m1_p1;
+COEFF(-2,0,1) = factor * coeff_dyz_m2_0_p1;
+COEFF(-1,0,1) = factor * coeff_dyz_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dyz_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dyz_p1_0_p1;
+COEFF(2,0,1) = factor * coeff_dyz_p2_0_p1;
+COEFF(-2,1,1) = factor * coeff_dyz_m2_p1_p1;
+COEFF(-1,1,1) = factor * coeff_dyz_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dyz_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dyz_p1_p1_p1;
+COEFF(2,1,1) = factor * coeff_dyz_p2_p1_p1;
+COEFF(-2,2,1) = factor * coeff_dyz_m2_p2_p1;
+COEFF(-1,2,1) = factor * coeff_dyz_m1_p2_p1;
+COEFF(0,2,1) = factor * coeff_dyz_0_p2_p1;
+COEFF(1,2,1) = factor * coeff_dyz_p1_p2_p1;
+COEFF(2,2,1) = factor * coeff_dyz_p2_p2_p1;
+COEFF(-2,-2,2) = factor * coeff_dyz_m2_m2_p2;
+COEFF(-1,-2,2) = factor * coeff_dyz_m1_m2_p2;
+COEFF(0,-2,2) = factor * coeff_dyz_0_m2_p2;
+COEFF(1,-2,2) = factor * coeff_dyz_p1_m2_p2;
+COEFF(2,-2,2) = factor * coeff_dyz_p2_m2_p2;
+COEFF(-2,-1,2) = factor * coeff_dyz_m2_m1_p2;
+COEFF(-1,-1,2) = factor * coeff_dyz_m1_m1_p2;
+COEFF(0,-1,2) = factor * coeff_dyz_0_m1_p2;
+COEFF(1,-1,2) = factor * coeff_dyz_p1_m1_p2;
+COEFF(2,-1,2) = factor * coeff_dyz_p2_m1_p2;
+COEFF(-2,0,2) = factor * coeff_dyz_m2_0_p2;
+COEFF(-1,0,2) = factor * coeff_dyz_m1_0_p2;
+COEFF(0,0,2) = factor * coeff_dyz_0_0_p2;
+COEFF(1,0,2) = factor * coeff_dyz_p1_0_p2;
+COEFF(2,0,2) = factor * coeff_dyz_p2_0_p2;
+COEFF(-2,1,2) = factor * coeff_dyz_m2_p1_p2;
+COEFF(-1,1,2) = factor * coeff_dyz_m1_p1_p2;
+COEFF(0,1,2) = factor * coeff_dyz_0_p1_p2;
+COEFF(1,1,2) = factor * coeff_dyz_p1_p1_p2;
+COEFF(2,1,2) = factor * coeff_dyz_p2_p1_p2;
+COEFF(-2,2,2) = factor * coeff_dyz_m2_p2_p2;
+COEFF(-1,2,2) = factor * coeff_dyz_m1_p2_p2;
+COEFF(0,2,2) = factor * coeff_dyz_0_p2_p2;
+COEFF(1,2,2) = factor * coeff_dyz_p1_p2_p2;
+COEFF(2,2,2) = factor * coeff_dyz_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dz.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dz.dcl.c
new file mode 100644
index 0000000..785a843
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dz.dcl.c
@@ -0,0 +1,125 @@
+fp coeff_dz_m2_m2_m2,
+ coeff_dz_m1_m2_m2,
+ coeff_dz_0_m2_m2,
+ coeff_dz_p1_m2_m2,
+ coeff_dz_p2_m2_m2,
+ coeff_dz_m2_m1_m2,
+ coeff_dz_m1_m1_m2,
+ coeff_dz_0_m1_m2,
+ coeff_dz_p1_m1_m2,
+ coeff_dz_p2_m1_m2,
+ coeff_dz_m2_0_m2,
+ coeff_dz_m1_0_m2,
+ coeff_dz_0_0_m2,
+ coeff_dz_p1_0_m2,
+ coeff_dz_p2_0_m2,
+ coeff_dz_m2_p1_m2,
+ coeff_dz_m1_p1_m2,
+ coeff_dz_0_p1_m2,
+ coeff_dz_p1_p1_m2,
+ coeff_dz_p2_p1_m2,
+ coeff_dz_m2_p2_m2,
+ coeff_dz_m1_p2_m2,
+ coeff_dz_0_p2_m2,
+ coeff_dz_p1_p2_m2,
+ coeff_dz_p2_p2_m2,
+ coeff_dz_m2_m2_m1,
+ coeff_dz_m1_m2_m1,
+ coeff_dz_0_m2_m1,
+ coeff_dz_p1_m2_m1,
+ coeff_dz_p2_m2_m1,
+ coeff_dz_m2_m1_m1,
+ coeff_dz_m1_m1_m1,
+ coeff_dz_0_m1_m1,
+ coeff_dz_p1_m1_m1,
+ coeff_dz_p2_m1_m1,
+ coeff_dz_m2_0_m1,
+ coeff_dz_m1_0_m1,
+ coeff_dz_0_0_m1,
+ coeff_dz_p1_0_m1,
+ coeff_dz_p2_0_m1,
+ coeff_dz_m2_p1_m1,
+ coeff_dz_m1_p1_m1,
+ coeff_dz_0_p1_m1,
+ coeff_dz_p1_p1_m1,
+ coeff_dz_p2_p1_m1,
+ coeff_dz_m2_p2_m1,
+ coeff_dz_m1_p2_m1,
+ coeff_dz_0_p2_m1,
+ coeff_dz_p1_p2_m1,
+ coeff_dz_p2_p2_m1,
+ coeff_dz_m2_m2_0,
+ coeff_dz_m1_m2_0,
+ coeff_dz_0_m2_0,
+ coeff_dz_p1_m2_0,
+ coeff_dz_p2_m2_0,
+ coeff_dz_m2_m1_0,
+ coeff_dz_m1_m1_0,
+ coeff_dz_0_m1_0,
+ coeff_dz_p1_m1_0,
+ coeff_dz_p2_m1_0,
+ coeff_dz_m2_0_0,
+ coeff_dz_m1_0_0,
+ coeff_dz_0_0_0,
+ coeff_dz_p1_0_0,
+ coeff_dz_p2_0_0,
+ coeff_dz_m2_p1_0,
+ coeff_dz_m1_p1_0,
+ coeff_dz_0_p1_0,
+ coeff_dz_p1_p1_0,
+ coeff_dz_p2_p1_0,
+ coeff_dz_m2_p2_0,
+ coeff_dz_m1_p2_0,
+ coeff_dz_0_p2_0,
+ coeff_dz_p1_p2_0,
+ coeff_dz_p2_p2_0,
+ coeff_dz_m2_m2_p1,
+ coeff_dz_m1_m2_p1,
+ coeff_dz_0_m2_p1,
+ coeff_dz_p1_m2_p1,
+ coeff_dz_p2_m2_p1,
+ coeff_dz_m2_m1_p1,
+ coeff_dz_m1_m1_p1,
+ coeff_dz_0_m1_p1,
+ coeff_dz_p1_m1_p1,
+ coeff_dz_p2_m1_p1,
+ coeff_dz_m2_0_p1,
+ coeff_dz_m1_0_p1,
+ coeff_dz_0_0_p1,
+ coeff_dz_p1_0_p1,
+ coeff_dz_p2_0_p1,
+ coeff_dz_m2_p1_p1,
+ coeff_dz_m1_p1_p1,
+ coeff_dz_0_p1_p1,
+ coeff_dz_p1_p1_p1,
+ coeff_dz_p2_p1_p1,
+ coeff_dz_m2_p2_p1,
+ coeff_dz_m1_p2_p1,
+ coeff_dz_0_p2_p1,
+ coeff_dz_p1_p2_p1,
+ coeff_dz_p2_p2_p1,
+ coeff_dz_m2_m2_p2,
+ coeff_dz_m1_m2_p2,
+ coeff_dz_0_m2_p2,
+ coeff_dz_p1_m2_p2,
+ coeff_dz_p2_m2_p2,
+ coeff_dz_m2_m1_p2,
+ coeff_dz_m1_m1_p2,
+ coeff_dz_0_m1_p2,
+ coeff_dz_p1_m1_p2,
+ coeff_dz_p2_m1_p2,
+ coeff_dz_m2_0_p2,
+ coeff_dz_m1_0_p2,
+ coeff_dz_0_0_p2,
+ coeff_dz_p1_0_p2,
+ coeff_dz_p2_0_p2,
+ coeff_dz_m2_p1_p2,
+ coeff_dz_m1_p1_p2,
+ coeff_dz_0_p1_p2,
+ coeff_dz_p1_p1_p2,
+ coeff_dz_p2_p1_p2,
+ coeff_dz_m2_p2_p2,
+ coeff_dz_m1_p2_p2,
+ coeff_dz_0_p2_p2,
+ coeff_dz_p1_p2_p2,
+ coeff_dz_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dz.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dz.store.c
new file mode 100644
index 0000000..7ff4470
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dz.store.c
@@ -0,0 +1,125 @@
+COEFF(-2,-2,-2) = factor * coeff_dz_m2_m2_m2;
+COEFF(-1,-2,-2) = factor * coeff_dz_m1_m2_m2;
+COEFF(0,-2,-2) = factor * coeff_dz_0_m2_m2;
+COEFF(1,-2,-2) = factor * coeff_dz_p1_m2_m2;
+COEFF(2,-2,-2) = factor * coeff_dz_p2_m2_m2;
+COEFF(-2,-1,-2) = factor * coeff_dz_m2_m1_m2;
+COEFF(-1,-1,-2) = factor * coeff_dz_m1_m1_m2;
+COEFF(0,-1,-2) = factor * coeff_dz_0_m1_m2;
+COEFF(1,-1,-2) = factor * coeff_dz_p1_m1_m2;
+COEFF(2,-1,-2) = factor * coeff_dz_p2_m1_m2;
+COEFF(-2,0,-2) = factor * coeff_dz_m2_0_m2;
+COEFF(-1,0,-2) = factor * coeff_dz_m1_0_m2;
+COEFF(0,0,-2) = factor * coeff_dz_0_0_m2;
+COEFF(1,0,-2) = factor * coeff_dz_p1_0_m2;
+COEFF(2,0,-2) = factor * coeff_dz_p2_0_m2;
+COEFF(-2,1,-2) = factor * coeff_dz_m2_p1_m2;
+COEFF(-1,1,-2) = factor * coeff_dz_m1_p1_m2;
+COEFF(0,1,-2) = factor * coeff_dz_0_p1_m2;
+COEFF(1,1,-2) = factor * coeff_dz_p1_p1_m2;
+COEFF(2,1,-2) = factor * coeff_dz_p2_p1_m2;
+COEFF(-2,2,-2) = factor * coeff_dz_m2_p2_m2;
+COEFF(-1,2,-2) = factor * coeff_dz_m1_p2_m2;
+COEFF(0,2,-2) = factor * coeff_dz_0_p2_m2;
+COEFF(1,2,-2) = factor * coeff_dz_p1_p2_m2;
+COEFF(2,2,-2) = factor * coeff_dz_p2_p2_m2;
+COEFF(-2,-2,-1) = factor * coeff_dz_m2_m2_m1;
+COEFF(-1,-2,-1) = factor * coeff_dz_m1_m2_m1;
+COEFF(0,-2,-1) = factor * coeff_dz_0_m2_m1;
+COEFF(1,-2,-1) = factor * coeff_dz_p1_m2_m1;
+COEFF(2,-2,-1) = factor * coeff_dz_p2_m2_m1;
+COEFF(-2,-1,-1) = factor * coeff_dz_m2_m1_m1;
+COEFF(-1,-1,-1) = factor * coeff_dz_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dz_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dz_p1_m1_m1;
+COEFF(2,-1,-1) = factor * coeff_dz_p2_m1_m1;
+COEFF(-2,0,-1) = factor * coeff_dz_m2_0_m1;
+COEFF(-1,0,-1) = factor * coeff_dz_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dz_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dz_p1_0_m1;
+COEFF(2,0,-1) = factor * coeff_dz_p2_0_m1;
+COEFF(-2,1,-1) = factor * coeff_dz_m2_p1_m1;
+COEFF(-1,1,-1) = factor * coeff_dz_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dz_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dz_p1_p1_m1;
+COEFF(2,1,-1) = factor * coeff_dz_p2_p1_m1;
+COEFF(-2,2,-1) = factor * coeff_dz_m2_p2_m1;
+COEFF(-1,2,-1) = factor * coeff_dz_m1_p2_m1;
+COEFF(0,2,-1) = factor * coeff_dz_0_p2_m1;
+COEFF(1,2,-1) = factor * coeff_dz_p1_p2_m1;
+COEFF(2,2,-1) = factor * coeff_dz_p2_p2_m1;
+COEFF(-2,-2,0) = factor * coeff_dz_m2_m2_0;
+COEFF(-1,-2,0) = factor * coeff_dz_m1_m2_0;
+COEFF(0,-2,0) = factor * coeff_dz_0_m2_0;
+COEFF(1,-2,0) = factor * coeff_dz_p1_m2_0;
+COEFF(2,-2,0) = factor * coeff_dz_p2_m2_0;
+COEFF(-2,-1,0) = factor * coeff_dz_m2_m1_0;
+COEFF(-1,-1,0) = factor * coeff_dz_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dz_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dz_p1_m1_0;
+COEFF(2,-1,0) = factor * coeff_dz_p2_m1_0;
+COEFF(-2,0,0) = factor * coeff_dz_m2_0_0;
+COEFF(-1,0,0) = factor * coeff_dz_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dz_0_0_0;
+COEFF(1,0,0) = factor * coeff_dz_p1_0_0;
+COEFF(2,0,0) = factor * coeff_dz_p2_0_0;
+COEFF(-2,1,0) = factor * coeff_dz_m2_p1_0;
+COEFF(-1,1,0) = factor * coeff_dz_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dz_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dz_p1_p1_0;
+COEFF(2,1,0) = factor * coeff_dz_p2_p1_0;
+COEFF(-2,2,0) = factor * coeff_dz_m2_p2_0;
+COEFF(-1,2,0) = factor * coeff_dz_m1_p2_0;
+COEFF(0,2,0) = factor * coeff_dz_0_p2_0;
+COEFF(1,2,0) = factor * coeff_dz_p1_p2_0;
+COEFF(2,2,0) = factor * coeff_dz_p2_p2_0;
+COEFF(-2,-2,1) = factor * coeff_dz_m2_m2_p1;
+COEFF(-1,-2,1) = factor * coeff_dz_m1_m2_p1;
+COEFF(0,-2,1) = factor * coeff_dz_0_m2_p1;
+COEFF(1,-2,1) = factor * coeff_dz_p1_m2_p1;
+COEFF(2,-2,1) = factor * coeff_dz_p2_m2_p1;
+COEFF(-2,-1,1) = factor * coeff_dz_m2_m1_p1;
+COEFF(-1,-1,1) = factor * coeff_dz_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dz_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dz_p1_m1_p1;
+COEFF(2,-1,1) = factor * coeff_dz_p2_m1_p1;
+COEFF(-2,0,1) = factor * coeff_dz_m2_0_p1;
+COEFF(-1,0,1) = factor * coeff_dz_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dz_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dz_p1_0_p1;
+COEFF(2,0,1) = factor * coeff_dz_p2_0_p1;
+COEFF(-2,1,1) = factor * coeff_dz_m2_p1_p1;
+COEFF(-1,1,1) = factor * coeff_dz_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dz_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dz_p1_p1_p1;
+COEFF(2,1,1) = factor * coeff_dz_p2_p1_p1;
+COEFF(-2,2,1) = factor * coeff_dz_m2_p2_p1;
+COEFF(-1,2,1) = factor * coeff_dz_m1_p2_p1;
+COEFF(0,2,1) = factor * coeff_dz_0_p2_p1;
+COEFF(1,2,1) = factor * coeff_dz_p1_p2_p1;
+COEFF(2,2,1) = factor * coeff_dz_p2_p2_p1;
+COEFF(-2,-2,2) = factor * coeff_dz_m2_m2_p2;
+COEFF(-1,-2,2) = factor * coeff_dz_m1_m2_p2;
+COEFF(0,-2,2) = factor * coeff_dz_0_m2_p2;
+COEFF(1,-2,2) = factor * coeff_dz_p1_m2_p2;
+COEFF(2,-2,2) = factor * coeff_dz_p2_m2_p2;
+COEFF(-2,-1,2) = factor * coeff_dz_m2_m1_p2;
+COEFF(-1,-1,2) = factor * coeff_dz_m1_m1_p2;
+COEFF(0,-1,2) = factor * coeff_dz_0_m1_p2;
+COEFF(1,-1,2) = factor * coeff_dz_p1_m1_p2;
+COEFF(2,-1,2) = factor * coeff_dz_p2_m1_p2;
+COEFF(-2,0,2) = factor * coeff_dz_m2_0_p2;
+COEFF(-1,0,2) = factor * coeff_dz_m1_0_p2;
+COEFF(0,0,2) = factor * coeff_dz_0_0_p2;
+COEFF(1,0,2) = factor * coeff_dz_p1_0_p2;
+COEFF(2,0,2) = factor * coeff_dz_p2_0_p2;
+COEFF(-2,1,2) = factor * coeff_dz_m2_p1_p2;
+COEFF(-1,1,2) = factor * coeff_dz_m1_p1_p2;
+COEFF(0,1,2) = factor * coeff_dz_0_p1_p2;
+COEFF(1,1,2) = factor * coeff_dz_p1_p1_p2;
+COEFF(2,1,2) = factor * coeff_dz_p2_p1_p2;
+COEFF(-2,2,2) = factor * coeff_dz_m2_p2_p2;
+COEFF(-1,2,2) = factor * coeff_dz_m1_p2_p2;
+COEFF(0,2,2) = factor * coeff_dz_0_p2_p2;
+COEFF(1,2,2) = factor * coeff_dz_p1_p2_p2;
+COEFF(2,2,2) = factor * coeff_dz_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dzz.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dzz.dcl.c
new file mode 100644
index 0000000..baf56e5
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dzz.dcl.c
@@ -0,0 +1,125 @@
+fp coeff_dzz_m2_m2_m2,
+ coeff_dzz_m1_m2_m2,
+ coeff_dzz_0_m2_m2,
+ coeff_dzz_p1_m2_m2,
+ coeff_dzz_p2_m2_m2,
+ coeff_dzz_m2_m1_m2,
+ coeff_dzz_m1_m1_m2,
+ coeff_dzz_0_m1_m2,
+ coeff_dzz_p1_m1_m2,
+ coeff_dzz_p2_m1_m2,
+ coeff_dzz_m2_0_m2,
+ coeff_dzz_m1_0_m2,
+ coeff_dzz_0_0_m2,
+ coeff_dzz_p1_0_m2,
+ coeff_dzz_p2_0_m2,
+ coeff_dzz_m2_p1_m2,
+ coeff_dzz_m1_p1_m2,
+ coeff_dzz_0_p1_m2,
+ coeff_dzz_p1_p1_m2,
+ coeff_dzz_p2_p1_m2,
+ coeff_dzz_m2_p2_m2,
+ coeff_dzz_m1_p2_m2,
+ coeff_dzz_0_p2_m2,
+ coeff_dzz_p1_p2_m2,
+ coeff_dzz_p2_p2_m2,
+ coeff_dzz_m2_m2_m1,
+ coeff_dzz_m1_m2_m1,
+ coeff_dzz_0_m2_m1,
+ coeff_dzz_p1_m2_m1,
+ coeff_dzz_p2_m2_m1,
+ coeff_dzz_m2_m1_m1,
+ coeff_dzz_m1_m1_m1,
+ coeff_dzz_0_m1_m1,
+ coeff_dzz_p1_m1_m1,
+ coeff_dzz_p2_m1_m1,
+ coeff_dzz_m2_0_m1,
+ coeff_dzz_m1_0_m1,
+ coeff_dzz_0_0_m1,
+ coeff_dzz_p1_0_m1,
+ coeff_dzz_p2_0_m1,
+ coeff_dzz_m2_p1_m1,
+ coeff_dzz_m1_p1_m1,
+ coeff_dzz_0_p1_m1,
+ coeff_dzz_p1_p1_m1,
+ coeff_dzz_p2_p1_m1,
+ coeff_dzz_m2_p2_m1,
+ coeff_dzz_m1_p2_m1,
+ coeff_dzz_0_p2_m1,
+ coeff_dzz_p1_p2_m1,
+ coeff_dzz_p2_p2_m1,
+ coeff_dzz_m2_m2_0,
+ coeff_dzz_m1_m2_0,
+ coeff_dzz_0_m2_0,
+ coeff_dzz_p1_m2_0,
+ coeff_dzz_p2_m2_0,
+ coeff_dzz_m2_m1_0,
+ coeff_dzz_m1_m1_0,
+ coeff_dzz_0_m1_0,
+ coeff_dzz_p1_m1_0,
+ coeff_dzz_p2_m1_0,
+ coeff_dzz_m2_0_0,
+ coeff_dzz_m1_0_0,
+ coeff_dzz_0_0_0,
+ coeff_dzz_p1_0_0,
+ coeff_dzz_p2_0_0,
+ coeff_dzz_m2_p1_0,
+ coeff_dzz_m1_p1_0,
+ coeff_dzz_0_p1_0,
+ coeff_dzz_p1_p1_0,
+ coeff_dzz_p2_p1_0,
+ coeff_dzz_m2_p2_0,
+ coeff_dzz_m1_p2_0,
+ coeff_dzz_0_p2_0,
+ coeff_dzz_p1_p2_0,
+ coeff_dzz_p2_p2_0,
+ coeff_dzz_m2_m2_p1,
+ coeff_dzz_m1_m2_p1,
+ coeff_dzz_0_m2_p1,
+ coeff_dzz_p1_m2_p1,
+ coeff_dzz_p2_m2_p1,
+ coeff_dzz_m2_m1_p1,
+ coeff_dzz_m1_m1_p1,
+ coeff_dzz_0_m1_p1,
+ coeff_dzz_p1_m1_p1,
+ coeff_dzz_p2_m1_p1,
+ coeff_dzz_m2_0_p1,
+ coeff_dzz_m1_0_p1,
+ coeff_dzz_0_0_p1,
+ coeff_dzz_p1_0_p1,
+ coeff_dzz_p2_0_p1,
+ coeff_dzz_m2_p1_p1,
+ coeff_dzz_m1_p1_p1,
+ coeff_dzz_0_p1_p1,
+ coeff_dzz_p1_p1_p1,
+ coeff_dzz_p2_p1_p1,
+ coeff_dzz_m2_p2_p1,
+ coeff_dzz_m1_p2_p1,
+ coeff_dzz_0_p2_p1,
+ coeff_dzz_p1_p2_p1,
+ coeff_dzz_p2_p2_p1,
+ coeff_dzz_m2_m2_p2,
+ coeff_dzz_m1_m2_p2,
+ coeff_dzz_0_m2_p2,
+ coeff_dzz_p1_m2_p2,
+ coeff_dzz_p2_m2_p2,
+ coeff_dzz_m2_m1_p2,
+ coeff_dzz_m1_m1_p2,
+ coeff_dzz_0_m1_p2,
+ coeff_dzz_p1_m1_p2,
+ coeff_dzz_p2_m1_p2,
+ coeff_dzz_m2_0_p2,
+ coeff_dzz_m1_0_p2,
+ coeff_dzz_0_0_p2,
+ coeff_dzz_p1_0_p2,
+ coeff_dzz_p2_0_p2,
+ coeff_dzz_m2_p1_p2,
+ coeff_dzz_m1_p1_p2,
+ coeff_dzz_0_p1_p2,
+ coeff_dzz_p1_p1_p2,
+ coeff_dzz_p2_p1_p2,
+ coeff_dzz_m2_p2_p2,
+ coeff_dzz_m1_p2_p2,
+ coeff_dzz_0_p2_p2,
+ coeff_dzz_p1_p2_p2,
+ coeff_dzz_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dzz.store.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dzz.store.c
new file mode 100644
index 0000000..9343077
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/coeff-dzz.store.c
@@ -0,0 +1,125 @@
+COEFF(-2,-2,-2) = factor * coeff_dzz_m2_m2_m2;
+COEFF(-1,-2,-2) = factor * coeff_dzz_m1_m2_m2;
+COEFF(0,-2,-2) = factor * coeff_dzz_0_m2_m2;
+COEFF(1,-2,-2) = factor * coeff_dzz_p1_m2_m2;
+COEFF(2,-2,-2) = factor * coeff_dzz_p2_m2_m2;
+COEFF(-2,-1,-2) = factor * coeff_dzz_m2_m1_m2;
+COEFF(-1,-1,-2) = factor * coeff_dzz_m1_m1_m2;
+COEFF(0,-1,-2) = factor * coeff_dzz_0_m1_m2;
+COEFF(1,-1,-2) = factor * coeff_dzz_p1_m1_m2;
+COEFF(2,-1,-2) = factor * coeff_dzz_p2_m1_m2;
+COEFF(-2,0,-2) = factor * coeff_dzz_m2_0_m2;
+COEFF(-1,0,-2) = factor * coeff_dzz_m1_0_m2;
+COEFF(0,0,-2) = factor * coeff_dzz_0_0_m2;
+COEFF(1,0,-2) = factor * coeff_dzz_p1_0_m2;
+COEFF(2,0,-2) = factor * coeff_dzz_p2_0_m2;
+COEFF(-2,1,-2) = factor * coeff_dzz_m2_p1_m2;
+COEFF(-1,1,-2) = factor * coeff_dzz_m1_p1_m2;
+COEFF(0,1,-2) = factor * coeff_dzz_0_p1_m2;
+COEFF(1,1,-2) = factor * coeff_dzz_p1_p1_m2;
+COEFF(2,1,-2) = factor * coeff_dzz_p2_p1_m2;
+COEFF(-2,2,-2) = factor * coeff_dzz_m2_p2_m2;
+COEFF(-1,2,-2) = factor * coeff_dzz_m1_p2_m2;
+COEFF(0,2,-2) = factor * coeff_dzz_0_p2_m2;
+COEFF(1,2,-2) = factor * coeff_dzz_p1_p2_m2;
+COEFF(2,2,-2) = factor * coeff_dzz_p2_p2_m2;
+COEFF(-2,-2,-1) = factor * coeff_dzz_m2_m2_m1;
+COEFF(-1,-2,-1) = factor * coeff_dzz_m1_m2_m1;
+COEFF(0,-2,-1) = factor * coeff_dzz_0_m2_m1;
+COEFF(1,-2,-1) = factor * coeff_dzz_p1_m2_m1;
+COEFF(2,-2,-1) = factor * coeff_dzz_p2_m2_m1;
+COEFF(-2,-1,-1) = factor * coeff_dzz_m2_m1_m1;
+COEFF(-1,-1,-1) = factor * coeff_dzz_m1_m1_m1;
+COEFF(0,-1,-1) = factor * coeff_dzz_0_m1_m1;
+COEFF(1,-1,-1) = factor * coeff_dzz_p1_m1_m1;
+COEFF(2,-1,-1) = factor * coeff_dzz_p2_m1_m1;
+COEFF(-2,0,-1) = factor * coeff_dzz_m2_0_m1;
+COEFF(-1,0,-1) = factor * coeff_dzz_m1_0_m1;
+COEFF(0,0,-1) = factor * coeff_dzz_0_0_m1;
+COEFF(1,0,-1) = factor * coeff_dzz_p1_0_m1;
+COEFF(2,0,-1) = factor * coeff_dzz_p2_0_m1;
+COEFF(-2,1,-1) = factor * coeff_dzz_m2_p1_m1;
+COEFF(-1,1,-1) = factor * coeff_dzz_m1_p1_m1;
+COEFF(0,1,-1) = factor * coeff_dzz_0_p1_m1;
+COEFF(1,1,-1) = factor * coeff_dzz_p1_p1_m1;
+COEFF(2,1,-1) = factor * coeff_dzz_p2_p1_m1;
+COEFF(-2,2,-1) = factor * coeff_dzz_m2_p2_m1;
+COEFF(-1,2,-1) = factor * coeff_dzz_m1_p2_m1;
+COEFF(0,2,-1) = factor * coeff_dzz_0_p2_m1;
+COEFF(1,2,-1) = factor * coeff_dzz_p1_p2_m1;
+COEFF(2,2,-1) = factor * coeff_dzz_p2_p2_m1;
+COEFF(-2,-2,0) = factor * coeff_dzz_m2_m2_0;
+COEFF(-1,-2,0) = factor * coeff_dzz_m1_m2_0;
+COEFF(0,-2,0) = factor * coeff_dzz_0_m2_0;
+COEFF(1,-2,0) = factor * coeff_dzz_p1_m2_0;
+COEFF(2,-2,0) = factor * coeff_dzz_p2_m2_0;
+COEFF(-2,-1,0) = factor * coeff_dzz_m2_m1_0;
+COEFF(-1,-1,0) = factor * coeff_dzz_m1_m1_0;
+COEFF(0,-1,0) = factor * coeff_dzz_0_m1_0;
+COEFF(1,-1,0) = factor * coeff_dzz_p1_m1_0;
+COEFF(2,-1,0) = factor * coeff_dzz_p2_m1_0;
+COEFF(-2,0,0) = factor * coeff_dzz_m2_0_0;
+COEFF(-1,0,0) = factor * coeff_dzz_m1_0_0;
+COEFF(0,0,0) = factor * coeff_dzz_0_0_0;
+COEFF(1,0,0) = factor * coeff_dzz_p1_0_0;
+COEFF(2,0,0) = factor * coeff_dzz_p2_0_0;
+COEFF(-2,1,0) = factor * coeff_dzz_m2_p1_0;
+COEFF(-1,1,0) = factor * coeff_dzz_m1_p1_0;
+COEFF(0,1,0) = factor * coeff_dzz_0_p1_0;
+COEFF(1,1,0) = factor * coeff_dzz_p1_p1_0;
+COEFF(2,1,0) = factor * coeff_dzz_p2_p1_0;
+COEFF(-2,2,0) = factor * coeff_dzz_m2_p2_0;
+COEFF(-1,2,0) = factor * coeff_dzz_m1_p2_0;
+COEFF(0,2,0) = factor * coeff_dzz_0_p2_0;
+COEFF(1,2,0) = factor * coeff_dzz_p1_p2_0;
+COEFF(2,2,0) = factor * coeff_dzz_p2_p2_0;
+COEFF(-2,-2,1) = factor * coeff_dzz_m2_m2_p1;
+COEFF(-1,-2,1) = factor * coeff_dzz_m1_m2_p1;
+COEFF(0,-2,1) = factor * coeff_dzz_0_m2_p1;
+COEFF(1,-2,1) = factor * coeff_dzz_p1_m2_p1;
+COEFF(2,-2,1) = factor * coeff_dzz_p2_m2_p1;
+COEFF(-2,-1,1) = factor * coeff_dzz_m2_m1_p1;
+COEFF(-1,-1,1) = factor * coeff_dzz_m1_m1_p1;
+COEFF(0,-1,1) = factor * coeff_dzz_0_m1_p1;
+COEFF(1,-1,1) = factor * coeff_dzz_p1_m1_p1;
+COEFF(2,-1,1) = factor * coeff_dzz_p2_m1_p1;
+COEFF(-2,0,1) = factor * coeff_dzz_m2_0_p1;
+COEFF(-1,0,1) = factor * coeff_dzz_m1_0_p1;
+COEFF(0,0,1) = factor * coeff_dzz_0_0_p1;
+COEFF(1,0,1) = factor * coeff_dzz_p1_0_p1;
+COEFF(2,0,1) = factor * coeff_dzz_p2_0_p1;
+COEFF(-2,1,1) = factor * coeff_dzz_m2_p1_p1;
+COEFF(-1,1,1) = factor * coeff_dzz_m1_p1_p1;
+COEFF(0,1,1) = factor * coeff_dzz_0_p1_p1;
+COEFF(1,1,1) = factor * coeff_dzz_p1_p1_p1;
+COEFF(2,1,1) = factor * coeff_dzz_p2_p1_p1;
+COEFF(-2,2,1) = factor * coeff_dzz_m2_p2_p1;
+COEFF(-1,2,1) = factor * coeff_dzz_m1_p2_p1;
+COEFF(0,2,1) = factor * coeff_dzz_0_p2_p1;
+COEFF(1,2,1) = factor * coeff_dzz_p1_p2_p1;
+COEFF(2,2,1) = factor * coeff_dzz_p2_p2_p1;
+COEFF(-2,-2,2) = factor * coeff_dzz_m2_m2_p2;
+COEFF(-1,-2,2) = factor * coeff_dzz_m1_m2_p2;
+COEFF(0,-2,2) = factor * coeff_dzz_0_m2_p2;
+COEFF(1,-2,2) = factor * coeff_dzz_p1_m2_p2;
+COEFF(2,-2,2) = factor * coeff_dzz_p2_m2_p2;
+COEFF(-2,-1,2) = factor * coeff_dzz_m2_m1_p2;
+COEFF(-1,-1,2) = factor * coeff_dzz_m1_m1_p2;
+COEFF(0,-1,2) = factor * coeff_dzz_0_m1_p2;
+COEFF(1,-1,2) = factor * coeff_dzz_p1_m1_p2;
+COEFF(2,-1,2) = factor * coeff_dzz_p2_m1_p2;
+COEFF(-2,0,2) = factor * coeff_dzz_m2_0_p2;
+COEFF(-1,0,2) = factor * coeff_dzz_m1_0_p2;
+COEFF(0,0,2) = factor * coeff_dzz_0_0_p2;
+COEFF(1,0,2) = factor * coeff_dzz_p1_0_p2;
+COEFF(2,0,2) = factor * coeff_dzz_p2_0_p2;
+COEFF(-2,1,2) = factor * coeff_dzz_m2_p1_p2;
+COEFF(-1,1,2) = factor * coeff_dzz_m1_p1_p2;
+COEFF(0,1,2) = factor * coeff_dzz_0_p1_p2;
+COEFF(1,1,2) = factor * coeff_dzz_p1_p1_p2;
+COEFF(2,1,2) = factor * coeff_dzz_p2_p1_p2;
+COEFF(-2,2,2) = factor * coeff_dzz_m2_p2_p2;
+COEFF(-1,2,2) = factor * coeff_dzz_m1_p2_p2;
+COEFF(0,2,2) = factor * coeff_dzz_0_p2_p2;
+COEFF(1,2,2) = factor * coeff_dzz_p1_p2_p2;
+COEFF(2,2,2) = factor * coeff_dzz_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/data-var.assign.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/data-var.assign.c
new file mode 100644
index 0000000..963fa1b
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/data-var.assign.c
@@ -0,0 +1,125 @@
+data_m2_m2_m2 = DATA(-2,-2,-2);
+data_m1_m2_m2 = DATA(-1,-2,-2);
+data_0_m2_m2 = DATA(0,-2,-2);
+data_p1_m2_m2 = DATA(1,-2,-2);
+data_p2_m2_m2 = DATA(2,-2,-2);
+data_m2_m1_m2 = DATA(-2,-1,-2);
+data_m1_m1_m2 = DATA(-1,-1,-2);
+data_0_m1_m2 = DATA(0,-1,-2);
+data_p1_m1_m2 = DATA(1,-1,-2);
+data_p2_m1_m2 = DATA(2,-1,-2);
+data_m2_0_m2 = DATA(-2,0,-2);
+data_m1_0_m2 = DATA(-1,0,-2);
+data_0_0_m2 = DATA(0,0,-2);
+data_p1_0_m2 = DATA(1,0,-2);
+data_p2_0_m2 = DATA(2,0,-2);
+data_m2_p1_m2 = DATA(-2,1,-2);
+data_m1_p1_m2 = DATA(-1,1,-2);
+data_0_p1_m2 = DATA(0,1,-2);
+data_p1_p1_m2 = DATA(1,1,-2);
+data_p2_p1_m2 = DATA(2,1,-2);
+data_m2_p2_m2 = DATA(-2,2,-2);
+data_m1_p2_m2 = DATA(-1,2,-2);
+data_0_p2_m2 = DATA(0,2,-2);
+data_p1_p2_m2 = DATA(1,2,-2);
+data_p2_p2_m2 = DATA(2,2,-2);
+data_m2_m2_m1 = DATA(-2,-2,-1);
+data_m1_m2_m1 = DATA(-1,-2,-1);
+data_0_m2_m1 = DATA(0,-2,-1);
+data_p1_m2_m1 = DATA(1,-2,-1);
+data_p2_m2_m1 = DATA(2,-2,-1);
+data_m2_m1_m1 = DATA(-2,-1,-1);
+data_m1_m1_m1 = DATA(-1,-1,-1);
+data_0_m1_m1 = DATA(0,-1,-1);
+data_p1_m1_m1 = DATA(1,-1,-1);
+data_p2_m1_m1 = DATA(2,-1,-1);
+data_m2_0_m1 = DATA(-2,0,-1);
+data_m1_0_m1 = DATA(-1,0,-1);
+data_0_0_m1 = DATA(0,0,-1);
+data_p1_0_m1 = DATA(1,0,-1);
+data_p2_0_m1 = DATA(2,0,-1);
+data_m2_p1_m1 = DATA(-2,1,-1);
+data_m1_p1_m1 = DATA(-1,1,-1);
+data_0_p1_m1 = DATA(0,1,-1);
+data_p1_p1_m1 = DATA(1,1,-1);
+data_p2_p1_m1 = DATA(2,1,-1);
+data_m2_p2_m1 = DATA(-2,2,-1);
+data_m1_p2_m1 = DATA(-1,2,-1);
+data_0_p2_m1 = DATA(0,2,-1);
+data_p1_p2_m1 = DATA(1,2,-1);
+data_p2_p2_m1 = DATA(2,2,-1);
+data_m2_m2_0 = DATA(-2,-2,0);
+data_m1_m2_0 = DATA(-1,-2,0);
+data_0_m2_0 = DATA(0,-2,0);
+data_p1_m2_0 = DATA(1,-2,0);
+data_p2_m2_0 = DATA(2,-2,0);
+data_m2_m1_0 = DATA(-2,-1,0);
+data_m1_m1_0 = DATA(-1,-1,0);
+data_0_m1_0 = DATA(0,-1,0);
+data_p1_m1_0 = DATA(1,-1,0);
+data_p2_m1_0 = DATA(2,-1,0);
+data_m2_0_0 = DATA(-2,0,0);
+data_m1_0_0 = DATA(-1,0,0);
+data_0_0_0 = DATA(0,0,0);
+data_p1_0_0 = DATA(1,0,0);
+data_p2_0_0 = DATA(2,0,0);
+data_m2_p1_0 = DATA(-2,1,0);
+data_m1_p1_0 = DATA(-1,1,0);
+data_0_p1_0 = DATA(0,1,0);
+data_p1_p1_0 = DATA(1,1,0);
+data_p2_p1_0 = DATA(2,1,0);
+data_m2_p2_0 = DATA(-2,2,0);
+data_m1_p2_0 = DATA(-1,2,0);
+data_0_p2_0 = DATA(0,2,0);
+data_p1_p2_0 = DATA(1,2,0);
+data_p2_p2_0 = DATA(2,2,0);
+data_m2_m2_p1 = DATA(-2,-2,1);
+data_m1_m2_p1 = DATA(-1,-2,1);
+data_0_m2_p1 = DATA(0,-2,1);
+data_p1_m2_p1 = DATA(1,-2,1);
+data_p2_m2_p1 = DATA(2,-2,1);
+data_m2_m1_p1 = DATA(-2,-1,1);
+data_m1_m1_p1 = DATA(-1,-1,1);
+data_0_m1_p1 = DATA(0,-1,1);
+data_p1_m1_p1 = DATA(1,-1,1);
+data_p2_m1_p1 = DATA(2,-1,1);
+data_m2_0_p1 = DATA(-2,0,1);
+data_m1_0_p1 = DATA(-1,0,1);
+data_0_0_p1 = DATA(0,0,1);
+data_p1_0_p1 = DATA(1,0,1);
+data_p2_0_p1 = DATA(2,0,1);
+data_m2_p1_p1 = DATA(-2,1,1);
+data_m1_p1_p1 = DATA(-1,1,1);
+data_0_p1_p1 = DATA(0,1,1);
+data_p1_p1_p1 = DATA(1,1,1);
+data_p2_p1_p1 = DATA(2,1,1);
+data_m2_p2_p1 = DATA(-2,2,1);
+data_m1_p2_p1 = DATA(-1,2,1);
+data_0_p2_p1 = DATA(0,2,1);
+data_p1_p2_p1 = DATA(1,2,1);
+data_p2_p2_p1 = DATA(2,2,1);
+data_m2_m2_p2 = DATA(-2,-2,2);
+data_m1_m2_p2 = DATA(-1,-2,2);
+data_0_m2_p2 = DATA(0,-2,2);
+data_p1_m2_p2 = DATA(1,-2,2);
+data_p2_m2_p2 = DATA(2,-2,2);
+data_m2_m1_p2 = DATA(-2,-1,2);
+data_m1_m1_p2 = DATA(-1,-1,2);
+data_0_m1_p2 = DATA(0,-1,2);
+data_p1_m1_p2 = DATA(1,-1,2);
+data_p2_m1_p2 = DATA(2,-1,2);
+data_m2_0_p2 = DATA(-2,0,2);
+data_m1_0_p2 = DATA(-1,0,2);
+data_0_0_p2 = DATA(0,0,2);
+data_p1_0_p2 = DATA(1,0,2);
+data_p2_0_p2 = DATA(2,0,2);
+data_m2_p1_p2 = DATA(-2,1,2);
+data_m1_p1_p2 = DATA(-1,1,2);
+data_0_p1_p2 = DATA(0,1,2);
+data_p1_p1_p2 = DATA(1,1,2);
+data_p2_p1_p2 = DATA(2,1,2);
+data_m2_p2_p2 = DATA(-2,2,2);
+data_m1_p2_p2 = DATA(-1,2,2);
+data_0_p2_p2 = DATA(0,2,2);
+data_p1_p2_p2 = DATA(1,2,2);
+data_p2_p2_p2 = DATA(2,2,2);
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/data-var.dcl.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/data-var.dcl.c
new file mode 100644
index 0000000..3f45b12
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/data-var.dcl.c
@@ -0,0 +1,125 @@
+fp data_m2_m2_m2,
+ data_m1_m2_m2,
+ data_0_m2_m2,
+ data_p1_m2_m2,
+ data_p2_m2_m2,
+ data_m2_m1_m2,
+ data_m1_m1_m2,
+ data_0_m1_m2,
+ data_p1_m1_m2,
+ data_p2_m1_m2,
+ data_m2_0_m2,
+ data_m1_0_m2,
+ data_0_0_m2,
+ data_p1_0_m2,
+ data_p2_0_m2,
+ data_m2_p1_m2,
+ data_m1_p1_m2,
+ data_0_p1_m2,
+ data_p1_p1_m2,
+ data_p2_p1_m2,
+ data_m2_p2_m2,
+ data_m1_p2_m2,
+ data_0_p2_m2,
+ data_p1_p2_m2,
+ data_p2_p2_m2,
+ data_m2_m2_m1,
+ data_m1_m2_m1,
+ data_0_m2_m1,
+ data_p1_m2_m1,
+ data_p2_m2_m1,
+ data_m2_m1_m1,
+ data_m1_m1_m1,
+ data_0_m1_m1,
+ data_p1_m1_m1,
+ data_p2_m1_m1,
+ data_m2_0_m1,
+ data_m1_0_m1,
+ data_0_0_m1,
+ data_p1_0_m1,
+ data_p2_0_m1,
+ data_m2_p1_m1,
+ data_m1_p1_m1,
+ data_0_p1_m1,
+ data_p1_p1_m1,
+ data_p2_p1_m1,
+ data_m2_p2_m1,
+ data_m1_p2_m1,
+ data_0_p2_m1,
+ data_p1_p2_m1,
+ data_p2_p2_m1,
+ data_m2_m2_0,
+ data_m1_m2_0,
+ data_0_m2_0,
+ data_p1_m2_0,
+ data_p2_m2_0,
+ data_m2_m1_0,
+ data_m1_m1_0,
+ data_0_m1_0,
+ data_p1_m1_0,
+ data_p2_m1_0,
+ data_m2_0_0,
+ data_m1_0_0,
+ data_0_0_0,
+ data_p1_0_0,
+ data_p2_0_0,
+ data_m2_p1_0,
+ data_m1_p1_0,
+ data_0_p1_0,
+ data_p1_p1_0,
+ data_p2_p1_0,
+ data_m2_p2_0,
+ data_m1_p2_0,
+ data_0_p2_0,
+ data_p1_p2_0,
+ data_p2_p2_0,
+ data_m2_m2_p1,
+ data_m1_m2_p1,
+ data_0_m2_p1,
+ data_p1_m2_p1,
+ data_p2_m2_p1,
+ data_m2_m1_p1,
+ data_m1_m1_p1,
+ data_0_m1_p1,
+ data_p1_m1_p1,
+ data_p2_m1_p1,
+ data_m2_0_p1,
+ data_m1_0_p1,
+ data_0_0_p1,
+ data_p1_0_p1,
+ data_p2_0_p1,
+ data_m2_p1_p1,
+ data_m1_p1_p1,
+ data_0_p1_p1,
+ data_p1_p1_p1,
+ data_p2_p1_p1,
+ data_m2_p2_p1,
+ data_m1_p2_p1,
+ data_0_p2_p1,
+ data_p1_p2_p1,
+ data_p2_p2_p1,
+ data_m2_m2_p2,
+ data_m1_m2_p2,
+ data_0_m2_p2,
+ data_p1_m2_p2,
+ data_p2_m2_p2,
+ data_m2_m1_p2,
+ data_m1_m1_p2,
+ data_0_m1_p2,
+ data_p1_m1_p2,
+ data_p2_m1_p2,
+ data_m2_0_p2,
+ data_m1_0_p2,
+ data_0_0_p2,
+ data_p1_0_p2,
+ data_p2_0_p2,
+ data_m2_p1_p2,
+ data_m1_p1_p2,
+ data_0_p1_p2,
+ data_p1_p1_p2,
+ data_p2_p1_p2,
+ data_m2_p2_p2,
+ data_m1_p2_p2,
+ data_0_p2_p2,
+ data_p1_p2_p2,
+ data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-I.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-I.compute.c
new file mode 100644
index 0000000..06a4bfa
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-I.compute.c
@@ -0,0 +1,126 @@
+result =
+ coeff_I_m2_m2_m2*data_m2_m2_m2
+ + coeff_I_m1_m2_m2*data_m1_m2_m2
+ + coeff_I_0_m2_m2*data_0_m2_m2
+ + coeff_I_p1_m2_m2*data_p1_m2_m2
+ + coeff_I_p2_m2_m2*data_p2_m2_m2
+ + coeff_I_m2_m1_m2*data_m2_m1_m2
+ + coeff_I_m1_m1_m2*data_m1_m1_m2
+ + coeff_I_0_m1_m2*data_0_m1_m2
+ + coeff_I_p1_m1_m2*data_p1_m1_m2
+ + coeff_I_p2_m1_m2*data_p2_m1_m2
+ + coeff_I_m2_0_m2*data_m2_0_m2
+ + coeff_I_m1_0_m2*data_m1_0_m2
+ + coeff_I_0_0_m2*data_0_0_m2
+ + coeff_I_p1_0_m2*data_p1_0_m2
+ + coeff_I_p2_0_m2*data_p2_0_m2
+ + coeff_I_m2_p1_m2*data_m2_p1_m2
+ + coeff_I_m1_p1_m2*data_m1_p1_m2
+ + coeff_I_0_p1_m2*data_0_p1_m2
+ + coeff_I_p1_p1_m2*data_p1_p1_m2
+ + coeff_I_p2_p1_m2*data_p2_p1_m2
+ + coeff_I_m2_p2_m2*data_m2_p2_m2
+ + coeff_I_m1_p2_m2*data_m1_p2_m2
+ + coeff_I_0_p2_m2*data_0_p2_m2
+ + coeff_I_p1_p2_m2*data_p1_p2_m2
+ + coeff_I_p2_p2_m2*data_p2_p2_m2
+ + coeff_I_m2_m2_m1*data_m2_m2_m1
+ + coeff_I_m1_m2_m1*data_m1_m2_m1
+ + coeff_I_0_m2_m1*data_0_m2_m1
+ + coeff_I_p1_m2_m1*data_p1_m2_m1
+ + coeff_I_p2_m2_m1*data_p2_m2_m1
+ + coeff_I_m2_m1_m1*data_m2_m1_m1
+ + coeff_I_m1_m1_m1*data_m1_m1_m1
+ + coeff_I_0_m1_m1*data_0_m1_m1
+ + coeff_I_p1_m1_m1*data_p1_m1_m1
+ + coeff_I_p2_m1_m1*data_p2_m1_m1
+ + coeff_I_m2_0_m1*data_m2_0_m1
+ + coeff_I_m1_0_m1*data_m1_0_m1
+ + coeff_I_0_0_m1*data_0_0_m1
+ + coeff_I_p1_0_m1*data_p1_0_m1
+ + coeff_I_p2_0_m1*data_p2_0_m1
+ + coeff_I_m2_p1_m1*data_m2_p1_m1
+ + coeff_I_m1_p1_m1*data_m1_p1_m1
+ + coeff_I_0_p1_m1*data_0_p1_m1
+ + coeff_I_p1_p1_m1*data_p1_p1_m1
+ + coeff_I_p2_p1_m1*data_p2_p1_m1
+ + coeff_I_m2_p2_m1*data_m2_p2_m1
+ + coeff_I_m1_p2_m1*data_m1_p2_m1
+ + coeff_I_0_p2_m1*data_0_p2_m1
+ + coeff_I_p1_p2_m1*data_p1_p2_m1
+ + coeff_I_p2_p2_m1*data_p2_p2_m1
+ + coeff_I_m2_m2_0*data_m2_m2_0
+ + coeff_I_m1_m2_0*data_m1_m2_0
+ + coeff_I_0_m2_0*data_0_m2_0
+ + coeff_I_p1_m2_0*data_p1_m2_0
+ + coeff_I_p2_m2_0*data_p2_m2_0
+ + coeff_I_m2_m1_0*data_m2_m1_0
+ + coeff_I_m1_m1_0*data_m1_m1_0
+ + coeff_I_0_m1_0*data_0_m1_0
+ + coeff_I_p1_m1_0*data_p1_m1_0
+ + coeff_I_p2_m1_0*data_p2_m1_0
+ + coeff_I_m2_0_0*data_m2_0_0
+ + coeff_I_m1_0_0*data_m1_0_0
+ + coeff_I_0_0_0*data_0_0_0
+ + coeff_I_p1_0_0*data_p1_0_0
+ + coeff_I_p2_0_0*data_p2_0_0
+ + coeff_I_m2_p1_0*data_m2_p1_0
+ + coeff_I_m1_p1_0*data_m1_p1_0
+ + coeff_I_0_p1_0*data_0_p1_0
+ + coeff_I_p1_p1_0*data_p1_p1_0
+ + coeff_I_p2_p1_0*data_p2_p1_0
+ + coeff_I_m2_p2_0*data_m2_p2_0
+ + coeff_I_m1_p2_0*data_m1_p2_0
+ + coeff_I_0_p2_0*data_0_p2_0
+ + coeff_I_p1_p2_0*data_p1_p2_0
+ + coeff_I_p2_p2_0*data_p2_p2_0
+ + coeff_I_m2_m2_p1*data_m2_m2_p1
+ + coeff_I_m1_m2_p1*data_m1_m2_p1
+ + coeff_I_0_m2_p1*data_0_m2_p1
+ + coeff_I_p1_m2_p1*data_p1_m2_p1
+ + coeff_I_p2_m2_p1*data_p2_m2_p1
+ + coeff_I_m2_m1_p1*data_m2_m1_p1
+ + coeff_I_m1_m1_p1*data_m1_m1_p1
+ + coeff_I_0_m1_p1*data_0_m1_p1
+ + coeff_I_p1_m1_p1*data_p1_m1_p1
+ + coeff_I_p2_m1_p1*data_p2_m1_p1
+ + coeff_I_m2_0_p1*data_m2_0_p1
+ + coeff_I_m1_0_p1*data_m1_0_p1
+ + coeff_I_0_0_p1*data_0_0_p1
+ + coeff_I_p1_0_p1*data_p1_0_p1
+ + coeff_I_p2_0_p1*data_p2_0_p1
+ + coeff_I_m2_p1_p1*data_m2_p1_p1
+ + coeff_I_m1_p1_p1*data_m1_p1_p1
+ + coeff_I_0_p1_p1*data_0_p1_p1
+ + coeff_I_p1_p1_p1*data_p1_p1_p1
+ + coeff_I_p2_p1_p1*data_p2_p1_p1
+ + coeff_I_m2_p2_p1*data_m2_p2_p1
+ + coeff_I_m1_p2_p1*data_m1_p2_p1
+ + coeff_I_0_p2_p1*data_0_p2_p1
+ + coeff_I_p1_p2_p1*data_p1_p2_p1
+ + coeff_I_p2_p2_p1*data_p2_p2_p1
+ + coeff_I_m2_m2_p2*data_m2_m2_p2
+ + coeff_I_m1_m2_p2*data_m1_m2_p2
+ + coeff_I_0_m2_p2*data_0_m2_p2
+ + coeff_I_p1_m2_p2*data_p1_m2_p2
+ + coeff_I_p2_m2_p2*data_p2_m2_p2
+ + coeff_I_m2_m1_p2*data_m2_m1_p2
+ + coeff_I_m1_m1_p2*data_m1_m1_p2
+ + coeff_I_0_m1_p2*data_0_m1_p2
+ + coeff_I_p1_m1_p2*data_p1_m1_p2
+ + coeff_I_p2_m1_p2*data_p2_m1_p2
+ + coeff_I_m2_0_p2*data_m2_0_p2
+ + coeff_I_m1_0_p2*data_m1_0_p2
+ + coeff_I_0_0_p2*data_0_0_p2
+ + coeff_I_p1_0_p2*data_p1_0_p2
+ + coeff_I_p2_0_p2*data_p2_0_p2
+ + coeff_I_m2_p1_p2*data_m2_p1_p2
+ + coeff_I_m1_p1_p2*data_m1_p1_p2
+ + coeff_I_0_p1_p2*data_0_p1_p2
+ + coeff_I_p1_p1_p2*data_p1_p1_p2
+ + coeff_I_p2_p1_p2*data_p2_p1_p2
+ + coeff_I_m2_p2_p2*data_m2_p2_p2
+ + coeff_I_m1_p2_p2*data_m1_p2_p2
+ + coeff_I_0_p2_p2*data_0_p2_p2
+ + coeff_I_p1_p2_p2*data_p1_p2_p2
+ + coeff_I_p2_p2_p2*data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dx.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dx.compute.c
new file mode 100644
index 0000000..013ae98
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dx.compute.c
@@ -0,0 +1,126 @@
+result =
+ coeff_dx_m2_m2_m2*data_m2_m2_m2
+ + coeff_dx_m1_m2_m2*data_m1_m2_m2
+ + coeff_dx_0_m2_m2*data_0_m2_m2
+ + coeff_dx_p1_m2_m2*data_p1_m2_m2
+ + coeff_dx_p2_m2_m2*data_p2_m2_m2
+ + coeff_dx_m2_m1_m2*data_m2_m1_m2
+ + coeff_dx_m1_m1_m2*data_m1_m1_m2
+ + coeff_dx_0_m1_m2*data_0_m1_m2
+ + coeff_dx_p1_m1_m2*data_p1_m1_m2
+ + coeff_dx_p2_m1_m2*data_p2_m1_m2
+ + coeff_dx_m2_0_m2*data_m2_0_m2
+ + coeff_dx_m1_0_m2*data_m1_0_m2
+ + coeff_dx_0_0_m2*data_0_0_m2
+ + coeff_dx_p1_0_m2*data_p1_0_m2
+ + coeff_dx_p2_0_m2*data_p2_0_m2
+ + coeff_dx_m2_p1_m2*data_m2_p1_m2
+ + coeff_dx_m1_p1_m2*data_m1_p1_m2
+ + coeff_dx_0_p1_m2*data_0_p1_m2
+ + coeff_dx_p1_p1_m2*data_p1_p1_m2
+ + coeff_dx_p2_p1_m2*data_p2_p1_m2
+ + coeff_dx_m2_p2_m2*data_m2_p2_m2
+ + coeff_dx_m1_p2_m2*data_m1_p2_m2
+ + coeff_dx_0_p2_m2*data_0_p2_m2
+ + coeff_dx_p1_p2_m2*data_p1_p2_m2
+ + coeff_dx_p2_p2_m2*data_p2_p2_m2
+ + coeff_dx_m2_m2_m1*data_m2_m2_m1
+ + coeff_dx_m1_m2_m1*data_m1_m2_m1
+ + coeff_dx_0_m2_m1*data_0_m2_m1
+ + coeff_dx_p1_m2_m1*data_p1_m2_m1
+ + coeff_dx_p2_m2_m1*data_p2_m2_m1
+ + coeff_dx_m2_m1_m1*data_m2_m1_m1
+ + coeff_dx_m1_m1_m1*data_m1_m1_m1
+ + coeff_dx_0_m1_m1*data_0_m1_m1
+ + coeff_dx_p1_m1_m1*data_p1_m1_m1
+ + coeff_dx_p2_m1_m1*data_p2_m1_m1
+ + coeff_dx_m2_0_m1*data_m2_0_m1
+ + coeff_dx_m1_0_m1*data_m1_0_m1
+ + coeff_dx_0_0_m1*data_0_0_m1
+ + coeff_dx_p1_0_m1*data_p1_0_m1
+ + coeff_dx_p2_0_m1*data_p2_0_m1
+ + coeff_dx_m2_p1_m1*data_m2_p1_m1
+ + coeff_dx_m1_p1_m1*data_m1_p1_m1
+ + coeff_dx_0_p1_m1*data_0_p1_m1
+ + coeff_dx_p1_p1_m1*data_p1_p1_m1
+ + coeff_dx_p2_p1_m1*data_p2_p1_m1
+ + coeff_dx_m2_p2_m1*data_m2_p2_m1
+ + coeff_dx_m1_p2_m1*data_m1_p2_m1
+ + coeff_dx_0_p2_m1*data_0_p2_m1
+ + coeff_dx_p1_p2_m1*data_p1_p2_m1
+ + coeff_dx_p2_p2_m1*data_p2_p2_m1
+ + coeff_dx_m2_m2_0*data_m2_m2_0
+ + coeff_dx_m1_m2_0*data_m1_m2_0
+ + coeff_dx_0_m2_0*data_0_m2_0
+ + coeff_dx_p1_m2_0*data_p1_m2_0
+ + coeff_dx_p2_m2_0*data_p2_m2_0
+ + coeff_dx_m2_m1_0*data_m2_m1_0
+ + coeff_dx_m1_m1_0*data_m1_m1_0
+ + coeff_dx_0_m1_0*data_0_m1_0
+ + coeff_dx_p1_m1_0*data_p1_m1_0
+ + coeff_dx_p2_m1_0*data_p2_m1_0
+ + coeff_dx_m2_0_0*data_m2_0_0
+ + coeff_dx_m1_0_0*data_m1_0_0
+ + coeff_dx_0_0_0*data_0_0_0
+ + coeff_dx_p1_0_0*data_p1_0_0
+ + coeff_dx_p2_0_0*data_p2_0_0
+ + coeff_dx_m2_p1_0*data_m2_p1_0
+ + coeff_dx_m1_p1_0*data_m1_p1_0
+ + coeff_dx_0_p1_0*data_0_p1_0
+ + coeff_dx_p1_p1_0*data_p1_p1_0
+ + coeff_dx_p2_p1_0*data_p2_p1_0
+ + coeff_dx_m2_p2_0*data_m2_p2_0
+ + coeff_dx_m1_p2_0*data_m1_p2_0
+ + coeff_dx_0_p2_0*data_0_p2_0
+ + coeff_dx_p1_p2_0*data_p1_p2_0
+ + coeff_dx_p2_p2_0*data_p2_p2_0
+ + coeff_dx_m2_m2_p1*data_m2_m2_p1
+ + coeff_dx_m1_m2_p1*data_m1_m2_p1
+ + coeff_dx_0_m2_p1*data_0_m2_p1
+ + coeff_dx_p1_m2_p1*data_p1_m2_p1
+ + coeff_dx_p2_m2_p1*data_p2_m2_p1
+ + coeff_dx_m2_m1_p1*data_m2_m1_p1
+ + coeff_dx_m1_m1_p1*data_m1_m1_p1
+ + coeff_dx_0_m1_p1*data_0_m1_p1
+ + coeff_dx_p1_m1_p1*data_p1_m1_p1
+ + coeff_dx_p2_m1_p1*data_p2_m1_p1
+ + coeff_dx_m2_0_p1*data_m2_0_p1
+ + coeff_dx_m1_0_p1*data_m1_0_p1
+ + coeff_dx_0_0_p1*data_0_0_p1
+ + coeff_dx_p1_0_p1*data_p1_0_p1
+ + coeff_dx_p2_0_p1*data_p2_0_p1
+ + coeff_dx_m2_p1_p1*data_m2_p1_p1
+ + coeff_dx_m1_p1_p1*data_m1_p1_p1
+ + coeff_dx_0_p1_p1*data_0_p1_p1
+ + coeff_dx_p1_p1_p1*data_p1_p1_p1
+ + coeff_dx_p2_p1_p1*data_p2_p1_p1
+ + coeff_dx_m2_p2_p1*data_m2_p2_p1
+ + coeff_dx_m1_p2_p1*data_m1_p2_p1
+ + coeff_dx_0_p2_p1*data_0_p2_p1
+ + coeff_dx_p1_p2_p1*data_p1_p2_p1
+ + coeff_dx_p2_p2_p1*data_p2_p2_p1
+ + coeff_dx_m2_m2_p2*data_m2_m2_p2
+ + coeff_dx_m1_m2_p2*data_m1_m2_p2
+ + coeff_dx_0_m2_p2*data_0_m2_p2
+ + coeff_dx_p1_m2_p2*data_p1_m2_p2
+ + coeff_dx_p2_m2_p2*data_p2_m2_p2
+ + coeff_dx_m2_m1_p2*data_m2_m1_p2
+ + coeff_dx_m1_m1_p2*data_m1_m1_p2
+ + coeff_dx_0_m1_p2*data_0_m1_p2
+ + coeff_dx_p1_m1_p2*data_p1_m1_p2
+ + coeff_dx_p2_m1_p2*data_p2_m1_p2
+ + coeff_dx_m2_0_p2*data_m2_0_p2
+ + coeff_dx_m1_0_p2*data_m1_0_p2
+ + coeff_dx_0_0_p2*data_0_0_p2
+ + coeff_dx_p1_0_p2*data_p1_0_p2
+ + coeff_dx_p2_0_p2*data_p2_0_p2
+ + coeff_dx_m2_p1_p2*data_m2_p1_p2
+ + coeff_dx_m1_p1_p2*data_m1_p1_p2
+ + coeff_dx_0_p1_p2*data_0_p1_p2
+ + coeff_dx_p1_p1_p2*data_p1_p1_p2
+ + coeff_dx_p2_p1_p2*data_p2_p1_p2
+ + coeff_dx_m2_p2_p2*data_m2_p2_p2
+ + coeff_dx_m1_p2_p2*data_m1_p2_p2
+ + coeff_dx_0_p2_p2*data_0_p2_p2
+ + coeff_dx_p1_p2_p2*data_p1_p2_p2
+ + coeff_dx_p2_p2_p2*data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dxx.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dxx.compute.c
new file mode 100644
index 0000000..bd0b7be
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dxx.compute.c
@@ -0,0 +1,126 @@
+result =
+ coeff_dxx_m2_m2_m2*data_m2_m2_m2
+ + coeff_dxx_m1_m2_m2*data_m1_m2_m2
+ + coeff_dxx_0_m2_m2*data_0_m2_m2
+ + coeff_dxx_p1_m2_m2*data_p1_m2_m2
+ + coeff_dxx_p2_m2_m2*data_p2_m2_m2
+ + coeff_dxx_m2_m1_m2*data_m2_m1_m2
+ + coeff_dxx_m1_m1_m2*data_m1_m1_m2
+ + coeff_dxx_0_m1_m2*data_0_m1_m2
+ + coeff_dxx_p1_m1_m2*data_p1_m1_m2
+ + coeff_dxx_p2_m1_m2*data_p2_m1_m2
+ + coeff_dxx_m2_0_m2*data_m2_0_m2
+ + coeff_dxx_m1_0_m2*data_m1_0_m2
+ + coeff_dxx_0_0_m2*data_0_0_m2
+ + coeff_dxx_p1_0_m2*data_p1_0_m2
+ + coeff_dxx_p2_0_m2*data_p2_0_m2
+ + coeff_dxx_m2_p1_m2*data_m2_p1_m2
+ + coeff_dxx_m1_p1_m2*data_m1_p1_m2
+ + coeff_dxx_0_p1_m2*data_0_p1_m2
+ + coeff_dxx_p1_p1_m2*data_p1_p1_m2
+ + coeff_dxx_p2_p1_m2*data_p2_p1_m2
+ + coeff_dxx_m2_p2_m2*data_m2_p2_m2
+ + coeff_dxx_m1_p2_m2*data_m1_p2_m2
+ + coeff_dxx_0_p2_m2*data_0_p2_m2
+ + coeff_dxx_p1_p2_m2*data_p1_p2_m2
+ + coeff_dxx_p2_p2_m2*data_p2_p2_m2
+ + coeff_dxx_m2_m2_m1*data_m2_m2_m1
+ + coeff_dxx_m1_m2_m1*data_m1_m2_m1
+ + coeff_dxx_0_m2_m1*data_0_m2_m1
+ + coeff_dxx_p1_m2_m1*data_p1_m2_m1
+ + coeff_dxx_p2_m2_m1*data_p2_m2_m1
+ + coeff_dxx_m2_m1_m1*data_m2_m1_m1
+ + coeff_dxx_m1_m1_m1*data_m1_m1_m1
+ + coeff_dxx_0_m1_m1*data_0_m1_m1
+ + coeff_dxx_p1_m1_m1*data_p1_m1_m1
+ + coeff_dxx_p2_m1_m1*data_p2_m1_m1
+ + coeff_dxx_m2_0_m1*data_m2_0_m1
+ + coeff_dxx_m1_0_m1*data_m1_0_m1
+ + coeff_dxx_0_0_m1*data_0_0_m1
+ + coeff_dxx_p1_0_m1*data_p1_0_m1
+ + coeff_dxx_p2_0_m1*data_p2_0_m1
+ + coeff_dxx_m2_p1_m1*data_m2_p1_m1
+ + coeff_dxx_m1_p1_m1*data_m1_p1_m1
+ + coeff_dxx_0_p1_m1*data_0_p1_m1
+ + coeff_dxx_p1_p1_m1*data_p1_p1_m1
+ + coeff_dxx_p2_p1_m1*data_p2_p1_m1
+ + coeff_dxx_m2_p2_m1*data_m2_p2_m1
+ + coeff_dxx_m1_p2_m1*data_m1_p2_m1
+ + coeff_dxx_0_p2_m1*data_0_p2_m1
+ + coeff_dxx_p1_p2_m1*data_p1_p2_m1
+ + coeff_dxx_p2_p2_m1*data_p2_p2_m1
+ + coeff_dxx_m2_m2_0*data_m2_m2_0
+ + coeff_dxx_m1_m2_0*data_m1_m2_0
+ + coeff_dxx_0_m2_0*data_0_m2_0
+ + coeff_dxx_p1_m2_0*data_p1_m2_0
+ + coeff_dxx_p2_m2_0*data_p2_m2_0
+ + coeff_dxx_m2_m1_0*data_m2_m1_0
+ + coeff_dxx_m1_m1_0*data_m1_m1_0
+ + coeff_dxx_0_m1_0*data_0_m1_0
+ + coeff_dxx_p1_m1_0*data_p1_m1_0
+ + coeff_dxx_p2_m1_0*data_p2_m1_0
+ + coeff_dxx_m2_0_0*data_m2_0_0
+ + coeff_dxx_m1_0_0*data_m1_0_0
+ + coeff_dxx_0_0_0*data_0_0_0
+ + coeff_dxx_p1_0_0*data_p1_0_0
+ + coeff_dxx_p2_0_0*data_p2_0_0
+ + coeff_dxx_m2_p1_0*data_m2_p1_0
+ + coeff_dxx_m1_p1_0*data_m1_p1_0
+ + coeff_dxx_0_p1_0*data_0_p1_0
+ + coeff_dxx_p1_p1_0*data_p1_p1_0
+ + coeff_dxx_p2_p1_0*data_p2_p1_0
+ + coeff_dxx_m2_p2_0*data_m2_p2_0
+ + coeff_dxx_m1_p2_0*data_m1_p2_0
+ + coeff_dxx_0_p2_0*data_0_p2_0
+ + coeff_dxx_p1_p2_0*data_p1_p2_0
+ + coeff_dxx_p2_p2_0*data_p2_p2_0
+ + coeff_dxx_m2_m2_p1*data_m2_m2_p1
+ + coeff_dxx_m1_m2_p1*data_m1_m2_p1
+ + coeff_dxx_0_m2_p1*data_0_m2_p1
+ + coeff_dxx_p1_m2_p1*data_p1_m2_p1
+ + coeff_dxx_p2_m2_p1*data_p2_m2_p1
+ + coeff_dxx_m2_m1_p1*data_m2_m1_p1
+ + coeff_dxx_m1_m1_p1*data_m1_m1_p1
+ + coeff_dxx_0_m1_p1*data_0_m1_p1
+ + coeff_dxx_p1_m1_p1*data_p1_m1_p1
+ + coeff_dxx_p2_m1_p1*data_p2_m1_p1
+ + coeff_dxx_m2_0_p1*data_m2_0_p1
+ + coeff_dxx_m1_0_p1*data_m1_0_p1
+ + coeff_dxx_0_0_p1*data_0_0_p1
+ + coeff_dxx_p1_0_p1*data_p1_0_p1
+ + coeff_dxx_p2_0_p1*data_p2_0_p1
+ + coeff_dxx_m2_p1_p1*data_m2_p1_p1
+ + coeff_dxx_m1_p1_p1*data_m1_p1_p1
+ + coeff_dxx_0_p1_p1*data_0_p1_p1
+ + coeff_dxx_p1_p1_p1*data_p1_p1_p1
+ + coeff_dxx_p2_p1_p1*data_p2_p1_p1
+ + coeff_dxx_m2_p2_p1*data_m2_p2_p1
+ + coeff_dxx_m1_p2_p1*data_m1_p2_p1
+ + coeff_dxx_0_p2_p1*data_0_p2_p1
+ + coeff_dxx_p1_p2_p1*data_p1_p2_p1
+ + coeff_dxx_p2_p2_p1*data_p2_p2_p1
+ + coeff_dxx_m2_m2_p2*data_m2_m2_p2
+ + coeff_dxx_m1_m2_p2*data_m1_m2_p2
+ + coeff_dxx_0_m2_p2*data_0_m2_p2
+ + coeff_dxx_p1_m2_p2*data_p1_m2_p2
+ + coeff_dxx_p2_m2_p2*data_p2_m2_p2
+ + coeff_dxx_m2_m1_p2*data_m2_m1_p2
+ + coeff_dxx_m1_m1_p2*data_m1_m1_p2
+ + coeff_dxx_0_m1_p2*data_0_m1_p2
+ + coeff_dxx_p1_m1_p2*data_p1_m1_p2
+ + coeff_dxx_p2_m1_p2*data_p2_m1_p2
+ + coeff_dxx_m2_0_p2*data_m2_0_p2
+ + coeff_dxx_m1_0_p2*data_m1_0_p2
+ + coeff_dxx_0_0_p2*data_0_0_p2
+ + coeff_dxx_p1_0_p2*data_p1_0_p2
+ + coeff_dxx_p2_0_p2*data_p2_0_p2
+ + coeff_dxx_m2_p1_p2*data_m2_p1_p2
+ + coeff_dxx_m1_p1_p2*data_m1_p1_p2
+ + coeff_dxx_0_p1_p2*data_0_p1_p2
+ + coeff_dxx_p1_p1_p2*data_p1_p1_p2
+ + coeff_dxx_p2_p1_p2*data_p2_p1_p2
+ + coeff_dxx_m2_p2_p2*data_m2_p2_p2
+ + coeff_dxx_m1_p2_p2*data_m1_p2_p2
+ + coeff_dxx_0_p2_p2*data_0_p2_p2
+ + coeff_dxx_p1_p2_p2*data_p1_p2_p2
+ + coeff_dxx_p2_p2_p2*data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dxy.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dxy.compute.c
new file mode 100644
index 0000000..8e202fd
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dxy.compute.c
@@ -0,0 +1,126 @@
+result =
+ coeff_dxy_m2_m2_m2*data_m2_m2_m2
+ + coeff_dxy_m1_m2_m2*data_m1_m2_m2
+ + coeff_dxy_0_m2_m2*data_0_m2_m2
+ + coeff_dxy_p1_m2_m2*data_p1_m2_m2
+ + coeff_dxy_p2_m2_m2*data_p2_m2_m2
+ + coeff_dxy_m2_m1_m2*data_m2_m1_m2
+ + coeff_dxy_m1_m1_m2*data_m1_m1_m2
+ + coeff_dxy_0_m1_m2*data_0_m1_m2
+ + coeff_dxy_p1_m1_m2*data_p1_m1_m2
+ + coeff_dxy_p2_m1_m2*data_p2_m1_m2
+ + coeff_dxy_m2_0_m2*data_m2_0_m2
+ + coeff_dxy_m1_0_m2*data_m1_0_m2
+ + coeff_dxy_0_0_m2*data_0_0_m2
+ + coeff_dxy_p1_0_m2*data_p1_0_m2
+ + coeff_dxy_p2_0_m2*data_p2_0_m2
+ + coeff_dxy_m2_p1_m2*data_m2_p1_m2
+ + coeff_dxy_m1_p1_m2*data_m1_p1_m2
+ + coeff_dxy_0_p1_m2*data_0_p1_m2
+ + coeff_dxy_p1_p1_m2*data_p1_p1_m2
+ + coeff_dxy_p2_p1_m2*data_p2_p1_m2
+ + coeff_dxy_m2_p2_m2*data_m2_p2_m2
+ + coeff_dxy_m1_p2_m2*data_m1_p2_m2
+ + coeff_dxy_0_p2_m2*data_0_p2_m2
+ + coeff_dxy_p1_p2_m2*data_p1_p2_m2
+ + coeff_dxy_p2_p2_m2*data_p2_p2_m2
+ + coeff_dxy_m2_m2_m1*data_m2_m2_m1
+ + coeff_dxy_m1_m2_m1*data_m1_m2_m1
+ + coeff_dxy_0_m2_m1*data_0_m2_m1
+ + coeff_dxy_p1_m2_m1*data_p1_m2_m1
+ + coeff_dxy_p2_m2_m1*data_p2_m2_m1
+ + coeff_dxy_m2_m1_m1*data_m2_m1_m1
+ + coeff_dxy_m1_m1_m1*data_m1_m1_m1
+ + coeff_dxy_0_m1_m1*data_0_m1_m1
+ + coeff_dxy_p1_m1_m1*data_p1_m1_m1
+ + coeff_dxy_p2_m1_m1*data_p2_m1_m1
+ + coeff_dxy_m2_0_m1*data_m2_0_m1
+ + coeff_dxy_m1_0_m1*data_m1_0_m1
+ + coeff_dxy_0_0_m1*data_0_0_m1
+ + coeff_dxy_p1_0_m1*data_p1_0_m1
+ + coeff_dxy_p2_0_m1*data_p2_0_m1
+ + coeff_dxy_m2_p1_m1*data_m2_p1_m1
+ + coeff_dxy_m1_p1_m1*data_m1_p1_m1
+ + coeff_dxy_0_p1_m1*data_0_p1_m1
+ + coeff_dxy_p1_p1_m1*data_p1_p1_m1
+ + coeff_dxy_p2_p1_m1*data_p2_p1_m1
+ + coeff_dxy_m2_p2_m1*data_m2_p2_m1
+ + coeff_dxy_m1_p2_m1*data_m1_p2_m1
+ + coeff_dxy_0_p2_m1*data_0_p2_m1
+ + coeff_dxy_p1_p2_m1*data_p1_p2_m1
+ + coeff_dxy_p2_p2_m1*data_p2_p2_m1
+ + coeff_dxy_m2_m2_0*data_m2_m2_0
+ + coeff_dxy_m1_m2_0*data_m1_m2_0
+ + coeff_dxy_0_m2_0*data_0_m2_0
+ + coeff_dxy_p1_m2_0*data_p1_m2_0
+ + coeff_dxy_p2_m2_0*data_p2_m2_0
+ + coeff_dxy_m2_m1_0*data_m2_m1_0
+ + coeff_dxy_m1_m1_0*data_m1_m1_0
+ + coeff_dxy_0_m1_0*data_0_m1_0
+ + coeff_dxy_p1_m1_0*data_p1_m1_0
+ + coeff_dxy_p2_m1_0*data_p2_m1_0
+ + coeff_dxy_m2_0_0*data_m2_0_0
+ + coeff_dxy_m1_0_0*data_m1_0_0
+ + coeff_dxy_0_0_0*data_0_0_0
+ + coeff_dxy_p1_0_0*data_p1_0_0
+ + coeff_dxy_p2_0_0*data_p2_0_0
+ + coeff_dxy_m2_p1_0*data_m2_p1_0
+ + coeff_dxy_m1_p1_0*data_m1_p1_0
+ + coeff_dxy_0_p1_0*data_0_p1_0
+ + coeff_dxy_p1_p1_0*data_p1_p1_0
+ + coeff_dxy_p2_p1_0*data_p2_p1_0
+ + coeff_dxy_m2_p2_0*data_m2_p2_0
+ + coeff_dxy_m1_p2_0*data_m1_p2_0
+ + coeff_dxy_0_p2_0*data_0_p2_0
+ + coeff_dxy_p1_p2_0*data_p1_p2_0
+ + coeff_dxy_p2_p2_0*data_p2_p2_0
+ + coeff_dxy_m2_m2_p1*data_m2_m2_p1
+ + coeff_dxy_m1_m2_p1*data_m1_m2_p1
+ + coeff_dxy_0_m2_p1*data_0_m2_p1
+ + coeff_dxy_p1_m2_p1*data_p1_m2_p1
+ + coeff_dxy_p2_m2_p1*data_p2_m2_p1
+ + coeff_dxy_m2_m1_p1*data_m2_m1_p1
+ + coeff_dxy_m1_m1_p1*data_m1_m1_p1
+ + coeff_dxy_0_m1_p1*data_0_m1_p1
+ + coeff_dxy_p1_m1_p1*data_p1_m1_p1
+ + coeff_dxy_p2_m1_p1*data_p2_m1_p1
+ + coeff_dxy_m2_0_p1*data_m2_0_p1
+ + coeff_dxy_m1_0_p1*data_m1_0_p1
+ + coeff_dxy_0_0_p1*data_0_0_p1
+ + coeff_dxy_p1_0_p1*data_p1_0_p1
+ + coeff_dxy_p2_0_p1*data_p2_0_p1
+ + coeff_dxy_m2_p1_p1*data_m2_p1_p1
+ + coeff_dxy_m1_p1_p1*data_m1_p1_p1
+ + coeff_dxy_0_p1_p1*data_0_p1_p1
+ + coeff_dxy_p1_p1_p1*data_p1_p1_p1
+ + coeff_dxy_p2_p1_p1*data_p2_p1_p1
+ + coeff_dxy_m2_p2_p1*data_m2_p2_p1
+ + coeff_dxy_m1_p2_p1*data_m1_p2_p1
+ + coeff_dxy_0_p2_p1*data_0_p2_p1
+ + coeff_dxy_p1_p2_p1*data_p1_p2_p1
+ + coeff_dxy_p2_p2_p1*data_p2_p2_p1
+ + coeff_dxy_m2_m2_p2*data_m2_m2_p2
+ + coeff_dxy_m1_m2_p2*data_m1_m2_p2
+ + coeff_dxy_0_m2_p2*data_0_m2_p2
+ + coeff_dxy_p1_m2_p2*data_p1_m2_p2
+ + coeff_dxy_p2_m2_p2*data_p2_m2_p2
+ + coeff_dxy_m2_m1_p2*data_m2_m1_p2
+ + coeff_dxy_m1_m1_p2*data_m1_m1_p2
+ + coeff_dxy_0_m1_p2*data_0_m1_p2
+ + coeff_dxy_p1_m1_p2*data_p1_m1_p2
+ + coeff_dxy_p2_m1_p2*data_p2_m1_p2
+ + coeff_dxy_m2_0_p2*data_m2_0_p2
+ + coeff_dxy_m1_0_p2*data_m1_0_p2
+ + coeff_dxy_0_0_p2*data_0_0_p2
+ + coeff_dxy_p1_0_p2*data_p1_0_p2
+ + coeff_dxy_p2_0_p2*data_p2_0_p2
+ + coeff_dxy_m2_p1_p2*data_m2_p1_p2
+ + coeff_dxy_m1_p1_p2*data_m1_p1_p2
+ + coeff_dxy_0_p1_p2*data_0_p1_p2
+ + coeff_dxy_p1_p1_p2*data_p1_p1_p2
+ + coeff_dxy_p2_p1_p2*data_p2_p1_p2
+ + coeff_dxy_m2_p2_p2*data_m2_p2_p2
+ + coeff_dxy_m1_p2_p2*data_m1_p2_p2
+ + coeff_dxy_0_p2_p2*data_0_p2_p2
+ + coeff_dxy_p1_p2_p2*data_p1_p2_p2
+ + coeff_dxy_p2_p2_p2*data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dxz.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dxz.compute.c
new file mode 100644
index 0000000..5789505
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dxz.compute.c
@@ -0,0 +1,126 @@
+result =
+ coeff_dxz_m2_m2_m2*data_m2_m2_m2
+ + coeff_dxz_m1_m2_m2*data_m1_m2_m2
+ + coeff_dxz_0_m2_m2*data_0_m2_m2
+ + coeff_dxz_p1_m2_m2*data_p1_m2_m2
+ + coeff_dxz_p2_m2_m2*data_p2_m2_m2
+ + coeff_dxz_m2_m1_m2*data_m2_m1_m2
+ + coeff_dxz_m1_m1_m2*data_m1_m1_m2
+ + coeff_dxz_0_m1_m2*data_0_m1_m2
+ + coeff_dxz_p1_m1_m2*data_p1_m1_m2
+ + coeff_dxz_p2_m1_m2*data_p2_m1_m2
+ + coeff_dxz_m2_0_m2*data_m2_0_m2
+ + coeff_dxz_m1_0_m2*data_m1_0_m2
+ + coeff_dxz_0_0_m2*data_0_0_m2
+ + coeff_dxz_p1_0_m2*data_p1_0_m2
+ + coeff_dxz_p2_0_m2*data_p2_0_m2
+ + coeff_dxz_m2_p1_m2*data_m2_p1_m2
+ + coeff_dxz_m1_p1_m2*data_m1_p1_m2
+ + coeff_dxz_0_p1_m2*data_0_p1_m2
+ + coeff_dxz_p1_p1_m2*data_p1_p1_m2
+ + coeff_dxz_p2_p1_m2*data_p2_p1_m2
+ + coeff_dxz_m2_p2_m2*data_m2_p2_m2
+ + coeff_dxz_m1_p2_m2*data_m1_p2_m2
+ + coeff_dxz_0_p2_m2*data_0_p2_m2
+ + coeff_dxz_p1_p2_m2*data_p1_p2_m2
+ + coeff_dxz_p2_p2_m2*data_p2_p2_m2
+ + coeff_dxz_m2_m2_m1*data_m2_m2_m1
+ + coeff_dxz_m1_m2_m1*data_m1_m2_m1
+ + coeff_dxz_0_m2_m1*data_0_m2_m1
+ + coeff_dxz_p1_m2_m1*data_p1_m2_m1
+ + coeff_dxz_p2_m2_m1*data_p2_m2_m1
+ + coeff_dxz_m2_m1_m1*data_m2_m1_m1
+ + coeff_dxz_m1_m1_m1*data_m1_m1_m1
+ + coeff_dxz_0_m1_m1*data_0_m1_m1
+ + coeff_dxz_p1_m1_m1*data_p1_m1_m1
+ + coeff_dxz_p2_m1_m1*data_p2_m1_m1
+ + coeff_dxz_m2_0_m1*data_m2_0_m1
+ + coeff_dxz_m1_0_m1*data_m1_0_m1
+ + coeff_dxz_0_0_m1*data_0_0_m1
+ + coeff_dxz_p1_0_m1*data_p1_0_m1
+ + coeff_dxz_p2_0_m1*data_p2_0_m1
+ + coeff_dxz_m2_p1_m1*data_m2_p1_m1
+ + coeff_dxz_m1_p1_m1*data_m1_p1_m1
+ + coeff_dxz_0_p1_m1*data_0_p1_m1
+ + coeff_dxz_p1_p1_m1*data_p1_p1_m1
+ + coeff_dxz_p2_p1_m1*data_p2_p1_m1
+ + coeff_dxz_m2_p2_m1*data_m2_p2_m1
+ + coeff_dxz_m1_p2_m1*data_m1_p2_m1
+ + coeff_dxz_0_p2_m1*data_0_p2_m1
+ + coeff_dxz_p1_p2_m1*data_p1_p2_m1
+ + coeff_dxz_p2_p2_m1*data_p2_p2_m1
+ + coeff_dxz_m2_m2_0*data_m2_m2_0
+ + coeff_dxz_m1_m2_0*data_m1_m2_0
+ + coeff_dxz_0_m2_0*data_0_m2_0
+ + coeff_dxz_p1_m2_0*data_p1_m2_0
+ + coeff_dxz_p2_m2_0*data_p2_m2_0
+ + coeff_dxz_m2_m1_0*data_m2_m1_0
+ + coeff_dxz_m1_m1_0*data_m1_m1_0
+ + coeff_dxz_0_m1_0*data_0_m1_0
+ + coeff_dxz_p1_m1_0*data_p1_m1_0
+ + coeff_dxz_p2_m1_0*data_p2_m1_0
+ + coeff_dxz_m2_0_0*data_m2_0_0
+ + coeff_dxz_m1_0_0*data_m1_0_0
+ + coeff_dxz_0_0_0*data_0_0_0
+ + coeff_dxz_p1_0_0*data_p1_0_0
+ + coeff_dxz_p2_0_0*data_p2_0_0
+ + coeff_dxz_m2_p1_0*data_m2_p1_0
+ + coeff_dxz_m1_p1_0*data_m1_p1_0
+ + coeff_dxz_0_p1_0*data_0_p1_0
+ + coeff_dxz_p1_p1_0*data_p1_p1_0
+ + coeff_dxz_p2_p1_0*data_p2_p1_0
+ + coeff_dxz_m2_p2_0*data_m2_p2_0
+ + coeff_dxz_m1_p2_0*data_m1_p2_0
+ + coeff_dxz_0_p2_0*data_0_p2_0
+ + coeff_dxz_p1_p2_0*data_p1_p2_0
+ + coeff_dxz_p2_p2_0*data_p2_p2_0
+ + coeff_dxz_m2_m2_p1*data_m2_m2_p1
+ + coeff_dxz_m1_m2_p1*data_m1_m2_p1
+ + coeff_dxz_0_m2_p1*data_0_m2_p1
+ + coeff_dxz_p1_m2_p1*data_p1_m2_p1
+ + coeff_dxz_p2_m2_p1*data_p2_m2_p1
+ + coeff_dxz_m2_m1_p1*data_m2_m1_p1
+ + coeff_dxz_m1_m1_p1*data_m1_m1_p1
+ + coeff_dxz_0_m1_p1*data_0_m1_p1
+ + coeff_dxz_p1_m1_p1*data_p1_m1_p1
+ + coeff_dxz_p2_m1_p1*data_p2_m1_p1
+ + coeff_dxz_m2_0_p1*data_m2_0_p1
+ + coeff_dxz_m1_0_p1*data_m1_0_p1
+ + coeff_dxz_0_0_p1*data_0_0_p1
+ + coeff_dxz_p1_0_p1*data_p1_0_p1
+ + coeff_dxz_p2_0_p1*data_p2_0_p1
+ + coeff_dxz_m2_p1_p1*data_m2_p1_p1
+ + coeff_dxz_m1_p1_p1*data_m1_p1_p1
+ + coeff_dxz_0_p1_p1*data_0_p1_p1
+ + coeff_dxz_p1_p1_p1*data_p1_p1_p1
+ + coeff_dxz_p2_p1_p1*data_p2_p1_p1
+ + coeff_dxz_m2_p2_p1*data_m2_p2_p1
+ + coeff_dxz_m1_p2_p1*data_m1_p2_p1
+ + coeff_dxz_0_p2_p1*data_0_p2_p1
+ + coeff_dxz_p1_p2_p1*data_p1_p2_p1
+ + coeff_dxz_p2_p2_p1*data_p2_p2_p1
+ + coeff_dxz_m2_m2_p2*data_m2_m2_p2
+ + coeff_dxz_m1_m2_p2*data_m1_m2_p2
+ + coeff_dxz_0_m2_p2*data_0_m2_p2
+ + coeff_dxz_p1_m2_p2*data_p1_m2_p2
+ + coeff_dxz_p2_m2_p2*data_p2_m2_p2
+ + coeff_dxz_m2_m1_p2*data_m2_m1_p2
+ + coeff_dxz_m1_m1_p2*data_m1_m1_p2
+ + coeff_dxz_0_m1_p2*data_0_m1_p2
+ + coeff_dxz_p1_m1_p2*data_p1_m1_p2
+ + coeff_dxz_p2_m1_p2*data_p2_m1_p2
+ + coeff_dxz_m2_0_p2*data_m2_0_p2
+ + coeff_dxz_m1_0_p2*data_m1_0_p2
+ + coeff_dxz_0_0_p2*data_0_0_p2
+ + coeff_dxz_p1_0_p2*data_p1_0_p2
+ + coeff_dxz_p2_0_p2*data_p2_0_p2
+ + coeff_dxz_m2_p1_p2*data_m2_p1_p2
+ + coeff_dxz_m1_p1_p2*data_m1_p1_p2
+ + coeff_dxz_0_p1_p2*data_0_p1_p2
+ + coeff_dxz_p1_p1_p2*data_p1_p1_p2
+ + coeff_dxz_p2_p1_p2*data_p2_p1_p2
+ + coeff_dxz_m2_p2_p2*data_m2_p2_p2
+ + coeff_dxz_m1_p2_p2*data_m1_p2_p2
+ + coeff_dxz_0_p2_p2*data_0_p2_p2
+ + coeff_dxz_p1_p2_p2*data_p1_p2_p2
+ + coeff_dxz_p2_p2_p2*data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dy.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dy.compute.c
new file mode 100644
index 0000000..af7007a
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dy.compute.c
@@ -0,0 +1,126 @@
+result =
+ coeff_dy_m2_m2_m2*data_m2_m2_m2
+ + coeff_dy_m1_m2_m2*data_m1_m2_m2
+ + coeff_dy_0_m2_m2*data_0_m2_m2
+ + coeff_dy_p1_m2_m2*data_p1_m2_m2
+ + coeff_dy_p2_m2_m2*data_p2_m2_m2
+ + coeff_dy_m2_m1_m2*data_m2_m1_m2
+ + coeff_dy_m1_m1_m2*data_m1_m1_m2
+ + coeff_dy_0_m1_m2*data_0_m1_m2
+ + coeff_dy_p1_m1_m2*data_p1_m1_m2
+ + coeff_dy_p2_m1_m2*data_p2_m1_m2
+ + coeff_dy_m2_0_m2*data_m2_0_m2
+ + coeff_dy_m1_0_m2*data_m1_0_m2
+ + coeff_dy_0_0_m2*data_0_0_m2
+ + coeff_dy_p1_0_m2*data_p1_0_m2
+ + coeff_dy_p2_0_m2*data_p2_0_m2
+ + coeff_dy_m2_p1_m2*data_m2_p1_m2
+ + coeff_dy_m1_p1_m2*data_m1_p1_m2
+ + coeff_dy_0_p1_m2*data_0_p1_m2
+ + coeff_dy_p1_p1_m2*data_p1_p1_m2
+ + coeff_dy_p2_p1_m2*data_p2_p1_m2
+ + coeff_dy_m2_p2_m2*data_m2_p2_m2
+ + coeff_dy_m1_p2_m2*data_m1_p2_m2
+ + coeff_dy_0_p2_m2*data_0_p2_m2
+ + coeff_dy_p1_p2_m2*data_p1_p2_m2
+ + coeff_dy_p2_p2_m2*data_p2_p2_m2
+ + coeff_dy_m2_m2_m1*data_m2_m2_m1
+ + coeff_dy_m1_m2_m1*data_m1_m2_m1
+ + coeff_dy_0_m2_m1*data_0_m2_m1
+ + coeff_dy_p1_m2_m1*data_p1_m2_m1
+ + coeff_dy_p2_m2_m1*data_p2_m2_m1
+ + coeff_dy_m2_m1_m1*data_m2_m1_m1
+ + coeff_dy_m1_m1_m1*data_m1_m1_m1
+ + coeff_dy_0_m1_m1*data_0_m1_m1
+ + coeff_dy_p1_m1_m1*data_p1_m1_m1
+ + coeff_dy_p2_m1_m1*data_p2_m1_m1
+ + coeff_dy_m2_0_m1*data_m2_0_m1
+ + coeff_dy_m1_0_m1*data_m1_0_m1
+ + coeff_dy_0_0_m1*data_0_0_m1
+ + coeff_dy_p1_0_m1*data_p1_0_m1
+ + coeff_dy_p2_0_m1*data_p2_0_m1
+ + coeff_dy_m2_p1_m1*data_m2_p1_m1
+ + coeff_dy_m1_p1_m1*data_m1_p1_m1
+ + coeff_dy_0_p1_m1*data_0_p1_m1
+ + coeff_dy_p1_p1_m1*data_p1_p1_m1
+ + coeff_dy_p2_p1_m1*data_p2_p1_m1
+ + coeff_dy_m2_p2_m1*data_m2_p2_m1
+ + coeff_dy_m1_p2_m1*data_m1_p2_m1
+ + coeff_dy_0_p2_m1*data_0_p2_m1
+ + coeff_dy_p1_p2_m1*data_p1_p2_m1
+ + coeff_dy_p2_p2_m1*data_p2_p2_m1
+ + coeff_dy_m2_m2_0*data_m2_m2_0
+ + coeff_dy_m1_m2_0*data_m1_m2_0
+ + coeff_dy_0_m2_0*data_0_m2_0
+ + coeff_dy_p1_m2_0*data_p1_m2_0
+ + coeff_dy_p2_m2_0*data_p2_m2_0
+ + coeff_dy_m2_m1_0*data_m2_m1_0
+ + coeff_dy_m1_m1_0*data_m1_m1_0
+ + coeff_dy_0_m1_0*data_0_m1_0
+ + coeff_dy_p1_m1_0*data_p1_m1_0
+ + coeff_dy_p2_m1_0*data_p2_m1_0
+ + coeff_dy_m2_0_0*data_m2_0_0
+ + coeff_dy_m1_0_0*data_m1_0_0
+ + coeff_dy_0_0_0*data_0_0_0
+ + coeff_dy_p1_0_0*data_p1_0_0
+ + coeff_dy_p2_0_0*data_p2_0_0
+ + coeff_dy_m2_p1_0*data_m2_p1_0
+ + coeff_dy_m1_p1_0*data_m1_p1_0
+ + coeff_dy_0_p1_0*data_0_p1_0
+ + coeff_dy_p1_p1_0*data_p1_p1_0
+ + coeff_dy_p2_p1_0*data_p2_p1_0
+ + coeff_dy_m2_p2_0*data_m2_p2_0
+ + coeff_dy_m1_p2_0*data_m1_p2_0
+ + coeff_dy_0_p2_0*data_0_p2_0
+ + coeff_dy_p1_p2_0*data_p1_p2_0
+ + coeff_dy_p2_p2_0*data_p2_p2_0
+ + coeff_dy_m2_m2_p1*data_m2_m2_p1
+ + coeff_dy_m1_m2_p1*data_m1_m2_p1
+ + coeff_dy_0_m2_p1*data_0_m2_p1
+ + coeff_dy_p1_m2_p1*data_p1_m2_p1
+ + coeff_dy_p2_m2_p1*data_p2_m2_p1
+ + coeff_dy_m2_m1_p1*data_m2_m1_p1
+ + coeff_dy_m1_m1_p1*data_m1_m1_p1
+ + coeff_dy_0_m1_p1*data_0_m1_p1
+ + coeff_dy_p1_m1_p1*data_p1_m1_p1
+ + coeff_dy_p2_m1_p1*data_p2_m1_p1
+ + coeff_dy_m2_0_p1*data_m2_0_p1
+ + coeff_dy_m1_0_p1*data_m1_0_p1
+ + coeff_dy_0_0_p1*data_0_0_p1
+ + coeff_dy_p1_0_p1*data_p1_0_p1
+ + coeff_dy_p2_0_p1*data_p2_0_p1
+ + coeff_dy_m2_p1_p1*data_m2_p1_p1
+ + coeff_dy_m1_p1_p1*data_m1_p1_p1
+ + coeff_dy_0_p1_p1*data_0_p1_p1
+ + coeff_dy_p1_p1_p1*data_p1_p1_p1
+ + coeff_dy_p2_p1_p1*data_p2_p1_p1
+ + coeff_dy_m2_p2_p1*data_m2_p2_p1
+ + coeff_dy_m1_p2_p1*data_m1_p2_p1
+ + coeff_dy_0_p2_p1*data_0_p2_p1
+ + coeff_dy_p1_p2_p1*data_p1_p2_p1
+ + coeff_dy_p2_p2_p1*data_p2_p2_p1
+ + coeff_dy_m2_m2_p2*data_m2_m2_p2
+ + coeff_dy_m1_m2_p2*data_m1_m2_p2
+ + coeff_dy_0_m2_p2*data_0_m2_p2
+ + coeff_dy_p1_m2_p2*data_p1_m2_p2
+ + coeff_dy_p2_m2_p2*data_p2_m2_p2
+ + coeff_dy_m2_m1_p2*data_m2_m1_p2
+ + coeff_dy_m1_m1_p2*data_m1_m1_p2
+ + coeff_dy_0_m1_p2*data_0_m1_p2
+ + coeff_dy_p1_m1_p2*data_p1_m1_p2
+ + coeff_dy_p2_m1_p2*data_p2_m1_p2
+ + coeff_dy_m2_0_p2*data_m2_0_p2
+ + coeff_dy_m1_0_p2*data_m1_0_p2
+ + coeff_dy_0_0_p2*data_0_0_p2
+ + coeff_dy_p1_0_p2*data_p1_0_p2
+ + coeff_dy_p2_0_p2*data_p2_0_p2
+ + coeff_dy_m2_p1_p2*data_m2_p1_p2
+ + coeff_dy_m1_p1_p2*data_m1_p1_p2
+ + coeff_dy_0_p1_p2*data_0_p1_p2
+ + coeff_dy_p1_p1_p2*data_p1_p1_p2
+ + coeff_dy_p2_p1_p2*data_p2_p1_p2
+ + coeff_dy_m2_p2_p2*data_m2_p2_p2
+ + coeff_dy_m1_p2_p2*data_m1_p2_p2
+ + coeff_dy_0_p2_p2*data_0_p2_p2
+ + coeff_dy_p1_p2_p2*data_p1_p2_p2
+ + coeff_dy_p2_p2_p2*data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dyy.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dyy.compute.c
new file mode 100644
index 0000000..55088e7
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dyy.compute.c
@@ -0,0 +1,126 @@
+result =
+ coeff_dyy_m2_m2_m2*data_m2_m2_m2
+ + coeff_dyy_m1_m2_m2*data_m1_m2_m2
+ + coeff_dyy_0_m2_m2*data_0_m2_m2
+ + coeff_dyy_p1_m2_m2*data_p1_m2_m2
+ + coeff_dyy_p2_m2_m2*data_p2_m2_m2
+ + coeff_dyy_m2_m1_m2*data_m2_m1_m2
+ + coeff_dyy_m1_m1_m2*data_m1_m1_m2
+ + coeff_dyy_0_m1_m2*data_0_m1_m2
+ + coeff_dyy_p1_m1_m2*data_p1_m1_m2
+ + coeff_dyy_p2_m1_m2*data_p2_m1_m2
+ + coeff_dyy_m2_0_m2*data_m2_0_m2
+ + coeff_dyy_m1_0_m2*data_m1_0_m2
+ + coeff_dyy_0_0_m2*data_0_0_m2
+ + coeff_dyy_p1_0_m2*data_p1_0_m2
+ + coeff_dyy_p2_0_m2*data_p2_0_m2
+ + coeff_dyy_m2_p1_m2*data_m2_p1_m2
+ + coeff_dyy_m1_p1_m2*data_m1_p1_m2
+ + coeff_dyy_0_p1_m2*data_0_p1_m2
+ + coeff_dyy_p1_p1_m2*data_p1_p1_m2
+ + coeff_dyy_p2_p1_m2*data_p2_p1_m2
+ + coeff_dyy_m2_p2_m2*data_m2_p2_m2
+ + coeff_dyy_m1_p2_m2*data_m1_p2_m2
+ + coeff_dyy_0_p2_m2*data_0_p2_m2
+ + coeff_dyy_p1_p2_m2*data_p1_p2_m2
+ + coeff_dyy_p2_p2_m2*data_p2_p2_m2
+ + coeff_dyy_m2_m2_m1*data_m2_m2_m1
+ + coeff_dyy_m1_m2_m1*data_m1_m2_m1
+ + coeff_dyy_0_m2_m1*data_0_m2_m1
+ + coeff_dyy_p1_m2_m1*data_p1_m2_m1
+ + coeff_dyy_p2_m2_m1*data_p2_m2_m1
+ + coeff_dyy_m2_m1_m1*data_m2_m1_m1
+ + coeff_dyy_m1_m1_m1*data_m1_m1_m1
+ + coeff_dyy_0_m1_m1*data_0_m1_m1
+ + coeff_dyy_p1_m1_m1*data_p1_m1_m1
+ + coeff_dyy_p2_m1_m1*data_p2_m1_m1
+ + coeff_dyy_m2_0_m1*data_m2_0_m1
+ + coeff_dyy_m1_0_m1*data_m1_0_m1
+ + coeff_dyy_0_0_m1*data_0_0_m1
+ + coeff_dyy_p1_0_m1*data_p1_0_m1
+ + coeff_dyy_p2_0_m1*data_p2_0_m1
+ + coeff_dyy_m2_p1_m1*data_m2_p1_m1
+ + coeff_dyy_m1_p1_m1*data_m1_p1_m1
+ + coeff_dyy_0_p1_m1*data_0_p1_m1
+ + coeff_dyy_p1_p1_m1*data_p1_p1_m1
+ + coeff_dyy_p2_p1_m1*data_p2_p1_m1
+ + coeff_dyy_m2_p2_m1*data_m2_p2_m1
+ + coeff_dyy_m1_p2_m1*data_m1_p2_m1
+ + coeff_dyy_0_p2_m1*data_0_p2_m1
+ + coeff_dyy_p1_p2_m1*data_p1_p2_m1
+ + coeff_dyy_p2_p2_m1*data_p2_p2_m1
+ + coeff_dyy_m2_m2_0*data_m2_m2_0
+ + coeff_dyy_m1_m2_0*data_m1_m2_0
+ + coeff_dyy_0_m2_0*data_0_m2_0
+ + coeff_dyy_p1_m2_0*data_p1_m2_0
+ + coeff_dyy_p2_m2_0*data_p2_m2_0
+ + coeff_dyy_m2_m1_0*data_m2_m1_0
+ + coeff_dyy_m1_m1_0*data_m1_m1_0
+ + coeff_dyy_0_m1_0*data_0_m1_0
+ + coeff_dyy_p1_m1_0*data_p1_m1_0
+ + coeff_dyy_p2_m1_0*data_p2_m1_0
+ + coeff_dyy_m2_0_0*data_m2_0_0
+ + coeff_dyy_m1_0_0*data_m1_0_0
+ + coeff_dyy_0_0_0*data_0_0_0
+ + coeff_dyy_p1_0_0*data_p1_0_0
+ + coeff_dyy_p2_0_0*data_p2_0_0
+ + coeff_dyy_m2_p1_0*data_m2_p1_0
+ + coeff_dyy_m1_p1_0*data_m1_p1_0
+ + coeff_dyy_0_p1_0*data_0_p1_0
+ + coeff_dyy_p1_p1_0*data_p1_p1_0
+ + coeff_dyy_p2_p1_0*data_p2_p1_0
+ + coeff_dyy_m2_p2_0*data_m2_p2_0
+ + coeff_dyy_m1_p2_0*data_m1_p2_0
+ + coeff_dyy_0_p2_0*data_0_p2_0
+ + coeff_dyy_p1_p2_0*data_p1_p2_0
+ + coeff_dyy_p2_p2_0*data_p2_p2_0
+ + coeff_dyy_m2_m2_p1*data_m2_m2_p1
+ + coeff_dyy_m1_m2_p1*data_m1_m2_p1
+ + coeff_dyy_0_m2_p1*data_0_m2_p1
+ + coeff_dyy_p1_m2_p1*data_p1_m2_p1
+ + coeff_dyy_p2_m2_p1*data_p2_m2_p1
+ + coeff_dyy_m2_m1_p1*data_m2_m1_p1
+ + coeff_dyy_m1_m1_p1*data_m1_m1_p1
+ + coeff_dyy_0_m1_p1*data_0_m1_p1
+ + coeff_dyy_p1_m1_p1*data_p1_m1_p1
+ + coeff_dyy_p2_m1_p1*data_p2_m1_p1
+ + coeff_dyy_m2_0_p1*data_m2_0_p1
+ + coeff_dyy_m1_0_p1*data_m1_0_p1
+ + coeff_dyy_0_0_p1*data_0_0_p1
+ + coeff_dyy_p1_0_p1*data_p1_0_p1
+ + coeff_dyy_p2_0_p1*data_p2_0_p1
+ + coeff_dyy_m2_p1_p1*data_m2_p1_p1
+ + coeff_dyy_m1_p1_p1*data_m1_p1_p1
+ + coeff_dyy_0_p1_p1*data_0_p1_p1
+ + coeff_dyy_p1_p1_p1*data_p1_p1_p1
+ + coeff_dyy_p2_p1_p1*data_p2_p1_p1
+ + coeff_dyy_m2_p2_p1*data_m2_p2_p1
+ + coeff_dyy_m1_p2_p1*data_m1_p2_p1
+ + coeff_dyy_0_p2_p1*data_0_p2_p1
+ + coeff_dyy_p1_p2_p1*data_p1_p2_p1
+ + coeff_dyy_p2_p2_p1*data_p2_p2_p1
+ + coeff_dyy_m2_m2_p2*data_m2_m2_p2
+ + coeff_dyy_m1_m2_p2*data_m1_m2_p2
+ + coeff_dyy_0_m2_p2*data_0_m2_p2
+ + coeff_dyy_p1_m2_p2*data_p1_m2_p2
+ + coeff_dyy_p2_m2_p2*data_p2_m2_p2
+ + coeff_dyy_m2_m1_p2*data_m2_m1_p2
+ + coeff_dyy_m1_m1_p2*data_m1_m1_p2
+ + coeff_dyy_0_m1_p2*data_0_m1_p2
+ + coeff_dyy_p1_m1_p2*data_p1_m1_p2
+ + coeff_dyy_p2_m1_p2*data_p2_m1_p2
+ + coeff_dyy_m2_0_p2*data_m2_0_p2
+ + coeff_dyy_m1_0_p2*data_m1_0_p2
+ + coeff_dyy_0_0_p2*data_0_0_p2
+ + coeff_dyy_p1_0_p2*data_p1_0_p2
+ + coeff_dyy_p2_0_p2*data_p2_0_p2
+ + coeff_dyy_m2_p1_p2*data_m2_p1_p2
+ + coeff_dyy_m1_p1_p2*data_m1_p1_p2
+ + coeff_dyy_0_p1_p2*data_0_p1_p2
+ + coeff_dyy_p1_p1_p2*data_p1_p1_p2
+ + coeff_dyy_p2_p1_p2*data_p2_p1_p2
+ + coeff_dyy_m2_p2_p2*data_m2_p2_p2
+ + coeff_dyy_m1_p2_p2*data_m1_p2_p2
+ + coeff_dyy_0_p2_p2*data_0_p2_p2
+ + coeff_dyy_p1_p2_p2*data_p1_p2_p2
+ + coeff_dyy_p2_p2_p2*data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dyz.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dyz.compute.c
new file mode 100644
index 0000000..9b8120b
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dyz.compute.c
@@ -0,0 +1,126 @@
+result =
+ coeff_dyz_m2_m2_m2*data_m2_m2_m2
+ + coeff_dyz_m1_m2_m2*data_m1_m2_m2
+ + coeff_dyz_0_m2_m2*data_0_m2_m2
+ + coeff_dyz_p1_m2_m2*data_p1_m2_m2
+ + coeff_dyz_p2_m2_m2*data_p2_m2_m2
+ + coeff_dyz_m2_m1_m2*data_m2_m1_m2
+ + coeff_dyz_m1_m1_m2*data_m1_m1_m2
+ + coeff_dyz_0_m1_m2*data_0_m1_m2
+ + coeff_dyz_p1_m1_m2*data_p1_m1_m2
+ + coeff_dyz_p2_m1_m2*data_p2_m1_m2
+ + coeff_dyz_m2_0_m2*data_m2_0_m2
+ + coeff_dyz_m1_0_m2*data_m1_0_m2
+ + coeff_dyz_0_0_m2*data_0_0_m2
+ + coeff_dyz_p1_0_m2*data_p1_0_m2
+ + coeff_dyz_p2_0_m2*data_p2_0_m2
+ + coeff_dyz_m2_p1_m2*data_m2_p1_m2
+ + coeff_dyz_m1_p1_m2*data_m1_p1_m2
+ + coeff_dyz_0_p1_m2*data_0_p1_m2
+ + coeff_dyz_p1_p1_m2*data_p1_p1_m2
+ + coeff_dyz_p2_p1_m2*data_p2_p1_m2
+ + coeff_dyz_m2_p2_m2*data_m2_p2_m2
+ + coeff_dyz_m1_p2_m2*data_m1_p2_m2
+ + coeff_dyz_0_p2_m2*data_0_p2_m2
+ + coeff_dyz_p1_p2_m2*data_p1_p2_m2
+ + coeff_dyz_p2_p2_m2*data_p2_p2_m2
+ + coeff_dyz_m2_m2_m1*data_m2_m2_m1
+ + coeff_dyz_m1_m2_m1*data_m1_m2_m1
+ + coeff_dyz_0_m2_m1*data_0_m2_m1
+ + coeff_dyz_p1_m2_m1*data_p1_m2_m1
+ + coeff_dyz_p2_m2_m1*data_p2_m2_m1
+ + coeff_dyz_m2_m1_m1*data_m2_m1_m1
+ + coeff_dyz_m1_m1_m1*data_m1_m1_m1
+ + coeff_dyz_0_m1_m1*data_0_m1_m1
+ + coeff_dyz_p1_m1_m1*data_p1_m1_m1
+ + coeff_dyz_p2_m1_m1*data_p2_m1_m1
+ + coeff_dyz_m2_0_m1*data_m2_0_m1
+ + coeff_dyz_m1_0_m1*data_m1_0_m1
+ + coeff_dyz_0_0_m1*data_0_0_m1
+ + coeff_dyz_p1_0_m1*data_p1_0_m1
+ + coeff_dyz_p2_0_m1*data_p2_0_m1
+ + coeff_dyz_m2_p1_m1*data_m2_p1_m1
+ + coeff_dyz_m1_p1_m1*data_m1_p1_m1
+ + coeff_dyz_0_p1_m1*data_0_p1_m1
+ + coeff_dyz_p1_p1_m1*data_p1_p1_m1
+ + coeff_dyz_p2_p1_m1*data_p2_p1_m1
+ + coeff_dyz_m2_p2_m1*data_m2_p2_m1
+ + coeff_dyz_m1_p2_m1*data_m1_p2_m1
+ + coeff_dyz_0_p2_m1*data_0_p2_m1
+ + coeff_dyz_p1_p2_m1*data_p1_p2_m1
+ + coeff_dyz_p2_p2_m1*data_p2_p2_m1
+ + coeff_dyz_m2_m2_0*data_m2_m2_0
+ + coeff_dyz_m1_m2_0*data_m1_m2_0
+ + coeff_dyz_0_m2_0*data_0_m2_0
+ + coeff_dyz_p1_m2_0*data_p1_m2_0
+ + coeff_dyz_p2_m2_0*data_p2_m2_0
+ + coeff_dyz_m2_m1_0*data_m2_m1_0
+ + coeff_dyz_m1_m1_0*data_m1_m1_0
+ + coeff_dyz_0_m1_0*data_0_m1_0
+ + coeff_dyz_p1_m1_0*data_p1_m1_0
+ + coeff_dyz_p2_m1_0*data_p2_m1_0
+ + coeff_dyz_m2_0_0*data_m2_0_0
+ + coeff_dyz_m1_0_0*data_m1_0_0
+ + coeff_dyz_0_0_0*data_0_0_0
+ + coeff_dyz_p1_0_0*data_p1_0_0
+ + coeff_dyz_p2_0_0*data_p2_0_0
+ + coeff_dyz_m2_p1_0*data_m2_p1_0
+ + coeff_dyz_m1_p1_0*data_m1_p1_0
+ + coeff_dyz_0_p1_0*data_0_p1_0
+ + coeff_dyz_p1_p1_0*data_p1_p1_0
+ + coeff_dyz_p2_p1_0*data_p2_p1_0
+ + coeff_dyz_m2_p2_0*data_m2_p2_0
+ + coeff_dyz_m1_p2_0*data_m1_p2_0
+ + coeff_dyz_0_p2_0*data_0_p2_0
+ + coeff_dyz_p1_p2_0*data_p1_p2_0
+ + coeff_dyz_p2_p2_0*data_p2_p2_0
+ + coeff_dyz_m2_m2_p1*data_m2_m2_p1
+ + coeff_dyz_m1_m2_p1*data_m1_m2_p1
+ + coeff_dyz_0_m2_p1*data_0_m2_p1
+ + coeff_dyz_p1_m2_p1*data_p1_m2_p1
+ + coeff_dyz_p2_m2_p1*data_p2_m2_p1
+ + coeff_dyz_m2_m1_p1*data_m2_m1_p1
+ + coeff_dyz_m1_m1_p1*data_m1_m1_p1
+ + coeff_dyz_0_m1_p1*data_0_m1_p1
+ + coeff_dyz_p1_m1_p1*data_p1_m1_p1
+ + coeff_dyz_p2_m1_p1*data_p2_m1_p1
+ + coeff_dyz_m2_0_p1*data_m2_0_p1
+ + coeff_dyz_m1_0_p1*data_m1_0_p1
+ + coeff_dyz_0_0_p1*data_0_0_p1
+ + coeff_dyz_p1_0_p1*data_p1_0_p1
+ + coeff_dyz_p2_0_p1*data_p2_0_p1
+ + coeff_dyz_m2_p1_p1*data_m2_p1_p1
+ + coeff_dyz_m1_p1_p1*data_m1_p1_p1
+ + coeff_dyz_0_p1_p1*data_0_p1_p1
+ + coeff_dyz_p1_p1_p1*data_p1_p1_p1
+ + coeff_dyz_p2_p1_p1*data_p2_p1_p1
+ + coeff_dyz_m2_p2_p1*data_m2_p2_p1
+ + coeff_dyz_m1_p2_p1*data_m1_p2_p1
+ + coeff_dyz_0_p2_p1*data_0_p2_p1
+ + coeff_dyz_p1_p2_p1*data_p1_p2_p1
+ + coeff_dyz_p2_p2_p1*data_p2_p2_p1
+ + coeff_dyz_m2_m2_p2*data_m2_m2_p2
+ + coeff_dyz_m1_m2_p2*data_m1_m2_p2
+ + coeff_dyz_0_m2_p2*data_0_m2_p2
+ + coeff_dyz_p1_m2_p2*data_p1_m2_p2
+ + coeff_dyz_p2_m2_p2*data_p2_m2_p2
+ + coeff_dyz_m2_m1_p2*data_m2_m1_p2
+ + coeff_dyz_m1_m1_p2*data_m1_m1_p2
+ + coeff_dyz_0_m1_p2*data_0_m1_p2
+ + coeff_dyz_p1_m1_p2*data_p1_m1_p2
+ + coeff_dyz_p2_m1_p2*data_p2_m1_p2
+ + coeff_dyz_m2_0_p2*data_m2_0_p2
+ + coeff_dyz_m1_0_p2*data_m1_0_p2
+ + coeff_dyz_0_0_p2*data_0_0_p2
+ + coeff_dyz_p1_0_p2*data_p1_0_p2
+ + coeff_dyz_p2_0_p2*data_p2_0_p2
+ + coeff_dyz_m2_p1_p2*data_m2_p1_p2
+ + coeff_dyz_m1_p1_p2*data_m1_p1_p2
+ + coeff_dyz_0_p1_p2*data_0_p1_p2
+ + coeff_dyz_p1_p1_p2*data_p1_p1_p2
+ + coeff_dyz_p2_p1_p2*data_p2_p1_p2
+ + coeff_dyz_m2_p2_p2*data_m2_p2_p2
+ + coeff_dyz_m1_p2_p2*data_m1_p2_p2
+ + coeff_dyz_0_p2_p2*data_0_p2_p2
+ + coeff_dyz_p1_p2_p2*data_p1_p2_p2
+ + coeff_dyz_p2_p2_p2*data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dz.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dz.compute.c
new file mode 100644
index 0000000..df21dcc
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dz.compute.c
@@ -0,0 +1,126 @@
+result =
+ coeff_dz_m2_m2_m2*data_m2_m2_m2
+ + coeff_dz_m1_m2_m2*data_m1_m2_m2
+ + coeff_dz_0_m2_m2*data_0_m2_m2
+ + coeff_dz_p1_m2_m2*data_p1_m2_m2
+ + coeff_dz_p2_m2_m2*data_p2_m2_m2
+ + coeff_dz_m2_m1_m2*data_m2_m1_m2
+ + coeff_dz_m1_m1_m2*data_m1_m1_m2
+ + coeff_dz_0_m1_m2*data_0_m1_m2
+ + coeff_dz_p1_m1_m2*data_p1_m1_m2
+ + coeff_dz_p2_m1_m2*data_p2_m1_m2
+ + coeff_dz_m2_0_m2*data_m2_0_m2
+ + coeff_dz_m1_0_m2*data_m1_0_m2
+ + coeff_dz_0_0_m2*data_0_0_m2
+ + coeff_dz_p1_0_m2*data_p1_0_m2
+ + coeff_dz_p2_0_m2*data_p2_0_m2
+ + coeff_dz_m2_p1_m2*data_m2_p1_m2
+ + coeff_dz_m1_p1_m2*data_m1_p1_m2
+ + coeff_dz_0_p1_m2*data_0_p1_m2
+ + coeff_dz_p1_p1_m2*data_p1_p1_m2
+ + coeff_dz_p2_p1_m2*data_p2_p1_m2
+ + coeff_dz_m2_p2_m2*data_m2_p2_m2
+ + coeff_dz_m1_p2_m2*data_m1_p2_m2
+ + coeff_dz_0_p2_m2*data_0_p2_m2
+ + coeff_dz_p1_p2_m2*data_p1_p2_m2
+ + coeff_dz_p2_p2_m2*data_p2_p2_m2
+ + coeff_dz_m2_m2_m1*data_m2_m2_m1
+ + coeff_dz_m1_m2_m1*data_m1_m2_m1
+ + coeff_dz_0_m2_m1*data_0_m2_m1
+ + coeff_dz_p1_m2_m1*data_p1_m2_m1
+ + coeff_dz_p2_m2_m1*data_p2_m2_m1
+ + coeff_dz_m2_m1_m1*data_m2_m1_m1
+ + coeff_dz_m1_m1_m1*data_m1_m1_m1
+ + coeff_dz_0_m1_m1*data_0_m1_m1
+ + coeff_dz_p1_m1_m1*data_p1_m1_m1
+ + coeff_dz_p2_m1_m1*data_p2_m1_m1
+ + coeff_dz_m2_0_m1*data_m2_0_m1
+ + coeff_dz_m1_0_m1*data_m1_0_m1
+ + coeff_dz_0_0_m1*data_0_0_m1
+ + coeff_dz_p1_0_m1*data_p1_0_m1
+ + coeff_dz_p2_0_m1*data_p2_0_m1
+ + coeff_dz_m2_p1_m1*data_m2_p1_m1
+ + coeff_dz_m1_p1_m1*data_m1_p1_m1
+ + coeff_dz_0_p1_m1*data_0_p1_m1
+ + coeff_dz_p1_p1_m1*data_p1_p1_m1
+ + coeff_dz_p2_p1_m1*data_p2_p1_m1
+ + coeff_dz_m2_p2_m1*data_m2_p2_m1
+ + coeff_dz_m1_p2_m1*data_m1_p2_m1
+ + coeff_dz_0_p2_m1*data_0_p2_m1
+ + coeff_dz_p1_p2_m1*data_p1_p2_m1
+ + coeff_dz_p2_p2_m1*data_p2_p2_m1
+ + coeff_dz_m2_m2_0*data_m2_m2_0
+ + coeff_dz_m1_m2_0*data_m1_m2_0
+ + coeff_dz_0_m2_0*data_0_m2_0
+ + coeff_dz_p1_m2_0*data_p1_m2_0
+ + coeff_dz_p2_m2_0*data_p2_m2_0
+ + coeff_dz_m2_m1_0*data_m2_m1_0
+ + coeff_dz_m1_m1_0*data_m1_m1_0
+ + coeff_dz_0_m1_0*data_0_m1_0
+ + coeff_dz_p1_m1_0*data_p1_m1_0
+ + coeff_dz_p2_m1_0*data_p2_m1_0
+ + coeff_dz_m2_0_0*data_m2_0_0
+ + coeff_dz_m1_0_0*data_m1_0_0
+ + coeff_dz_0_0_0*data_0_0_0
+ + coeff_dz_p1_0_0*data_p1_0_0
+ + coeff_dz_p2_0_0*data_p2_0_0
+ + coeff_dz_m2_p1_0*data_m2_p1_0
+ + coeff_dz_m1_p1_0*data_m1_p1_0
+ + coeff_dz_0_p1_0*data_0_p1_0
+ + coeff_dz_p1_p1_0*data_p1_p1_0
+ + coeff_dz_p2_p1_0*data_p2_p1_0
+ + coeff_dz_m2_p2_0*data_m2_p2_0
+ + coeff_dz_m1_p2_0*data_m1_p2_0
+ + coeff_dz_0_p2_0*data_0_p2_0
+ + coeff_dz_p1_p2_0*data_p1_p2_0
+ + coeff_dz_p2_p2_0*data_p2_p2_0
+ + coeff_dz_m2_m2_p1*data_m2_m2_p1
+ + coeff_dz_m1_m2_p1*data_m1_m2_p1
+ + coeff_dz_0_m2_p1*data_0_m2_p1
+ + coeff_dz_p1_m2_p1*data_p1_m2_p1
+ + coeff_dz_p2_m2_p1*data_p2_m2_p1
+ + coeff_dz_m2_m1_p1*data_m2_m1_p1
+ + coeff_dz_m1_m1_p1*data_m1_m1_p1
+ + coeff_dz_0_m1_p1*data_0_m1_p1
+ + coeff_dz_p1_m1_p1*data_p1_m1_p1
+ + coeff_dz_p2_m1_p1*data_p2_m1_p1
+ + coeff_dz_m2_0_p1*data_m2_0_p1
+ + coeff_dz_m1_0_p1*data_m1_0_p1
+ + coeff_dz_0_0_p1*data_0_0_p1
+ + coeff_dz_p1_0_p1*data_p1_0_p1
+ + coeff_dz_p2_0_p1*data_p2_0_p1
+ + coeff_dz_m2_p1_p1*data_m2_p1_p1
+ + coeff_dz_m1_p1_p1*data_m1_p1_p1
+ + coeff_dz_0_p1_p1*data_0_p1_p1
+ + coeff_dz_p1_p1_p1*data_p1_p1_p1
+ + coeff_dz_p2_p1_p1*data_p2_p1_p1
+ + coeff_dz_m2_p2_p1*data_m2_p2_p1
+ + coeff_dz_m1_p2_p1*data_m1_p2_p1
+ + coeff_dz_0_p2_p1*data_0_p2_p1
+ + coeff_dz_p1_p2_p1*data_p1_p2_p1
+ + coeff_dz_p2_p2_p1*data_p2_p2_p1
+ + coeff_dz_m2_m2_p2*data_m2_m2_p2
+ + coeff_dz_m1_m2_p2*data_m1_m2_p2
+ + coeff_dz_0_m2_p2*data_0_m2_p2
+ + coeff_dz_p1_m2_p2*data_p1_m2_p2
+ + coeff_dz_p2_m2_p2*data_p2_m2_p2
+ + coeff_dz_m2_m1_p2*data_m2_m1_p2
+ + coeff_dz_m1_m1_p2*data_m1_m1_p2
+ + coeff_dz_0_m1_p2*data_0_m1_p2
+ + coeff_dz_p1_m1_p2*data_p1_m1_p2
+ + coeff_dz_p2_m1_p2*data_p2_m1_p2
+ + coeff_dz_m2_0_p2*data_m2_0_p2
+ + coeff_dz_m1_0_p2*data_m1_0_p2
+ + coeff_dz_0_0_p2*data_0_0_p2
+ + coeff_dz_p1_0_p2*data_p1_0_p2
+ + coeff_dz_p2_0_p2*data_p2_0_p2
+ + coeff_dz_m2_p1_p2*data_m2_p1_p2
+ + coeff_dz_m1_p1_p2*data_m1_p1_p2
+ + coeff_dz_0_p1_p2*data_0_p1_p2
+ + coeff_dz_p1_p1_p2*data_p1_p1_p2
+ + coeff_dz_p2_p1_p2*data_p2_p1_p2
+ + coeff_dz_m2_p2_p2*data_m2_p2_p2
+ + coeff_dz_m1_p2_p2*data_m1_p2_p2
+ + coeff_dz_0_p2_p2*data_0_p2_p2
+ + coeff_dz_p1_p2_p2*data_p1_p2_p2
+ + coeff_dz_p2_p2_p2*data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dzz.compute.c b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dzz.compute.c
new file mode 100644
index 0000000..c085ef6
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.cube.size5/interp-dzz.compute.c
@@ -0,0 +1,126 @@
+result =
+ coeff_dzz_m2_m2_m2*data_m2_m2_m2
+ + coeff_dzz_m1_m2_m2*data_m1_m2_m2
+ + coeff_dzz_0_m2_m2*data_0_m2_m2
+ + coeff_dzz_p1_m2_m2*data_p1_m2_m2
+ + coeff_dzz_p2_m2_m2*data_p2_m2_m2
+ + coeff_dzz_m2_m1_m2*data_m2_m1_m2
+ + coeff_dzz_m1_m1_m2*data_m1_m1_m2
+ + coeff_dzz_0_m1_m2*data_0_m1_m2
+ + coeff_dzz_p1_m1_m2*data_p1_m1_m2
+ + coeff_dzz_p2_m1_m2*data_p2_m1_m2
+ + coeff_dzz_m2_0_m2*data_m2_0_m2
+ + coeff_dzz_m1_0_m2*data_m1_0_m2
+ + coeff_dzz_0_0_m2*data_0_0_m2
+ + coeff_dzz_p1_0_m2*data_p1_0_m2
+ + coeff_dzz_p2_0_m2*data_p2_0_m2
+ + coeff_dzz_m2_p1_m2*data_m2_p1_m2
+ + coeff_dzz_m1_p1_m2*data_m1_p1_m2
+ + coeff_dzz_0_p1_m2*data_0_p1_m2
+ + coeff_dzz_p1_p1_m2*data_p1_p1_m2
+ + coeff_dzz_p2_p1_m2*data_p2_p1_m2
+ + coeff_dzz_m2_p2_m2*data_m2_p2_m2
+ + coeff_dzz_m1_p2_m2*data_m1_p2_m2
+ + coeff_dzz_0_p2_m2*data_0_p2_m2
+ + coeff_dzz_p1_p2_m2*data_p1_p2_m2
+ + coeff_dzz_p2_p2_m2*data_p2_p2_m2
+ + coeff_dzz_m2_m2_m1*data_m2_m2_m1
+ + coeff_dzz_m1_m2_m1*data_m1_m2_m1
+ + coeff_dzz_0_m2_m1*data_0_m2_m1
+ + coeff_dzz_p1_m2_m1*data_p1_m2_m1
+ + coeff_dzz_p2_m2_m1*data_p2_m2_m1
+ + coeff_dzz_m2_m1_m1*data_m2_m1_m1
+ + coeff_dzz_m1_m1_m1*data_m1_m1_m1
+ + coeff_dzz_0_m1_m1*data_0_m1_m1
+ + coeff_dzz_p1_m1_m1*data_p1_m1_m1
+ + coeff_dzz_p2_m1_m1*data_p2_m1_m1
+ + coeff_dzz_m2_0_m1*data_m2_0_m1
+ + coeff_dzz_m1_0_m1*data_m1_0_m1
+ + coeff_dzz_0_0_m1*data_0_0_m1
+ + coeff_dzz_p1_0_m1*data_p1_0_m1
+ + coeff_dzz_p2_0_m1*data_p2_0_m1
+ + coeff_dzz_m2_p1_m1*data_m2_p1_m1
+ + coeff_dzz_m1_p1_m1*data_m1_p1_m1
+ + coeff_dzz_0_p1_m1*data_0_p1_m1
+ + coeff_dzz_p1_p1_m1*data_p1_p1_m1
+ + coeff_dzz_p2_p1_m1*data_p2_p1_m1
+ + coeff_dzz_m2_p2_m1*data_m2_p2_m1
+ + coeff_dzz_m1_p2_m1*data_m1_p2_m1
+ + coeff_dzz_0_p2_m1*data_0_p2_m1
+ + coeff_dzz_p1_p2_m1*data_p1_p2_m1
+ + coeff_dzz_p2_p2_m1*data_p2_p2_m1
+ + coeff_dzz_m2_m2_0*data_m2_m2_0
+ + coeff_dzz_m1_m2_0*data_m1_m2_0
+ + coeff_dzz_0_m2_0*data_0_m2_0
+ + coeff_dzz_p1_m2_0*data_p1_m2_0
+ + coeff_dzz_p2_m2_0*data_p2_m2_0
+ + coeff_dzz_m2_m1_0*data_m2_m1_0
+ + coeff_dzz_m1_m1_0*data_m1_m1_0
+ + coeff_dzz_0_m1_0*data_0_m1_0
+ + coeff_dzz_p1_m1_0*data_p1_m1_0
+ + coeff_dzz_p2_m1_0*data_p2_m1_0
+ + coeff_dzz_m2_0_0*data_m2_0_0
+ + coeff_dzz_m1_0_0*data_m1_0_0
+ + coeff_dzz_0_0_0*data_0_0_0
+ + coeff_dzz_p1_0_0*data_p1_0_0
+ + coeff_dzz_p2_0_0*data_p2_0_0
+ + coeff_dzz_m2_p1_0*data_m2_p1_0
+ + coeff_dzz_m1_p1_0*data_m1_p1_0
+ + coeff_dzz_0_p1_0*data_0_p1_0
+ + coeff_dzz_p1_p1_0*data_p1_p1_0
+ + coeff_dzz_p2_p1_0*data_p2_p1_0
+ + coeff_dzz_m2_p2_0*data_m2_p2_0
+ + coeff_dzz_m1_p2_0*data_m1_p2_0
+ + coeff_dzz_0_p2_0*data_0_p2_0
+ + coeff_dzz_p1_p2_0*data_p1_p2_0
+ + coeff_dzz_p2_p2_0*data_p2_p2_0
+ + coeff_dzz_m2_m2_p1*data_m2_m2_p1
+ + coeff_dzz_m1_m2_p1*data_m1_m2_p1
+ + coeff_dzz_0_m2_p1*data_0_m2_p1
+ + coeff_dzz_p1_m2_p1*data_p1_m2_p1
+ + coeff_dzz_p2_m2_p1*data_p2_m2_p1
+ + coeff_dzz_m2_m1_p1*data_m2_m1_p1
+ + coeff_dzz_m1_m1_p1*data_m1_m1_p1
+ + coeff_dzz_0_m1_p1*data_0_m1_p1
+ + coeff_dzz_p1_m1_p1*data_p1_m1_p1
+ + coeff_dzz_p2_m1_p1*data_p2_m1_p1
+ + coeff_dzz_m2_0_p1*data_m2_0_p1
+ + coeff_dzz_m1_0_p1*data_m1_0_p1
+ + coeff_dzz_0_0_p1*data_0_0_p1
+ + coeff_dzz_p1_0_p1*data_p1_0_p1
+ + coeff_dzz_p2_0_p1*data_p2_0_p1
+ + coeff_dzz_m2_p1_p1*data_m2_p1_p1
+ + coeff_dzz_m1_p1_p1*data_m1_p1_p1
+ + coeff_dzz_0_p1_p1*data_0_p1_p1
+ + coeff_dzz_p1_p1_p1*data_p1_p1_p1
+ + coeff_dzz_p2_p1_p1*data_p2_p1_p1
+ + coeff_dzz_m2_p2_p1*data_m2_p2_p1
+ + coeff_dzz_m1_p2_p1*data_m1_p2_p1
+ + coeff_dzz_0_p2_p1*data_0_p2_p1
+ + coeff_dzz_p1_p2_p1*data_p1_p2_p1
+ + coeff_dzz_p2_p2_p1*data_p2_p2_p1
+ + coeff_dzz_m2_m2_p2*data_m2_m2_p2
+ + coeff_dzz_m1_m2_p2*data_m1_m2_p2
+ + coeff_dzz_0_m2_p2*data_0_m2_p2
+ + coeff_dzz_p1_m2_p2*data_p1_m2_p2
+ + coeff_dzz_p2_m2_p2*data_p2_m2_p2
+ + coeff_dzz_m2_m1_p2*data_m2_m1_p2
+ + coeff_dzz_m1_m1_p2*data_m1_m1_p2
+ + coeff_dzz_0_m1_p2*data_0_m1_p2
+ + coeff_dzz_p1_m1_p2*data_p1_m1_p2
+ + coeff_dzz_p2_m1_p2*data_p2_m1_p2
+ + coeff_dzz_m2_0_p2*data_m2_0_p2
+ + coeff_dzz_m1_0_p2*data_m1_0_p2
+ + coeff_dzz_0_0_p2*data_0_0_p2
+ + coeff_dzz_p1_0_p2*data_p1_0_p2
+ + coeff_dzz_p2_0_p2*data_p2_0_p2
+ + coeff_dzz_m2_p1_p2*data_m2_p1_p2
+ + coeff_dzz_m1_p1_p2*data_m1_p1_p2
+ + coeff_dzz_0_p1_p2*data_0_p1_p2
+ + coeff_dzz_p1_p1_p2*data_p1_p1_p2
+ + coeff_dzz_p2_p1_p2*data_p2_p1_p2
+ + coeff_dzz_m2_p2_p2*data_m2_p2_p2
+ + coeff_dzz_m1_p2_p2*data_m1_p2_p2
+ + coeff_dzz_0_p2_p2*data_0_p2_p2
+ + coeff_dzz_p1_p2_p2*data_p1_p2_p2
+ + coeff_dzz_p2_p2_p2*data_p2_p2_p2;
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.log b/src/GeneralizedPolynomial-Uniform/common/3d.log
new file mode 100644
index 0000000..2fed690
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.log
@@ -0,0 +1,1504 @@
+ |\^/| Maple 7 (IBM INTEL LINUX)
+._|\| |/|_. Copyright (c) 2001 by Waterloo Maple Inc.
+ \ MAPLE / All rights reserved. Maple is a registered trademark of
+ <____ ____> Waterloo Maple Inc.
+ | Type ? for help.
+# util.maple -- misc utility routines
+# $Id: util.maple,v 1.3 2002/05/19 13:12:18 jthorn Exp $
+>
+#
+# fix_rationals - convert numbers to RATIONAL() calls
+# nonmatching_names - find names in a list which *don't* have a specified prefix
+# sprint_numeric_list - convert a numeric list to a valid C identifier suffix
+# print_name_list_dcl - print a C declaration for a list of names
+#
+# hypercube_points - compute all (integer) points in an N-dimensional hypercube
+#
+# ftruncate - truncate a file to zero length
+#
+>
+################################################################################
+################################################################################
+################################################################################
+>
+#
+# This function converts all {integer, rational} subexpressions of its
+# input except integer exponents and -1 factors in products, into function
+# calls
+# RATIONAL(num,den)
+# This is useful in conjunction with the C() library function, since
+#
+# C( (1/3) * foo * bar )
+# t0 = foo*bar/3;
+#
+# generates a (slow) division (and runs the risk of mixed-mode-arithmetic
+# problems), while
+#
+# C((1.0/3.0) * foo * bar);
+# t0 = 0.3333333333*foo*bar;
+#
+# suffers from roundoff error. With this function,
+#
+# fix_rationals((1/3) * foo * bar);
+# RATIONAL(1,3) foo bar
+# C(%);
+# t0 = RATIONAL(1.0,3.0)*foo*bar;
+#
+# which a C preprocessor macro can easily convert to the desired
+#
+# t0 = (1.0/3.0)*foo*bar;
+#
+# Additionally, this function can be told to leave certain types of
+# subexpressions unconverged. For example,
+# fix_rationals(expr, type, specfunc(integer, DATA));
+# will leave all subexpressions of the form DATA(integer arguments)
+# unconverted.
+#
+# Arguments:
+# expr = (in) The expression to be converted.
+# inert_fn = (optional in)
+# If specified, this argument should be a Boolean procedure
+# or the name of a Boolean procedure. This procedure should
+# take one or more argument, and return true if and only if
+# the first argument should *not* be converted, i.e. if we
+# should leave this expression unchanged. See the last
+# example above.
+# ... = (optional in)
+# Any further arguments are passed as additional arguments to
+# the inert_fn procedure.
+#
+> fix_rationals :=
+> proc(
+> expr::{
+> algebraic, name = algebraic,
+> list({algebraic, name = algebraic}),
+> set ({algebraic, name = algebraic})
+> },
+> inert_fn::{name, procedure}
+> )
+> local nn, k,
+> base, power, fbase, fpower,
+> fn, fn_args_list,
+> num, den, mult;
+>
+# do we want to convert this expression?
+> if ((nargs >= 2) and inert_fn(expr, args[3..nargs]))
+> then return expr;
+> end if;
+>
+# recurse over lists and sets
+> if (type(expr, {list,set}))
+> then return map(fix_rationals, expr, args[2..nargs]);
+> end if;
+>
+# recurse over equation right hand sides
+> if (type(expr, name = algebraic))
+> then return ( lhs(expr) = fix_rationals(rhs(expr), args[2..nargs]) );
+> end if;
+>
+# recurse over functions other than RATIONAL()
+> if (type(expr, function))
+> then
+> fn := op(0, expr);
+> if (fn <> 'RATIONAL')
+> then
+> fn_args_list := [op(expr)];
+> fn_args_list := map(fix_rationals, fn_args_list, args[2..nargs]);
+> fn; return '%'( op(fn_args_list) );
+> end if;
+> end if;
+>
+> nn := nops(expr);
+>
+# recurse over sums
+> if (type(expr, `+`))
+> then return sum('fix_rationals(op(k,expr), args[2..nargs])', 'k'=1..nn);
+> end if;
+>
+# recurse over products
+# ... leaving leading -1 factors intact, i.e. not converted to RATIONAL(-1,1)
+> if (type(expr, `*`))
+> then
+> if (op(1, expr) = -1)
+> then return -1*fix_rationals(remove(type, expr, 'identical(-1)'),
+> args[2..nargs]);
+> else return product('fix_rationals(op(k,expr), args[2..nargs])',
+> 'k'=1..nn);
+> end if;
+> end if;
+>
+# recurse over powers
+# ... leaving integer exponents intact
+> if (type(expr, `^`))
+> then
+> base := op(1, expr);
+> power := op(2, expr);
+>
+> fbase := fix_rationals(base, args[2..nargs]);
+> if (type(power, integer))
+> then fpower := power;
+> else fpower := fix_rationals(power, args[2..nargs]);
+> end if;
+> return fbase ^ fpower;
+> end if;
+>
+# fix integers and fractions
+> if (type(expr, integer))
+> then return 'RATIONAL'(expr, 1);
+> end if;
+> if (type(expr, fraction))
+> then
+> num := op(1, expr);
+> den := op(2, expr);
+>
+> return 'RATIONAL'(num, den);
+> end if;
+>
+# turn Maple floating-point into integer fraction, then recursively fix that
+> if (type(expr, float))
+> then
+> mult := op(1, expr);
+> power := op(2, expr);
+> return fix_rationals(mult * 10^power, args[2..nargs]);
+> end if;
+>
+# identity op on names
+> if (type(expr, name))
+> then return expr;
+> end if;
+>
+# unknown type
+> error "%0",
+> "unknown type for expr!",
+> " whattype(expr) = ", whattype(expr),
+> " expr = ", expr;
+> end proc;
+fix_rationals := proc(expr::{algebraic, name = algebraic,
+list({algebraic, name = algebraic}), set({algebraic, name = algebraic})},
+inert_fn::{procedure, name})
+local nn, k, base, power, fbase, fpower, fn, fn_args_list, num, den, mult;
+ if 2 <= nargs and inert_fn(expr, args[3 .. nargs]) then return expr
+ end if;
+ if type(expr, {set, list}) then
+ return map(fix_rationals, expr, args[2 .. nargs])
+ end if;
+ if type(expr, name = algebraic) then
+ return lhs(expr) = fix_rationals(rhs(expr), args[2 .. nargs])
+ end if;
+ if type(expr, function) then
+ fn := op(0, expr);
+ if fn <> 'RATIONAL' then
+ fn_args_list := [op(expr)];
+ fn_args_list :=
+ map(fix_rationals, fn_args_list, args[2 .. nargs]);
+ fn;
+ return '%'(op(fn_args_list))
+ end if
+ end if;
+ nn := nops(expr);
+ if type(expr, `+`) then return
+ sum('fix_rationals(op(k, expr), args[2 .. nargs])', 'k' = 1 .. nn)
+ end if;
+ if type(expr, `*`) then
+ if op(1, expr) = -1 then return -fix_rationals(
+ remove(type, expr, 'identical(-1)'), args[2 .. nargs])
+ else return product('fix_rationals(op(k, expr), args[2 .. nargs])',
+ 'k' = 1 .. nn)
+ end if
+ end if;
+ if type(expr, `^`) then
+ base := op(1, expr);
+ power := op(2, expr);
+ fbase := fix_rationals(base, args[2 .. nargs]);
+ if type(power, integer) then fpower := power
+ else fpower := fix_rationals(power, args[2 .. nargs])
+ end if;
+ return fbase^fpower
+ end if;
+ if type(expr, integer) then return 'RATIONAL'(expr, 1) end if;
+ if type(expr, fraction) then
+ num := op(1, expr); den := op(2, expr); return 'RATIONAL'(num, den)
+ end if;
+ if type(expr, float) then
+ mult := op(1, expr);
+ power := op(2, expr);
+ return fix_rationals(mult*10^power, args[2 .. nargs])
+ end if;
+ if type(expr, name) then return expr end if;
+ error "%0", "unknown type for expr!", " whattype(expr) = ",
+ whattype(expr), " expr = ", expr
+end proc
+
+>
+################################################################################
+>
+#
+# This function finds names in a list which *don't* have a specified prefix.
+#
+# Arguments:
+# name_list = A list of the names.
+# prefix = The prefix we want to filter out.
+#
+# Results:
+# This function returns the subset list of names which don't have the
+# specified prefix.
+#
+> nonmatching_names :=
+> proc( name_list::list({name,string}), prefix::{name,string} )
+>
+> select( proc(n)
+> evalb(not StringTools[IsPrefix](prefix,n));
+> end proc
+> ,
+> name_list
+> );
+> end proc;
+nonmatching_names := proc(
+name_list::list({name, string}), prefix::{name, string})
+ select(proc(n) evalb(not StringTools[IsPrefix](prefix, n)) end proc,
+ name_list)
+end proc
+
+>
+################################################################################
+>
+#
+# This function converts a numeric list to a string which is a valid
+# C identifier suffix: elements are separated by "_", decimal points are
+# replaced by "x", and all nonzero values have explicit +/- signs, which
+# are replaced by "p"/"m".
+#
+# For example, [0,-3.5,+4] --> "0_m3x5_p4".
+#
+> sprint_numeric_list :=
+> proc(nlist::list(numeric))
+>
+# generate preliminary string, eg "+0_-3.5_+4"
+> map2(sprintf, "%+a", nlist);
+> ListTools[Join](%, "_");
+> cat(op(%));
+>
+# fixup bad characters
+> StringTools[SubstituteAll](%, "+0", "0");
+> StringTools[CharacterMap](".+-", "xpm", %);
+>
+> return %;
+> end proc;
+sprint_numeric_list := proc(nlist::list(numeric))
+ map2(sprintf, "%+a", nlist);
+ ListTools[Join](%, "_");
+ cat(op(%));
+ StringTools[SubstituteAll](%, "+0", "0");
+ StringTools[CharacterMap](".+-", "xpm", %);
+ return %
+end proc
+
+>
+################################################################################
+>
+#
+# This function prints a C declaration for a list of names.
+#
+# Argument:
+# name_list = A list of the names.
+# name_type = The C type of the names, eg. "double".
+# file_name = The file name to write the declaration to. This is
+# truncated before writing.
+#
+> print_name_list_dcl :=
+> proc( name_list::list({name,string}),
+> name_type::string,
+> file_name::string )
+> local blanks, separator_string;
+>
+> ftruncate(file_name);
+>
+# a sequence of blanks with the same length as name_type
+> seq(" ", i=1..length(name_type));
+>
+# string to separate names
+> separator_string := cat(",\n", %, " ");
+>
+> map(convert, name_list, string);
+> ListTools[Join](%, separator_string);
+> cat(op(%));
+>
+> fprintf(file_name,
+> "%s %s;\n",
+> name_type, %);
+>
+> fclose(file_name);
+> NULL;
+> end proc;
+print_name_list_dcl := proc(
+name_list::list({name, string}), name_type::string, file_name::string)
+local blanks, separator_string;
+ ftruncate(file_name);
+ seq(" ", i = 1 .. length(name_type));
+ separator_string := cat(",\n", %, " ");
+ map(convert, name_list, string);
+ ListTools[Join](%, separator_string);
+ cat(op(%));
+ fprintf(file_name, "%s %s;\n", name_type, %);
+ fclose(file_name);
+ NULL
+end proc
+
+>
+################################################################################
+################################################################################
+################################################################################
+>
+#
+# This function computes a list of all the (integer) points in an
+# N-dimensional hypercube, in lexicographic order. The present
+# implementation requires N <= 4.
+#
+# Arguments:
+# cmin,cmax = N-element lists of cube minimum/maximum coordinates.
+#
+# Results:
+# The function returns a set of d-element lists giving the coordinates.
+# For example,
+# hypercube([0,0], [2,1]
+# returns
+# { [0,0], [0,1], [1,0], [1,1], [2,0], [2,1] }
+> hypercube_points :=
+> proc(cmin::list(integer), cmax::list(integer))
+> local N, i,j,k,l;
+>
+> N := nops(cmin);
+> if (nops(cmax) <> N)
+> then error
+> "must have same number of dimensions for min and max coordinates!";
+> fi;
+>
+> if (N = 1)
+> then return [seq([i], i=cmin[1]..cmax[1])];
+> elif (N = 2)
+> then return [
+> seq(
+> seq([i,j], j=cmin[2]..cmax[2]),
+> i=cmin[1]..cmax[1])
+> ];
+> elif (N = 3)
+> then return [
+> seq(
+> seq(
+> seq([i,j,k], k=cmin[3]..cmax[3]),
+> j=cmin[2]..cmax[2] ),
+> i=cmin[1]..cmax[1])
+> ];
+> elif (N = 4)
+> then return [
+> seq(
+> seq(
+> seq(
+> seq([i,j,k,l], l=cmin[4]..cmax[4]),
+> k=cmin[3]..cmax[3] ),
+> j=cmin[2]..cmax[2]),
+> i=cmin[1]..cmax[1])
+> ];
+> else
+> error "implementation restriction: must have N <= 4, got %1!", N;
+> fi;
+> end proc;
+hypercube_points := proc(cmin::list(integer), cmax::list(integer))
+local N, i, j, k, l;
+ N := nops(cmin);
+ if nops(cmax) <> N then error
+ "must have same number of dimensions for min and max coordinates!"
+ end if;
+ if N = 1 then return [seq([i], i = cmin[1] .. cmax[1])]
+ elif N = 2 then return
+ [seq(seq([i, j], j = cmin[2] .. cmax[2]), i = cmin[1] .. cmax[1])]
+ elif N = 3 then return [seq(
+ seq(seq([i, j, k], k = cmin[3] .. cmax[3]), j = cmin[2] .. cmax[2])
+ , i = cmin[1] .. cmax[1])]
+ elif N = 4 then return [seq(seq(seq(
+ seq([i, j, k, l], l = cmin[4] .. cmax[4]), k = cmin[3] .. cmax[3]),
+ j = cmin[2] .. cmax[2]), i = cmin[1] .. cmax[1])]
+ else error "implementation restriction: must have N <= 4, got %1!", N
+ end if
+end proc
+
+>
+################################################################################
+################################################################################
+################################################################################
+>
+#
+# This function truncates a file to 0 length if it exists, or creates
+# it at that length if it doesn't exist.
+#
+# Arguments:
+# file_name = (in) The name of the file.
+#
+> ftruncate :=
+> proc(file_name::string)
+> fopen(file_name, 'WRITE');
+> fclose(%);
+> NULL;
+> end proc;
+ftruncate :=
+
+ proc(file_name::string) fopen(file_name, 'WRITE'); fclose(%); NULL end proc
+
+# interpolate.maple -- compute generalized interpolation formulas/coefficients
+# $Id: interpolate.maple,v 1.4 2002/05/14 15:52:50 jthorn Exp $
+>
+#
+# <<<representation of numbers, data values, etc>>>
+# polynomial_interpolant - compute polynomial interpolant
+# coeff_as_lc_of_data - coefficients of ... (linear combination of data)
+#
+# print_coeff__lc_of_data - print C code to compute coefficients
+# print_data_var_assign - print C code to assign data-value variables
+# print_interp_coeff_var_store - print C code to store coeff vars "somewhere"
+# print_interp_cmpt__lc_of_data - print C code for computation of interpolant
+#
+# coeff_name - name of coefficient of data at a given [m] coordinate
+# data_var_name - name of variable storing data value at a given [m] coordinate
+#
+>
+################################################################################
+>
+#
+# ***** representation of numbers, data values, etc *****
+#
+# We use RATIONAL(p.0,q.0) to denote the rational number p/q.
+#
+# We use DATA(...) to represent the data values being interpolated at a
+# specified [m] coordinate, where the arguments are the [m] coordinates.
+#
+# We use COEFF(...) to represent the molecule coefficient at a specified
+# [m] coordinate, where the arguments are the [m] coordinates.
+#
+# For example, the usual 1-D centered 2nd order 1st derivative molecule
+# would be written
+# RATIONAL(-1.0,2.0)*DATA(-1) + RATIONA(1.0,2.0)*DATA(1)
+# and its coefficients as
+# COEFF(-1) = RATIONAL(-1.0,2.0)
+# COEFF(1) = RATIONAL(1.0,2.0)
+#
+>
+################################################################################
+################################################################################
+################################################################################
+>
+#
+# This function computes a polynomial interpolant in any number of dimensions.
+#
+# Arguments:
+# fn = The interpolation function. This should be a procedure in the
+# coordinates, having the coefficients as global variables. For
+# example,
+# proc(x,y) c00 + c10*x + c01*y end proc
+# coeff_list = A set of the interpolation coefficients (coefficients in
+# the interpolation function), for example [c00, c10, c01].
+# coord_list = A list of the coordinates (independent variables in the
+# interpolation function), for example [x,y].
+# posn_list = A list of positions (each a list of numeric values) where the
+# interpolant is to use data, for example hypercube([0,0], [1,1]).
+# Any positions may be used; if they're redundant (as in the
+# example) the least-squares interpolant is computed.
+#
+# Results:
+# This function returns the interpolating polynomial, in the form of
+# an algebraic expression in the coordinates and the data values.
+#
+> polynomial_interpolant :=
+> proc(
+> fn::procedure, coeff_list::list(name),
+> coord_list::list(name), posn_list::list(list(numeric))
+> )
+> local posn, data_eqns, coeff_eqns;
+>
+# coefficients of interpolating polynomial
+> data_eqns := { seq( fn(op(posn))='DATA'(op(posn)) , posn=posn_list ) };
+> coeff_eqns := linalg[leastsqrs](data_eqns, {op(coeff_list)});
+> if (has(coeff_eqns, '_t'))
+> then error "interpolation coefficients aren't uniquely determined!";
+> end if;
+>
+# interpolant as a polynomial in the coordinates
+> return subs(coeff_eqns, eval(fn))(op(coord_list));
+> end proc;
+polynomial_interpolant := proc(fn::procedure, coeff_list::list(name),
+coord_list::list(name), posn_list::list(list(numeric)))
+local posn, data_eqns, coeff_eqns;
+ data_eqns := {seq(fn(op(posn)) = 'DATA'(op(posn)), posn = posn_list)};
+ coeff_eqns := linalg[leastsqrs](data_eqns, {op(coeff_list)});
+ if has(coeff_eqns, '_t') then
+ error "interpolation coefficients aren't uniquely determined!"
+ end if;
+ return subs(coeff_eqns, eval(fn))(op(coord_list))
+end proc
+
+>
+################################################################################
+>
+#
+# This function takes as input an interpolating polynomial, expresses
+# it as a linear combination of the data values, and returns the coefficeints
+# of that form.
+#
+# Arguments:
+# interpolant = The interpolating polynomial (an algebraic expression
+# in the coordinates and the data values).
+# posn_list = The same list of positions as was used to compute the
+# interpolating polynomial.
+#
+# Results:
+# This function returns the coefficients, as a list of equations of the
+# form COEFF(...) = value , where each value is a polynomial in the
+# coordinates. The order of the list matches that of posn_list.
+#
+> coeff_as_lc_of_data :=
+> proc(
+> interpolant::algebraic,
+> posn_list::list(list(numeric))
+> )
+> local data_list, interpolant_as_lc_of_data;
+>
+# interpolant as a linear combination of the data values
+> data_list := [ seq( 'DATA'(op(posn)) , posn=posn_list ) ];
+> interpolant_as_lc_of_data := collect(interpolant, data_list);
+>
+# coefficients of the data values in the linear combination
+> return map(
+> proc(posn::list(numeric))
+> coeff(interpolant_as_lc_of_data, DATA(op(posn)));
+> 'COEFF'(op(posn)) = %;
+> end proc
+> ,
+> posn_list
+> );
+> end proc;
+coeff_as_lc_of_data := proc(
+interpolant::algebraic, posn_list::list(list(numeric)))
+local data_list, interpolant_as_lc_of_data;
+ data_list := [seq('DATA'(op(posn)), posn = posn_list)];
+ interpolant_as_lc_of_data := collect(interpolant, data_list);
+ return map(proc(posn::list(numeric))
+ coeff(interpolant_as_lc_of_data, DATA(op(posn)));
+ 'COEFF'(op(posn)) = %
+ end proc, posn_list)
+end proc
+
+>
+################################################################################
+################################################################################
+################################################################################
+>
+#
+# This function prints C expressions for the coefficients of an
+# interpolating polynomial. (The polynomial is expressed as linear
+# combinations of the data values with coefficients which are
+# RATIONAL(p,q) calls.)
+#
+# Arguments:
+# coeff_list = A list of the coefficients, as returned from
+# coeff_as_lc_of_data() .
+# coeff_name_prefix = A prefix string for the coefficient names.
+# temp_name_type = The C type to be used for Maple-introduced temporary
+# names, eg. "double".
+# file_name = The file name to write the coefficients to. This is
+# truncated before writing.
+#
+> print_coeff__lc_of_data :=
+> proc( coeff_list::list(specfunc(numeric,COEFF) = algebraic),
+> coeff_name_prefix::string,
+> temp_name_type::string,
+> file_name::string )
+> global `codegen/C/function/informed`;
+> local coeff_list2, cmpt_list, temp_name_list;
+>
+# convert LHS of each equation from a COEFF() call (eg COEFF(-1,+1))
+# to a Maple/C variable name (eg coeff_I_m1_p1)
+> coeff_list2 := map(
+> proc(coeff_eqn::specfunc(numeric,COEFF) = algebraic)
+> local posn;
+> posn := [op(lhs(coeff_eqn))];
+> coeff_name(posn,coeff_name_prefix);
+> convert(%, name); # codegen[C] wants LHS
+> # to be an actual Maple *name*
+> % = fix_rationals(rhs(coeff_eqn));
+> end proc
+> ,
+> coeff_list
+> );
+>
+#
+# generate the C code
+#
+>
+# tell codegen[C] not to warn about unknown RATIONAL() and DATA() "fn calls"
+# via undocumented :( global table
+> `codegen/C/function/informed`['RATIONAL'] := true;
+> `codegen/C/function/informed`['DATA'] := true;
+>
+> ftruncate(file_name);
+>
+# optimized computation sequence for all the coefficients
+# (may use local variables t0,t1,t2,...)
+> cmpt_list := [codegen[optimize](coeff_list2, tryhard)];
+>
+# list of the t0,t1,t2,... local variables
+> temp_name_list := nonmatching_names(map(lhs,cmpt_list), coeff_name_prefix);
+>
+# declare the t0,t1,t2,... local variables (if there are any)
+> if (nops(temp_name_list) > 0)
+> then print_name_list_dcl(%, temp_name_type, file_name);
+> fi;
+>
+# now print the optimized computation sequence
+> codegen[C](cmpt_list, filename=file_name);
+>
+> fclose(file_name);
+>
+> NULL;
+> end proc;
+print_coeff__lc_of_data := proc(
+coeff_list::list(specfunc(numeric, COEFF) = algebraic),
+coeff_name_prefix::string, temp_name_type::string, file_name::string)
+local coeff_list2, cmpt_list, temp_name_list;
+global `codegen/C/function/informed`;
+ coeff_list2 := map(proc(
+ coeff_eqn::(specfunc(numeric, COEFF) = algebraic))
+ local posn;
+ posn := [op(lhs(coeff_eqn))];
+ coeff_name(posn, coeff_name_prefix);
+ convert(%, name);
+ % = fix_rationals(rhs(coeff_eqn))
+ end proc, coeff_list);
+ `codegen/C/function/informed`['RATIONAL'] := true;
+ `codegen/C/function/informed`['DATA'] := true;
+ ftruncate(file_name);
+ cmpt_list := [codegen[optimize](coeff_list2, tryhard)];
+ temp_name_list :=
+ nonmatching_names(map(lhs, cmpt_list), coeff_name_prefix);
+ if 0 < nops(temp_name_list) then
+ print_name_list_dcl(%, temp_name_type, file_name)
+ end if;
+ codegen[C](cmpt_list, filename = file_name);
+ fclose(file_name);
+ NULL
+end proc
+
+>
+################################################################################
+>
+#
+# This function prints a sequence of C expression to assign the data-value
+# variables, eg
+# data_m1_p1 = DATA(-1,1);
+#
+# Arguments:
+# posn_list = The same list of positions as was used to compute the
+# interpolating polynomial.
+# data_var_name_prefix = A prefix string for the data variable names.
+# file_name = The file name to write the coefficients to. This is
+# truncated before writing.
+#
+> print_data_var_assign :=
+> proc(
+> posn_list::list(list(numeric)),
+> data_var_name_prefix::string,
+> file_name::string
+> )
+>
+> ftruncate(file_name);
+> map(
+> proc(posn::list(numeric))
+> fprintf(file_name,
+> "%s = %a;\n",
+> data_var_name(posn,data_var_name_prefix),
+> DATA(op(posn)));
+> end proc
+> ,
+> posn_list
+> );
+> fclose(file_name);
+>
+> NULL;
+> end proc;
+print_data_var_assign := proc(posn_list::list(list(numeric)),
+data_var_name_prefix::string, file_name::string)
+ ftruncate(file_name);
+ map(proc(posn::list(numeric))
+ fprintf(file_name, "%s = %a;\n",
+ data_var_name(posn, data_var_name_prefix), DATA(op(posn)))
+ end proc, posn_list);
+ fclose(file_name);
+ NULL
+end proc
+
+>
+################################################################################
+>
+#
+# This function prints a sequence of C expression to store the interpolation
+# coefficients in COEFF(...) expressions, eg
+# COEFF(1,-1) = factor * coeff_dx_p1_m1;
+#
+# Arguments:
+# posn_list = The same list of positions as was used to compute the
+# interpolating polynomial.
+# RHS_factor_name = If this string is non-empty, then the coefficient is
+# multiplied by this factor before being stored, eg
+# setting this to "factor" would give the example above.
+# If this string is empty (""), the multiplication is
+# omitted, eg
+# COEFF(1,-1) = coeff_dx_p1_m1;
+# coeff_name_prefix = A prefix string for the coefficient names.
+# file_name = The file name to write the coefficients to. This is
+# truncated before writing.
+#
+> print_interp_coeff_var_store :=
+> proc(
+> posn_list::list(list(numeric)),
+> RHS_factor_name::string,
+> coeff_name_prefix::string,
+> file_name::string
+> )
+>
+> ftruncate(file_name);
+> map(
+> proc(posn::list(numeric))
+> if (length(RHS_factor_name) > 0)
+> then fprintf(file_name,
+> "%a = %s * %s;\n",
+> 'COEFF'(op(posn)),
+> RHS_factor_name,
+> coeff_name(posn,coeff_name_prefix));
+> else fprintf(file_name,
+> "%a = %s;\n",
+> 'COEFF'(op(posn)),
+> coeff_name(posn,coeff_name_prefix));
+> end if;
+> end proc
+> ,
+> posn_list
+> );
+> fclose(file_name);
+>
+> NULL;
+> end proc;
+print_interp_coeff_var_store := proc(posn_list::list(list(numeric)),
+RHS_factor_name::string, coeff_name_prefix::string, file_name::string)
+ ftruncate(file_name);
+ map(proc(posn::list(numeric))
+ if 0 < length(RHS_factor_name) then fprintf(file_name,
+ "%a = %s * %s;\n", 'COEFF'(op(posn)), RHS_factor_name,
+ coeff_name(posn, coeff_name_prefix))
+ else fprintf(file_name, "%a = %s;\n", 'COEFF'(op(posn)),
+ coeff_name(posn, coeff_name_prefix))
+ end if
+ end proc, posn_list);
+ fclose(file_name);
+ NULL
+end proc
+
+>
+################################################################################
+>
+#
+# This function prints a C expression to compute the interpolant,
+# using the coefficients computed by print_coeff__lc_of_data()
+# (i.e. expressing the interpolant as a linear combination of the
+# data values).
+#
+# Arguments:
+# posn_list = The same list of positions as was used to compute the
+# interpolating polynomial.
+# result_var_name = The (string) name of the variable to which the
+# result is to be assigned.
+# coeff_name_prefix = A prefix string for the coefficient names.
+# data_var_name_prefix = A prefix string for the data variable names.
+# file_name = The file name to write the coefficients to. This is
+# truncated before writing.
+#
+> print_interp_cmpt__lc_of_data :=
+> proc(
+> posn_list::list(list(numeric)),
+> result_var_name::string,
+> coeff_name_prefix::string,
+> data_var_name_prefix::string,
+> file_name::string
+> )
+>
+> ftruncate(file_name);
+>
+> fprintf(file_name, "%s =\n", result_var_name);
+>
+# list of "coeff*data_var" terms
+> map(
+> proc(posn::list(numeric))
+> sprintf("%s*%s",
+> coeff_name(posn,coeff_name_prefix),
+> data_var_name(posn,data_var_name_prefix));
+> end proc
+> ,
+> posn_list
+> );
+>
+> ListTools[Join](%, "\n\t+ ");
+> cat(op(%));
+> fprintf(file_name, "\t%s;\n", %);
+>
+> fclose(file_name);
+>
+> NULL;
+> end proc;
+print_interp_cmpt__lc_of_data := proc(posn_list::list(list(numeric)),
+result_var_name::string, coeff_name_prefix::string,
+data_var_name_prefix::string, file_name::string)
+ ftruncate(file_name);
+ fprintf(file_name, "%s =\n", result_var_name);
+ map(proc(posn::list(numeric))
+ sprintf("%s*%s", coeff_name(posn, coeff_name_prefix),
+ data_var_name(posn, data_var_name_prefix))
+ end proc, posn_list);
+ ListTools[Join](%, "\n\t+ ");
+ cat(op(%));
+ fprintf(file_name, "\t%s;\n", %);
+ fclose(file_name);
+ NULL
+end proc
+
+>
+################################################################################
+################################################################################
+################################################################################
+>
+#
+# This function computes the name of the coefficient of the data at a
+# given [m] position, i.e. it encapsulates our naming convention for this.
+#
+# Arguments:
+# posn = (in) The [m] coordinates.
+# name_prefix = A prefix string for the coefficient name.
+#
+# Results:
+# The function returns the coefficient, as a Maple string.
+#
+> coeff_name :=
+> proc(posn::list(numeric), name_prefix::string)
+> cat(name_prefix, sprint_numeric_list(posn));
+> end proc;
+coeff_name := proc(posn::list(numeric), name_prefix::string)
+ cat(name_prefix, sprint_numeric_list(posn))
+end proc
+
+>
+################################################################################
+>
+#
+# This function computes the name of the variable in which the C code
+# will store the input data at a given [m] position, i.e. it encapsulates
+# our naming convention for this.
+#
+# Arguments:
+# posn = (in) The [m] coordinates.
+# name_prefix = A prefix string for the variable name.
+#
+# Results:
+# The function returns the variable name, as a Maple string.
+#
+> data_var_name :=
+> proc(posn::list(numeric), name_prefix::string)
+> cat(name_prefix, sprint_numeric_list(posn));
+> end proc;
+data_var_name := proc(posn::list(numeric), name_prefix::string)
+ cat(name_prefix, sprint_numeric_list(posn))
+end proc
+
+# Maple code to compute lists of point positions in hypercube-shaped molecules
+# $Id: $
+>
+################################################################################
+>
+#
+# 1D interpolation points
+#
+> posn_list_1d_size2 := hypercube_points([ 0], [+1]);
+ posn_list_1d_size2 := [[0], [1]]
+
+> posn_list_1d_size3 := hypercube_points([-1], [+1]);
+ posn_list_1d_size3 := [[-1], [0], [1]]
+
+> posn_list_1d_size4 := hypercube_points([-1], [+2]);
+ posn_list_1d_size4 := [[-1], [0], [1], [2]]
+
+> posn_list_1d_size5 := hypercube_points([-2], [+2]);
+ posn_list_1d_size5 := [[-2], [-1], [0], [1], [2]]
+
+> posn_list_1d_size6 := hypercube_points([-2], [+3]);
+ posn_list_1d_size6 := [[-2], [-1], [0], [1], [2], [3]]
+
+> posn_list_1d_size7 := hypercube_points([-3], [+3]);
+ posn_list_1d_size7 := [[-3], [-2], [-1], [0], [1], [2], [3]]
+
+>
+################################################################################
+>
+#
+# 2D interpolation points (Fortran ordering)
+#
+> posn_list_2d_size2 := map(ListTools[Reverse],
+> hypercube_points([ 0, 0], [+1,+1]));
+ posn_list_2d_size2 := [[0, 0], [1, 0], [0, 1], [1, 1]]
+
+> posn_list_2d_size3 := map(ListTools[Reverse],
+> hypercube_points([-1,-1], [+1,+1]));
+posn_list_2d_size3 := [[-1, -1], [0, -1], [1, -1], [-1, 0], [0, 0], [1, 0],
+
+ [-1, 1], [0, 1], [1, 1]]
+
+> posn_list_2d_size4 := map(ListTools[Reverse],
+> hypercube_points([-1,-1], [+2,+2]));
+posn_list_2d_size4 := [[-1, -1], [0, -1], [1, -1], [2, -1], [-1, 0], [0, 0],
+
+ [1, 0], [2, 0], [-1, 1], [0, 1], [1, 1], [2, 1], [-1, 2], [0, 2], [1, 2],
+
+ [2, 2]]
+
+> posn_list_2d_size5 := map(ListTools[Reverse],
+> hypercube_points([-2,-2], [+2,+2]));
+posn_list_2d_size5 := [[-2, -2], [-1, -2], [0, -2], [1, -2], [2, -2], [-2, -1],
+
+ [-1, -1], [0, -1], [1, -1], [2, -1], [-2, 0], [-1, 0], [0, 0], [1, 0],
+
+ [2, 0], [-2, 1], [-1, 1], [0, 1], [1, 1], [2, 1], [-2, 2], [-1, 2], [0, 2],
+
+ [1, 2], [2, 2]]
+
+>
+################################################################################
+>
+#
+# 3D interpolation points (Fortran ordering)
+#
+> posn_list_3d_size2 := map(ListTools[Reverse],
+> hypercube_points([ 0, 0, 0], [+1,+1,+1]));
+posn_list_3d_size2 := [[0, 0, 0], [1, 0, 0], [0, 1, 0], [1, 1, 0], [0, 0, 1],
+
+ [1, 0, 1], [0, 1, 1], [1, 1, 1]]
+
+> posn_list_3d_size3 := map(ListTools[Reverse],
+> hypercube_points([-1,-1,-1], [+1,+1,+1]));
+posn_list_3d_size3 := [[-1, -1, -1], [0, -1, -1], [1, -1, -1], [-1, 0, -1],
+
+ [0, 0, -1], [1, 0, -1], [-1, 1, -1], [0, 1, -1], [1, 1, -1], [-1, -1, 0],
+
+ [0, -1, 0], [1, -1, 0], [-1, 0, 0], [0, 0, 0], [1, 0, 0], [-1, 1, 0],
+
+ [0, 1, 0], [1, 1, 0], [-1, -1, 1], [0, -1, 1], [1, -1, 1], [-1, 0, 1],
+
+ [0, 0, 1], [1, 0, 1], [-1, 1, 1], [0, 1, 1], [1, 1, 1]]
+
+> posn_list_3d_size4 := map(ListTools[Reverse],
+> hypercube_points([-1,-1,-1], [+2,+2,+2]));
+posn_list_3d_size4 := [[-1, -1, -1], [0, -1, -1], [1, -1, -1], [2, -1, -1],
+
+ [-1, 0, -1], [0, 0, -1], [1, 0, -1], [2, 0, -1], [-1, 1, -1], [0, 1, -1],
+
+ [1, 1, -1], [2, 1, -1], [-1, 2, -1], [0, 2, -1], [1, 2, -1], [2, 2, -1],
+
+ [-1, -1, 0], [0, -1, 0], [1, -1, 0], [2, -1, 0], [-1, 0, 0], [0, 0, 0],
+
+ [1, 0, 0], [2, 0, 0], [-1, 1, 0], [0, 1, 0], [1, 1, 0], [2, 1, 0],
+
+ [-1, 2, 0], [0, 2, 0], [1, 2, 0], [2, 2, 0], [-1, -1, 1], [0, -1, 1],
+
+ [1, -1, 1], [2, -1, 1], [-1, 0, 1], [0, 0, 1], [1, 0, 1], [2, 0, 1],
+
+ [-1, 1, 1], [0, 1, 1], [1, 1, 1], [2, 1, 1], [-1, 2, 1], [0, 2, 1],
+
+ [1, 2, 1], [2, 2, 1], [-1, -1, 2], [0, -1, 2], [1, -1, 2], [2, -1, 2],
+
+ [-1, 0, 2], [0, 0, 2], [1, 0, 2], [2, 0, 2], [-1, 1, 2], [0, 1, 2],
+
+ [1, 1, 2], [2, 1, 2], [-1, 2, 2], [0, 2, 2], [1, 2, 2], [2, 2, 2]]
+
+> posn_list_3d_size5 := map(ListTools[Reverse],
+> hypercube_points([-2,-2,-2], [+2,+2,+2]));
+posn_list_3d_size5 := [[-2, -2, -2], [-1, -2, -2], [0, -2, -2], [1, -2, -2],
+
+ [2, -2, -2], [-2, -1, -2], [-1, -1, -2], [0, -1, -2], [1, -1, -2],
+
+ [2, -1, -2], [-2, 0, -2], [-1, 0, -2], [0, 0, -2], [1, 0, -2], [2, 0, -2],
+
+ [-2, 1, -2], [-1, 1, -2], [0, 1, -2], [1, 1, -2], [2, 1, -2], [-2, 2, -2],
+
+ [-1, 2, -2], [0, 2, -2], [1, 2, -2], [2, 2, -2], [-2, -2, -1], [-1, -2, -1],
+
+ [0, -2, -1], [1, -2, -1], [2, -2, -1], [-2, -1, -1], [-1, -1, -1],
+
+ [0, -1, -1], [1, -1, -1], [2, -1, -1], [-2, 0, -1], [-1, 0, -1], [0, 0, -1],
+
+ [1, 0, -1], [2, 0, -1], [-2, 1, -1], [-1, 1, -1], [0, 1, -1], [1, 1, -1],
+
+ [2, 1, -1], [-2, 2, -1], [-1, 2, -1], [0, 2, -1], [1, 2, -1], [2, 2, -1],
+
+ [-2, -2, 0], [-1, -2, 0], [0, -2, 0], [1, -2, 0], [2, -2, 0], [-2, -1, 0],
+
+ [-1, -1, 0], [0, -1, 0], [1, -1, 0], [2, -1, 0], [-2, 0, 0], [-1, 0, 0],
+
+ [0, 0, 0], [1, 0, 0], [2, 0, 0], [-2, 1, 0], [-1, 1, 0], [0, 1, 0],
+
+ [1, 1, 0], [2, 1, 0], [-2, 2, 0], [-1, 2, 0], [0, 2, 0], [1, 2, 0],
+
+ [2, 2, 0], [-2, -2, 1], [-1, -2, 1], [0, -2, 1], [1, -2, 1], [2, -2, 1],
+
+ [-2, -1, 1], [-1, -1, 1], [0, -1, 1], [1, -1, 1], [2, -1, 1], [-2, 0, 1],
+
+ [-1, 0, 1], [0, 0, 1], [1, 0, 1], [2, 0, 1], [-2, 1, 1], [-1, 1, 1],
+
+ [0, 1, 1], [1, 1, 1], [2, 1, 1], [-2, 2, 1], [-1, 2, 1], [0, 2, 1],
+
+ [1, 2, 1], [2, 2, 1], [-2, -2, 2], [-1, -2, 2], [0, -2, 2], [1, -2, 2],
+
+ [2, -2, 2], [-2, -1, 2], [-1, -1, 2], [0, -1, 2], [1, -1, 2], [2, -1, 2],
+
+ [-2, 0, 2], [-1, 0, 2], [0, 0, 2], [1, 0, 2], [2, 0, 2], [-2, 1, 2],
+
+ [-1, 1, 2], [0, 1, 2], [1, 1, 2], [2, 1, 2], [-2, 2, 2], [-1, 2, 2],
+
+ [0, 2, 2], [1, 2, 2], [2, 2, 2]]
+
+# Maple code to compute common coefficients for all 3d interpolation schemes
+# $Id: 3d.maple,v 1.3 2002/05/14 15:54:01 jthorn Exp $
+>
+################################################################################
+>
+#
+# generic stuff for 3d, cube, size=2
+#
+>
+> data_var_list_3d_size2 := map(data_var_name, posn_list_3d_size2, "data_");
+data_var_list_3d_size2 := ["data_0_0_0", "data_p1_0_0", "data_0_p1_0",
+
+ "data_p1_p1_0", "data_0_0_p1", "data_p1_0_p1", "data_0_p1_p1",
+
+ "data_p1_p1_p1"]
+
+>
+> print_name_list_dcl(data_var_list_3d_size2, "fp",
+> "3d.cube.size2/data-var.dcl.c");
+> print_data_var_assign(posn_list_3d_size2, "data_",
+> "3d.cube.size2/data-var.assign.c");
+>
+> print_interp_coeff_var_store(posn_list_3d_size2, "", "coeff_I_",
+> "3d.cube.size2/coeff-I.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size2, "factor", "coeff_dx_",
+> "3d.cube.size2/coeff-dx.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size2, "factor", "coeff_dy_",
+> "3d.cube.size2/coeff-dy.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size2, "factor", "coeff_dz_",
+> "3d.cube.size2/coeff-dz.store.c");
+>
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size2, "coeff_I_"), "fp",
+> "3d.cube.size2/coeff-I.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size2, "coeff_dx_"), "fp",
+> "3d.cube.size2/coeff-dx.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size2, "coeff_dy_"), "fp",
+> "3d.cube.size2/coeff-dy.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size2, "coeff_dz_"), "fp",
+> "3d.cube.size2/coeff-dz.dcl.c");
+>
+> print_interp_cmpt__lc_of_data(posn_list_3d_size2,
+> "result", "coeff_I_", "data_",
+> "3d.cube.size2/interp-I.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size2,
+> "result", "coeff_dx_", "data_",
+> "3d.cube.size2/interp-dx.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size2,
+> "result", "coeff_dy_", "data_",
+> "3d.cube.size2/interp-dy.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size2,
+> "result", "coeff_dz_", "data_",
+> "3d.cube.size2/interp-dz.compute.c");
+>
+########################################
+>
+#
+# generic stuff for 3d, cube, size=3
+#
+>
+> data_var_list_3d_size3 := map(data_var_name, posn_list_3d_size3, "data_");
+data_var_list_3d_size3 := ["data_m1_m1_m1", "data_0_m1_m1", "data_p1_m1_m1",
+
+ "data_m1_0_m1", "data_0_0_m1", "data_p1_0_m1", "data_m1_p1_m1",
+
+ "data_0_p1_m1", "data_p1_p1_m1", "data_m1_m1_0", "data_0_m1_0",
+
+ "data_p1_m1_0", "data_m1_0_0", "data_0_0_0", "data_p1_0_0", "data_m1_p1_0",
+
+ "data_0_p1_0", "data_p1_p1_0", "data_m1_m1_p1", "data_0_m1_p1",
+
+ "data_p1_m1_p1", "data_m1_0_p1", "data_0_0_p1", "data_p1_0_p1",
+
+ "data_m1_p1_p1", "data_0_p1_p1", "data_p1_p1_p1"]
+
+>
+> print_name_list_dcl(data_var_list_3d_size3, "fp",
+> "3d.cube.size3/data-var.dcl.c");
+> print_data_var_assign(posn_list_3d_size3, "data_",
+> "3d.cube.size3/data-var.assign.c");
+>
+> print_interp_coeff_var_store(posn_list_3d_size3, "", "coeff_I_",
+> "3d.cube.size3/coeff-I.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size3, "factor", "coeff_dx_",
+> "3d.cube.size3/coeff-dx.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size3, "factor", "coeff_dy_",
+> "3d.cube.size3/coeff-dy.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size3, "factor", "coeff_dz_",
+> "3d.cube.size3/coeff-dz.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size3, "factor", "coeff_dxx_",
+> "3d.cube.size3/coeff-dxx.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size3, "factor", "coeff_dxy_",
+> "3d.cube.size3/coeff-dxy.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size3, "factor", "coeff_dxz_",
+> "3d.cube.size3/coeff-dxz.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size3, "factor", "coeff_dyy_",
+> "3d.cube.size3/coeff-dyy.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size3, "factor", "coeff_dyz_",
+> "3d.cube.size3/coeff-dyz.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size3, "factor", "coeff_dzz_",
+> "3d.cube.size3/coeff-dzz.store.c");
+>
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size3, "coeff_I_"), "fp",
+> "3d.cube.size3/coeff-I.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size3, "coeff_dx_"), "fp",
+> "3d.cube.size3/coeff-dx.dcl.c");
+bytes used=1000120, alloc=917336, time=0.18
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size3, "coeff_dy_"), "fp",
+> "3d.cube.size3/coeff-dy.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size3, "coeff_dz_"), "fp",
+> "3d.cube.size3/coeff-dz.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size3, "coeff_dxx_"), "fp",
+> "3d.cube.size3/coeff-dxx.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size3, "coeff_dxy_"), "fp",
+> "3d.cube.size3/coeff-dxy.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size3, "coeff_dxz_"), "fp",
+> "3d.cube.size3/coeff-dxz.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size3, "coeff_dyy_"), "fp",
+> "3d.cube.size3/coeff-dyy.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size3, "coeff_dyz_"), "fp",
+> "3d.cube.size3/coeff-dyz.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size3, "coeff_dzz_"), "fp",
+> "3d.cube.size3/coeff-dzz.dcl.c");
+>
+> print_interp_cmpt__lc_of_data(posn_list_3d_size3,
+> "result", "coeff_I_", "data_",
+> "3d.cube.size3/interp-I.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size3,
+> "result", "coeff_dx_", "data_",
+> "3d.cube.size3/interp-dx.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size3,
+> "result", "coeff_dy_", "data_",
+> "3d.cube.size3/interp-dy.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size3,
+> "result", "coeff_dz_", "data_",
+> "3d.cube.size3/interp-dz.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size3,
+> "result", "coeff_dxx_", "data_",
+> "3d.cube.size3/interp-dxx.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size3,
+> "result", "coeff_dxy_", "data_",
+> "3d.cube.size3/interp-dxy.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size3,
+> "result", "coeff_dxz_", "data_",
+> "3d.cube.size3/interp-dxz.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size3,
+> "result", "coeff_dyy_", "data_",
+> "3d.cube.size3/interp-dyy.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size3,
+> "result", "coeff_dyz_", "data_",
+> "3d.cube.size3/interp-dyz.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size3,
+> "result", "coeff_dzz_", "data_",
+> "3d.cube.size3/interp-dzz.compute.c");
+>
+########################################
+>
+#
+# generic stuff for 3d, cube, size=4
+#
+>
+> data_var_list_3d_size4 := map(data_var_name, posn_list_3d_size4, "data_");
+data_var_list_3d_size4 := ["data_m1_m1_m1", "data_0_m1_m1", "data_p1_m1_m1",
+
+ "data_p2_m1_m1", "data_m1_0_m1", "data_0_0_m1", "data_p1_0_m1",
+
+ "data_p2_0_m1", "data_m1_p1_m1", "data_0_p1_m1", "data_p1_p1_m1",
+
+ "data_p2_p1_m1", "data_m1_p2_m1", "data_0_p2_m1", "data_p1_p2_m1",
+
+ "data_p2_p2_m1", "data_m1_m1_0", "data_0_m1_0", "data_p1_m1_0",
+
+ "data_p2_m1_0", "data_m1_0_0", "data_0_0_0", "data_p1_0_0", "data_p2_0_0",
+
+ "data_m1_p1_0", "data_0_p1_0", "data_p1_p1_0", "data_p2_p1_0",
+
+ "data_m1_p2_0", "data_0_p2_0", "data_p1_p2_0", "data_p2_p2_0",
+
+ "data_m1_m1_p1", "data_0_m1_p1", "data_p1_m1_p1", "data_p2_m1_p1",
+
+ "data_m1_0_p1", "data_0_0_p1", "data_p1_0_p1", "data_p2_0_p1",
+
+ "data_m1_p1_p1", "data_0_p1_p1", "data_p1_p1_p1", "data_p2_p1_p1",
+
+ "data_m1_p2_p1", "data_0_p2_p1", "data_p1_p2_p1", "data_p2_p2_p1",
+
+ "data_m1_m1_p2", "data_0_m1_p2", "data_p1_m1_p2", "data_p2_m1_p2",
+
+ "data_m1_0_p2", "data_0_0_p2", "data_p1_0_p2", "data_p2_0_p2",
+
+ "data_m1_p1_p2", "data_0_p1_p2", "data_p1_p1_p2", "data_p2_p1_p2",
+
+ "data_m1_p2_p2", "data_0_p2_p2", "data_p1_p2_p2", "data_p2_p2_p2"]
+
+>
+> print_name_list_dcl(data_var_list_3d_size4, "fp",
+> "3d.cube.size4/data-var.dcl.c");
+> print_data_var_assign(posn_list_3d_size4, "data_",
+> "3d.cube.size4/data-var.assign.c");
+bytes used=2000380, alloc=1179432, time=0.28
+>
+> print_interp_coeff_var_store(posn_list_3d_size4, "", "coeff_I_",
+> "3d.cube.size4/coeff-I.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size4, "factor", "coeff_dx_",
+> "3d.cube.size4/coeff-dx.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size4, "factor", "coeff_dy_",
+> "3d.cube.size4/coeff-dy.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size4, "factor", "coeff_dz_",
+> "3d.cube.size4/coeff-dz.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size4, "factor", "coeff_dxx_",
+> "3d.cube.size4/coeff-dxx.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size4, "factor", "coeff_dxy_",
+> "3d.cube.size4/coeff-dxy.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size4, "factor", "coeff_dxz_",
+> "3d.cube.size4/coeff-dxz.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size4, "factor", "coeff_dyy_",
+> "3d.cube.size4/coeff-dyy.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size4, "factor", "coeff_dyz_",
+> "3d.cube.size4/coeff-dyz.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size4, "factor", "coeff_dzz_",
+> "3d.cube.size4/coeff-dzz.store.c");
+>
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size4, "coeff_I_"), "fp",
+> "3d.cube.size4/coeff-I.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size4, "coeff_dx_"), "fp",
+> "3d.cube.size4/coeff-dx.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size4, "coeff_dy_"), "fp",
+> "3d.cube.size4/coeff-dy.dcl.c");
+bytes used=3000632, alloc=1244956, time=0.40
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size4, "coeff_dz_"), "fp",
+> "3d.cube.size4/coeff-dz.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size4, "coeff_dxx_"), "fp",
+> "3d.cube.size4/coeff-dxx.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size4, "coeff_dxy_"), "fp",
+> "3d.cube.size4/coeff-dxy.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size4, "coeff_dxz_"), "fp",
+> "3d.cube.size4/coeff-dxz.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size4, "coeff_dyy_"), "fp",
+> "3d.cube.size4/coeff-dyy.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size4, "coeff_dyz_"), "fp",
+> "3d.cube.size4/coeff-dyz.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size4, "coeff_dzz_"), "fp",
+> "3d.cube.size4/coeff-dzz.dcl.c");
+>
+> print_interp_cmpt__lc_of_data(posn_list_3d_size4,
+> "result", "coeff_I_", "data_",
+> "3d.cube.size4/interp-I.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size4,
+> "result", "coeff_dx_", "data_",
+> "3d.cube.size4/interp-dx.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size4,
+> "result", "coeff_dy_", "data_",
+> "3d.cube.size4/interp-dy.compute.c");
+bytes used=4000828, alloc=1310480, time=0.49
+> print_interp_cmpt__lc_of_data(posn_list_3d_size4,
+> "result", "coeff_dz_", "data_",
+> "3d.cube.size4/interp-dz.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size4,
+> "result", "coeff_dxx_", "data_",
+> "3d.cube.size4/interp-dxx.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size4,
+> "result", "coeff_dxy_", "data_",
+> "3d.cube.size4/interp-dxy.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size4,
+> "result", "coeff_dxz_", "data_",
+> "3d.cube.size4/interp-dxz.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size4,
+> "result", "coeff_dyy_", "data_",
+> "3d.cube.size4/interp-dyy.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size4,
+> "result", "coeff_dyz_", "data_",
+> "3d.cube.size4/interp-dyz.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size4,
+> "result", "coeff_dzz_", "data_",
+> "3d.cube.size4/interp-dzz.compute.c");
+>
+########################################
+>
+#
+# generic stuff for 3d, cube, size=5
+#
+>
+> data_var_list_3d_size5 := map(data_var_name, posn_list_3d_size5, "data_");
+bytes used=5001008, alloc=1310480, time=0.63
+data_var_list_3d_size5 := ["data_m2_m2_m2", "data_m1_m2_m2", "data_0_m2_m2",
+
+ "data_p1_m2_m2", "data_p2_m2_m2", "data_m2_m1_m2", "data_m1_m1_m2",
+
+ "data_0_m1_m2", "data_p1_m1_m2", "data_p2_m1_m2", "data_m2_0_m2",
+
+ "data_m1_0_m2", "data_0_0_m2", "data_p1_0_m2", "data_p2_0_m2",
+
+ "data_m2_p1_m2", "data_m1_p1_m2", "data_0_p1_m2", "data_p1_p1_m2",
+
+ "data_p2_p1_m2", "data_m2_p2_m2", "data_m1_p2_m2", "data_0_p2_m2",
+
+ "data_p1_p2_m2", "data_p2_p2_m2", "data_m2_m2_m1", "data_m1_m2_m1",
+
+ "data_0_m2_m1", "data_p1_m2_m1", "data_p2_m2_m1", "data_m2_m1_m1",
+
+ "data_m1_m1_m1", "data_0_m1_m1", "data_p1_m1_m1", "data_p2_m1_m1",
+
+ "data_m2_0_m1", "data_m1_0_m1", "data_0_0_m1", "data_p1_0_m1",
+
+ "data_p2_0_m1", "data_m2_p1_m1", "data_m1_p1_m1", "data_0_p1_m1",
+
+ "data_p1_p1_m1", "data_p2_p1_m1", "data_m2_p2_m1", "data_m1_p2_m1",
+
+ "data_0_p2_m1", "data_p1_p2_m1", "data_p2_p2_m1", "data_m2_m2_0",
+
+ "data_m1_m2_0", "data_0_m2_0", "data_p1_m2_0", "data_p2_m2_0",
+
+ "data_m2_m1_0", "data_m1_m1_0", "data_0_m1_0", "data_p1_m1_0",
+
+ "data_p2_m1_0", "data_m2_0_0", "data_m1_0_0", "data_0_0_0", "data_p1_0_0",
+
+ "data_p2_0_0", "data_m2_p1_0", "data_m1_p1_0", "data_0_p1_0",
+
+ "data_p1_p1_0", "data_p2_p1_0", "data_m2_p2_0", "data_m1_p2_0",
+
+ "data_0_p2_0", "data_p1_p2_0", "data_p2_p2_0", "data_m2_m2_p1",
+
+ "data_m1_m2_p1", "data_0_m2_p1", "data_p1_m2_p1", "data_p2_m2_p1",
+
+ "data_m2_m1_p1", "data_m1_m1_p1", "data_0_m1_p1", "data_p1_m1_p1",
+
+ "data_p2_m1_p1", "data_m2_0_p1", "data_m1_0_p1", "data_0_0_p1",
+
+ "data_p1_0_p1", "data_p2_0_p1", "data_m2_p1_p1", "data_m1_p1_p1",
+
+ "data_0_p1_p1", "data_p1_p1_p1", "data_p2_p1_p1", "data_m2_p2_p1",
+
+ "data_m1_p2_p1", "data_0_p2_p1", "data_p1_p2_p1", "data_p2_p2_p1",
+
+ "data_m2_m2_p2", "data_m1_m2_p2", "data_0_m2_p2", "data_p1_m2_p2",
+
+ "data_p2_m2_p2", "data_m2_m1_p2", "data_m1_m1_p2", "data_0_m1_p2",
+
+ "data_p1_m1_p2", "data_p2_m1_p2", "data_m2_0_p2", "data_m1_0_p2",
+
+ "data_0_0_p2", "data_p1_0_p2", "data_p2_0_p2", "data_m2_p1_p2",
+
+ "data_m1_p1_p2", "data_0_p1_p2", "data_p1_p1_p2", "data_p2_p1_p2",
+
+ "data_m2_p2_p2", "data_m1_p2_p2", "data_0_p2_p2", "data_p1_p2_p2",
+
+ "data_p2_p2_p2"]
+
+>
+> print_name_list_dcl(data_var_list_3d_size5, "fp",
+> "3d.cube.size5/data-var.dcl.c");
+> print_data_var_assign(posn_list_3d_size5, "data_",
+> "3d.cube.size5/data-var.assign.c");
+>
+> print_interp_coeff_var_store(posn_list_3d_size5, "", "coeff_I_",
+> "3d.cube.size5/coeff-I.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size5, "factor", "coeff_dx_",
+> "3d.cube.size5/coeff-dx.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size5, "factor", "coeff_dy_",
+> "3d.cube.size5/coeff-dy.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size5, "factor", "coeff_dz_",
+> "3d.cube.size5/coeff-dz.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size5, "factor", "coeff_dxx_",
+> "3d.cube.size5/coeff-dxx.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size5, "factor", "coeff_dxy_",
+> "3d.cube.size5/coeff-dxy.store.c");
+bytes used=6001252, alloc=1310480, time=0.77
+> print_interp_coeff_var_store(posn_list_3d_size5, "factor", "coeff_dxz_",
+> "3d.cube.size5/coeff-dxz.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size5, "factor", "coeff_dyy_",
+> "3d.cube.size5/coeff-dyy.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size5, "factor", "coeff_dyz_",
+> "3d.cube.size5/coeff-dyz.store.c");
+> print_interp_coeff_var_store(posn_list_3d_size5, "factor", "coeff_dzz_",
+> "3d.cube.size5/coeff-dzz.store.c");
+>
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size5, "coeff_I_"), "fp",
+> "3d.cube.size5/coeff-I.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size5, "coeff_dx_"), "fp",
+> "3d.cube.size5/coeff-dx.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size5, "coeff_dy_"), "fp",
+> "3d.cube.size5/coeff-dy.dcl.c");
+bytes used=7001440, alloc=1376004, time=0.89
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size5, "coeff_dz_"), "fp",
+> "3d.cube.size5/coeff-dz.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size5, "coeff_dxx_"), "fp",
+> "3d.cube.size5/coeff-dxx.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size5, "coeff_dxy_"), "fp",
+> "3d.cube.size5/coeff-dxy.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size5, "coeff_dxz_"), "fp",
+> "3d.cube.size5/coeff-dxz.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size5, "coeff_dyy_"), "fp",
+> "3d.cube.size5/coeff-dyy.dcl.c");
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size5, "coeff_dyz_"), "fp",
+> "3d.cube.size5/coeff-dyz.dcl.c");
+bytes used=8001776, alloc=1441528, time=0.98
+> print_name_list_dcl(map(coeff_name, posn_list_3d_size5, "coeff_dzz_"), "fp",
+> "3d.cube.size5/coeff-dzz.dcl.c");
+>
+> print_interp_cmpt__lc_of_data(posn_list_3d_size5,
+> "result", "coeff_I_", "data_",
+> "3d.cube.size5/interp-I.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size5,
+> "result", "coeff_dx_", "data_",
+> "3d.cube.size5/interp-dx.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size5,
+> "result", "coeff_dy_", "data_",
+> "3d.cube.size5/interp-dy.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size5,
+> "result", "coeff_dz_", "data_",
+> "3d.cube.size5/interp-dz.compute.c");
+bytes used=9001948, alloc=1441528, time=1.09
+> print_interp_cmpt__lc_of_data(posn_list_3d_size5,
+> "result", "coeff_dxx_", "data_",
+> "3d.cube.size5/interp-dxx.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size5,
+> "result", "coeff_dxy_", "data_",
+> "3d.cube.size5/interp-dxy.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size5,
+> "result", "coeff_dxz_", "data_",
+> "3d.cube.size5/interp-dxz.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size5,
+> "result", "coeff_dyy_", "data_",
+> "3d.cube.size5/interp-dyy.compute.c");
+bytes used=10002200, alloc=1441528, time=1.21
+> print_interp_cmpt__lc_of_data(posn_list_3d_size5,
+> "result", "coeff_dyz_", "data_",
+> "3d.cube.size5/interp-dyz.compute.c");
+> print_interp_cmpt__lc_of_data(posn_list_3d_size5,
+> "result", "coeff_dzz_", "data_",
+> "3d.cube.size5/interp-dzz.compute.c");
+>
+################################################################################
+> quit
+bytes used=10722536, alloc=1441528, time=1.29
diff --git a/src/GeneralizedPolynomial-Uniform/common/3d.maple b/src/GeneralizedPolynomial-Uniform/common/3d.maple
new file mode 100644
index 0000000..45a913c
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/3d.maple
@@ -0,0 +1,306 @@
+# Maple code to compute common coefficients for all 3d interpolation schemes
+# $Id$
+
+################################################################################
+
+#
+# generic stuff for 3d, cube, size=2
+#
+
+data_var_list_3d_size2 := map(data_var_name, posn_list_3d_size2, "data_");
+
+print_name_list_dcl(data_var_list_3d_size2, "fp",
+ "3d.cube.size2/data-var.dcl.c");
+print_data_var_assign(posn_list_3d_size2, "data_",
+ "3d.cube.size2/data-var.assign.c");
+
+print_interp_coeff_var_store(posn_list_3d_size2, "", "coeff_I_",
+ "3d.cube.size2/coeff-I.store.c");
+print_interp_coeff_var_store(posn_list_3d_size2, "factor", "coeff_dx_",
+ "3d.cube.size2/coeff-dx.store.c");
+print_interp_coeff_var_store(posn_list_3d_size2, "factor", "coeff_dy_",
+ "3d.cube.size2/coeff-dy.store.c");
+print_interp_coeff_var_store(posn_list_3d_size2, "factor", "coeff_dz_",
+ "3d.cube.size2/coeff-dz.store.c");
+
+print_name_list_dcl(map(coeff_name, posn_list_3d_size2, "coeff_I_"), "fp",
+ "3d.cube.size2/coeff-I.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size2, "coeff_dx_"), "fp",
+ "3d.cube.size2/coeff-dx.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size2, "coeff_dy_"), "fp",
+ "3d.cube.size2/coeff-dy.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size2, "coeff_dz_"), "fp",
+ "3d.cube.size2/coeff-dz.dcl.c");
+
+print_interp_cmpt__lc_of_data(posn_list_3d_size2,
+ "result", "coeff_I_", "data_",
+ "3d.cube.size2/interp-I.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size2,
+ "result", "coeff_dx_", "data_",
+ "3d.cube.size2/interp-dx.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size2,
+ "result", "coeff_dy_", "data_",
+ "3d.cube.size2/interp-dy.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size2,
+ "result", "coeff_dz_", "data_",
+ "3d.cube.size2/interp-dz.compute.c");
+
+########################################
+
+#
+# generic stuff for 3d, cube, size=3
+#
+
+data_var_list_3d_size3 := map(data_var_name, posn_list_3d_size3, "data_");
+
+print_name_list_dcl(data_var_list_3d_size3, "fp",
+ "3d.cube.size3/data-var.dcl.c");
+print_data_var_assign(posn_list_3d_size3, "data_",
+ "3d.cube.size3/data-var.assign.c");
+
+print_interp_coeff_var_store(posn_list_3d_size3, "", "coeff_I_",
+ "3d.cube.size3/coeff-I.store.c");
+print_interp_coeff_var_store(posn_list_3d_size3, "factor", "coeff_dx_",
+ "3d.cube.size3/coeff-dx.store.c");
+print_interp_coeff_var_store(posn_list_3d_size3, "factor", "coeff_dy_",
+ "3d.cube.size3/coeff-dy.store.c");
+print_interp_coeff_var_store(posn_list_3d_size3, "factor", "coeff_dz_",
+ "3d.cube.size3/coeff-dz.store.c");
+print_interp_coeff_var_store(posn_list_3d_size3, "factor", "coeff_dxx_",
+ "3d.cube.size3/coeff-dxx.store.c");
+print_interp_coeff_var_store(posn_list_3d_size3, "factor", "coeff_dxy_",
+ "3d.cube.size3/coeff-dxy.store.c");
+print_interp_coeff_var_store(posn_list_3d_size3, "factor", "coeff_dxz_",
+ "3d.cube.size3/coeff-dxz.store.c");
+print_interp_coeff_var_store(posn_list_3d_size3, "factor", "coeff_dyy_",
+ "3d.cube.size3/coeff-dyy.store.c");
+print_interp_coeff_var_store(posn_list_3d_size3, "factor", "coeff_dyz_",
+ "3d.cube.size3/coeff-dyz.store.c");
+print_interp_coeff_var_store(posn_list_3d_size3, "factor", "coeff_dzz_",
+ "3d.cube.size3/coeff-dzz.store.c");
+
+print_name_list_dcl(map(coeff_name, posn_list_3d_size3, "coeff_I_"), "fp",
+ "3d.cube.size3/coeff-I.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size3, "coeff_dx_"), "fp",
+ "3d.cube.size3/coeff-dx.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size3, "coeff_dy_"), "fp",
+ "3d.cube.size3/coeff-dy.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size3, "coeff_dz_"), "fp",
+ "3d.cube.size3/coeff-dz.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size3, "coeff_dxx_"), "fp",
+ "3d.cube.size3/coeff-dxx.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size3, "coeff_dxy_"), "fp",
+ "3d.cube.size3/coeff-dxy.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size3, "coeff_dxz_"), "fp",
+ "3d.cube.size3/coeff-dxz.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size3, "coeff_dyy_"), "fp",
+ "3d.cube.size3/coeff-dyy.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size3, "coeff_dyz_"), "fp",
+ "3d.cube.size3/coeff-dyz.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size3, "coeff_dzz_"), "fp",
+ "3d.cube.size3/coeff-dzz.dcl.c");
+
+print_interp_cmpt__lc_of_data(posn_list_3d_size3,
+ "result", "coeff_I_", "data_",
+ "3d.cube.size3/interp-I.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size3,
+ "result", "coeff_dx_", "data_",
+ "3d.cube.size3/interp-dx.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size3,
+ "result", "coeff_dy_", "data_",
+ "3d.cube.size3/interp-dy.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size3,
+ "result", "coeff_dz_", "data_",
+ "3d.cube.size3/interp-dz.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size3,
+ "result", "coeff_dxx_", "data_",
+ "3d.cube.size3/interp-dxx.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size3,
+ "result", "coeff_dxy_", "data_",
+ "3d.cube.size3/interp-dxy.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size3,
+ "result", "coeff_dxz_", "data_",
+ "3d.cube.size3/interp-dxz.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size3,
+ "result", "coeff_dyy_", "data_",
+ "3d.cube.size3/interp-dyy.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size3,
+ "result", "coeff_dyz_", "data_",
+ "3d.cube.size3/interp-dyz.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size3,
+ "result", "coeff_dzz_", "data_",
+ "3d.cube.size3/interp-dzz.compute.c");
+
+########################################
+
+#
+# generic stuff for 3d, cube, size=4
+#
+
+data_var_list_3d_size4 := map(data_var_name, posn_list_3d_size4, "data_");
+
+print_name_list_dcl(data_var_list_3d_size4, "fp",
+ "3d.cube.size4/data-var.dcl.c");
+print_data_var_assign(posn_list_3d_size4, "data_",
+ "3d.cube.size4/data-var.assign.c");
+
+print_interp_coeff_var_store(posn_list_3d_size4, "", "coeff_I_",
+ "3d.cube.size4/coeff-I.store.c");
+print_interp_coeff_var_store(posn_list_3d_size4, "factor", "coeff_dx_",
+ "3d.cube.size4/coeff-dx.store.c");
+print_interp_coeff_var_store(posn_list_3d_size4, "factor", "coeff_dy_",
+ "3d.cube.size4/coeff-dy.store.c");
+print_interp_coeff_var_store(posn_list_3d_size4, "factor", "coeff_dz_",
+ "3d.cube.size4/coeff-dz.store.c");
+print_interp_coeff_var_store(posn_list_3d_size4, "factor", "coeff_dxx_",
+ "3d.cube.size4/coeff-dxx.store.c");
+print_interp_coeff_var_store(posn_list_3d_size4, "factor", "coeff_dxy_",
+ "3d.cube.size4/coeff-dxy.store.c");
+print_interp_coeff_var_store(posn_list_3d_size4, "factor", "coeff_dxz_",
+ "3d.cube.size4/coeff-dxz.store.c");
+print_interp_coeff_var_store(posn_list_3d_size4, "factor", "coeff_dyy_",
+ "3d.cube.size4/coeff-dyy.store.c");
+print_interp_coeff_var_store(posn_list_3d_size4, "factor", "coeff_dyz_",
+ "3d.cube.size4/coeff-dyz.store.c");
+print_interp_coeff_var_store(posn_list_3d_size4, "factor", "coeff_dzz_",
+ "3d.cube.size4/coeff-dzz.store.c");
+
+print_name_list_dcl(map(coeff_name, posn_list_3d_size4, "coeff_I_"), "fp",
+ "3d.cube.size4/coeff-I.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size4, "coeff_dx_"), "fp",
+ "3d.cube.size4/coeff-dx.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size4, "coeff_dy_"), "fp",
+ "3d.cube.size4/coeff-dy.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size4, "coeff_dz_"), "fp",
+ "3d.cube.size4/coeff-dz.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size4, "coeff_dxx_"), "fp",
+ "3d.cube.size4/coeff-dxx.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size4, "coeff_dxy_"), "fp",
+ "3d.cube.size4/coeff-dxy.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size4, "coeff_dxz_"), "fp",
+ "3d.cube.size4/coeff-dxz.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size4, "coeff_dyy_"), "fp",
+ "3d.cube.size4/coeff-dyy.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size4, "coeff_dyz_"), "fp",
+ "3d.cube.size4/coeff-dyz.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size4, "coeff_dzz_"), "fp",
+ "3d.cube.size4/coeff-dzz.dcl.c");
+
+print_interp_cmpt__lc_of_data(posn_list_3d_size4,
+ "result", "coeff_I_", "data_",
+ "3d.cube.size4/interp-I.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size4,
+ "result", "coeff_dx_", "data_",
+ "3d.cube.size4/interp-dx.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size4,
+ "result", "coeff_dy_", "data_",
+ "3d.cube.size4/interp-dy.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size4,
+ "result", "coeff_dz_", "data_",
+ "3d.cube.size4/interp-dz.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size4,
+ "result", "coeff_dxx_", "data_",
+ "3d.cube.size4/interp-dxx.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size4,
+ "result", "coeff_dxy_", "data_",
+ "3d.cube.size4/interp-dxy.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size4,
+ "result", "coeff_dxz_", "data_",
+ "3d.cube.size4/interp-dxz.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size4,
+ "result", "coeff_dyy_", "data_",
+ "3d.cube.size4/interp-dyy.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size4,
+ "result", "coeff_dyz_", "data_",
+ "3d.cube.size4/interp-dyz.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size4,
+ "result", "coeff_dzz_", "data_",
+ "3d.cube.size4/interp-dzz.compute.c");
+
+########################################
+
+#
+# generic stuff for 3d, cube, size=5
+#
+
+data_var_list_3d_size5 := map(data_var_name, posn_list_3d_size5, "data_");
+
+print_name_list_dcl(data_var_list_3d_size5, "fp",
+ "3d.cube.size5/data-var.dcl.c");
+print_data_var_assign(posn_list_3d_size5, "data_",
+ "3d.cube.size5/data-var.assign.c");
+
+print_interp_coeff_var_store(posn_list_3d_size5, "", "coeff_I_",
+ "3d.cube.size5/coeff-I.store.c");
+print_interp_coeff_var_store(posn_list_3d_size5, "factor", "coeff_dx_",
+ "3d.cube.size5/coeff-dx.store.c");
+print_interp_coeff_var_store(posn_list_3d_size5, "factor", "coeff_dy_",
+ "3d.cube.size5/coeff-dy.store.c");
+print_interp_coeff_var_store(posn_list_3d_size5, "factor", "coeff_dz_",
+ "3d.cube.size5/coeff-dz.store.c");
+print_interp_coeff_var_store(posn_list_3d_size5, "factor", "coeff_dxx_",
+ "3d.cube.size5/coeff-dxx.store.c");
+print_interp_coeff_var_store(posn_list_3d_size5, "factor", "coeff_dxy_",
+ "3d.cube.size5/coeff-dxy.store.c");
+print_interp_coeff_var_store(posn_list_3d_size5, "factor", "coeff_dxz_",
+ "3d.cube.size5/coeff-dxz.store.c");
+print_interp_coeff_var_store(posn_list_3d_size5, "factor", "coeff_dyy_",
+ "3d.cube.size5/coeff-dyy.store.c");
+print_interp_coeff_var_store(posn_list_3d_size5, "factor", "coeff_dyz_",
+ "3d.cube.size5/coeff-dyz.store.c");
+print_interp_coeff_var_store(posn_list_3d_size5, "factor", "coeff_dzz_",
+ "3d.cube.size5/coeff-dzz.store.c");
+
+print_name_list_dcl(map(coeff_name, posn_list_3d_size5, "coeff_I_"), "fp",
+ "3d.cube.size5/coeff-I.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size5, "coeff_dx_"), "fp",
+ "3d.cube.size5/coeff-dx.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size5, "coeff_dy_"), "fp",
+ "3d.cube.size5/coeff-dy.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size5, "coeff_dz_"), "fp",
+ "3d.cube.size5/coeff-dz.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size5, "coeff_dxx_"), "fp",
+ "3d.cube.size5/coeff-dxx.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size5, "coeff_dxy_"), "fp",
+ "3d.cube.size5/coeff-dxy.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size5, "coeff_dxz_"), "fp",
+ "3d.cube.size5/coeff-dxz.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size5, "coeff_dyy_"), "fp",
+ "3d.cube.size5/coeff-dyy.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size5, "coeff_dyz_"), "fp",
+ "3d.cube.size5/coeff-dyz.dcl.c");
+print_name_list_dcl(map(coeff_name, posn_list_3d_size5, "coeff_dzz_"), "fp",
+ "3d.cube.size5/coeff-dzz.dcl.c");
+
+print_interp_cmpt__lc_of_data(posn_list_3d_size5,
+ "result", "coeff_I_", "data_",
+ "3d.cube.size5/interp-I.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size5,
+ "result", "coeff_dx_", "data_",
+ "3d.cube.size5/interp-dx.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size5,
+ "result", "coeff_dy_", "data_",
+ "3d.cube.size5/interp-dy.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size5,
+ "result", "coeff_dz_", "data_",
+ "3d.cube.size5/interp-dz.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size5,
+ "result", "coeff_dxx_", "data_",
+ "3d.cube.size5/interp-dxx.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size5,
+ "result", "coeff_dxy_", "data_",
+ "3d.cube.size5/interp-dxy.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size5,
+ "result", "coeff_dxz_", "data_",
+ "3d.cube.size5/interp-dxz.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size5,
+ "result", "coeff_dyy_", "data_",
+ "3d.cube.size5/interp-dyy.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size5,
+ "result", "coeff_dyz_", "data_",
+ "3d.cube.size5/interp-dyz.compute.c");
+print_interp_cmpt__lc_of_data(posn_list_3d_size5,
+ "result", "coeff_dzz_", "data_",
+ "3d.cube.size5/interp-dzz.compute.c");
+
+################################################################################
diff --git a/src/GeneralizedPolynomial-Uniform/common/README b/src/GeneralizedPolynomial-Uniform/common/README
new file mode 100644
index 0000000..cf22912
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/README
@@ -0,0 +1,6 @@
+This directory contains Maple code to generate machine-generated coefficient
+files which are common to multiple interpolation operators. In practice
+these files depend only on the dimensionality and the molecule size/shape
+(eg 3d, cube, size 4).
+
+The subdirectories contain the actual machine-generated files.
diff --git a/src/GeneralizedPolynomial-Uniform/common/cube_posns.maple b/src/GeneralizedPolynomial-Uniform/common/cube_posns.maple
new file mode 100644
index 0000000..0d23e1c
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/cube_posns.maple
@@ -0,0 +1,42 @@
+# Maple code to compute lists of point positions in hypercube-shaped molecules
+# $Id$
+
+################################################################################
+
+#
+# 1D interpolation points
+#
+posn_list_1d_size2 := hypercube_points([ 0], [+1]);
+posn_list_1d_size3 := hypercube_points([-1], [+1]);
+posn_list_1d_size4 := hypercube_points([-1], [+2]);
+posn_list_1d_size5 := hypercube_points([-2], [+2]);
+posn_list_1d_size6 := hypercube_points([-2], [+3]);
+posn_list_1d_size7 := hypercube_points([-3], [+3]);
+
+################################################################################
+
+#
+# 2D interpolation points (Fortran ordering)
+#
+posn_list_2d_size2 := map(ListTools[Reverse],
+ hypercube_points([ 0, 0], [+1,+1]));
+posn_list_2d_size3 := map(ListTools[Reverse],
+ hypercube_points([-1,-1], [+1,+1]));
+posn_list_2d_size4 := map(ListTools[Reverse],
+ hypercube_points([-1,-1], [+2,+2]));
+posn_list_2d_size5 := map(ListTools[Reverse],
+ hypercube_points([-2,-2], [+2,+2]));
+
+################################################################################
+
+#
+# 3D interpolation points (Fortran ordering)
+#
+posn_list_3d_size2 := map(ListTools[Reverse],
+ hypercube_points([ 0, 0, 0], [+1,+1,+1]));
+posn_list_3d_size3 := map(ListTools[Reverse],
+ hypercube_points([-1,-1,-1], [+1,+1,+1]));
+posn_list_3d_size4 := map(ListTools[Reverse],
+ hypercube_points([-1,-1,-1], [+2,+2,+2]));
+posn_list_3d_size5 := map(ListTools[Reverse],
+ hypercube_points([-2,-2,-2], [+2,+2,+2]));
diff --git a/src/GeneralizedPolynomial-Uniform/common/makefile b/src/GeneralizedPolynomial-Uniform/common/makefile
new file mode 100644
index 0000000..c34120b
--- /dev/null
+++ b/src/GeneralizedPolynomial-Uniform/common/makefile
@@ -0,0 +1,62 @@
+#
+# main targets: rebuild machine-generated coefficient files
+#
+
+default : 1d 2d 3d
+dirs : 1d.dirs 2d.dirs 3d.dirs
+
+.PHONY : 1d
+1d :
+ -rm 1d.cube.size*/*.c
+ cat ../util.maple ../interpolate.maple \
+ cube_posns.maple 1d.maple \
+ | maple 2>&1 >1d.log
+
+.PHONY : 2d
+2d :
+ -rm 2d.cube.size*/*.c
+ cat ../util.maple ../interpolate.maple \
+ cube_posns.maple 2d.maple \
+ | maple 2>&2 >2d.log
+
+.PHONY : 3d
+3d :
+ -rm 3d.cube.size*/*.c
+ cat ../util.maple ../interpolate.maple \
+ cube_posns.maple 3d.maple \
+ | maple 2>&2 >3d.log
+
+################################################################################
+
+#
+# targets to initially create directories for machine-generated coefficients
+# these only need to be run if you're setting up a new interpolator,
+# i.e. if you don't already have the directories in cvs
+# (you still have to add them to cvs by hand)
+#
+
+.PHONY : 1d.dirs
+1d.dirs:
+ -rm -rf 1d.cube.size*
+ mkdir 1d.cube.size2
+ mkdir 1d.cube.size3
+ mkdir 1d.cube.size4
+ mkdir 1d.cube.size5
+ mkdir 1d.cube.size6
+ mkdir 1d.cube.size7
+
+.PHONY : 2d.dirs
+2d.dirs:
+ -rm -rf 2d.cube.size*
+ mkdir 2d.cube.size2
+ mkdir 2d.cube.size3
+ mkdir 2d.cube.size4
+ mkdir 2d.cube.size5
+
+.PHONY : 3d.dirs
+3d.dirs:
+ -rm -rf 3d.cube.size*
+ mkdir 3d.cube.size2
+ mkdir 3d.cube.size3
+ mkdir 3d.cube.size4
+ mkdir 3d.cube.size5