QuantumATK Forum
QuantumATK => General Questions and Answers => Topic started by: srdguezb on January 13, 2010, 13:03
-
Hello everybody,
my question is the next one: I think atk provides 2 'equivalent' ways to obtain the transmission spectrum:
1. Calculate T(E,k) and integrate in k. If the used k's are obtained with the Monhkorst procedure, T(E) is obtained straightforward by adittion and divide by N^2.
2. Use Trasmission spectrum function.
The question is: Should both approaches provide the same results?
Thus, I have calculated a .nc file with a selfconsistent_calculation, load a variable scf_calc with those data and set up this script by changing few things of that provided by the tutorial 'Transmission Coefficients'
#First way
N= 10
T= []
K= []
energies= numpy.arange(-5,5,0.1)*electronVolt
reduced_grid= MonkhorstPackGrid_ReducedToFirstOctant(N)
K= reduced_grid.getPickedKPoints()
for E in energies:
tr_limited = calculateTransmissionCoefficients(
self_consistent_calculation=scf_calc,
energy = E,
quantum_numbers = K
)
tr_reconstructed = reduced_grid.reconstructT(tr_limited)
TE = sum(sum(tr_reconstructed))/(N*N)
if processIsMaster():
print E,TE
if -1e-3*eV<E<1e-3*eV:
saveTransmissionCoefficients(tr_reconstructed,'trcoeff_k100Red_E0eV.cpk')
#Second way
bzip= brillouinZoneIntegrationParameters((N,N))
electron_transmission = calculateTransmissionSpectrum(
self_consistent_calculation = scf_calc,
energies = energies,
brillouin_zone_integration_parameters=bzip
)
energies = electron_transmission.energies()
coefficients = electron_transmission.coefficients()
if processIsMaster():
print 'Energy (eV) Transmission'
print '-----------------------------------'
for i in range(len(energies)):
print "%g\t%g" % ( energies.inUnitsOf(eV),coefficients )
Thank you
-
Only if you do your own integration exactly the right way. Remember first of all that the Gamma point has a different weight than other points in the Monkhorst-Pack sampling scheme, and also you need to consider if you are using time-reversal symmetry to reduce the grid or not.
-
Thank you very much for your reply but I am not sure to understand the answer. What do you mean with 'the right way'? In the script calc_transmission_reduced_grid.py provided with the tutorial Tutorial_Transmission_Coefficientes.pdf the transmission spectrum is obtained with the line 'TE = sum(sum(tr_reconstructed))/(N*N)'. Thus, if I calculate in that way the transmission spectrum I think I should have the same results than if it is calculated by the function calculateTransmissionSpectrum, as I posted above. However when I tried it the results were not exactly the same and I want to know if it is because ATK's functions or because I have not understood correctly the procedure.
I will also try with the exact example of the tutorial, I mean with femgofe_antipara.nc.
Thank you again
-
Right, in that case it's the same. I just meant, that expression is not generic, it relies on having a full grid of k-points (not reduced by time-reversal symmetry). I've also seen small differences to ATK, and this is probably caused by the small infinitesimal part of the energy, which breaks time-reversal symmetry very slightly. The difference should, however, be negligible for practical purposes.
-
Thank you :)