4-center Hartree-Fock and ADMM for exchange self-energy in GW+kpoints

This commit is contained in:
Jan Wilhelm 2022-06-06 11:03:09 +02:00 committed by GitHub
parent a1b2a5c163
commit 024676661e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
22 changed files with 752 additions and 187 deletions

View file

@ -1224,7 +1224,17 @@ CONTAINS
"means smaller expansion coefficients that leads to a more stable calculation at the price "// &
"of a slightly worse RI approximation. In case the parameter 0.0 is chosen, ordinary RI is used.", &
usage="REGULARIZATION_RI 1.0E-4", &
default_r_val=1.0E-2_dp)
default_r_val=0.0_dp)
CALL section_add_keyword(section, keyword)
CALL keyword_release(keyword)
CALL keyword_create( &
keyword, __LOCATION__, &
name="EPS_EIGVAL_S", &
description="Parameter to reduce the expansion coefficients in RI for periodic GW. Removes all "// &
"eigenvectors and eigenvalues of S_PQ(k) that are smaller than EPS_EIGVAL_S. ", &
usage="EPS_EIGVAL_S 1.0E-3", &
default_r_val=1.0E-5_dp)
CALL section_add_keyword(section, keyword)
CALL keyword_release(keyword)
@ -1251,6 +1261,16 @@ CONTAINS
CALL section_add_keyword(section, keyword)
CALL keyword_release(keyword)
CALL keyword_create( &
keyword, __LOCATION__, &
name="REL_CUTOFF_TRUNC_COLOUMB_RI_X", &
description="Only active in case TRUNC_COLOUMB_RI_X = True. Normally, relative cutoff = 0.5 is "// &
"good choice; still needs to be evaluated for RI schemes. ", &
usage="REL_CUTOFF_TRUNC_COLOUMB_RI_X 0.3", &
default_r_val=0.5_dp)
CALL section_add_keyword(section, keyword)
CALL keyword_release(keyword)
CALL keyword_create( &
keyword, __LOCATION__, &
name="KEEP_QUADRATURE", &

View file

@ -697,7 +697,8 @@ CONTAINS
DEALLOCATE (mos_mp2)
! if necessary reallocate hfx buffer
IF (free_hfx_buffer .AND. (.NOT. calc_forces)) THEN
IF (free_hfx_buffer .AND. (.NOT. calc_forces) .AND. &
(mp2_env%ri_g0w0%do_ri_Sigma_x .OR. .NOT. mp2_env%ri_rpa_im_time%do_kpoints_from_Gamma)) THEN
CALL timeset(routineN//"_alloc_hfx", handle2)
DO irep = 1, n_rep_hf
DO i_thread = 0, n_threads - 1

View file

@ -313,7 +313,7 @@ CONTAINS
CPABORT("SVD not implemented for forces.!")
END IF
do_kpoints_from_Gamma = SUM(qs_env%mp2_env%ri_rpa_im_time%kp_grid) > 0
do_kpoints_from_Gamma = qs_env%mp2_env%ri_rpa_im_time%do_kpoints_from_Gamma
IF (do_kpoints_cubic_RPA .OR. do_kpoints_from_Gamma) THEN
CALL get_qs_env(qs_env=qs_env, &
kpoints=kpoints)

View file

@ -260,7 +260,8 @@ CONTAINS
do_kpoints, kpoints, put_mat_KS_env=.FALSE.)
CALL inversion_of_S_and_mult_with_chol_dec_of_V(fm_matrix_L_RI_metric, fm_matrix_L_kpoints, &
fm_matrix_Sinv_Vtrunc_Sinv, dimen_RI, kpoints)
fm_matrix_Sinv_Vtrunc_Sinv, dimen_RI, kpoints, &
qs_env%mp2_env%ri_rpa_im_time%eps_eigval_S)
ELSE
IF (calc_forces .AND. (.NOT. do_im_time)) THEN
@ -1404,15 +1405,18 @@ CONTAINS
!> \param fm_matrix_Sinv_Vtrunc_Sinv ...
!> \param dimen_RI ...
!> \param kpoints ...
!> \param eps_eigval_S ...
! **************************************************************************************************
SUBROUTINE inversion_of_S_and_mult_with_chol_dec_of_V(fm_matrix_L_RI_metric, fm_matrix_L_kpoints, &
fm_matrix_Sinv_Vtrunc_Sinv, dimen_RI, kpoints)
fm_matrix_Sinv_Vtrunc_Sinv, dimen_RI, kpoints, &
eps_eigval_S)
TYPE(cp_fm_p_type), DIMENSION(:, :), POINTER :: fm_matrix_L_RI_metric, &
fm_matrix_L_kpoints, &
fm_matrix_Sinv_Vtrunc_Sinv
INTEGER, INTENT(IN) :: dimen_RI
TYPE(kpoint_type), POINTER :: kpoints
REAL(KIND=dp), INTENT(IN) :: eps_eigval_S
CHARACTER(LEN=*), PARAMETER :: routineN = 'inversion_of_S_and_mult_with_chol_dec_of_V'
COMPLEX(KIND=dp), PARAMETER :: cone = CMPLX(1.0_dp, 0.0_dp, KIND=dp), &
@ -1449,7 +1453,7 @@ CONTAINS
CALL cp_cfm_scale_and_add_fm(czero, cfm_matrix_Vtrunc_tmp, cone, fm_matrix_Sinv_Vtrunc_Sinv(ikp, 1)%matrix)
CALL cp_cfm_scale_and_add_fm(cone, cfm_matrix_Vtrunc_tmp, ione, fm_matrix_Sinv_Vtrunc_Sinv(ikp, 2)%matrix)
CALL cp_cfm_robust_cholesky(cfm_matrix_S_tmp, cfm_matrix_S_inv_tmp, threshold=1.0E-12_dp, exponent=-0.5_dp)
CALL cp_cfm_robust_cholesky(cfm_matrix_S_tmp, cfm_matrix_S_inv_tmp, threshold=eps_eigval_S, exponent=-0.5_dp)
! get S^(-1) = U^(-H)U^(-1)
CALL cp_cfm_gemm("C", "N", dimen_RI, dimen_RI, dimen_RI, cone, cfm_matrix_S_tmp, cfm_matrix_S_tmp, &
@ -1501,7 +1505,8 @@ CONTAINS
INTEGER :: handle
INTEGER, DIMENSION(3) :: periodic
REAL(KIND=dp) :: shortest_dist_cell_planes
REAL(KIND=dp) :: rel_cutoff_trunc_coulomb_ri_x, &
shortest_dist_cell_planes
REAL(KIND=dp), DIMENSION(2) :: abs_cutoffs_chi_W
TYPE(cell_type), POINTER :: cell
@ -1534,9 +1539,12 @@ CONTAINS
qs_env%mp2_env%ri_rpa_im_time%abs_cutoffs_chi_W(1:2) = abs_cutoffs_chi_W(1:2)
rel_cutoff_trunc_coulomb_ri_x = qs_env%mp2_env%ri_rpa_im_time%rel_cutoff_trunc_coulomb_ri_x
IF (PRESENT(trunc_coulomb)) THEN
trunc_coulomb%potential_type = do_potential_truncated
trunc_coulomb%cutoff_radius = (abs_cutoffs_chi_W(1) + abs_cutoffs_chi_W(2))*0.5_dp
trunc_coulomb%cutoff_radius = (abs_cutoffs_chi_W(1) + abs_cutoffs_chi_W(2))* &
rel_cutoff_trunc_coulomb_ri_x
trunc_coulomb%filename = "t_c_g.dat"
! dummy
trunc_coulomb%omega = 0.0_dp

View file

@ -238,6 +238,7 @@ CONTAINS
l_val=mp2_env%ri_rpa_im_time%do_im_time_kpoints)
CALL section_vals_val_get(low_scaling_section, "KPOINTS", &
i_vals=mp2_env%ri_rpa_im_time%kp_grid)
mp2_env%ri_rpa_im_time%do_kpoints_from_Gamma = SUM(mp2_env%ri_rpa_im_time%kp_grid) > 0
CALL section_vals_val_get(low_scaling_section, "KPOINT_WEIGHTS_W", &
i_val=mp2_env%ri_rpa_im_time%kpoint_weights_W_method)
CALL section_vals_val_get(low_scaling_section, "EXPONENT_TAILORED_WEIGHTS", &
@ -246,10 +247,14 @@ CONTAINS
r_vals=mp2_env%ri_rpa_im_time%rel_cutoffs_chi_W)
CALL section_vals_val_get(low_scaling_section, "REGULARIZATION_RI", &
r_val=mp2_env%ri_rpa_im_time%regularization_RI)
CALL section_vals_val_get(low_scaling_section, "EPS_EIGVAL_S", &
r_val=mp2_env%ri_rpa_im_time%eps_eigval_S)
CALL section_vals_val_get(low_scaling_section, "MAKE_CHI_POS_DEFINITE", &
l_val=mp2_env%ri_rpa_im_time%make_chi_pos_definite)
CALL section_vals_val_get(low_scaling_section, "TRUNC_COLOUMB_RI_X", &
l_val=mp2_env%ri_rpa_im_time%trunc_coulomb_ri_x)
CALL section_vals_val_get(low_scaling_section, "REL_CUTOFF_TRUNC_COLOUMB_RI_X", &
r_val=mp2_env%ri_rpa_im_time%rel_cutoff_trunc_coulomb_ri_x)
CALL section_vals_val_get(low_scaling_section, "K_MESH_G_FACTOR", &
i_val=mp2_env%ri_rpa_im_time%k_mesh_g_factor)
CALL section_vals_val_get(low_scaling_section, "GREENS_FUNCTION", &

View file

@ -153,9 +153,11 @@ MODULE mp2_types
TYPE ri_rpa_im_time_type
INTEGER :: cut_memory
LOGICAL :: memory_info, make_chi_pos_definite, trunc_coulomb_ri_x, keep_quad
LOGICAL :: memory_info, make_chi_pos_definite, trunc_coulomb_ri_x, keep_quad, &
do_kpoints_from_Gamma
REAL(KIND=dp) :: eps_filter, &
eps_filter_factor, eps_compress, exp_tailored_weights, regularization_RI
eps_filter_factor, eps_compress, exp_tailored_weights, regularization_RI, &
eps_eigval_S, rel_cutoff_trunc_coulomb_ri_x
REAL(KIND=dp), DIMENSION(:), POINTER :: rel_cutoffs_chi_W, tau_tj, tau_wj, tj, wj
REAL(KIND=dp), DIMENSION(:, :), POINTER :: weights_cos_tf_t_to_w, weights_cos_tf_w_to_t
REAL(KIND=dp), DIMENSION(2) :: abs_cutoffs_chi_W
@ -211,7 +213,8 @@ MODULE mp2_types
INTEGER :: n_kp_in_kp_line, n_special_kp, nkp_self_energy, &
nkp_self_energy_special_kp, nkp_self_energy_monkh_pack
REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :) :: xkp_special_kp
TYPE(dbcsr_p_type), DIMENSION(:), ALLOCATABLE :: mat_exchange_for_kp_from_gamma
TYPE(dbcsr_p_type), DIMENSION(:), ALLOCATABLE :: &
matrix_sigma_x_minus_vxc, matrix_ks
END TYPE
TYPE ri_basis_opt

