LCOV - code coverage report
Current view: top level - src - cp_control_utils.F (source / functions) Hit Total Coverage
Test: CP2K Regtests (git:c740a4b) Lines: 1347 1519 88.7 %
Date: 2025-05-29 08:02:39 Functions: 13 13 100.0 %

          Line data    Source code
       1             : !--------------------------------------------------------------------------------------------------!
       2             : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3             : !   Copyright 2000-2025 CP2K developers group <https://cp2k.org>                                   !
       4             : !                                                                                                  !
       5             : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6             : !--------------------------------------------------------------------------------------------------!
       7             : 
       8             : ! **************************************************************************************************
       9             : !> \brief Utilities to set up the control types
      10             : ! **************************************************************************************************
      11             : MODULE cp_control_utils
      12             :    USE bibliography,                    ONLY: &
      13             :         Andreussi2012, Asgeirsson2017, Bannwarth2019, Caldeweyher2017, Caldeweyher2020, Dewar1977, &
      14             :         Dewar1985, Elstner1998, Fattebert2002, Grimme2017, Hu2007, Krack2000, Lippert1997, &
      15             :         Lippert1999, Porezag1995, Pracht2019, Repasky2002, Rocha2006, Schenter2008, Seifert1996, &
      16             :         Souza2002, Stengel2009, Stewart1989, Stewart2007, Thiel1992, Umari2002, VanVoorhis2015, &
      17             :         VandeVondele2005a, VandeVondele2005b, Yin2017, Zhechkov2005, cite_reference
      18             :    USE cp_control_types,                ONLY: &
      19             :         admm_control_create, admm_control_type, ddapc_control_create, ddapc_restraint_type, &
      20             :         dft_control_create, dft_control_type, efield_type, expot_control_create, &
      21             :         maxwell_control_create, qs_control_type, tddfpt2_control_type, xtb_control_type
      22             :    USE cp_files,                        ONLY: close_file,&
      23             :                                               open_file
      24             :    USE cp_log_handling,                 ONLY: cp_get_default_logger,&
      25             :                                               cp_logger_type
      26             :    USE cp_output_handling,              ONLY: cp_print_key_finished_output,&
      27             :                                               cp_print_key_unit_nr
      28             :    USE cp_parser_methods,               ONLY: parser_read_line
      29             :    USE cp_parser_types,                 ONLY: cp_parser_type,&
      30             :                                               parser_create,&
      31             :                                               parser_release,&
      32             :                                               parser_reset
      33             :    USE cp_units,                        ONLY: cp_unit_from_cp2k,&
      34             :                                               cp_unit_to_cp2k
      35             :    USE eeq_input,                       ONLY: read_eeq_param
      36             :    USE force_fields_input,              ONLY: read_gp_section
      37             :    USE input_constants,                 ONLY: &
      38             :         admm1_type, admm2_type, admmp_type, admmq_type, admms_type, constant_env, custom_env, &
      39             :         do_admm_aux_exch_func_bee, do_admm_aux_exch_func_bee_libxc, do_admm_aux_exch_func_default, &
      40             :         do_admm_aux_exch_func_default_libxc, do_admm_aux_exch_func_none, &
      41             :         do_admm_aux_exch_func_opt, do_admm_aux_exch_func_opt_libxc, do_admm_aux_exch_func_pbex, &
      42             :         do_admm_aux_exch_func_pbex_libxc, do_admm_aux_exch_func_sx_libxc, &
      43             :         do_admm_basis_projection, do_admm_blocked_projection, do_admm_blocking_purify_full, &
      44             :         do_admm_charge_constrained_projection, do_admm_exch_scaling_merlot, &
      45             :         do_admm_exch_scaling_none, do_admm_purify_cauchy, do_admm_purify_cauchy_subspace, &
      46             :         do_admm_purify_mcweeny, do_admm_purify_mo_diag, do_admm_purify_mo_no_diag, &
      47             :         do_admm_purify_none, do_admm_purify_none_dm, do_ddapc_constraint, do_ddapc_restraint, &
      48             :         do_method_am1, do_method_dftb, do_method_gapw, do_method_gapw_xc, do_method_gpw, &
      49             :         do_method_lrigpw, do_method_mndo, do_method_mndod, do_method_ofgpw, do_method_pdg, &
      50             :         do_method_pm3, do_method_pm6, do_method_pm6fm, do_method_pnnl, do_method_rigpw, &
      51             :         do_method_rm1, do_method_xtb, do_pwgrid_ns_fullspace, do_pwgrid_ns_halfspace, &
      52             :         do_pwgrid_spherical, do_s2_constraint, do_s2_restraint, do_se_is_kdso, do_se_is_kdso_d, &
      53             :         do_se_is_slater, do_se_lr_ewald, do_se_lr_ewald_gks, do_se_lr_ewald_r3, do_se_lr_none, &
      54             :         gapw_1c_large, gapw_1c_medium, gapw_1c_orb, gapw_1c_small, gapw_1c_very_large, &
      55             :         gaussian_env, no_admm_type, numerical, ramp_env, real_time_propagation, sccs_andreussi, &
      56             :         sccs_derivative_cd3, sccs_derivative_cd5, sccs_derivative_cd7, sccs_derivative_fft, &
      57             :         sccs_fattebert_gygi, sic_ad, sic_eo, sic_list_all, sic_list_unpaired, sic_mauri_spz, &
      58             :         sic_mauri_us, sic_none, slater, tddfpt_dipole_length, tddfpt_kernel_stda, &
      59             :         use_mom_ref_user, xtb_vdw_type_d3, xtb_vdw_type_d4, xtb_vdw_type_none
      60             :    USE input_cp2k_check,                ONLY: xc_functionals_expand
      61             :    USE input_cp2k_dft,                  ONLY: create_dft_section
      62             :    USE input_enumeration_types,         ONLY: enum_i2c,&
      63             :                                               enumeration_type
      64             :    USE input_keyword_types,             ONLY: keyword_get,&
      65             :                                               keyword_type
      66             :    USE input_section_types,             ONLY: &
      67             :         section_get_ival, section_get_keyword, section_release, section_type, section_vals_get, &
      68             :         section_vals_get_subs_vals, section_vals_type, section_vals_val_get, section_vals_val_set
      69             :    USE kinds,                           ONLY: default_path_length,&
      70             :                                               default_string_length,&
      71             :                                               dp
      72             :    USE mathconstants,                   ONLY: fourpi
      73             :    USE pair_potential_types,            ONLY: pair_potential_reallocate
      74             :    USE periodic_table,                  ONLY: get_ptable_info
      75             :    USE qs_cdft_utils,                   ONLY: read_cdft_control_section
      76             :    USE smeagol_control_types,           ONLY: read_smeagol_control
      77             :    USE string_utilities,                ONLY: uppercase
      78             :    USE util,                            ONLY: sort
      79             :    USE xc,                              ONLY: xc_uses_kinetic_energy_density,&
      80             :                                               xc_uses_norm_drho
      81             :    USE xc_input_constants,              ONLY: xc_deriv_collocate
      82             :    USE xc_write_output,                 ONLY: xc_write
      83             : #include "./base/base_uses.f90"
      84             : 
      85             :    IMPLICIT NONE
      86             : 
      87             :    PRIVATE
      88             : 
      89             :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'cp_control_utils'
      90             : 
      91             :    PUBLIC :: read_dft_control, &
      92             :              read_mgrid_section, &
      93             :              read_qs_section, &
      94             :              read_tddfpt2_control, &
      95             :              write_dft_control, &
      96             :              write_qs_control, &
      97             :              write_admm_control, &
      98             :              read_ddapc_section
      99             : CONTAINS
     100             : 
     101             : ! **************************************************************************************************
     102             : !> \brief ...
     103             : !> \param dft_control ...
     104             : !> \param dft_section ...
     105             : ! **************************************************************************************************
     106      110310 :    SUBROUTINE read_dft_control(dft_control, dft_section)
     107             :       TYPE(dft_control_type), POINTER                    :: dft_control
     108             :       TYPE(section_vals_type), POINTER                   :: dft_section
     109             : 
     110             :       CHARACTER(len=default_path_length)                 :: basis_set_file_name, &
     111             :                                                             intensities_file_name, &
     112             :                                                             potential_file_name
     113             :       CHARACTER(LEN=default_string_length), &
     114        7354 :          DIMENSION(:), POINTER                           :: tmpstringlist
     115             :       INTEGER                                            :: admmtype, irep, isize, method_id, nrep, &
     116             :                                                             xc_deriv_method_id
     117             :       LOGICAL                                            :: at_end, do_hfx, do_ot, do_rpa_admm, &
     118             :                                                             do_rtp, exopt1, exopt2, exopt3, &
     119             :                                                             explicit, is_present, l_param, not_SE, &
     120             :                                                             was_present
     121             :       REAL(KIND=dp)                                      :: density_cut, gradient_cut, tau_cut
     122        7354 :       REAL(KIND=dp), DIMENSION(:), POINTER               :: pol
     123             :       TYPE(cp_logger_type), POINTER                      :: logger
     124             :       TYPE(cp_parser_type)                               :: parser
     125             :       TYPE(section_vals_type), POINTER :: hairy_probes_section, hfx_section, maxwell_section, &
     126             :          sccs_section, scf_section, tmp_section, xc_fun_section, xc_section
     127             : 
     128        7354 :       was_present = .FALSE.
     129             : 
     130        7354 :       logger => cp_get_default_logger()
     131             : 
     132        7354 :       NULLIFY (tmp_section, xc_fun_section, xc_section)
     133        7354 :       ALLOCATE (dft_control)
     134        7354 :       CALL dft_control_create(dft_control)
     135             :       ! determine wheather this is a semiempirical or DFTB run
     136             :       ! --> (no XC section needs to be provided)
     137        7354 :       not_SE = .TRUE.
     138        7354 :       CALL section_vals_val_get(dft_section, "QS%METHOD", i_val=method_id)
     139        2186 :       SELECT CASE (method_id)
     140             :       CASE (do_method_dftb, do_method_xtb, do_method_mndo, do_method_am1, do_method_pm3, do_method_pnnl, &
     141             :             do_method_pm6, do_method_pm6fm, do_method_pdg, do_method_rm1, do_method_mndod)
     142        7354 :          not_SE = .FALSE.
     143             :       END SELECT
     144             :       ! Check for XC section and XC_FUNCTIONAL section
     145        7354 :       xc_section => section_vals_get_subs_vals(dft_section, "XC")
     146        7354 :       CALL section_vals_get(xc_section, explicit=is_present)
     147        7354 :       IF (.NOT. is_present .AND. not_SE) THEN
     148           0 :          CPABORT("XC section missing.")
     149             :       END IF
     150        7354 :       IF (is_present) THEN
     151        5184 :          CALL section_vals_val_get(xc_section, "density_cutoff", r_val=density_cut)
     152        5184 :          CALL section_vals_val_get(xc_section, "gradient_cutoff", r_val=gradient_cut)
     153        5184 :          CALL section_vals_val_get(xc_section, "tau_cutoff", r_val=tau_cut)
     154             :          ! Perform numerical stability checks and possibly correct the issues
     155        5184 :          IF (density_cut <= EPSILON(0.0_dp)*100.0_dp) &
     156             :             CALL cp_warn(__LOCATION__, &
     157             :                          "DENSITY_CUTOFF lower than 100*EPSILON, where EPSILON is the machine precision. "// &
     158           0 :                          "This may lead to numerical problems. Setting up shake_tol to 100*EPSILON! ")
     159        5184 :          density_cut = MAX(EPSILON(0.0_dp)*100.0_dp, density_cut)
     160        5184 :          IF (gradient_cut <= EPSILON(0.0_dp)*100.0_dp) &
     161             :             CALL cp_warn(__LOCATION__, &
     162             :                          "GRADIENT_CUTOFF lower than 100*EPSILON, where EPSILON is the machine precision. "// &
     163           0 :                          "This may lead to numerical problems. Setting up shake_tol to 100*EPSILON! ")
     164        5184 :          gradient_cut = MAX(EPSILON(0.0_dp)*100.0_dp, gradient_cut)
     165        5184 :          IF (tau_cut <= EPSILON(0.0_dp)*100.0_dp) &
     166             :             CALL cp_warn(__LOCATION__, &
     167             :                          "TAU_CUTOFF lower than 100*EPSILON, where EPSILON is the machine precision. "// &
     168           0 :                          "This may lead to numerical problems. Setting up shake_tol to 100*EPSILON! ")
     169        5184 :          tau_cut = MAX(EPSILON(0.0_dp)*100.0_dp, tau_cut)
     170        5184 :          CALL section_vals_val_set(xc_section, "density_cutoff", r_val=density_cut)
     171        5184 :          CALL section_vals_val_set(xc_section, "gradient_cutoff", r_val=gradient_cut)
     172        5184 :          CALL section_vals_val_set(xc_section, "tau_cutoff", r_val=tau_cut)
     173             :       END IF
     174        7354 :       xc_fun_section => section_vals_get_subs_vals(xc_section, "XC_FUNCTIONAL")
     175        7354 :       CALL section_vals_get(xc_fun_section, explicit=is_present)
     176        7354 :       IF (.NOT. is_present .AND. not_SE) THEN
     177           0 :          CPABORT("XC_FUNCTIONAL section missing.")
     178             :       END IF
     179        7354 :       scf_section => section_vals_get_subs_vals(dft_section, "SCF")
     180        7354 :       CALL section_vals_val_get(dft_section, "UKS", l_val=dft_control%uks)
     181        7354 :       CALL section_vals_val_get(dft_section, "ROKS", l_val=dft_control%roks)
     182        7354 :       IF (dft_control%uks .OR. dft_control%roks) THEN
     183        1601 :          dft_control%nspins = 2
     184             :       ELSE
     185        5753 :          dft_control%nspins = 1
     186             :       END IF
     187             : 
     188        7354 :       dft_control%lsd = (dft_control%nspins > 1)
     189        7354 :       dft_control%use_kinetic_energy_density = xc_uses_kinetic_energy_density(xc_fun_section, dft_control%lsd)
     190             : 
     191        7354 :       xc_deriv_method_id = section_get_ival(xc_section, "XC_GRID%XC_DERIV")
     192             :       dft_control%drho_by_collocation = (xc_uses_norm_drho(xc_fun_section, dft_control%lsd) &
     193        7354 :                                          .AND. (xc_deriv_method_id == xc_deriv_collocate))
     194        7354 :       IF (dft_control%drho_by_collocation) THEN
     195           0 :          CPABORT("derivatives by collocation not implemented")
     196             :       END IF
     197             : 
     198             :       ! Automatic auxiliary basis set generation
     199        7354 :       CALL section_vals_val_get(dft_section, "AUTO_BASIS", n_rep_val=nrep)
     200       14708 :       DO irep = 1, nrep
     201        7354 :          CALL section_vals_val_get(dft_section, "AUTO_BASIS", i_rep_val=irep, c_vals=tmpstringlist)
     202       14708 :          IF (SIZE(tmpstringlist) == 2) THEN
     203        7354 :             CALL uppercase(tmpstringlist(2))
     204        7354 :             SELECT CASE (tmpstringlist(2))
     205             :             CASE ("X")
     206          78 :                isize = -1
     207             :             CASE ("SMALL")
     208          78 :                isize = 0
     209             :             CASE ("MEDIUM")
     210          48 :                isize = 1
     211             :             CASE ("LARGE")
     212           0 :                isize = 2
     213             :             CASE ("HUGE")
     214           2 :                isize = 3
     215             :             CASE DEFAULT
     216        7354 :                CPWARN("Unknown basis size in AUTO_BASIS keyword:"//TRIM(tmpstringlist(1)))
     217             :             END SELECT
     218             :             !
     219        7356 :             SELECT CASE (tmpstringlist(1))
     220             :             CASE ("X")
     221             :             CASE ("RI_AUX")
     222           2 :                dft_control%auto_basis_ri_aux = isize
     223             :             CASE ("AUX_FIT")
     224           0 :                dft_control%auto_basis_aux_fit = isize
     225             :             CASE ("LRI_AUX")
     226           0 :                dft_control%auto_basis_lri_aux = isize
     227             :             CASE ("P_LRI_AUX")
     228           0 :                dft_control%auto_basis_p_lri_aux = isize
     229             :             CASE ("RI_HXC")
     230           0 :                dft_control%auto_basis_ri_hxc = isize
     231             :             CASE ("RI_XAS")
     232          48 :                dft_control%auto_basis_ri_xas = isize
     233             :             CASE ("RI_HFX")
     234          78 :                dft_control%auto_basis_ri_hfx = isize
     235             :             CASE DEFAULT
     236        7354 :                CPWARN("Unknown basis type in AUTO_BASIS keyword:"//TRIM(tmpstringlist(1)))
     237             :             END SELECT
     238             :          ELSE
     239             :             CALL cp_abort(__LOCATION__, &
     240           0 :                           "AUTO_BASIS keyword in &DFT section has a wrong number of arguments.")
     241             :          END IF
     242             :       END DO
     243             : 
     244             :       !! check if we do wavefunction fitting
     245        7354 :       tmp_section => section_vals_get_subs_vals(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD")
     246        7354 :       CALL section_vals_get(tmp_section, explicit=is_present)
     247             :       !
     248        7354 :       hfx_section => section_vals_get_subs_vals(xc_section, "HF")
     249        7354 :       CALL section_vals_get(hfx_section, explicit=do_hfx)
     250        7354 :       CALL section_vals_val_get(xc_section, "WF_CORRELATION%RI_RPA%ADMM", l_val=do_rpa_admm)
     251        7354 :       is_present = is_present .AND. (do_hfx .OR. do_rpa_admm)
     252             :       !
     253        7354 :       dft_control%do_admm = is_present
     254        7354 :       dft_control%do_admm_mo = .FALSE.
     255        7354 :       dft_control%do_admm_dm = .FALSE.
     256        7354 :       IF (is_present) THEN
     257             :          do_ot = .FALSE.
     258         446 :          CALL section_vals_val_get(scf_section, "OT%_SECTION_PARAMETERS_", l_val=do_ot)
     259         446 :          CALL admm_control_create(dft_control%admm_control)
     260             : 
     261         446 :          CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%ADMM_TYPE", i_val=admmtype)
     262         446 :          CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%ADMM_PURIFICATION_METHOD", explicit=exopt1)
     263         446 :          CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%METHOD", explicit=exopt2)
     264         446 :          CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%EXCH_SCALING_MODEL", explicit=exopt3)
     265         446 :          dft_control%admm_control%admm_type = admmtype
     266         436 :          SELECT CASE (admmtype)
     267             :          CASE (no_admm_type)
     268         436 :             CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%ADMM_PURIFICATION_METHOD", i_val=method_id)
     269         436 :             dft_control%admm_control%purification_method = method_id
     270         436 :             CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%METHOD", i_val=method_id)
     271         436 :             dft_control%admm_control%method = method_id
     272         436 :             CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%EXCH_SCALING_MODEL", i_val=method_id)
     273         436 :             dft_control%admm_control%scaling_model = method_id
     274             :          CASE (admm1_type)
     275             :             ! METHOD BASIS_PROJECTION
     276             :             ! ADMM_PURIFICATION_METHOD choose
     277             :             ! EXCH_SCALING_MODEL NONE
     278           2 :             CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%ADMM_PURIFICATION_METHOD", i_val=method_id)
     279           2 :             dft_control%admm_control%purification_method = method_id
     280           2 :             dft_control%admm_control%method = do_admm_basis_projection
     281           2 :             dft_control%admm_control%scaling_model = do_admm_exch_scaling_none
     282             :          CASE (admm2_type)
     283             :             ! METHOD BASIS_PROJECTION
     284             :             ! ADMM_PURIFICATION_METHOD NONE
     285             :             ! EXCH_SCALING_MODEL NONE
     286           2 :             dft_control%admm_control%purification_method = do_admm_purify_none
     287           2 :             dft_control%admm_control%method = do_admm_basis_projection
     288           2 :             dft_control%admm_control%scaling_model = do_admm_exch_scaling_none
     289             :          CASE (admms_type)
     290             :             ! ADMM_PURIFICATION_METHOD NONE
     291             :             ! METHOD CHARGE_CONSTRAINED_PROJECTION
     292             :             ! EXCH_SCALING_MODEL MERLOT
     293           2 :             dft_control%admm_control%purification_method = do_admm_purify_none
     294           2 :             dft_control%admm_control%method = do_admm_charge_constrained_projection
     295           2 :             dft_control%admm_control%scaling_model = do_admm_exch_scaling_merlot
     296             :          CASE (admmp_type)
     297             :             ! ADMM_PURIFICATION_METHOD NONE
     298             :             ! METHOD BASIS_PROJECTION
     299             :             ! EXCH_SCALING_MODEL MERLOT
     300           2 :             dft_control%admm_control%purification_method = do_admm_purify_none
     301           2 :             dft_control%admm_control%method = do_admm_basis_projection
     302           2 :             dft_control%admm_control%scaling_model = do_admm_exch_scaling_merlot
     303             :          CASE (admmq_type)
     304             :             ! ADMM_PURIFICATION_METHOD NONE
     305             :             ! METHOD CHARGE_CONSTRAINED_PROJECTION
     306             :             ! EXCH_SCALING_MODEL NONE
     307           2 :             dft_control%admm_control%purification_method = do_admm_purify_none
     308           2 :             dft_control%admm_control%method = do_admm_charge_constrained_projection
     309           2 :             dft_control%admm_control%scaling_model = do_admm_exch_scaling_none
     310             :          CASE DEFAULT
     311             :             CALL cp_abort(__LOCATION__, &
     312         446 :                           "ADMM_TYPE keyword in &AUXILIARY_DENSITY_MATRIX_METHOD section has a wrong value.")
     313             :          END SELECT
     314             : 
     315             :          CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%EPS_FILTER", &
     316         446 :                                    r_val=dft_control%admm_control%eps_filter)
     317             : 
     318         446 :          CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%EXCH_CORRECTION_FUNC", i_val=method_id)
     319         446 :          dft_control%admm_control%aux_exch_func = method_id
     320             : 
     321             :          ! parameters for X functional
     322         446 :          dft_control%admm_control%aux_exch_func_param = .FALSE.
     323             :          CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%OPTX_A1", explicit=explicit, &
     324         446 :                                    r_val=dft_control%admm_control%aux_x_param(1))
     325         446 :          IF (explicit) dft_control%admm_control%aux_exch_func_param = .TRUE.
     326             :          CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%OPTX_A2", explicit=explicit, &
     327         446 :                                    r_val=dft_control%admm_control%aux_x_param(2))
     328         446 :          IF (explicit) dft_control%admm_control%aux_exch_func_param = .TRUE.
     329             :          CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%OPTX_GAMMA", explicit=explicit, &
     330         446 :                                    r_val=dft_control%admm_control%aux_x_param(3))
     331         446 :          IF (explicit) dft_control%admm_control%aux_exch_func_param = .TRUE.
     332             : 
     333         446 :          CALL read_admm_block_list(dft_control%admm_control, dft_section)
     334             : 
     335             :          ! check for double assignments
     336           2 :          SELECT CASE (admmtype)
     337             :          CASE (admm2_type)
     338           2 :             IF (exopt2) CALL cp_warn(__LOCATION__, &
     339           0 :                                      "Value of ADMM_PURIFICATION_METHOD keyword will be overwritten with ADMM_TYPE selections.")
     340           2 :             IF (exopt3) CALL cp_warn(__LOCATION__, &
     341           0 :                                      "Value of EXCH_SCALING_MODEL keyword will be overwritten with ADMM_TYPE selections.")
     342             :          CASE (admm1_type, admms_type, admmp_type, admmq_type)
     343           8 :             IF (exopt1) CALL cp_warn(__LOCATION__, &
     344           0 :                                      "Value of METHOD keyword will be overwritten with ADMM_TYPE selections.")
     345           8 :             IF (exopt2) CALL cp_warn(__LOCATION__, &
     346           0 :                                      "Value of METHOD keyword will be overwritten with ADMM_TYPE selections.")
     347           8 :             IF (exopt3) CALL cp_warn(__LOCATION__, &
     348         446 :                                      "Value of EXCH_SCALING_MODEL keyword will be overwritten with ADMM_TYPE selections.")
     349             :          END SELECT
     350             : 
     351             :          !    In the case of charge-constrained projection (e.g. according to Merlot),
     352             :          !    there is no purification needed and hence, do_admm_purify_none has to be set.
     353             : 
     354             :          IF ((dft_control%admm_control%method == do_admm_blocking_purify_full .OR. &
     355             :               dft_control%admm_control%method == do_admm_blocked_projection) &
     356         446 :              .AND. dft_control%admm_control%scaling_model == do_admm_exch_scaling_merlot) THEN
     357           0 :             CPABORT("ADMM: Blocking and Merlot scaling are mutually exclusive.")
     358             :          END IF
     359             : 
     360         446 :          IF (dft_control%admm_control%method == do_admm_charge_constrained_projection .AND. &
     361             :              dft_control%admm_control%purification_method /= do_admm_purify_none) THEN
     362             :             CALL cp_abort(__LOCATION__, &
     363             :                           "ADMM: In the case of METHOD=CHARGE_CONSTRAINED_PROJECTION, "// &
     364           0 :                           "ADMM_PURIFICATION_METHOD=NONE has to be set.")
     365             :          END IF
     366             : 
     367         446 :          IF (dft_control%admm_control%purification_method == do_admm_purify_mo_diag .OR. &
     368             :              dft_control%admm_control%purification_method == do_admm_purify_mo_no_diag) THEN
     369          60 :             IF (dft_control%admm_control%method /= do_admm_basis_projection) &
     370           0 :                CPABORT("ADMM: Chosen purification requires BASIS_PROJECTION")
     371             : 
     372          60 :             IF (.NOT. do_ot) CPABORT("ADMM: MO-based purification requires OT.")
     373             :          END IF
     374             : 
     375         446 :          IF (dft_control%admm_control%purification_method == do_admm_purify_none_dm .OR. &
     376             :              dft_control%admm_control%purification_method == do_admm_purify_mcweeny) THEN
     377          14 :             dft_control%do_admm_dm = .TRUE.
     378             :          ELSE
     379         432 :             dft_control%do_admm_mo = .TRUE.
     380             :          END IF
     381             :       END IF
     382             : 
     383             :       ! Set restricted to true, if both OT and ROKS are requested
     384             :       !MK in principle dft_control%restricted could be dropped completely like the
     385             :       !MK input key by using only dft_control%roks now
     386        7354 :       CALL section_vals_val_get(scf_section, "OT%_SECTION_PARAMETERS_", l_val=l_param)
     387        7354 :       dft_control%restricted = (dft_control%roks .AND. l_param)
     388             : 
     389        7354 :       CALL section_vals_val_get(dft_section, "CHARGE", i_val=dft_control%charge)
     390        7354 :       CALL section_vals_val_get(dft_section, "MULTIPLICITY", i_val=dft_control%multiplicity)
     391        7354 :       CALL section_vals_val_get(dft_section, "RELAX_MULTIPLICITY", r_val=dft_control%relax_multiplicity)
     392        7354 :       IF (dft_control%relax_multiplicity > 0.0_dp) THEN
     393           8 :          IF (.NOT. dft_control%uks) &
     394             :             CALL cp_abort(__LOCATION__, "The option RELAX_MULTIPLICITY is only valid for "// &
     395           0 :                           "unrestricted Kohn-Sham (UKS) calculations")
     396             :       END IF
     397             : 
     398             :       !Read the HAIR PROBES input section if present
     399        7354 :       hairy_probes_section => section_vals_get_subs_vals(dft_section, "HAIRY_PROBES")
     400        7354 :       CALL section_vals_get(hairy_probes_section, n_repetition=nrep, explicit=is_present)
     401             : 
     402        7354 :       IF (is_present) THEN
     403           4 :          dft_control%hairy_probes = .TRUE.
     404          20 :          ALLOCATE (dft_control%probe(nrep))
     405           4 :          CALL read_hairy_probes_sections(dft_control, hairy_probes_section)
     406             :       END IF
     407             : 
     408             :       ! check for the presence of the low spin roks section
     409        7354 :       tmp_section => section_vals_get_subs_vals(dft_section, "LOW_SPIN_ROKS")
     410        7354 :       CALL section_vals_get(tmp_section, explicit=dft_control%low_spin_roks)
     411             : 
     412        7354 :       dft_control%sic_method_id = sic_none
     413        7354 :       dft_control%sic_scaling_a = 1.0_dp
     414        7354 :       dft_control%sic_scaling_b = 1.0_dp
     415             : 
     416             :       ! DFT+U
     417        7354 :       dft_control%dft_plus_u = .FALSE.
     418        7354 :       CALL section_vals_val_get(dft_section, "PLUS_U_METHOD", i_val=method_id)
     419        7354 :       dft_control%plus_u_method_id = method_id
     420             : 
     421             :       ! Smearing in use
     422        7354 :       dft_control%smear = .FALSE.
     423             : 
     424             :       ! Surface dipole correction
     425        7354 :       dft_control%correct_surf_dip = .FALSE.
     426        7354 :       CALL section_vals_val_get(dft_section, "SURFACE_DIPOLE_CORRECTION", l_val=dft_control%correct_surf_dip)
     427        7354 :       CALL section_vals_val_get(dft_section, "SURF_DIP_DIR", i_val=dft_control%dir_surf_dip)
     428        7354 :       dft_control%pos_dir_surf_dip = -1.0_dp
     429        7354 :       CALL section_vals_val_get(dft_section, "SURF_DIP_POS", r_val=dft_control%pos_dir_surf_dip)
     430             :       ! another logical variable, surf_dip_correct_switch, is introduced for
     431             :       ! implementation of "SURF_DIP_SWITCH" [SGh]
     432        7354 :       dft_control%switch_surf_dip = .FALSE.
     433        7354 :       dft_control%surf_dip_correct_switch = dft_control%correct_surf_dip
     434        7354 :       CALL section_vals_val_get(dft_section, "SURF_DIP_SWITCH", l_val=dft_control%switch_surf_dip)
     435        7354 :       dft_control%correct_el_density_dip = .FALSE.
     436        7354 :       CALL section_vals_val_get(dft_section, "CORE_CORR_DIP", l_val=dft_control%correct_el_density_dip)
     437        7354 :       IF (dft_control%correct_el_density_dip) THEN
     438           4 :          IF (dft_control%correct_surf_dip) THEN
     439             :             ! Do nothing, move on
     440             :          ELSE
     441           0 :             dft_control%correct_el_density_dip = .FALSE.
     442           0 :             CPWARN("CORE_CORR_DIP keyword is activated only if SURFACE_DIPOLE_CORRECTION is TRUE")
     443             :          END IF
     444             :       END IF
     445             : 
     446             :       CALL section_vals_val_get(dft_section, "BASIS_SET_FILE_NAME", &
     447        7354 :                                 c_val=basis_set_file_name)
     448             :       CALL section_vals_val_get(dft_section, "POTENTIAL_FILE_NAME", &
     449        7354 :                                 c_val=potential_file_name)
     450             : 
     451             :       ! Read the input section
     452        7354 :       tmp_section => section_vals_get_subs_vals(dft_section, "sic")
     453             :       CALL section_vals_val_get(tmp_section, "SIC_METHOD", &
     454        7354 :                                 i_val=dft_control%sic_method_id)
     455             :       CALL section_vals_val_get(tmp_section, "ORBITAL_SET", &
     456        7354 :                                 i_val=dft_control%sic_list_id)
     457             :       CALL section_vals_val_get(tmp_section, "SIC_SCALING_A", &
     458        7354 :                                 r_val=dft_control%sic_scaling_a)
     459             :       CALL section_vals_val_get(tmp_section, "SIC_SCALING_B", &
     460        7354 :                                 r_val=dft_control%sic_scaling_b)
     461             : 
     462        7354 :       do_rtp = .FALSE.
     463        7354 :       tmp_section => section_vals_get_subs_vals(dft_section, "REAL_TIME_PROPAGATION")
     464        7354 :       CALL section_vals_get(tmp_section, explicit=is_present)
     465        7354 :       IF (is_present) THEN
     466         248 :          CALL read_rtp_section(dft_control, tmp_section)
     467         248 :          do_rtp = .TRUE.
     468             :       END IF
     469             : 
     470             :       ! Read the input section
     471        7354 :       tmp_section => section_vals_get_subs_vals(dft_section, "XAS")
     472        7354 :       CALL section_vals_get(tmp_section, explicit=dft_control%do_xas_calculation)
     473        7354 :       IF (dft_control%do_xas_calculation) THEN
     474             :          ! Override with section parameter
     475             :          CALL section_vals_val_get(tmp_section, "_SECTION_PARAMETERS_", &
     476          42 :                                    l_val=dft_control%do_xas_calculation)
     477             :       END IF
     478             : 
     479        7354 :       tmp_section => section_vals_get_subs_vals(dft_section, "XAS_TDP")
     480        7354 :       CALL section_vals_get(tmp_section, explicit=dft_control%do_xas_tdp_calculation)
     481        7354 :       IF (dft_control%do_xas_tdp_calculation) THEN
     482             :          ! Override with section parameter
     483             :          CALL section_vals_val_get(tmp_section, "_SECTION_PARAMETERS_", &
     484          50 :                                    l_val=dft_control%do_xas_tdp_calculation)
     485             :       END IF
     486             : 
     487             :       ! Read the finite field input section
     488        7354 :       dft_control%apply_efield = .FALSE.
     489        7354 :       dft_control%apply_efield_field = .FALSE. !this is for RTP
     490        7354 :       dft_control%apply_vector_potential = .FALSE. !this is for RTP
     491        7354 :       tmp_section => section_vals_get_subs_vals(dft_section, "EFIELD")
     492        7354 :       CALL section_vals_get(tmp_section, n_repetition=nrep, explicit=is_present)
     493        7354 :       IF (is_present) THEN
     494        1048 :          ALLOCATE (dft_control%efield_fields(nrep))
     495         262 :          CALL read_efield_sections(dft_control, tmp_section)
     496         262 :          IF (do_rtp) THEN
     497          22 :             IF (.NOT. dft_control%rtp_control%velocity_gauge) THEN
     498          14 :                dft_control%apply_efield_field = .TRUE.
     499             :             ELSE
     500           8 :                dft_control%apply_vector_potential = .TRUE.
     501             :                ! Use this input value of vector potential to (re)start RTP
     502          32 :                dft_control%rtp_control%vec_pot = dft_control%efield_fields(1)%efield%vec_pot_initial
     503             :             END IF
     504             :          ELSE
     505         240 :             dft_control%apply_efield = .TRUE.
     506         240 :             CPASSERT(nrep == 1)
     507             :          END IF
     508             :       END IF
     509             : 
     510             :       ! Read the finite field input section for periodic fields
     511        7354 :       tmp_section => section_vals_get_subs_vals(dft_section, "PERIODIC_EFIELD")
     512        7354 :       CALL section_vals_get(tmp_section, explicit=dft_control%apply_period_efield)
     513        7354 :       IF (dft_control%apply_period_efield) THEN
     514         532 :          ALLOCATE (dft_control%period_efield)
     515          76 :          CALL section_vals_val_get(tmp_section, "POLARISATION", r_vals=pol)
     516         532 :          dft_control%period_efield%polarisation(1:3) = pol(1:3)
     517          76 :          CALL section_vals_val_get(tmp_section, "D_FILTER", r_vals=pol)
     518         532 :          dft_control%period_efield%d_filter(1:3) = pol(1:3)
     519             :          CALL section_vals_val_get(tmp_section, "INTENSITY", &
     520          76 :                                    r_val=dft_control%period_efield%strength)
     521          76 :          dft_control%period_efield%displacement_field = .FALSE.
     522             :          CALL section_vals_val_get(tmp_section, "DISPLACEMENT_FIELD", &
     523          76 :                                    l_val=dft_control%period_efield%displacement_field)
     524             : 
     525          76 :          CALL section_vals_val_get(tmp_section, "INTENSITY_LIST", r_vals=pol)
     526             : 
     527          76 :          CALL section_vals_val_get(tmp_section, "INTENSITIES_FILE_NAME", c_val=intensities_file_name)
     528             : 
     529          76 :          IF (SIZE(pol) > 1 .OR. pol(1) /= 0.0_dp) THEN
     530             :             ! if INTENSITY_LIST is present, INTENSITY and INTENSITIES_FILE_NAME must not be present
     531           2 :             IF (dft_control%period_efield%strength /= 0.0_dp .OR. intensities_file_name /= "") THEN
     532             :                CALL cp_abort(__LOCATION__, "[PERIODIC FIELD] Only one of INTENSITY, INTENSITY_LIST "// &
     533           0 :                              "or INTENSITIES_FILE_NAME can be specified.")
     534             :             END IF
     535             : 
     536           6 :             ALLOCATE (dft_control%period_efield%strength_list(SIZE(pol)))
     537          50 :             dft_control%period_efield%strength_list(1:SIZE(pol)) = pol(1:SIZE(pol))
     538             :          END IF
     539             : 
     540          76 :          IF (intensities_file_name /= "") THEN
     541             :             ! if INTENSITIES_FILE_NAME is present, INTENSITY must not be present
     542           2 :             IF (dft_control%period_efield%strength /= 0.0_dp) THEN
     543             :                CALL cp_abort(__LOCATION__, "[PERIODIC FIELD] Only one of INTENSITY, INTENSITY_LIST "// &
     544           0 :                              "or INTENSITIES_FILE_NAME can be specified.")
     545             :             END IF
     546             : 
     547           2 :             CALL parser_create(parser, intensities_file_name)
     548             : 
     549           2 :             nrep = 0
     550          24 :             DO WHILE (.TRUE.)
     551          26 :                CALL parser_read_line(parser, 1, at_end)
     552          26 :                IF (at_end) EXIT
     553          24 :                nrep = nrep + 1
     554             :             END DO
     555             : 
     556           2 :             IF (nrep == 0) THEN
     557           0 :                CPABORT("[PERIODIC FIELD] No intensities found in INTENSITIES_FILE_NAME")
     558             :             END IF
     559             : 
     560           6 :             ALLOCATE (dft_control%period_efield%strength_list(nrep))
     561             : 
     562           2 :             CALL parser_reset(parser)
     563          26 :             DO irep = 1, nrep
     564          24 :                CALL parser_read_line(parser, 1)
     565          26 :                READ (parser%input_line, *) dft_control%period_efield%strength_list(irep)
     566             :             END DO
     567             : 
     568           4 :             CALL parser_release(parser)
     569             :          END IF
     570             : 
     571             :          CALL section_vals_val_get(tmp_section, "START_FRAME", &
     572          76 :                                    i_val=dft_control%period_efield%start_frame)
     573             :          CALL section_vals_val_get(tmp_section, "END_FRAME", &
     574          76 :                                    i_val=dft_control%period_efield%end_frame)
     575             : 
     576          76 :          IF (dft_control%period_efield%end_frame /= -1) THEN
     577             :             ! check if valid bounds are given
     578             :             ! if an end frame is given, the number of active frames must be a
     579             :             ! multiple of the number of intensities
     580           4 :             IF (dft_control%period_efield%start_frame > dft_control%period_efield%end_frame) THEN
     581           0 :                CPABORT("[PERIODIC FIELD] START_FRAME > END_FRAME")
     582           4 :             ELSE IF (dft_control%period_efield%start_frame < 1) THEN
     583           0 :                CPABORT("[PERIODIC FIELD] START_FRAME < 1")
     584           4 :             ELSE IF (MOD(dft_control%period_efield%end_frame - &
     585             :                          dft_control%period_efield%start_frame + 1, SIZE(pol)) /= 0) THEN
     586             :                CALL cp_abort(__LOCATION__, &
     587           0 :                              "[PERIODIC FIELD] Number of active frames must be a multiple of the number of intensities")
     588             :             END IF
     589             :          END IF
     590             : 
     591             :          ! periodic fields don't work with RTP
     592          76 :          CPASSERT(.NOT. do_rtp)
     593          76 :          IF (dft_control%period_efield%displacement_field) THEN
     594          16 :             CALL cite_reference(Stengel2009)
     595             :          ELSE
     596          60 :             CALL cite_reference(Souza2002)
     597          60 :             CALL cite_reference(Umari2002)
     598             :          END IF
     599             :       END IF
     600             : 
     601             :       ! Read the external potential input section
     602        7354 :       tmp_section => section_vals_get_subs_vals(dft_section, "EXTERNAL_POTENTIAL")
     603        7354 :       CALL section_vals_get(tmp_section, explicit=dft_control%apply_external_potential)
     604        7354 :       IF (dft_control%apply_external_potential) THEN
     605          16 :          CALL expot_control_create(dft_control%expot_control)
     606             :          CALL section_vals_val_get(tmp_section, "READ_FROM_CUBE", &
     607          16 :                                    l_val=dft_control%expot_control%read_from_cube)
     608             :          CALL section_vals_val_get(tmp_section, "STATIC", &
     609          16 :                                    l_val=dft_control%expot_control%static)
     610             :          CALL section_vals_val_get(tmp_section, "SCALING_FACTOR", &
     611          16 :                                    r_val=dft_control%expot_control%scaling_factor)
     612             :          ! External potential using Maxwell equation
     613          16 :          maxwell_section => section_vals_get_subs_vals(tmp_section, "MAXWELL")
     614          16 :          CALL section_vals_get(maxwell_section, explicit=is_present)
     615          16 :          IF (is_present) THEN
     616           0 :             dft_control%expot_control%maxwell_solver = .TRUE.
     617           0 :             CALL maxwell_control_create(dft_control%maxwell_control)
     618             :             ! read the input values from Maxwell section
     619             :             CALL section_vals_val_get(maxwell_section, "TEST_REAL", &
     620           0 :                                       r_val=dft_control%maxwell_control%real_test)
     621             :             CALL section_vals_val_get(maxwell_section, "TEST_INTEGER", &
     622           0 :                                       i_val=dft_control%maxwell_control%int_test)
     623             :             CALL section_vals_val_get(maxwell_section, "TEST_LOGICAL", &
     624           0 :                                       l_val=dft_control%maxwell_control%log_test)
     625             :          ELSE
     626          16 :             dft_control%expot_control%maxwell_solver = .FALSE.
     627             :          END IF
     628             :       END IF
     629             : 
     630             :       ! Read the SCCS input section if present
     631        7354 :       sccs_section => section_vals_get_subs_vals(dft_section, "SCCS")
     632        7354 :       CALL section_vals_get(sccs_section, explicit=is_present)
     633        7354 :       IF (is_present) THEN
     634             :          ! Check section parameter if SCCS is activated
     635             :          CALL section_vals_val_get(sccs_section, "_SECTION_PARAMETERS_", &
     636          10 :                                    l_val=dft_control%do_sccs)
     637          10 :          IF (dft_control%do_sccs) THEN
     638          10 :             ALLOCATE (dft_control%sccs_control)
     639             :             CALL section_vals_val_get(sccs_section, "RELATIVE_PERMITTIVITY", &
     640          10 :                                       r_val=dft_control%sccs_control%epsilon_solvent)
     641             :             CALL section_vals_val_get(sccs_section, "ALPHA", &
     642          10 :                                       r_val=dft_control%sccs_control%alpha_solvent)
     643             :             CALL section_vals_val_get(sccs_section, "BETA", &
     644          10 :                                       r_val=dft_control%sccs_control%beta_solvent)
     645             :             CALL section_vals_val_get(sccs_section, "DELTA_RHO", &
     646          10 :                                       r_val=dft_control%sccs_control%delta_rho)
     647             :             CALL section_vals_val_get(sccs_section, "DERIVATIVE_METHOD", &
     648          10 :                                       i_val=dft_control%sccs_control%derivative_method)
     649             :             CALL section_vals_val_get(sccs_section, "METHOD", &
     650          10 :                                       i_val=dft_control%sccs_control%method_id)
     651             :             CALL section_vals_val_get(sccs_section, "EPS_SCCS", &
     652          10 :                                       r_val=dft_control%sccs_control%eps_sccs)
     653             :             CALL section_vals_val_get(sccs_section, "EPS_SCF", &
     654          10 :                                       r_val=dft_control%sccs_control%eps_scf)
     655             :             CALL section_vals_val_get(sccs_section, "GAMMA", &
     656          10 :                                       r_val=dft_control%sccs_control%gamma_solvent)
     657             :             CALL section_vals_val_get(sccs_section, "MAX_ITER", &
     658          10 :                                       i_val=dft_control%sccs_control%max_iter)
     659             :             CALL section_vals_val_get(sccs_section, "MIXING", &
     660          10 :                                       r_val=dft_control%sccs_control%mixing)
     661          18 :             SELECT CASE (dft_control%sccs_control%method_id)
     662             :             CASE (sccs_andreussi)
     663           8 :                tmp_section => section_vals_get_subs_vals(sccs_section, "ANDREUSSI")
     664             :                CALL section_vals_val_get(tmp_section, "RHO_MAX", &
     665           8 :                                          r_val=dft_control%sccs_control%rho_max)
     666             :                CALL section_vals_val_get(tmp_section, "RHO_MIN", &
     667           8 :                                          r_val=dft_control%sccs_control%rho_min)
     668           8 :                IF (dft_control%sccs_control%rho_max < dft_control%sccs_control%rho_min) THEN
     669             :                   CALL cp_abort(__LOCATION__, &
     670             :                                 "The SCCS parameter RHO_MAX is smaller than RHO_MIN. "// &
     671           0 :                                 "Please, check your input!")
     672             :                END IF
     673           8 :                CALL cite_reference(Andreussi2012)
     674             :             CASE (sccs_fattebert_gygi)
     675           2 :                tmp_section => section_vals_get_subs_vals(sccs_section, "FATTEBERT-GYGI")
     676             :                CALL section_vals_val_get(tmp_section, "BETA", &
     677           2 :                                          r_val=dft_control%sccs_control%beta)
     678           2 :                IF (dft_control%sccs_control%beta < 0.5_dp) THEN
     679             :                   CALL cp_abort(__LOCATION__, &
     680             :                                 "A value smaller than 0.5 for the SCCS parameter beta "// &
     681           0 :                                 "causes numerical problems. Please, check your input!")
     682             :                END IF
     683             :                CALL section_vals_val_get(tmp_section, "RHO_ZERO", &
     684           2 :                                          r_val=dft_control%sccs_control%rho_zero)
     685           2 :                CALL cite_reference(Fattebert2002)
     686             :             CASE DEFAULT
     687          10 :                CPABORT("Invalid SCCS model specified. Please, check your input!")
     688             :             END SELECT
     689          10 :             CALL cite_reference(Yin2017)
     690             :          END IF
     691             :       END IF
     692             : 
     693             :       ! ZMP added input sections
     694             :       ! Read the external density input section
     695        7354 :       tmp_section => section_vals_get_subs_vals(dft_section, "EXTERNAL_DENSITY")
     696        7354 :       CALL section_vals_get(tmp_section, explicit=dft_control%apply_external_density)
     697             : 
     698             :       ! Read the external vxc input section
     699        7354 :       tmp_section => section_vals_get_subs_vals(dft_section, "EXTERNAL_VXC")
     700        7354 :       CALL section_vals_get(tmp_section, explicit=dft_control%apply_external_vxc)
     701             : 
     702             :       ! SMEAGOL interface
     703        7354 :       tmp_section => section_vals_get_subs_vals(dft_section, "SMEAGOL")
     704        7354 :       CALL read_smeagol_control(dft_control%smeagol_control, tmp_section)
     705             : 
     706       22062 :    END SUBROUTINE read_dft_control
     707             : 
     708             : ! **************************************************************************************************
     709             : !> \brief ...
     710             : !> \param qs_control ...
     711             : !> \param dft_section ...
     712             : ! **************************************************************************************************
     713        7354 :    SUBROUTINE read_mgrid_section(qs_control, dft_section)
     714             : 
     715             :       TYPE(qs_control_type), INTENT(INOUT)               :: qs_control
     716             :       TYPE(section_vals_type), POINTER                   :: dft_section
     717             : 
     718             :       CHARACTER(len=*), PARAMETER :: routineN = 'read_mgrid_section'
     719             : 
     720             :       INTEGER                                            :: handle, igrid_level, ngrid_level
     721             :       LOGICAL                                            :: explicit, multigrid_set
     722             :       REAL(dp)                                           :: cutoff
     723        7354 :       REAL(dp), DIMENSION(:), POINTER                    :: cutofflist
     724             :       TYPE(section_vals_type), POINTER                   :: mgrid_section
     725             : 
     726        7354 :       CALL timeset(routineN, handle)
     727             : 
     728        7354 :       NULLIFY (mgrid_section, cutofflist)
     729        7354 :       mgrid_section => section_vals_get_subs_vals(dft_section, "MGRID")
     730             : 
     731        7354 :       CALL section_vals_val_get(mgrid_section, "NGRIDS", i_val=ngrid_level)
     732        7354 :       CALL section_vals_val_get(mgrid_section, "MULTIGRID_SET", l_val=multigrid_set)
     733        7354 :       CALL section_vals_val_get(mgrid_section, "CUTOFF", r_val=cutoff)
     734        7354 :       CALL section_vals_val_get(mgrid_section, "PROGRESSION_FACTOR", r_val=qs_control%progression_factor)
     735        7354 :       CALL section_vals_val_get(mgrid_section, "COMMENSURATE", l_val=qs_control%commensurate_mgrids)
     736        7354 :       CALL section_vals_val_get(mgrid_section, "REALSPACE", l_val=qs_control%realspace_mgrids)
     737        7354 :       CALL section_vals_val_get(mgrid_section, "REL_CUTOFF", r_val=qs_control%relative_cutoff)
     738             :       CALL section_vals_val_get(mgrid_section, "SKIP_LOAD_BALANCE_DISTRIBUTED", &
     739        7354 :                                 l_val=qs_control%skip_load_balance_distributed)
     740             : 
     741             :       ! For SE and DFTB possibly override with new defaults
     742        7354 :       IF (qs_control%semi_empirical .OR. qs_control%dftb .OR. qs_control%xtb) THEN
     743        2186 :          ngrid_level = 1
     744        2186 :          multigrid_set = .FALSE.
     745             :          ! Override default cutoff value unless user specified an explicit argument..
     746        2186 :          CALL section_vals_val_get(mgrid_section, "CUTOFF", explicit=explicit, r_val=cutoff)
     747        2186 :          IF (.NOT. explicit) cutoff = 1.0_dp
     748             :       END IF
     749             : 
     750       22062 :       ALLOCATE (qs_control%e_cutoff(ngrid_level))
     751        7354 :       qs_control%cutoff = cutoff
     752             : 
     753        7354 :       IF (multigrid_set) THEN
     754             :          ! Read the values from input
     755           4 :          IF (qs_control%commensurate_mgrids) THEN
     756           0 :             CPABORT("Do not specify cutoffs for the commensurate grids (NYI)")
     757             :          END IF
     758             : 
     759           4 :          CALL section_vals_val_get(mgrid_section, "MULTIGRID_CUTOFF", r_vals=cutofflist)
     760           4 :          IF (ASSOCIATED(cutofflist)) THEN
     761           4 :             IF (SIZE(cutofflist, 1) /= ngrid_level) THEN
     762           0 :                CPABORT("Number of multi-grids requested and number of cutoff values do not match")
     763             :             END IF
     764          20 :             DO igrid_level = 1, ngrid_level
     765          20 :                qs_control%e_cutoff(igrid_level) = cutofflist(igrid_level)
     766             :             END DO
     767             :          END IF
     768             :          ! set cutoff to smallest value in multgrid available with >= cutoff
     769          20 :          DO igrid_level = ngrid_level, 1, -1
     770          16 :             IF (qs_control%cutoff <= qs_control%e_cutoff(igrid_level)) THEN
     771           0 :                qs_control%cutoff = qs_control%e_cutoff(igrid_level)
     772           0 :                EXIT
     773             :             END IF
     774             :             ! set largest grid value to cutoff
     775          20 :             IF (igrid_level == 1) THEN
     776           4 :                qs_control%cutoff = qs_control%e_cutoff(1)
     777             :             END IF
     778             :          END DO
     779             :       ELSE
     780        7350 :          IF (qs_control%commensurate_mgrids) qs_control%progression_factor = 4.0_dp
     781        7350 :          qs_control%e_cutoff(1) = qs_control%cutoff
     782       22712 :          DO igrid_level = 2, ngrid_level
     783             :             qs_control%e_cutoff(igrid_level) = qs_control%e_cutoff(igrid_level - 1)/ &
     784       22712 :                                                qs_control%progression_factor
     785             :          END DO
     786             :       END IF
     787             :       ! check that multigrids are ordered
     788       22728 :       DO igrid_level = 2, ngrid_level
     789       22728 :          IF (qs_control%e_cutoff(igrid_level) > qs_control%e_cutoff(igrid_level - 1)) THEN
     790           0 :             CPABORT("The cutoff values for the multi-grids are not ordered from large to small")
     791       15374 :          ELSE IF (qs_control%e_cutoff(igrid_level) == qs_control%e_cutoff(igrid_level - 1)) THEN
     792           0 :             CPABORT("The same cutoff value was specified for two multi-grids")
     793             :          END IF
     794             :       END DO
     795        7354 :       CALL timestop(handle)
     796       14708 :    END SUBROUTINE read_mgrid_section
     797             : 
     798             : ! **************************************************************************************************
     799             : !> \brief ...
     800             : !> \param qs_control ...
     801             : !> \param qs_section ...
     802             : ! **************************************************************************************************
     803      117664 :    SUBROUTINE read_qs_section(qs_control, qs_section)
     804             : 
     805             :       TYPE(qs_control_type), INTENT(INOUT)               :: qs_control
     806             :       TYPE(section_vals_type), POINTER                   :: qs_section
     807             : 
     808             :       CHARACTER(len=*), PARAMETER                        :: routineN = 'read_qs_section'
     809             : 
     810             :       CHARACTER(LEN=default_string_length)               :: cval
     811             :       CHARACTER(LEN=default_string_length), &
     812        7354 :          DIMENSION(:), POINTER                           :: clist
     813             :       INTEGER                                            :: handle, itmp, j, jj, k, n_rep, n_var, &
     814             :                                                             ngauss, ngp, nrep
     815        7354 :       INTEGER, DIMENSION(:), POINTER                     :: tmplist
     816             :       LOGICAL                                            :: explicit, was_present
     817             :       REAL(dp)                                           :: tmp, tmpsqrt, value
     818        7354 :       REAL(dp), POINTER                                  :: scal(:)
     819             :       TYPE(section_vals_type), POINTER :: cdft_control_section, ddapc_restraint_section, &
     820             :          dftb_parameter, dftb_section, eeq_section, genpot_section, lri_optbas_section, &
     821             :          mull_section, nonbonded_section, s2_restraint_section, se_section, xtb_parameter, &
     822             :          xtb_section, xtb_tblite
     823             : 
     824        7354 :       CALL timeset(routineN, handle)
     825             : 
     826        7354 :       was_present = .FALSE.
     827        7354 :       NULLIFY (mull_section, ddapc_restraint_section, s2_restraint_section, &
     828        7354 :                se_section, dftb_section, xtb_section, dftb_parameter, xtb_parameter, lri_optbas_section, &
     829        7354 :                cdft_control_section, genpot_section, eeq_section)
     830             : 
     831        7354 :       mull_section => section_vals_get_subs_vals(qs_section, "MULLIKEN_RESTRAINT")
     832        7354 :       ddapc_restraint_section => section_vals_get_subs_vals(qs_section, "DDAPC_RESTRAINT")
     833        7354 :       s2_restraint_section => section_vals_get_subs_vals(qs_section, "S2_RESTRAINT")
     834        7354 :       se_section => section_vals_get_subs_vals(qs_section, "SE")
     835        7354 :       dftb_section => section_vals_get_subs_vals(qs_section, "DFTB")
     836        7354 :       xtb_section => section_vals_get_subs_vals(qs_section, "xTB")
     837        7354 :       dftb_parameter => section_vals_get_subs_vals(dftb_section, "PARAMETER")
     838        7354 :       xtb_parameter => section_vals_get_subs_vals(xtb_section, "PARAMETER")
     839        7354 :       eeq_section => section_vals_get_subs_vals(xtb_section, "EEQ")
     840        7354 :       lri_optbas_section => section_vals_get_subs_vals(qs_section, "OPTIMIZE_LRI_BASIS")
     841        7354 :       cdft_control_section => section_vals_get_subs_vals(qs_section, "CDFT")
     842        7354 :       nonbonded_section => section_vals_get_subs_vals(xtb_section, "NONBONDED")
     843        7354 :       genpot_section => section_vals_get_subs_vals(nonbonded_section, "GENPOT")
     844        7354 :       xtb_tblite => section_vals_get_subs_vals(xtb_section, "TBLITE")
     845             : 
     846             :       ! Setup all defaults values and overwrite input parameters
     847             :       ! EPS_DEFAULT should set the target accuracy in the total energy (~per electron) or a closely related value
     848        7354 :       CALL section_vals_val_get(qs_section, "EPS_DEFAULT", r_val=value)
     849        7354 :       tmpsqrt = SQRT(value) ! a trick to work around a NAG 5.1 optimizer bug
     850             : 
     851             :       ! random choice ?
     852        7354 :       qs_control%eps_core_charge = value/100.0_dp
     853             :       ! correct if all Gaussians would have the same radius (overlap will be smaller than eps_pgf_orb**2).
     854             :       ! Can be significantly in error if not... requires fully new screening/pairlist procedures
     855        7354 :       qs_control%eps_pgf_orb = tmpsqrt
     856        7354 :       qs_control%eps_kg_orb = qs_control%eps_pgf_orb
     857             :       ! consistent since also a kind of overlap
     858        7354 :       qs_control%eps_ppnl = qs_control%eps_pgf_orb/100.0_dp
     859             :       ! accuracy is basically set by the overlap, this sets an empirical shift
     860        7354 :       qs_control%eps_ppl = 1.0E-2_dp
     861             :       !
     862        7354 :       qs_control%gapw_control%eps_cpc = value
     863             :       ! expexted error in the density
     864        7354 :       qs_control%eps_rho_gspace = value
     865        7354 :       qs_control%eps_rho_rspace = value
     866             :       ! error in the gradient, can be the sqrt of the error in the energy, ignored if map_consistent
     867        7354 :       qs_control%eps_gvg_rspace = tmpsqrt
     868             :       !
     869        7354 :       CALL section_vals_val_get(qs_section, "EPS_CORE_CHARGE", n_rep_val=n_rep)
     870        7354 :       IF (n_rep /= 0) THEN
     871           0 :          CALL section_vals_val_get(qs_section, "EPS_CORE_CHARGE", r_val=qs_control%eps_core_charge)
     872             :       END IF
     873        7354 :       CALL section_vals_val_get(qs_section, "EPS_GVG_RSPACE", n_rep_val=n_rep)
     874        7354 :       IF (n_rep /= 0) THEN
     875         132 :          CALL section_vals_val_get(qs_section, "EPS_GVG_RSPACE", r_val=qs_control%eps_gvg_rspace)
     876             :       END IF
     877        7354 :       CALL section_vals_val_get(qs_section, "EPS_PGF_ORB", n_rep_val=n_rep)
     878        7354 :       IF (n_rep /= 0) THEN
     879         600 :          CALL section_vals_val_get(qs_section, "EPS_PGF_ORB", r_val=qs_control%eps_pgf_orb)
     880             :       END IF
     881        7354 :       CALL section_vals_val_get(qs_section, "EPS_KG_ORB", n_rep_val=n_rep)
     882        7354 :       IF (n_rep /= 0) THEN
     883          62 :          CALL section_vals_val_get(qs_section, "EPS_KG_ORB", r_val=tmp)
     884          62 :          qs_control%eps_kg_orb = SQRT(tmp)
     885             :       END IF
     886        7354 :       CALL section_vals_val_get(qs_section, "EPS_PPL", n_rep_val=n_rep)
     887        7354 :       IF (n_rep /= 0) THEN
     888        7354 :          CALL section_vals_val_get(qs_section, "EPS_PPL", r_val=qs_control%eps_ppl)
     889             :       END IF
     890        7354 :       CALL section_vals_val_get(qs_section, "EPS_PPNL", n_rep_val=n_rep)
     891        7354 :       IF (n_rep /= 0) THEN
     892           0 :          CALL section_vals_val_get(qs_section, "EPS_PPNL", r_val=qs_control%eps_ppnl)
     893             :       END IF
     894        7354 :       CALL section_vals_val_get(qs_section, "EPS_RHO", n_rep_val=n_rep)
     895        7354 :       IF (n_rep /= 0) THEN
     896          30 :          CALL section_vals_val_get(qs_section, "EPS_RHO", r_val=qs_control%eps_rho_gspace)
     897          30 :          qs_control%eps_rho_rspace = qs_control%eps_rho_gspace
     898             :       END IF
     899        7354 :       CALL section_vals_val_get(qs_section, "EPS_RHO_RSPACE", n_rep_val=n_rep)
     900        7354 :       IF (n_rep /= 0) THEN
     901           2 :          CALL section_vals_val_get(qs_section, "EPS_RHO_RSPACE", r_val=qs_control%eps_rho_rspace)
     902             :       END IF
     903        7354 :       CALL section_vals_val_get(qs_section, "EPS_RHO_GSPACE", n_rep_val=n_rep)
     904        7354 :       IF (n_rep /= 0) THEN
     905           2 :          CALL section_vals_val_get(qs_section, "EPS_RHO_GSPACE", r_val=qs_control%eps_rho_gspace)
     906             :       END IF
     907        7354 :       CALL section_vals_val_get(qs_section, "EPS_FILTER_MATRIX", n_rep_val=n_rep)
     908        7354 :       IF (n_rep /= 0) THEN
     909        7354 :          CALL section_vals_val_get(qs_section, "EPS_FILTER_MATRIX", r_val=qs_control%eps_filter_matrix)
     910             :       END IF
     911        7354 :       CALL section_vals_val_get(qs_section, "EPS_CPC", n_rep_val=n_rep)
     912        7354 :       IF (n_rep /= 0) THEN
     913           0 :          CALL section_vals_val_get(qs_section, "EPS_CPC", r_val=qs_control%gapw_control%eps_cpc)
     914             :       END IF
     915             : 
     916        7354 :       CALL section_vals_val_get(qs_section, "EPSFIT", r_val=qs_control%gapw_control%eps_fit)
     917        7354 :       CALL section_vals_val_get(qs_section, "EPSISO", r_val=qs_control%gapw_control%eps_iso)
     918        7354 :       CALL section_vals_val_get(qs_section, "EPSSVD", r_val=qs_control%gapw_control%eps_svd)
     919        7354 :       CALL section_vals_val_get(qs_section, "EPSRHO0", r_val=qs_control%gapw_control%eps_Vrho0)
     920        7354 :       CALL section_vals_val_get(qs_section, "ALPHA0_HARD", r_val=qs_control%gapw_control%alpha0_hard)
     921        7354 :       qs_control%gapw_control%lrho1_eq_lrho0 = .FALSE.
     922        7354 :       qs_control%gapw_control%alpha0_hard_from_input = .FALSE.
     923        7354 :       IF (qs_control%gapw_control%alpha0_hard /= 0.0_dp) qs_control%gapw_control%alpha0_hard_from_input = .TRUE.
     924        7354 :       CALL section_vals_val_get(qs_section, "FORCE_PAW", l_val=qs_control%gapw_control%force_paw)
     925        7354 :       CALL section_vals_val_get(qs_section, "MAX_RAD_LOCAL", r_val=qs_control%gapw_control%max_rad_local)
     926             : 
     927        7354 :       CALL section_vals_val_get(qs_section, "MIN_PAIR_LIST_RADIUS", r_val=qs_control%pairlist_radius)
     928             : 
     929        7354 :       CALL section_vals_val_get(qs_section, "LS_SCF", l_val=qs_control%do_ls_scf)
     930        7354 :       CALL section_vals_val_get(qs_section, "ALMO_SCF", l_val=qs_control%do_almo_scf)
     931        7354 :       CALL section_vals_val_get(qs_section, "KG_METHOD", l_val=qs_control%do_kg)
     932             : 
     933             :       ! Logicals
     934        7354 :       CALL section_vals_val_get(qs_section, "REF_EMBED_SUBSYS", l_val=qs_control%ref_embed_subsys)
     935        7354 :       CALL section_vals_val_get(qs_section, "CLUSTER_EMBED_SUBSYS", l_val=qs_control%cluster_embed_subsys)
     936        7354 :       CALL section_vals_val_get(qs_section, "HIGH_LEVEL_EMBED_SUBSYS", l_val=qs_control%high_level_embed_subsys)
     937        7354 :       CALL section_vals_val_get(qs_section, "DFET_EMBEDDED", l_val=qs_control%dfet_embedded)
     938        7354 :       CALL section_vals_val_get(qs_section, "DMFET_EMBEDDED", l_val=qs_control%dmfet_embedded)
     939             : 
     940             :       ! Integers gapw
     941        7354 :       CALL section_vals_val_get(qs_section, "LMAXN1", i_val=qs_control%gapw_control%lmax_sphere)
     942        7354 :       CALL section_vals_val_get(qs_section, "LMAXN0", i_val=qs_control%gapw_control%lmax_rho0)
     943        7354 :       CALL section_vals_val_get(qs_section, "LADDN0", i_val=qs_control%gapw_control%ladd_rho0)
     944        7354 :       CALL section_vals_val_get(qs_section, "QUADRATURE", i_val=qs_control%gapw_control%quadrature)
     945             :       ! GAPW 1c basis
     946        7354 :       CALL section_vals_val_get(qs_section, "GAPW_1C_BASIS", i_val=qs_control%gapw_control%basis_1c)
     947        7354 :       IF (qs_control%gapw_control%basis_1c /= gapw_1c_orb) THEN
     948          18 :          qs_control%gapw_control%eps_svd = MAX(qs_control%gapw_control%eps_svd, 1.E-12_dp)
     949             :       END IF
     950             : 
     951             :       ! Integers grids
     952        7354 :       CALL section_vals_val_get(qs_section, "PW_GRID", i_val=itmp)
     953           0 :       SELECT CASE (itmp)
     954             :       CASE (do_pwgrid_spherical)
     955           0 :          qs_control%pw_grid_opt%spherical = .TRUE.
     956           0 :          qs_control%pw_grid_opt%fullspace = .FALSE.
     957             :       CASE (do_pwgrid_ns_fullspace)
     958        7354 :          qs_control%pw_grid_opt%spherical = .FALSE.
     959        7354 :          qs_control%pw_grid_opt%fullspace = .TRUE.
     960             :       CASE (do_pwgrid_ns_halfspace)
     961           0 :          qs_control%pw_grid_opt%spherical = .FALSE.
     962        7354 :          qs_control%pw_grid_opt%fullspace = .FALSE.
     963             :       END SELECT
     964             : 
     965             :       !   Method for PPL calculation
     966        7354 :       CALL section_vals_val_get(qs_section, "CORE_PPL", i_val=itmp)
     967        7354 :       qs_control%do_ppl_method = itmp
     968             : 
     969        7354 :       CALL section_vals_val_get(qs_section, "PW_GRID_LAYOUT", i_vals=tmplist)
     970       22062 :       qs_control%pw_grid_opt%distribution_layout = tmplist
     971        7354 :       CALL section_vals_val_get(qs_section, "PW_GRID_BLOCKED", i_val=qs_control%pw_grid_opt%blocked)
     972             : 
     973             :       !Integers extrapolation
     974        7354 :       CALL section_vals_val_get(qs_section, "EXTRAPOLATION", i_val=qs_control%wf_interpolation_method_nr)
     975        7354 :       CALL section_vals_val_get(qs_section, "EXTRAPOLATION_ORDER", i_val=qs_control%wf_extrapolation_order)
     976             : 
     977             :       !Method
     978        7354 :       CALL section_vals_val_get(qs_section, "METHOD", i_val=qs_control%method_id)
     979        7354 :       qs_control%gapw = .FALSE.
     980        7354 :       qs_control%gapw_xc = .FALSE.
     981        7354 :       qs_control%gpw = .FALSE.
     982        7354 :       qs_control%pao = .FALSE.
     983        7354 :       qs_control%dftb = .FALSE.
     984        7354 :       qs_control%xtb = .FALSE.
     985        7354 :       qs_control%semi_empirical = .FALSE.
     986        7354 :       qs_control%ofgpw = .FALSE.
     987        7354 :       qs_control%lrigpw = .FALSE.
     988        7354 :       qs_control%rigpw = .FALSE.
     989        8162 :       SELECT CASE (qs_control%method_id)
     990             :       CASE (do_method_gapw)
     991         808 :          CALL cite_reference(Lippert1999)
     992         808 :          CALL cite_reference(Krack2000)
     993         808 :          qs_control%gapw = .TRUE.
     994             :       CASE (do_method_gapw_xc)
     995         110 :          qs_control%gapw_xc = .TRUE.
     996             :       CASE (do_method_gpw)
     997        4210 :          CALL cite_reference(Lippert1997)
     998        4210 :          CALL cite_reference(VandeVondele2005a)
     999        4210 :          qs_control%gpw = .TRUE.
    1000             :       CASE (do_method_ofgpw)
    1001           0 :          qs_control%ofgpw = .TRUE.
    1002             :       CASE (do_method_lrigpw)
    1003          40 :          qs_control%lrigpw = .TRUE.
    1004             :       CASE (do_method_rigpw)
    1005           0 :          qs_control%rigpw = .TRUE.
    1006             :       CASE (do_method_dftb)
    1007         222 :          qs_control%dftb = .TRUE.
    1008         222 :          CALL cite_reference(Porezag1995)
    1009         222 :          CALL cite_reference(Seifert1996)
    1010             :       CASE (do_method_xtb)
    1011         966 :          qs_control%xtb = .TRUE.
    1012         966 :          CALL cite_reference(Grimme2017)
    1013         966 :          CALL cite_reference(Pracht2019)
    1014             :       CASE (do_method_mndo)
    1015          52 :          CALL cite_reference(Dewar1977)
    1016          52 :          qs_control%semi_empirical = .TRUE.
    1017             :       CASE (do_method_am1)
    1018         112 :          CALL cite_reference(Dewar1985)
    1019         112 :          qs_control%semi_empirical = .TRUE.
    1020             :       CASE (do_method_pm3)
    1021          46 :          CALL cite_reference(Stewart1989)
    1022          46 :          qs_control%semi_empirical = .TRUE.
    1023             :       CASE (do_method_pnnl)
    1024          14 :          CALL cite_reference(Schenter2008)
    1025          14 :          qs_control%semi_empirical = .TRUE.
    1026             :       CASE (do_method_pm6)
    1027         754 :          CALL cite_reference(Stewart2007)
    1028         754 :          qs_control%semi_empirical = .TRUE.
    1029             :       CASE (do_method_pm6fm)
    1030           0 :          CALL cite_reference(VanVoorhis2015)
    1031           0 :          qs_control%semi_empirical = .TRUE.
    1032             :       CASE (do_method_pdg)
    1033           2 :          CALL cite_reference(Repasky2002)
    1034           2 :          qs_control%semi_empirical = .TRUE.
    1035             :       CASE (do_method_rm1)
    1036           2 :          CALL cite_reference(Rocha2006)
    1037           2 :          qs_control%semi_empirical = .TRUE.
    1038             :       CASE (do_method_mndod)
    1039          16 :          CALL cite_reference(Dewar1977)
    1040          16 :          CALL cite_reference(Thiel1992)
    1041        7370 :          qs_control%semi_empirical = .TRUE.
    1042             :       END SELECT
    1043             : 
    1044        7354 :       CALL section_vals_get(mull_section, explicit=qs_control%mulliken_restraint)
    1045             : 
    1046        7354 :       IF (qs_control%mulliken_restraint) THEN
    1047           2 :          CALL section_vals_val_get(mull_section, "STRENGTH", r_val=qs_control%mulliken_restraint_control%strength)
    1048           2 :          CALL section_vals_val_get(mull_section, "TARGET", r_val=qs_control%mulliken_restraint_control%target)
    1049           2 :          CALL section_vals_val_get(mull_section, "ATOMS", n_rep_val=n_rep)
    1050           2 :          jj = 0
    1051           4 :          DO k = 1, n_rep
    1052           2 :             CALL section_vals_val_get(mull_section, "ATOMS", i_rep_val=k, i_vals=tmplist)
    1053           4 :             jj = jj + SIZE(tmplist)
    1054             :          END DO
    1055           2 :          qs_control%mulliken_restraint_control%natoms = jj
    1056           2 :          IF (qs_control%mulliken_restraint_control%natoms < 1) &
    1057           0 :             CPABORT("Need at least 1 atom to use mulliken constraints")
    1058           6 :          ALLOCATE (qs_control%mulliken_restraint_control%atoms(qs_control%mulliken_restraint_control%natoms))
    1059           2 :          jj = 0
    1060           6 :          DO k = 1, n_rep
    1061           2 :             CALL section_vals_val_get(mull_section, "ATOMS", i_rep_val=k, i_vals=tmplist)
    1062           6 :             DO j = 1, SIZE(tmplist)
    1063           2 :                jj = jj + 1
    1064           4 :                qs_control%mulliken_restraint_control%atoms(jj) = tmplist(j)
    1065             :             END DO
    1066             :          END DO
    1067             :       END IF
    1068        7354 :       CALL section_vals_get(ddapc_restraint_section, n_repetition=nrep, explicit=qs_control%ddapc_restraint)
    1069        7354 :       IF (qs_control%ddapc_restraint) THEN
    1070          60 :          ALLOCATE (qs_control%ddapc_restraint_control(nrep))
    1071          14 :          CALL read_ddapc_section(qs_control, qs_section=qs_section)
    1072          14 :          qs_control%ddapc_restraint_is_spin = .FALSE.
    1073          14 :          qs_control%ddapc_explicit_potential = .FALSE.
    1074             :       END IF
    1075             : 
    1076        7354 :       CALL section_vals_get(s2_restraint_section, explicit=qs_control%s2_restraint)
    1077        7354 :       IF (qs_control%s2_restraint) THEN
    1078             :          CALL section_vals_val_get(s2_restraint_section, "STRENGTH", &
    1079           0 :                                    r_val=qs_control%s2_restraint_control%strength)
    1080             :          CALL section_vals_val_get(s2_restraint_section, "TARGET", &
    1081           0 :                                    r_val=qs_control%s2_restraint_control%target)
    1082             :          CALL section_vals_val_get(s2_restraint_section, "FUNCTIONAL_FORM", &
    1083           0 :                                    i_val=qs_control%s2_restraint_control%functional_form)
    1084             :       END IF
    1085             : 
    1086        7354 :       CALL section_vals_get(cdft_control_section, explicit=qs_control%cdft)
    1087        7354 :       IF (qs_control%cdft) THEN
    1088         264 :          CALL read_cdft_control_section(qs_control, cdft_control_section)
    1089             :       END IF
    1090             : 
    1091             :       ! Semi-empirical code
    1092        7354 :       IF (qs_control%semi_empirical) THEN
    1093             :          CALL section_vals_val_get(se_section, "ORTHOGONAL_BASIS", &
    1094         998 :                                    l_val=qs_control%se_control%orthogonal_basis)
    1095             :          CALL section_vals_val_get(se_section, "DELTA", &
    1096         998 :                                    r_val=qs_control%se_control%delta)
    1097             :          CALL section_vals_val_get(se_section, "ANALYTICAL_GRADIENTS", &
    1098         998 :                                    l_val=qs_control%se_control%analytical_gradients)
    1099             :          CALL section_vals_val_get(se_section, "FORCE_KDSO-D_EXCHANGE", &
    1100         998 :                                    l_val=qs_control%se_control%force_kdsod_EX)
    1101             :          ! Integral Screening
    1102             :          CALL section_vals_val_get(se_section, "INTEGRAL_SCREENING", &
    1103         998 :                                    i_val=qs_control%se_control%integral_screening)
    1104         998 :          IF (qs_control%method_id == do_method_pnnl) THEN
    1105          14 :             IF (qs_control%se_control%integral_screening /= do_se_IS_slater) &
    1106             :                CALL cp_warn(__LOCATION__, &
    1107             :                             "PNNL semi-empirical parameterization supports only the Slater type "// &
    1108           0 :                             "integral scheme. Revert to Slater and continue the calculation.")
    1109          14 :             qs_control%se_control%integral_screening = do_se_IS_slater
    1110             :          END IF
    1111             :          ! Global Arrays variable
    1112             :          CALL section_vals_val_get(se_section, "GA%NCELLS", &
    1113         998 :                                    i_val=qs_control%se_control%ga_ncells)
    1114             :          ! Long-Range correction
    1115             :          CALL section_vals_val_get(se_section, "LR_CORRECTION%CUTOFF", &
    1116         998 :                                    r_val=qs_control%se_control%cutoff_lrc)
    1117         998 :          qs_control%se_control%taper_lrc = qs_control%se_control%cutoff_lrc
    1118             :          CALL section_vals_val_get(se_section, "LR_CORRECTION%RC_TAPER", &
    1119         998 :                                    explicit=explicit)
    1120         998 :          IF (explicit) THEN
    1121             :             CALL section_vals_val_get(se_section, "LR_CORRECTION%RC_TAPER", &
    1122           0 :                                       r_val=qs_control%se_control%taper_lrc)
    1123             :          END IF
    1124             :          CALL section_vals_val_get(se_section, "LR_CORRECTION%RC_RANGE", &
    1125         998 :                                    r_val=qs_control%se_control%range_lrc)
    1126             :          ! Coulomb
    1127             :          CALL section_vals_val_get(se_section, "COULOMB%CUTOFF", &
    1128         998 :                                    r_val=qs_control%se_control%cutoff_cou)
    1129         998 :          qs_control%se_control%taper_cou = qs_control%se_control%cutoff_cou
    1130             :          CALL section_vals_val_get(se_section, "COULOMB%RC_TAPER", &
    1131         998 :                                    explicit=explicit)
    1132         998 :          IF (explicit) THEN
    1133             :             CALL section_vals_val_get(se_section, "COULOMB%RC_TAPER", &
    1134           0 :                                       r_val=qs_control%se_control%taper_cou)
    1135             :          END IF
    1136             :          CALL section_vals_val_get(se_section, "COULOMB%RC_RANGE", &
    1137         998 :                                    r_val=qs_control%se_control%range_cou)
    1138             :          ! Exchange
    1139             :          CALL section_vals_val_get(se_section, "EXCHANGE%CUTOFF", &
    1140         998 :                                    r_val=qs_control%se_control%cutoff_exc)
    1141         998 :          qs_control%se_control%taper_exc = qs_control%se_control%cutoff_exc
    1142             :          CALL section_vals_val_get(se_section, "EXCHANGE%RC_TAPER", &
    1143         998 :                                    explicit=explicit)
    1144         998 :          IF (explicit) THEN
    1145             :             CALL section_vals_val_get(se_section, "EXCHANGE%RC_TAPER", &
    1146          38 :                                       r_val=qs_control%se_control%taper_exc)
    1147             :          END IF
    1148             :          CALL section_vals_val_get(se_section, "EXCHANGE%RC_RANGE", &
    1149         998 :                                    r_val=qs_control%se_control%range_exc)
    1150             :          ! Screening (only if the integral scheme is of dumped type)
    1151         998 :          IF (qs_control%se_control%integral_screening == do_se_IS_kdso_d) THEN
    1152             :             CALL section_vals_val_get(se_section, "SCREENING%RC_TAPER", &
    1153          14 :                                       r_val=qs_control%se_control%taper_scr)
    1154             :             CALL section_vals_val_get(se_section, "SCREENING%RC_RANGE", &
    1155          14 :                                       r_val=qs_control%se_control%range_scr)
    1156             :          END IF
    1157             :          ! Periodic Type Calculation
    1158             :          CALL section_vals_val_get(se_section, "PERIODIC", &
    1159         998 :                                    i_val=qs_control%se_control%periodic_type)
    1160        1964 :          SELECT CASE (qs_control%se_control%periodic_type)
    1161             :          CASE (do_se_lr_none)
    1162         966 :             qs_control%se_control%do_ewald = .FALSE.
    1163         966 :             qs_control%se_control%do_ewald_r3 = .FALSE.
    1164         966 :             qs_control%se_control%do_ewald_gks = .FALSE.
    1165             :          CASE (do_se_lr_ewald)
    1166          30 :             qs_control%se_control%do_ewald = .TRUE.
    1167          30 :             qs_control%se_control%do_ewald_r3 = .FALSE.
    1168          30 :             qs_control%se_control%do_ewald_gks = .FALSE.
    1169             :          CASE (do_se_lr_ewald_gks)
    1170           2 :             qs_control%se_control%do_ewald = .FALSE.
    1171           2 :             qs_control%se_control%do_ewald_r3 = .FALSE.
    1172           2 :             qs_control%se_control%do_ewald_gks = .TRUE.
    1173           2 :             IF (qs_control%method_id /= do_method_pnnl) &
    1174             :                CALL cp_abort(__LOCATION__, &
    1175             :                              "A periodic semi-empirical calculation was requested with a long-range  "// &
    1176             :                              "summation on the single integral evaluation. This scheme is supported  "// &
    1177           0 :                              "only by the PNNL parameterization.")
    1178             :          CASE (do_se_lr_ewald_r3)
    1179           0 :             qs_control%se_control%do_ewald = .TRUE.
    1180           0 :             qs_control%se_control%do_ewald_r3 = .TRUE.
    1181           0 :             qs_control%se_control%do_ewald_gks = .FALSE.
    1182           0 :             IF (qs_control%se_control%integral_screening /= do_se_IS_kdso) &
    1183             :                CALL cp_abort(__LOCATION__, &
    1184             :                              "A periodic semi-empirical calculation was requested with a long-range  "// &
    1185             :                              "summation for the slowly convergent part 1/R^3, which is not congruent "// &
    1186             :                              "with the integral screening chosen. The only integral screening supported "// &
    1187         998 :                              "by this periodic type calculation is the standard Klopman-Dewar-Sabelli-Ohno.")
    1188             :          END SELECT
    1189             : 
    1190             :          ! dispersion pair potentials
    1191             :          CALL section_vals_val_get(se_section, "DISPERSION", &
    1192         998 :                                    l_val=qs_control%se_control%dispersion)
    1193             :          CALL section_vals_val_get(se_section, "DISPERSION_RADIUS", &
    1194         998 :                                    r_val=qs_control%se_control%rcdisp)
    1195             :          CALL section_vals_val_get(se_section, "COORDINATION_CUTOFF", &
    1196         998 :                                    r_val=qs_control%se_control%epscn)
    1197         998 :          CALL section_vals_val_get(se_section, "D3_SCALING", r_vals=scal)
    1198         998 :          qs_control%se_control%sd3(1) = scal(1)
    1199         998 :          qs_control%se_control%sd3(2) = scal(2)
    1200         998 :          qs_control%se_control%sd3(3) = scal(3)
    1201             :          CALL section_vals_val_get(se_section, "DISPERSION_PARAMETER_FILE", &
    1202         998 :                                    c_val=qs_control%se_control%dispersion_parameter_file)
    1203             : 
    1204             :          ! Stop the execution for non-implemented features
    1205         998 :          IF (qs_control%se_control%periodic_type == do_se_lr_ewald_r3) THEN
    1206           0 :             CPABORT("EWALD_R3 not implemented yet!")
    1207             :          END IF
    1208             : 
    1209             :          IF (qs_control%method_id == do_method_mndo .OR. &
    1210             :              qs_control%method_id == do_method_am1 .OR. &
    1211             :              qs_control%method_id == do_method_mndod .OR. &
    1212             :              qs_control%method_id == do_method_pdg .OR. &
    1213             :              qs_control%method_id == do_method_pm3 .OR. &
    1214             :              qs_control%method_id == do_method_pm6 .OR. &
    1215             :              qs_control%method_id == do_method_pm6fm .OR. &
    1216         998 :              qs_control%method_id == do_method_pnnl .OR. &
    1217             :              qs_control%method_id == do_method_rm1) THEN
    1218         998 :             qs_control%se_control%orthogonal_basis = .TRUE.
    1219             :          END IF
    1220             :       END IF
    1221             : 
    1222             :       ! DFTB code
    1223        7354 :       IF (qs_control%dftb) THEN
    1224             :          CALL section_vals_val_get(dftb_section, "ORTHOGONAL_BASIS", &
    1225         222 :                                    l_val=qs_control%dftb_control%orthogonal_basis)
    1226             :          CALL section_vals_val_get(dftb_section, "SELF_CONSISTENT", &
    1227         222 :                                    l_val=qs_control%dftb_control%self_consistent)
    1228             :          CALL section_vals_val_get(dftb_section, "DISPERSION", &
    1229         222 :                                    l_val=qs_control%dftb_control%dispersion)
    1230             :          CALL section_vals_val_get(dftb_section, "DIAGONAL_DFTB3", &
    1231         222 :                                    l_val=qs_control%dftb_control%dftb3_diagonal)
    1232             :          CALL section_vals_val_get(dftb_section, "HB_SR_GAMMA", &
    1233         222 :                                    l_val=qs_control%dftb_control%hb_sr_damp)
    1234             :          CALL section_vals_val_get(dftb_section, "EPS_DISP", &
    1235         222 :                                    r_val=qs_control%dftb_control%eps_disp)
    1236         222 :          CALL section_vals_val_get(dftb_section, "DO_EWALD", explicit=explicit)
    1237         222 :          IF (explicit) THEN
    1238             :             CALL section_vals_val_get(dftb_section, "DO_EWALD", &
    1239         166 :                                       l_val=qs_control%dftb_control%do_ewald)
    1240             :          ELSE
    1241          56 :             qs_control%dftb_control%do_ewald = (qs_control%periodicity /= 0)
    1242             :          END IF
    1243             :          CALL section_vals_val_get(dftb_parameter, "PARAM_FILE_PATH", &
    1244         222 :                                    c_val=qs_control%dftb_control%sk_file_path)
    1245             :          CALL section_vals_val_get(dftb_parameter, "PARAM_FILE_NAME", &
    1246         222 :                                    c_val=qs_control%dftb_control%sk_file_list)
    1247             :          CALL section_vals_val_get(dftb_parameter, "HB_SR_PARAM", &
    1248         222 :                                    r_val=qs_control%dftb_control%hb_sr_para)
    1249         222 :          CALL section_vals_val_get(dftb_parameter, "SK_FILE", n_rep_val=n_var)
    1250         470 :          ALLOCATE (qs_control%dftb_control%sk_pair_list(3, n_var))
    1251         284 :          DO k = 1, n_var
    1252             :             CALL section_vals_val_get(dftb_parameter, "SK_FILE", i_rep_val=k, &
    1253          62 :                                       c_vals=clist)
    1254         470 :             qs_control%dftb_control%sk_pair_list(1:3, k) = clist(1:3)
    1255             :          END DO
    1256             :          ! Dispersion type
    1257             :          CALL section_vals_val_get(dftb_parameter, "DISPERSION_TYPE", &
    1258         222 :                                    i_val=qs_control%dftb_control%dispersion_type)
    1259             :          CALL section_vals_val_get(dftb_parameter, "UFF_FORCE_FIELD", &
    1260         222 :                                    c_val=qs_control%dftb_control%uff_force_field)
    1261             :          ! D3 Dispersion
    1262             :          CALL section_vals_val_get(dftb_parameter, "DISPERSION_RADIUS", &
    1263         222 :                                    r_val=qs_control%dftb_control%rcdisp)
    1264             :          CALL section_vals_val_get(dftb_parameter, "COORDINATION_CUTOFF", &
    1265         222 :                                    r_val=qs_control%dftb_control%epscn)
    1266             :          CALL section_vals_val_get(dftb_parameter, "D2_EXP_PRE", &
    1267         222 :                                    r_val=qs_control%dftb_control%exp_pre)
    1268             :          CALL section_vals_val_get(dftb_parameter, "D2_SCALING", &
    1269         222 :                                    r_val=qs_control%dftb_control%scaling)
    1270         222 :          CALL section_vals_val_get(dftb_parameter, "D3_SCALING", r_vals=scal)
    1271         222 :          qs_control%dftb_control%sd3(1) = scal(1)
    1272         222 :          qs_control%dftb_control%sd3(2) = scal(2)
    1273         222 :          qs_control%dftb_control%sd3(3) = scal(3)
    1274         222 :          CALL section_vals_val_get(dftb_parameter, "D3BJ_SCALING", r_vals=scal)
    1275         222 :          qs_control%dftb_control%sd3bj(1) = scal(1)
    1276         222 :          qs_control%dftb_control%sd3bj(2) = scal(2)
    1277         222 :          qs_control%dftb_control%sd3bj(3) = scal(3)
    1278         222 :          qs_control%dftb_control%sd3bj(4) = scal(4)
    1279             :          CALL section_vals_val_get(dftb_parameter, "DISPERSION_PARAMETER_FILE", &
    1280         222 :                                    c_val=qs_control%dftb_control%dispersion_parameter_file)
    1281             : 
    1282         222 :          IF (qs_control%dftb_control%dispersion) CALL cite_reference(Zhechkov2005)
    1283         222 :          IF (qs_control%dftb_control%self_consistent) CALL cite_reference(Elstner1998)
    1284         666 :          IF (qs_control%dftb_control%hb_sr_damp) CALL cite_reference(Hu2007)
    1285             :       END IF
    1286             : 
    1287             :       ! xTB code
    1288        7354 :       IF (qs_control%xtb) THEN
    1289         966 :          CALL section_vals_val_get(xtb_section, "GFN_TYPE", i_val=qs_control%xtb_control%gfn_type)
    1290         966 :          CALL section_vals_val_get(xtb_section, "DO_EWALD", explicit=explicit)
    1291         966 :          IF (explicit) THEN
    1292             :             CALL section_vals_val_get(xtb_section, "DO_EWALD", &
    1293         756 :                                       l_val=qs_control%xtb_control%do_ewald)
    1294             :          ELSE
    1295         210 :             qs_control%xtb_control%do_ewald = (qs_control%periodicity /= 0)
    1296             :          END IF
    1297             :          ! vdW
    1298         966 :          CALL section_vals_val_get(xtb_section, "VDW_POTENTIAL", explicit=explicit)
    1299         966 :          IF (explicit) THEN
    1300         660 :             CALL section_vals_val_get(xtb_section, "VDW_POTENTIAL", c_val=cval)
    1301         660 :             CALL uppercase(cval)
    1302           0 :             SELECT CASE (cval)
    1303             :             CASE ("NONE")
    1304           0 :                qs_control%xtb_control%vdw_type = xtb_vdw_type_none
    1305             :             CASE ("DFTD3")
    1306          36 :                qs_control%xtb_control%vdw_type = xtb_vdw_type_d3
    1307             :             CASE ("DFTD4")
    1308         624 :                qs_control%xtb_control%vdw_type = xtb_vdw_type_d4
    1309             :             CASE DEFAULT
    1310         660 :                CPABORT("vdW type")
    1311             :             END SELECT
    1312             :          ELSE
    1313         322 :             SELECT CASE (qs_control%xtb_control%gfn_type)
    1314             :             CASE (0)
    1315          16 :                qs_control%xtb_control%vdw_type = xtb_vdw_type_d4
    1316             :             CASE (1)
    1317         290 :                qs_control%xtb_control%vdw_type = xtb_vdw_type_d3
    1318             :             CASE (2)
    1319           0 :                qs_control%xtb_control%vdw_type = xtb_vdw_type_d4
    1320           0 :                CPABORT("gfn2-xtb tbd")
    1321             :             CASE DEFAULT
    1322         306 :                CPABORT("GFN type")
    1323             :             END SELECT
    1324             :          END IF
    1325             :          !
    1326         966 :          CALL section_vals_val_get(xtb_section, "STO_NG", i_val=ngauss)
    1327         966 :          qs_control%xtb_control%sto_ng = ngauss
    1328         966 :          CALL section_vals_val_get(xtb_section, "HYDROGEN_STO_NG", i_val=ngauss)
    1329         966 :          qs_control%xtb_control%h_sto_ng = ngauss
    1330             :          CALL section_vals_val_get(xtb_parameter, "PARAM_FILE_PATH", &
    1331         966 :                                    c_val=qs_control%xtb_control%parameter_file_path)
    1332         966 :          CALL section_vals_val_get(xtb_parameter, "PARAM_FILE_NAME", explicit=explicit)
    1333         966 :          IF (explicit) THEN
    1334             :             CALL section_vals_val_get(xtb_parameter, "PARAM_FILE_NAME", &
    1335           0 :                                       c_val=qs_control%xtb_control%parameter_file_name)
    1336             :          ELSE
    1337        1640 :             SELECT CASE (qs_control%xtb_control%gfn_type)
    1338             :             CASE (0)
    1339         674 :                qs_control%xtb_control%parameter_file_name = "xTB0_parameters"
    1340             :             CASE (1)
    1341         292 :                qs_control%xtb_control%parameter_file_name = "xTB1_parameters"
    1342             :             CASE (2)
    1343           0 :                CPABORT("gfn2-xtb tbd")
    1344             :             CASE DEFAULT
    1345         966 :                CPABORT("GFN type")
    1346             :             END SELECT
    1347             :          END IF
    1348             :          ! D3 Dispersion
    1349             :          CALL section_vals_val_get(xtb_parameter, "DISPERSION_RADIUS", &
    1350         966 :                                    r_val=qs_control%xtb_control%rcdisp)
    1351             :          CALL section_vals_val_get(xtb_parameter, "COORDINATION_CUTOFF", &
    1352         966 :                                    r_val=qs_control%xtb_control%epscn)
    1353         966 :          CALL section_vals_val_get(xtb_parameter, "D3BJ_SCALING", explicit=explicit)
    1354         966 :          IF (explicit) THEN
    1355           0 :             CALL section_vals_val_get(xtb_parameter, "D3BJ_SCALING", r_vals=scal)
    1356           0 :             qs_control%xtb_control%s6 = scal(1)
    1357           0 :             qs_control%xtb_control%s8 = scal(2)
    1358             :          ELSE
    1359        1640 :             SELECT CASE (qs_control%xtb_control%gfn_type)
    1360             :             CASE (0)
    1361         674 :                qs_control%xtb_control%s6 = 1.00_dp
    1362         674 :                qs_control%xtb_control%s8 = 2.85_dp
    1363             :             CASE (1)
    1364         292 :                qs_control%xtb_control%s6 = 1.00_dp
    1365         292 :                qs_control%xtb_control%s8 = 2.40_dp
    1366             :             CASE (2)
    1367           0 :                CPABORT("gfn2-xtb tbd")
    1368             :             CASE DEFAULT
    1369         966 :                CPABORT("GFN type")
    1370             :             END SELECT
    1371             :          END IF
    1372         966 :          CALL section_vals_val_get(xtb_parameter, "D3BJ_PARAM", explicit=explicit)
    1373         966 :          IF (explicit) THEN
    1374           0 :             CALL section_vals_val_get(xtb_parameter, "D3BJ_PARAM", r_vals=scal)
    1375           0 :             qs_control%xtb_control%a1 = scal(1)
    1376           0 :             qs_control%xtb_control%a2 = scal(2)
    1377             :          ELSE
    1378        1640 :             SELECT CASE (qs_control%xtb_control%gfn_type)
    1379             :             CASE (0)
    1380         674 :                qs_control%xtb_control%a1 = 0.80_dp
    1381         674 :                qs_control%xtb_control%a2 = 4.60_dp
    1382             :             CASE (1)
    1383         292 :                qs_control%xtb_control%a1 = 0.63_dp
    1384         292 :                qs_control%xtb_control%a2 = 5.00_dp
    1385             :             CASE (2)
    1386           0 :                CPABORT("gfn2-xtb tbd")
    1387             :             CASE DEFAULT
    1388         966 :                CPABORT("GFN type")
    1389             :             END SELECT
    1390             :          END IF
    1391             :          CALL section_vals_val_get(xtb_parameter, "DISPERSION_PARAMETER_FILE", &
    1392         966 :                                    c_val=qs_control%xtb_control%dispersion_parameter_file)
    1393             :          ! global parameters
    1394         966 :          CALL section_vals_val_get(xtb_parameter, "HUCKEL_CONSTANTS", explicit=explicit)
    1395         966 :          IF (explicit) THEN
    1396           0 :             CALL section_vals_val_get(xtb_parameter, "HUCKEL_CONSTANTS", r_vals=scal)
    1397           0 :             qs_control%xtb_control%ks = scal(1)
    1398           0 :             qs_control%xtb_control%kp = scal(2)
    1399           0 :             qs_control%xtb_control%kd = scal(3)
    1400           0 :             qs_control%xtb_control%ksp = scal(4)
    1401           0 :             qs_control%xtb_control%k2sh = scal(5)
    1402           0 :             IF (qs_control%xtb_control%gfn_type == 0) THEN
    1403             :                ! enforce ksp for gfn0
    1404           0 :                qs_control%xtb_control%ksp = 0.5_dp*(scal(1) + scal(2))
    1405             :             END IF
    1406             :          ELSE
    1407        1640 :             SELECT CASE (qs_control%xtb_control%gfn_type)
    1408             :             CASE (0)
    1409         674 :                qs_control%xtb_control%ks = 2.00_dp
    1410         674 :                qs_control%xtb_control%kp = 2.4868_dp
    1411         674 :                qs_control%xtb_control%kd = 2.27_dp
    1412         674 :                qs_control%xtb_control%ksp = 2.2434_dp
    1413         674 :                qs_control%xtb_control%k2sh = 1.1241_dp
    1414             :             CASE (1)
    1415         292 :                qs_control%xtb_control%ks = 1.85_dp
    1416         292 :                qs_control%xtb_control%kp = 2.25_dp
    1417         292 :                qs_control%xtb_control%kd = 2.00_dp
    1418         292 :                qs_control%xtb_control%ksp = 2.08_dp
    1419         292 :                qs_control%xtb_control%k2sh = 2.85_dp
    1420             :             CASE (2)
    1421           0 :                CPABORT("gfn2-xtb tbd")
    1422             :             CASE DEFAULT
    1423         966 :                CPABORT("GFN type")
    1424             :             END SELECT
    1425             :          END IF
    1426         966 :          CALL section_vals_val_get(xtb_parameter, "COULOMB_CONSTANTS", explicit=explicit)
    1427         966 :          IF (explicit) THEN
    1428           0 :             CALL section_vals_val_get(xtb_parameter, "COULOMB_CONSTANTS", r_vals=scal)
    1429           0 :             qs_control%xtb_control%kg = scal(1)
    1430           0 :             qs_control%xtb_control%kf = scal(2)
    1431             :          ELSE
    1432        1640 :             SELECT CASE (qs_control%xtb_control%gfn_type)
    1433             :             CASE (0)
    1434         674 :                qs_control%xtb_control%kg = 2.00_dp
    1435         674 :                qs_control%xtb_control%kf = 1.50_dp
    1436             :             CASE (1)
    1437         292 :                qs_control%xtb_control%kg = 2.00_dp
    1438         292 :                qs_control%xtb_control%kf = 1.50_dp
    1439             :             CASE (2)
    1440           0 :                CPABORT("gfn2-xtb tbd")
    1441             :             CASE DEFAULT
    1442         966 :                CPABORT("GFN type")
    1443             :             END SELECT
    1444             :          END IF
    1445         966 :          CALL section_vals_val_get(xtb_parameter, "CN_CONSTANTS", r_vals=scal)
    1446         966 :          qs_control%xtb_control%kcns = scal(1)
    1447         966 :          qs_control%xtb_control%kcnp = scal(2)
    1448         966 :          qs_control%xtb_control%kcnd = scal(3)
    1449             :          !
    1450         966 :          CALL section_vals_val_get(xtb_parameter, "EN_CONSTANTS", explicit=explicit)
    1451         966 :          IF (explicit) THEN
    1452           0 :             CALL section_vals_val_get(xtb_parameter, "EN_CONSTANTS", r_vals=scal)
    1453           0 :             SELECT CASE (qs_control%xtb_control%gfn_type)
    1454             :             CASE (0)
    1455           0 :                qs_control%xtb_control%ksen = scal(1)
    1456           0 :                qs_control%xtb_control%kpen = scal(2)
    1457           0 :                qs_control%xtb_control%kden = scal(3)
    1458             :             CASE (1)
    1459           0 :                qs_control%xtb_control%ken = scal(1)
    1460             :             CASE (2)
    1461           0 :                CPABORT("gfn2-xtb tbd")
    1462             :             CASE DEFAULT
    1463           0 :                CPABORT("GFN type")
    1464             :             END SELECT
    1465             :          ELSE
    1466        1640 :             SELECT CASE (qs_control%xtb_control%gfn_type)
    1467             :             CASE (0)
    1468         674 :                qs_control%xtb_control%ksen = 0.006_dp
    1469         674 :                qs_control%xtb_control%kpen = -0.001_dp
    1470         674 :                qs_control%xtb_control%kden = -0.002_dp
    1471             :             CASE (1)
    1472         292 :                qs_control%xtb_control%ken = -0.007_dp
    1473             :             CASE (2)
    1474           0 :                CPABORT("gfn2-xtb tbd")
    1475             :             CASE DEFAULT
    1476         966 :                CPABORT("GFN type")
    1477             :             END SELECT
    1478             :          END IF
    1479             :          ! ben
    1480         966 :          CALL section_vals_val_get(xtb_parameter, "BEN_CONSTANT", r_vals=scal)
    1481         966 :          qs_control%xtb_control%ben = scal(1)
    1482             :          ! enscale (hidden parameter in repulsion
    1483         966 :          CALL section_vals_val_get(xtb_parameter, "ENSCALE", explicit=explicit)
    1484         966 :          IF (explicit) THEN
    1485             :             CALL section_vals_val_get(xtb_parameter, "ENSCALE", &
    1486           0 :                                       r_val=qs_control%xtb_control%enscale)
    1487             :          ELSE
    1488        1640 :             SELECT CASE (qs_control%xtb_control%gfn_type)
    1489             :             CASE (0)
    1490         674 :                qs_control%xtb_control%enscale = -0.09_dp
    1491             :             CASE (1)
    1492         292 :                qs_control%xtb_control%enscale = 0._dp
    1493             :             CASE (2)
    1494           0 :                CPABORT("gfn2-xtb tbd")
    1495             :             CASE DEFAULT
    1496         966 :                CPABORT("GFN type")
    1497             :             END SELECT
    1498             :          END IF
    1499             :          ! XB
    1500             :          CALL section_vals_val_get(xtb_section, "USE_HALOGEN_CORRECTION", &
    1501         966 :                                    l_val=qs_control%xtb_control%xb_interaction)
    1502         966 :          CALL section_vals_val_get(xtb_parameter, "HALOGEN_BINDING", r_vals=scal)
    1503         966 :          qs_control%xtb_control%kxr = scal(1)
    1504         966 :          qs_control%xtb_control%kx2 = scal(2)
    1505             :          ! NONBONDED interactions
    1506             :          CALL section_vals_val_get(xtb_section, "DO_NONBONDED", &
    1507         966 :                                    l_val=qs_control%xtb_control%do_nonbonded)
    1508         966 :          CALL section_vals_get(nonbonded_section, explicit=explicit)
    1509         966 :          IF (explicit .AND. qs_control%xtb_control%do_nonbonded) THEN
    1510           6 :             CALL section_vals_get(genpot_section, explicit=explicit, n_repetition=ngp)
    1511           6 :             IF (explicit) THEN
    1512           6 :                CALL pair_potential_reallocate(qs_control%xtb_control%nonbonded, 1, ngp, gp=.TRUE.)
    1513           6 :                CALL read_gp_section(qs_control%xtb_control%nonbonded, genpot_section, 0)
    1514             :             END IF
    1515             :          END IF !nonbonded
    1516             :          CALL section_vals_val_get(xtb_section, "EPS_PAIRPOTENTIAL", &
    1517         966 :                                    r_val=qs_control%xtb_control%eps_pair)
    1518             :          ! SR Coulomb
    1519         966 :          CALL section_vals_val_get(xtb_parameter, "COULOMB_SR_CUT", r_vals=scal)
    1520         966 :          qs_control%xtb_control%coulomb_sr_cut = scal(1)
    1521         966 :          CALL section_vals_val_get(xtb_parameter, "COULOMB_SR_EPS", r_vals=scal)
    1522         966 :          qs_control%xtb_control%coulomb_sr_eps = scal(1)
    1523             :          ! XB_radius
    1524         966 :          CALL section_vals_val_get(xtb_parameter, "XB_RADIUS", r_val=qs_control%xtb_control%xb_radius)
    1525             :          ! Kab
    1526         966 :          CALL section_vals_val_get(xtb_parameter, "KAB_PARAM", n_rep_val=n_rep)
    1527             :          ! Coulomb
    1528        1640 :          SELECT CASE (qs_control%xtb_control%gfn_type)
    1529             :          CASE (0)
    1530         674 :             qs_control%xtb_control%coulomb_interaction = .FALSE.
    1531         674 :             qs_control%xtb_control%coulomb_lr = .FALSE.
    1532         674 :             qs_control%xtb_control%tb3_interaction = .FALSE.
    1533         674 :             qs_control%xtb_control%check_atomic_charges = .FALSE.
    1534             :             CALL section_vals_val_get(xtb_section, "VARIATIONAL_DIPOLE", &
    1535         674 :                                       l_val=qs_control%xtb_control%var_dipole)
    1536             :          CASE (1)
    1537             :             ! For debugging purposes
    1538             :             CALL section_vals_val_get(xtb_section, "COULOMB_INTERACTION", &
    1539         292 :                                       l_val=qs_control%xtb_control%coulomb_interaction)
    1540             :             CALL section_vals_val_get(xtb_section, "COULOMB_LR", &
    1541         292 :                                       l_val=qs_control%xtb_control%coulomb_lr)
    1542             :             CALL section_vals_val_get(xtb_section, "TB3_INTERACTION", &
    1543         292 :                                       l_val=qs_control%xtb_control%tb3_interaction)
    1544             :             ! Check for bad atomic charges
    1545             :             CALL section_vals_val_get(xtb_section, "CHECK_ATOMIC_CHARGES", &
    1546         292 :                                       l_val=qs_control%xtb_control%check_atomic_charges)
    1547         292 :             qs_control%xtb_control%var_dipole = .FALSE.
    1548             :          CASE (2)
    1549           0 :             CPABORT("gfn2-xtb tbd")
    1550             :          CASE DEFAULT
    1551         966 :             CPABORT("GFN type")
    1552             :          END SELECT
    1553         966 :          qs_control%xtb_control%kab_nval = n_rep
    1554         966 :          IF (n_rep > 0) THEN
    1555           6 :             ALLOCATE (qs_control%xtb_control%kab_param(3, n_rep))
    1556           6 :             ALLOCATE (qs_control%xtb_control%kab_types(2, n_rep))
    1557           6 :             ALLOCATE (qs_control%xtb_control%kab_vals(n_rep))
    1558           4 :             DO j = 1, n_rep
    1559           2 :                CALL section_vals_val_get(xtb_parameter, "KAB_PARAM", i_rep_val=j, c_vals=clist)
    1560           2 :                qs_control%xtb_control%kab_param(1, j) = clist(1)
    1561             :                CALL get_ptable_info(clist(1), &
    1562           2 :                                     ielement=qs_control%xtb_control%kab_types(1, j))
    1563           2 :                qs_control%xtb_control%kab_param(2, j) = clist(2)
    1564             :                CALL get_ptable_info(clist(2), &
    1565           2 :                                     ielement=qs_control%xtb_control%kab_types(2, j))
    1566           2 :                qs_control%xtb_control%kab_param(3, j) = clist(3)
    1567           4 :                READ (clist(3), '(F10.0)') qs_control%xtb_control%kab_vals(j)
    1568             :             END DO
    1569             :          END IF
    1570             : 
    1571         966 :          IF (qs_control%xtb_control%gfn_type == 0) THEN
    1572         674 :             CALL section_vals_val_get(xtb_parameter, "SRB_PARAMETER", r_vals=scal)
    1573         674 :             qs_control%xtb_control%ksrb = scal(1)
    1574         674 :             qs_control%xtb_control%esrb = scal(2)
    1575         674 :             qs_control%xtb_control%gscal = scal(3)
    1576         674 :             qs_control%xtb_control%c1srb = scal(4)
    1577         674 :             qs_control%xtb_control%c2srb = scal(5)
    1578         674 :             qs_control%xtb_control%shift = scal(6)
    1579             :          END IF
    1580             : 
    1581         966 :          CALL section_vals_val_get(xtb_section, "EN_SHIFT_TYPE", c_val=cval)
    1582         966 :          CALL uppercase(cval)
    1583         966 :          SELECT CASE (TRIM(cval))
    1584             :          CASE ("SELECT")
    1585           0 :             qs_control%xtb_control%enshift_type = 0
    1586             :          CASE ("MOLECULE")
    1587         966 :             qs_control%xtb_control%enshift_type = 1
    1588             :          CASE ("CRYSTAL")
    1589           0 :             qs_control%xtb_control%enshift_type = 2
    1590             :          CASE DEFAULT
    1591         966 :             CPABORT("Unknown value for EN_SHIFT_TYPE")
    1592             :          END SELECT
    1593             : 
    1594             :          ! EEQ solver params
    1595         966 :          CALL read_eeq_param(eeq_section, qs_control%xtb_control%eeq_sparam)
    1596             : 
    1597             :       END IF
    1598             : 
    1599             :       ! Optimize LRI basis set
    1600        7354 :       CALL section_vals_get(lri_optbas_section, explicit=qs_control%lri_optbas)
    1601             : 
    1602             :       ! Use instead the tblite
    1603             :       CALL section_vals_val_get(xtb_tblite, "_SECTION_PARAMETERS_", &
    1604        7354 :                                 l_val=qs_control%xtb_control%do_tblite)
    1605             :       CALL section_vals_val_get(xtb_tblite, "METHOD", &
    1606        7354 :                                 i_val=qs_control%xtb_control%tblite_method)
    1607        7354 :       IF (qs_control%xtb_control%do_tblite) THEN
    1608          26 :          CALL cite_reference(Caldeweyher2017)
    1609          26 :          CALL cite_reference(Caldeweyher2020)
    1610          26 :          CALL cite_reference(Asgeirsson2017)
    1611          26 :          CALL cite_reference(Grimme2017)
    1612          26 :          CALL cite_reference(Bannwarth2019)
    1613             :          !Ewald sum included in tblite
    1614          26 :          qs_control%xtb_control%do_ewald = .FALSE.
    1615             :       END IF
    1616             : 
    1617        7354 :       CALL timestop(handle)
    1618        7354 :    END SUBROUTINE read_qs_section
    1619             : 
    1620             : ! **************************************************************************************************
    1621             : !> \brief Read TDDFPT-related input parameters.
    1622             : !> \param t_control  TDDFPT control parameters
    1623             : !> \param t_section  TDDFPT input section
    1624             : !> \param qs_control Quickstep control parameters
    1625             : ! **************************************************************************************************
    1626        7354 :    SUBROUTINE read_tddfpt2_control(t_control, t_section, qs_control)
    1627             :       TYPE(tddfpt2_control_type), POINTER                :: t_control
    1628             :       TYPE(section_vals_type), POINTER                   :: t_section
    1629             :       TYPE(qs_control_type), POINTER                     :: qs_control
    1630             : 
    1631             :       CHARACTER(LEN=*), PARAMETER :: routineN = 'read_tddfpt2_control'
    1632             : 
    1633             :       CHARACTER(LEN=default_string_length), &
    1634        7354 :          DIMENSION(:), POINTER                           :: tmpstringlist
    1635             :       INTEGER                                            :: handle, irep, isize, nrep
    1636        7354 :       INTEGER, ALLOCATABLE, DIMENSION(:)                 :: inds
    1637             :       LOGICAL                                            :: do_ewald, do_exchange, expl, explicit, &
    1638             :                                                             multigrid_set
    1639             :       REAL(KIND=dp)                                      :: filter, fval, hfx
    1640             :       TYPE(section_vals_type), POINTER                   :: dipole_section, mgrid_section, &
    1641             :                                                             soc_section, stda_section, xc_func, &
    1642             :                                                             xc_section
    1643             : 
    1644        7354 :       CALL timeset(routineN, handle)
    1645             : 
    1646        7354 :       CALL section_vals_val_get(t_section, "_SECTION_PARAMETERS_", l_val=t_control%enabled)
    1647             : 
    1648        7354 :       CALL section_vals_val_get(t_section, "NSTATES", i_val=t_control%nstates)
    1649        7354 :       CALL section_vals_val_get(t_section, "MAX_ITER", i_val=t_control%niters)
    1650        7354 :       CALL section_vals_val_get(t_section, "MAX_KV", i_val=t_control%nkvs)
    1651        7354 :       CALL section_vals_val_get(t_section, "NLUMO", i_val=t_control%nlumo)
    1652        7354 :       CALL section_vals_val_get(t_section, "NPROC_STATE", i_val=t_control%nprocs)
    1653        7354 :       CALL section_vals_val_get(t_section, "KERNEL", i_val=t_control%kernel)
    1654        7354 :       CALL section_vals_val_get(t_section, "OE_CORR", i_val=t_control%oe_corr)
    1655        7354 :       CALL section_vals_val_get(t_section, "EV_SHIFT", r_val=t_control%ev_shift)
    1656        7354 :       CALL section_vals_val_get(t_section, "EOS_SHIFT", r_val=t_control%eos_shift)
    1657             : 
    1658        7354 :       CALL section_vals_val_get(t_section, "CONVERGENCE", r_val=t_control%conv)
    1659        7354 :       CALL section_vals_val_get(t_section, "MIN_AMPLITUDE", r_val=t_control%min_excitation_amplitude)
    1660        7354 :       CALL section_vals_val_get(t_section, "ORTHOGONAL_EPS", r_val=t_control%orthogonal_eps)
    1661             : 
    1662        7354 :       CALL section_vals_val_get(t_section, "RESTART", l_val=t_control%is_restart)
    1663        7354 :       CALL section_vals_val_get(t_section, "RKS_TRIPLETS", l_val=t_control%rks_triplets)
    1664        7354 :       CALL section_vals_val_get(t_section, "DO_LRIGPW", l_val=t_control%do_lrigpw)
    1665        7354 :       CALL section_vals_val_get(t_section, "DO_SMEARING", l_val=t_control%do_smearing)
    1666        7354 :       CALL section_vals_val_get(t_section, "ADMM_KERNEL_CORRECTION_SYMMETRIC", l_val=t_control%admm_symm)
    1667        7354 :       CALL section_vals_val_get(t_section, "ADMM_KERNEL_XC_CORRECTION", l_val=t_control%admm_xc_correction)
    1668        7354 :       CALL section_vals_val_get(t_section, "EXCITON_DESCRIPTORS", l_val=t_control%do_exciton_descriptors)
    1669        7354 :       CALL section_vals_val_get(t_section, "DIRECTIONAL_EXCITON_DESCRIPTORS", l_val=t_control%do_directional_exciton_descriptors)
    1670             : 
    1671             :       ! read automatically generated auxiliary basis for LRI
    1672        7354 :       CALL section_vals_val_get(t_section, "AUTO_BASIS", n_rep_val=nrep)
    1673       14708 :       DO irep = 1, nrep
    1674        7354 :          CALL section_vals_val_get(t_section, "AUTO_BASIS", i_rep_val=irep, c_vals=tmpstringlist)
    1675       14708 :          IF (SIZE(tmpstringlist) == 2) THEN
    1676        7354 :             CALL uppercase(tmpstringlist(2))
    1677        7354 :             SELECT CASE (tmpstringlist(2))
    1678             :             CASE ("X")
    1679           0 :                isize = -1
    1680             :             CASE ("SMALL")
    1681           0 :                isize = 0
    1682             :             CASE ("MEDIUM")
    1683           0 :                isize = 1
    1684             :             CASE ("LARGE")
    1685           0 :                isize = 2
    1686             :             CASE ("HUGE")
    1687           0 :                isize = 3
    1688             :             CASE DEFAULT
    1689        7354 :                CPABORT("Unknown basis size in AUTO_BASIS keyword:"//TRIM(tmpstringlist(1)))
    1690             :             END SELECT
    1691             :             !
    1692        7354 :             SELECT CASE (tmpstringlist(1))
    1693             :             CASE ("X")
    1694             :             CASE ("P_LRI_AUX")
    1695           0 :                t_control%auto_basis_p_lri_aux = isize
    1696             :             CASE DEFAULT
    1697        7354 :                CPABORT("Unknown basis type in AUTO_BASIS keyword:"//TRIM(tmpstringlist(1)))
    1698             :             END SELECT
    1699             :          ELSE
    1700             :             CALL cp_abort(__LOCATION__, &
    1701           0 :                           "AUTO_BASIS keyword in &PROPERTIES &TDDFT section has a wrong number of arguments.")
    1702             :          END IF
    1703             :       END DO
    1704             : 
    1705        7354 :       IF (t_control%conv < 0) &
    1706           0 :          t_control%conv = ABS(t_control%conv)
    1707             : 
    1708             :       ! DIPOLE_MOMENTS subsection
    1709        7354 :       dipole_section => section_vals_get_subs_vals(t_section, "DIPOLE_MOMENTS")
    1710        7354 :       CALL section_vals_val_get(dipole_section, "DIPOLE_FORM", explicit=explicit)
    1711        7354 :       IF (explicit) THEN
    1712          10 :          CALL section_vals_val_get(dipole_section, "DIPOLE_FORM", i_val=t_control%dipole_form)
    1713             :       ELSE
    1714        7344 :          t_control%dipole_form = 0
    1715             :       END IF
    1716        7354 :       CALL section_vals_val_get(dipole_section, "REFERENCE", i_val=t_control%dipole_reference)
    1717        7354 :       CALL section_vals_val_get(dipole_section, "REFERENCE_POINT", explicit=explicit)
    1718        7354 :       IF (explicit) THEN
    1719           0 :          CALL section_vals_val_get(dipole_section, "REFERENCE_POINT", r_vals=t_control%dipole_ref_point)
    1720             :       ELSE
    1721        7354 :          NULLIFY (t_control%dipole_ref_point)
    1722        7354 :          IF (t_control%dipole_form == tddfpt_dipole_length .AND. t_control%dipole_reference == use_mom_ref_user) THEN
    1723           0 :             CPABORT("User-defined reference point should be given explicitly")
    1724             :          END IF
    1725             :       END IF
    1726             : 
    1727             :       !SOC subsection
    1728        7354 :       soc_section => section_vals_get_subs_vals(t_section, "SOC")
    1729        7354 :       CALL section_vals_get(soc_section, explicit=explicit)
    1730        7354 :       IF (explicit) THEN
    1731           8 :          t_control%do_soc = .TRUE.
    1732             :       END IF
    1733             : 
    1734             :       ! MGRID subsection
    1735        7354 :       mgrid_section => section_vals_get_subs_vals(t_section, "MGRID")
    1736        7354 :       CALL section_vals_get(mgrid_section, explicit=t_control%mgrid_is_explicit)
    1737             : 
    1738        7354 :       IF (t_control%mgrid_is_explicit) THEN
    1739          10 :          CALL section_vals_val_get(mgrid_section, "NGRIDS", i_val=t_control%mgrid_ngrids, explicit=explicit)
    1740          10 :          IF (.NOT. explicit) t_control%mgrid_ngrids = SIZE(qs_control%e_cutoff)
    1741             : 
    1742          10 :          CALL section_vals_val_get(mgrid_section, "CUTOFF", r_val=t_control%mgrid_cutoff, explicit=explicit)
    1743          10 :          IF (.NOT. explicit) t_control%mgrid_cutoff = qs_control%cutoff
    1744             : 
    1745             :          CALL section_vals_val_get(mgrid_section, "PROGRESSION_FACTOR", &
    1746          10 :                                    r_val=t_control%mgrid_progression_factor, explicit=explicit)
    1747          10 :          IF (explicit) THEN
    1748           0 :             IF (t_control%mgrid_progression_factor <= 1.0_dp) &
    1749             :                CALL cp_abort(__LOCATION__, &
    1750           0 :                              "Progression factor should be greater then 1.0 to ensure multi-grid ordering")
    1751             :          ELSE
    1752          10 :             t_control%mgrid_progression_factor = qs_control%progression_factor
    1753             :          END IF
    1754             : 
    1755          10 :          CALL section_vals_val_get(mgrid_section, "COMMENSURATE", l_val=t_control%mgrid_commensurate_mgrids, explicit=explicit)
    1756          10 :          IF (.NOT. explicit) t_control%mgrid_commensurate_mgrids = qs_control%commensurate_mgrids
    1757          10 :          IF (t_control%mgrid_commensurate_mgrids) THEN
    1758           0 :             IF (explicit) THEN
    1759           0 :                t_control%mgrid_progression_factor = 4.0_dp
    1760             :             ELSE
    1761           0 :                t_control%mgrid_progression_factor = qs_control%progression_factor
    1762             :             END IF
    1763             :          END IF
    1764             : 
    1765          10 :          CALL section_vals_val_get(mgrid_section, "REL_CUTOFF", r_val=t_control%mgrid_relative_cutoff, explicit=explicit)
    1766          10 :          IF (.NOT. explicit) t_control%mgrid_relative_cutoff = qs_control%relative_cutoff
    1767             : 
    1768          10 :          CALL section_vals_val_get(mgrid_section, "MULTIGRID_SET", l_val=multigrid_set, explicit=explicit)
    1769          10 :          IF (.NOT. explicit) multigrid_set = .FALSE.
    1770          10 :          IF (multigrid_set) THEN
    1771           0 :             CALL section_vals_val_get(mgrid_section, "MULTIGRID_CUTOFF", r_vals=t_control%mgrid_e_cutoff)
    1772             :          ELSE
    1773          10 :             NULLIFY (t_control%mgrid_e_cutoff)
    1774             :          END IF
    1775             : 
    1776          10 :          CALL section_vals_val_get(mgrid_section, "REALSPACE", l_val=t_control%mgrid_realspace_mgrids, explicit=explicit)
    1777          10 :          IF (.NOT. explicit) t_control%mgrid_realspace_mgrids = qs_control%realspace_mgrids
    1778             : 
    1779             :          CALL section_vals_val_get(mgrid_section, "SKIP_LOAD_BALANCE_DISTRIBUTED", &
    1780          10 :                                    l_val=t_control%mgrid_skip_load_balance, explicit=explicit)
    1781          10 :          IF (.NOT. explicit) t_control%mgrid_skip_load_balance = qs_control%skip_load_balance_distributed
    1782             : 
    1783          10 :          IF (ASSOCIATED(t_control%mgrid_e_cutoff)) THEN
    1784           0 :             IF (SIZE(t_control%mgrid_e_cutoff) /= t_control%mgrid_ngrids) &
    1785           0 :                CPABORT("Inconsistent values for number of multi-grids")
    1786             : 
    1787             :             ! sort multi-grids in descending order according to their cutoff values
    1788           0 :             t_control%mgrid_e_cutoff = -t_control%mgrid_e_cutoff
    1789           0 :             ALLOCATE (inds(t_control%mgrid_ngrids))
    1790           0 :             CALL sort(t_control%mgrid_e_cutoff, t_control%mgrid_ngrids, inds)
    1791           0 :             DEALLOCATE (inds)
    1792           0 :             t_control%mgrid_e_cutoff = -t_control%mgrid_e_cutoff
    1793             :          END IF
    1794             :       END IF
    1795             : 
    1796             :       ! expand XC subsection (if given explicitly)
    1797        7354 :       xc_section => section_vals_get_subs_vals(t_section, "XC")
    1798        7354 :       xc_func => section_vals_get_subs_vals(xc_section, "XC_FUNCTIONAL")
    1799        7354 :       CALL section_vals_get(xc_func, explicit=explicit)
    1800        7354 :       IF (explicit) &
    1801         200 :          CALL xc_functionals_expand(xc_func, xc_section)
    1802             : 
    1803             :       ! sTDA subsection
    1804        7354 :       stda_section => section_vals_get_subs_vals(t_section, "STDA")
    1805        7354 :       IF (t_control%kernel == tddfpt_kernel_stda) THEN
    1806         118 :          t_control%stda_control%hfx_fraction = 0.0_dp
    1807         118 :          t_control%stda_control%do_exchange = .TRUE.
    1808         118 :          t_control%stda_control%eps_td_filter = 1.e-10_dp
    1809         118 :          t_control%stda_control%mn_alpha = -99.0_dp
    1810         118 :          t_control%stda_control%mn_beta = -99.0_dp
    1811             :          ! set default for Ewald method (on/off) dependent on periodicity
    1812         212 :          SELECT CASE (qs_control%periodicity)
    1813             :          CASE (0)
    1814          94 :             t_control%stda_control%do_ewald = .FALSE.
    1815             :          CASE (1)
    1816           0 :             t_control%stda_control%do_ewald = .TRUE.
    1817             :          CASE (2)
    1818           0 :             t_control%stda_control%do_ewald = .TRUE.
    1819             :          CASE (3)
    1820          24 :             t_control%stda_control%do_ewald = .TRUE.
    1821             :          CASE DEFAULT
    1822         118 :             CPABORT("Illegal value for periodiciy")
    1823             :          END SELECT
    1824         118 :          CALL section_vals_get(stda_section, explicit=explicit)
    1825         118 :          IF (explicit) THEN
    1826         104 :             CALL section_vals_val_get(stda_section, "HFX_FRACTION", r_val=hfx, explicit=expl)
    1827         104 :             IF (expl) t_control%stda_control%hfx_fraction = hfx
    1828         104 :             CALL section_vals_val_get(stda_section, "EPS_TD_FILTER", r_val=filter, explicit=expl)
    1829         104 :             IF (expl) t_control%stda_control%eps_td_filter = filter
    1830         104 :             CALL section_vals_val_get(stda_section, "DO_EWALD", l_val=do_ewald, explicit=expl)
    1831         104 :             IF (expl) t_control%stda_control%do_ewald = do_ewald
    1832         104 :             CALL section_vals_val_get(stda_section, "DO_EXCHANGE", l_val=do_exchange, explicit=expl)
    1833         104 :             IF (expl) t_control%stda_control%do_exchange = do_exchange
    1834         104 :             CALL section_vals_val_get(stda_section, "MATAGA_NISHIMOTO_CEXP", r_val=fval)
    1835         104 :             t_control%stda_control%mn_alpha = fval
    1836         104 :             CALL section_vals_val_get(stda_section, "MATAGA_NISHIMOTO_XEXP", r_val=fval)
    1837         104 :             t_control%stda_control%mn_beta = fval
    1838             :          END IF
    1839         118 :          CALL section_vals_val_get(stda_section, "COULOMB_SR_CUT", r_val=fval)
    1840         118 :          t_control%stda_control%coulomb_sr_cut = fval
    1841         118 :          CALL section_vals_val_get(stda_section, "COULOMB_SR_EPS", r_val=fval)
    1842         118 :          t_control%stda_control%coulomb_sr_eps = fval
    1843             :       END IF
    1844             : 
    1845        7354 :       CALL timestop(handle)
    1846        7354 :    END SUBROUTINE read_tddfpt2_control
    1847             : 
    1848             : ! **************************************************************************************************
    1849             : !> \brief Write the DFT control parameters to the output unit.
    1850             : !> \param dft_control ...
    1851             : !> \param dft_section ...
    1852             : ! **************************************************************************************************
    1853       12514 :    SUBROUTINE write_dft_control(dft_control, dft_section)
    1854             :       TYPE(dft_control_type), POINTER                    :: dft_control
    1855             :       TYPE(section_vals_type), POINTER                   :: dft_section
    1856             : 
    1857             :       CHARACTER(len=*), PARAMETER                        :: routineN = 'write_dft_control'
    1858             : 
    1859             :       CHARACTER(LEN=20)                                  :: tmpStr
    1860             :       INTEGER                                            :: handle, i, i_rep, n_rep, output_unit
    1861             :       REAL(kind=dp)                                      :: density_cut, density_smooth_cut_range, &
    1862             :                                                             gradient_cut, tau_cut
    1863             :       TYPE(cp_logger_type), POINTER                      :: logger
    1864             :       TYPE(enumeration_type), POINTER                    :: enum
    1865             :       TYPE(keyword_type), POINTER                        :: keyword
    1866             :       TYPE(section_type), POINTER                        :: section
    1867             :       TYPE(section_vals_type), POINTER                   :: xc_section
    1868             : 
    1869        8532 :       IF (dft_control%qs_control%semi_empirical) RETURN
    1870        6350 :       IF (dft_control%qs_control%dftb) RETURN
    1871        6128 :       IF (dft_control%qs_control%xtb) THEN
    1872         962 :          CALL write_xtb_control(dft_control%qs_control%xtb_control, dft_section)
    1873         962 :          RETURN
    1874             :       END IF
    1875        5166 :       CALL timeset(routineN, handle)
    1876             : 
    1877        5166 :       NULLIFY (logger)
    1878        5166 :       logger => cp_get_default_logger()
    1879             : 
    1880             :       output_unit = cp_print_key_unit_nr(logger, dft_section, &
    1881        5166 :                                          "PRINT%DFT_CONTROL_PARAMETERS", extension=".Log")
    1882             : 
    1883        5166 :       IF (output_unit > 0) THEN
    1884             : 
    1885        1342 :          xc_section => section_vals_get_subs_vals(dft_section, "XC")
    1886             : 
    1887        1342 :          IF (dft_control%uks) THEN
    1888             :             WRITE (UNIT=output_unit, FMT="(/,T2,A,T78,A)") &
    1889         409 :                "DFT| Spin unrestricted (spin-polarized) Kohn-Sham calculation", "UKS"
    1890         933 :          ELSE IF (dft_control%roks) THEN
    1891             :             WRITE (UNIT=output_unit, FMT="(/,T2,A,T77,A)") &
    1892          15 :                "DFT| Spin restricted open Kohn-Sham calculation", "ROKS"
    1893             :          ELSE
    1894             :             WRITE (UNIT=output_unit, FMT="(/,T2,A,T78,A)") &
    1895         918 :                "DFT| Spin restricted Kohn-Sham (RKS) calculation", "RKS"
    1896             :          END IF
    1897             : 
    1898             :          WRITE (UNIT=output_unit, FMT="(T2,A,T76,I5)") &
    1899        1342 :             "DFT| Multiplicity", dft_control%multiplicity
    1900             :          WRITE (UNIT=output_unit, FMT="(T2,A,T76,I5)") &
    1901        1342 :             "DFT| Number of spin states", dft_control%nspins
    1902             : 
    1903             :          WRITE (UNIT=output_unit, FMT="(T2,A,T76,I5)") &
    1904        1342 :             "DFT| Charge", dft_control%charge
    1905             : 
    1906        1342 :          IF (dft_control%sic_method_id .NE. sic_none) CALL cite_reference(VandeVondele2005b)
    1907        2670 :          SELECT CASE (dft_control%sic_method_id)
    1908             :          CASE (sic_none)
    1909        1328 :             tmpstr = "NO"
    1910             :          CASE (sic_mauri_spz)
    1911           6 :             tmpstr = "SPZ/MAURI SIC"
    1912             :          CASE (sic_mauri_us)
    1913           3 :             tmpstr = "US/MAURI SIC"
    1914             :          CASE (sic_ad)
    1915           3 :             tmpstr = "AD SIC"
    1916             :          CASE (sic_eo)
    1917           2 :             tmpstr = "Explicit Orbital SIC"
    1918             :          CASE DEFAULT
    1919             :             ! fix throughout the cp2k for this option
    1920        1342 :             CPABORT("SIC option unknown")
    1921             :          END SELECT
    1922             : 
    1923             :          WRITE (UNIT=output_unit, FMT="(T2,A,T61,A20)") &
    1924        1342 :             "DFT| Self-interaction correction (SIC)", ADJUSTR(TRIM(tmpstr))
    1925             : 
    1926        1342 :          IF (dft_control%sic_method_id /= sic_none) THEN
    1927             :             WRITE (UNIT=output_unit, FMT="(T2,A,T66,ES15.6)") &
    1928          14 :                "DFT| SIC scaling parameter a", dft_control%sic_scaling_a, &
    1929          28 :                "DFT| SIC scaling parameter b", dft_control%sic_scaling_b
    1930             :          END IF
    1931             : 
    1932        1342 :          IF (dft_control%sic_method_id == sic_eo) THEN
    1933           2 :             IF (dft_control%sic_list_id == sic_list_all) THEN
    1934             :                WRITE (UNIT=output_unit, FMT="(T2,A,T66,A)") &
    1935           1 :                   "DFT| SIC orbitals", "ALL"
    1936             :             END IF
    1937           2 :             IF (dft_control%sic_list_id == sic_list_unpaired) THEN
    1938             :                WRITE (UNIT=output_unit, FMT="(T2,A,T66,A)") &
    1939           1 :                   "DFT| SIC orbitals", "UNPAIRED"
    1940             :             END IF
    1941             :          END IF
    1942             : 
    1943        1342 :          CALL section_vals_val_get(xc_section, "density_cutoff", r_val=density_cut)
    1944        1342 :          CALL section_vals_val_get(xc_section, "gradient_cutoff", r_val=gradient_cut)
    1945        1342 :          CALL section_vals_val_get(xc_section, "tau_cutoff", r_val=tau_cut)
    1946        1342 :          CALL section_vals_val_get(xc_section, "density_smooth_cutoff_range", r_val=density_smooth_cut_range)
    1947             : 
    1948             :          WRITE (UNIT=output_unit, FMT="(T2,A,T66,ES15.6)") &
    1949        1342 :             "DFT| Cutoffs: density ", density_cut, &
    1950        1342 :             "DFT|          gradient", gradient_cut, &
    1951        1342 :             "DFT|          tau     ", tau_cut, &
    1952        2684 :             "DFT|          cutoff_smoothing_range", density_smooth_cut_range
    1953             :          CALL section_vals_val_get(xc_section, "XC_GRID%XC_SMOOTH_RHO", &
    1954        1342 :                                    c_val=tmpStr)
    1955             :          WRITE (output_unit, '( A, T61, A )') &
    1956        1342 :             " DFT| XC density smoothing ", ADJUSTR(tmpStr)
    1957             :          CALL section_vals_val_get(xc_section, "XC_GRID%XC_DERIV", &
    1958        1342 :                                    c_val=tmpStr)
    1959             :          WRITE (output_unit, '( A, T61, A )') &
    1960        1342 :             " DFT| XC derivatives ", ADJUSTR(tmpStr)
    1961        1342 :          IF (dft_control%dft_plus_u) THEN
    1962          16 :             NULLIFY (enum, keyword, section)
    1963          16 :             CALL create_dft_section(section)
    1964          16 :             keyword => section_get_keyword(section, "PLUS_U_METHOD")
    1965          16 :             CALL keyword_get(keyword, enum=enum)
    1966             :             WRITE (UNIT=output_unit, FMT="(/,T2,A,T41,A40)") &
    1967          16 :                "DFT+U| Method", ADJUSTR(TRIM(enum_i2c(enum, dft_control%plus_u_method_id)))
    1968             :             WRITE (UNIT=output_unit, FMT="(T2,A)") &
    1969          16 :                "DFT+U| Check atomic kind information for details"
    1970          16 :             CALL section_release(section)
    1971             :          END IF
    1972             : 
    1973        1342 :          WRITE (UNIT=output_unit, FMT="(A)") ""
    1974        1342 :          CALL xc_write(output_unit, xc_section, dft_control%lsd)
    1975             : 
    1976        1342 :          IF (dft_control%apply_period_efield) THEN
    1977           6 :             WRITE (UNIT=output_unit, FMT="(A)") ""
    1978           6 :             IF (dft_control%period_efield%displacement_field) THEN
    1979             :                WRITE (UNIT=output_unit, FMT="(T2,A)") &
    1980           0 :                   "PERIODIC_EFIELD| Use displacement field formulation"
    1981             :                WRITE (UNIT=output_unit, FMT="(T2,A,T66,1X,ES14.6)") &
    1982           0 :                   "PERIODIC_EFIELD| Displacement field filter: x", &
    1983           0 :                   dft_control%period_efield%d_filter(1), &
    1984           0 :                   "PERIODIC_EFIELD|                            y", &
    1985           0 :                   dft_control%period_efield%d_filter(2), &
    1986           0 :                   "PERIODIC_EFIELD|                            z", &
    1987           0 :                   dft_control%period_efield%d_filter(3)
    1988             :             END IF
    1989             :             WRITE (UNIT=output_unit, FMT="(T2,A,T66,1X,ES14.6)") &
    1990           6 :                "PERIODIC_EFIELD| Polarisation vector:       x", &
    1991           6 :                dft_control%period_efield%polarisation(1), &
    1992           6 :                "PERIODIC_EFIELD|                            y", &
    1993           6 :                dft_control%period_efield%polarisation(2), &
    1994           6 :                "PERIODIC_EFIELD|                            z", &
    1995          12 :                dft_control%period_efield%polarisation(3)
    1996             : 
    1997             :             WRITE (UNIT=output_unit, FMT="(T2,A,T66,1X,I14)") &
    1998           6 :                "PERIODIC_EFIELD| Start Frame:", &
    1999           6 :                dft_control%period_efield%start_frame, &
    2000           6 :                "PERIODIC_EFIELD| End Frame:", &
    2001          12 :                dft_control%period_efield%end_frame
    2002             : 
    2003           6 :             IF (ALLOCATED(dft_control%period_efield%strength_list)) THEN
    2004             :                WRITE (UNIT=output_unit, FMT="(T2,A,T66,1X,I14)") &
    2005           2 :                   "PERIODIC_EFIELD| Number of Intensities:", &
    2006           4 :                   SIZE(dft_control%period_efield%strength_list)
    2007             :                WRITE (UNIT=output_unit, FMT="(T2,A,I10,T66,1X,ES14.6)") &
    2008           2 :                   "PERIODIC_EFIELD| Intensity List [a.u.] ", &
    2009           4 :                   1, dft_control%period_efield%strength_list(1)
    2010          24 :                DO i = 2, SIZE(dft_control%period_efield%strength_list)
    2011             :                   WRITE (UNIT=output_unit, FMT="(T2,A,I10,T66,1X,ES14.6)") &
    2012          22 :                      "PERIODIC_EFIELD|                       ", &
    2013          46 :                      i, dft_control%period_efield%strength_list(i)
    2014             :                END DO
    2015             :             ELSE
    2016             :                WRITE (UNIT=output_unit, FMT="(T2,A,T66,1X,ES14.6)") &
    2017           4 :                   "PERIODIC_EFIELD| Intensity [a.u.]:", &
    2018           8 :                   dft_control%period_efield%strength
    2019             :             END IF
    2020             : 
    2021          24 :             IF (SQRT(DOT_PRODUCT(dft_control%period_efield%polarisation, &
    2022             :                                  dft_control%period_efield%polarisation)) < EPSILON(0.0_dp)) THEN
    2023           0 :                CPABORT("Invalid (too small) polarisation vector specified for PERIODIC_EFIELD")
    2024             :             END IF
    2025             :          END IF
    2026             : 
    2027        1342 :          IF (dft_control%do_sccs) THEN
    2028             :             WRITE (UNIT=output_unit, FMT="(/,T2,A)") &
    2029           5 :                "SCCS| Self-consistent continuum solvation model"
    2030             :             WRITE (UNIT=output_unit, FMT="(T2,A,T61,ES20.6)") &
    2031           5 :                "SCCS| Relative permittivity of the solvent (medium)", &
    2032           5 :                dft_control%sccs_control%epsilon_solvent, &
    2033           5 :                "SCCS| Absolute permittivity [a.u.]", &
    2034          10 :                dft_control%sccs_control%epsilon_solvent/fourpi
    2035           9 :             SELECT CASE (dft_control%sccs_control%method_id)
    2036             :             CASE (sccs_andreussi)
    2037             :                WRITE (UNIT=output_unit, FMT="(T2,A,/,(T2,A,T61,ES20.6))") &
    2038           4 :                   "SCCS| Dielectric function proposed by Andreussi et al.", &
    2039           4 :                   "SCCS|  rho_max", dft_control%sccs_control%rho_max, &
    2040           8 :                   "SCCS|  rho_min", dft_control%sccs_control%rho_min
    2041             :             CASE (sccs_fattebert_gygi)
    2042             :                WRITE (UNIT=output_unit, FMT="(T2,A,/,(T2,A,T61,ES20.6))") &
    2043           1 :                   "SCCS| Dielectric function proposed by Fattebert and Gygi", &
    2044           1 :                   "SCCS|  beta", dft_control%sccs_control%beta, &
    2045           2 :                   "SCCS|  rho_zero", dft_control%sccs_control%rho_zero
    2046             :             CASE DEFAULT
    2047           5 :                CPABORT("Invalid SCCS model specified. Please, check your input!")
    2048             :             END SELECT
    2049           6 :             SELECT CASE (dft_control%sccs_control%derivative_method)
    2050             :             CASE (sccs_derivative_fft)
    2051             :                WRITE (UNIT=output_unit, FMT="(T2,A,T46,A35)") &
    2052           1 :                   "SCCS| Numerical derivative calculation", &
    2053           2 :                   ADJUSTR("FFT")
    2054             :             CASE (sccs_derivative_cd3)
    2055             :                WRITE (UNIT=output_unit, FMT="(T2,A,T46,A35)") &
    2056           0 :                   "SCCS| Numerical derivative calculation", &
    2057           0 :                   ADJUSTR("3-point stencil central differences")
    2058             :             CASE (sccs_derivative_cd5)
    2059             :                WRITE (UNIT=output_unit, FMT="(T2,A,T46,A35)") &
    2060           4 :                   "SCCS| Numerical derivative calculation", &
    2061           8 :                   ADJUSTR("5-point stencil central differences")
    2062             :             CASE (sccs_derivative_cd7)
    2063             :                WRITE (UNIT=output_unit, FMT="(T2,A,T46,A35)") &
    2064           0 :                   "SCCS| Numerical derivative calculation", &
    2065           0 :                   ADJUSTR("7-point stencil central differences")
    2066             :             CASE DEFAULT
    2067             :                CALL cp_abort(__LOCATION__, &
    2068             :                              "Invalid derivative method specified for SCCS model. "// &
    2069           5 :                              "Please, check your input!")
    2070             :             END SELECT
    2071             :             WRITE (UNIT=output_unit, FMT="(T2,A,T61,ES20.6)") &
    2072           5 :                "SCCS| Repulsion parameter alpha [mN/m] = [dyn/cm]", &
    2073          10 :                cp_unit_from_cp2k(dft_control%sccs_control%alpha_solvent, "mN/m")
    2074             :             WRITE (UNIT=output_unit, FMT="(T2,A,T61,ES20.6)") &
    2075           5 :                "SCCS| Dispersion parameter beta [GPa]", &
    2076          10 :                cp_unit_from_cp2k(dft_control%sccs_control%beta_solvent, "GPa")
    2077             :             WRITE (UNIT=output_unit, FMT="(T2,A,T61,ES20.6)") &
    2078           5 :                "SCCS| Surface tension gamma [mN/m] = [dyn/cm]", &
    2079          10 :                cp_unit_from_cp2k(dft_control%sccs_control%gamma_solvent, "mN/m")
    2080             :             WRITE (UNIT=output_unit, FMT="(T2,A,T61,ES20.6)") &
    2081           5 :                "SCCS| Mixing parameter applied during the iteration cycle", &
    2082          10 :                dft_control%sccs_control%mixing
    2083             :             WRITE (UNIT=output_unit, FMT="(T2,A,T61,ES20.6)") &
    2084           5 :                "SCCS| Tolerance for the convergence of the SCCS iteration cycle", &
    2085          10 :                dft_control%sccs_control%eps_sccs
    2086             :             WRITE (UNIT=output_unit, FMT="(T2,A,T61,I20)") &
    2087           5 :                "SCCS| Maximum number of iteration steps", &
    2088          10 :                dft_control%sccs_control%max_iter
    2089             :             WRITE (UNIT=output_unit, FMT="(T2,A,T61,ES20.6)") &
    2090           5 :                "SCCS| SCF convergence threshold for starting the SCCS iteration", &
    2091          10 :                dft_control%sccs_control%eps_scf
    2092             :             WRITE (UNIT=output_unit, FMT="(T2,A,T61,ES20.6)") &
    2093           5 :                "SCCS| Numerical increment for the cavity surface calculation", &
    2094          10 :                dft_control%sccs_control%delta_rho
    2095             :          END IF
    2096             : 
    2097        1342 :          WRITE (UNIT=output_unit, FMT="(A)") ""
    2098             : 
    2099             :       END IF
    2100             : 
    2101        5166 :       IF (dft_control%hairy_probes .EQV. .TRUE.) THEN
    2102           4 :          n_rep = SIZE(dft_control%probe)
    2103           4 :          IF (output_unit > 0) THEN
    2104           6 :             DO i_rep = 1, n_rep
    2105             :                WRITE (UNIT=output_unit, FMT="(T2,A,I5)") &
    2106           4 :                   "HP | hair probe set", i_rep
    2107             :                WRITE (UNIT=output_unit, FMT="(T2,A,T61,*(I5))") &
    2108           4 :                   "HP| atom indexes", &
    2109          12 :                   (dft_control%probe(i_rep)%atom_ids(i), i=1, dft_control%probe(i_rep)%natoms)
    2110             :                WRITE (UNIT=output_unit, FMT="(T2,A,T61,ES20.6)") &
    2111           4 :                   "HP| potential", dft_control%probe(i_rep)%mu
    2112             :                WRITE (UNIT=output_unit, FMT="(T2,A,T61,F20.2)") &
    2113           4 :                   "HP| temperature", dft_control%probe(i_rep)%T
    2114             :                WRITE (UNIT=output_unit, FMT="(T2,A,T61,ES20.6)") &
    2115           6 :                   "HP| eps_hp", dft_control%probe(i_rep)%eps_hp
    2116             :             END DO
    2117             :          END IF
    2118             :       END IF
    2119             : 
    2120             :       CALL cp_print_key_finished_output(output_unit, logger, dft_section, &
    2121        5166 :                                         "PRINT%DFT_CONTROL_PARAMETERS")
    2122             : 
    2123        5166 :       CALL timestop(handle)
    2124             : 
    2125             :    END SUBROUTINE write_dft_control
    2126             : 
    2127             : ! **************************************************************************************************
    2128             : !> \brief Write the ADMM control parameters to the output unit.
    2129             : !> \param admm_control ...
    2130             : !> \param dft_section ...
    2131             : ! **************************************************************************************************
    2132         446 :    SUBROUTINE write_admm_control(admm_control, dft_section)
    2133             :       TYPE(admm_control_type), POINTER                   :: admm_control
    2134             :       TYPE(section_vals_type), POINTER                   :: dft_section
    2135             : 
    2136             :       INTEGER                                            :: iounit
    2137             :       TYPE(cp_logger_type), POINTER                      :: logger
    2138             : 
    2139         446 :       NULLIFY (logger)
    2140         446 :       logger => cp_get_default_logger()
    2141             : 
    2142             :       iounit = cp_print_key_unit_nr(logger, dft_section, &
    2143         446 :                                     "PRINT%DFT_CONTROL_PARAMETERS", extension=".Log")
    2144             : 
    2145         446 :       IF (iounit > 0) THEN
    2146             : 
    2147         233 :          SELECT CASE (admm_control%admm_type)
    2148             :          CASE (no_admm_type)
    2149         114 :             WRITE (UNIT=iounit, FMT="(/,T2,A,T77,A)") "ADMM| Specific ADMM type specified", "NONE"
    2150             :          CASE (admm1_type)
    2151           1 :             WRITE (UNIT=iounit, FMT="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMM1"
    2152             :          CASE (admm2_type)
    2153           1 :             WRITE (UNIT=iounit, FMT="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMM2"
    2154             :          CASE (admms_type)
    2155           1 :             WRITE (UNIT=iounit, FMT="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMMS"
    2156             :          CASE (admmp_type)
    2157           1 :             WRITE (UNIT=iounit, FMT="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMMP"
    2158             :          CASE (admmq_type)
    2159           1 :             WRITE (UNIT=iounit, FMT="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMMQ"
    2160             :          CASE DEFAULT
    2161         119 :             CPABORT("admm_type")
    2162             :          END SELECT
    2163             : 
    2164         189 :          SELECT CASE (admm_control%purification_method)
    2165             :          CASE (do_admm_purify_none)
    2166          70 :             WRITE (UNIT=iounit, FMT="(T2,A,T77,A)") "ADMM| Density matrix purification method", "NONE"
    2167             :          CASE (do_admm_purify_cauchy)
    2168           9 :             WRITE (UNIT=iounit, FMT="(T2,A,T75,A)") "ADMM| Density matrix purification method", "Cauchy"
    2169             :          CASE (do_admm_purify_cauchy_subspace)
    2170           5 :             WRITE (UNIT=iounit, FMT="(T2,A,T66,A)") "ADMM| Density matrix purification method", "Cauchy subspace"
    2171             :          CASE (do_admm_purify_mo_diag)
    2172          25 :             WRITE (UNIT=iounit, FMT="(T2,A,T63,A)") "ADMM| Density matrix purification method", "MO diagonalization"
    2173             :          CASE (do_admm_purify_mo_no_diag)
    2174           3 :             WRITE (UNIT=iounit, FMT="(T2,A,T71,A)") "ADMM| Density matrix purification method", "MO no diag"
    2175             :          CASE (do_admm_purify_mcweeny)
    2176           1 :             WRITE (UNIT=iounit, FMT="(T2,A,T74,A)") "ADMM| Density matrix purification method", "McWeeny"
    2177             :          CASE (do_admm_purify_none_dm)
    2178           6 :             WRITE (UNIT=iounit, FMT="(T2,A,T73,A)") "ADMM| Density matrix purification method", "NONE(DM)"
    2179             :          CASE DEFAULT
    2180         119 :             CPABORT("admm_purification_method")
    2181             :          END SELECT
    2182             : 
    2183         214 :          SELECT CASE (admm_control%method)
    2184             :          CASE (do_admm_basis_projection)
    2185          95 :             WRITE (UNIT=iounit, FMT="(T2,A)") "ADMM| Orbital projection on ADMM basis"
    2186             :          CASE (do_admm_blocking_purify_full)
    2187           3 :             WRITE (UNIT=iounit, FMT="(T2,A)") "ADMM| Blocked Fock matrix projection with full purification"
    2188             :          CASE (do_admm_blocked_projection)
    2189           6 :             WRITE (UNIT=iounit, FMT="(T2,A)") "ADMM| Blocked Fock matrix projection"
    2190             :          CASE (do_admm_charge_constrained_projection)
    2191          15 :             WRITE (UNIT=iounit, FMT="(T2,A)") "ADMM| Orbital projection with charge constrain"
    2192             :          CASE DEFAULT
    2193         119 :             CPABORT("admm method")
    2194             :          END SELECT
    2195             : 
    2196         136 :          SELECT CASE (admm_control%scaling_model)
    2197             :          CASE (do_admm_exch_scaling_none)
    2198             :          CASE (do_admm_exch_scaling_merlot)
    2199          17 :             WRITE (UNIT=iounit, FMT="(T2,A)") "ADMM| Use Merlot (2014) scaling model"
    2200             :          CASE DEFAULT
    2201         119 :             CPABORT("admm scaling_model")
    2202             :          END SELECT
    2203             : 
    2204         119 :          WRITE (UNIT=iounit, FMT="(T2,A,T61,G20.10)") "ADMM| eps_filter", admm_control%eps_filter
    2205             : 
    2206         127 :          SELECT CASE (admm_control%aux_exch_func)
    2207             :          CASE (do_admm_aux_exch_func_none)
    2208           8 :             WRITE (UNIT=iounit, FMT="(T2,A)") "ADMM| No exchange functional correction term used"
    2209             :          CASE (do_admm_aux_exch_func_default, do_admm_aux_exch_func_default_libxc)
    2210          85 :             WRITE (UNIT=iounit, FMT="(T2,A,T74,A)") "ADMM| Exchange functional in correction term", "(W)PBEX"
    2211             :          CASE (do_admm_aux_exch_func_pbex, do_admm_aux_exch_func_pbex_libxc)
    2212          17 :             WRITE (UNIT=iounit, FMT="(T2,A,T77,A)") "ADMM| Exchange functional in correction term", "PBEX"
    2213             :          CASE (do_admm_aux_exch_func_opt, do_admm_aux_exch_func_opt_libxc)
    2214           8 :             WRITE (UNIT=iounit, FMT="(T2,A,T77,A)") "ADMM| Exchange functional in correction term", "OPTX"
    2215             :          CASE (do_admm_aux_exch_func_bee, do_admm_aux_exch_func_bee_libxc)
    2216           1 :             WRITE (UNIT=iounit, FMT="(T2,A,T74,A)") "ADMM| Exchange functional in correction term", "Becke88"
    2217             :          CASE (do_admm_aux_exch_func_sx_libxc)
    2218           0 :             WRITE (UNIT=iounit, FMT="(T2,A,T74,A)") "ADMM| Exchange functional in correction term", "SlaterX"
    2219             :          CASE DEFAULT
    2220         119 :             CPABORT("admm aux_exch_func")
    2221             :          END SELECT
    2222             : 
    2223         119 :          WRITE (UNIT=iounit, FMT="(A)") ""
    2224             : 
    2225             :       END IF
    2226             : 
    2227             :       CALL cp_print_key_finished_output(iounit, logger, dft_section, &
    2228         446 :                                         "PRINT%DFT_CONTROL_PARAMETERS")
    2229         446 :    END SUBROUTINE write_admm_control
    2230             : 
    2231             : ! **************************************************************************************************
    2232             : !> \brief Write the xTB control parameters to the output unit.
    2233             : !> \param xtb_control ...
    2234             : !> \param dft_section ...
    2235             : ! **************************************************************************************************
    2236         962 :    SUBROUTINE write_xtb_control(xtb_control, dft_section)
    2237             :       TYPE(xtb_control_type), POINTER                    :: xtb_control
    2238             :       TYPE(section_vals_type), POINTER                   :: dft_section
    2239             : 
    2240             :       CHARACTER(len=*), PARAMETER                        :: routineN = 'write_xtb_control'
    2241             : 
    2242             :       INTEGER                                            :: handle, output_unit
    2243             :       TYPE(cp_logger_type), POINTER                      :: logger
    2244             : 
    2245         962 :       CALL timeset(routineN, handle)
    2246         962 :       NULLIFY (logger)
    2247         962 :       logger => cp_get_default_logger()
    2248             : 
    2249             :       output_unit = cp_print_key_unit_nr(logger, dft_section, &
    2250         962 :                                          "PRINT%DFT_CONTROL_PARAMETERS", extension=".Log")
    2251             : 
    2252         962 :       IF (output_unit > 0) THEN
    2253             : 
    2254             :          WRITE (UNIT=output_unit, FMT="(/,T2,A,T31,A50)") &
    2255          47 :             "xTB| Parameter file", ADJUSTR(TRIM(xtb_control%parameter_file_name))
    2256             :          WRITE (UNIT=output_unit, FMT="(T2,A,T71,I10)") &
    2257          47 :             "xTB| Basis expansion STO-NG", xtb_control%sto_ng
    2258             :          WRITE (UNIT=output_unit, FMT="(T2,A,T71,I10)") &
    2259          47 :             "xTB| Basis expansion STO-NG for Hydrogen", xtb_control%h_sto_ng
    2260             :          WRITE (UNIT=output_unit, FMT="(T2,A,T71,E10.4)") &
    2261          47 :             "xTB| Repulsive pair potential accuracy", xtb_control%eps_pair
    2262             :          WRITE (UNIT=output_unit, FMT="(T2,A,T71,F10.6)") &
    2263          47 :             "xTB| Repulsive enhancement factor", xtb_control%enscale
    2264             :          WRITE (UNIT=output_unit, FMT="(T2,A,T71,L10)") &
    2265          47 :             "xTB| Halogen interaction potential", xtb_control%xb_interaction
    2266             :          WRITE (UNIT=output_unit, FMT="(T2,A,T71,F10.3)") &
    2267          47 :             "xTB| Halogen interaction potential cutoff radius", xtb_control%xb_radius
    2268             :          WRITE (UNIT=output_unit, FMT="(T2,A,T71,L10)") &
    2269          47 :             "xTB| Nonbonded interactions", xtb_control%do_nonbonded
    2270          47 :          SELECT CASE (xtb_control%vdw_type)
    2271             :          CASE (xtb_vdw_type_none)
    2272           0 :             WRITE (UNIT=output_unit, FMT="(T2,A)") "xTB| No vdW potential selected"
    2273             :          CASE (xtb_vdw_type_d3)
    2274          47 :             WRITE (UNIT=output_unit, FMT="(T2,A,T72,A)") "xTB| vdW potential type:", "DFTD3(BJ)"
    2275             :             WRITE (UNIT=output_unit, FMT="(T2,A,T31,A50)") &
    2276          47 :                "xTB| D3 Dispersion: Parameter file", ADJUSTR(TRIM(xtb_control%dispersion_parameter_file))
    2277             :          CASE (xtb_vdw_type_d4)
    2278           0 :             WRITE (UNIT=output_unit, FMT="(T2,A,T76,A)") "xTB| vdW potential type:", "DFTD4"
    2279             :             WRITE (UNIT=output_unit, FMT="(T2,A,T31,A50)") &
    2280           0 :                "xTB| D4 Dispersion: Parameter file", ADJUSTR(TRIM(xtb_control%dispersion_parameter_file))
    2281             :          CASE DEFAULT
    2282          47 :             CPABORT("vdw type")
    2283             :          END SELECT
    2284             :          WRITE (UNIT=output_unit, FMT="(T2,A,T51,3F10.3)") &
    2285          47 :             "xTB| Huckel constants ks kp kd", xtb_control%ks, xtb_control%kp, xtb_control%kd
    2286             :          WRITE (UNIT=output_unit, FMT="(T2,A,T61,2F10.3)") &
    2287          47 :             "xTB| Huckel constants ksp k2sh", xtb_control%ksp, xtb_control%k2sh
    2288             :          WRITE (UNIT=output_unit, FMT="(T2,A,T71,F10.3)") &
    2289          47 :             "xTB| Mataga-Nishimoto exponent", xtb_control%kg
    2290             :          WRITE (UNIT=output_unit, FMT="(T2,A,T71,F10.3)") &
    2291          47 :             "xTB| Repulsion potential exponent", xtb_control%kf
    2292             :          WRITE (UNIT=output_unit, FMT="(T2,A,T51,3F10.3)") &
    2293          47 :             "xTB| Coordination number scaling kcn(s) kcn(p) kcn(d)", &
    2294          94 :             xtb_control%kcns, xtb_control%kcnp, xtb_control%kcnd
    2295             :          WRITE (UNIT=output_unit, FMT="(T2,A,T71,F10.3)") &
    2296          47 :             "xTB| Electronegativity scaling", xtb_control%ken
    2297             :          WRITE (UNIT=output_unit, FMT="(T2,A,T61,2F10.3)") &
    2298          47 :             "xTB| Halogen potential scaling kxr kx2", xtb_control%kxr, xtb_control%kx2
    2299          47 :          WRITE (UNIT=output_unit, FMT="(/)")
    2300             : 
    2301             :       END IF
    2302             : 
    2303             :       CALL cp_print_key_finished_output(output_unit, logger, dft_section, &
    2304         962 :                                         "PRINT%DFT_CONTROL_PARAMETERS")
    2305             : 
    2306         962 :       CALL timestop(handle)
    2307             : 
    2308         962 :    END SUBROUTINE write_xtb_control
    2309             : 
    2310             : ! **************************************************************************************************
    2311             : !> \brief Purpose: Write the QS control parameters to the output unit.
    2312             : !> \param qs_control ...
    2313             : !> \param dft_section ...
    2314             : ! **************************************************************************************************
    2315       12514 :    SUBROUTINE write_qs_control(qs_control, dft_section)
    2316             :       TYPE(qs_control_type), INTENT(IN)                  :: qs_control
    2317             :       TYPE(section_vals_type), POINTER                   :: dft_section
    2318             : 
    2319             :       CHARACTER(len=*), PARAMETER                        :: routineN = 'write_qs_control'
    2320             : 
    2321             :       CHARACTER(len=20)                                  :: method, quadrature
    2322             :       INTEGER                                            :: handle, i, igrid_level, ngrid_level, &
    2323             :                                                             output_unit
    2324             :       TYPE(cp_logger_type), POINTER                      :: logger
    2325             :       TYPE(ddapc_restraint_type), POINTER                :: ddapc_restraint_control
    2326             :       TYPE(enumeration_type), POINTER                    :: enum
    2327             :       TYPE(keyword_type), POINTER                        :: keyword
    2328             :       TYPE(section_type), POINTER                        :: qs_section
    2329             :       TYPE(section_vals_type), POINTER                   :: print_section_vals, qs_section_vals
    2330             : 
    2331        8532 :       IF (qs_control%semi_empirical) RETURN
    2332        6350 :       IF (qs_control%dftb) RETURN
    2333        6128 :       IF (qs_control%xtb) RETURN
    2334        5166 :       CALL timeset(routineN, handle)
    2335        5166 :       NULLIFY (logger, print_section_vals, qs_section, qs_section_vals)
    2336        5166 :       logger => cp_get_default_logger()
    2337        5166 :       print_section_vals => section_vals_get_subs_vals(dft_section, "PRINT")
    2338        5166 :       qs_section_vals => section_vals_get_subs_vals(dft_section, "QS")
    2339        5166 :       CALL section_vals_get(qs_section_vals, section=qs_section)
    2340             : 
    2341        5166 :       NULLIFY (enum, keyword)
    2342        5166 :       keyword => section_get_keyword(qs_section, "METHOD")
    2343        5166 :       CALL keyword_get(keyword, enum=enum)
    2344        5166 :       method = enum_i2c(enum, qs_control%method_id)
    2345             : 
    2346        5166 :       NULLIFY (enum, keyword)
    2347        5166 :       keyword => section_get_keyword(qs_section, "QUADRATURE")
    2348        5166 :       CALL keyword_get(keyword, enum=enum)
    2349        5166 :       quadrature = enum_i2c(enum, qs_control%gapw_control%quadrature)
    2350             : 
    2351             :       output_unit = cp_print_key_unit_nr(logger, print_section_vals, &
    2352        5166 :                                          "DFT_CONTROL_PARAMETERS", extension=".Log")
    2353        5166 :       IF (output_unit > 0) THEN
    2354        1342 :          ngrid_level = SIZE(qs_control%e_cutoff)
    2355             :          WRITE (UNIT=output_unit, FMT="(/,T2,A,T61,A20)") &
    2356        1342 :             "QS| Method:", ADJUSTR(method)
    2357        1342 :          IF (qs_control%pw_grid_opt%spherical) THEN
    2358             :             WRITE (UNIT=output_unit, FMT="(T2,A,T61,A)") &
    2359           0 :                "QS| Density plane wave grid type", " SPHERICAL HALFSPACE"
    2360        1342 :          ELSE IF (qs_control%pw_grid_opt%fullspace) THEN
    2361             :             WRITE (UNIT=output_unit, FMT="(T2,A,T57,A)") &
    2362        1342 :                "QS| Density plane wave grid type", " NON-SPHERICAL FULLSPACE"
    2363             :          ELSE
    2364             :             WRITE (UNIT=output_unit, FMT="(T2,A,T57,A)") &
    2365           0 :                "QS| Density plane wave grid type", " NON-SPHERICAL HALFSPACE"
    2366             :          END IF
    2367             :          WRITE (UNIT=output_unit, FMT="(T2,A,T71,I10)") &
    2368        1342 :             "QS| Number of grid levels:", SIZE(qs_control%e_cutoff)
    2369        1342 :          IF (ngrid_level == 1) THEN
    2370             :             WRITE (UNIT=output_unit, FMT="(T2,A,T71,F10.1)") &
    2371          69 :                "QS| Density cutoff [a.u.]:", qs_control%e_cutoff(1)
    2372             :          ELSE
    2373             :             WRITE (UNIT=output_unit, FMT="(T2,A,T71,F10.1)") &
    2374        1273 :                "QS| Density cutoff [a.u.]:", qs_control%cutoff
    2375        1273 :             IF (qs_control%commensurate_mgrids) &
    2376         131 :                WRITE (UNIT=output_unit, FMT="(T2,A)") "QS| Using commensurate multigrids"
    2377             :             WRITE (UNIT=output_unit, FMT="(T2,A,T71,F10.1)") &
    2378        1273 :                "QS| Multi grid cutoff [a.u.]: 1) grid level", qs_control%e_cutoff(1)
    2379             :             WRITE (UNIT=output_unit, FMT="(T2,A,I3,A,T71,F10.1)") &
    2380        3982 :                ("QS|                         ", igrid_level, ") grid level", &
    2381        5255 :                 qs_control%e_cutoff(igrid_level), &
    2382        6528 :                 igrid_level=2, SIZE(qs_control%e_cutoff))
    2383             :          END IF
    2384        1342 :          IF (qs_control%pao) THEN
    2385           0 :             WRITE (UNIT=output_unit, FMT="(T2,A)") "QS| PAO active"
    2386             :          END IF
    2387             :          WRITE (UNIT=output_unit, FMT="(T2,A,T71,F10.1)") &
    2388        1342 :             "QS| Grid level progression factor:", qs_control%progression_factor
    2389             :          WRITE (UNIT=output_unit, FMT="(T2,A,T71,F10.1)") &
    2390        1342 :             "QS| Relative density cutoff [a.u.]:", qs_control%relative_cutoff
    2391             :          WRITE (UNIT=output_unit, FMT="(T2,A,T73,ES8.1)") &
    2392        1342 :             "QS| Interaction thresholds: eps_pgf_orb:", &
    2393        1342 :             qs_control%eps_pgf_orb, &
    2394        1342 :             "QS|                         eps_filter_matrix:", &
    2395        1342 :             qs_control%eps_filter_matrix, &
    2396        1342 :             "QS|                         eps_core_charge:", &
    2397        1342 :             qs_control%eps_core_charge, &
    2398        1342 :             "QS|                         eps_rho_gspace:", &
    2399        1342 :             qs_control%eps_rho_gspace, &
    2400        1342 :             "QS|                         eps_rho_rspace:", &
    2401        1342 :             qs_control%eps_rho_rspace, &
    2402        1342 :             "QS|                         eps_gvg_rspace:", &
    2403        1342 :             qs_control%eps_gvg_rspace, &
    2404        1342 :             "QS|                         eps_ppl:", &
    2405        1342 :             qs_control%eps_ppl, &
    2406        1342 :             "QS|                         eps_ppnl:", &
    2407        2684 :             qs_control%eps_ppnl
    2408        1342 :          IF (qs_control%gapw) THEN
    2409         390 :             SELECT CASE (qs_control%gapw_control%basis_1c)
    2410             :             CASE (gapw_1c_orb)
    2411             :                WRITE (UNIT=output_unit, FMT="(T2,A)") &
    2412         192 :                   "QS| GAPW|      One center basis from orbital basis primitives"
    2413             :             CASE (gapw_1c_small)
    2414             :                WRITE (UNIT=output_unit, FMT="(T2,A)") &
    2415           2 :                   "QS| GAPW|      One center basis extended with primitives (small:s)"
    2416             :             CASE (gapw_1c_medium)
    2417             :                WRITE (UNIT=output_unit, FMT="(T2,A)") &
    2418           1 :                   "QS| GAPW|      One center basis extended with primitives (medium:sp)"
    2419             :             CASE (gapw_1c_large)
    2420             :                WRITE (UNIT=output_unit, FMT="(T2,A)") &
    2421           2 :                   "QS| GAPW|      One center basis extended with primitives (large:spd)"
    2422             :             CASE (gapw_1c_very_large)
    2423             :                WRITE (UNIT=output_unit, FMT="(T2,A)") &
    2424           1 :                   "QS| GAPW|      One center basis extended with primitives (very large:spdf)"
    2425             :             CASE DEFAULT
    2426         198 :                CPABORT("basis_1c incorrect")
    2427             :             END SELECT
    2428             :             WRITE (UNIT=output_unit, FMT="(T2,A,T73,ES8.1)") &
    2429         198 :                "QS| GAPW|                   eps_fit:", &
    2430         198 :                qs_control%gapw_control%eps_fit, &
    2431         198 :                "QS| GAPW|                   eps_iso:", &
    2432         198 :                qs_control%gapw_control%eps_iso, &
    2433         198 :                "QS| GAPW|                   eps_svd:", &
    2434         198 :                qs_control%gapw_control%eps_svd, &
    2435         198 :                "QS| GAPW|                   eps_cpc:", &
    2436         396 :                qs_control%gapw_control%eps_cpc
    2437             :             WRITE (UNIT=output_unit, FMT="(T2,A,T61,A20)") &
    2438         198 :                "QS| GAPW|   atom-r-grid: quadrature:", &
    2439         396 :                ADJUSTR(quadrature)
    2440             :             WRITE (UNIT=output_unit, FMT="(T2,A,T71,I10)") &
    2441         198 :                "QS| GAPW|      atom-s-grid:  max l :", &
    2442         198 :                qs_control%gapw_control%lmax_sphere, &
    2443         198 :                "QS| GAPW|      max_l_rho0 :", &
    2444         396 :                qs_control%gapw_control%lmax_rho0
    2445         198 :             IF (qs_control%gapw_control%non_paw_atoms) THEN
    2446             :                WRITE (UNIT=output_unit, FMT="(T2,A)") &
    2447          30 :                   "QS| GAPW|      At least one kind is NOT PAW, i.e. it has only soft AO "
    2448             :             END IF
    2449         198 :             IF (qs_control%gapw_control%nopaw_as_gpw) THEN
    2450             :                WRITE (UNIT=output_unit, FMT="(T2,A)") &
    2451          30 :                   "QS| GAPW|      The NOT PAW atoms are treated fully GPW"
    2452             :             END IF
    2453             :          END IF
    2454        1342 :          IF (qs_control%gapw_xc) THEN
    2455          50 :             SELECT CASE (qs_control%gapw_control%basis_1c)
    2456             :             CASE (gapw_1c_orb)
    2457             :                WRITE (UNIT=output_unit, FMT="(T2,A)") &
    2458          25 :                   "QS| GAPW_XC|      One center basis from orbital basis primitives"
    2459             :             CASE (gapw_1c_small)
    2460             :                WRITE (UNIT=output_unit, FMT="(T2,A)") &
    2461           0 :                   "QS| GAPW_XC|      One center basis extended with primitives (small:s)"
    2462             :             CASE (gapw_1c_medium)
    2463             :                WRITE (UNIT=output_unit, FMT="(T2,A)") &
    2464           0 :                   "QS| GAPW_XC|      One center basis extended with primitives (medium:sp)"
    2465             :             CASE (gapw_1c_large)
    2466             :                WRITE (UNIT=output_unit, FMT="(T2,A)") &
    2467           0 :                   "QS| GAPW_XC|      One center basis extended with primitives (large:spd)"
    2468             :             CASE (gapw_1c_very_large)
    2469             :                WRITE (UNIT=output_unit, FMT="(T2,A)") &
    2470           0 :                   "QS| GAPW_XC|      One center basis extended with primitives (very large:spdf)"
    2471             :             CASE DEFAULT
    2472          25 :                CPABORT("basis_1c incorrect")
    2473             :             END SELECT
    2474             :             WRITE (UNIT=output_unit, FMT="(T2,A,T73,ES8.1)") &
    2475          25 :                "QS| GAPW_XC|                eps_fit:", &
    2476          25 :                qs_control%gapw_control%eps_fit, &
    2477          25 :                "QS| GAPW_XC|                eps_iso:", &
    2478          25 :                qs_control%gapw_control%eps_iso, &
    2479          25 :                "QS| GAPW_XC|                eps_svd:", &
    2480          50 :                qs_control%gapw_control%eps_svd
    2481             :             WRITE (UNIT=output_unit, FMT="(T2,A,T55,A30)") &
    2482          25 :                "QS| GAPW_XC|atom-r-grid: quadrature:", &
    2483          50 :                enum_i2c(enum, qs_control%gapw_control%quadrature)
    2484             :             WRITE (UNIT=output_unit, FMT="(T2,A,T71,I10)") &
    2485          25 :                "QS| GAPW_XC|   atom-s-grid:  max l :", &
    2486          50 :                qs_control%gapw_control%lmax_sphere
    2487             :          END IF
    2488        1342 :          IF (qs_control%mulliken_restraint) THEN
    2489             :             WRITE (UNIT=output_unit, FMT="(T2,A,T73,ES8.1)") &
    2490           1 :                "QS| Mulliken restraint target", qs_control%mulliken_restraint_control%target
    2491             :             WRITE (UNIT=output_unit, FMT="(T2,A,T73,ES8.1)") &
    2492           1 :                "QS| Mulliken restraint strength", qs_control%mulliken_restraint_control%strength
    2493             :             WRITE (UNIT=output_unit, FMT="(T2,A,T73,I8)") &
    2494           1 :                "QS| Mulliken restraint atoms: ", qs_control%mulliken_restraint_control%natoms
    2495           2 :             WRITE (UNIT=output_unit, FMT="(5I8)") qs_control%mulliken_restraint_control%atoms
    2496             :          END IF
    2497        1342 :          IF (qs_control%ddapc_restraint) THEN
    2498          14 :             DO i = 1, SIZE(qs_control%ddapc_restraint_control)
    2499           8 :                ddapc_restraint_control => qs_control%ddapc_restraint_control(i)
    2500           8 :                IF (SIZE(qs_control%ddapc_restraint_control) .GT. 1) &
    2501             :                   WRITE (UNIT=output_unit, FMT="(T2,A,T3,I8)") &
    2502           3 :                   "QS| parameters for DDAPC restraint number", i
    2503             :                WRITE (UNIT=output_unit, FMT="(T2,A,T73,ES8.1)") &
    2504           8 :                   "QS| ddapc restraint target", ddapc_restraint_control%target
    2505             :                WRITE (UNIT=output_unit, FMT="(T2,A,T73,ES8.1)") &
    2506           8 :                   "QS| ddapc restraint strength", ddapc_restraint_control%strength
    2507             :                WRITE (UNIT=output_unit, FMT="(T2,A,T73,I8)") &
    2508           8 :                   "QS| ddapc restraint atoms: ", ddapc_restraint_control%natoms
    2509          17 :                WRITE (UNIT=output_unit, FMT="(5I8)") ddapc_restraint_control%atoms
    2510           8 :                WRITE (UNIT=output_unit, FMT="(T2,A)") "Coefficients:"
    2511          17 :                WRITE (UNIT=output_unit, FMT="(5F6.2)") ddapc_restraint_control%coeff
    2512           6 :                SELECT CASE (ddapc_restraint_control%functional_form)
    2513             :                CASE (do_ddapc_restraint)
    2514             :                   WRITE (UNIT=output_unit, FMT="(T2,A,T61,A20)") &
    2515           3 :                      "QS| ddapc restraint functional form :", "RESTRAINT"
    2516             :                CASE (do_ddapc_constraint)
    2517             :                   WRITE (UNIT=output_unit, FMT="(T2,A,T61,A20)") &
    2518           5 :                      "QS| ddapc restraint functional form :", "CONSTRAINT"
    2519             :                CASE DEFAULT
    2520           8 :                   CPABORT("Unknown ddapc restraint")
    2521             :                END SELECT
    2522             :             END DO
    2523             :          END IF
    2524        1342 :          IF (qs_control%s2_restraint) THEN
    2525             :             WRITE (UNIT=output_unit, FMT="(T2,A,T73,ES8.1)") &
    2526           0 :                "QS| s2 restraint target", qs_control%s2_restraint_control%target
    2527             :             WRITE (UNIT=output_unit, FMT="(T2,A,T73,ES8.1)") &
    2528           0 :                "QS| s2 restraint strength", qs_control%s2_restraint_control%strength
    2529           0 :             SELECT CASE (qs_control%s2_restraint_control%functional_form)
    2530             :             CASE (do_s2_restraint)
    2531             :                WRITE (UNIT=output_unit, FMT="(T2,A,T61,A20)") &
    2532           0 :                   "QS| s2 restraint functional form :", "RESTRAINT"
    2533           0 :                CPABORT("Not yet implemented")
    2534             :             CASE (do_s2_constraint)
    2535             :                WRITE (UNIT=output_unit, FMT="(T2,A,T61,A20)") &
    2536           0 :                   "QS| s2 restraint functional form :", "CONSTRAINT"
    2537             :             CASE DEFAULT
    2538           0 :                CPABORT("Unknown ddapc restraint")
    2539             :             END SELECT
    2540             :          END IF
    2541             :       END IF
    2542             :       CALL cp_print_key_finished_output(output_unit, logger, print_section_vals, &
    2543        5166 :                                         "DFT_CONTROL_PARAMETERS")
    2544             : 
    2545        5166 :       CALL timestop(handle)
    2546             : 
    2547             :    END SUBROUTINE write_qs_control
    2548             : 
    2549             : ! **************************************************************************************************
    2550             : !> \brief reads the input parameters needed for ddapc.
    2551             : !> \param qs_control ...
    2552             : !> \param qs_section ...
    2553             : !> \param ddapc_restraint_section ...
    2554             : !> \author fschiff
    2555             : !> \note
    2556             : !>      either reads DFT%QS%DDAPC_RESTRAINT or PROPERTIES%ET_coupling
    2557             : !>      if(qs_section is present the DFT part is read, if ddapc_restraint_section
    2558             : !>      is present ET_COUPLING is read. Avoid having both!!!
    2559             : ! **************************************************************************************************
    2560          14 :    SUBROUTINE read_ddapc_section(qs_control, qs_section, ddapc_restraint_section)
    2561             : 
    2562             :       TYPE(qs_control_type), INTENT(INOUT)               :: qs_control
    2563             :       TYPE(section_vals_type), OPTIONAL, POINTER         :: qs_section, ddapc_restraint_section
    2564             : 
    2565             :       INTEGER                                            :: i, j, jj, k, n_rep
    2566          14 :       INTEGER, DIMENSION(:), POINTER                     :: tmplist
    2567          14 :       REAL(KIND=dp), DIMENSION(:), POINTER               :: rtmplist
    2568             :       TYPE(ddapc_restraint_type), POINTER                :: ddapc_restraint_control
    2569             :       TYPE(section_vals_type), POINTER                   :: ddapc_section
    2570             : 
    2571          14 :       IF (PRESENT(ddapc_restraint_section)) THEN
    2572           0 :          IF (ASSOCIATED(qs_control%ddapc_restraint_control)) THEN
    2573           0 :             IF (SIZE(qs_control%ddapc_restraint_control) .GE. 2) &
    2574           0 :                CPABORT("ET_COUPLING cannot be used in combination with a normal restraint")
    2575             :          ELSE
    2576           0 :             ddapc_section => ddapc_restraint_section
    2577           0 :             ALLOCATE (qs_control%ddapc_restraint_control(1))
    2578             :          END IF
    2579             :       END IF
    2580             : 
    2581          14 :       IF (PRESENT(qs_section)) THEN
    2582          14 :          NULLIFY (ddapc_section)
    2583             :          ddapc_section => section_vals_get_subs_vals(qs_section, &
    2584          14 :                                                      "DDAPC_RESTRAINT")
    2585             :       END IF
    2586             : 
    2587          32 :       DO i = 1, SIZE(qs_control%ddapc_restraint_control)
    2588             : 
    2589          18 :          CALL ddapc_control_create(qs_control%ddapc_restraint_control(i))
    2590          18 :          ddapc_restraint_control => qs_control%ddapc_restraint_control(i)
    2591             : 
    2592             :          CALL section_vals_val_get(ddapc_section, "STRENGTH", i_rep_section=i, &
    2593          18 :                                    r_val=ddapc_restraint_control%strength)
    2594             :          CALL section_vals_val_get(ddapc_section, "TARGET", i_rep_section=i, &
    2595          18 :                                    r_val=ddapc_restraint_control%target)
    2596             :          CALL section_vals_val_get(ddapc_section, "FUNCTIONAL_FORM", i_rep_section=i, &
    2597          18 :                                    i_val=ddapc_restraint_control%functional_form)
    2598             :          CALL section_vals_val_get(ddapc_section, "ATOMS", i_rep_section=i, &
    2599          18 :                                    n_rep_val=n_rep)
    2600             :          CALL section_vals_val_get(ddapc_section, "TYPE_OF_DENSITY", i_rep_section=i, &
    2601          18 :                                    i_val=ddapc_restraint_control%density_type)
    2602             : 
    2603          18 :          jj = 0
    2604          36 :          DO k = 1, n_rep
    2605             :             CALL section_vals_val_get(ddapc_section, "ATOMS", i_rep_section=i, &
    2606          18 :                                       i_rep_val=k, i_vals=tmplist)
    2607          56 :             DO j = 1, SIZE(tmplist)
    2608          38 :                jj = jj + 1
    2609             :             END DO
    2610             :          END DO
    2611          18 :          IF (jj < 1) CPABORT("Need at least 1 atom to use ddapc constraints")
    2612          18 :          ddapc_restraint_control%natoms = jj
    2613          18 :          IF (ASSOCIATED(ddapc_restraint_control%atoms)) &
    2614           0 :             DEALLOCATE (ddapc_restraint_control%atoms)
    2615          54 :          ALLOCATE (ddapc_restraint_control%atoms(ddapc_restraint_control%natoms))
    2616          18 :          jj = 0
    2617          36 :          DO k = 1, n_rep
    2618             :             CALL section_vals_val_get(ddapc_section, "ATOMS", i_rep_section=i, &
    2619          18 :                                       i_rep_val=k, i_vals=tmplist)
    2620          56 :             DO j = 1, SIZE(tmplist)
    2621          20 :                jj = jj + 1
    2622          38 :                ddapc_restraint_control%atoms(jj) = tmplist(j)
    2623             :             END DO
    2624             :          END DO
    2625             : 
    2626          18 :          IF (ASSOCIATED(ddapc_restraint_control%coeff)) &
    2627           0 :             DEALLOCATE (ddapc_restraint_control%coeff)
    2628          54 :          ALLOCATE (ddapc_restraint_control%coeff(ddapc_restraint_control%natoms))
    2629          38 :          ddapc_restraint_control%coeff = 1.0_dp
    2630             : 
    2631             :          CALL section_vals_val_get(ddapc_section, "COEFF", i_rep_section=i, &
    2632          18 :                                    n_rep_val=n_rep)
    2633          18 :          jj = 0
    2634          20 :          DO k = 1, n_rep
    2635             :             CALL section_vals_val_get(ddapc_section, "COEFF", i_rep_section=i, &
    2636           2 :                                       i_rep_val=k, r_vals=rtmplist)
    2637          22 :             DO j = 1, SIZE(rtmplist)
    2638           2 :                jj = jj + 1
    2639           2 :                IF (jj > ddapc_restraint_control%natoms) &
    2640           0 :                   CPABORT("Need the same number of coeff as there are atoms ")
    2641           4 :                ddapc_restraint_control%coeff(jj) = rtmplist(j)
    2642             :             END DO
    2643             :          END DO
    2644          18 :          IF (jj < ddapc_restraint_control%natoms .AND. jj .NE. 0) &
    2645          50 :             CPABORT("Need no or the same number of coeff as there are atoms.")
    2646             :       END DO
    2647          14 :       k = 0
    2648          32 :       DO i = 1, SIZE(qs_control%ddapc_restraint_control)
    2649          18 :          IF (qs_control%ddapc_restraint_control(i)%functional_form == &
    2650          24 :              do_ddapc_constraint) k = k + 1
    2651             :       END DO
    2652          14 :       IF (k == 2) CALL cp_abort(__LOCATION__, &
    2653           0 :                                 "Only a single constraint possible yet, try to use restraints instead ")
    2654             : 
    2655          14 :    END SUBROUTINE read_ddapc_section
    2656             : 
    2657             : ! **************************************************************************************************
    2658             : !> \brief ...
    2659             : !> \param dft_control ...
    2660             : !> \param efield_section ...
    2661             : ! **************************************************************************************************
    2662         262 :    SUBROUTINE read_efield_sections(dft_control, efield_section)
    2663             :       TYPE(dft_control_type), POINTER                    :: dft_control
    2664             :       TYPE(section_vals_type), POINTER                   :: efield_section
    2665             : 
    2666             :       CHARACTER(len=default_path_length)                 :: file_name
    2667             :       INTEGER                                            :: i, io, j, n, unit_nr
    2668         262 :       REAL(KIND=dp), DIMENSION(:), POINTER               :: tmp_vals
    2669             :       TYPE(efield_type), POINTER                         :: efield
    2670             :       TYPE(section_vals_type), POINTER                   :: tmp_section
    2671             : 
    2672         524 :       DO i = 1, SIZE(dft_control%efield_fields)
    2673         262 :          NULLIFY (dft_control%efield_fields(i)%efield)
    2674        1310 :          ALLOCATE (dft_control%efield_fields(i)%efield)
    2675         262 :          efield => dft_control%efield_fields(i)%efield
    2676         262 :          NULLIFY (efield%envelop_i_vars, efield%envelop_r_vars)
    2677             :          CALL section_vals_val_get(efield_section, "INTENSITY", i_rep_section=i, &
    2678         262 :                                    r_val=efield%strength)
    2679             : 
    2680             :          CALL section_vals_val_get(efield_section, "POLARISATION", i_rep_section=i, &
    2681         262 :                                    r_vals=tmp_vals)
    2682         786 :          ALLOCATE (efield%polarisation(SIZE(tmp_vals)))
    2683        2096 :          efield%polarisation = tmp_vals
    2684             :          CALL section_vals_val_get(efield_section, "PHASE", i_rep_section=i, &
    2685         262 :                                    r_val=efield%phase_offset)
    2686             :          CALL section_vals_val_get(efield_section, "ENVELOP", i_rep_section=i, &
    2687         262 :                                    i_val=efield%envelop_id)
    2688             :          CALL section_vals_val_get(efield_section, "WAVELENGTH", i_rep_section=i, &
    2689         262 :                                    r_val=efield%wavelength)
    2690             :          CALL section_vals_val_get(efield_section, "VEC_POT_INITIAL", i_rep_section=i, &
    2691         262 :                                    r_vals=tmp_vals)
    2692        2096 :          efield%vec_pot_initial = tmp_vals
    2693             : 
    2694         524 :          IF (efield%envelop_id == constant_env) THEN
    2695         252 :             ALLOCATE (efield%envelop_i_vars(2))
    2696         252 :             tmp_section => section_vals_get_subs_vals(efield_section, "CONSTANT_ENV", i_rep_section=i)
    2697             :             CALL section_vals_val_get(tmp_section, "START_STEP", &
    2698         252 :                                       i_val=efield%envelop_i_vars(1))
    2699             :             CALL section_vals_val_get(tmp_section, "END_STEP", &
    2700         252 :                                       i_val=efield%envelop_i_vars(2))
    2701          10 :          ELSE IF (efield%envelop_id == gaussian_env) THEN
    2702           6 :             ALLOCATE (efield%envelop_r_vars(2))
    2703           6 :             tmp_section => section_vals_get_subs_vals(efield_section, "GAUSSIAN_ENV", i_rep_section=i)
    2704             :             CALL section_vals_val_get(tmp_section, "T0", &
    2705           6 :                                       r_val=efield%envelop_r_vars(1))
    2706             :             CALL section_vals_val_get(tmp_section, "SIGMA", &
    2707           6 :                                       r_val=efield%envelop_r_vars(2))
    2708           4 :          ELSE IF (efield%envelop_id == ramp_env) THEN
    2709           2 :             ALLOCATE (efield%envelop_i_vars(4))
    2710           2 :             tmp_section => section_vals_get_subs_vals(efield_section, "RAMP_ENV", i_rep_section=i)
    2711             :             CALL section_vals_val_get(tmp_section, "START_STEP_IN", &
    2712           2 :                                       i_val=efield%envelop_i_vars(1))
    2713             :             CALL section_vals_val_get(tmp_section, "END_STEP_IN", &
    2714           2 :                                       i_val=efield%envelop_i_vars(2))
    2715             :             CALL section_vals_val_get(tmp_section, "START_STEP_OUT", &
    2716           2 :                                       i_val=efield%envelop_i_vars(3))
    2717             :             CALL section_vals_val_get(tmp_section, "END_STEP_OUT", &
    2718           2 :                                       i_val=efield%envelop_i_vars(4))
    2719           2 :          ELSE IF (efield%envelop_id == custom_env) THEN
    2720           2 :             tmp_section => section_vals_get_subs_vals(efield_section, "CUSTOM_ENV", i_rep_section=i)
    2721           2 :             CALL section_vals_val_get(tmp_section, "EFIELD_FILE_NAME", c_val=file_name)
    2722           2 :             CALL open_file(file_name=TRIM(file_name), file_action="READ", file_status="OLD", unit_number=unit_nr)
    2723             :             !Determine the number of lines in file
    2724           2 :             n = 0
    2725          10 :             DO WHILE (.TRUE.)
    2726          12 :                READ (unit_nr, *, iostat=io)
    2727          12 :                IF (io /= 0) EXIT
    2728          10 :                n = n + 1
    2729             :             END DO
    2730           2 :             REWIND (unit_nr)
    2731           6 :             ALLOCATE (efield%envelop_r_vars(n + 1))
    2732             :             !Store the timestep of the list in the first entry of the r_vars
    2733           2 :             CALL section_vals_val_get(tmp_section, "TIMESTEP", r_val=efield%envelop_r_vars(1))
    2734             :             !Read the file
    2735          12 :             DO j = 2, n + 1
    2736          10 :                READ (unit_nr, *) efield%envelop_r_vars(j)
    2737          12 :                efield%envelop_r_vars(j) = cp_unit_to_cp2k(efield%envelop_r_vars(j), "volt/m")
    2738             :             END DO
    2739           2 :             CALL close_file(unit_nr)
    2740             :          END IF
    2741             :       END DO
    2742         262 :    END SUBROUTINE read_efield_sections
    2743             : 
    2744             : ! **************************************************************************************************
    2745             : !> \brief reads the input parameters needed real time propagation
    2746             : !> \param dft_control ...
    2747             : !> \param rtp_section ...
    2748             : !> \author fschiff
    2749             : ! **************************************************************************************************
    2750         496 :    SUBROUTINE read_rtp_section(dft_control, rtp_section)
    2751             : 
    2752             :       TYPE(dft_control_type), INTENT(INOUT)              :: dft_control
    2753             :       TYPE(section_vals_type), POINTER                   :: rtp_section
    2754             : 
    2755         248 :       INTEGER, DIMENSION(:), POINTER                     :: tmp
    2756             :       LOGICAL                                            :: is_present
    2757             :       TYPE(section_vals_type), POINTER                   :: proj_mo_section
    2758             : 
    2759        2976 :       ALLOCATE (dft_control%rtp_control)
    2760             :       CALL section_vals_val_get(rtp_section, "MAX_ITER", &
    2761         248 :                                 i_val=dft_control%rtp_control%max_iter)
    2762             :       CALL section_vals_val_get(rtp_section, "MAT_EXP", &
    2763         248 :                                 i_val=dft_control%rtp_control%mat_exp)
    2764             :       CALL section_vals_val_get(rtp_section, "ASPC_ORDER", &
    2765         248 :                                 i_val=dft_control%rtp_control%aspc_order)
    2766             :       CALL section_vals_val_get(rtp_section, "EXP_ACCURACY", &
    2767         248 :                                 r_val=dft_control%rtp_control%eps_exp)
    2768             :       CALL section_vals_val_get(rtp_section, "RTBSE%_SECTION_PARAMETERS_", &
    2769         248 :                                 i_val=dft_control%rtp_control%rtp_method)
    2770             :       CALL section_vals_val_get(rtp_section, "RTBSE%RTBSE_HAMILTONIAN", &
    2771         248 :                                 i_val=dft_control%rtp_control%rtbse_ham)
    2772             :       CALL section_vals_val_get(rtp_section, "PROPAGATOR", &
    2773         248 :                                 i_val=dft_control%rtp_control%propagator)
    2774             :       CALL section_vals_val_get(rtp_section, "EPS_ITER", &
    2775         248 :                                 r_val=dft_control%rtp_control%eps_ener)
    2776             :       CALL section_vals_val_get(rtp_section, "INITIAL_WFN", &
    2777         248 :                                 i_val=dft_control%rtp_control%initial_wfn)
    2778             :       CALL section_vals_val_get(rtp_section, "HFX_BALANCE_IN_CORE", &
    2779         248 :                                 l_val=dft_control%rtp_control%hfx_redistribute)
    2780             :       CALL section_vals_val_get(rtp_section, "APPLY_WFN_MIX_INIT_RESTART", &
    2781         248 :                                 l_val=dft_control%rtp_control%apply_wfn_mix_init_restart)
    2782             :       CALL section_vals_val_get(rtp_section, "APPLY_DELTA_PULSE", &
    2783         248 :                                 l_val=dft_control%rtp_control%apply_delta_pulse)
    2784             :       CALL section_vals_val_get(rtp_section, "APPLY_DELTA_PULSE_MAG", &
    2785         248 :                                 l_val=dft_control%rtp_control%apply_delta_pulse_mag)
    2786             :       CALL section_vals_val_get(rtp_section, "VELOCITY_GAUGE", &
    2787         248 :                                 l_val=dft_control%rtp_control%velocity_gauge)
    2788             :       CALL section_vals_val_get(rtp_section, "VG_COM_NL", &
    2789         248 :                                 l_val=dft_control%rtp_control%nl_gauge_transform)
    2790             :       CALL section_vals_val_get(rtp_section, "PERIODIC", &
    2791         248 :                                 l_val=dft_control%rtp_control%periodic)
    2792             :       CALL section_vals_val_get(rtp_section, "DENSITY_PROPAGATION", &
    2793         248 :                                 l_val=dft_control%rtp_control%linear_scaling)
    2794             :       CALL section_vals_val_get(rtp_section, "MCWEENY_MAX_ITER", &
    2795         248 :                                 i_val=dft_control%rtp_control%mcweeny_max_iter)
    2796             :       CALL section_vals_val_get(rtp_section, "ACCURACY_REFINEMENT", &
    2797         248 :                                 i_val=dft_control%rtp_control%acc_ref)
    2798             :       CALL section_vals_val_get(rtp_section, "MCWEENY_EPS", &
    2799         248 :                                 r_val=dft_control%rtp_control%mcweeny_eps)
    2800             :       CALL section_vals_val_get(rtp_section, "DELTA_PULSE_SCALE", &
    2801         248 :                                 r_val=dft_control%rtp_control%delta_pulse_scale)
    2802             :       CALL section_vals_val_get(rtp_section, "DELTA_PULSE_DIRECTION", &
    2803         248 :                                 i_vals=tmp)
    2804         992 :       dft_control%rtp_control%delta_pulse_direction = tmp
    2805             :       CALL section_vals_val_get(rtp_section, "SC_CHECK_START", &
    2806         248 :                                 i_val=dft_control%rtp_control%sc_check_start)
    2807         248 :       proj_mo_section => section_vals_get_subs_vals(rtp_section, "PRINT%PROJECTION_MO")
    2808         248 :       CALL section_vals_get(proj_mo_section, explicit=is_present)
    2809         248 :       IF (is_present) THEN
    2810           4 :          IF (dft_control%rtp_control%linear_scaling) &
    2811             :             CALL cp_abort(__LOCATION__, &
    2812             :                           "You have defined a time dependent projection of mos, but "// &
    2813             :                           "only the density matrix is propagated (DENSITY_PROPAGATION "// &
    2814             :                           ".TRUE.). Please either use MO-based real time DFT or do not "// &
    2815           0 :                           "define any PRINT%PROJECTION_MO section")
    2816           4 :          dft_control%rtp_control%is_proj_mo = .TRUE.
    2817             :       ELSE
    2818         244 :          dft_control%rtp_control%is_proj_mo = .FALSE.
    2819             :       END IF
    2820             : 
    2821         248 :    END SUBROUTINE read_rtp_section
    2822             : 
    2823             : ! **************************************************************************************************
    2824             : !> \brief Parses the BLOCK_LIST keywords from the ADMM section
    2825             : !> \param admm_control ...
    2826             : !> \param dft_section ...
    2827             : ! **************************************************************************************************
    2828         446 :    SUBROUTINE read_admm_block_list(admm_control, dft_section)
    2829             :       TYPE(admm_control_type), POINTER                   :: admm_control
    2830             :       TYPE(section_vals_type), POINTER                   :: dft_section
    2831             : 
    2832             :       INTEGER                                            :: irep, list_size, n_rep
    2833         446 :       INTEGER, DIMENSION(:), POINTER                     :: tmplist
    2834             : 
    2835         446 :       NULLIFY (tmplist)
    2836             : 
    2837             :       CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%BLOCK_LIST", &
    2838         446 :                                 n_rep_val=n_rep)
    2839             : 
    2840         946 :       ALLOCATE (admm_control%blocks(n_rep))
    2841             : 
    2842         482 :       DO irep = 1, n_rep
    2843             :          CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%BLOCK_LIST", &
    2844          36 :                                    i_rep_val=irep, i_vals=tmplist)
    2845          36 :          list_size = SIZE(tmplist)
    2846         108 :          ALLOCATE (admm_control%blocks(irep)%list(list_size))
    2847         654 :          admm_control%blocks(irep)%list(:) = tmplist(:)
    2848             :       END DO
    2849             : 
    2850         446 :    END SUBROUTINE read_admm_block_list
    2851             : 
    2852             : ! **************************************************************************************************
    2853             : !> \brief ...
    2854             : !> \param dft_control ...
    2855             : !> \param hairy_probes_section ...
    2856             : !> \param
    2857             : !> \param
    2858             : ! **************************************************************************************************
    2859           4 :    SUBROUTINE read_hairy_probes_sections(dft_control, hairy_probes_section)
    2860             :       TYPE(dft_control_type), POINTER                    :: dft_control
    2861             :       TYPE(section_vals_type), POINTER                   :: hairy_probes_section
    2862             : 
    2863             :       INTEGER                                            :: i, j, jj, kk, n_rep
    2864           4 :       INTEGER, DIMENSION(:), POINTER                     :: tmplist
    2865             : 
    2866          12 :       DO i = 1, SIZE(dft_control%probe)
    2867           8 :          NULLIFY (dft_control%probe(i)%atom_ids)
    2868             : 
    2869           8 :          CALL section_vals_val_get(hairy_probes_section, "ATOM_IDS", i_rep_section=i, n_rep_val=n_rep)
    2870           8 :          jj = 0
    2871          16 :          DO kk = 1, n_rep
    2872           8 :             CALL section_vals_val_get(hairy_probes_section, "ATOM_IDS", i_rep_section=i, i_rep_val=kk, i_vals=tmplist)
    2873          16 :             jj = jj + SIZE(tmplist)
    2874             :          END DO
    2875             : 
    2876           8 :          dft_control%probe(i)%natoms = jj
    2877           8 :          IF (dft_control%probe(i)%natoms < 1) &
    2878           0 :             CPABORT("Need at least 1 atom to use hair probes formalism")
    2879          24 :          ALLOCATE (dft_control%probe(i)%atom_ids(dft_control%probe(i)%natoms))
    2880             : 
    2881           8 :          jj = 0
    2882          16 :          DO kk = 1, n_rep
    2883           8 :             CALL section_vals_val_get(hairy_probes_section, "ATOM_IDS", i_rep_section=i, i_rep_val=kk, i_vals=tmplist)
    2884          24 :             DO j = 1, SIZE(tmplist)
    2885           8 :                jj = jj + 1
    2886          16 :                dft_control%probe(i)%atom_ids(jj) = tmplist(j)
    2887             :             END DO
    2888             :          END DO
    2889             : 
    2890           8 :          CALL section_vals_val_get(hairy_probes_section, "MU", i_rep_section=i, r_val=dft_control%probe(i)%mu)
    2891             : 
    2892           8 :          CALL section_vals_val_get(hairy_probes_section, "T", i_rep_section=i, r_val=dft_control%probe(i)%T)
    2893             : 
    2894           8 :          CALL section_vals_val_get(hairy_probes_section, "ALPHA", i_rep_section=i, r_val=dft_control%probe(i)%alpha)
    2895             : 
    2896          20 :          CALL section_vals_val_get(hairy_probes_section, "eps_hp", i_rep_section=i, r_val=dft_control%probe(i)%eps_hp)
    2897             :       END DO
    2898             : 
    2899           4 :    END SUBROUTINE read_hairy_probes_sections
    2900             : ! **************************************************************************************************
    2901             : 
    2902             : END MODULE cp_control_utils

Generated by: LCOV version 1.15