implementation of the energy grids for XANES calculations
Posted: 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
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