# domain keywords

Unit cell descriptors

## domain.bravaisLattice

Bravais lattice.

**type**: `string`

**allowed**:
`'CUB','FCC','BCC','TET','BCT1','BCT2','ORC','ORCF1','ORCF2','ORCF3','ORCI','ORCC','HEX','RHL1','RHL2'`

**example**: `domain.bravaisLattice = 'BCT2'`

## domain.boundary

Determine the boundary conditions along each dimension. The
wavefunctions are assumed to be periodic if domain.boundary == 1 and
finite range otherwise (infinite square well boundary conditions). If
domain.boundary is set to 0, the Poisson equation is solved with
Dirichlet boundary conditions (homogeneous if domain.bvalx is not set).
If domain.boundary is set to 1, the Poisson equation is solved with
periodic boundary conditions. If domain.boundary is set to 2, the
Poisson equation is solved with homogeneous von Neumann boundary
conditions. This is tantamount to introducing a correcting dipole layer
at the edge of the type-2 dimension. If domain.boundary is set to 3
along one dimension and 1 along the other two, the system is treated as
open along the type-3 dimension. More precisely, the electrostatic
potential is calculated on the lower and upper type-3 boundaries and the
Poisson equation is solved using those boundary conditions. If in
addition an external potential is added to the open boundary, then
domain.boundary must be set to 4.

**type**: `array`

**default**: `[1,1,1]`

**allowed**: `[0,1,2,3,4]`

**size**: `[1,3]`

**example**: `domain.boundary = [0 1 1]`

## domain.bvalx

This keyword determines the boundary values along the x-direction. It is
meaningful only if Dirichlet boundary conditions are used, which is done
by setting the domain.boundary keyword equal to 0. The first and second
entries contain the values of the potential on the inferior and superior
x-boundaries respectively. Each entry in the cell array can be one of
the following. The value can be a scalar defining the value of the
potential on the boundary (e.g. -1). The value can be a function of the
reduce coordinates u and v (e.g. @(u,v) sin(u).*cos(v-0.5).\^2). The
value can string that is the name of a file which contains a (1*ny\*nz)
array defining the value of the potential on the boundary. RESCU will
not verify whether the boundary values satisfy symmetries. You should
thus turn off symmetry or leave it at your own risk.

**type**: `cell array`

**example**: `domain.bvalx = {0 'bx1.mat'}`

## domain.bvaly

This keyword determines the boundary values along the y-direction. It is
meaningful only if Dirichlet boundary conditions are used, which is done
by setting the domain.boundary keyword equal to 0. The first and second
entries contain the values of the potential on the inferior and superior
y-boundaries respectively. Each entry in the cell array can be one of
the following. The value can be a scalar defining the value of the
potential on the boundary (e.g. -1). The value can be a function of the
reduce coordinates u and v (e.g. @(u,v) sin(u).*cos(v-0.5).\^2). The
value can string that is the name of a file which contains a (nx*1\*nz)
array defining the value of the potential on the boundary. RESCU will
not verify whether the boundary values satisfy symmetries. You should
thus turn off symmetry or leave it at your own risk.

**type**: `cell array`

**example**: `domain.bvaly = {0 'by1.mat'}`

## domain.bvalz

This keyword determines the boundary values along the z-direction. It is
meaningful only if Dirichlet boundary conditions are used, which is done
by setting the domain.boundary keyword equal to 0. The first and second
entries contain the values of the potential on the inferior and superior
z-boundaries respectively. Each entry in the cell array can be one of
the following. The value can be a scalar defining the value of the
potential on the boundary (e.g. -1). The value can be a function of the
reduce coordinates u and v (e.g. @(u,v) sin(u).*cos(v-0.5).\^2). The
value can string that is the name of a file which contains a (nx*ny\*1)
array defining the value of the potential on the boundary. RESCU will
not verify whether the boundary values satisfy symmetries. You should
thus turn off symmetry or leave it at your own risk.

**type**: `cell array`

**example**: `domain.bvalz = {0 'bz1.mat'}`

## domain.cgridn

Number of grid points used to represent the basis functions
(wavefunctions); must be an integer.

**type**: `array`

**size**: `[1,3]`

**example**: `domain.cgridn = [35 35 35]`

## domain.fgridn

Number of grid points used to represent the local potential, the
non-local potential projectors and the density. In atomic orbital
calculations it is equal to domain.cgridn. It must be an integer.

**type**: `array`

**default**: `domain.cgridn`

**size**: `[1,3]`

**example**: `domain.fgridn = [71 71 71]`

## domain.fourierInit

Determine whether to initialize densities and potentials from their
Fourier coefficients.

**type**: `scalar`

**default**: `false`

**example**: `domain.fourierInit = true`

## domain.highres

Determine the number of points on the fine grid (domain.fgridn);
domain.highres is a lower bound, the resolution ends up being a bit
higher in general since domain.fgridn must be an integer; if
domain.fgridn is also defined, it has precedence. If it is set to a
negative integer, the fine grid\'s number of points will be the coarse
grid\'s number of points times the correponsing number. For example, if
domain.cgridn = \[20 20 20\] and domain.highres = -2, then domain.fgridn
will end up being \[40 40 40\].

**type**: `scalar`

**example**: `domain.highres = 0.25`

## domain.latvec

Lattice vectors. The matrix must contain three row-vectors.

**type**: `array`

**size**: `[3,3]`

**example**:
`domain.latvec = 10.25*[[0.0 0.5 0.5];[0.5 0.0 0.5];[0.5 0.5 0.0]]`

## domain.lowres

Determine the number of points on the coarse grid (domain.cgridn);
domain.lowres is a lower bound, the resolution ends up being a bit
higher in general since domain.cgridn must be an integer; if
domain.cgridn is also defined, it has precedence.

**type**: `scalar`

**example**: `domain.lowres = 0.5`

## domain.primLatvec

Lattice vectors of the primitive cell used for band unfolding.

**type**: `array`

**size**: `[3,3]`

**example**:
`domain.primLatvec = 10.25*[[0.0 0.5 0.5];[0.5 0.0 0.5];[0.5 0.5 0.0]]`

## domain.vnlReal

If domain.vnlReal = false, RESCU willl use the plane wave representation
of the non-local pseudopotential projectors and the real space
representation otherwise. The plane wave representation may improve
translational invariance.

**type**: `scalar`

**default**: `true`

**allowed**: `true,false`

**example**: `domain.vnlReal = true`
