Author Topic: Disagree of the transmission spectrum and transmission obtained with T(k,E)  (Read 3144 times)

0 Members and 1 Guest are viewing this topic.

Offline srdguezb

  • Regular QuantumATK user
  • **
  • Posts: 12
  • Reputation: 0
    • View Profile
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

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5429
  • Country: dk
  • Reputation: 89
    • View Profile
    • QuantumATK at Synopsys
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.

Offline srdguezb

  • Regular QuantumATK user
  • **
  • Posts: 12
  • Reputation: 0
    • View Profile
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

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5429
  • Country: dk
  • Reputation: 89
    • View Profile
    • QuantumATK at Synopsys
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.

Offline srdguezb

  • Regular QuantumATK user
  • **
  • Posts: 12
  • Reputation: 0
    • View Profile
Thank you  :)