View file

@ -63,7 +63,7 @@ MODULE qs_band_structure
CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_band_structure'
PUBLIC :: calculate_band_structure, calculate_kp_orbitals
PUBLIC :: calculate_band_structure, calculate_kp_orbitals, calculate_kpoints_for_bs
! **************************************************************************************************
@ -310,7 +310,6 @@ CONTAINS
OPTIONAL :: kpgeneral
INTEGER, INTENT(IN), OPTIONAL :: group_size_ext
INTEGER :: i, ix, iy, iz, npoints
TYPE(cp_blacs_env_type), POINTER :: blacs_env
TYPE(cp_para_env_type), POINTER :: para_env
TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_ks, matrix_s
@ -320,6 +319,46 @@ CONTAINS
TYPE(qs_scf_env_type), POINTER :: scf_env
TYPE(scf_control_type), POINTER :: scf_control
CALL calculate_kpoints_for_bs(kpoint, scheme, group_size_ext, mp_grid, kpgeneral)
CALL get_qs_env(qs_env=qs_env, para_env=para_env, blacs_env=blacs_env)
kpoint%para_env => para_env
CALL cp_para_env_retain(para_env)
kpoint%blacs_env_all => blacs_env
CALL cp_blacs_env_retain(blacs_env)
CALL kpoint_env_initialize(kpoint)
CALL kpoint_initialize_mos(kpoint, qs_env%mos, nadd)
CALL kpoint_initialize_mo_set(kpoint)
CALL get_qs_env(qs_env, sab_kp=sab_nl, dft_control=dft_control)
CALL kpoint_init_cell_index(kpoint, sab_nl, para_env, dft_control)
CALL get_qs_env(qs_env, matrix_ks_kp=matrix_ks, matrix_s_kp=matrix_s, &
scf_env=scf_env, scf_control=scf_control)
CALL do_general_diag_kp(matrix_ks, matrix_s, kpoint, scf_env, scf_control, .FALSE.)
END SUBROUTINE calculate_kp_orbitals
! **************************************************************************************************
!> \brief ...
!> \param kpoint ...
!> \param scheme ...
!> \param group_size_ext ...
!> \param mp_grid ...
!> \param kpgeneral ...
! **************************************************************************************************
SUBROUTINE calculate_kpoints_for_bs(kpoint, scheme, group_size_ext, mp_grid, kpgeneral)
TYPE(kpoint_type), POINTER :: kpoint
CHARACTER(LEN=*), INTENT(IN) :: scheme
INTEGER, INTENT(IN), OPTIONAL :: group_size_ext
INTEGER, DIMENSION(3), INTENT(IN), OPTIONAL :: mp_grid
REAL(KIND=dp), DIMENSION(:, :), INTENT(IN), &
OPTIONAL :: kpgeneral
INTEGER :: i, ix, iy, iz, npoints
CPASSERT(.NOT. ASSOCIATED(kpoint))
CALL kpoint_create(kpoint)
@ -389,25 +428,6 @@ CONTAINS
CPABORT("Unknown kpoint scheme requested")
END SELECT
CALL get_qs_env(qs_env=qs_env, para_env=para_env, blacs_env=blacs_env)
kpoint%para_env => para_env
CALL cp_para_env_retain(para_env)
kpoint%blacs_env_all => blacs_env
CALL cp_blacs_env_retain(blacs_env)
CALL kpoint_env_initialize(kpoint)
CALL kpoint_initialize_mos(kpoint, qs_env%mos, nadd)
CALL kpoint_initialize_mo_set(kpoint)
CALL get_qs_env(qs_env, sab_kp=sab_nl, dft_control=dft_control)
CALL kpoint_init_cell_index(kpoint, sab_nl, para_env, dft_control)
CALL get_qs_env(qs_env, matrix_ks_kp=matrix_ks, matrix_s_kp=matrix_s, &
scf_env=scf_env, scf_control=scf_control)
CALL do_general_diag_kp(matrix_ks, matrix_s, kpoint, scf_env, scf_control, .FALSE.)
END SUBROUTINE calculate_kp_orbitals
! **************************************************************************************************
END SUBROUTINE calculate_kpoints_for_bs
END MODULE qs_band_structure

View file

