implementation of the energy grids for XANES calculations

Queries about input and output files, running specific calculations, etc.


Moderators: Global Moderator, Moderator

Post Reply
Message
Author
fanchem
Newbie
Newbie
Posts: 3
Joined: Thu Dec 09, 2021 6:15 pm

implementation of the energy grids for XANES calculations

#1 Post by fanchem » Tue Jul 19, 2022 6:55 pm

Dear VASP developers,

My name is Fanchen Meng, and I am a postdoctoral research associate at Brookhaven National Laboratory under the supervision of Dr. Deyu Lu. Our current research interests involve building XANES spectral databases using VASP (version 6.2.1). We have a practical concern regarding the implementation of the energy grids used in the VASP XANES spectra calculations, which we want to discuss in this message.

In the subroutine core_con_mat.F, the upper (EMAX) and lower bounds (EMIN) of the energy grid are defined. EMAX is determined by extending the MAX_ENERGY_UNOCCUPIED by 120% (and then adding the absolute the core level energy, ABS(EIG(NL_CORE))); while EMIN is set to 90% of the core level energy. In this implementation, the energy range of the spectrum (EMAX - EMIN) is dictated by the deep core level energy. As a result, a user needs to choose a huge number of energy grids (CH_NEDOS) to achieve the desired energy resolution, e.g., 0.05 eV. Assume the core level energy is -6000 eV (close to the Cr K-edge), and the MAX_ENERGY_UNOCCUPIED is 50 eV, then EMAX = 50*1.2 + 6000 eV = 6060 eV and EMIN = 6000 * 0.9 = 5400 eV. If we expect an energy resolution around 0.05 eV, we need to use (6060-5400)/0.05 = 13200 grids. However, on most of the energy grid, the spectral intensity is zero as only the core level to conduction band transition is physically allowed in XAS. We believe that the current implementation of EMIN is a waste of computer resources and causes a lot of inconvenience for data processing and processing.

Here, to address this issue, we propose a change to the implementation of EMIN. We can use the function MAX_ENERGY_UNOCCUPIED to also obtain the value of the MIN_ENERGY_OCCUPIED, i.e., the bottom of the valence band. Since the core electron in the XAS simulation is placed at the bottom of the conduction band, it is not straightforward to get the top of the valence band. We can then define EMIN as MIN_ENERGY_OCCUPIED + ABS(EIG(NL_CORE)). With this change, the band width (EMAX-EMIN) does not depend on the core level energy. Therefore, we can use a small number of energy grids to achieve the expected energy resolution for the spectra. For example, if MIN_ENERGY_OCCUPIED is -60 eV and MAX_ENERGY_UNOCCUPIED is 50 eV, then EMIN=-60 eV + ABS(EIG(NL_CORE)) and EMAX=50*1.2 eV + ABS(EIG(NL_CORE)). We only need to use 120/0.05 = 2400 (CH_NEDOS) grids to achieve the same energy resolution as in the previous example.

We have modified the corresponding subroutines and attached them for your reference. May I know your thoughts about this implementation? If you would like to make the changes, may I know how can I commit the changes?

Best regards,

Fanchen
You do not have the required permissions to view the files attached to this post.

henrique_miranda
Global Moderator
Global Moderator
Posts: 501
Joined: Mon Nov 04, 2019 12:41 pm
Contact:

Re: implementation of the energy grids for XANES calculations

#2 Post by henrique_miranda » Thu Jul 21, 2022 1:40 pm

Dear Fanchen,

Thank you for your comments and suggestions.
I looked at the code you've sent and I find a reference to a `MAX_ENERGY_UNOCCUPIED_rev` routine in core_con_mat.F that is not defined in any of the source files you provided.
Also the linear_response.F file contains no differences w.r.t. the source file in vasp 6.2.1
Did you maybe forget to include that routine in your modified files?

fanchem
Newbie
Newbie
Posts: 3
Joined: Thu Dec 09, 2021 6:15 pm

Re: implementation of the energy grids for XANES calculations

#3 Post by fanchem » Thu Jul 21, 2022 3:01 pm

Thank you for your reply. I meant to attach the linear_optics.F but I attached the wrong one. Please find the modified codes in the attachment.
You do not have the required permissions to view the files attached to this post.

henrique_miranda
Global Moderator
Global Moderator
Posts: 501
Joined: Mon Nov 04, 2019 12:41 pm
Contact:

Re: implementation of the energy grids for XANES calculations

#4 Post by henrique_miranda » Fri Jul 22, 2022 8:02 am

Thank you for the proposed change.
We will discuss whether or not to include these changes in a future release of VASP.

fanchem
Newbie
Newbie
Posts: 3
Joined: Thu Dec 09, 2021 6:15 pm

Re: implementation of the energy grids for XANES calculations

#5 Post by fanchem » Fri Jul 22, 2022 1:21 pm

Thank you for your consideration. Another better way to do this might be using the EMIN as the MIN_ENERGY_UNOCCUPIED - 5 eV, while EMAX is the same as I described: MAX_ENERGY_UNOCCUPIED * 1.2. When I was modifying the code, I did not get the MIN_ENERGY_UNOCCUPIED. If you can return this value, it would be better.

Another issue regarding this is that, it would be great if the energy of the core level can be printed to the OUTCAR (or somewhere else).

Best,
Fanchen

Post Reply