nanotools.iv module

two-probe transport calculator

class nanotools.iv.IV(reference_calculator, voltages=None, root: str | None = None, sub_dirs: ~typing.List[str] = NOTHING, k_grid_4_current=None, temperature=300.0, currents=None, work_func=<Quantity(0.0, 'electron_volt')>, varying_elements: ~typing.List[str | ~nanotools.extpot.Region] = NOTHING)[source]

Bases: Base

Calculator that automates the workflow of computing charge currents under a series of bias/gate voltages.

reference_calculator

instance of TwoProbe

Type:

nanotools.twoprobe.TwoProbe

temperature
Type:

float

currents

where results are stored

Type:

pint.registry.Quantity

k_grid_4_current

a denser k-point grid for current computation.

work_func

work function. used in case of varying gate voltage.

Type:

pint.registry.Quantity

voltages

the varying voltage values

Type:

pint.registry.Quantity

varying_elements

list of Region objects or strings indicating what voltages are to be varied. The voltages associated with all the elements in the list are varied simultaneously. If a string is found in the list, the drain-source voltage is to be varied. eg. [extpot.gates[0], extpot.gates[2], “drain-source”]. In this case, Vds=Vg1=Vg2.

Type:

List[str | nanotools.extpot.Region]

calc_currents()[source]

Enters each of the spawned directories and carries out charge current calculation.

gen_input_files()[source]

generate input files for each voltage value.

get_currents()[source]

collects results from each spawned directory

plot(log=False, filename=None, show=True)[source]

plots I-V curve

scf()[source]

Enters each of the spawned directories and launch nanodcalplus for self-consistent calculation

set_varying_elements(elements)[source]

sets the elements to which the varying voltage is to be applied :param elements: :type elements: List[Region/string]

set_voltages(voltages, work_func=None)[source]

sets voltage values and optionally the work function for gates :param voltages: :type voltages: iterable[float] :param work_func: work function :type work_func: float/None

solve(output='nano_iv_out')[source]

carries out self-consistent and charge current calculations at each given voltage.

Several directories will be spawned, holding input and output files for each corresponding voltage value. For example, if device/ is the current work directory and the voltages are [0.1,0.2,0.3], then the following directories will be spawned in parallel device0.1/ device0.2/ device0.3/

Find results in self.currents