@ -15,11 +15,15 @@ MODULE rpa_gw
gto_basis_set_type
USE cell_types, ONLY: cell_type,&
get_cell
USE cp_cfm_basic_linalg, ONLY: cp_cfm_gemm,&
cp_cfm_scale_and_add
USE cp_cfm_types, ONLY: &
cp_cfm_create, cp_cfm_get_info, cp_cfm_p_type, cp_cfm_release, cp_cfm_set_all, &
cp_cfm_to_cfm, cp_cfm_to_fm, cp_cfm_type, cp_fm_to_cfm
USE cp_cfm_basic_linalg, ONLY: cp_cfm_gemm
USE cp_cfm_types, ONLY: cp_cfm_create,&
cp_cfm_get_info,&
cp_cfm_p_type,&
cp_cfm_release,&
cp_cfm_set_all,&
cp_cfm_to_fm,&
cp_cfm_type,&
cp_fm_to_cfm
USE cp_dbcsr_operations, ONLY: copy_dbcsr_to_fm,&
copy_fm_to_dbcsr,&
dbcsr_allocate_matrix_set,&
@ -1296,7 +1300,7 @@ CONTAINS
qs_env, para_env, &
mp2_env, num_fit_points, mo_coeff, &
do_ri_Sigma_x, vec_Sigma_x_gw(:, :, 1), unit_nr, 1, &
starts_array_mc, ends_array_mc)
starts_array_mc, ends_array_mc, eps_filter)
END IF
@ -4672,6 +4676,7 @@ CONTAINS
!> \param ispin ...
!> \param starts_array_mc ...
!> \param ends_array_mc ...
!> \param eps_filter ...
! **************************************************************************************************
SUBROUTINE compute_self_energy_cubic_gw_kpoints(num_integ_points, tau_tj, tj, &
matrix_s, Eigenval, e_fermi, fm_mat_W, &
@ -4684,7 +4689,7 @@ CONTAINS
qs_env, para_env, &
mp2_env, num_fit_points, fm_mo_coeff, &
do_ri_Sigma_x, vec_Sigma_x_gw, unit_nr, ispin, &
starts_array_mc, ends_array_mc)
starts_array_mc, ends_array_mc, eps_filter)
INTEGER, INTENT(IN) :: num_integ_points
REAL(KIND=dp), ALLOCATABLE, DIMENSION(:), &
@ -4718,6 +4723,7 @@ CONTAINS
REAL(KIND=dp), DIMENSION(:, :), INTENT(INOUT) :: vec_Sigma_x_gw
INTEGER, INTENT(IN) :: unit_nr, ispin
INTEGER, DIMENSION(:), INTENT(IN) :: starts_array_mc, ends_array_mc
REAL(KIND=dp), INTENT(IN) :: eps_filter
CHARACTER(LEN=*), PARAMETER :: routineN = 'compute_self_energy_cubic_gw_kpoints'
@ -4921,6 +4927,7 @@ CONTAINS
map_1=[1], map_2=[2, 3], &
bounds_2=bounds_RI_i, &
bounds_3=bounds_ao_ao_j, &
filter_eps=eps_filter, &
unit_nr=unit_nr_prv)
CALL dbt_copy(t_3c_M_W_tmp, t_3c_O_W, order=[1, 2, 3], move_data=.TRUE.)
@ -4930,12 +4937,12 @@ CONTAINS
CALL contract_to_self_energy(t_3c_O_all, t_greens_fct_occ, t_3c_O_W, &
mat_self_energy_ao_ao_neg_tau, &
bounds_ao_ao_j, bounds_RI_i, unit_nr_prv, &
do_occ=.TRUE., do_virt=.FALSE.)
eps_filter, do_occ=.TRUE., do_virt=.FALSE.)
CALL contract_to_self_energy(t_3c_O_all, t_greens_fct_virt, t_3c_O_W, &
mat_self_energy_ao_ao_pos_tau, &
bounds_ao_ao_j, bounds_RI_i, unit_nr_prv, &
do_occ=.FALSE., do_virt=.TRUE.)
eps_filter, do_occ=.FALSE., do_virt=.TRUE.)
END DO ! j_mem
@ -4978,23 +4985,12 @@ CONTAINS
IF (count_ev_sc_GW == 1 .AND. count_sc_GW0 == 1) THEN
IF (.NOT. do_ri_Sigma_x) THEN
CALL mp_sync(para_env%group)
CALL trafo_to_mo_and_kpoints(qs_env, qs_env%mp2_env%ri_g0w0%mat_exchange_for_kp_from_gamma(1)%matrix, &
vec_Sigma_x_gw(homo - gw_corr_lev_occ + 1:homo + gw_corr_lev_virt, :), &
homo, gw_corr_lev_occ, gw_corr_lev_virt)
CALL dbcsr_release(qs_env%mp2_env%ri_g0w0%mat_exchange_for_kp_from_gamma(1)%matrix)
DEALLOCATE (qs_env%mp2_env%ri_g0w0%mat_exchange_for_kp_from_gamma(1)%matrix)
DEALLOCATE (qs_env%mp2_env%ri_g0w0%mat_exchange_for_kp_from_gamma)
END IF
CALL compute_minus_vxc_kpoints(qs_env)
mp2_env%ri_g0w0%vec_Sigma_x_minus_vxc_gw(:, ispin, :) = mp2_env%ri_g0w0%vec_Sigma_x_minus_vxc_gw(:, ispin, :) + &
vec_Sigma_x_gw(:, :)
IF (do_ri_Sigma_x) THEN
mp2_env%ri_g0w0%vec_Sigma_x_minus_vxc_gw(:, ispin, :) = mp2_env%ri_g0w0%vec_Sigma_x_minus_vxc_gw(:, ispin, :) + &
vec_Sigma_x_gw(:, :)
END IF
END IF
@ -5066,12 +5062,13 @@ CONTAINS
CHARACTER(LEN=*), PARAMETER :: routineN = 'compute_minus_vxc_kpoints'
INTEGER :: handle, ikp, nkp_Sigma, nmo
REAL(KIND=dp), ALLOCATABLE, DIMENSION(:) :: diag_vxc
REAL(KIND=dp), ALLOCATABLE, DIMENSION(:) :: diag_Sigma_x_minus_vxc_mo_mo
TYPE(cp_cfm_type), POINTER :: cfm_mo_coeff, ks_mat_ao_ao, &
ks_mat_no_xc_ao_ao, vxc_ao_ao, &
vxc_ao_mo, vxc_mo_mo
TYPE(cp_fm_struct_type), POINTER :: matrix_struct
TYPE(cp_fm_type), POINTER :: fm_tmp_im, fm_tmp_re, fm_vxc_mo_mo
TYPE(cp_fm_type), POINTER :: fm_Sigma_x_minus_vxc_mo_mo, fm_tmp_im, &
fm_tmp_re
TYPE(cp_para_env_type), POINTER :: para_env
TYPE(kpoint_type), POINTER :: kpoints_Sigma, kpoints_Sigma_no_xc
@ -5087,7 +5084,7 @@ CONTAINS
matrix_struct => kpoints_Sigma%kp_env(1)%kpoint_env%wmat(1, 1)%matrix%matrix_struct
NULLIFY (ks_mat_ao_ao, ks_mat_no_xc_ao_ao, vxc_ao_ao, vxc_ao_mo, vxc_mo_mo, cfm_mo_coeff, fm_vxc_mo_mo, &
NULLIFY (ks_mat_ao_ao, ks_mat_no_xc_ao_ao, vxc_ao_ao, vxc_ao_mo, vxc_mo_mo, cfm_mo_coeff, fm_Sigma_x_minus_vxc_mo_mo, &
fm_tmp_re, fm_tmp_im)
CALL cp_cfm_create(ks_mat_ao_ao, matrix_struct)
CALL cp_cfm_create(ks_mat_no_xc_ao_ao, matrix_struct)
@ -5095,12 +5092,12 @@ CONTAINS
CALL cp_cfm_create(vxc_ao_mo, matrix_struct)
CALL cp_cfm_create(vxc_mo_mo, matrix_struct)
CALL cp_cfm_create(cfm_mo_coeff, matrix_struct)
CALL cp_fm_create(fm_vxc_mo_mo, matrix_struct)
CALL cp_fm_create(fm_Sigma_x_minus_vxc_mo_mo, matrix_struct)
CALL cp_fm_create(fm_tmp_re, matrix_struct)
CALL cp_fm_create(fm_tmp_im, matrix_struct)
CALL cp_cfm_get_info(cfm_mo_coeff, nrow_global=nmo)
ALLOCATE (diag_vxc(nmo))
ALLOCATE (diag_Sigma_x_minus_vxc_mo_mo(nmo))
DEALLOCATE (qs_env%mp2_env%ri_g0w0%vec_Sigma_x_minus_vxc_gw)
@ -5119,19 +5116,22 @@ CONTAINS
CALL cp_fm_copy_general(kpoints_Sigma_no_xc%kp_env(ikp)%kpoint_env%wmat(1, 1)%matrix, fm_tmp_re, para_env)
CALL cp_fm_copy_general(kpoints_Sigma_no_xc%kp_env(ikp)%kpoint_env%wmat(2, 1)%matrix, fm_tmp_im, para_env)
CALL cp_fm_to_cfm(fm_tmp_re, fm_tmp_im, ks_mat_no_xc_ao_ao)
CALL cp_fm_to_cfm(fm_tmp_re, fm_tmp_im, vxc_ao_ao)
CALL cp_cfm_scale_and_add(z_one, ks_mat_ao_ao, -z_one, ks_mat_no_xc_ao_ao)
CALL cp_cfm_to_cfm(ks_mat_ao_ao, vxc_ao_ao)
! CALL cp_fm_to_cfm(fm_tmp_re, fm_tmp_im, ks_mat_no_xc_ao_ao)
! CALL cp_cfm_scale_and_add(z_one, ks_mat_ao_ao, -z_one, ks_mat_no_xc_ao_ao)
! CALL cp_cfm_to_cfm(ks_mat_ao_ao, vxc_ao_ao)
CALL cp_cfm_gemm('N', 'N', nmo, nmo, nmo, z_one, vxc_ao_ao, cfm_mo_coeff, z_zero, vxc_ao_mo)
CALL cp_cfm_gemm('C', 'N', nmo, nmo, nmo, z_one, cfm_mo_coeff, vxc_ao_mo, z_zero, vxc_mo_mo)
CALL cp_cfm_to_fm(vxc_mo_mo, fm_vxc_mo_mo)
CALL cp_cfm_to_fm(vxc_mo_mo, fm_Sigma_x_minus_vxc_mo_mo)
CALL cp_fm_get_diag(fm_vxc_mo_mo, diag_vxc)
CALL cp_fm_get_diag(fm_Sigma_x_minus_vxc_mo_mo, diag_Sigma_x_minus_vxc_mo_mo)
qs_env%mp2_env%ri_g0w0%vec_Sigma_x_minus_vxc_gw(:, 1, ikp) = -diag_vxc(:)
! qs_env%mp2_env%ri_g0w0%vec_Sigma_x_minus_vxc_gw(:, 1, ikp) = -diag_Sigma_x_minus_vxc_mo_mo(:)
qs_env%mp2_env%ri_g0w0%vec_Sigma_x_minus_vxc_gw(:, 1, ikp) = diag_Sigma_x_minus_vxc_mo_mo(:)
END DO
@ -5141,11 +5141,11 @@ CONTAINS
CALL cp_cfm_release(vxc_ao_mo)
CALL cp_cfm_release(vxc_mo_mo)
CALL cp_cfm_release(cfm_mo_coeff)
CALL cp_fm_release(fm_vxc_mo_mo)
CALL cp_fm_release(fm_Sigma_x_minus_vxc_mo_mo)
CALL cp_fm_release(fm_tmp_re)
CALL cp_fm_release(fm_tmp_im)
DEALLOCATE (diag_vxc)
DEALLOCATE (diag_Sigma_x_minus_vxc_mo_mo)
CALL timestop(handle)
@ -5335,18 +5335,20 @@ CONTAINS
!> \param bounds_ao_ao_j ...
!> \param bounds_RI_i ...
!> \param unit_nr ...
!> \param eps_filter ...
!> \param do_occ ...
!> \param do_virt ...
! **************************************************************************************************
SUBROUTINE contract_to_self_energy(t_3c_O_all, t_greens_fct, t_3c_O_W, &
mat_self_energy_ao_ao, bounds_ao_ao_j, bounds_RI_i, &
unit_nr, do_occ, do_virt)
unit_nr, eps_filter, do_occ, do_virt)
TYPE(dbt_type) :: t_3c_O_all, t_greens_fct, t_3c_O_W
TYPE(dbcsr_type), TARGET :: mat_self_energy_ao_ao
INTEGER, DIMENSION(2, 2) :: bounds_ao_ao_j
INTEGER, DIMENSION(2, 1) :: bounds_RI_i
INTEGER :: unit_nr
REAL(KIND=dp) :: eps_filter
LOGICAL :: do_occ, do_virt
CHARACTER(LEN=*), PARAMETER :: routineN = 'contract_to_self_energy'
@ -5375,6 +5377,7 @@ CONTAINS
contract_2=[3], notcontract_2=[1, 2], &
map_1=[3], map_2=[1, 2], &
bounds_2=bounds_ao_j, &
filter_eps=eps_filter, &
unit_nr=unit_nr)
CALL dbt_copy(t_3c_O_G_tmp, t_3c_O_G, order=[1, 3, 2], move_data=.TRUE.)
@ -5391,6 +5394,7 @@ CONTAINS
contract_2=[1, 2], notcontract_2=[3], &
map_1=[1], map_2=[2], &
bounds_1=bounds_RI_i_ao_j, &
filter_eps=eps_filter, &
unit_nr=unit_nr)
CALL dbt_copy(t_self_energy, t_self_energy_tmp)

View file

