Name

DeviceLCAOCalculator — Class for representing calculations using the ATK-DFT LCAO model for DeviceConfigurations.

Synopsis

Namespace: NanoLanguage
DeviceLCAOCalculator(
electrode_calculators,
basis_set,
exchange_correlation,
numerical_accuracy_parameters,
iteration_control_parameters,
device_algorithm_parameters,
poisson_solver,
contour_parameters,
electrode_voltages,
checkpoint_handler
)

Description

The constructor for the DeviceLCAOCalculator.

DeviceLCAOCalculator Arguments

electrode_calculators

A sequence of LCAOCalculator's containing a calculator for each electrode.

Type: A sequence of LCAOCalculator's.

basis_set

An object describing the basis set used for the DFT calculation.

Type: LCAOBasisParameters

Default: LDABasis.DoubleZetaPolarized
exchange_correlation

The choice of Exchange-Correlation for this calculation.

Type: An instance of the Exchange-Correlation.

Default: LDA.PZ
numerical_accuracy_parameters

The NumericalAccuracyParameters used for the DFT calculation.

Type: NumericalAccuracyParameters

Default: A default NumericalAccuracyParameters object.
iteration_control_parameters

The IterationControlParameters used for the DFT calculation. For non-self-consistent calculations set this parameter to NonSelfConsistent.

Type: IterationControlParameters

Default: A default IterationControlParameters object.
device_algorithm_parameters

The DeviceAlgorithmParameters used for the device simulation

Type: DeviceAlgorithmParameters

Default: A default DeviceAlgorithmParameters object
poisson_solver

The Poisson solver used to determine the electrostatic potential.

Type: MultigridSolver | FastFourierSolver | FastFourier2DSolver

Default: For a homogeneous DeviceConfiguration without metallic and dielectric regions : FastFourierSolver For others : MultigridSolver([PeriodicBoundaryCondition,PeriodicBoundaryCondition,DirichletBoundaryCondition])
contour_parameters

The ContourIntegralParameters used for the complex contour integration.

Type: DoubleContourIntegralParameters | SingelContourIntegralParameters

Default: A default DoubleContourIntegralParameters object.
electrode_voltages

The voltages applied to the electrodes.

Type: A sequence containing two elements of type PhysicalQuantity with unit Volt.

Default: (0.0,0.0)*Volt.
checkpoint_handler

The CheckpointHandler used for specifying the save-file and the time interval between saving the calculation during the scf-loop.

Type: CheckpointHandler

Default: A default CheckpointHandler object.

DeviceLCAOCalculator Methods

A DeviceLCAOCalculator object provides the following methods:

  • This object supports cloning. See the section called “Cloning of ATK Python objects”.

  • basisSet(): Return the basis set.

  • checkpointHandler(): Return the checkpoint handler.

  • contourParameters(): Query method for the ContourIntegralParameters.

  • deviceAlgorithmParameters(): Query method for the DeviceAlgorithmParameters.

  • electrodeCalculators(): Return the electrode calculators.

  • electrodeVoltages(): Query method for the electrode voltages.

  • exchangeCorrelation(): Return the exchange-correlation

  • iterationControlParameters(): Query method for the IterationControlParameters.

  • numericalAccuracyParameters(): Query method for the NumericalAccuracyParameters.

  • poissonSolver(): Return the Poisson solver.

  • setBasisSet(): Set the basis set.

  • setCheckpointHandler(): Set the checkpoint handler.

  • setExchangeCorrelation(): Set the exchange-correlation

  • setIterationControlParameters(): Set the iteration control parameters.

  • setNumericalAccuracyParameters(): Set the numerical accuracy parameters.

  • setPoissonSolver(): Set the poisson solver.

Usage Examples

Define a DeviceLCAOCalculator with user defined NumericalAccuracyParameters, MultigridSolver, and DoubleContourIntegralParameters

