HuckelCalculator — Class for representing calculations using the extended Huckel model for configurations of the type MoleculeConfiguration and BulkConfiguration.
The constructor for the HuckelCalculator.
An object describing the basis set used for the Extended-Huckel calculation. For further information, please consult this the section called “Parameters for the extended Hückel method”
Type: HuckelBasisParameters object
Default:
HoffmannHuckelParameters.All()
The repulsive pair potentials used for total energy and force calculations
Type: PairPotentials object
Default:
The charge of the system; a charge of -1 corresponds to one extra electron.
Type: float
Default:
0.0
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 Poisson solver used to determine the electrostatic potential.
Type: FastFourierSolver | MultigridSolver | FastFourier2DSolver
Default:
BulkConfiguration without Metallic and Dielectric Regions=FastFourierSolver, BulkConfiguration with Metallic and Dielectric Regions=MultigridSolver([PeriodicBoundaryCondition]*3), MoleculeConfiguration without Metallic Regions=MultigridSolver([MultipoleBoundaryCondition]*3), MoleculeConfiguration with Metallic Regions=MultigridSolver([NeumannBoundaryCondition]*3)
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 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 calculation is UNPOLARIZED (False) or POLARIZED (True).
Type: bool
Default:
False
A HuckelCalculator object provides the following methods:
This object supports cloning. See the section called “Cloning of ATK Python objects”.
basisSet(): Return the basis set.
charge(): Query method for the charge of the system
checkpointHandler(): Return the checkpoint handler.
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.
Perform a self-consistent Hückel calculation by setting the IterationControlParameters
iteration_control_parameters = IterationControlParameters(
damping_factor=0.05,
number_of_history_steps=12,
)
calculator = HuckelCalculator(
iteration_control_parameters=iteration_control_parameters,
)
Restart a Hückel calculation using the self-consistent state from a previous calculation
# Read in the BulkConfiguration with the old scf state
old_calculation=nlread("filename.nc",BulkConfiguration)[0]
# Define the BulkConfiguration with the same number of atoms and the same elements
new_calculation=BulkConfiguration(...)
# Define the calculator
old_calculator = old_calculation.calculator()
# make a clone of the old calculator
new_calculator = old_calculator()
# Attach the calculator and use the old initial state
new_calculation.setCalculator(new_calculator,initial_state=old_calculation)
Calculate the spin-polarized band structure of iron. Note that spin-polarized calculations must be self-consistent.
# Set up iron in the BCC configuration
bulk_configuration = BulkConfiguration(
bravais_lattice=BodyCenteredCubic(2.8665*Angstrom),
elements=[Iron],
cartesian_coordinates=[[ 0., 0., 0.]]*Angstrom
)
# Setup spin-polarized calculation
numerical_accuracy_parameters = NumericalAccuracyParameters(
k_point_sampling=(4, 4, 4) )
calculator = HuckelCalculator(
basis_set=CerdaHuckelParameters.Iron_bcc_Basis,
numerical_accuracy_parameters=numerical_accuracy_parameters,
iteration_control_parameters=IterationControlParameters(),
spin_polarization=True,
)
bulk_configuration.setCalculator(calculator)
# Calculate the bandstructure
bandstructure = Bandstructure(
configuration=bulk_configuration,
route=['G', 'H', 'P', 'G', 'N', 'P', 'N', 'H'],
)
nlsave('fe_huckel.nc', bandstructure)
For the details of the extended-Hückel model, see the chapter on The ATK-SE Package.
Default is that the Hückel calculation is non-self-consistent. To make it self-consistent you must set the IterationControlParameters.
Note that most parameters are fitted for non-self-consistent situations, and to apply
the parameters for self-consistent situations the vacuum_level of
each element must be shifted to cancel the additional onsite term in the reference
structure where the parameters where fitted.