@ -121,18 +121,19 @@ CONTAINS
CHARACTER(LEN=40) :: line
INTEGER :: dimen, gw_corr_lev_occ, gw_corr_lev_tot, gw_corr_lev_virt, handle, homo, i_img, &
ikp, irep, ispin, iunit, myfun, myfun_aux, myfun_prim, n_level_gw, n_level_gw_ref, &
n_rep_hf, nkp, nkp_Sigma, nmo, ns, nspins, print_exx, virtual
n_rep_hf, nkp, nkp_Sigma, nmo, ns, nspins, print_exx
LOGICAL :: charge_constrain_tmp, do_admm_rpa, do_hfx, do_kpoints_cubic_RPA, &
do_kpoints_from_Gamma, do_ri_Sigma_x, really_read_line
REAL(KIND=dp) :: E_GAP_GW, E_HOMO_GW, E_LUMO_GW, eh1, ehfx, eigval_dft, eigval_hf_at_dft, &
energy_exc, energy_exc1, energy_exc1_aux_fit, energy_exc_aux_fit, energy_total, &
exx_minus_vxc, hfx_fraction, t1, t2, tmp
exx_minus_vxc, hfx_fraction, min_direct_HF_at_DFT_gap, t1, t2, tmp
REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :) :: Eigenval_kp_HF_at_DFT, vec_Sigma_x
REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :, :) :: Eigenval_kp, vec_Sigma_x_minus_vxc_gw, &
vec_Sigma_x_minus_vxc_gw_im
TYPE(admm_type), POINTER :: admm_env
TYPE(cp_fm_type), POINTER :: mo_coeff
TYPE(cp_para_env_type), POINTER :: para_env
TYPE(dbcsr_p_type), ALLOCATABLE, DIMENSION(:) :: mat_exchange_for_kp_from_gamma
TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_ks, matrix_ks_aux_fit, &
matrix_ks_aux_fit_hfx, rho_ao
TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_ks_2d, matrix_ks_kp_im, &
@ -159,7 +160,8 @@ CONTAINS
do_admm_rpa = mp2_env%ri_rpa%do_admm
do_ri_Sigma_x = mp2_env%ri_g0w0%do_ri_Sigma_x
do_kpoints_cubic_RPA = qs_env%mp2_env%ri_rpa_im_time%do_im_time_kpoints
do_kpoints_from_Gamma = SUM(qs_env%mp2_env%ri_rpa_im_time%kp_grid) > 0
do_kpoints_from_Gamma = qs_env%mp2_env%ri_rpa_im_time%do_kpoints_from_Gamma
print_exx = mp2_env%ri_g0w0%print_exx
IF (do_kpoints_cubic_RPA) THEN
CPASSERT(do_ri_Sigma_x)
@ -187,6 +189,8 @@ CONTAINS
CPASSERT(admm_env%purification_method == do_admm_purify_none)
CPASSERT(dft_control%admm_control%method == do_admm_basis_projection)
nkp = 1
ELSE
IF (do_kpoints_cubic_RPA) THEN
@ -235,6 +239,22 @@ CONTAINS
END DO
END IF
! safe ks matrix for later: we will transform matrix_ks
! to T-cell index and then to k-points for band structure calculation
IF (do_kpoints_from_Gamma) THEN
! not yet there: open shell
ALLOCATE (qs_env%mp2_env%ri_g0w0%matrix_ks(1))
DO ispin = 1, 1
NULLIFY (qs_env%mp2_env%ri_g0w0%matrix_ks(ispin)%matrix)
ALLOCATE (qs_env%mp2_env%ri_g0w0%matrix_ks(ispin)%matrix)
CALL dbcsr_create(qs_env%mp2_env%ri_g0w0%matrix_ks(ispin)%matrix, &
template=matrix_ks(ispin)%matrix)
CALL dbcsr_desymmetrize(matrix_ks(1)%matrix, &
qs_env%mp2_env%ri_g0w0%matrix_ks(ispin)%matrix)
END DO
END IF
IF (do_kpoints_cubic_RPA) THEN
CALL allocate_matrix_ks_kp(matrix_ks_transl, matrix_ks_kp_re, matrix_ks_kp_im, kpoints)
@ -462,20 +482,21 @@ CONTAINS
END IF
END DO
IF (do_kpoints_from_Gamma) THEN
! not yet there: open shell
ALLOCATE (qs_env%mp2_env%ri_g0w0%mat_exchange_for_kp_from_gamma(1))
IF (do_kpoints_from_Gamma .AND. print_exx == gw_print_exx) THEN
! JW not yet there: open shell
ALLOCATE (mat_exchange_for_kp_from_gamma(1))
DO ispin = 1, 1
NULLIFY (qs_env%mp2_env%ri_g0w0%mat_exchange_for_kp_from_gamma(ispin)%matrix)
ALLOCATE (qs_env%mp2_env%ri_g0w0%mat_exchange_for_kp_from_gamma(ispin)%matrix)
CALL dbcsr_create(qs_env%mp2_env%ri_g0w0%mat_exchange_for_kp_from_gamma(ispin)%matrix, &
template=matrix_ks(ispin)%matrix)
CALL dbcsr_desymmetrize(matrix_ks(ispin)%matrix, &
qs_env%mp2_env%ri_g0w0%mat_exchange_for_kp_from_gamma(ispin)%matrix)
NULLIFY (mat_exchange_for_kp_from_gamma(ispin)%matrix)
ALLOCATE (mat_exchange_for_kp_from_gamma(ispin)%matrix)
CALL dbcsr_create(mat_exchange_for_kp_from_gamma(ispin)%matrix, template=matrix_ks(ispin)%matrix)
CALL dbcsr_desymmetrize(matrix_ks(ispin)%matrix, mat_exchange_for_kp_from_gamma(ispin)%matrix)
END DO
END IF
END IF
energy_ex = ehfx
! transform Fock-Matrix (calculated in integrate_four_center, written in matrix_ks_aux_fit in case
@ -488,6 +509,23 @@ CONTAINS
CALL dbcsr_add(matrix_sigma_x_minus_vxc(ispin, 1)%matrix, matrix_ks(ispin)%matrix, 1.0_dp, 1.0_dp)
END DO
! safe matrix_sigma_x_minus_vxc for later: for example, we will transform matrix_sigma_x_minus_vxc
! to T-cell index and then to k-points for band structure calculation
IF (do_kpoints_from_Gamma) THEN
! not yet there: open shell
ALLOCATE (qs_env%mp2_env%ri_g0w0%matrix_sigma_x_minus_vxc(1))
DO ispin = 1, 1
NULLIFY (qs_env%mp2_env%ri_g0w0%matrix_sigma_x_minus_vxc(ispin)%matrix)
ALLOCATE (qs_env%mp2_env%ri_g0w0%matrix_sigma_x_minus_vxc(ispin)%matrix)
CALL dbcsr_create(qs_env%mp2_env%ri_g0w0%matrix_sigma_x_minus_vxc(ispin)%matrix, &
template=matrix_ks(ispin)%matrix)
CALL dbcsr_desymmetrize(matrix_sigma_x_minus_vxc(ispin, 1)%matrix, &
qs_env%mp2_env%ri_g0w0%matrix_sigma_x_minus_vxc(ispin)%matrix)
END DO
END IF
CALL dbcsr_desymmetrize(matrix_ks(1)%matrix, mo_coeff_b)
CALL dbcsr_set(mo_coeff_b, 0.0_dp)
@ -579,23 +617,22 @@ CONTAINS
ALLOCATE (mp2_env%ri_g0w0%vec_Sigma_x_minus_vxc_gw(nmo, nspins, nkp))
print_exx = mp2_env%ri_g0w0%print_exx
IF (print_exx == gw_print_exx) THEN
IF (do_kpoints_from_Gamma) THEN
gw_corr_lev_tot = gw_corr_lev_occ + gw_corr_lev_virt
virtual = nmo - homo
CALL get_qs_env(qs_env=qs_env, &
kpoints=kpoints)
CALL setup_abs_cutoffs_chi_and_trunc_coulomb_potential(qs_env)
CALL compute_kpoints(qs_env, kpoints, unit_nr)
ALLOCATE (Eigenval_kp(nmo, 1, nspins))
CALL get_bandstruc_and_k_dependent_MOs(qs_env, kpoints, virtual, Eigenval_kp)
CALL get_bandstruc_and_k_dependent_MOs(qs_env, kpoints, Eigenval_kp)
CALL compute_minus_vxc_kpoints(qs_env)
@ -604,13 +641,15 @@ CONTAINS
ALLOCATE (vec_Sigma_x(nmo, nkp_Sigma))
vec_Sigma_x(:, :) = 0.0_dp
CALL setup_abs_cutoffs_chi_and_trunc_coulomb_potential(qs_env)
CALL trafo_to_mo_and_kpoints(qs_env, &
qs_env%mp2_env%ri_g0w0%mat_exchange_for_kp_from_gamma(1)%matrix, &
mat_exchange_for_kp_from_gamma(1)%matrix, &
vec_Sigma_x(homo - gw_corr_lev_occ + 1:homo + gw_corr_lev_virt, :), &
homo, gw_corr_lev_occ, gw_corr_lev_virt)
CALL dbcsr_release(mat_exchange_for_kp_from_gamma(1)%matrix)
DEALLOCATE (mat_exchange_for_kp_from_gamma(1)%matrix)
DEALLOCATE (mat_exchange_for_kp_from_gamma)
DEALLOCATE (vec_Sigma_x_minus_vxc_gw)
ALLOCATE (vec_Sigma_x_minus_vxc_gw(nmo, nspins, nkp_Sigma))
@ -631,6 +670,8 @@ CONTAINS
ALLOCATE (Eigenval_kp_HF_at_DFT(nmo, nkp_Sigma))
Eigenval_kp_HF_at_DFT(:, :) = Eigenval_kp(:, :, 1) + vec_Sigma_x_minus_vxc_gw(:, 1, :)
min_direct_HF_at_DFT_gap = 100.0_dp
WRITE (unit_nr, '(T3,A)') ''
WRITE (unit_nr, '(T3,A)') 'Exchange energies'
WRITE (unit_nr, '(T3,A)') '-----------------'
@ -665,21 +706,29 @@ CONTAINS
E_HOMO_GW = MAXVAL(Eigenval_kp_HF_at_DFT(homo - gw_corr_lev_occ + 1:homo, ikp))
E_LUMO_GW = MINVAL(Eigenval_kp_HF_at_DFT(homo + 1:homo + gw_corr_lev_virt, ikp))
E_GAP_GW = E_LUMO_GW - E_HOMO_GW
IF (E_GAP_GW < min_direct_HF_at_DFT_gap) min_direct_HF_at_DFT_gap = E_GAP_GW
WRITE (unit_nr, '(T3,A)') ''
WRITE (unit_nr, '(T3,A,F53.2)') 'HF@PBE HOMO-LUMO gap (eV)', E_GAP_GW*evolt
WRITE (unit_nr, '(T3,A,F53.2)') 'HF@DFT HOMO-LUMO gap (eV)', E_GAP_GW*evolt
WRITE (unit_nr, '(T3,A)') ''
END DO
WRITE (unit_nr, '(T3,A)') ''
WRITE (unit_nr, '(T3,A)') ''
WRITE (unit_nr, '(T3,A,F63.3)') 'HF@DFT direct bandgap (eV)', min_direct_HF_at_DFT_gap*evolt
WRITE (unit_nr, '(T3,A)') ''
WRITE (unit_nr, '(T3,A)') 'End of exchange energies'
WRITE (unit_nr, '(T3,A)') '------------------------'
WRITE (unit_nr, '(T3,A)') ''
CPABORT('Stop after printing exchange energies.')
ELSE
CALL mp_sync(para_env%group)
END IF
END IF
CALL mp_sync(para_env%group)
IF (print_exx == gw_read_exx) THEN
CALL open_file(unit_number=iunit, file_name="exx.out")

View file

@ -65,7 +65,8 @@ MODULE rpa_kpoints
CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'rpa_kpoints'
PUBLIC :: RPA_postprocessing_kp, cp_cfm_robust_cholesky, real_space_to_kpoint_transform_rpa, get_mat_cell_T_from_mat_gamma
PUBLIC :: RPA_postprocessing_kp, cp_cfm_robust_cholesky, real_space_to_kpoint_transform_rpa, get_mat_cell_T_from_mat_gamma, &
transform_P_from_real_space_to_kpoints
CONTAINS
@ -763,13 +764,15 @@ CONTAINS
WRITE (unit_nr, '(T3,A,T72,F9.2)') 'GW_INFO| Relative cutoff 2: ', &
qs_env%mp2_env%ri_rpa_im_time%rel_cutoffs_chi_W(2)
WRITE (unit_nr, '(T3,A,T72,F9.2)') 'GW_INFO| Cutoff radius 1 (Angstroem):', &
cp_unit_from_cp2k(first_cutoff, "angstrom")
cp_unit_from_cp2k(first_cutoff, "Angstrom")
WRITE (unit_nr, '(T3,A,T72,F9.2)') 'GW_INFO| Cutoff radius 2 (Angstroem):', &
cp_unit_from_cp2k(second_cutoff, "angstrom")
cp_unit_from_cp2k(second_cutoff, "Angstrom")
WRITE (unit_nr, '(T3,A,T72,F9.2)') &
'GW_INFO| If Cutoff radius 1 = Cutoff radius 2 = 0.5: minimum image convention.'
WRITE (unit_nr, '(T3,A,T66,ES15.2)') 'GW_INFO| RI regularization parameter: ', &
qs_env%mp2_env%ri_rpa_im_time%regularization_RI
WRITE (unit_nr, '(T3,A,T66,ES15.2)') 'GW_INFO| eps_eigval_S: ', &
qs_env%mp2_env%ri_rpa_im_time%eps_eigval_S
IF (qs_env%mp2_env%ri_rpa_im_time%make_chi_pos_definite) THEN
WRITE (unit_nr, '(T3,A,T81)') &
'GW_INFO| Make chi(iw,k) positive definite? TRUE'

View file

@ -15,18 +15,28 @@
!> 03.2019 Refactoring [Frederick Stein]
! **************************************************************************************************
MODULE rpa_main
USE admm_types, ONLY: admm_env_release
USE bibliography, ONLY: &
Bates2013, DelBen2013, DelBen2015, Ren2011, Ren2013, Wilhelm2016a, Wilhelm2016b, &
Wilhelm2017, Wilhelm2018, cite_reference
USE bse, ONLY: do_subspace_iterations,&
mult_B_with_W_and_fill_local_3c_arrays
USE cell_types, ONLY: cell_type,&
get_cell
USE cp_blacs_env, ONLY: cp_blacs_env_create,&
cp_blacs_env_release,&
cp_blacs_env_retain,&
cp_blacs_env_type
USE cp_cfm_types, ONLY: cp_cfm_p_type,&
USE cp_cfm_basic_linalg, ONLY: cp_cfm_scale_and_add_fm
USE cp_cfm_diag, ONLY: cp_cfm_geeig,&
cp_cfm_geeig_canon
USE cp_cfm_types, ONLY: cp_cfm_create,&
cp_cfm_p_type,&
cp_cfm_release,&
cp_cfm_to_fm,&
cp_cfm_type
USE cp_dbcsr_cp2k_link, ONLY: cp_dbcsr_alloc_block_from_nbl
USE cp_dbcsr_operations, ONLY: copy_dbcsr_to_fm
USE cp_dbcsr_operations, ONLY: copy_dbcsr_to_fm,&
dbcsr_allocate_matrix_set
USE cp_fm_basic_linalg, ONLY: cp_fm_scale_and_add
USE cp_fm_struct, ONLY: cp_fm_struct_create,&
cp_fm_struct_release,&
@ -39,12 +49,13 @@ MODULE rpa_main
cp_fm_to_fm,&
cp_fm_type
USE cp_para_env, ONLY: cp_para_env_release,&
cp_para_env_retain,&
cp_para_env_split
USE cp_para_types, ONLY: cp_para_env_type
USE dbcsr_api, ONLY: &
dbcsr_add, dbcsr_clear, dbcsr_create, dbcsr_deallocate_matrix, dbcsr_desymmetrize, &
dbcsr_get_info, dbcsr_p_type, dbcsr_release, dbcsr_reserve_all_blocks, dbcsr_set, &
dbcsr_type, dbcsr_type_antisymmetric, dbcsr_type_no_symmetry, dbcsr_type_symmetric
dbcsr_add, dbcsr_clear, dbcsr_copy, dbcsr_create, dbcsr_deallocate_matrix, &
dbcsr_desymmetrize, dbcsr_get_info, dbcsr_p_type, dbcsr_release, dbcsr_reserve_all_blocks, &
dbcsr_set, dbcsr_type, dbcsr_type_no_symmetry
USE dbt_api, ONLY: dbt_type
USE group_dist_types, ONLY: create_group_dist,&
get_group_dist,&
@ -52,14 +63,19 @@ MODULE rpa_main
maxsize,&
release_group_dist
USE hfx_types, ONLY: block_ind_type,&
hfx_compression_type
USE input_constants, ONLY: gw_gf_gamma,&
hfx_compression_type,&
hfx_release
USE input_constants, ONLY: cholesky_off,&
gw_gf_gamma,&
gw_gf_mic,&
wfc_mm_style_gemm
USE kinds, ONLY: dp,&
int_8
USE kpoint_methods, ONLY: rskp_transform
USE kpoint_methods, ONLY: kpoint_env_initialize,&
kpoint_initialize_mo_set,&
kpoint_initialize_mos
USE kpoint_types, ONLY: get_kpoint_info,&
kpoint_env_type,&
kpoint_type
USE machine, ONLY: m_flush,&
m_memory
@ -81,12 +97,11 @@ MODULE rpa_main
three_dim_real_array,&
two_dim_int_array,&
two_dim_real_array
USE qs_band_structure, ONLY: calculate_kp_orbitals
USE qs_band_structure, ONLY: calculate_kpoints_for_bs
USE qs_environment_types, ONLY: get_qs_env,&
qs_env_release,&
qs_environment_type
USE qs_gamma2kp, ONLY: create_kp_from_gamma
USE qs_neighbor_list_types, ONLY: neighbor_list_set_p_type
USE qs_mo_types, ONLY: get_mo_set
USE qs_scf_types, ONLY: qs_scf_env_type
USE rpa_axk, ONLY: compute_axk_ener
USE rpa_gw, ONLY: GW_matrix_operations,&
allocate_matrices_gw,&
@ -96,6 +111,7 @@ MODULE rpa_main
deallocate_matrices_gw_im_time
USE rpa_gw_ic, ONLY: calculate_ic_correction
USE rpa_im_time, ONLY: compute_mat_P_omega,&
init_cell_index_rpa,&
zero_mat_P_omega
USE rpa_im_time_force_methods, ONLY: calc_laplace_loop_forces,&
calc_post_loop_forces,&
@ -104,13 +120,16 @@ MODULE rpa_main
keep_initial_quad
USE rpa_im_time_force_types, ONLY: im_time_force_release,&
im_time_force_type
USE rpa_kpoints, ONLY: RPA_postprocessing_kp
USE rpa_kpoints, ONLY: RPA_postprocessing_kp,&
get_mat_cell_T_from_mat_gamma,&
real_space_to_kpoint_transform_rpa
USE rpa_util, ONLY: RPA_postprocessing_nokp,&
RPA_postprocessing_start,&
alloc_im_time,&
calc_mat_Q,&
contract_P_omega_with_mat_L,&
dealloc_im_time
USE scf_control_types, ONLY: scf_control_type
USE util, ONLY: get_limit
#include "./base/base_uses.f90"
@ -655,9 +674,9 @@ CONTAINS
END IF
do_kpoints_from_Gamma = SUM(mp2_env%ri_rpa_im_time%kp_grid) > 0
do_kpoints_from_Gamma = qs_env%mp2_env%ri_rpa_im_time%do_kpoints_from_Gamma
IF (do_kpoints_from_Gamma) THEN
CALL get_bandstruc_and_k_dependent_MOs(qs_env, kpoints, virtual(1), Eigenval_kp)
CALL get_bandstruc_and_k_dependent_MOs(qs_env, kpoints, Eigenval_kp)
END IF
! Now start the RPA calculation
@ -725,13 +744,11 @@ CONTAINS
!> \brief ...
!> \param qs_env ...
!> \param kpoints ...
!> \param virtual ...
!> \param Eigenval_kp ...
! **************************************************************************************************
SUBROUTINE get_bandstruc_and_k_dependent_MOs(qs_env, kpoints, virtual, Eigenval_kp)
SUBROUTINE get_bandstruc_and_k_dependent_MOs(qs_env, kpoints, Eigenval_kp)
TYPE(qs_environment_type), POINTER :: qs_env
TYPE(kpoint_type), POINTER :: kpoints
INTEGER :: virtual
REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :, :) :: Eigenval_kp
CHARACTER(LEN=*), PARAMETER :: routineN = 'get_bandstruc_and_k_dependent_MOs'
@ -769,7 +786,7 @@ CONTAINS
CALL get_qs_env(qs_env=qs_env, para_env=para_env)
CALL create_kp_and_calc_kp_orbitals(qs_env, qs_env%mp2_env%ri_rpa_im_time%kpoints_G, &
"MONKHORST-PACK", virtual, para_env%num_pe, &
"MONKHORST-PACK", para_env%num_pe, &
mp_grid=nkp_grid_G(1:3))
IF (qs_env%mp2_env%ri_g0w0%do_kpoints_Sigma) THEN
@ -778,11 +795,11 @@ CONTAINS
CALL get_kpgeneral_for_Sigma_kpoints(qs_env, kpgeneral)
CALL create_kp_and_calc_kp_orbitals(qs_env, qs_env%mp2_env%ri_rpa_im_time%kpoints_Sigma, &
"GENERAL", virtual, para_env%num_pe, &
"GENERAL", para_env%num_pe, &
kpgeneral=kpgeneral)
CALL create_kp_and_calc_kp_orbitals(qs_env, qs_env%mp2_env%ri_rpa_im_time%kpoints_Sigma_no_xc, &
"GENERAL", virtual, para_env%num_pe, &
"GENERAL", para_env%num_pe, &
kpgeneral=kpgeneral, with_xc_terms=.FALSE.)
kpoints_Sigma => qs_env%mp2_env%ri_rpa_im_time%kpoints_Sigma
@ -808,101 +825,270 @@ CONTAINS
END IF
CALL dbcsr_release(qs_env%mp2_env%ri_g0w0%matrix_sigma_x_minus_vxc(1)%matrix)
DEALLOCATE (qs_env%mp2_env%ri_g0w0%matrix_sigma_x_minus_vxc(1)%matrix)
DEALLOCATE (qs_env%mp2_env%ri_g0w0%matrix_sigma_x_minus_vxc)
CALL dbcsr_release(qs_env%mp2_env%ri_g0w0%matrix_ks(1)%matrix)
DEALLOCATE (qs_env%mp2_env%ri_g0w0%matrix_ks(1)%matrix)
DEALLOCATE (qs_env%mp2_env%ri_g0w0%matrix_ks)
CALL release_hfx_admm_stuff(qs_env)
CALL timestop(handle)
END SUBROUTINE get_bandstruc_and_k_dependent_MOs
! **************************************************************************************************
!> \brief releases part of the given qs_env in order to save memory
!> \param qs_env the object to release
! **************************************************************************************************
SUBROUTINE release_hfx_admm_stuff(qs_env)
TYPE(qs_environment_type), POINTER :: qs_env
IF (ASSOCIATED(qs_env%x_data) .AND. .NOT. qs_env%mp2_env%ri_g0w0%do_ri_Sigma_x) THEN
CALL hfx_release(qs_env%x_data)
END IF
IF (ASSOCIATED(qs_env%admm_env)) THEN
CALL admm_env_release(qs_env%admm_env)
END IF
END SUBROUTINE release_hfx_admm_stuff
! **************************************************************************************************
!> \brief ...
!> \param qs_env ...
!> \param kpoints ...
!> \param scheme ...
!> \param nadd ...
!> \param group_size_ext ...
!> \param mp_grid ...
!> \param kpgeneral ...
!> \param with_xc_terms ...
! **************************************************************************************************
SUBROUTINE create_kp_and_calc_kp_orbitals(qs_env, kpoints, scheme, nadd, &
SUBROUTINE create_kp_and_calc_kp_orbitals(qs_env, kpoints, scheme, &
group_size_ext, mp_grid, kpgeneral, with_xc_terms)
TYPE(qs_environment_type), POINTER :: qs_env
TYPE(kpoint_type), POINTER :: kpoints
CHARACTER(LEN=*), INTENT(IN) :: scheme
INTEGER :: nadd, group_size_ext
INTEGER :: group_size_ext
INTEGER, DIMENSION(3), INTENT(IN), OPTIONAL :: mp_grid
REAL(KIND=dp), DIMENSION(:, :), INTENT(IN), &
OPTIONAL :: kpgeneral
LOGICAL, OPTIONAL :: with_xc_terms
CHARACTER(LEN=*), PARAMETER :: routineN = 'create_kp_and_calc_kp_orbitals'
COMPLEX(KIND=dp), PARAMETER :: cone = CMPLX(1.0_dp, 0.0_dp, KIND=dp), &
czero = CMPLX(0.0_dp, 0.0_dp, KIND=dp), ione = CMPLX(0.0_dp, 1.0_dp, KIND=dp)
INTEGER :: handle, ikp, nkp
INTEGER, DIMENSION(:, :, :), POINTER :: cell_to_index
INTEGER :: handle, i_dim, i_re_im, ikp, nkp
INTEGER, DIMENSION(3) :: cell_grid, periodic
LOGICAL :: my_with_xc_terms
REAL(KIND=dp), DIMENSION(:, :), POINTER :: xkp
TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_ks_kp
TYPE(dbcsr_type), POINTER :: cmat, rmat, tmpmat
TYPE(neighbor_list_set_p_type), DIMENSION(:), &
POINTER :: sab_nl
TYPE(qs_environment_type), POINTER :: qs_env_kp_from_Gamma
REAL(KIND=dp), DIMENSION(:), POINTER :: eigenvalues
TYPE(cell_type), POINTER :: cell
TYPE(cp_blacs_env_type), POINTER :: blacs_env
TYPE(cp_cfm_type), POINTER :: cksmat, cmos, csmat, cwork
TYPE(cp_fm_struct_type), POINTER :: matrix_struct
TYPE(cp_fm_type), POINTER :: fm_work, imos, rmos
TYPE(cp_para_env_type), POINTER :: para_env
TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_s, matrix_s_desymm
TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: mat_ks_kp, mat_s_kp
TYPE(kpoint_env_type), POINTER :: kp
TYPE(qs_scf_env_type), POINTER :: scf_env
TYPE(scf_control_type), POINTER :: scf_control
CALL timeset(routineN, handle)
NULLIFY (qs_env_kp_from_Gamma)
my_with_xc_terms = .TRUE.
IF (PRESENT(with_xc_terms)) my_with_xc_terms = with_xc_terms
CALL create_kp_from_gamma(qs_env, qs_env_kp_from_Gamma, with_xc_terms=my_with_xc_terms)
CALL get_qs_env(qs_env, &
para_env=para_env, &
blacs_env=blacs_env, &
matrix_s=matrix_s, &
scf_env=scf_env, &
scf_control=scf_control, &
cell=cell)
! k-dep. MO coeff. and band structure for Green's function
CALL calculate_kp_orbitals(qs_env_kp_from_Gamma, kpoints, scheme, nadd=nadd, kpgeneral=kpgeneral, &
mp_grid=mp_grid, group_size_ext=group_size_ext)
! get kpoints
CALL calculate_kpoints_for_bs(kpoints, scheme, kpgeneral=kpgeneral, mp_grid=mp_grid, &
group_size_ext=group_size_ext)
! Save k-dependent KS-matrix into wmatrix of kpoints
CALL get_qs_env(qs_env_kp_from_Gamma, matrix_ks_kp=matrix_ks_kp)
kpoints%para_env => para_env
CALL cp_para_env_retain(para_env)
kpoints%blacs_env_all => blacs_env
CALL cp_blacs_env_retain(blacs_env)
CALL kpoint_env_initialize(kpoints)
NULLIFY (xkp, sab_nl, cell_to_index)
CALL get_kpoint_info(kpoints, nkp=nkp, xkp=xkp, sab_nl=sab_nl, cell_to_index=cell_to_index)
! calculate all MOs that are accessible in the given
! Gaussian AO basis, therefore nadd=1E10
CALL kpoint_initialize_mos(kpoints, qs_env%mos, 2000000000)
CALL kpoint_initialize_mo_set(kpoints)
ALLOCATE (rmat, cmat, tmpmat)
CALL dbcsr_create(rmat, template=matrix_ks_kp(1, 1)%matrix, matrix_type=dbcsr_type_symmetric)
CALL dbcsr_create(cmat, template=matrix_ks_kp(1, 1)%matrix, matrix_type=dbcsr_type_antisymmetric)
CALL dbcsr_create(tmpmat, template=matrix_ks_kp(1, 1)%matrix, matrix_type=dbcsr_type_no_symmetry)
CALL cp_dbcsr_alloc_block_from_nbl(rmat, sab_nl)
CALL cp_dbcsr_alloc_block_from_nbl(cmat, sab_nl)
CALL dbcsr_reserve_all_blocks(tmpmat)
CALL get_cell(cell=cell, periodic=periodic)
DO i_dim = 1, 3
! we have at most 3 neigboring cells per dimension and at least one because
! the density response at Gamma is only divided to neighboring
IF (periodic(i_dim) == 1) THEN
cell_grid(i_dim) = MAX(MIN((kpoints%nkp_grid(i_dim)/2)*2 - 1, 1), 3)
ELSE
cell_grid(i_dim) = 1
END IF
END DO
CALL init_cell_index_rpa(cell_grid, kpoints%cell_to_index, kpoints%index_to_cell, cell)
! get H(k)
IF (my_with_xc_terms) THEN
CALL mat_kp_from_mat_gamma(qs_env, mat_ks_kp, qs_env%mp2_env%ri_g0w0%matrix_ks(1)%matrix, kpoints)
ELSE
CALL mat_kp_from_mat_gamma(qs_env, mat_ks_kp, qs_env%mp2_env%ri_g0w0%matrix_sigma_x_minus_vxc(1)%matrix, kpoints)
END IF
! get S(k)
CALL get_qs_env(qs_env, matrix_s=matrix_s, scf_env=scf_env, scf_control=scf_control)
NULLIFY (matrix_s_desymm)
CALL dbcsr_allocate_matrix_set(matrix_s_desymm, 1)
ALLOCATE (matrix_s_desymm(1)%matrix)
CALL dbcsr_create(matrix=matrix_s_desymm(1)%matrix, template=matrix_s(1)%matrix, &
matrix_type=dbcsr_type_no_symmetry)
CALL dbcsr_desymmetrize(matrix_s(1)%matrix, matrix_s_desymm(1)%matrix)
CALL mat_kp_from_mat_gamma(qs_env, mat_s_kp, matrix_s_desymm(1)%matrix, kpoints)
CALL get_kpoint_info(kpoints, nkp=nkp)
matrix_struct => kpoints%kp_env(1)%kpoint_env%wmat(1, 1)%matrix%matrix_struct
CALL cp_cfm_create(cksmat, matrix_struct)
CALL cp_cfm_create(csmat, matrix_struct)
CALL cp_cfm_create(cmos, matrix_struct)
CALL cp_cfm_create(cwork, matrix_struct)
CALL cp_fm_create(fm_work, matrix_struct)
DO ikp = 1, nkp
CALL dbcsr_set(rmat, 0.0_dp)
CALL dbcsr_set(cmat, 0.0_dp)
CALL copy_dbcsr_to_fm(mat_ks_kp(ikp, 1)%matrix, kpoints%kp_env(ikp)%kpoint_env%wmat(1, 1)%matrix)
CALL cp_cfm_scale_and_add_fm(czero, cksmat, cone, kpoints%kp_env(ikp)%kpoint_env%wmat(1, 1)%matrix)
! trafo matrix_ks from real space to k-space and write into wmat
CALL rskp_transform(rmatrix=rmat, cmatrix=cmat, &
rsmat=matrix_ks_kp, ispin=1, xkp=xkp(1:3, ikp), &
cell_to_index=cell_to_index, sab_nl=sab_nl)
CALL copy_dbcsr_to_fm(mat_ks_kp(ikp, 2)%matrix, kpoints%kp_env(ikp)%kpoint_env%wmat(2, 1)%matrix)
CALL cp_cfm_scale_and_add_fm(cone, cksmat, ione, kpoints%kp_env(ikp)%kpoint_env%wmat(2, 1)%matrix)
CALL dbcsr_set(tmpmat, 0.0_dp)
CALL dbcsr_desymmetrize(rmat, tmpmat)
CALL copy_dbcsr_to_fm(mat_s_kp(ikp, 1)%matrix, fm_work)
CALL cp_cfm_scale_and_add_fm(czero, csmat, cone, fm_work)
CALL cp_fm_set_all(kpoints%kp_env(ikp)%kpoint_env%wmat(1, 1)%matrix, 0.0_dp)
CALL copy_dbcsr_to_fm(tmpmat, kpoints%kp_env(ikp)%kpoint_env%wmat(1, 1)%matrix)
CALL copy_dbcsr_to_fm(mat_s_kp(ikp, 2)%matrix, fm_work)
CALL cp_cfm_scale_and_add_fm(cone, csmat, ione, fm_work)
CALL dbcsr_set(tmpmat, 0.0_dp)
CALL dbcsr_desymmetrize(cmat, tmpmat)
kp => kpoints%kp_env(ikp)%kpoint_env
CALL cp_fm_set_all(kpoints%kp_env(ikp)%kpoint_env%wmat(2, 1)%matrix, 0.0_dp)
CALL copy_dbcsr_to_fm(tmpmat, kpoints%kp_env(ikp)%kpoint_env%wmat(2, 1)%matrix)
CALL get_mo_set(kp%mos(1, 1)%mo_set, mo_coeff=rmos, eigenvalues=eigenvalues)
CALL get_mo_set(kp%mos(2, 1)%mo_set, mo_coeff=imos)
IF (scf_env%cholesky_method == cholesky_off) THEN
CALL cp_cfm_geeig_canon(cksmat, csmat, cmos, eigenvalues, cwork, scf_control%eps_eigval)
ELSE
CALL cp_cfm_geeig(cksmat, csmat, cmos, eigenvalues, cwork)
END IF
CALL cp_cfm_to_fm(cmos, rmos, imos)
kp%mos(2, 1)%mo_set%eigenvalues = eigenvalues
END DO
CALL qs_env_release(qs_env_kp_from_Gamma)
DO ikp = 1, nkp
DO i_re_im = 1, 2
CALL dbcsr_deallocate_matrix(mat_ks_kp(ikp, i_re_im)%matrix)
END DO
END DO
DEALLOCATE (mat_ks_kp)
CALL dbcsr_deallocate_matrix(rmat)
CALL dbcsr_deallocate_matrix(cmat)
CALL dbcsr_deallocate_matrix(tmpmat)
DO ikp = 1, nkp
DO i_re_im = 1, 2
CALL dbcsr_deallocate_matrix(mat_s_kp(ikp, i_re_im)%matrix)
END DO
END DO
DEALLOCATE (mat_s_kp)
CALL dbcsr_deallocate_matrix(matrix_s_desymm(1)%matrix)
DEALLOCATE (matrix_s_desymm)
CALL cp_cfm_release(cksmat)
CALL cp_cfm_release(csmat)
CALL cp_cfm_release(cwork)
CALL cp_cfm_release(cmos)
CALL cp_fm_release(fm_work)
CALL timestop(handle)
END SUBROUTINE create_kp_and_calc_kp_orbitals
! **************************************************************************************************
!> \brief ...
!> \param qs_env ...
!> \param mat_kp ...
!> \param mat_gamma ...
!> \param kpoints ...
! **************************************************************************************************
SUBROUTINE mat_kp_from_mat_gamma(qs_env, mat_kp, mat_gamma, kpoints)
TYPE(qs_environment_type), POINTER :: qs_env
TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: mat_kp
TYPE(dbcsr_type) :: mat_gamma
TYPE(kpoint_type), POINTER :: kpoints
CHARACTER(LEN=*), PARAMETER :: routineN = 'mat_kp_from_mat_gamma'
INTEGER :: handle, i_cell, i_re_im, ikp, nkp, &
num_cells
INTEGER, DIMENSION(3) :: periodic
INTEGER, DIMENSION(:, :, :), POINTER :: cell_to_index
REAL(KIND=dp), DIMENSION(:, :), POINTER :: xkp
TYPE(cell_type), POINTER :: cell
TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: mat_real_space
CALL timeset(routineN, handle)
CALL get_qs_env(qs_env, cell=cell)
CALL get_cell(cell=cell, periodic=periodic)
num_cells = 3**(periodic(1) + periodic(2) + periodic(3))
NULLIFY (mat_real_space)
CALL dbcsr_allocate_matrix_set(mat_real_space, num_cells)
DO i_cell = 1, num_cells
ALLOCATE (mat_real_space(i_cell)%matrix)
CALL dbcsr_create(matrix=mat_real_space(i_cell)%matrix, &
template=mat_gamma)
CALL dbcsr_reserve_all_blocks(mat_real_space(i_cell)%matrix)
CALL dbcsr_set(mat_real_space(i_cell)%matrix, 0.0_dp)
END DO
CALL dbcsr_copy(mat_real_space(1)%matrix, mat_gamma)
CALL get_mat_cell_T_from_mat_gamma(mat_real_space, qs_env, kpoints, 2, 0)
NULLIFY (xkp, cell_to_index)
CALL get_kpoint_info(kpoints, nkp=nkp, xkp=xkp, cell_to_index=cell_to_index)
NULLIFY (mat_kp)
CALL dbcsr_allocate_matrix_set(mat_kp, nkp, 2)
DO ikp = 1, nkp
DO i_re_im = 1, 2
ALLOCATE (mat_kp(ikp, i_re_im)%matrix)
CALL dbcsr_create(matrix=mat_kp(ikp, i_re_im)%matrix, template=mat_gamma)
CALL dbcsr_reserve_all_blocks(mat_kp(ikp, i_re_im)%matrix)
CALL dbcsr_set(mat_kp(ikp, i_re_im)%matrix, 0.0_dp)
END DO
END DO
CALL real_space_to_kpoint_transform_rpa(mat_kp(:, 1), mat_kp(:, 2), mat_real_space, kpoints, 0.0_dp)
DO i_cell = 1, num_cells
CALL dbcsr_deallocate_matrix(mat_real_space(i_cell)%matrix)
END DO
DEALLOCATE (mat_real_space)
CALL timestop(handle)

View file

@ -3232,7 +3232,7 @@ CONTAINS
maxso=maxso, npgf=npgf, nset=nset, zet=zet)
! Separate the functions into purely r and purely angular parts, compute them all
! and use matrix mutliplication for the integral. We use f for x derivative ang g for y
! and use matrix mutliplication for the integral. We use f for x derivative and g for y
! Separating the functions. Note that the radial part is the same for x and y derivatives
ALLOCATE (a1(na, nset*maxso, 3), a2(na, nset*maxso, 3))

