Defining fitting range ω in [0, ω_max] for analytical continuation Σ(iω) -> Σ(ω)

This commit is contained in:
JWilhelm 2025-02-15 14:11:06 +01:00 committed by Ole Schütt
parent cddc37194b
commit 20f7990520
21 changed files with 62 additions and 67 deletions

View file

@ -286,7 +286,7 @@ CONTAINS
CALL section_vals_val_get(gw_sec, "SIZE_LATTICE_SUM", i_val=bs_env%size_lattice_sum_V)
CALL section_vals_val_get(gw_sec, "KPOINTS_W", i_vals=bs_env%nkp_grid_chi_eps_W_input)
CALL section_vals_val_get(gw_sec, "HEDIN_SHIFT", l_val=bs_env%do_hedin_shift)
CALL section_vals_val_get(gw_sec, "MINIMAX_VERSION", i_val=bs_env%minimax_version)
CALL section_vals_val_get(gw_sec, "FREQ_MAX_FIT", r_val=bs_env%freq_max_fit)
CALL timestop(handle)
@ -1511,26 +1511,15 @@ CONTAINS
! for periodic systems and for 20 minimax points, we use a regularized minimax mesh
! (from experience: regularized minimax meshes converges faster for periodic systems
! and for 20 pts)
SELECT CASE (bs_env%minimax_version)
CASE (1)
IF (SUM(bs_env%periodic) .NE. 0 .OR. bs_env%num_time_freq_points >= 20) THEN
bs_env%regularization_minimax = 1.0E-6_dp
ELSE
bs_env%regularization_minimax = 0.0_dp
END IF
CASE (2)
bs_env%regularization_minimax = 1.0E-5_dp
CASE DEFAULT
CPABORT("Only minimax regularization version 1 and 2 available.")
END SELECT
IF (SUM(bs_env%periodic) .NE. 0 .OR. bs_env%num_time_freq_points >= 20) THEN
bs_env%regularization_minimax = 1.0E-6_dp
ELSE
bs_env%regularization_minimax = 0.0_dp
END IF
bs_env%stabilize_exp = 70.0_dp
bs_env%eps_atom_grid_2d_mat = 1.0E-50_dp
! only use interval ω in [0, 1 Ha] (1 Hartree = 27.211 eV) for virt, and ω in [-1 Ha, 0]
! for occ for use in analytic continuation of self-energy Σ^c_n(iω,k) -> Σ^c_n(ϵ,k)
bs_env%freq_max_fit = 1.0_dp
! use a 16-parameter Padé fit
bs_env%nparam_pade = 16
@ -1598,23 +1587,18 @@ CONTAINS
u = bs_env%unit_nr
IF (u > 0) THEN
WRITE (u, *) ' '
WRITE (u, '(T2,2A)') '------------------------------------------------', &
'-------------------------------'
WRITE (u, '(T2,2A)') '- ', &
' -'
WRITE (u, '(T2,2A)') '- GW CALCULATION ', &
' -'
WRITE (u, '(T2,2A)') '- ', &
' -'
WRITE (u, '(T2,2A)') '------------------------------------------------', &
'-------------------------------'
WRITE (u, '(T2,A)') ' '
WRITE (u, '(T2,A)') REPEAT('-', 79)
WRITE (u, '(T2,A,A78)') '-', '-'
WRITE (u, '(T2,A,A46,A32)') '-', 'GW CALCULATION', '-'
WRITE (u, '(T2,A,A78)') '-', '-'
WRITE (u, '(T2,A)') REPEAT('-', 79)
WRITE (u, '(T2,A)') ' '
WRITE (u, '(T2,A,I45)') 'Input: Number of time/freq. points', bs_env%num_time_freq_points
WRITE (u, FMT="(T2,A,I59)") 'Minimax grid version', bs_env%minimax_version
WRITE (u, "(T2,A,F44.1,A)") 'Input: ω_max for fitting Σ(iω) (eV)', bs_env%freq_max_fit*evolt
WRITE (u, '(T2,A,ES27.1)') 'Input: Filter threshold for sparse tensor operations', &
bs_env%eps_filter
WRITE (u, FMT="(T2,A,L62)") 'Apply Hedin shift', bs_env%do_hedin_shift
WRITE (u, "(T2,A,L55)") 'Input: Apply Hedin shift', bs_env%do_hedin_shift
END IF
CALL timestop(handle)
@ -1805,11 +1789,6 @@ CONTAINS
E_max = MAX(E_max, E_max_ispin)
END DO
IF (bs_env%minimax_version == 2) THEN
E_min = MAX(E_min - 0.5_dp/evolt, 0.3_dp/evolt)
E_max = 2*E_max
END IF
E_range = E_max/E_min
ALLOCATE (points_and_weights(2*num_time_freq_points))

