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 Reads the &BSE input section into the BSE environment; called by read_mp2_section with
10 : !> the section under RI_RPA%GW, by any other GW path with its own section, and again by
11 : !> prepare_bse_env_from_ri_rpa_gw before every BSE run
12 : !> \par History
13 : !> 09.2026 moved out of read_mp2_section [Maximilian Graml]
14 : ! **************************************************************************************************
15 : MODULE bse_input
16 : USE bse_types, ONLY: bse_env_type
17 : USE cp_output_handling, ONLY: debug_print_level
18 : USE input_section_types, ONLY: section_vals_type,&
19 : section_vals_val_get
20 : #include "./base/base_uses.f90"
21 :
22 : IMPLICIT NONE
23 :
24 : PRIVATE
25 :
26 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'bse_input'
27 :
28 : PUBLIC :: read_bse_section
29 :
30 : CONTAINS
31 :
32 : ! **************************************************************************************************
33 : !> \brief Reads every keyword of the &BSE section into the settings of the BSE environment
34 : !> \param bse_section the &BSE section of the calling GW path
35 : !> \param bse_env receives every keyword and keeps the section pointer for the NTO print keys
36 : ! **************************************************************************************************
37 1160 : SUBROUTINE read_bse_section(bse_section, bse_env)
38 : TYPE(section_vals_type), POINTER :: bse_section
39 : TYPE(bse_env_type), INTENT(INOUT) :: bse_env
40 :
41 : INTEGER :: print_level_NTO_analysis
42 :
43 580 : bse_env%bse_section => bse_section
44 : CALL section_vals_val_get(bse_section, "_SECTION_PARAMETERS_", &
45 580 : l_val=bse_env%do_bse)
46 : CALL section_vals_val_get(bse_section, "SPIN_CONFIG", &
47 580 : i_val=bse_env%bse_spin_config)
48 : CALL section_vals_val_get(bse_section, "ENERGY_CUTOFF_OCC", &
49 580 : r_val=bse_env%bse_cutoff_occ)
50 : CALL section_vals_val_get(bse_section, "ENERGY_CUTOFF_EMPTY", &
51 580 : r_val=bse_env%bse_cutoff_empty)
52 : CALL section_vals_val_get(bse_section, "MEMORY_PER_PROC", &
53 580 : r_val=bse_env%memory_per_proc_gb)
54 : CALL section_vals_val_get(bse_section, "NUM_PRINT_EXC", &
55 580 : i_val=bse_env%num_print_exc)
56 : CALL section_vals_val_get(bse_section, "NUM_PRINT_EXC_DESCR", &
57 580 : i_val=bse_env%num_print_exc_descr)
58 : CALL section_vals_val_get(bse_section, "PRINT_DIRECTIONAL_EXC_DESCR", &
59 580 : l_val=bse_env%print_directional_exc_descr)
60 : CALL section_vals_val_get(bse_section, "PRINT_DIRECTIONAL_CROSSCORRELATION", &
61 580 : l_val=bse_env%print_directional_crosscorrelation)
62 : CALL section_vals_val_get(bse_section, "EPS_X", &
63 580 : r_val=bse_env%eps_x)
64 : CALL section_vals_val_get(bse_section, "BSE_ITERAT%NUM_EXC_EN", &
65 580 : i_val=bse_env%num_exc_en)
66 : CALL section_vals_val_get(bse_section, "BSE_ITERAT%NUM_BUFFER_STATES", &
67 580 : i_val=bse_env%num_buffer_states)
68 : CALL section_vals_val_get(bse_section, "BSE_ITERAT%BLOCK_SIZE", &
69 580 : i_val=bse_env%block_size)
70 : CALL section_vals_val_get(bse_section, "BSE_ITERAT%NUM_GUESS_TRANSITIONS", &
71 580 : i_val=bse_env%num_guess_transitions)
72 : CALL section_vals_val_get(bse_section, "BSE_ITERAT%MAX_SUBSPACE_FACTOR", &
73 580 : i_val=bse_env%max_subspace_factor)
74 : CALL section_vals_val_get(bse_section, "BSE_ITERAT%MATVEC_BLOCK_COLUMNS", &
75 580 : i_val=bse_env%matvec_block_columns)
76 : CALL section_vals_val_get(bse_section, "BSE_ITERAT%MAX_ITER", &
77 580 : i_val=bse_env%max_iter)
78 : CALL section_vals_val_get(bse_section, "BSE_ITERAT%CONVERGENCE_CRITERION", &
79 580 : i_val=bse_env%convergence_criterion)
80 : CALL section_vals_val_get(bse_section, "BSE_ITERAT%EPS_RES", &
81 580 : r_val=bse_env%eps_res)
82 : CALL section_vals_val_get(bse_section, "BSE_ITERAT%EPS_ENERGY", &
83 580 : r_val=bse_env%eps_energy)
84 : CALL section_vals_val_get(bse_section, "BSE_ITERAT%PRECONDITIONER", &
85 580 : i_val=bse_env%preconditioner)
86 : CALL section_vals_val_get(bse_section, "BSE_ITERAT%ABBA_SOLVER", &
87 580 : i_val=bse_env%abba_solver)
88 : CALL section_vals_val_get(bse_section, "BSE_DIAG_METHOD", &
89 580 : i_val=bse_env%bse_diag_method)
90 : CALL section_vals_val_get(bse_section, "TDA", &
91 580 : i_val=bse_env%flag_tda)
92 : CALL section_vals_val_get(bse_section, "USE_KS_ENERGIES", &
93 580 : l_val=bse_env%use_ks_energies)
94 : CALL section_vals_val_get(bse_section, "SCREENING_IN_W%_SECTION_PARAMETERS_", &
95 580 : i_val=bse_env%screening_method)
96 : CALL section_vals_val_get(bse_section, "SCREENING_IN_W%ALPHA", &
97 580 : r_val=bse_env%screening_factor)
98 : CALL section_vals_val_get(bse_section, "BSE_DEBUG_PRINT", &
99 580 : l_val=bse_env%bse_debug_print)
100 : CALL section_vals_val_get(bse_section, "BSE_SPECTRUM%_SECTION_PARAMETERS_", &
101 580 : l_val=bse_env%bse_print_spectrum)
102 : CALL section_vals_val_get(bse_section, "BSE_SPECTRUM%FREQUENCY_STEP_SIZE", &
103 580 : r_val=bse_env%bse_spectrum_freq_step_size)
104 : CALL section_vals_val_get(bse_section, "BSE_SPECTRUM%FREQUENCY_STARTING_POINT", &
105 580 : r_val=bse_env%bse_spectrum_freq_start)
106 : CALL section_vals_val_get(bse_section, "BSE_SPECTRUM%FREQUENCY_END_POINT", &
107 580 : r_val=bse_env%bse_spectrum_freq_end)
108 : CALL section_vals_val_get(bse_section, "BSE_SPECTRUM%ETA_LIST", &
109 580 : r_vals=bse_env%bse_eta_spectrum_list)
110 : CALL section_vals_val_get(bse_section, "NTO_ANALYSIS%_SECTION_PARAMETERS_", &
111 580 : i_val=print_level_NTO_analysis)
112 : ! a print key read as a switch: every value but OFF runs the analysis, whatever GLOBAL%PRINT_LEVEL;
113 : ! cp_print_key_section_create encodes OFF as debug_print_level + 1
114 580 : bse_env%do_nto_analysis = (print_level_NTO_analysis /= debug_print_level + 1)
115 : CALL section_vals_val_get(bse_section, "NTO_ANALYSIS%EPS_NTO_EIGVAL", &
116 580 : r_val=bse_env%eps_nto_eigval)
117 : CALL section_vals_val_get(bse_section, "NTO_ANALYSIS%EPS_OSC_STR", &
118 580 : r_val=bse_env%eps_nto_osc_str)
119 : CALL section_vals_val_get(bse_section, "NTO_ANALYSIS%NUM_PRINT_EXC_NTOS", &
120 580 : i_val=bse_env%num_print_exc_ntos)
121 : CALL section_vals_val_get(bse_section, "NTO_ANALYSIS%STATE_LIST", &
122 580 : EXPLICIT=bse_env%explicit_nto_list)
123 580 : IF (bse_env%explicit_nto_list) THEN
124 : CALL section_vals_val_get(bse_section, "NTO_ANALYSIS%STATE_LIST", &
125 0 : i_vals=bse_env%bse_nto_state_list)
126 : END IF
127 :
128 580 : END SUBROUTINE read_bse_section
129 :
130 : END MODULE bse_input
|