View file

@ -7,8 +7,5 @@ scGW0_and_evGW_H2O_PBE0_trunc_minimax.inp 11 1e-08 -
scGW0_H2O_PBE0_trunc_minimax_RI_HFX.inp 11 1e-08 -13.191093644224157
G0W0_H2O_PBE_periodic.inp 78 1e-05 16.475
G0W0_OH_PBE.inp 79 1e-05 11.797
G0W0_kpoints_from_Gamma.inp 78 1e-05 14.306
G0W0_kpoints_from_Gamma_RI_regularization_1E-3.inp 78 1e-05 14.682
G0W0_OH_PBE_svd.inp 79 1e-05 11.797
G0W0_kpoints_in_self_energy.inp 98 1e-05 12.091
#EOF

View file

@ -0,0 +1,105 @@
&GLOBAL
PROJECT G0W0_kpoints_from_Gamma
PRINT_LEVEL MEDIUM
RUN_TYPE ENERGY
&TIMINGS
THRESHOLD 0.01
&END
&END GLOBAL
&FORCE_EVAL
METHOD Quickstep
&DFT
BASIS_SET_FILE_NAME HFX_BASIS
SORT_BASIS EXP
POTENTIAL_FILE_NAME GTH_POTENTIALS
&MGRID
CUTOFF 100
REL_CUTOFF 20
&END MGRID
&QS
METHOD GPW
EPS_DEFAULT 1.0E-15
EPS_PGF_ORB 1.0E-15
&END QS
&SCF
SCF_GUESS RESTART
EPS_SCF 1.0E-5
MAX_SCF 100
&PRINT
&RESTART ON
&END
&END
ADDED_MOS -1
&END SCF
&XC
&XC_FUNCTIONAL PBE
&END XC_FUNCTIONAL
&WF_CORRELATION
&INTEGRALS
SIZE_LATTICE_SUM 3
&END INTEGRALS
&LOW_SCALING
KPOINTS 4 1 4
&END LOW_SCALING
&RI_RPA
RPA_NUM_QUAD_POINTS 6
&GW
CORR_OCC 1
CORR_VIRT 1
CROSSING_SEARCH NEWTON
ANALYTIC_CONTINUATION TWO_POLE
RI_SIGMA_X FALSE
KPOINTS_SELF_ENERGY 2 2 1
&KPOINT_SET
SPECIAL_POINT 0.5 0.0 0.0
SPECIAL_POINT 0.0 0.0 0.0
NPOINTS 3
&END
&END GW
&HF
FRACTION 1.0
&SCREENING
EPS_SCHWARZ 1.0E-6
SCREEN_ON_INITIAL_P TRUE
&END
&INTERACTION_POTENTIAL
POTENTIAL_TYPE TRUNCATED
CUTOFF_RADIUS 3.9
T_C_G_DATA t_c_g.dat
&END
&MEMORY
! In MB per MPI rank.. use as much as need to get in-core operation
MAX_MEMORY 0
EPS_STORAGE_SCALING 0.1
&END
&END
&END RI_RPA
&END
&END XC
&END DFT
&SUBSYS
&CELL
ABC [angstrom] 8.000 8.000 8.000
MULTIPLE_UNIT_CELL 1 1 1
PERIODIC XZ
&END CELL
&KIND H
BASIS_SET ORB DZVP-GTH
BASIS_SET RI_AUX RI_DZVP-GTH
POTENTIAL GTH-PBE-q1
&END KIND
&KIND O
BASIS_SET ORB DZVP-GTH
BASIS_SET RI_AUX RI_DZVP-GTH
POTENTIAL GTH-PBE-q6
&END KIND
&TOPOLOGY
MULTIPLE_UNIT_CELL 1 1 1
&END TOPOLOGY
&COORD
H 0.0 -0.5 -4.5
O 0.5 0.0 4.5
H 0.0 0.5 -4.5
&END COORD
&END SUBSYS
&END FORCE_EVAL

