Reproducing NEGF results

90 views
Skip to first unread message

Michael LaCount

unread,
Apr 9, 2025, 11:20:41 PMApr 9
to cp2k
I am trying to reproduce the transmission coefficient plot found in Figure 4 of the CP2K Electron Transport based on Non-Equilibrium-Greens-Functions Method: eCSE 08-09 Technical Report (see attached). From what I can tell the system is the same as the one found in 'QS/regtest-negf-fft/au111_c6h4s2_gamma_0.50V.inp'. However when I run that job unmodified except to add print commands in the NEGF section (see below) I don't get anything close to what was found in the Technical Report. The job input and output files are attached.

I also have a further question regarding this test. I want to create I-V curves, from what I understand I should therefore use the zero bias transmission coefficients, and set NEGF/CONTACT/ELECTRIC_POTENTIAL to 0 correct?

Any clarity on where I am going wrong would be appreciated. 

   &PRINT
     &DOS
       FILENAME device
       FROM_ENERGY -0.2
       N_GRIDPOINTS 401
       TILL_ENERGY 0.2
     &END DOS
     &TRANSMISSION
       FILENAME transm
       FROM_ENERGY -0.2
       N_GRIDPOINTS 401
       TILL_ENERGY 0.2
     &END TRANSMISSION
   &END PRINT
ecse0809_Technical_Report.pdf
au111_c6h4s2_gamma.inp
CP2K.out
au111_c6h4s2_gamma_0.50V-device-0-1.dos
au111_c6h4s2_gamma_0.50V-transm-0-1.transm

Dmitry Ryndyk

unread,
Nov 14, 2025, 3:41:23 AMNov 14
to cp2k
Dear Michael, 

to see the same result, as in the report, you should take zero voltage and other energy limits:

&PRINT
     &DOS
       FILENAME device
       FROM_ENERGY 0.272240982
       N_GRIDPOINTS 401
       TILL_ENERGY 0.492829218

     &END DOS
     &TRANSMISSION
       FILENAME transm
       FROM_ENERGY 0.272240982
       N_GRIDPOINTS 401
       TILL_ENERGY 0.492829218
     &END TRANSMISSION
   &END PRINT

The Fermi level is 0.38253510. The result is in attachment. It is not exactly the same, but it can be for many reasons.  

I am currently revising the NEGF code, and may change the energy levels to be around the Fermi level. If you want to use NEGF, I recommend the latest development version of CP2K. And I will try to answer further questions.  

Concerning your second question. It is the advantage of the NEGF approach that T(E) is changed with bias voltage. But as a simplest way to get I(V), the zero-voltage transmission can sometimes be used. Very carefully to make sense. It depends on the problem, of course. If the energy levels of the central system are not changed at finite voltage, one can omit self-consistency at finite voltage and use T_0(E).

Best wishes,
Dmitry Ryndyk

au111_c6h4s2_gamma_0.0V-transm-0-1.png

Michael LaCount

unread,
Nov 15, 2025, 12:30:22 AMNov 15
to cp2k
Hello Dmitry,

My post was when I was initially learning the NEGF calculations. I have since solved the problems I was having, and reproduce the transmission function from the technical report. As well as producing what appear to be reasonable I(V) curves.

The I(V) curves I made are based on Eq 21 from the technical report using the zero-bias (ELECTRIC_POTENTIAL [eV] 0). Your comment "If the energy levels of the central system are not changed at finite voltage" leaves me a bit worried that I was not careful enough. Is there a simple way to test whether or not the assumption is valid? My guess would be something like apply a bias voltage up to the max of the I(V) curve and see if the transmission function changes significantly. What I am trying to simulate is a small semiconductor device. For simplicity sake lets say it has a band gap of 1 eV, and make I(V) curves in the range of +/- 3V. If the assumption brakes down how would I go about finding the I(V) curve, I could imagine finding the transmission function at various applied biases, but that seems like a computationally expensive approach.

I have been using a recent but not newest version of CP2K 2024.2. I am curious if the changes to the NEGF code are documented anywhere, and what impact they would have either in terms of performance or results.

Best,
Michael LaCount

Michael LaCount

unread,
Nov 15, 2025, 12:30:31 AMNov 15
to cp2k
Hello Dmitry,

My post was when I was initially learning the NEGF calculations. I have since solved the problems I was having, and reproduce the transmission function from the technical report. As well as producing what appear to be reasonable I(V) curves.

The I(V) curves I made are based on Eq 21 from the technical report using the zero-bias (ELECTRIC_POTENTIAL [eV] 0). Your comment "If the energy levels of the central system are not changed at finite voltage" leaves me a bit worried that I was not careful enough. Is there a simple way to test whether or not the assumption is valid? My guess would be something like apply a bias voltage up to the max of the I(V) curve and see if the transmission function changes significantly. What I am trying to simulate is a small semiconductor device. For simplicity sake lets say it has a band gap of 1 eV, and make I(V) curves in the range of +/- 3V. If the assumption brakes down how would I go about finding the I(V) curve, I could imagine finding the transmission function at various applied biases, but that seems like a computationally expensive approach.

I have been using a recent but not newest version of CP2K 2024.2. I am curious if the changes to the NEGF code are documented anywhere, and what impact they would have either in terms of performance or results.

Best,
Michael LaCount

On Friday, November 14, 2025 at 12:41:23 AM UTC-8 Dmitry Ryndyk wrote:

Dmitry Ryndyk

unread,
Nov 15, 2025, 2:45:10 AMNov 15
to cp2k
Hi Michael,

I aim to develop the code further. But first, I check and clean the old one. The changes are mainly internal and do not change the results. So far, I have made some improvements in the calculation of separate electrodes. I don't think your system is visibly affected. The state-of-the-art I will describe in the paper and on-site tutorials, which I am preparing now.

Your approach to checking the transmission function is a good one.  Yes, if one needs a voltage-dependent transmission, it is computationally expensive. )
One of the possible solutions is to use DFTB or xTB instead of DFT. It is one of the things I want to add to the code.

Best wishes,
Dmitry
Reply all
Reply to author
Forward
0 new messages