LCOV - code coverage report
Current view: top level - src - bse_input.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:9ccafda) Lines: 97.7 % 44 43
Test Date: 2026-10-15 00:55:44 Functions: 100.0 % 1 1

            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
        

Generated by: LCOV version 2.0-1