# Parameters for calculating photocurrent

Parameters here are for calculating the photocurrent.

## calculation.photocurrent.photonPolarizationBasis

**keyword**: calculation.photocurrent.photonPolarizationBasis

**possible values**: 3 x 2 double array

**default value**: no default value

**description**: Two orthogonal real space direction vectors e1 and e2,
which are used as basis to characterize the polarization
of the photon. The photon propagation direction is given
by e1 x e2, and the photon polarization direction is
given by [cos(theta)cos(phi)-i*sin(theta)sin(phi)]e1
+[sin(theta)cos(phi)+i*cos(theta)sin(phi)]e2,
where the polarization angles theta and phi are given by
the input parameters photonPolarizationAngleTheta and
photonPolarizationAnglePhi.

Note 1: The lengths of the two vectors are meaningless, and they will be normalized by nanodcal.

Note 2: The value of this input must be real; the difference in phase and amplitude between oscillations of the field along the two orthogonal directions is defined through the input parameters photonPolarizationAngleTheta and photonPolarizationAnglePhi.

Note 3: The photon polarization, given as [cos(theta)cos(phi)-i*sin(theta)sin(phi)]e1 +[sin(theta)cos(phi)+i*cos(theta)sin(phi)]e2, can be understood as a general elliptical polarization, and the two axes of the ellipse, called e1’ and e2’ here, are given as e1 and e2 with a theta angle of counterclockwise rotation, the amplitudes, including phases, of the oscillations along e1’ and e2’ are given as cos(phi) and i*sin(phi).

**an example**:

```
calculation.photocurrent.photonPolarizationBasis = ...
[1 0 0; 0 1 0]'
```

## calculation.photocurrent.photonPolarizationAngleTheta

**keyword**: calculation.photocurrent.photonPolarizationAngleTheta

**possible values**: 1 x n double array

**default value**: no default value

**description**: A angle used to characterize the photon polarization.
See the description of photonPolarizationBasis for more
information. It is in the unit of degree.

**an example**:

```
calculation.photocurrent.photonPolarizationAngleTheta ...
= 0:15:360
```

## calculation.photocurrent.photonPolarizationAnglePhi

**keyword**: calculation.photocurrent.photonPolarizationAnglePhi

**possible values**: 1 x n double array

**default value**: no default value

**description**: A angle used to characterize the photon polarization.
See the description of photonPolarizationBasis for more
information. It is in the unit of degree.

**an example**:

```
calculation.photocurrent.photonPolarizationAnglePhi ...
= 0:15:180
```

## calculation.photocurrent.photonEnergyRange

**keyword**: calculation.photocurrent.photonEnergyRange

**possible values**: an 1 x 2 double array

**default value**: [0.5,1.5]

**description**: Photocurrent is dependent on photon energy. This
parameter defines a photon energy range [E1,E2], and the
photocurrent curve over the range will be calculated.
Normally, E1<E2, but if E1=E2, the photocurrent is only
calculated at a photon energy point of E2.
The unit is eV.
Note: the E1 could be adjusted a little bit by nanodcal.

**an example**:

```
calculation.photocurrent.photonEnergyRange = [0.1 2.1]
```

## calculation.photocurrent.photonEnergyInterval

**keyword**: calculation.photocurrent.photonEnergyInterval

**possible values**: a double number

**default value**: 50 meV

**description**: Energy interval used to determine the photon energy
points, and at each photon energy point the
corresponding photocurrent will be calculated.
The unit is eV.
Note: it could be adjusted a little bit by nanodcal.

**an example**:

```
calculation.photocurrent.photonEnergyInterval = 25e-3
```

## calculation.photocurrent.irradiatedAtoms

**keyword**: calculation.photocurrent.irradiatedAtoms

**possible values**: integer array

**default value**: all atoms in the central cell

**description**: Index of those atoms which are irradiated by the light.

**an example**:

```
calculation.photocurrent.irradiatedAtoms = 41:60
```

## calculation.photocurrent.energyInterval

**keyword**: calculation.photocurrent.energyInterval

**possible values**: a double number

**default value**: 10 meV

**description**: Energy interval between the energy points that are used
in the energy space integration.
The unit is eV.
Note: it could be adjusted a little bit by nanodcal.

**an example**:

```
calculation.photocurrent.energyInterval = 5e-3
```

## calculation.photocurrent.temperature

**keyword**: calculation.photocurrent.temperature

**possible values**: a double value

**default value**: the value used in the calculation of the self-consistent
Hamiltonian.

**description**: temperature used in the Fermi function when
calculating the photocurrent, in unit of Kelvin.
Note: the Boltzmann constant k = 8.617342e-05(eV/K) =
3.1668151e-06 (Hartree/K).

**an example**:

```
calculation.photocurrent.temperature = 300
```

## calculation.photocurrent.kSpaceGridNumber

**keyword**: calculation.photocurrent.kSpaceGridNumber

**possible values**: 3 x 1 integer array

**default value**: the value of calculation.k_spacegrids.number which was
used in the Hamiltonian calculation.

**description**: number of small k-space grids in each direction which,
together with kSpaceGridShift, are used to produce the
parameter kSpacePoints.

**an example**:

```
calculation.photocurrent.kSpaceGridNumber = [10 10 10]'
```

## calculation.photocurrent.kSpaceGridShift

**keyword**: calculation.photocurrent.kSpaceGridShift

