tfrederiksen / inelastica

Python package for eigenchannels, vibrations and inelastic electron transport based on SIESTA/TranSIESTA DFT
https://tfrederiksen.github.io/inelastica
GNU Lesser General Public License v3.0
33 stars 16 forks source link

Device region in Inelastica #61

Closed krd2020 closed 3 years ago

krd2020 commented 3 years ago

Respected all,

I have been running the Inelastica package @tfrederiksen (EigenChannels executable to be specific) as a post-processing tool for transport calculations after TranSIESTA. I used these and tried to reproduce some results about Benzenedithiol (BDT) from literature, which involved MPSH eigenstates visualisation. The device region that I considered for the Inelastica run was only the molecular coordinates (in this case, 46-57; rest are gold electrode).

./EigenChannels -F 46 -L 57 -M 1.0 --bulk -f Transport_calc.fdf test_folder/

It gave error as follows: Device atoms 46-57, orbitals 271-306 ERROR: Too much overlap directly from left-top right Make device region larger Check against 'Device-Elec-overlap' failed... Maximum value: 0.0289855647267 Error value : 1e-07 Traceback (most recent call last): File "./EigenChannels", line 5, in pkg_resources.run_script('Inelastica==0.0.0', 'EigenChannels') File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 540, in run_script self.require(requires)[0].run_script(script_name, ns) File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 1455, in run_script execfile(script_filename, namespace, namespace) File "/home/koushik/local/bin/lib64/python2.7/site-packages/Inelastica-0.0.0-py2.7-linux-x86_64.egg/EGG-INFO/scripts/EigenChannels", line 11, in Module.main(options) File "/home/koushik/local/bin/lib64/python2.7/site-packages/Inelastica-0.0.0-py2.7-linux-x86_64.egg/Inelastica/EigenChannels.py", line 151, in main BufferAtoms=options.buffer) File "/home/koushik/local/bin/lib64/python2.7/site-packages/Inelastica-0.0.0-py2.7-linux-x86_64.egg/Inelastica/NEGF.py", line 576, in init "Make device region larger") File "/home/koushik/local/bin/lib64/python2.7/site-packages/Inelastica-0.0.0-py2.7-linux-x86_64.egg/Inelastica/misc/valuecheck.py", line 100, in Check raise ArithmeticError("Criteria not met. Please check output...") ArithmeticError: Criteria not met. Please check output...

But if I take a single gold atom in the left, i.e. if the device region is taken as 45-57, then it is running as usual without any error.

Can you explain the error: Too much overlap directly from left-top right Make device region larger Check against 'Device-Elec-overlap' failed... Maximum value: 0.0289855647267 Error value : 1e-07

So, it would be a great help if any suggestions are made in this regard.

Regards, Koushik R. Das

P.S.: the Inelastica package was installed without any apparent errors and all the dependencies were installed beforehand.

tfrederiksen commented 3 years ago

Dear Koushik,

Thanks for your interest in the Inelastica project.

The error you report is related to the junction geometry in combination with the extension of the basis orbitals. When you make the device region quite small, in this case with -F 46 -L 57, you end up with a direct coupling between the left and right electrodes. This would mean that electrons can bypass the device region and the calculated current would be wrong. The code therefore complains.

The only real solution is to

As a hack to circumvent the error, you could also raise the tolerance (in this case changing Device-Elec-overlap from 1e-7 to 3e-2 in the file misc/valuecheck.py) but this is dangerous and could lead to wrong results.

Thomas

krd2020 commented 3 years ago

Respected sir, Thank you for the reply.

Solution (1) I will try and come back to you. I have used SZ basis for all the atoms (C, H, S, Au atoms). So, solution (2) is I have to think about.

Also, I have tried solution (3). As mentioned earlier in the question, by adding one gold atom in the device region to the left (making the device region -F 45 -L 57), the program is not giving any error. But according to the definition of MPSH, this inclusion of an extra gold atom with the molecule is unphysical, I think.

I hope the solution (1) works out (and in line with published literature).

Regards, Koushik R. Das

tfrederiksen commented 3 years ago

As for approach (2) you can quite easily "squeeze" the basis orbitals in SIESTA by increasing the PAO.EnergyShift from the default value of `0.02 Ry' (say by a factor 5-10), see the SIESTA manual. This would of course require to restart calculations from scratch.

Please be aware that very short-ranged orbitals may not be a very good basis to describe your system. So it is important to check robustness of results for quantities that do not require a small device region (eg. DOS and transmission).

krd2020 commented 3 years ago

Respected sir,

Thank you for the reply. According to your suggestion, I will carry out the calculations.

Regards, Koushik R. Das

krd2020 commented 3 years ago

Sir,

By starting from scratch, for different PAO.EnergyShift values, did you mean starting all the way from geometric optimisation, or just transiesta runs (with corresponding electrode-TSHS) ?

krd2020 commented 3 years ago

Respected sir,

I have done my earlier calculations using PAO.EnergyShift = 0.01 eV. Upon your suggestions, I did with PAO.EnergyShift = 0.02 Ry.

I did all these from scratch, i.e. geometric optimisations using SIESTA.

For each of the above situations, the S-Au distance (since I am using BDT with gold electrodes) was taken 1.90 Ang and 2.40 Ang (seperate calculations), and then TranSIESTA runs.

All of these four cases are still giving that error "Make device region larger" during Inelstica runs. The tolerance has to be changed from 1e-07 to 1e-02 and larger to avoid the error, but that is not a good idea.

tfrederiksen commented 3 years ago

The issue is the extension of the Au orbitals. What is the minimum geometric distance L between Au atoms across the molecule? What is the radial extension r of your Au orbitals? Maybe you just need to squeeze the Au orbitals a bit further? You need to aim for 2 r < L.

By the way, I would recommend that you consider SZP for the Au basis orbitals for a more accurate description of the wide sd band (crossing the Fermi level) as well as the location of the narrow d-band states.

krd2020 commented 3 years ago

Sir,

Let me ask an apparently basic question. While calculating for MPSH, by the term "device region" as used in Inelastica, does it mean the extended molecule or only the molecule?

tfrederiksen commented 3 years ago

The device region is just a name for the list of consequtive atoms specified by the flags -F/-L. In the NEGF partition scheme, the only real restriction is to choose a zone of atoms such that there is no direct coupling between the two regions that it separates (conventionally named left and right). It can thus be a molecule, an extended molecule, a region around one interface, half a molecule, etc. The transmission does not depend on this choice (but the MPSH states do). For a MPSH analysis to be meaningful, one needs to have well-defined physical interfaces between the central part and contacts, eg. an organic molecule as device region and metal atoms as electrodes.

krd2020 commented 3 years ago

Respected sir,

I was working on large molecule (porphine derivatives). What actually worked out was by raising the tolerance from 1e-7 to 1e-3. Although this apparently is not a very good idea, but this actually what works well, giving nice correlations between MPSH states and transmission function at both zero and non-zero biases.

Thank you very much for your valuable time and advice.

Yours sincerely, Koushik R. Das

tfrederiksen commented 3 years ago

Thanks for the follow-up, Koushik, it is appreciated. I'm glad you found a workaround solution. I'll then close the issue.