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
- 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]