Real part of the dielectric function is absolutely one

Deals with issues related to computation of optical spectra in reciprocal space: RPA, TDDFT, local field effects.

Moderators: Davide Sangalli, andrea.ferretti, myrta gruning, andrea marini, Daniele Varsano, Conor Hogan

Post Reply
User avatar
luonn
Posts: 13
Joined: Mon Nov 12, 2018 4:52 pm

Real part of the dielectric function is absolutely one

Post by luonn » Tue Nov 19, 2019 8:25 am

Dear Yambo developers:

Yambo4.3.2 and 4.4.0 show the following problems when dealing with 2D materials using a Coulomb cutoff.
# E/ev[1] EPS-Im[2] EPS-Re[3] EPSo-Im[4] EPSo-Re[5] EPS`-Im[6] EPS`-Re[7]
#
0.000000 0.000000 1.000000 0.000000 1.000000 0.000000 1.000000
0.101 0.220E-08 1.00 0.421E-09 1.00 0.220E-08 1.00
0.202 0.434E-08 1.00 0.849E-09 1.00 0.434E-08 1.00
0.3030 0.7458E-8 1.000 0.1292E-8 1.000 0.7458E-8 1.000
0.4040 0.1272E-7 1.000 0.1756E-8 1.000 0.1272E-7 1.000
......

The imaginary part of the dielectric function is too small and the real part is 1.00.
But when dealing with 3D semiconductors without the Coulomb cutoff, the results are right. I do not know why.
And another library related problem emerge:
file: error while loading shared libraries: libz.so.1: failed to map segment from shared object
file: error while loading shared libraries: libz.so.1: failed to map segment from shared object


Can you help me to solve them? Many thanks!

Bests!

Nannan Luo
Nannan Luo
Low-Dimensional Materials and Devices Laboratory,
Tsinghua-Berkeley Shenzhen Institute (TBSI), Tsinghua University
C2-7, iPark, Nanshan district, Shenzhen, Guangdong province, China 518055
Tel: (+86)18811369291
E-mail: luo-nn@sz.tsinghua.edu.cn

User avatar
Daniele Varsano
Posts: 4199
Joined: Tue Mar 17, 2009 2:23 pm
Contact:

Re: Real part of the dielectric function is absolutely one

Post by Daniele Varsano » Tue Nov 19, 2019 3:04 pm

Dear Nannan Luo,

This is due to the fact that macroscopic eps in 2D materials it is not well defined (see e.g. PHYSICAL REVIEW B 94, 155406 (2016)) and the presence of the cutoff correctly gives you the very small values of eps (ideally zero for infinite vacuum). Anyway, what you get it is essentially correct beside a normalization factor. This happens because your coulomb potential does not behave as 1/q^2 in presence of the coulomb cutoff.
The quantity you should look at is the polarizability (alpha) and from the polarizability extract the observables. In 4.4 release you should have also the alpha output.

About library related errors you should provide more details: in what situation it happens? Were you able to compile the code, and if not please post the config.log file (rename it as .txt before uploading).

Best,
Daniele
Dr. Daniele Varsano
S3-CNR Institute of Nanoscience and MaX Center, Italy
MaX - Materials design at the Exascale
http://www.nano.cnr.it
http://www.max-centre.eu/

User avatar
luonn
Posts: 13
Joined: Mon Nov 12, 2018 4:52 pm

Re: Real part of the dielectric function is absolutely one

Post by luonn » Thu Nov 21, 2019 1:16 pm

Dear Daniele Varsano:
I am very grateful for the quick reply. I understant what you said. But using old versions of yambo (4.1.4 or 4.2.1), the obtained data in o-BSE.eps_q1_diago_bse file show like this for a 2D semiconductor with the Coulomb cutoff:
# E/ev[1] EPS-Im[2] EPS-Re[3] EPSo-Im[4] EPSo-Re[5]
#
0.000000 0.000000 6.928600 0.000000 5.152546
0.2004E-1 0.7855E-2 6.929 0.2225E-2 5.153
0.4008E-1 0.1573E-1 6.932 0.4451E-2 5.153
0.6012E-1 0.2364E-1 6.936 0.6682E-2 5.155
0.0802 0.0316 6.9410 0.0089 5.1561
0.10020 0.03967 6.94795 0.01116 5.15809
0.12024 0.04783 6.95653 0.01342 5.16053
0.14028 0.05610 6.96671 0.01569 5.16342
0.16032 0.06453 6.97853 0.01797 5.16677
0.18036 0.07312 6.99201 0.02027 5.17057
In my opinion, the real part of the dielectric constant can be expressed as:epsion_2D=1+L_z(epsion_3D - 1)/t, L_z is the Coulomb cutoff length and t is the effective thickness of 2D materials, epsion_3D is the obtained results from o-BSE.eps_q1_diago_bse.
The above results looks reasionable. Is anything wrong?
On the hand, using yambo4.4.0, and 4.3.2, the obtained dielectric function as a function of energy seems too small. Is there any difference of the output between the newer and older versions?
Besides, the polarizability (alpha) can be obtained from alpha_2D=L_z(epsion-1)/(4pi). what do you mean "In 4.4 release you should have also the alpha output"? The alpha can be obtained directly in a BSE calculations?

