DeviceHuckelCalculator — Class for representing calculations using the extended Huckel Model for DeviceConfigurations.
The constructor for the DeviceHuckelCalculator.
A sequence of HuckelCalculator's containing a calculator for each electrode.
Type: A sequence of HuckelCalculator's.
The ContourIntegralParameters used for the complex contour integration.
Type: DoubleContourIntegralParameters | SingleContourIntegralParameters
Default:
A default DoubleContourIntegralParameters object.
An object describing the basis set used for the Extended-Huckel calculation. For further information, please consult the the section called “Parameters for the extended Hückel method”.
Type: list of HuckelBasisParameters objects
Default:
HoffmannHuckelParameters.All
The repulsive pair potentials used for total energy and force calculations
Type: PairPotentials object
Default:
None
The NumericalAccuracyParameters used for the self-consistent Huckel calculation.
Type: NumericalAccuracyParameters
Default:
A default NumericalAccuracyParameters object.
The IterationControlParameters used for the self-consistent Huckel calculation. For non-self-consistent calculations set this parameter to NonSelfconsistent.
Type: IterationControlParameters
Default:
NonSelfconsistent
The DeviceAlgorithmParameters used for the device simulation
Type: DeviceAlgorithmParameters
Default:
A default DeviceAlgorithmParameters object
The weighting scheme used for calculating off-site matrix elements of the Huckel Hamiltonian. For further information, please consult the the section called “Weighting schemes”.
Type: HoffmannWeighting | WolfsbergWeighting
Default:
WolfsbergWeighting
The Poisson solver used to determine the electrostatic potential.
Type: FastFourierSolver | MultigridSolver | FastFourier2DSolver
Default:
For a homogeneous DeviceConfiguration without metallic and dielectric regions : FastFourierSolver For others : MultigridSolver([PeriodicBoundaryCondition,PeriodicBoundaryCondition,DirichletBoundaryCondition])
The voltages applied to the electrodes.
Type: A sequence containing two elements of type PhysicalQuantity with unit Volt.
Default:
(0.0,0.0)*Volt
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.
Flag indicating if the number of spin should be UNPOLARIZED (False) or POLARIZED (True).
Type: bool
Default:
False
A DeviceHuckelCalculator 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(): Query method for the electrode calculators (see HuckelCalculator).
electrodeVoltages(): Query method for the electrode voltages.
iterationControlParameters(): Return the IterationControlParameters.
numberOfSpins(): Query method for the number of spins
numericalAccuracyParameters(): Return the NumericalAccuracyParameters.
pairPotentials(): Return the basis set.
poissonSolver(): Return the Poisson solver.
setBasisSet(): Set the basis set.
setCheckpointHandler(): Set the checkpoint handler.
setIterationControlParameters(): Set the iteration control parameters.
setNumericalAccuracyParameters(): Set the numerical accuracy parameters.
setPairPotentials(): Set the basis set.
setPoissonSolver(): Set the Poisson solver.
setSpinPolarization(): Set the spin polarization flag.
setWeightingScheme(): Set the weighting scheme.
spinPolarization(): Query function for the spin polarization needed for the clone.
weightingScheme(): Return the weighting scheme.
Define a DeviceHuckelCalculator 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 = HuckelCalculator(
numerical_accuracy_parameters=numerical_accuracy_parameters,
poisson_solver=electrode_poisson_solver
)
contour_parameters = DoubleContourIntegralParameters(
integral_lower_bound=5.0*Units.Hartree
)
device_calculator = DeviceHuckelCalculator(
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 = DeviceHuckelCalculator()
device_configuration = DeviceConfiguration(...)
# Define voltages for voltage ramp, [0.0,0.1, ..., 1.0]*Volt
voltages = numpy.linspace(0.0,1.0,11)*Volt
for 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 = DeviceHuckelCalculator()
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()
The parameters for the constructor of a DeviceHuckelCalculator object and the parameters of its electrode calculators must fulfill the following conditions: 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
, where
is the
applied bias. Thus, a higher
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).
For the details of the extended-Hückel model, see the chapter on The ATK-SE Package.