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?

Thanks,
David

Question information

Language:
English Edit question
Status:
Solved
For:
Siesta Edit question
Assignee:
Nick Papior Edit question
Last query:
2017-06-15
Last reply:
2017-06-15
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:
TBT.Current.Orb
and then the sisl manual.

sisl may be found here:

https://github.com/zerothi/sisl

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?

Regards,
David

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:
https://www.nature.com/articles/ncomms15783#supplementary-information

The method is much similar to this code snippet:

>>>>
import os
import numpy as np
import sisl

# Get the TBT.AV.nc file
if not os.path.exists('siesta.TBT.AV.nc'):
    sisl.get_sile('siesta.TBT.nc').write_tbtav()

# Now read in the AV file
av = sisl.get_sile('siesta.TBT.AV.nc')
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(geom.xyz, 0, N_x)
y = mmlinspace(geom.xyz, 1, N_y)

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

cm = Colormap('inferno')
plt.contourf(xi, yi, zi, cmap=plt.cm.plasma)
plt.savefig('test.png')
plt.show()
>>>>
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:

https://doi.org/10.5281/zenodo.495025
and
https://doi.org/10.1016/j.cpc.2016.09.022

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,
David

Nick Papior (nickpapior) said : #6

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

Could you please download this version:

http://bazaar.launchpad.net/~siesta-maint/siesta/rel-4.1/tarball/714

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 https://www.dropbox.com/s/lc9s45hbc46bnsr/transiesta.log?dl=0 and Makefile here https://www.dropbox.com/s/p2kv6qxqzxc4wnv/arch.make?dl=0 . 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,
David

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

Solved.