Another question I want to know is can yambo deal with inversion symmetry?

Best,
Nannan Luo
Nannan Luo
Low-Dimensional Materials and Devices Laboratory,
Tsinghua-Berkeley Shenzhen Institute (TBSI), Tsinghua University
C2-7, iPark, Nanshan district, Shenzhen, Guangdong province, China 518055
Tel: (+86)18811369291
E-mail: luo-nn@sz.tsinghua.edu.cn

User avatar
Daniele Varsano
Posts: 4199
Joined: Tue Mar 17, 2009 2:23 pm
Contact:

Re: Real part of the dielectric function is absolutely one

Post by Daniele Varsano » Thu Nov 21, 2019 1:57 pm

Dear Nannan Luo,
Is there any difference of the output between the newer and older versions?
Yes, in the 4.4 we changed the output when the coulomb cutoff is used.
eps=1+Vc X where Vc is the cutoff coulomb potential, while before the eps was calculated as
eps=1+X/q^2

The first expression is the one that is consistent and satisfies the relation between absorption and electron energy loss spectra.
Note that the difference between the results obtained by the two expressions for the absorption it is only a (large) constant.
Anyway, epsilon it is not meaningful for D < 3 as explained in the previous post.
In the 4.4 you should obtain the alpha, which is the quantity you should look at to obtain the observables.

If you do not get the alpha output, it means that you should update the source.
Another question I want to know is can yambo deal with inversion symmetry?
yes, it is taken into account if it is present. It is listed among the symmetries in the r_setup file see section [02.02] Symmetries.

Best,
Daniele
Dr. Daniele Varsano
S3-CNR Institute of Nanoscience and MaX Center, Italy
MaX - Materials design at the Exascale
http://www.nano.cnr.it
http://www.max-centre.eu/

User avatar
luonn
Posts: 13
Joined: Mon Nov 12, 2018 4:52 pm

Re: Real part of the dielectric function is absolutely one

Post by luonn » Sat Nov 23, 2019 4:34 am

Dear Daniele:

Is there any tutorial about the polarizability (alpha)? I want to know is the obtained alpha in yambo4.4.0 is the 3D one or the 2D one? Since the 3D alpha is dependent on the vacuum length or the Coulomb cutoff length.

Best
Nannan Luo
Nannan Luo
Low-Dimensional Materials and Devices Laboratory,
Tsinghua-Berkeley Shenzhen Institute (TBSI), Tsinghua University
C2-7, iPark, Nanshan district, Shenzhen, Guangdong province, China 518055
Tel: (+86)18811369291
E-mail: luo-nn@sz.tsinghua.edu.cn

User avatar
Daniele Varsano
Posts: 4199
Joined: Tue Mar 17, 2009 2:23 pm
Contact:

Re: Real part of the dielectric function is absolutely one

Post by Daniele Varsano » Sat Nov 23, 2019 11:40 am

Dear Nannan,
unfortunately, we do not have yet a tutorial, probably we will prepare one soon.
Anyway, with just a bit of patience, you can have a look at the source code:

Code: Select all

./bse/K_output_file.F

Code: Select all

330    if(l_col_cut) then
331      alpha_factor=eps_2_alpha/4._SP/pi*bare_qpg(1,1)**2/q_norm(1)**2
332      alpha(:,1)=Epsilon_ii(:,2)*alpha_factor
It is essentially the epsilon you were obtaining in the old version of the code (as you can see the eps is multiplied for Vcut and divide for q0^2).
Then multiplied for the eps_2_alpha factor which depends on the dimensionality of the system, defined in:

Code: Select all

./setup/check_periodic_directions.F
It is also printed in the report.

Similarly, in linear response calculations in reciprocal space, you can have a look to:

Code: Select all

./pol_function/OPTICS_driver.F  
which essentially do the same stuff and maybe easier to follow:

Code: Select all

310    if (eval_alpha) then
311      !
312      ! alpha = -eps_2_alpha X(1,1) / |q|^2
313      !       =  (1 -eps_M^-1) eps_2_alpha/4/pi
314      !       =  (1 +eels    ) eps_2_alpha/4/pi
315      !
316      call of_open_close(alpha_file_name,'oa')
317      !
318      if(l_col_cut) then
319        alpha_factor=eps_2_alpha/4._SP/pi*bare_qpg(1,1)**2/q_norm(1)**2
320        Alpha(:,1)=(Epsilon_ii(:,1)-1._SP)*alpha_factor
....
Best,
Daniele
Dr. Daniele Varsano
S3-CNR Institute of Nanoscience and MaX Center, Italy
MaX - Materials design at the Exascale
http://www.nano.cnr.it
http://www.max-centre.eu/

User avatar
luonn
Posts: 13
Joined: Mon Nov 12, 2018 4:52 pm

