Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - Anders Blom

Pages: 1 ... 333 334 [335]
There are a couple of different ways.

Simplest is perhaps to load the system into the Atomic Manipulator in VNL. Then, you click the button "Save Equivalent Bulk...".

There is also a NanoLanguage command; once you have created a two-probe system, the returned object has a method called equivalentBulkSystem(). Here's a very sketchy example of how to use it:

from ATK.TwoProbe import *
twoprobe = TwoProbeConfiguration (...)
equiv_bulk = twoprobe.equivalentBulkSystem()

For reference: The equivalent bulk system contains the electrodes plus the central region, represented as a PeriodicAtomConfiguration. This is the system calculated by ATK in the "equivalent bulk run" that precedes the two-probe calculation when using the (default) keyword InitialDensity.EquivalentBulk in twoProbeAlgorithmParameters().

Hope that helps!

General Questions and Answers / Re: Mesh-Cutoff
« on: December 8, 2008, 08:54 »
You should not expect the total energy to be a smooth curve that converges to a lot of decimals with increasing the mesh cut-off (or some other parameters like k-point sampling, for that matter). The nature of the problem, and the complexity of the non-linear self-consistent cycle means that there will always be small fluctuations. Therefore, look rather for a general trend of convergence when you plot the energy vs the mesh cut-off.

At the same time, I would not use the total energy as the criterion in a two-probe system, but rather something like the transmission spectrum (even just at the Fermi level).

If you plot this against the mesh cut-off there should be convergence before 400 Ry, hopefully!

General Questions and Answers / Re: Mesh-Cutoff
« on: December 8, 2008, 01:01 »
Another point, in case somebody is wondering:

Since ATK is a numerical-orbital code, it's easy to think that the real-space mesh determined by the mesh cut-off also controls the basis set functions of the atomic orbitals. This is, however, not the case (which is one of the reasons you cannot compare the value of the cut-off in ATK with plane-wave codes).

The basis set orbitals are expanded on a radial equidistant grid where the point spacing is determined by the keyword radial_sampling_dr (in basisSetParameters()). The default value of this parameter was lowered quite substantially in ATK 2008.02 to improve the default accuracy, which in particular was very helpful in relaxations. The new value should give a sufficiently smooth representation of the basis functions in all normal cases.

For more information on the basis set functions, see the manual section on basisSetParameters().

General Questions and Answers / Re: Mesh-Cutoff
« on: December 7, 2008, 22:44 »
The mesh cut-off is given as input by the user. It's an energy (default 150 Ry) which corresponds to the fineness of the real-space grid on which the Poisson equation is solved. (Or, grids, there are a couple of different grids, including the real-space electron density and the effective potential.) A higher value of the mesh cut-off gives a finer real-space grid and hence better accuracy.

The fineness or grid point spacing dx is calculated according to the formulas (hmm, isn't there a way to type math prettier...?)

E = hbar2 k2 / 2m

dx = pi/k (no factor 2 here!)

which if E is in Rydberg and dx is in Bohr becomes

dx = pi/sqrt(E)

k is the equivalent plane-wave cut-off component, but one can not really compare the values used in a plane-wave code and ATK, for several reasons.

This is perhaps obvious to you, but it's best to have a full explanation at hand.

Now, regarding how to choose the mesh cut-off, the only really proper way is to try with one value, then change it and see if the results (say, the current, or band structure) changes. If it does, you keep increasing it until the results converge.

The default (150 Ry) is often sufficient in most cases, in particular for electronic structure and transport calculations. In fact, for carbon nanotubes and other systems you can often decrease it and still get quality results (but not necessarily very fine plots of the density...). For geometry optimizations, a higher value is sometimes needed, in particular for elements with complex d-shells like iron.

So, the number of atoms is not really a determining factor a priori, and in most cases the real-space grids are not a limiting factor in the sense that the calculation uses too much memory. The main impact of increasing the mesh-cut off is rather on calculation time.

I can have a closer look at this, but it is immediately obvious from the input that the electrode is much too short. I'll write a bit more later about why, because this is a very important, and perhaps not entirely well document aspect.

But the short story is that you should probably put 4 or 6 gold atoms in the electrode, at minimum, perhaps 8 even. It's quite cheap for such a small system.

I would also increase the central region to 12 or 16 atoms, and again this would not be very expensive. The reason is that 1D chains are especially poor at screening the electrostatic interactions "spilling over" from the repeated copies of the system in the x-y plane. Such interactions, which are not "physical" in this system, even if the system itself is not entirely physical, break degeneracies and thus can disrupt the simple integer transmission plateaus you would expect in a system like this.

While a 1D chain is a nice toy-model, it is really not very physical. So, it might be easy to solve using simplified models, but when you a apply a more general 3D tool like full DFT as in ATK, it's not that simple any more... The system is susceptible to Peierls distortions and as noted above the poor screening often becomes a problem. Thus, while such systems appear like a simple check of a program, they will quickly bring out some quite subtle and complex issues that are not necessarily noticeable for more realistic systems. On the other hand, they are quite useful for debugging and, truth be told, to learn about the aforementioned subtleties :-)

So, perhaps you can rerun with more atoms and noticed, and I think there should be a difference in the results. It is also a good idea to compute and plot the transmission spectrum T(E) at both 0 V and 1 V, to get a more complete picture of where the value of the current comes from.

Generally speaking, if the system is set up correctly, a perfect 1D system should give integer values of the conductance at each energy, but there are many pitfalls so one needs to check the parameters and geometry carefully.

I could however not find any input file, seems somehow it wasn't attached to the post?

Here is a related tip: How to export XYZ files from VNL:

A recent post ( asked about importing XYZ files into VNL. Here is a way to export XYZ files from VNL! It is not possible as a direct function in the program, but it is relatively simple anyway, by using just a few lines of NanoLanguage code.

1. Open an editor (it can be the Script Editor in VNL) and make a NanoLanguage script that contains the following code:

from ATK.KohnSham import *

def printXYZFile (configuration):
    elements = configuration.elements()
    coordinates = configuration.cartesianCoordinates()
    print len(elements)
    print 'From VNL'
    for elem,coords in zip(elements,coordinates):
        print elem.symbol(),
        for i in coords:
            print i.inUnitsOf(Angstrom),

2. If you are using Windows, you first need to make a new directory called site-packages in the directory atk\lib in the VNL installation.

On Linux, this directory already exists, but is located in atk\lib\python2.4.

3. Save the file in the directory site-packages. Call it for instance.

4. Now, assume we have a molecule in VNL, built e.g. in the Molecular Builder. Drag the molecule from the Molecular Builder to the Script Editor (make sure the editor is empty, in case you used it to create the script above). The corresponding NanoLanguage code will be shown in the editor. Now add these two lines at the bottom of the script:

from xyzexport import printXYZFile

5. Drop the script on the Job Manager, and behold - an XYZ listing of the molecule will be printed in the Log Window. From there, you can just copy/paste the lines and save them as an XYZ file. (To copy lines from the Log Window, mark them and press Ctrl-C!)

In the future, whenever you want to export an XYZ file, you just follow steps 4 and 5 each time.

A ready file is attached for convenience, you can copy it into the site-packages directory.

  • Note that this trick is generally useful. Any Python files that are placed in site-packages can be imported directly in NanoLanguage scripts that are executed in the Job Manager.
  • In order to make the same script available also in NanoLanguage scripts executed with ATK, you just copy the same file to the same directory in the ATK installation.

Have a look at OpenBabel (, that should solve your problems!

Pages: 1 ... 333 334 [335]