View file

@ -0,0 +1,130 @@
&GLOBAL
PROJECT G0W0_kpoints_from_Gamma
PRINT_LEVEL MEDIUM
RUN_TYPE ENERGY
&TIMINGS
THRESHOLD 0.01
&END
&END GLOBAL
&FORCE_EVAL
METHOD Quickstep
&DFT
BASIS_SET_FILE_NAME HFX_BASIS
BASIS_SET_FILE_NAME BASIS_ADMM
SORT_BASIS EXP
POTENTIAL_FILE_NAME GTH_POTENTIALS
&MGRID
CUTOFF 100
REL_CUTOFF 20
&END MGRID
&QS
METHOD GPW
EPS_DEFAULT 1.0E-15
EPS_PGF_ORB 1.0E-15
&END QS
&SCF
SCF_GUESS RESTART
EPS_SCF 1.0E-5
MAX_SCF 100
&PRINT
&RESTART ON
&END
&END
ADDED_MOS -1
&END SCF
&AUXILIARY_DENSITY_MATRIX_METHOD
METHOD BASIS_PROJECTION
ADMM_PURIFICATION_METHOD NONE
&END AUXILIARY_DENSITY_MATRIX_METHOD
&XC
&XC_FUNCTIONAL PBE
&END XC_FUNCTIONAL
&HF
FRACTION 0.0
&SCREENING
EPS_SCHWARZ 1.0E-3
SCREEN_ON_INITIAL_P TRUE
&END
&INTERACTION_POTENTIAL
POTENTIAL_TYPE TRUNCATED
CUTOFF_RADIUS 3.0
T_C_G_DATA t_c_g.dat
&END
&MEMORY
! In MB per MPI rank.. use as much as need to get in-core operation
MAX_MEMORY 0
EPS_STORAGE_SCALING 0.1
&END
&END
&WF_CORRELATION
&INTEGRALS
SIZE_LATTICE_SUM 3
&END INTEGRALS
&LOW_SCALING
KPOINTS 4 1 4
&END LOW_SCALING
&RI_RPA
RPA_NUM_QUAD_POINTS 6
ADMM
&GW
CORR_OCC 1
CORR_VIRT 1
CROSSING_SEARCH NEWTON
ANALYTIC_CONTINUATION TWO_POLE
RI_SIGMA_X FALSE
KPOINTS_SELF_ENERGY 2 2 1
&KPOINT_SET
SPECIAL_POINT 0.5 0.0 0.0
SPECIAL_POINT 0.0 0.0 0.0
NPOINTS 3
&END
&END GW
&HF
FRACTION 1.0
&SCREENING
EPS_SCHWARZ 1.0E-6
SCREEN_ON_INITIAL_P TRUE
&END
&INTERACTION_POTENTIAL
POTENTIAL_TYPE TRUNCATED
CUTOFF_RADIUS 3.9
T_C_G_DATA t_c_g.dat
&END
&MEMORY
! In MB per MPI rank.. use as much as need to get in-core operation
MAX_MEMORY 0
EPS_STORAGE_SCALING 0.1
&END
&END
&END RI_RPA
&END
&END XC
&END DFT
&SUBSYS
&CELL
ABC [angstrom] 8.000 8.000 8.000
MULTIPLE_UNIT_CELL 1 1 1
PERIODIC XZ
&END CELL
&KIND H
BASIS_SET ORB DZVP-GTH
BASIS_SET RI_AUX RI_DZVP-GTH
BASIS_SET AUX_FIT cFIT3
POTENTIAL GTH-PBE-q1
&END KIND
&KIND O
BASIS_SET ORB DZVP-GTH
BASIS_SET RI_AUX RI_DZVP-GTH
BASIS_SET AUX_FIT cFIT3
POTENTIAL GTH-PBE-q6
&END KIND
&TOPOLOGY
MULTIPLE_UNIT_CELL 1 1 1
&END TOPOLOGY
&COORD
H 0.0 -0.5 -4.5
O 0.5 0.0 4.5
H 0.0 0.5 -4.5
&END COORD
&END SUBSYS
&END FORCE_EVAL

