Grids

Assume that we have an Atoms object contained in a cubic unit cell of sidelength L:

L = 2.0
atoms = Atoms(cell=(L, L, L), pbc=True)

and we use a calculator with a grid spacing of h=0.25 Å or gpts=(8, 8, 8). Since we have periodic boundary conditions, the x-axis will look like this (the y and z-axes look the same):

 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0
-+---------------+---------------+---------------+-
-L               0               L              2*L

Wave functions are represented on 8x8x8 grids, where the grid points are numbered from 0 to 7.

If we use zero boundary conditions (pbc=False), then the x-axis will look like this:

  0 1 2 3 4 5 6
+---------------+
0               L

Here the wave functions are exactly zero at x=0 Å and x=L, and only the non-zero values are stored in 7x7x7 grids (grid points numbered from 0 to 6).

Update this XXX how about padding?

An example:

>>> L = 2.0
>>> atoms = Atoms(...,
...               cell=(L, L, L),
...               pbc=False)
>>> calc = GPAW(..., gpts=(8, 8, 8))
>>> atoms.SetCalculator(calc)
>>> e = atoms.get_potential_energy()
>>> wf = calc.get_pseudo_wave_function(band=0)
>>> wf.shape
(7, 7, 7)
>>> calc.GetGridSpacings()
array([ 0.25,  0.25])