Transmission Pathways

Asked by David Guzman on 2017-06-01

I am trying to extract transmission pathways the way is done in ATK (Quantum Wise) is there anything like this implemented in Siesta/Transiesta?


Question information

English Edit question
Siesta Edit question
Nick Papior Edit question
Last query:
Last reply:
Nick Papior (nickpapior) said : #1

Yes, there is.

In tbtrans (if compiled with NetCDF-4 support) one may calculate the bond-currents (in ATK known as transmission-pathways).

I will highly recommend you to use the Python utility sisl to extract the bond-currents in a reasonable fashion. From sisl you have many options such as extracting the bond-currents for a subset of orbitals or simply the total bond-currents.

Look into the option:
and then the sisl manual.

sisl may be found here:

David Guzman (guzmand) said : #2

Hello Nick,
Thanks for your reply. I was able to extract the bond currents.
Is there an easy way to render this information?


Nick Papior (nickpapior) said : #3

There is no "correct" way to visualize the bond-currents. Typically bond-currents are very complex to show and one have to consider a case-by-case visualization of the bond-currents.

See for instance this paper which has bond-currents shown in one way:

The method is much similar to this code snippet:

import os
import numpy as np
import sisl

# Get the file
if not os.path.exists(''):

# Now read in the AV file
av = sisl.get_sile('')
geom = av.geom

J_orb = av.orbital_current('Left', E=-0.8, isc=[None] * 3)
J_a = av.atom_current_from_orbital(J_orb, activity=False)

#J_v = av.vector_current_from_orbital(J_orb)

# Now create plot
from matplotlib.colors import Colormap
from matplotlib.mlab import griddata
import matplotlib.pyplot as plt

def mmlinspace(a, axis, N):
    m, M = np.min(a[:, axis]), np.max(a[:, axis])
    return np.linspace(m, M, N)

N_x, N_y = 2000, 2000
x = mmlinspace(, 0, N_x)
y = mmlinspace(, 1, N_y)

xi, yi = np.meshgrid(x, y)
zi = griddata([:, 0],[:, 1], J_a, xi, yi, interp='linear')

cm = Colormap('inferno')
plt.contourf(xi, yi, zi,
However, it is probably only good for 2D structures.

Nick Papior (nickpapior) said : #4

Oh, and the code above requires the python package sisl, if used, please cite:

David Guzman (guzmand) said : #5

Great Thank you so much.

I actually have one more question if you don't mind. I am calculating the bond-currents of a metal as an example. I took the already built example of gold in TranSiesta and try to compute bond-currents via TBT.Current.Orb, but I get this warning:
WARNING: k-averaging orbital currents with time-reversal symmetry will not reproduce
the correct orbital current. Set TBT.Symmetry.TimeReversal F

I set TBT.Symmetry.TimeReversal to false but the warning keep showing up when I run tbtran. I also compared the average transmission when TBT.Current.Orb = true and TBT.Current.Orb=false and they look very different. Do you have any insights into this? Does one need to remove time reversal symmetry even for the transiesta calculation?

I appreciate your help.

Best Regards,

Nick Papior (nickpapior) said : #6

No, time-reversal symmetry should not change the k-averaged transmission function.

Could you please download this version:

If the same thing occurs, send me the complete set of files needed to perform your calculation.

Nick Papior (nickpapior) said : #7

And please know that transiesta and tbtrans is not the same program, they do two distinct things.

So no, you shouldn't remove time-reversal symmetry in transiesta (only tbtrans).

David Guzman (guzmand) said : #8

Hello Nick,

I didn't have time to try this earlier, but now I have an update.
I downloaded the subversion you pointed out and compile Siesta but TranSiesta gives me an error in siesta_forces.F. you can find the log file here and Makefile here . I have been using the same makefile for multiple version of siesta/transiesta and this error has never showed up.

Anyway, I thought I would just go ahead and compile TBtran and run it with the output of my working version of Transiesta (4.1_b2) and turns out that everything works fine. I haven't test it very carefully but the transmission with and without TBT.Current.Orb are the same. Moreover, I quickly checked the bond currents and compared with an example ran in ATK and the look very similar.

Do you see an issue if I run my production calculations with Siesta/TranSiesta 4.1_b2 but use TBtran from the subversion you suggested?

Thanks much for all your help,

Nick Papior (nickpapior) said : #9

Ok, great.

I have fixed the issue you said.

And no, it should be fine to use the new tbtrans on the 4.1-b2 output.

So when 4.1-b3 is released the problem is solved.

Thanks. I consider this solved then.

Nick Papior (nickpapior) said : #10