View file

@ -1,5 +1,5 @@
&GLOBAL
PROJECT RPA_H2O_kpoints
PROJECT kp_GW
PRINT_LEVEL MEDIUM
RUN_TYPE ENERGY
&TIMINGS
@ -25,36 +25,63 @@
SCF_GUESS ATOMIC
EPS_SCF 1.0E-5
MAX_SCF 100
&PRINT
&RESTART OFF
&END
&END
ADDED_MOS 10000000
ADDED_MOS -1
&END SCF
&XC
&XC_FUNCTIONAL PBE
&XC_FUNCTIONAL
&XWPBE
SCALE_X -0.25
SCALE_X0 1.0
OMEGA 0.11
&END
&PBE
SCALE_X 0.0
SCALE_C 1.0
&END PBE
&END XC_FUNCTIONAL
&HF
&SCREENING
EPS_SCHWARZ 1.0E-10
&END
&INTERACTION_POTENTIAL
POTENTIAL_TYPE SHORTRANGE
OMEGA 0.11
&END
&MEMORY
MAX_MEMORY 10
&END
FRACTION 0.25
&END
&WF_CORRELATION
&INTEGRALS
SIZE_LATTICE_SUM 3
&END INTEGRALS
MEMORY 200.
NUMBER_PROC 1
&LOW_SCALING
MEMORY_CUT 1
KPOINTS 4 4 4
KPOINTS 1 4 4
REGULARIZATION_RI 1.0E-3
&END LOW_SCALING
&RI_RPA
RPA_NUM_QUAD_POINTS 6
&GW
CORR_OCC 1
CORR_VIRT 1
RI_SIGMA_X
KPOINTS_SELF_ENERGY 2 2 1
&KPOINT_SET
SPECIAL_POINT 0.5 0.0 0.0
SPECIAL_POINT 0.0 0.0 0.0
NPOINTS 3
&END
&END GW
&END RI_RPA
&END
&END XC
&END DFT
&SUBSYS
&CELL
ABC [angstrom] 10.000 10.000 10.000
ABC [angstrom] 8.000 8.000 8.000
MULTIPLE_UNIT_CELL 1 1 1
PERIODIC XYZ
PERIODIC YZ
&END CELL
&KIND H
BASIS_SET ORB DZVP-GTH
@ -70,9 +97,9 @@
MULTIPLE_UNIT_CELL 1 1 1
&END TOPOLOGY
&COORD
H 0.0 -0.5 -5.5
O 0.5 0.0 5.5
H 0.0 0.5 -5.5
H 0.0 -0.5 -4.5
O 0.5 0.0 4.5
H 0.0 0.5 -4.5
&END COORD
&END SUBSYS
&END FORCE_EVAL