Re: Real part of the dielectric function is absolutely one

Post by luonn » Wed Dec 11, 2019 12:29 pm

Dear Daniele:

I am still confused about the alpha output of yambo4.4.0. As shown in the code (./pol_function/OPTICS_driver.F ),
CODE: SELECT ALL

310 if (eval_alpha) then
311 !
312 ! alpha = -eps_2_alpha X(1,1) / |q|^2
313 ! = (1 -eps_M^-1) eps_2_alpha/4/pi
314 ! = (1 +eels ) eps_2_alpha/4/pi
315 !
316 call of_open_close(alpha_file_name,'oa')
317 !
318 if(l_col_cut) then
319 alpha_factor=eps_2_alpha/4._SP/pi*bare_qpg(1,1)**2/q_norm(1)**2
320 Alpha(:,1)=(Epsilon_ii(:,1)-1._SP)*alpha_factor
....

Taking 2D semiconductors as an example, the output file alpha (the polarizability)
alpha=(eps_2D-1)*z/4pi *bare_qpg(1,1)**2/q_norm(1)**2, (eps_2D is the effective dielectric function, z is the cell length normal to the 2D plane, i.e. eps_2_alpha)
What is the factor "bare_qpg(1,1)**2/q_norm(1)**2" ? In other words, how can I get the eps_2D?
eps_2D=1+4pi*alpha/d , where d is the 2D-material thickness, right?

bests

Nannan Luo
Nannan Luo
Low-Dimensional Materials and Devices Laboratory,
Tsinghua-Berkeley Shenzhen Institute (TBSI), Tsinghua University
C2-7, iPark, Nanshan district, Shenzhen, Guangdong province, China 518055
Tel: (+86)18811369291
E-mail: luo-nn@sz.tsinghua.edu.cn

User avatar
Daniele Varsano
Posts: 4199
Joined: Tue Mar 17, 2009 2:23 pm
Contact:

Re: Real part of the dielectric function is absolutely one

Post by Daniele Varsano » Wed Dec 11, 2019 4:50 pm

Dear Nannan,

in Yambo alfa is defined as lim q->0 -X/q^2

as epsilon is eps=1+vX where v here is the modified Coulomb truncated cutoff.
This is expressed in Yambo as 1/qpg^2 where qpg=1/sqrt(Vcut).
So the term bare_qpg(1,1)**2/q_norm(1)**2 essentially restore the 1/q^2 limit.

Note that eps here it is not the eps_2D.

Best,
Daniele
Dr. Daniele Varsano
S3-CNR Institute of Nanoscience and MaX Center, Italy
MaX - Materials design at the Exascale
http://www.nano.cnr.it
http://www.max-centre.eu/

kli103
Posts: 15
Joined: Wed May 20, 2020 7:25 am
Location: University of California, Santa Cruz

Re: Real part of the dielectric function is absolutely one

Post by kli103 » Wed Jun 10, 2020 6:59 pm

Dear developers,

In the fourth part of the post, you said that older versions of yambo use eps=1+X/q^2 and yambo 4.4 uses eps=1+Vc X for coulomb truncation, and the difference between the results obtained by the two expressions for the absorption it is only a (large) constant. I tried to look for the expression of the constant that you memtioned but did not find on http://www.yambo-code.org/wiki/index.ph ... al_systems. Could you tell me how to estimate the constant? I ask this question because I want to compare the dielectric constants (eps) that I obtained by using yambo 4.1 and polarizability (alpha) that I obtained by using yambo 4.4.

Best regards,
Kejun
Kejun Li
PhD student,
Department of Physics,
University of California, Santa Cruz
E-mail: kli103@ucsc.edu

User avatar
Daniele Varsano
Posts: 4199
Joined: Tue Mar 17, 2009 2:23 pm
Contact:

Re: Real part of the dielectric function is absolutely one

Post by Daniele Varsano » Wed Jun 10, 2020 7:24 pm

Dear Kejun,

yes, by looking in:

Code: Select all

/src/bse/K_output_file.F 
you can see around line 330:

Code: Select all

330    if(l_col_cut) then
331      alpha_factor=eps_2_alpha/4._SP/pi*bare_qpg(1,1)**2/q_norm(1)**2
332      alpha(:,1)=Epsilon_ii(:,2)*alpha_factor
333      alpha(:,2)=Epsilon_ii(:,3)*alpha_factor
The eps_2_alpha depends on the dimensionality of the system and it is defined in:

Code: Select all

./setup/check_periodic_directions.F
The easiest way is to insert a write statement to print the alpha_factor in /src/bse/K_output_file.F

Other option is to extract the bare_qpg(1,1) value from the ndb.cutoff database (using ncdump) and evaluate the alpha_factor having in mind that q_norm(1)=1e-5

Best,
Daniele
Dr. Daniele Varsano
S3-CNR Institute of Nanoscience and MaX Center, Italy
MaX - Materials design at the Exascale
http://www.nano.cnr.it
http://www.max-centre.eu/

Post Reply