View file

@ -2190,12 +2190,19 @@ CONTAINS
CALL section_add_keyword(section, keyword)
CALL keyword_release(keyword)
CALL keyword_create(keyword, __LOCATION__, name="MINIMAX_VERSION", &
description="Version of the minimax time and frequency grid "// &
"for Fourier transforms χ(iτ) -> χ(iω) -> W(iω) -> W(iτ) -> "// &
"Σ(iτ) -> Σ(iω). At present, version 1 and 2 is available.", &
usage="MINIMAX_VERSION 2", &
default_i_val=1)
CALL keyword_create(keyword, __LOCATION__, name="FREQ_MAX_FIT", &
description="Determines fitting range for the self-energy Σ(iω) on "// &
"imaginary axis: i*[0, ω_max] for empty orbitals/bands, i*[-ω_max,0] "// &
"for occ orbitals. A smaller ω_max might lead to better numerical "// &
"stability (i.e., if you observe clearly wrong GW eigenvalues/bands "// &
"around HOMO/LUMO, decreasing ω_max might fix this issue). "// &
"A small benchmark of ω_max is contained in Fig. 5 of "// &
"J. Wilhelm et al., JCTC 12, 3623-3635 (2016). "// &
"Note that we used ω_max = 1 Ha = 27.211 eV in the benchmark "// &
"M. Azizi et al., PRB 109, 245101 (2024).", &
unit_str="eV", &
usage="FREQ_MAX_FIT 20.0", &
default_r_val=cp_unit_to_cp2k(value=10.0_dp, unit_str="eV"))
CALL section_add_keyword(section, keyword)
CALL keyword_release(keyword)

View file

@ -128,8 +128,7 @@ MODULE post_scf_bandstructure_types
! imaginary time and frequency grids
INTEGER :: num_time_freq_points = -1, &
num_freq_points_fit = -1, &
minimax_version = -1
num_freq_points_fit = -1
REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: imag_time_points, &
imag_time_weights_freq_zero, &
imag_freq_points, &

View file

@ -254,17 +254,12 @@ CONTAINS
u = bs_env%unit_nr
IF (u > 0) THEN
WRITE (u, *) ' '
WRITE (u, '(T2,2A)') '-------------------------------------------------', &
'------------------------------'
WRITE (u, '(T2,2A)') '- ', &
' -'
WRITE (u, '(T2,2A)') '- BANDSTRUCTURE CALCULATION', &
' -'
WRITE (u, '(T2,2A)') '- ', &
' -'
WRITE (u, '(T2,2A)') '--------------------------------------------------', &
'-----------------------------'
WRITE (u, '(T2,A)') ' '
WRITE (u, '(T2,A)') REPEAT('-', 79)
WRITE (u, '(T2,A,A78)') '-', '-'
WRITE (u, '(T2,A,A51,A27)') '-', 'BANDSTRUCTURE CALCULATION', '-'
WRITE (u, '(T2,A,A78)') '-', '-'
WRITE (u, '(T2,A)') REPEAT('-', 79)
WRITE (u, '(T2,A)') ' '
END IF

View file

@ -75,6 +75,7 @@
&PROPERTIES
&BANDSTRUCTURE
&GW
FREQ_MAX_FIT 27.211
! Simplest setting for quick checks
NUM_TIME_FREQ_POINTS 20
&END GW

View file

@ -75,6 +75,7 @@
&PROPERTIES
&BANDSTRUCTURE
&GW
FREQ_MAX_FIT 27.211
! Simplest setting for quick checks
NUM_TIME_FREQ_POINTS 20
&END GW

View file

@ -76,6 +76,7 @@
&PROPERTIES
&BANDSTRUCTURE
&GW
FREQ_MAX_FIT 27.211
! Simplest setting for quick checks
NUM_TIME_FREQ_POINTS 20
&END GW

View file

@ -83,6 +83,7 @@
&PROPERTIES
&BANDSTRUCTURE
&GW
FREQ_MAX_FIT 27.211
! Simplest setting for quick checks
NUM_TIME_FREQ_POINTS 20
&END GW

View file

@ -83,6 +83,7 @@
&PROPERTIES
&BANDSTRUCTURE
&GW
FREQ_MAX_FIT 27.211
! Simplest setting for quick checks
NUM_TIME_FREQ_POINTS 20
&END GW

View file

@ -36,6 +36,7 @@
&PROPERTIES
&BANDSTRUCTURE
&GW
FREQ_MAX_FIT 27.211
NUM_TIME_FREQ_POINTS 6
&END GW
&END BANDSTRUCTURE

View file

@ -36,6 +36,7 @@
&PROPERTIES
&BANDSTRUCTURE
&GW
FREQ_MAX_FIT 27.211
NUM_TIME_FREQ_POINTS 6
&END GW
&END BANDSTRUCTURE