View file

@ -0,0 +1,7 @@
G0W0_kpoints_from_Gamma.inp 78 1e-05 14.753
G0W0_kpoints_from_Gamma_RI_regularization_1E-3.inp 78 1e-05 14.682
G0W0_kpoints_in_self_energy.inp 98 1e-05 12.090
G0W0_kpoints_in_self_energy_at_HSE06.inp 98 1e-05 12.569
G0W0_kpoints_in_self_energy_Sigmax_from_four_center_HFX.inp 98 1e-05 15.438
G0W0_kpoints_in_self_energy_Sigmax_from_four_center_HFX_ADMM.inp 98 1e-05 15.484
#EOF

View file

@ -3,9 +3,8 @@ Cubic_RPA_H2O_check_filtering.inp 11 1e-08 -
Cubic_RPA_2x_H2_check_filtering.inp 11 1e-08 -2.119159936957426
Cubic_RPA_CH3.inp 11 3e-07 -7.414901056476346
Cubic_RPA_H2O_standard_svd.inp 11 1e-08 -17.160104846594532
RPA_kpoints_H2O.inp 11 1e-08 -17.384092112689462
RPA_kpoints_H2O_batched.inp 11 1e-08 -17.384092114445451
RPA_kpoints_from_Gamma_H2O.inp 11 1e-08 -17.384093823208083
RPA_kpoints_H2O.inp 11 1e-08 -17.384612021546573
RPA_kpoints_H2O_batched.inp 11 1e-08 -17.384612040108440
Cubic_RPA_CH3_ri-hfx.inp 11 1e-08 -7.414775787676669
Cubic_RPA_H2O_ri-hfx.inp 11 1e-08 -17.159865017693086
#EOF

View file

@ -118,6 +118,7 @@ QS/regtest-nmr-uks-1
QS/regtest-libxc libxc libint
SE/regtest-3-2
QS/regtest-gw-cubic libint
QS/regtest-gw-kpoints libint
QS/regtest-xc
QS/regtest-almo-2
SE/regtest-2-2