nanotools.photocurrent module

scattering states calculator

class nanotools.photocurrent.PhotoCurrent(center, left=None, right=None, left_equal_right: bool = False, transport_axis: int = -1, photon_energy=<Quantity([0.], 'electron_volt')>, elec_energy_resol=<Quantity(0.025, 'electron_volt')>, in_light=None, photo_transmission=None, polar_vector=None, polar_vector_real=None, polar_vector_imag=None, polar_basis_vec=None, theta=0.0, phi=0.0, classname: str = NOTHING)[source]

Bases: Base

Photocurrent class.

transport_axis
Type:

int

left_equal_right

boolean variable indicating whether the two lead structures are identical.

Type:

bool

photon_energy

Input. Photon energies. Default unit is eV. e.g. photon_energy = 1.55

photon_energy = [1.55, 1.56, 1.59]

Type:

Quantity 1d array

elec_energy_resol

Input. Energy resolution for the energy grid on which photo-transmission and Green’s functions of electrons are computed. Default unit is eV.

Type:

Quantity

in_light

Input. in_light must have the same length as the number of atoms. 1 (0) indicates that light is (not) shed on the corresponding atom. When in_light is None (default), all atoms within the central device region are assumed to be under the light, and hence subject to light induced excitation. e.g.

in_light = [0 0 1 1 1 0 0]

Type:

integer array

photo_transmission

computation result read out from nano_photo_out.h5, see _read_photo_transmission method. 5d array with each dimension corresponding to the electronic energy grid, photon energy, k-points, spin, and lead.

Type:

float 5d array

theta

input polarization angle, in radial unit.

Type:

float scalar

phi

input polarization angle, in radial unit.

Type:

float scalar

polar_basis_vec

Input. Two rows of vectors indicating the basis frame for light polarization. e.g.

polar_basis_vec = [ [0,1,0] , [0,0,1] ]

Type:

float 2d array

polar_vector

input polarization vector of light. e.g.

polar_vector = [1.0, 0.0, 1j]

If polar_vector is not specified by user, it will be calculated according to a0 = cos(theta) * cos(phi) - 1j * sin(theta) * sin(phi) a1 = sin(theta) * cos(phi) + 1j * cos(theta) * sin(phi) polar_vector = a0 * e0 + a1 * e1 where e0, e1 are basis-vectors from polar_basis_vec

Type:

complex 1d array

classmethod from_twoprobe(twoprb, **kwargs)[source]

initializes instance from TwoProbe object

get_pho_curr(flux=<Quantity(1.0, 'watt / meter ** 2')>, mu=1.0, epsilon=1.0)[source]

shadow implementation for get_photo_current, should be removed in future

get_photo_current(flux=<Quantity(1.0, 'watt / meter ** 2')>, mu=1.0, epsilon=1.0)[source]

Calculate photo-charge current. When calling this method, the photo-transmission calculation is assumed completed already. You should find nano_photo_out.json and nano_photo_out.h5 in your work directory. e.g.

cal = PhotoCurrent.read(“nano_photo_out.json”) c = cal.get_photo_current(flux=3.0 * ureg.watt / ureg.meter**2, mu=0.7, epsilon=1.5)

Parameters:
  • flux (power / area) – energy flux of incident light

  • mu – relative magnetic permeability of material

  • epsilon – relative electric permittivity of material

Returns:

charge current, as 3d array, with each dimension corresponding to photon-energy, spin, and lead. Its unit can be ampere, ampere/m, or ampere/m^2 depending on the device cross-section.

get_response()[source]

Calculate the photo-response coefficient according to Nanodcal definition (named “photocurrent” in Nanodcal output). When calling this method, the photo-transmission calculation is assumed completed already. You should find nano_photo_out.json and nano_photo_out.h5 in your work directory. e.g.

cal = PhotoCurrent.read(“nano_photo_out.json”) res = cal.get_response()

Returns:

a dimensionless 3d array, with each dimension corresponding to photon-energy, spin, and lead.

solve(photon_energy=None, input='nano_photo_in', output='nano_photo_out')[source]

Calculates transmission. This method triggers the nanodcalplus_trsm executable. Result is stored in self.dos.transmission

Parameters:

photon_energy (float / iterable) – energy grid over which the transmission is to be calculated. eg. energies=0.1 eg. energies=[0.1,0.2,0.3]