View file

@ -36,6 +36,7 @@
&PROPERTIES
&BANDSTRUCTURE
&GW
FREQ_MAX_FIT 27.211
NUM_TIME_FREQ_POINTS 6
&END GW
&END BANDSTRUCTURE

View file

@ -40,6 +40,7 @@
KPOINTS 1 2 2
&END DOS
&GW
FREQ_MAX_FIT 27.211
HEDIN_SHIFT FALSE
NUM_TIME_FREQ_POINTS 6
&END GW

View file

@ -48,6 +48,7 @@
&END DOS
&GW
EPS_FILTER 1.0E-6
FREQ_MAX_FIT 27.211
HEDIN_SHIFT FALSE
NUM_TIME_FREQ_POINTS 10
&END GW

View file

@ -50,6 +50,7 @@
&END BANDSTRUCTURE_PATH
&GW
EPS_FILTER 1.0E-5
FREQ_MAX_FIT 27.211
HEDIN_SHIFT FALSE
NUM_TIME_FREQ_POINTS 10
&END GW

View file

@ -41,6 +41,7 @@
&GW
APPROX_KP_EXTRAPOL
EPS_FILTER 1.0E-6
FREQ_MAX_FIT 27.211
HEDIN_SHIFT FALSE
NUM_TIME_FREQ_POINTS 10
&END GW

View file

@ -40,6 +40,7 @@
&BANDSTRUCTURE
&GW
EPS_FILTER 1.0E-6
FREQ_MAX_FIT 27.211
HEDIN_SHIFT FALSE
NUM_TIME_FREQ_POINTS 10
&END GW

View file

@ -40,6 +40,7 @@
KPOINTS 1 2 2
&END DOS
&GW
FREQ_MAX_FIT 27.211
HEDIN_SHIFT
NUM_TIME_FREQ_POINTS 6
&END GW

View file

@ -46,6 +46,7 @@
&END DOS
&GW
EPS_FILTER 1.0E-5
FREQ_MAX_FIT 27.211
NUM_TIME_FREQ_POINTS 6
&END GW
&SOC

View file

@ -46,7 +46,7 @@
&END DOS
&GW
EPS_FILTER 1.0E-5
MINIMAX_VERSION 2
FREQ_MAX_FIT 10.0
NUM_TIME_FREQ_POINTS 6
&END GW
&SOC

View file

@ -1,13 +1,13 @@
01_G0W0_periodic_H2O.inp 106 1e-03 9.861
02_G0W0_IH_SOC_LDOS.inp 106 1e-03 17.826
02_G0W0_IH_SOC_LDOS.inp 107 1e-03 11.344
03_G0W0_bandstructure_IH_chain.inp 106 5e-04 21.962
03_G0W0_bandstructure_IH_chain.inp 108 5e-04 21.678
04_G0W0_SOC_TeH_chain_open_shell_kp_extrapol.inp 106 1e-03 5.174
05_G0W0_SOC_TeH_chain_open_shell.inp 106 5e-04 5.178
05_G0W0_SOC_TeH_chain_open_shell.inp 107 5e-04 0.306
05_G0W0_SOC_TeH_chain_open_shell.inp 108 5e-04 5.134
06_G0W0_periodic_H2O_Hedin_shift.inp 106 1e-03 10.417
07_G0W0_periodic_H2Te_kp_sampling_SCF.inp 108 5e-04 10.315
08_G0W0_periodic_H2Te_kp_sampling_SCF_minimax_2.inp 108 5e-04 10.318
01_G0W0_periodic_H2O.inp 106 1e-03 9.861
02_G0W0_IH_SOC_LDOS.inp 106 1e-03 17.826
02_G0W0_IH_SOC_LDOS.inp 107 1e-03 11.344
03_G0W0_bandstructure_IH_chain.inp 106 5e-04 21.962
03_G0W0_bandstructure_IH_chain.inp 108 5e-04 21.678
04_G0W0_SOC_TeH_chain_open_shell_kp_extrapol.inp 106 1e-03 5.174
05_G0W0_SOC_TeH_chain_open_shell.inp 106 5e-04 5.178
05_G0W0_SOC_TeH_chain_open_shell.inp 107 5e-04 0.306
05_G0W0_SOC_TeH_chain_open_shell.inp 108 5e-04 5.134
06_G0W0_periodic_H2O_Hedin_shift.inp 106 1e-03 10.417
07_G0W0_periodic_H2Te_kp_sampling_SCF.inp 108 5e-04 10.315
08_G0W0_periodic_H2Te_kp_sampling_SCF_FREQ_MAX_FIT_10_eV.inp 108 5e-04 10.780
#EOF