Closed nils-wittemeier closed 6 years ago
Your code looks somewhat correct.
1) The field strength is given in units of the system in Ang which may not be what you want?
I.e. is x
equally distributed on -x
to x
?
Basically, if your first x
coordinate is 0 Ang
and the farthest atom is at 10 Ang
, then the field will go from 0
to 10 Ang * e
. This would correspond to a "top-gate" since the largest field-strength is at your "highest" atom.
It is difficult to assess whether you do it as you suspect without knowing the x
-coordinates of your geometry?
2) The electrodes are not gated, and they probably should be. Otherwise you need to confine the gate in a small region far from the electrodes. Currently you define the gate on all atoms (also electrodes), but the electrode file does not seem to contain the same applied gate? In this case you are effectively attaching pristine electrodes to a gated system at an abrupt interface. This may indeed cause such oscillations because the electrode/device states are constantly aligned/mis-aligned.
3) You don't have a TBT.dH
input in your fdf? I guess you do it on the command-line?
Thank you for your help.
x=y=0
, and atoms are equally distributed on -x
to x
.V="0.001"
f="E_0.800.dH.nc"
tbtrans -V "$V:eV" -fdf TBT.dH:../dH/$f ../RUN.fdf````
1) Good.
2) You need to create a new electrode per dH. So that will be a bit cumbersome. In this case it is actually easier to do separate DEVICE.nc
and ELEC.nc
files per gate, and it shouldn't take that long.
3) Good.
I did what you suggested and created DEVICE.nc
and ELEC.nc
per gate and the results do look better:
I have, however, two more questions:
I had already created the files above for the case without a gate from the output of another code. Thus I read the Hamiltonian from these files. The Hamiltonian returned by sisl.physics.Hamiltonian.read
is always non-orthogonal. I assume it is implemented that way because the function is made to read .nc
files created by (Trans)SIESTA and the stored Hamiltonian would not be therefore usually not be orthogonal.
sisl.physics.Hamiltonian.read
takes keyword arguments and passes them on to sisl.io.siesta.siesta_nc.read_hamiltonian
and eventually to sisl.io.siesta.sisl.io.siesta.siesta_nc._read_class_spin
but they don't seem to be used after. It looks like this was intended to pass arguments, to object instantiation. Is this correct, or is there way to read an orthogonal Hamiltonian?Indeed that looks better :)
1) Yes.
Hcsr = H.tocsr(0)
H = H.fromsp(H.geometry, Hcsr)
2) The reason it states it is a non-orthogonal basis is simply that the nc file contains the overlap matrix (identity). So in reality it is an orthogonal basis.
I have just committed a fix that should correctly figure out whether the basis is orthogonal or not. So if you update sisl you should be good to go. :) Let me know how it works!
I will consider this as fixed. If you have other questions, please open a new issue :)
I would like to thank you very much for your help.
I tested your fix. It did work.
I am a master student and work on electronic transport through single and double wall carbon nanotubes. I have successfully used sisl to create and save the Hamiltonian for electrodes and devices, and run both bias and zero-bias calculations. Now I would like to add a Gate, as a homogeneous electric field, to a calculation with small bias (1meV), for this purpose I created delta-Hamiltonian files with the code below. Running TBtrans for all field strengths (with the .fdf file below), yields low currents for low field strengths, this is expected, since the simulated tube (16,0) is semiconducting (see figure attached at the bottom). For bigger field strength, however, the current starts strongly fluctuating.
Is the problem related to the way I create the files with sisl?