Table of Contents
A few changes have been introduced since the release of ATK 2008.02;
For bulk calculations in which the Brillouin zone is sampled using only the Γ k-point, ATK makes use of a real eigenvalue solver. A complex eigenvalue solver is instead used in the general case, in which more k-points are used to sample the Brillouin zone. Depending on the system size and basis set, a real eigenvalue solver can provide a significant speed-up for bulk calculations.
A correction has been introduced for calculateLocalDensityOfStates(). For unpolarized system the degeneracy of the electrons, 2, is now included. This implies that the local density-of-states will differ by that amount when compared to ATK 2008.02.
The high performance Intel Math Kernel Library (MKL) library is now used in many time-consuming parts of ATK. MKL supports multi-threading for multi-core CPUs. For more details, see Controlling threading in MKL.
A few changes have been introduced since the release of ATK 2.3;
Relevant changes have been made in the way ATK deals with the control of the self-consistent iterative cycle:
Three new iteration control criteria,
IterationControl.TotalEnergy,
IterationControl.DensityMatrix,
and IterationControl.TotalEnergyAndDensityMatrix, have been
added to iterationControlParameters().
Note that, due to the inclusion of the new convergence
criteria, some modifications of the
output in verbose
mode have been made necessary.
The new default value for the iteration control
criterion defined by the function
iterationControlParameters()
is IterationControl.TotalEnergy.
The implementation of this criterion takes advantage of
the fact that the convergence of the total energy is often
faster than the one of the density matrix,
the band-structure energy, or the Hamiltonian.
The new default value for the tolerance defined by the function iterationControlParameters() is 1.0e-5. The use of the new default settings corresponds to an accuracy of the value of the total energy of about 0.1 meV.
In ATK 2008.02 the version of the parallel MPI library MPICH was upgraded from 1.2 to MPICH2 version 1.0. This means that in order to run ATK 2008.02 in parallel the installation of MPICH on each of the local machines must be updated. The steps for doing this are described in more detail in Parallel calculations using ATK.
In ATK 2008.02 special attention has been paid in order to increase the accuracy of total energy and forces significantly. The increased accuracy is quite important, e.g., when calculating lattice constants which now are smoother and more accurate. This result has been achieved by the following changes:
A new algorithm has been introduced for generating interacting atom pairs for bulk and molecular systems. Using the new algorithm the number of interacting atom pairs for a given system is increased. As a result of the introduction of the new algorithm, there is a change in the structure of the NetCDF checkpoint file used for restoring a SCF calculation. NetCDF checkpoint files generated with versions prior to ATK 2008.02 can be still used, with some precaution, to restore calculations.
The default value of one of the basis set parameters,
radial_sampling_dr, has been
decreased from 0.005*Bohr to 0.001*Bohr.
Two new modules have been added to the ATK framework:
The usage of this functionality requires a special feature in the license.
A module in which we include functionality which might enter NanoLanguage in the future.
It is now possible to specify a label when storing a object into a VNL file. The behavior of the VNL file has been slightly modified, and will now overwrite the stored property rather than appending it if another property is stored under the exact same sample and label. Furthermore it is possible to store all calculated objects in VNL file; like objects returned from calculateMullikenPopulation() and calculateAtomicForces().
It is also now possible to store a PeriodicAtomConfiguration into a VNLFile.
A few issues have been addressed concerning the storage of a self-consistent calculation:
The default for writing a NetCDF checkpoint file has been changed. In ATK 2008.02 a NetCDF file is written only if the user specifies a name for this file.
The procedure of writing and restoring a self-consistent calculation has been
improved. Prior to ATK 2008.02 not all the parameters related to
iterationControlParameters() and
iterationMixingParameters() were properly
stored in the NetCDF file, so that default parameters were used instead when an
old calculation was restarted. Now, all parameters are stored and a restart can be
performed correctly with non-default parameters. This improvement also influences
the behavior of
calculateOptimizedAtomicGeometry() and of
executeSelfConsistentCalculation() when
called with the self_consistent_calculation argument.
The structure of the NetCDF file used for restoring a SCF calculation has been modified. As a result of this change, the size of the NetCDF files generated by ATK 2008.02 can be smaller than the size of files generated with earlier versions. Of course, the new NetCDF files preserve the functionality provided by the earlier versions.
A few changes have been introduced since the release of ATK 2.2;
In ATK 2.3 two new functions are included, calculateTransmissionEigenvalues() and calculateTransmissionEigenstates(), which allow the calculation of transmission eigenvalues and eigenstates, respectively. In general, transmission eigenstates provide a direct picture of the electronic states that contribute to the conductance. A detailed example of the application of these new features is given in Transmission eigenchannels of doped Al wire.
As a new feature of ATK 2.3, it is now possible to specify some algorithm
related parameters for two-probe calculations using the parameter
algorithm_parameters connected to function
twoProbeAlgorithmParameters()
within the TwoProbeMethod
class.
As of ATK 2.3 a modified algorithm for the self-consistent field calculation of
two-probe systems is used as default. The new algorithm
solves some reported real-space-density and Mulliken-population asymmetry issues
as well as some self-consistent field oscillation and failure
problems. Calculations using the previous algorithm (the same as in ATK 2.2) can
be still performed by setting the option
ElectrodeConstraint.RealSpaceDensity in the function twoProbeAlgorithmParameters() inside the TwoProbeMethod class.
It is now possible to perform a two-probe calculation using as initial guess for
the electron density the result of a self-consistent calculation for an
equivalent bulk to the two-probe system. This option is now taken as
default for both homogeneous and heterogeneous two-probe
systems. As alternative choice, the initial electron density can be constructed
as a superposition of the atomic electron densities by setting up the option
InitialDensityType.NeutralAtom in the function
twoProbeAlgorithmParameters()
within the TwoProbeMethod
class.
When specifying the initial_scaled_spin in the function
electronDensityParameters() for a
two-probe system, it must be specified for both the
electrodes and the central region.
The parameter name two_center_integrals_parameters,
used within the KohnShamMethod class,
has been changed, for the sake of consistency with the other parameter names,
to two_center_integral_parameters.
The TwoProbeConfiguration class has a
new member function, equivalentBulkSystem(), which
returns a PeriodicAtomConfiguration
object representing the central region (both electrodes and scattering region).
New algorithms are now available for the geometry optimization performed by
calculateOptimizedAtomicGeometry():
A quasi-Newton method (default) and a steepest descent
algorithm. As a consequence, the argument list of the parameter function
geometricOptimizationParameters()
has been changed. The new parameters optimizer,
trust_radius, and time_step
have been added. The parameter max_displacement
is now obsolete and should not be used anymore.
Furthermore, the optimization of a
TwoProbeConfiguration
has been disabled. Use instead the procedure
described in Optimizing a two-probe system.
It is now possible to use a sophisticated function, nlPrint(), for generating a formatted print of the almost all NanoLanguage objects. This expands the users possibilities for exploring objects and increase the accessibility of most objects.
A few changes have been introduced since the release of ATK 2.1;
For the two exchange-correlation functionals available in ATK, new pseudo-potentials have been included for the following atomic elements:
Note, for the above list of elements, calculations performed with ATK 2.1 or earlier cannot be reproduced quantitatively with ATK 2.2. If you wish to use pseudo-potentials shipped with ATK 2.1 or earlier, please consult this section or contact QuantumWise technical support.
It is now possible to specify an initial electron density when performing a
self-consistent field calculation. This corresponds to the -i
option of ATK 2.0. Please see executeSelfConsistentCalculation() for details on
how this can be used to resume and restart a calculation.
The feature which allowed to set electrode voltages as an argument to executeSelfConsistentCalculation() has been removed. In ATK 2.2 it is only possible to specify the electrode voltages using the TwoProbeConfiguration class.
It is now possible to use ATK interactively. This is useful when learning NanoLanguage for the first time and when experimenting with your advanced NanoLanguage scripts. More information on how to use ATK interactively can be found in the Using ATK interactively tutorial.
With ATK 2.2 we have shipped an example script which provides the k-points
generated for a given crystal structure and a set of Monkhorst-Pack
parameters. This corresponds to the functionality which was available with the
--verbose argument in ATK 2.0.4. You can find the details
about this script by looking at the reference page for the brillouinZoneIntegrationParameters() function.
As of ATK 2.2 it is no longer possible to specify a basis set smaller than SingleZetaPolarized when performing calculations on noble gases. So if you need to perform calculations on systems containing either Neon, Argon, Krypton, Xenon, or Radon make sure that the basis set used is no smaller than SingleZetaPolarized. ATK uses the DoubleZetaPolarized basis set.
The only available convergence criterion is
IterationControl.Strict. See the iterationControlParameters() reference page.
The table below provides a mapping between the keywords specified in ATK 2.0 input files and the equivalent functions, classes, types, etc, used in NanoLanguage.
In ATK 2.0, the default values of all parameters were defined in the file
atk-defaults.atk. In NanoLanguage, however, all arguments to
objects and functions are defined as variables which, when applicable, hold a
predefined default value. All these default settings are described for each NanoLanguage
element in the corresponding entry in the reference manual. For example, have a look
at the entry for the object PeriodicAtomConfiguration or the function geometricOptimizationParameters() to see the default
settings for the respective argument supported by these two elements.
The default value used in ATK 2.0 and their NanoLanguage equivalents are shown below in Table 1. Almost all of these are the same in ATK 2.1, with the following important exceptions:
The default basis set parameters for the hydrogen and lithium atom are
changed. In ATK 2.0, the file atk-defaults.atk contained
the entries:
NumOrb::BasisSet::SplitNorm::H 0.4
NumOrb::BasisSet::Charge::Li 0.9
In ATK 2.1, all elements use the same default values, corresponding to
NumOrb::BasisSet::SplitNorm 0.15
NumOrb::BasisSet::Charge 0.0
In ATK 2.1, there are no default Monkhorst-Pack parameters for the k-point sampling in bulk and electrode calculations. The desired sampling must be specified explicitly by using the
brillouinZoneIntegrationParameters()
The reason for this is that various geometries (e.g. bulk crystals vs. nanotubes) require quite different sampling (uniform such as (3,3,3) vs. one-dimensional such as (1,1,100)) making it is impossible to define a single default sampling that works well in all cases. The only available choice would be the ATK 2.0 default (1,1,1), but this is generally insufficient for reasonable accuracy in almost all cases. Therefore, it is important that the user makes an active choice of the k-point sampling.
In other words, if you want to reproduce older ATK 2.0 calculations, you should make sure that the above parameter settings are defined explicitly in your NanoLanguage script. This is easily obtained: simply copy-and-paste the relevant code pieces from the following script listing:
# ATK 2.0 default basis set for hydrogen basis_set_parameters_H = basisSetParameters(split_norm=0.4,element=Hydrogen) # ATK 2.0 default basis set for lithium basis_set_parameters_Li = basisSetParameters(charge=0.9,element=Lithium) # ATK 2.0 default basis set for bulk k-point sampling bulk_kpoint_sampling = brillouinZoneIntegrationParameters((1,1,1)) # ATK 2.0 default basis set for electrode k-point sampling electrode_kpoint_sampling = brillouinZoneIntegrationParameters((1,1,100))
Note also, that several of the pseudo-potentials have been improved in ATK 2.1; this may also give rise to numerical differences compared to previous version of ATK.
Table 1: ATK 2.0 keyword mapping to NanoLanguage.
| ATK 2.0 keyword | Default value | NanoLanguage equivalent |
|---|---|---|
| Analysis::BandLine::NumPoints | 100 | calculateEnergyBands() |
| Analysis::BandLine::X::End | n/a | calculateEnergyBands() |
| Analysis::BandLine::X::NumPoints | n/a | calculateEnergyBands() |
| Analysis::BandLine::X::Start | n/a | calculateEnergyBands() |
| Analysis::BlochState::X::Index | n/a | calculateEigenstates() |
| Analysis::BlochState::X::KPoint | n/a | calculateEigenstates() |
| Analysis::BlochState::X::Label | n/a | Deprecated |
| Analysis::BlochState::X::Spin | n/a | calculateEigenstates() |
| Analysis::DOS::X::Energy | n/a | calculateDensityOfStates() calculateLocalDensityOfStates() |
| Analysis::DOS::X::KPoint | n/a | calculateDensityOfStates() |
| Analysis::DOS::X::Label | n/a | Deprecated |
| Analysis::DOS::X::Spin | n/a | calculateLocalDensityOfStates() |
| Analysis::DOS::X::Type | n/a | calculateLocalDensityOfStates() |
| Analysis::MolecularOrbital::X::Index | n/a | calculateEigenstates() |
| Analysis::MolecularOrbital::X::Label | n/a | Deprecated |
| Analysis::MolecularOrbital::X::Spin | n/a | calculateEigenstates() |
| Analysis::MPSH::Calculate | T | calculateProjectedHamiltonianEigenstates() |
| Analysis::MPSH::EnergyWindow | 0.0 eV | Deprecated |
| Analysis::MPSH::X::Index | n/a | calculateProjectedHamiltonianEigenstates() |
| Analysis::MPSH::X::Label | n/a | calculateProjectedHamiltonianEigenstates() |
| Analysis::MPSH::X::Spin | n/a | calculateProjectedHamiltonianEigenstates() |
| Analysis::PrintMolecularEigenvalues | T | calculateMolecularEnergySpectrum() |
| Analysis::PrintMullikenPopulation | T | calculateMullikenPopulation() |
| Analysis::TransmissionSpectrum::Calculate | T | calculateTransmissionSpectrum() |
| Analysis::TransmissionSpectrum::E0 | -2 eV | calculateTransmissionSpectrum() |
| Analysis::TransmissionSpectrum::E1 | 2 eV | calculateTransmissionSpectrum() |
| Analysis::TransmissionSpectrum::Eta | 1.e-5 eV | calculateTransmissionSpectrum() |
| Analysis::TransmissionSpectrum::NumEigenChannels | 3 | Not implemented |
| Analysis::TransmissionSpectrum::NumKPoints::A | 1 | calculateTransmissionSpectrum() |
| Analysis::TransmissionSpectrum::NumKPoints::B | 1 | calculateTransmissionSpectrum() |
| Analysis::TransmissionSpectrum::NumPoints | 100 | calculateTransmissionSpectrum() |
| AtomList::Format | Ang | ATK.Units |
| AtomList::Scale | n/a | PeriodicAtomConfiguration BulkConfiguration |
| Bulk::AtomList | %block | BulkConfiguration |
| Bulk::ElectronTemperature | 300.0 K | eigenstateOccupationParameters() |
| Bulk::NumKPoints::A | 1 | brillouinZoneIntegrationParameters() |
| Bulk::NumKPoints::B | 1 | brillouinZoneIntegrationParameters() |
| Bulk::NumKPoints::C | 1 | brillouinZoneIntegrationParameters() |
| Bulk::UnitCell | %block | BulkConfiguration |
| Electrode::AtomList | %block | PeriodicAtomConfiguration |
| Electrode::ElectronTemperature | 300.0 K | eigenstateOccupationParameters() |
| Electrode::NumKPoints::A | 1 | brillouinZoneIntegrationParameters() |
| Electrode::NumKPoints::B | 1 | brillouinZoneIntegrationParameters() |
| Electrode::NumKPoints::C | 1 | brillouinZoneIntegrationParameters() |
| Electrode::NumRep::A | 1 | TwoProbeConfiguration |
| Electrode::NumRep::B | 1 | TwoProbeConfiguration |
| Electrode::UnitCell | %block | PeriodicAtomConfiguration |
| Molecule::AtomList | %block | MoleculeConfiguration |
| Molecule::ElectronTemperature | 300.0 K | eigenstateOccupationParameters() |
| Molecule::ElectrostaticPaddingFactor | 0.1 | poissonEquationParameters() |
| Molecule::TotalSpin | electronDensityParameters() | |
| NumOrb::BasisSet::Charge | 0.0 | basisSetParameters() |
| NumOrb::BasisSet::DeltaRinn | 0.8 | basisSetParameters() |
| NumOrb::BasisSet::EnergyShift | 0.01 Rydberg | basisSetParameters() |
| NumOrb::BasisSet::IonFile::XX | pseudoPotentialParameters() | |
| NumOrb::BasisSet::PseudoPotentialDirectory | pseudoPotentialParameters() | |
| NumOrb::BasisSet::PseudoPotentialFile::XX | pseudoPotentialParameters() | |
| NumOrb::BasisSet::Size | DZP | basisSetParameters() |
| NumOrb::BasisSet::SplitNorm | 0.15 | basisSetParameters() |
| NumOrb::BasisSet::V0 | 40.0 Rydberg | basisSetParameters() |
| NumOrb::MeshCutoff | 150 Rydberg | electronDensityParameters() |
| NumOrb::RadialSampling::DR | 0.001 Bohr | basisSetParameters() |
| NumOrb::Tables::Cutoff | 2500.0 Rydberg | twoCenterIntegralParameters() |
| NumOrb::Tables::NumPoints | 1024 | twoCenterIntegralParameters() |
| NumOrb::XCFunctional | LDA-PZ | Exchange-correlation functionals |
| Relaxation::ForceTolerance | 5.e-2 eV/Ang | geometricOptimizationParameters() |
| Relaxation::MaxDisplacement | 0.1 Bohr | geometricOptimizationParameters() |
| Relaxation::MaxSteps | 200 | geometricOptimizationParameters() |
| Relaxation::Type | CG | geometricOptimizationParameters() |
| SCF::Algorithm | Pulay | iterationMixingParameters() |
| SCF::Coordinate | Hamiltonian | iterationMixingParameters() |
| SCF::Criterion | Strict | iterationControlParameters() |
| SCF::DiagonalMixingParameter | 0.1 | iterationMixingParameters() |
| SCF::HistorySteps | 6 | iterationMixingParameters() |
| SCF::InitialSpinPolarization | electronDensityParameters() | |
| SCF::MaxSteps | 100 | iterationControlParameters() |
| SCF::Tolerance | 1.e-4 | iterationControlParameters() |
| SCF::TwoProbe::InitialBulkRun | T | executeSelfConsistentCalculation() |
| Simulation::ConstrainAtoms | n/a | calculateOptimizedAtomicGeometry() |
| Simulation::Type | SingleConfiguration | calculateOptimizedAtomicGeometry() KohnShamMethod |
| System::Type | n/a | Deprecated |
| TwoProbe::CentralAtomList | %block | TwoProbeConfiguration |
| TwoProbe::Contour::Circle::NumPoints | 30 | energyContourIntegralParameters() |
| TwoProbe::Contour::DeltaEMin | 3.0 Rydberg | energyContourIntegralParameters() |
| TwoProbe::Contour::FermiLine::NumPoints | 10 | energyContourIntegralParameters() |
| TwoProbe::Contour::KTPoles::NumPoints | 4 | energyContourIntegralParameters() |
| TwoProbe::Contour::RealAxis::Eta | 0.01 eV | energyContourIntegralParameters() |
| TwoProbe::Contour::RealAxis::PointDensity | 0.02 eV | energyContourIntegralParameters() |
| TwoProbe::LeftElectrode::ATKFile | n/a | Deprecated |
| TwoProbe::LeftElectrode::EquivalentCentralAtom | 0 | TwoProbeConfiguration |
| TwoProbe::LeftElectrode::EquivalentElectrodeAtom | 0 | TwoProbeConfiguration |
| TwoProbe::LeftElectrode::NetCDFFile | n/a | Deprecated |
| TwoProbe::LeftElectrode::Voltage | 0.0 eV | TwoProbeMethod |
| TwoProbe::LeftSurface::NumberOfAtoms | 0 | calculateProjectedHamiltonianEigenstates() |
| TwoProbe::Molecule::GateVoltage | 0.0 eV | GatedTwoProbeMethod |
| TwoProbe::RightElectrode::ATKFile | n/a | Deprecated |
| TwoProbe::RightElectrode::EquivalentCentralAtom | -1 | TwoProbeConfiguration |
| TwoProbe::RightElectrode::EquivalentElectrodeAtom | -1 | TwoProbeConfiguration |
| TwoProbe::RightElectrode::NetCDFFile | n/a | Deprecated |
| TwoProbe::RightElectrode::Voltage | 0.0 eV | TwoProbeMethod |
| TwoProbe::RightSurface::NumberOfAtoms | 0 | calculateProjectedHamiltonianEigenstates() |
| TwoProbe::UseMultigridForElectrostatics | F | Deprecated (automatically used for heterogeneous systems) |
| UnitCell::LatticeConstant | 1.0 Ang | Bravais lattices |
| UnitCell::X0 | 0.0 Ang | Deprecated |
| UnitCell::Y0 | 0.0 Ang | Deprecated |
| UnitCell::Z0 | 0.0 Ang | Deprecated |
One of the greatest difficulties with the ATK 2.0 input format, using keywords and command-line parameters, was the limited ability to control the execution flow of the program. Now, using NanoLanguage this is no longer an issue, and therefore most of the command-line parameters used in ATK 2.0 are no longer necessary. Some important command-line parameters can, however, be mapped onto corresponding NanoLanguage commands, as described in the table below.
Table 2: ATK 2.0 command-line parameter mapping to NanoLanguage.
| ATK 2.0 keyword | NanoLanguage equivalent |
|---|---|
| --version | --version / -v |
| --help, -h | --help, -v |
| --param | Deprecated |
| --force | Deprecated |
| --netcdf-file, -o | setCheckpointFilename() |
| --check, -c | Deprecated |
| --analyze, -a | restoreSelfConsistentCalculation() |
| --init-from, -i | Not implemented |
| --verbose | setVerbosityLevel() |
| --quiet, -q | setVerbosityLevel() |
| --xyz | Deprecated |
| --xyz-file | Deprecated |
| --xyz-na | Deprecated |
| --xyz-nb | Deprecated |
| --xyz-nc | Deprecated |