Line data Source code
1 : !--------------------------------------------------------------------------------------------------!
2 : ! CP2K: A general program to perform molecular dynamics simulations !
3 : ! Copyright 2000-2026 CP2K developers group <https://cp2k.org> !
4 : ! !
5 : ! SPDX-License-Identifier: GPL-2.0-or-later !
6 : !--------------------------------------------------------------------------------------------------!
7 :
8 : ! **************************************************************************************************
9 : !> \brief
10 : !> \author Jan Wilhelm
11 : !> \date 07.2023
12 : ! **************************************************************************************************
13 : MODULE gw_main
14 : USE gw_large_cell_Gamma, ONLY: gw_calc_large_cell_Gamma
15 : USE gw_large_cell_Gamma_ri_rs, ONLY: gw_calc_large_cell_Gamma_ri_rs
16 : USE gw_non_periodic_ri_rs, ONLY: gw_calc_non_periodic_ri_rs
17 : USE gw_small_cell_full_kp, ONLY: gw_calc_small_cell_full_kp
18 : USE gw_utils, ONLY: create_and_init_bs_env_for_gw
19 : USE input_constants, ONLY: large_cell_Gamma,&
20 : large_cell_Gamma_ri_rs,&
21 : non_periodic_ri_rs,&
22 : small_cell_full_kp
23 : USE input_section_types, ONLY: section_vals_type
24 : USE post_scf_bandstructure_types, ONLY: post_scf_bandstructure_type
25 : USE qs_environment_types, ONLY: qs_environment_type
26 : #include "./base/base_uses.f90"
27 :
28 : IMPLICIT NONE
29 :
30 : PRIVATE
31 :
32 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'gw_main'
33 :
34 : PUBLIC :: gw
35 :
36 : CONTAINS
37 :
38 : ! **************************************************************************************************
39 : !> \brief Perform GW band structure calculation
40 : !> \param qs_env ...
41 : !> \param bs_env ...
42 : !> \param post_scf_bandstructure_section ...
43 : !> \par History
44 : !> * 04.2026 Added GW RI-RS module
45 : !> * 07.2023 created [Jan Wilhelm]
46 : ! **************************************************************************************************
47 42 : SUBROUTINE gw(qs_env, bs_env, post_scf_bandstructure_section)
48 : TYPE(qs_environment_type), POINTER :: qs_env
49 : TYPE(post_scf_bandstructure_type), POINTER :: bs_env
50 : TYPE(section_vals_type), POINTER :: post_scf_bandstructure_section
51 :
52 : CHARACTER(LEN=*), PARAMETER :: routineN = 'gw'
53 :
54 : INTEGER :: handle
55 :
56 42 : CALL timeset(routineN, handle)
57 :
58 42 : CALL create_and_init_bs_env_for_gw(qs_env, bs_env, post_scf_bandstructure_section)
59 :
60 50 : SELECT CASE (bs_env%small_cell_full_kp_or_large_cell_Gamma)
61 :
62 : CASE (small_cell_full_kp)
63 :
64 8 : CALL gw_calc_small_cell_full_kp(qs_env, bs_env)
65 :
66 : CASE (large_cell_Gamma)
67 :
68 24 : CALL gw_calc_large_cell_Gamma(qs_env, bs_env)
69 :
70 : CASE (large_cell_Gamma_ri_rs)
71 :
72 0 : CALL gw_calc_large_cell_Gamma_ri_rs(qs_env, bs_env)
73 :
74 : CASE (non_periodic_ri_rs)
75 :
76 42 : CALL gw_calc_non_periodic_ri_rs(qs_env, bs_env)
77 :
78 : END SELECT
79 :
80 42 : CALL timestop(handle)
81 :
82 42 : END SUBROUTINE gw
83 :
84 : END MODULE gw_main
85 :
|