**possible values**: 3 x 1 or 1 x 3 array, [s_1, s_2, s_3], with each s_i a
double number between 0 and 1.

**default value**: if the photocurrent.kSpaceGridNumber is given, the
default value is [0 0 0], otherwise the default value is
the value of calculation.k_spacegrids.shift which was
used in the Hamiltonian calculation.

**description**: k-space grid point shift. While all s_i are set to be 0,
the Gamma point is always among the k-space grid points
being generated; otherwise, the k-space grid points will
be shifted s_1, s_2, and s_3 grid lengths along their
grid vector directions, respectively.

**an example**:

```
calculation.photocurrent.kSpaceGridShift = [1/2 1/2 1/2]'
```

## calculation.photocurrent.kSpacePoints

**keyword**: calculation.photocurrent.kSpacePoints

**possible values**: 3 x n double array

**default value**: defined in the k-point file if the file is given by
the parameter photocurrent.kPointFile, or produced by
the parameters photocurrent.kSpaceGridNumber and
photocurrent.kSpaceGridShift.

**description**: the fractional coordinates of n transverse wavevectors
which are used in the k-space integration.

**an example**:

```
calculation.photocurrent.kSpacePoints = [0 0 0]'
```

## calculation.photocurrent.kPointWeights

**keyword**: calculation.photocurrent.kPointWeights

**possible values**: 1 x n double array

**default value**: defined in the k-point file if the corresponding
parameter photocurrent.kSpacePoints is using the
k-values in the same file. Otherwise, equally weighted.

**description**: the weights of the k-space points in the k-space
integration.

**an example**:

```
calculation.photocurrent.kPointWeights = [1/2 1/3 1/6]
```

## calculation.photocurrent.kPointFile

**keyword**: calculation.photocurrent.kPointFile

**possible values**: a file name

**default value**: no default value

**description**: the name of a file which contains the coordinates of
k-space points and their corresponding weights.

A k-point file with n k-points has (n+1) lines: one line of headers and n lines of values of the n k-points. The headers are:

number : sequential number of the k-point k1, k2, k3 : fractional coordinates of the k-point divisor : used to modify k1, k2, and k3 so that the real fractional coordinates are k1/divisor, k2/divisor, k3/divisor weight : relative weights of the k-points for the k-space integration. Normalized so that sum(weight) = 1.

where the headers number, divisor, and weight are optional. The following is an example of the file.

number k1 k2 k3 divisor weight 1 0 0 0 7 1.0 2 0 1 0 7 2.0 3 0 2 0 7 2.0 4 0 3 0 7 2.0 5 1 0 0 7 2.0 6 1 1 0 7 4.0 7 1 2 0 7 4.0 8 1 3 0 7 4.0 9 2 0 0 7 2.0 10 2 1 0 7 4.0 11 2 2 0 7 4.0 12 2 3 0 7 4.0 13 3 0 0 7 2.0 14 3 1 0 7 4.0 15 3 2 0 7 4.0 16 3 3 0 7 4.0

**an example**:

```
calculation.photocurrent.kPointFile = 'k-points.dat'
```

## calculation.photocurrent.etaSigma

**keyword**: calculation.photocurrent.etaSigma

**possible values**: a small double number

**default value**: 1e-6 Hartree

**description**: the small eta used in the calculation of lead
self-energy.

**an example**:

```
calculation.photocurrent.etaSigma = 1e-4
```

## calculation.photocurrent.etaGF

**keyword**: calculation.photocurrent.etaGF

**possible values**: a small double number

**default value**: 0

**description**: the small eta used in the calculation of Green’s
function.

**an example**:

```
calculation.photocurrent.etaGF = 1e-4
```

## calculation.photocurrent.eta

**keyword**: calculation.photocurrent.eta

**possible values**: a small double number

**default value**: no default value

**description**: the small eta used in the calculation of self-energy
and/or Green’s function. This parameter is only used
when the parameter photocurrent.etaSigma and/or
photocurrent.etaGF is not given.

**an example**:

```
calculation.photocurrent.eta = 1e-4
```

## calculation.photocurrent.partitionScheme

**keyword**: calculation.photocurrent.partitionScheme

**possible values**: cells of cells of lists of integers

**default value**: determined by nanodcal

**description**: Atoms in the system are divided into small groups so
that atoms in each group interact only with atoms in the
next group. This parameter gives the atom index of each
of the atom groups.

All atoms in a lead should be put in a same group. All irradiated atoms should also be considered as in a same group but they do not appear in the lists of atom.

partitionScheme{ii}{1} gives atoms of the ii’th lead; partitionScheme{ii}{2} gives atoms of the group which is adjacent to partitionScheme{ii}{1}, …, and finally partitionScheme{ii}{end} gives atoms of the group which is adjacent to the group of the irradiated atoms.

**an example**:

```
calculation.photocurrent.partitionScheme = ...
{{1:10,11:20,21:30,31:40}, ...
{91:100,81:90,71:80,61:70}}
```

## calculation.photocurrent.plot

**keyword**: calculation.photocurrent.plot

**possible values**: true or false

**default value**: false

**description**: If true, a plot will be given after the calculation.

**an example**:

```
calculation.photocurrent.plot = true
```

## calculation.photocurrent.saveMemory

**keyword**: calculation.photocurrent.saveMemory

**possible values**: true or false

**default value**: false

**description**: If true, some temporary data will be saved on disk to
save memory.

**an example**:

```
calculation.photocurrent.saveMemory = true
```