numerical_accuracy_parameters = NumericalAccuracyParameters(
    grid_mesh_cutoff = 10.*Units.Hartree,
    k_point_sampling=(3,2,100),
    interaction_max_range = 10.*Angstrom,
    )

electrode_poisson_solver = MultigridSolver(
    boundary_conditions=[PeriodicBoundaryCondition,
                         PeriodicBoundaryCondition,
                         PeriodicBoundaryCondition]
    )

poisson_solver = MultigridSolver(
    boundary_conditions=[PeriodicBoundaryCondition,
                         PeriodicBoundaryCondition,
                         DirichletBoundaryCondition]
    )

electrode_calculator = LCAOCalculator(
    numerical_accuracy_parameters=numerical_accuracy_parameters,
    poisson_solver=electrode_poisson_solver
    )

contour_parameters = DoubleContourIntegralParameters(
    integral_lower_bound=5.0*Units.Hartree
    )

device_calculator = DeviceLCAOCalculator(
    electrode_calculators=[electrode_calculator,electrode_calculator],
    contour_parameters = contour_parameters,
    numerical_accuracy_parameters = numerical_accuracy_parameters,
    poisson_solver=poisson_solver,
    electrode_voltages=(0.2*Volt, -0.3*Volt)
    )

Perform a voltage sweep and calculate I-V characteristics

calculator = DeviceLCAOCalculator()
device_configuration = DeviceConfiguration(...)

# Define voltages for voltage ramp, [0.0,0.1, ..., 1.0]*Volt
voltages = numpy.linspace(0.0,1.0,11)*Volt
v in voltages:
    # Set the calculator on the configuration using the old calculation as
    # starting input.
    device_configuration.setCalculator(
        calculator(electrode_voltages=(0*Volt,v)),
	initial_state=device_configuration,
	)

    # Calculate the transmission
    t = TransmissionSpectrum(device_configuration)

    # Calculate the current.
    current = t.current()
    print t.bias(), t.current()

Perform a gate bias scan

calculator = DeviceLCAOCalculator()
device_configuration = DeviceConfiguration(...)
metal_region = BoxRegion(...)

# Define gate_voltages for scan, [0.0,0.1, ..., 1.0]*Volt
gate_voltage=numpy.linspace(0.0,1.0,11)*Volt
for v in gate_voltage:
    device_configuration.setMetallicRegions(
        [metallic_region(value = gate_voltage)]
	)

    # Set the calculator on the configuration using the old calculation as
    # starting input.
    device_configuration.setCalculator(
        calculator(),
	initial_state=device_configuration,
	)

    # Calculate the transmission
    t = TransmissionSpectrum(device_configuration)

    # Calculate the conductance
    print t.bias(), t.conductance()

Notes

The parameters for the constructor of a DeviceLCAOCalculator object and the parameters of its electrode calculators must fulfill the conditions below. In case the user does not set an electrode parameter, ATK will generate that parameter using the rules below.

  • The NumericalAccuracyParameters must be the same for the electrodes and the device. The central region of the device does not use k-points in the C-direction and this parameter is only used for the electrodes. The electrodes need a very dense k-point sampling in the C direction.

  • The poisson_solver must be set to either the FastFourier2DSolver (default, and normally recommended) or the MultigridSolver in case electrostatic gates and/or dielectric regions are included. The same boundary conditions in the A and B directions must be used for the electrodes as for the device calculator. In the C directions the user setting is ignored and the program always uses PeriodicBoundaryCondition for the electrodes and DirichletBoundaryCondition for the device.

  • The electrode_voltages give rise to a shift of the Fermi levels of the electrodes by -e V_\mathrm{bias}, where V_\mathrm{bias} is the applied bias. Thus, a higher V_\mathrm{bias} on the right electrode than the left gives rise to an electron flow from left to right, corresponding to an electrical current from right to left (the current will be negative in this case; see TransmissionSpectrum).