Comparing with old versions

Table of Contents

Changes since ATK 2008.02

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.

Changes since ATK 2.3

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:

    • ATK.Consortia

      The usage of this functionality requires a special feature in the license.

    • ATK.Future

      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.

Changes since ATK 2.2

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.

Changes since ATK 2.1

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:

    • LDA: Na, Rb, Rh, Sb, Cs, Ba, Ir.

    • GGA: K, Sc, Ti, Cr, Cu, Zn, Ga, As, Rb, Sr, Y, Zr, Nb, Tc, Ru, Rh, Pd, Ag, Cd, Sb, I, Cs, Ba, Hf, Ta, W, Re, Os, Ir, Pt, Au, Hg.

    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.

Changes since ATK 2.0

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