LCOV - code coverage report
Current view: top level - src - input_cp2k_xas.F (source / functions) Hit Total Coverage
Test: CP2K Regtests (git:262480d) Lines: 310 310 100.0 %
Date: 2024-11-22 07:00:40 Functions: 2 2 100.0 %

          Line data    Source code
       1             : !--------------------------------------------------------------------------------------------------!
       2             : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3             : !   Copyright 2000-2024 CP2K developers group <https://cp2k.org>                                   !
       4             : !                                                                                                  !
       5             : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6             : !--------------------------------------------------------------------------------------------------!
       7             : 
       8             : ! **************************************************************************************************
       9             : !> \brief function that build the XAS section of the input
      10             : !> \par History
      11             : !>      10.2005 moved out of input_cp2k [fawzi]
      12             : !>      07.2024 moved out of input_cp2k_dft [JGH]
      13             : !> \author fawzi
      14             : ! **************************************************************************************************
      15             : MODULE input_cp2k_xas
      16             :    USE bibliography,                    ONLY: Iannuzzi2007,&
      17             :                                               Shigeta2001
      18             :    USE cp_output_handling,              ONLY: add_last_numeric,&
      19             :                                               cp_print_key_section_create,&
      20             :                                               debug_print_level,&
      21             :                                               high_print_level,&
      22             :                                               low_print_level
      23             :    USE input_constants,                 ONLY: &
      24             :         do_potential_coulomb, do_potential_id, do_potential_short, do_potential_truncated, &
      25             :         gaussian, ot_mini_cg, ot_mini_diis, tddfpt_singlet, tddfpt_spin_cons, tddfpt_spin_flip, &
      26             :         tddfpt_triplet, xas_1s_type, xas_2p_type, xas_2s_type, xas_3d_type, xas_3p_type, &
      27             :         xas_3s_type, xas_4d_type, xas_4f_type, xas_4p_type, xas_4s_type, xas_dip_len, xas_dip_vel, &
      28             :         xas_dscf, xas_none, xas_not_excited, xas_tdp_by_index, xas_tdp_by_kind, xas_tp_fh, &
      29             :         xas_tp_flex, xas_tp_hh, xas_tp_xfh, xas_tp_xhh, xes_tp_val
      30             :    USE input_cp2k_loc,                  ONLY: create_localize_section,&
      31             :                                               print_wanniers
      32             :    USE input_cp2k_print_dft,            ONLY: create_pdos_section
      33             :    USE input_cp2k_scf,                  ONLY: create_scf_section
      34             :    USE input_cp2k_xc,                   ONLY: create_xc_fun_section
      35             :    USE input_keyword_types,             ONLY: keyword_create,&
      36             :                                               keyword_release,&
      37             :                                               keyword_type
      38             :    USE input_section_types,             ONLY: section_add_keyword,&
      39             :                                               section_add_subsection,&
      40             :                                               section_create,&
      41             :                                               section_release,&
      42             :                                               section_type
      43             :    USE input_val_types,                 ONLY: char_t,&
      44             :                                               integer_t,&
      45             :                                               lchar_t,&
      46             :                                               real_t
      47             :    USE kinds,                           ONLY: dp
      48             :    USE string_utilities,                ONLY: s2a
      49             : #include "./base/base_uses.f90"
      50             : 
      51             :    IMPLICIT NONE
      52             :    PRIVATE
      53             : 
      54             :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'input_cp2k_xas'
      55             : 
      56             :    PUBLIC :: create_xas_section, create_xas_tdp_section
      57             : 
      58             : CONTAINS
      59             : 
      60             : ! **************************************************************************************************
      61             : !> \brief makes the input section for core-level spectroscopy simulations
      62             : !> \param section ...
      63             : !> \par History
      64             : !>      03.2005 created [MI]
      65             : ! **************************************************************************************************
      66        8546 :    SUBROUTINE create_xas_section(section)
      67             :       TYPE(section_type), POINTER                        :: section
      68             : 
      69             :       TYPE(keyword_type), POINTER                        :: keyword
      70             :       TYPE(section_type), POINTER                        :: print_key, subsection
      71             : 
      72        8546 :       CPASSERT(.NOT. ASSOCIATED(section))
      73             :       CALL section_create(section, __LOCATION__, name="xas", &
      74             :                           description="Sets the method of choice to calculate core-level excitation spectra. "// &
      75             :                           "The occupied states from  which we calculate the "// &
      76             :                           "excitation should be specified. "// &
      77             :                           "Localization of the orbitals may be useful.", &
      78             :                           n_keywords=10, n_subsections=1, repeats=.FALSE., &
      79       17092 :                           citations=(/Iannuzzi2007/))
      80             : 
      81        8546 :       NULLIFY (keyword, subsection, print_key)
      82             : 
      83             :       CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
      84             :                           description="controls the activation of core-level spectroscopy simulations", &
      85             :                           usage="&XAS T", &
      86             :                           default_l_val=.FALSE., &
      87        8546 :                           lone_keyword_l_val=.TRUE.)
      88        8546 :       CALL section_add_keyword(section, keyword)
      89        8546 :       CALL keyword_release(keyword)
      90             : 
      91             :       CALL keyword_create(keyword, __LOCATION__, name="METHOD", &
      92             :                           variants=(/"XAS_METHOD"/), &
      93             :                           description="Method to be used to calculate core-level excitation spectra", &
      94             :                           usage="METHOD TP_HH", &
      95             :                           default_i_val=xas_none, &
      96             :                           enum_c_vals=s2a("NONE", "TP_HH", "TP_FH", "TP_VAL", "TP_XHH", "TP_XFH", "DSCF", "TP_FLEX"), &
      97             :                           enum_desc=s2a( &
      98             :                           "No core electron spectroscopy", "Transition potential half-hole", &
      99             :                           "Transition potential full-hole", "Hole in homo for X-ray emission only ", &
     100             :                           "Transition potential excited half-hole", &
     101             :                           "Transition potential excited full-hole ", &
     102             :                           "DSCF calculations to compute the first (core)excited state", &
     103             :                           "Transition potential with generalized core occupation and total number of electrons"), &
     104             :                           enum_i_vals=(/xas_none, xas_tp_hh, xas_tp_fh, xes_tp_val, xas_tp_xhh, &
     105       17092 :                                         xas_tp_xfh, xas_dscf, xas_tp_flex/))
     106        8546 :       CALL section_add_keyword(section, keyword)
     107        8546 :       CALL keyword_release(keyword)
     108             : 
     109             :       CALL keyword_create(keyword, __LOCATION__, name="XAS_CORE", &
     110             :                           description="Occupation of the core state in XAS calculation by TP_FLEX.", &
     111             :                           usage="XAS_CORE 0.5", &
     112        8546 :                           default_r_val=0.5_dp)
     113        8546 :       CALL section_add_keyword(section, keyword)
     114        8546 :       CALL keyword_release(keyword)
     115             : 
     116             :       CALL keyword_create(keyword, __LOCATION__, name="XAS_TOT_EL", &
     117             :                           description="Total number of electrons for spin channel alpha, in XAS calculation by TP_FLEX. "// &
     118             :                           "If it is a negative value, the number of electrons is set to GS number of electrons "// &
     119             :                           "minus the amount subtracted from the core state", &
     120             :                           usage="XAS_TOT_EL 10", &
     121        8546 :                           default_r_val=-1._dp)
     122        8546 :       CALL section_add_keyword(section, keyword)
     123        8546 :       CALL keyword_release(keyword)
     124             : 
     125             :       CALL keyword_create(keyword, __LOCATION__, name="XES_CORE", &
     126             :                           description="Occupation of the core state in XES calculation by TP_VAL. "// &
     127             :                           "The HOMO is emptied by the same amount.", &
     128             :                           usage="XES_CORE 0.5", &
     129        8546 :                           default_r_val=1._dp)
     130        8546 :       CALL section_add_keyword(section, keyword)
     131        8546 :       CALL keyword_release(keyword)
     132             : 
     133             :       CALL keyword_create(keyword, __LOCATION__, name="XES_EMPTY_HOMO", &
     134             :                           description="Set the occupation of the HOMO in XES calculation by TP_VAL. "// &
     135             :                           "The HOMO can be emptied or not, if the core is still full.", &
     136             :                           usage="XES_EMPTY_HOMO", &
     137             :                           default_l_val=.FALSE., &
     138        8546 :                           lone_keyword_l_val=.TRUE.)
     139        8546 :       CALL section_add_keyword(section, keyword)
     140        8546 :       CALL keyword_release(keyword)
     141             : 
     142             :       CALL keyword_create(keyword, __LOCATION__, name="DIPOLE_FORM", &
     143             :                           variants=(/"DIP_FORM"/), &
     144             :                           description="Type of integral to get the oscillator strengths "// &
     145             :                           "in the diipole approximation", &
     146             :                           usage="DIPOLE_FORM string", &
     147             :                           default_i_val=xas_dip_vel, &
     148             :                           enum_c_vals=s2a("LENGTH", "VELOCITY"), &
     149             :                           enum_desc=s2a("Length form &lang; i | e r | j &rang;", &
     150             :                                         "Velocity form &lang; i | d/dr | j &rang;"), &
     151       17092 :                           enum_i_vals=(/xas_dip_len, xas_dip_vel/))
     152        8546 :       CALL section_add_keyword(section, keyword)
     153        8546 :       CALL keyword_release(keyword)
     154             : 
     155             : !   replace the specialized keyword with standard scf section
     156             : !    scf_env is added to xas_env
     157             : 
     158        8546 :       NULLIFY (subsection)
     159        8546 :       CALL create_scf_section(subsection)
     160        8546 :       CALL section_add_subsection(section, subsection)
     161        8546 :       CALL section_release(subsection)
     162             : 
     163             :       CALL keyword_create(keyword, __LOCATION__, name="STATE_TYPE", &
     164             :                           variants=(/"TYPE"/), &
     165             :                           description="Type of the orbitals that are excited for the xas spectra calculation", &
     166             :                           usage="STATE_TYPE 1S", &
     167             :                           default_i_val=xas_1s_type, &
     168             :                           enum_c_vals=s2a("1S", "2S", "2P", "3S", "3P", "3D", "4S", "4P", "4D", "4F"), &
     169             :                           enum_desc=s2a("1s orbitals", "2s orbitals", "2p orbitals", "3s orbitals", "3p orbitals", &
     170             :                                         "3d orbitals", "4s orbitals", "4p orbitals", "4d orbitals", "4f orbitals"), &
     171             :                           enum_i_vals=(/xas_1s_type, xas_2s_type, xas_2p_type, xas_3s_type, xas_3p_type, xas_3d_type, &
     172       17092 :                                         xas_4s_type, xas_4p_type, xas_4d_type, xas_4f_type/))
     173        8546 :       CALL section_add_keyword(section, keyword)
     174        8546 :       CALL keyword_release(keyword)
     175             : 
     176             :       CALL keyword_create(keyword, __LOCATION__, name="STATE_SEARCH", &
     177             :                           description="# of states where to look for the one to be excited", &
     178             :                           usage="STATE_SEARCH 1", &
     179        8546 :                           default_i_val=-1)
     180        8546 :       CALL section_add_keyword(section, keyword)
     181        8546 :       CALL keyword_release(keyword)
     182             : 
     183             :       CALL keyword_create(keyword, __LOCATION__, name="SPIN_CHANNEL", &
     184             :                           description="# Spin channel of the excited orbital", &
     185             :                           usage="SPIN_CHANNEL 1", &
     186        8546 :                           default_i_val=1)
     187        8546 :       CALL section_add_keyword(section, keyword)
     188        8546 :       CALL keyword_release(keyword)
     189             : 
     190             :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS_LIST", &
     191             :                           variants=(/"AT_LIST"/), &
     192             :                           description="Indexes of the atoms to be excited. "// &
     193             :                           "This keyword can be repeated several times "// &
     194             :                           "(useful if you have to specify many indexes).", &
     195             :                           usage="ATOMS_LIST {integer}  {integer} ..  {integer} ", &
     196       17092 :                           n_var=-1, type_of_var=integer_t, repeats=.TRUE.)
     197        8546 :       CALL section_add_keyword(section, keyword)
     198        8546 :       CALL keyword_release(keyword)
     199             : 
     200             :       CALL keyword_create(keyword, __LOCATION__, name="OVERLAP_THRESHOLD", &
     201             :                           description="Threshold for including more than one initial core excited state "// &
     202             :                           "per atom. The threshold is taken relative to the maximum overlap.", &
     203        8546 :                           usage="OVERLAP_THRESHOLD 8.e-1", default_r_val=1.0_dp)
     204        8546 :       CALL section_add_keyword(section, keyword)
     205        8546 :       CALL keyword_release(keyword)
     206             : 
     207             :       CALL keyword_create(keyword, __LOCATION__, name="ORBITAL_LIST", &
     208             :                           variants=(/"ORBITAL_LIST"/), &
     209             :                           description="Indices of the localized orbitals to be excited. "// &
     210             :                           "This keyword can be repeated several times "// &
     211             :                           "(useful if you have to specify many indexes).", &
     212             :                           usage="ORBITAL_LIST {integer}  {integer} ..  {integer} ", &
     213       17092 :                           n_var=-1, type_of_var=integer_t, repeats=.TRUE.)
     214        8546 :       CALL section_add_keyword(section, keyword)
     215        8546 :       CALL keyword_release(keyword)
     216             : 
     217             :       CALL keyword_create(keyword, __LOCATION__, name="ADDED_MOS", &
     218             :                           description="Number of additional MOS added spin up only", &
     219        8546 :                           usage="ADDED_MOS {integer}", default_i_val=-1)
     220        8546 :       CALL section_add_keyword(section, keyword)
     221        8546 :       CALL keyword_release(keyword)
     222             : 
     223             :       CALL keyword_create(keyword, __LOCATION__, name="MAX_ITER_ADDED", &
     224             :                           description="maximum number of iteration in calculation of added orbitals", &
     225        8546 :                           usage="MAX_ITER_ADDED 100", default_i_val=2999)
     226        8546 :       CALL section_add_keyword(section, keyword)
     227        8546 :       CALL keyword_release(keyword)
     228             : 
     229             :       CALL keyword_create(keyword, __LOCATION__, name="EPS_ADDED", &
     230             :                           description="target accuracy incalculation of the added orbitals", &
     231        8546 :                           usage="EPS_ADDED 1.e-6", default_r_val=1.0e-5_dp)
     232        8546 :       CALL section_add_keyword(section, keyword)
     233        8546 :       CALL keyword_release(keyword)
     234             : 
     235             :       CALL keyword_create(keyword, __LOCATION__, name="NGAUSS", &
     236             :                           description="Number of gto's for the expansion of the STO "// &
     237             :                           "of the type given by STATE_TYPE", &
     238        8546 :                           usage="NGAUSS {integer}", default_i_val=3)
     239        8546 :       CALL section_add_keyword(section, keyword)
     240        8546 :       CALL keyword_release(keyword)
     241             : 
     242             :       CALL keyword_create(keyword, __LOCATION__, name="RESTART", &
     243             :                           description="Restart the excited state if the restart file exists", &
     244             :                           usage="RESTART", &
     245        8546 :                           default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
     246        8546 :       CALL section_add_keyword(section, keyword)
     247        8546 :       CALL keyword_release(keyword)
     248             : 
     249             :       CALL keyword_create(keyword, __LOCATION__, name="WFN_RESTART_FILE_NAME", &
     250             :                           variants=(/"RESTART_FILE_NAME"/), &
     251             :                           description="Root of the file names where to read the MOS from "// &
     252             :                           "which to restart the calculation of the core level excited states", &
     253             :                           usage="WFN_RESTART_FILE_NAME <FILENAME>", &
     254       17092 :                           type_of_var=lchar_t)
     255        8546 :       CALL section_add_keyword(section, keyword)
     256        8546 :       CALL keyword_release(keyword)
     257             : 
     258        8546 :       CALL create_localize_section(subsection)
     259        8546 :       CALL section_add_subsection(section, subsection)
     260        8546 :       CALL section_release(subsection)
     261             : 
     262             :       CALL section_create(subsection, __LOCATION__, name="PRINT", &
     263             :                           description="printing of information during the core-level spectroscopy simulation", &
     264        8546 :                           repeats=.FALSE.)
     265             : 
     266             :       ! Add printing of wannier infos
     267        8546 :       CALL print_wanniers(subsection)
     268             : 
     269             :       CALL cp_print_key_section_create(print_key, __LOCATION__, "iteration_info", &
     270             :                                        description="Controls the printing of basic iteration information during the XAS SCF.", &
     271        8546 :                                        print_level=low_print_level, filename="__STD_OUT__")
     272             :       CALL keyword_create(keyword, __LOCATION__, name="time_cumul", &
     273             :                           description="If the printkey is activated switches the printing of timings"// &
     274             :                           " to cumulative (over the SCF).", &
     275        8546 :                           default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
     276        8546 :       CALL section_add_keyword(print_key, keyword)
     277        8546 :       CALL keyword_release(keyword)
     278        8546 :       CALL section_add_subsection(subsection, print_key)
     279        8546 :       CALL section_release(print_key)
     280             : 
     281             :       CALL cp_print_key_section_create(print_key, __LOCATION__, "program_run_info", &
     282             :                                        description="Controls the printing of basic iteration information in CLS", &
     283        8546 :                                        print_level=low_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
     284        8546 :       CALL section_add_subsection(subsection, print_key)
     285        8546 :       CALL section_release(print_key)
     286             : 
     287             :       CALL cp_print_key_section_create(print_key, __LOCATION__, "XES_SPECTRUM", &
     288             :                                        description="Controls the dumping of the CLS output files containing the emission spectra", &
     289        8546 :                                        print_level=low_print_level, common_iter_levels=3, filename="")
     290        8546 :       CALL section_add_subsection(subsection, print_key)
     291        8546 :       CALL section_release(print_key)
     292             : 
     293             :       CALL cp_print_key_section_create( &
     294             :          print_key, __LOCATION__, "XAS_SPECTRUM", &
     295             :          description="Controls the dumping of the CLS output files containing the absorption spectra", &
     296        8546 :          print_level=low_print_level, common_iter_levels=3, filename="")
     297        8546 :       CALL section_add_subsection(subsection, print_key)
     298        8546 :       CALL section_release(print_key)
     299             : 
     300        8546 :       CALL create_pdos_section(print_key)
     301        8546 :       CALL section_add_subsection(subsection, print_key)
     302        8546 :       CALL section_release(print_key)
     303             : 
     304             :       CALL cp_print_key_section_create(print_key, __LOCATION__, "RESTART", &
     305             :                                        description="Controls the dumping of MO restart file during the SCF. "// &
     306             :                                        "of a Core-Level-Spectroscopy calculation. For each new excited atom, "// &
     307             :                                        "one different restart file is dumped. These restart files should be "// &
     308             :                                        "employed only to restart the same type of CLS calculation, "// &
     309             :                                        "i.e. with the same core potential.", &
     310             :                                        print_level=low_print_level, common_iter_levels=3, each_iter_names=s2a("XAS_SCF"), &
     311        8546 :                                        add_last=add_last_numeric, each_iter_values=(/3/), filename="")
     312        8546 :       CALL section_add_subsection(subsection, print_key)
     313        8546 :       CALL section_release(print_key)
     314             : 
     315             :       CALL cp_print_key_section_create(print_key, __LOCATION__, "FULL_RESTART", &
     316             :                                        description="Controls the dumping of a standard MO restart file "// &
     317             :                                        "where coefficients and occupation numbers are those of the TP scheme, "// &
     318             :                                        "i.e. with emptied core state.", &
     319             :                                        print_level=high_print_level, common_iter_levels=3, each_iter_names=s2a("XAS_SCF"), &
     320        8546 :                                        add_last=add_last_numeric, each_iter_values=(/3/), filename="")
     321        8546 :       CALL section_add_subsection(subsection, print_key)
     322        8546 :       CALL section_release(print_key)
     323             : 
     324             :       CALL cp_print_key_section_create(print_key, __LOCATION__, "CLS_FUNCTION_CUBES", &
     325             :                                        description="Controls the printing of the relaxed orbitals ", &
     326        8546 :                                        print_level=high_print_level, common_iter_levels=3, add_last=add_last_numeric, filename="")
     327             :       CALL keyword_create(keyword, __LOCATION__, name="stride", &
     328             :                           description="The stride (X,Y,Z) used to write the cube file "// &
     329             :                           "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
     330             :                           " 1 number valid for all components.", &
     331        8546 :                           usage="STRIDE 2 2 2", n_var=-1, default_i_vals=(/2, 2, 2/), type_of_var=integer_t)
     332        8546 :       CALL section_add_keyword(print_key, keyword)
     333        8546 :       CALL keyword_release(keyword)
     334             : 
     335             :       CALL keyword_create(keyword, __LOCATION__, name="CUBES_LU_BOUNDS", &
     336             :                           variants=(/"CUBES_LU"/), &
     337             :                           description="The lower and upper index of the states to be printed as cube", &
     338             :                           usage="CUBES_LU_BOUNDS integer integer", &
     339       17092 :                           n_var=2, default_i_vals=(/0, -2/), type_of_var=integer_t)
     340        8546 :       CALL section_add_keyword(print_key, keyword)
     341        8546 :       CALL keyword_release(keyword)
     342             : 
     343             :       CALL keyword_create(keyword, __LOCATION__, name="CUBES_LIST", &
     344             :                           description="Indexes of the states to be printed as cube files "// &
     345             :                           "This keyword can be repeated several times "// &
     346             :                           "(useful if you have to specify many indexes).", &
     347             :                           usage="CUBES_LIST 1 2", &
     348        8546 :                           n_var=-1, type_of_var=integer_t, repeats=.TRUE.)
     349        8546 :       CALL section_add_keyword(print_key, keyword)
     350        8546 :       CALL keyword_release(keyword)
     351             :       CALL keyword_create(keyword, __LOCATION__, name="APPEND", &
     352             :                           description="append the cube files when they already exist", &
     353        8546 :                           default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
     354        8546 :       CALL section_add_keyword(print_key, keyword)
     355        8546 :       CALL keyword_release(keyword)
     356             : 
     357        8546 :       CALL section_add_subsection(subsection, print_key)
     358        8546 :       CALL section_release(print_key)
     359             : 
     360        8546 :       CALL section_add_subsection(section, subsection)
     361        8546 :       CALL section_release(subsection)
     362             : 
     363        8546 :    END SUBROUTINE create_xas_section
     364             : 
     365             : ! **************************************************************************************************
     366             : !> \brief makes the input section for core-level spectroscopy simulations using
     367             : !>        linear response TDDFT
     368             : !> \param section ...
     369             : !> \par History
     370             : !>      11.2017 created [AB]
     371             : ! **************************************************************************************************
     372        8546 :    SUBROUTINE create_xas_tdp_section(section)
     373             :       TYPE(section_type), POINTER                        :: section
     374             : 
     375             :       TYPE(keyword_type), POINTER                        :: keyword
     376             :       TYPE(section_type), POINTER                        :: print_key, subsection, subsubsection, &
     377             :                                                             subsubsubsection
     378             : 
     379        8546 :       NULLIFY (keyword, print_key, subsection, subsubsection, subsubsubsection)
     380             : 
     381        8546 :       CPASSERT(.NOT. ASSOCIATED(section))
     382             :       CALL section_create(section, __LOCATION__, name="XAS_TDP", &
     383             :                           description="XAS simulations using linear-response TDDFT. Excitation from "// &
     384             :                           "specified core orbitals are considered one at a time. In case of high "// &
     385             :                           "symmetry structures, donor core orbitals should be localized.", &
     386        8546 :                           n_keywords=19, n_subsections=4, repeats=.FALSE.)
     387             : 
     388        8546 :       NULLIFY (keyword, subsection, print_key)
     389             : 
     390             :       CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
     391             :                           description="controls the activation of XAS simulations with linear "// &
     392             :                           "response TDDFT.", &
     393             :                           usage="&TDP_XAS {logical}", &
     394             :                           default_l_val=.FALSE., &
     395        8546 :                           lone_keyword_l_val=.TRUE.)
     396        8546 :       CALL section_add_keyword(section, keyword)
     397        8546 :       CALL keyword_release(keyword)
     398             : 
     399             :       CALL keyword_create(keyword, __LOCATION__, name="CHECK_ONLY", &
     400             :                           description="This keyword defines whether the full calculation should "// &
     401             :                           "be done or not. If set to .TRUE., only the determination "// &
     402             :                           "of donor MOs is conducted. This run option allows for "// &
     403             :                           "cheap verification of the input parameters", &
     404             :                           usage="CHECK_ONLY {logical}", &
     405             :                           default_l_val=.FALSE., &
     406             :                           lone_keyword_l_val=.TRUE., &
     407        8546 :                           repeats=.FALSE.)
     408        8546 :       CALL section_add_keyword(section, keyword)
     409        8546 :       CALL keyword_release(keyword)
     410             : 
     411             :       CALL keyword_create(keyword, __LOCATION__, name="RESTART_FROM_FILE", &
     412             :                           variants=s2a("RESTART_FILENAME", "RST_FILENAME", "RESTART_FILE", "RST_FILE"), &
     413             :                           description="By providing a RESTART file containing the linear-response "// &
     414             :                           "orbitals and excitations energies from a previous calculation, "// &
     415             :                           "all computations are skipped except for the corresponding "// &
     416             :                           "PDOS and/or CUBE file printing as defined in the PRINT "// &
     417             :                           "subsection. Basis sets and geometry need to be consistent.", &
     418             :                           usage="RESTART_FROM_FILE <FILENAME>", &
     419        8546 :                           type_of_var=char_t, n_var=-1)
     420        8546 :       CALL section_add_keyword(section, keyword)
     421        8546 :       CALL keyword_release(keyword)
     422             : 
     423             :       CALL keyword_create(keyword, __LOCATION__, name="EXCITATIONS", &
     424             :                           variants=(/"EXCITATION"/), &
     425             :                           description="Specify the type of excitation to consider. In case of a "// &
     426             :                           "resctricted closed-shell ground state calculation, "// &
     427             :                           "RCS_SINGLET or/and RCS_TRIPLET can be chosen. In case of a "// &
     428             :                           "open-shell ground state calculation (either UKS or ROKS), "// &
     429             :                           "standard spin conserving excitation (OS_SPIN_CONS) or/and "// &
     430             :                           "spin-flip excitation (OS_SPIN_FLIP) can be chosen.", &
     431             :                           usage="EXCITATIONS {string}", &
     432             :                           repeats=.TRUE., &
     433             :                           default_i_val=tddfpt_singlet, &
     434             :                           enum_c_vals=s2a("RCS_SINGLET", "RCS_TRIPLET", "OS_SPIN_CONS", "OS_SPIN_FLIP"), &
     435             :                           enum_desc=s2a("Singlet excitation on top of restricted closed-shell ground state", &
     436             :                                         "Triplet excitation on top of restricted closed-shell ground state", &
     437             :                                         "Spin-conserving excitations on top of open-shell ground state", &
     438             :                                         "Spin-flip excitation on top of open-shell ground state"), &
     439       17092 :                           enum_i_vals=(/tddfpt_singlet, tddfpt_triplet, tddfpt_spin_cons, tddfpt_spin_flip/))
     440        8546 :       CALL section_add_keyword(section, keyword)
     441        8546 :       CALL keyword_release(keyword)
     442             : 
     443             :       CALL keyword_create(keyword, __LOCATION__, name="EPS_PGF_XAS", &
     444             :                           variants=s2a("EPS_PGF", "EPS_PGF_XAS_TDP"), &
     445             :                           description="The threshold used to determine the spacial extent of all "// &
     446             :                           "primitive Gaussian functions used for the construction "// &
     447             :                           "of neighbor lists in the XAS_TDP method. "// &
     448             :                           "By default, takes the value of QS%EPS_PGF_ORB. Useful if "// &
     449             :                           "the former value is tiny due to possible ground state HFX "// &
     450             :                           "contributions.", &
     451             :                           usage="EPS_PGS_XAS {real}", &
     452        8546 :                           type_of_var=real_t)
     453        8546 :       CALL section_add_keyword(section, keyword)
     454        8546 :       CALL keyword_release(keyword)
     455             : 
     456             :       CALL keyword_create(keyword, __LOCATION__, name="EPS_FILTER", &
     457             :                           variants=s2a("EPS_FILTER_MATRIX"), &
     458             :                           description="The threshold used for sparse matrix operations", &
     459             :                           usage="EPS_FILTER {real}", &
     460             :                           type_of_var=real_t, &
     461        8546 :                           default_r_val=1.0E-10_dp)
     462        8546 :       CALL section_add_keyword(section, keyword)
     463        8546 :       CALL keyword_release(keyword)
     464             : 
     465             :       CALL keyword_create(keyword, __LOCATION__, name="DIPOLE_FORM", &
     466             :                           variants=(/"DIP_FORM"/), &
     467             :                           description="Type of integral to get the oscillator strengths "// &
     468             :                           "in the dipole approximation", &
     469             :                           usage="DIPOLE_FORM {string}", &
     470             :                           default_i_val=xas_dip_vel, &
     471             :                           enum_c_vals=s2a("LENGTH", "VELOCITY"), &
     472             :                           enum_desc=s2a("Length form &lang; 0 | e r | n &rang;", &
     473             :                                         "Velocity form &lang; 0 | d/dr | n &rang;"), &
     474       17092 :                           enum_i_vals=(/xas_dip_len, xas_dip_vel/))
     475        8546 :       CALL section_add_keyword(section, keyword)
     476        8546 :       CALL keyword_release(keyword)
     477             : 
     478             :       CALL keyword_create(keyword, __LOCATION__, name="QUADRUPOLE", &
     479             :                           variants=s2a("DO_QUADRUPOLE", "DO_QUAD", "QUAD"), &
     480             :                           description="Compute the electric quadrupole contribution to the "// &
     481             :                           "oscillator strenghts (in the length representation with "// &
     482             :                           "the origin set on the relevant excited atom)", &
     483             :                           usage="QUADRUPOLE {logical}", &
     484             :                           default_l_val=.FALSE., &
     485        8546 :                           lone_keyword_l_val=.TRUE.)
     486        8546 :       CALL section_add_keyword(section, keyword)
     487        8546 :       CALL keyword_release(keyword)
     488             : 
     489             :       CALL keyword_create(keyword, __LOCATION__, name="XYZ_DIPOLE", &
     490             :                           variants=s2a("DIPOLE_XYZ"), &
     491             :                           description="Whether the detailed contributions of the dipole oscillator "// &
     492             :                           "strengths along the X,Y,Z directions should be printed.", &
     493             :                           usage="XYZ_DIPOLE {logical}", &
     494             :                           default_l_val=.FALSE., &
     495        8546 :                           lone_keyword_l_val=.TRUE.)
     496        8546 :       CALL section_add_keyword(section, keyword)
     497        8546 :       CALL keyword_release(keyword)
     498             : 
     499             : !  the GW2X correction subsection
     500             :       CALL section_create(subsection, __LOCATION__, name="GW2X", &
     501             :                           description="Specifications for the GW2X calculation of core "// &
     502             :                           "ionization potentials. Note that donor states need to be actively "// &
     503             :                           "localized using the LOCALIZE keyword in DONOR_STATES. N_SEARCH "// &
     504             :                           "should be kept to the minimum, such that only core states are localized.", &
     505             :                           citations=(/Shigeta2001/), &
     506             :                           n_keywords=8, &
     507             :                           n_subsections=0, &
     508       17092 :                           repeats=.FALSE.)
     509             : 
     510             :       CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
     511             :                           description="Enables the GW2X correction of the core ionization potentials", &
     512             :                           usage="&GW2X {logical}", &
     513             :                           default_l_val=.FALSE., &
     514        8546 :                           lone_keyword_l_val=.TRUE.)
     515        8546 :       CALL section_add_keyword(subsection, keyword)
     516        8546 :       CALL keyword_release(keyword)
     517             : 
     518             :       CALL keyword_create(keyword, __LOCATION__, name="XPS_ONLY", &
     519             :                           description="If set to .TRUE., only run GW2X calculations for XPS "// &
     520             :                           "spectroscopy and ignore all XAS calculations. It is still "// &
     521             :                           "required to define the DONOR_STATES and KERNEL%EXACT_EXCHANGE "// &
     522             :                           "subsections.", &
     523             :                           default_l_val=.FALSE., &
     524        8546 :                           lone_keyword_l_val=.TRUE.)
     525        8546 :       CALL section_add_keyword(subsection, keyword)
     526        8546 :       CALL keyword_release(keyword)
     527             : 
     528             :       CALL keyword_create(keyword, __LOCATION__, name="BATCH_SIZE", &
     529             :                           description="MOs batch size for batched tensor contraction. Larger "// &
     530             :                           "size is faster, but uses more memory. Default should be safe "// &
     531             :                           "in most cases.", &
     532        8546 :                           default_i_val=64)
     533        8546 :       CALL section_add_keyword(subsection, keyword)
     534        8546 :       CALL keyword_release(keyword)
     535             : 
     536             :       CALL keyword_create(keyword, __LOCATION__, name="EPS_GW2X", &
     537             :                           description="Convergence threshold for GW2X iterations (in eV)", &
     538        8546 :                           default_r_val=1.E-2_dp)
     539        8546 :       CALL section_add_keyword(subsection, keyword)
     540        8546 :       CALL keyword_release(keyword)
     541             : 
     542             :       CALL keyword_create(keyword, __LOCATION__, name="C_OS", &
     543             :                           description="Opposite-spin scling factor. SCS => 6/5, SOS => 1.3", &
     544        8546 :                           default_r_val=1.0_dp)
     545        8546 :       CALL section_add_keyword(subsection, keyword)
     546        8546 :       CALL keyword_release(keyword)
     547             : 
     548             :       CALL keyword_create(keyword, __LOCATION__, name="C_SS", &
     549             :                           description="Same-spin scling factor. SCS => 1/3, SOS => 0.0", &
     550        8546 :                           default_r_val=1.0_dp)
     551        8546 :       CALL section_add_keyword(subsection, keyword)
     552        8546 :       CALL keyword_release(keyword)
     553             : 
     554             :       CALL keyword_create(keyword, __LOCATION__, name="MAX_GW2X_ITER", &
     555             :                           description="Maximum number of iterations for GW2X", &
     556        8546 :                           default_i_val=10)
     557        8546 :       CALL section_add_keyword(subsection, keyword)
     558        8546 :       CALL keyword_release(keyword)
     559             : 
     560             :       CALL keyword_create(keyword, __LOCATION__, name="PSEUDO_CANONICAL", &
     561             :                           variants=(/"PSEUDO_CANO"/), &
     562             :                           description="Whether the pseudo-canonical version of GW2X should be used "// &
     563             :                           "(versus only using the diagonal of the generalized Fock matrix)", &
     564       17092 :                           default_l_val=.TRUE.)
     565        8546 :       CALL section_add_keyword(subsection, keyword)
     566        8546 :       CALL keyword_release(keyword)
     567             : 
     568        8546 :       CALL section_add_subsection(section, subsection)
     569        8546 :       CALL section_release(subsection)
     570             : 
     571             : !  The donor state subsection
     572             : 
     573             :       CALL section_create(subsection, __LOCATION__, name="DONOR_STATES", &
     574             :                           description="Specifications for the donor states from which core "// &
     575             :                           "electrons are excited", &
     576             :                           n_keywords=6, &
     577             :                           n_subsections=0, &
     578        8546 :                           repeats=.FALSE.)
     579             : 
     580             :       CALL keyword_create(keyword, __LOCATION__, name="DEFINE_EXCITED", &
     581             :                           description="Whether the atoms to be excited should be defined by "// &
     582             :                           "a list of atom indices or by a list of atom kinds.", &
     583             :                           usage="DEFINE_EXCITED {string}", &
     584             :                           default_i_val=xas_tdp_by_index, &
     585             :                           enum_c_vals=s2a("BY_INDEX", "BY_KIND"), &
     586             :                           enum_i_vals=(/xas_tdp_by_index, xas_tdp_by_kind/), &
     587             :                           enum_desc=s2a("Excited atoms are defined by a list of indices", &
     588        8546 :                                         "Excited atoms are defined by a list of atomic kinds"))
     589        8546 :       CALL section_add_keyword(subsection, keyword)
     590        8546 :       CALL keyword_release(keyword)
     591             : 
     592             :       CALL keyword_create(keyword, __LOCATION__, name="ATOM_LIST", &
     593             :                           variants=(/"AT_LIST"/), &
     594             :                           description="Indices of the atoms to be excited. "// &
     595             :                           "Keyword only taken into account if DEFINE_EXCITED = BY_INDEX", &
     596             :                           usage="ATOM_LIST {integer}  {integer} ..  {integer} ", &
     597       17092 :                           n_var=-1, type_of_var=integer_t, repeats=.FALSE.)
     598        8546 :       CALL section_add_keyword(subsection, keyword)
     599        8546 :       CALL keyword_release(keyword)
     600             : 
     601             :       CALL keyword_create(keyword, __LOCATION__, name="KIND_LIST", &
     602             :                           description="Kind of atoms to be excited. "// &
     603             :                           "All atoms of the specified kinds are considered. "// &
     604             :                           "Keyword only taken into account if DEFINE_EXCITED = BY_KIND", &
     605             :                           usage="KIND_LIST {string}  {string} ..  {string} ", &
     606        8546 :                           n_var=-1, type_of_var=char_t, repeats=.FALSE.)
     607        8546 :       CALL section_add_keyword(subsection, keyword)
     608        8546 :       CALL keyword_release(keyword)
     609             : 
     610             :       CALL keyword_create(keyword, __LOCATION__, name="STATE_TYPES", &
     611             :                           variants=(/"TYPES"/), &
     612             :                           description="Types of orbitals that are excited, for each atom/kind, "// &
     613             :                           "in order to do LR-TDDFT driven xas spectra calculation. "// &
     614             :                           "This keyword MUST have the same number of entries as the relevant "// &
     615             :                           "KIND_LIST or ATOM_LIST. The order of the specified state types must "// &
     616             :                           "correspond to the order of the relevant kinds/indices. "// &
     617             :                           "This keyword can be repeated, useful when multiple orbital types "// &
     618             :                           "should be excited for specific kinds/atoms.", &
     619             :                           n_var=-1, default_i_val=xas_not_excited, repeats=.TRUE., &
     620             :                           usage="STATE_TYPES {string}  {string} .. {string}", &
     621             :                           enum_c_vals=s2a("1S", "2S", "2P", "NE"), &
     622             :                           enum_desc=s2a("1s orbital", "2s orbital", "2p orbitals", "not excited"), &
     623       17092 :                           enum_i_vals=(/xas_1s_type, xas_2s_type, xas_2p_type, xas_not_excited/))
     624        8546 :       CALL section_add_keyword(subsection, keyword)
     625        8546 :       CALL keyword_release(keyword)
     626             : 
     627             :       CALL keyword_create(keyword, __LOCATION__, name="N_SEARCH", &
     628             :                           description="Number of MOs (per spin) to search to find specified donor core "// &
     629             :                           "orbitals, starting from the lowest in energy and upward. By default, "// &
     630             :                           "all HOMOs are searched. If the LOCALIZE keyword is used, "// &
     631             :                           "then all searched states are first localized.", &
     632             :                           usage="N_SEARCH {integer}", &
     633        8546 :                           default_i_val=-1)
     634        8546 :       CALL section_add_keyword(subsection, keyword)
     635        8546 :       CALL keyword_release(keyword)
     636             : 
     637             :       CALL keyword_create(keyword, __LOCATION__, name="LOCALIZE", &
     638             :                           variants=s2a("LOC", "DO_LOC"), &
     639             :                           description="Whether the N_SEARCH potential donor states should be "// &
     640             :                           "actively localized. Necessary in case of excited atoms "// &
     641             :                           "equivalent under symmetry or GW2X correction.", &
     642             :                           usage="LOCALIZE {logical}", &
     643             :                           default_l_val=.FALSE., &
     644        8546 :                           lone_keyword_l_val=.TRUE.)
     645        8546 :       CALL section_add_keyword(subsection, keyword)
     646        8546 :       CALL keyword_release(keyword)
     647             : 
     648        8546 :       CALL section_add_subsection(section, subsection)
     649        8546 :       CALL section_release(subsection)
     650             : ! End of the donor states subsection
     651             : 
     652             : ! The OT solver subsection
     653             :       CALL section_create(subsection, __LOCATION__, name="OT_SOLVER", &
     654             :                           description="Specifications for the iterative OT solver. Note: only "// &
     655             :                           "available within the Tamm-Dancoff approximation. Recommanded if excitations "// &
     656             :                           "from multiple donor states take place.", &
     657             :                           n_keywords=4, &
     658             :                           n_subsections=0, &
     659        8546 :                           repeats=.FALSE.)
     660             : 
     661             :       CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
     662             :                           description="Enables the usage of the OT iterator solver", &
     663             :                           usage="&OT_SOLVER {logical}", &
     664             :                           default_l_val=.FALSE., &
     665        8546 :                           lone_keyword_l_val=.TRUE.)
     666        8546 :       CALL section_add_keyword(subsection, keyword)
     667        8546 :       CALL keyword_release(keyword)
     668             : 
     669             :       CALL keyword_create(keyword, __LOCATION__, name="MAX_ITER", &
     670             :                           description="Maximum number of iterations allowed for the OT solver", &
     671             :                           usage="MAX_ITER {integer}", &
     672        8546 :                           default_i_val=50)
     673        8546 :       CALL section_add_keyword(subsection, keyword)
     674        8546 :       CALL keyword_release(keyword)
     675             : 
     676             :       CALL keyword_create(keyword, __LOCATION__, name="EPS_ITER", &
     677             :                           description="Convergence threshold for the OT solver", &
     678             :                           usage="EPS_ITER {double}", &
     679        8546 :                           default_r_val=1.0E-4_dp)
     680        8546 :       CALL section_add_keyword(subsection, keyword)
     681        8546 :       CALL keyword_release(keyword)
     682             : 
     683             :       CALL keyword_create(keyword, __LOCATION__, name="MINIMIZER", &
     684             :                           description="Minimizer to be used with the OT solver", &
     685             :                           usage="MINIMIZER DIIS", &
     686             :                           default_i_val=ot_mini_diis, &
     687             :                           enum_c_vals=s2a("CG", "DIIS"), &
     688             :                           enum_desc=s2a("Conjugated gradient: safer", &
     689             :                                         "Direct inversion of the iterative subspace: faster"), &
     690        8546 :                           enum_i_vals=(/ot_mini_cg, ot_mini_diis/))
     691        8546 :       CALL section_add_keyword(subsection, keyword)
     692        8546 :       CALL keyword_release(keyword)
     693             : 
     694        8546 :       CALL section_add_subsection(section, subsection)
     695        8546 :       CALL section_release(subsection)
     696             : ! End of the OT solver subsection
     697             : 
     698             :       CALL keyword_create(keyword, __LOCATION__, name="SPIN_ORBIT_COUPLING", &
     699             :                           variants=(/"SOC"/), &
     700             :                           description="Whether spin-orbit coupling should be added. "// &
     701             :                           "Note: only applies for spin-restricted calculations with "// &
     702             :                           "singlet and triplet excitations OR spin-unrestricted "// &
     703             :                           "calculations with both spin-conserving and spin-flip.", &
     704             :                           usage="SOC {logical}", &
     705             :                           default_l_val=.FALSE., &
     706       17092 :                           lone_keyword_l_val=.TRUE.)
     707        8546 :       CALL section_add_keyword(section, keyword)
     708        8546 :       CALL keyword_release(keyword)
     709             : 
     710             :       CALL keyword_create(keyword, __LOCATION__, name="TAMM_DANCOFF", &
     711             :                           variants=(/"TDA"/), &
     712             :                           description="Whether the Tamm-Dancoff approximation should be used.", &
     713             :                           usage="TAMM_DANCOFF {logical}", &
     714             :                           default_l_val=.TRUE., &
     715       17092 :                           lone_keyword_l_val=.TRUE.)
     716        8546 :       CALL section_add_keyword(section, keyword)
     717        8546 :       CALL keyword_release(keyword)
     718             : 
     719             :       CALL keyword_create(keyword, __LOCATION__, name="GRID", &
     720             :                           variants=(/"ATOMIC_GRID"/), &
     721             :                           description="Specification of the atomic angular and radial grids for "// &
     722             :                           "a given atomic kind. This keyword can/should be repeated "// &
     723             :                           "for each excited kind. The default grid dimensions are "// &
     724             :                           "those set for the GAPW ground state calculation. These "// &
     725             :                           "grids are used for the xc-kernel integration. "// &
     726             :                           "Usage: GRID < KIND > < LEBEDEV_GRID > < RADIAL_GRID >", &
     727             :                           usage="GRID {string} {integer} {integer}", &
     728       17092 :                           n_var=3, type_of_var=char_t, repeats=.TRUE.)
     729        8546 :       CALL section_add_keyword(section, keyword)
     730        8546 :       CALL keyword_release(keyword)
     731             : 
     732             :       CALL keyword_create(keyword, __LOCATION__, name="N_EXCITED", &
     733             :                           variants=(/"N_ROOTS"/), &
     734             :                           description="The number of excited states to compute per donor "// &
     735             :                           "molecular orbital. (e.g. if 2p excitations, "// &
     736             :                           "3*N_EXCITED excited states are considered). "// &
     737             :                           "If N_EXCITED is set to -1, all excitations are considered", &
     738             :                           usage="N_EXCITED {integer}", &
     739       17092 :                           default_i_val=-1)
     740        8546 :       CALL section_add_keyword(section, keyword)
     741        8546 :       CALL keyword_release(keyword)
     742             : 
     743             :       CALL keyword_create(keyword, __LOCATION__, name="ENERGY_RANGE", &
     744             :                           variants=s2a("E_RANGE"), &
     745             :                           description="The energy range in eV for which excitations are considered. "// &
     746             :                           "Only excitated states within the range of: first excitation "// &
     747             :                           "energy + ENERGY_RANGE are kept. If ENERGY_RANGE "// &
     748             :                           "and N_EXCITED are specified, the former has priority. "// &
     749             :                           "Negative values are ignored and N_EXCITED takes over.", &
     750             :                           usage="ENERGY_RANGE {real}", &
     751        8546 :                           default_r_val=-1.0_dp)
     752        8546 :       CALL section_add_keyword(section, keyword)
     753        8546 :       CALL keyword_release(keyword)
     754             : 
     755             : !  The KERNEL subsection
     756             :       CALL section_create(subsection, __LOCATION__, name="KERNEL", &
     757             :                           description="Defines how the kernel is built in terms of functionals.", &
     758             :                           n_keywords=1, &
     759             :                           n_subsections=1, &
     760        8546 :                           repeats=.FALSE.)
     761             : 
     762             :       CALL keyword_create(keyword, __LOCATION__, name="RI_REGION", &
     763             :                           variants=(/"RI_RADIUS"/), &
     764             :                           description="The region defined by a sphere of the given radius around "// &
     765             :                           "the excited atom defining which RI_XAS basis elements are "// &
     766             :                           "considered for the RI projection of the density. Each basis "// &
     767             :                           "element which center is in this region is taken. The density "// &
     768             :                           "for a given excited atom is expressed as : "// &
     769             :                           "sum_ijkl P_ij (ijk) S_kl^-1 xi_l, where P_ij is the density "// &
     770             :                           "matrix, i,j span the orbital basis and k,l the RI_XAS basis "// &
     771             :                           "in the region. The larger the radius, the more basis "// &
     772             :                           "functions to expand the density. However, it is assumed "// &
     773             :                           "that it is a small number and the code does not scale well "// &
     774             :                           "as the number of RI basis elements gets too large. "// &
     775             :                           "Expressed in Angstrom. If the radius is set to 0.0, only "// &
     776             :                           "the RI basis elements centered on the excited atom are used.", &
     777             :                           usage="RI_REGION {real}", &
     778       17092 :                           default_r_val=0.0_dp)
     779        8546 :       CALL section_add_keyword(subsection, keyword)
     780        8546 :       CALL keyword_release(keyword)
     781             : 
     782             : !  The XC_FUNCTIONAL subsubsection
     783        8546 :       CALL create_xc_fun_section(subsubsection)
     784        8546 :       CALL section_add_subsection(subsection, subsubsection)
     785        8546 :       CALL section_release(subsubsection)
     786             : 
     787             : ! The EXACT_EXCHANGE subsubsection
     788             :       CALL section_create(subsubsection, __LOCATION__, name="EXACT_EXCHANGE", &
     789             :                           description="Whether exact-exchange should be added to the kernel and "// &
     790             :                           "if so, with which fraction and operator.", &
     791             :                           n_keywords=7, &
     792             :                           n_subsections=1, &
     793        8546 :                           repeats=.FALSE.)
     794             : 
     795             :       CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
     796             :                           description="Enables the addition of exact exchange to the kernel.", &
     797             :                           usage="&EXACT_EXCHANGE {logical}", &
     798             :                           default_l_val=.FALSE., &
     799        8546 :                           lone_keyword_l_val=.TRUE.)
     800        8546 :       CALL section_add_keyword(subsubsection, keyword)
     801        8546 :       CALL keyword_release(keyword)
     802             : 
     803             :       CALL keyword_create(keyword, __LOCATION__, name="POTENTIAL_TYPE", &
     804             :                           variants=s2a("OP", "OPERATOR", "POTENTIAL"), &
     805             :                           description="The type of operator used for exact exchange. The standard "// &
     806             :                           "Coulomb operator cannot be used in periodic systems.", &
     807             :                           usage="OPERATOR {string}", &
     808             :                           repeats=.FALSE., &
     809             :                           default_i_val=do_potential_coulomb, &
     810             :                           enum_c_vals=s2a("COULOMB", "TRUNCATED", "SHORTRANGE"), &
     811             :                           enum_desc=s2a("Standard Coulomb operator: 1/r", &
     812             :                                         "Truncated Coulomb operator: 1/r if r < R_c, 0 otherwise ", &
     813             :                                         "Short range: erfc(omega*r)/r"), &
     814             :                           enum_i_vals=(/do_potential_coulomb, do_potential_truncated, &
     815        8546 :                                         do_potential_short/))
     816        8546 :       CALL section_add_keyword(subsubsection, keyword)
     817        8546 :       CALL keyword_release(keyword)
     818             : 
     819             :       CALL keyword_create(keyword, __LOCATION__, name="CUTOFF_RADIUS", &
     820             :                           variants=s2a("R_C", "RC", "RANGE"), &
     821             :                           description="The cutoff radius (in Angstrom) for the truncated Coulomb operator.", &
     822             :                           usage="CUTOFF_RADIUS {double}", &
     823             :                           default_r_val=0.0_dp, &
     824        8546 :                           repeats=.FALSE.)
     825        8546 :       CALL section_add_keyword(subsubsection, keyword)
     826        8546 :       CALL keyword_release(keyword)
     827             : 
     828             :       CALL keyword_create(keyword, __LOCATION__, name="T_C_G_DATA", &
     829             :                           description="Location of the file t_c_g.dat that contains the data for the "// &
     830             :                           "evaluation of the truncated gamma function ", &
     831             :                           usage="T_C_G_DATA {string}", &
     832        8546 :                           default_c_val="t_c_g.dat")
     833        8546 :       CALL section_add_keyword(subsubsection, keyword)
     834        8546 :       CALL keyword_release(keyword)
     835             : 
     836             :       CALL keyword_create(keyword, __LOCATION__, name="OMEGA", &
     837             :                           description="The range parameter for the short range operator (in 1/a0).", &
     838             :                           usage="OMEGA {double}", &
     839             :                           default_r_val=0.0_dp, &
     840        8546 :                           repeats=.FALSE.)
     841        8546 :       CALL section_add_keyword(subsubsection, keyword)
     842        8546 :       CALL keyword_release(keyword)
     843             : 
     844             :       CALL keyword_create(keyword, __LOCATION__, name="EPS_RANGE", &
     845             :                           description="The threshold to determine the effective range of the short range "// &
     846             :                           "operator: erfc(omega*eff_range)/eff_range = EPS_RANGE", &
     847             :                           usage="EPS_RANGE = {double}", &
     848             :                           default_r_val=1.0E-6_dp, &
     849        8546 :                           repeats=.FALSE.)
     850        8546 :       CALL section_add_keyword(subsubsection, keyword)
     851        8546 :       CALL keyword_release(keyword)
     852             : 
     853             :       CALL keyword_create(keyword, __LOCATION__, name="EPS_SCREENING", &
     854             :                           variants=s2a("EPS_SCREEN"), &
     855             :                           description="A threshold to determine which primitive 3-center integrals "// &
     856             :                           "are kept for contraction, as the latter operation can be "// &
     857             :                           "expensive (especially for large basis sets ). "// &
     858             :                           "If |(ab|c)| < EPS_SCREENNING, it is discarded.", &
     859             :                           default_r_val=1.0E-8_dp, &
     860        8546 :                           repeats=.FALSE.)
     861        8546 :       CALL section_add_keyword(subsubsection, keyword)
     862        8546 :       CALL keyword_release(keyword)
     863             : 
     864             :       CALL keyword_create(keyword, __LOCATION__, name="SCALE", &
     865             :                           variants=s2a("FRACTION"), &
     866             :                           description="Scaling of the exact exchange contribution.", &
     867        8546 :                           default_r_val=1.0_dp)
     868        8546 :       CALL section_add_keyword(subsubsection, keyword)
     869        8546 :       CALL keyword_release(keyword)
     870             : 
     871             :       !The RI metric subsection
     872             :       CALL section_create(subsubsubsection, __LOCATION__, name="RI_METRIC", &
     873             :                           description="This subsection allows for the definition of an exchange "// &
     874             :                           "RI metric that is different from the main exchange potential. "// &
     875             :                           "By default (i.e. if this subsection is ignored), the "// &
     876             :                           "exchange kernel is computed in the V approximation: "// &
     877             :                           "(ab|ij) = (ab|P) V^-1 (Q|ij), where V = (P|Q). With a RI "// &
     878             :                           "metric, we have a 2 step RI involving the metric potential "// &
     879             :                           "for the 3-center integrals: "// &
     880             :                           "(ab|ij) = (ab!P) (P!Q)^-1 (Q|R) (R!S)^-1 (S!ij), where | "// &
     881             :                           "stands for the exchange potential and ! for the metric "// &
     882             :                           "potential. This allows for drastic screening of the "// &
     883             :                           "3-center integrals by selecting shorter range metric.", &
     884             :                           n_keywords=5, &
     885             :                           n_subsections=0, &
     886        8546 :                           repeats=.FALSE.)
     887             : 
     888             :       CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
     889             :                           description="Enables the use of a RI metric.", &
     890             :                           usage="&EXACT_EXCHANGE {logical}", &
     891             :                           default_l_val=.FALSE., &
     892        8546 :                           lone_keyword_l_val=.TRUE.)
     893        8546 :       CALL section_add_keyword(subsubsubsection, keyword)
     894        8546 :       CALL keyword_release(keyword)
     895             : 
     896             :       CALL keyword_create(keyword, __LOCATION__, name="POTENTIAL_TYPE", &
     897             :                           variants=s2a("OP", "OPERATOR", "POTENTIAL"), &
     898             :                           description="The type of operator used for the metric.", &
     899             :                           usage="OPERATOR {string}", &
     900             :                           repeats=.FALSE., &
     901             :                           default_i_val=do_potential_id, &
     902             :                           enum_c_vals=s2a("OVERLAP", "TRUNCATED", "SHORTRANGE"), &
     903             :                           enum_desc=s2a("Overlap operator (=identity)", &
     904             :                                         "Truncated Coulomb operator: 1/r if r < R_c, 0 otherwise ", &
     905             :                                         "Short range: erfc(omega*r)/r"), &
     906             :                           enum_i_vals=(/do_potential_id, do_potential_truncated, &
     907        8546 :                                         do_potential_short/))
     908        8546 :       CALL section_add_keyword(subsubsubsection, keyword)
     909        8546 :       CALL keyword_release(keyword)
     910             : 
     911             :       CALL keyword_create(keyword, __LOCATION__, name="CUTOFF_RADIUS", &
     912             :                           variants=s2a("R_C", "RC", "RANGE"), &
     913             :                           description="The cutoff radius (in Angstrom) for the truncated Coulomb operator.", &
     914             :                           usage="CUTOFF_RADIUS {double}", &
     915             :                           default_r_val=0.0_dp, &
     916        8546 :                           repeats=.FALSE.)
     917        8546 :       CALL section_add_keyword(subsubsubsection, keyword)
     918        8546 :       CALL keyword_release(keyword)
     919             : 
     920             :       CALL keyword_create(keyword, __LOCATION__, name="T_C_G_DATA", &
     921             :                           description="Location of the file t_c_g.dat that contains the data for the "// &
     922             :                           "evaluation of the truncated gamma function ", &
     923             :                           usage="T_C_G_DATA {string}", &
     924        8546 :                           default_c_val="t_c_g.dat")
     925        8546 :       CALL section_add_keyword(subsubsubsection, keyword)
     926        8546 :       CALL keyword_release(keyword)
     927             : 
     928             :       CALL keyword_create(keyword, __LOCATION__, name="OMEGA", &
     929             :                           description="The range parameter for the short range operator (in 1/a0).", &
     930             :                           usage="OMEGA {double}", &
     931             :                           default_r_val=0.0_dp, &
     932        8546 :                           repeats=.FALSE.)
     933        8546 :       CALL section_add_keyword(subsubsubsection, keyword)
     934        8546 :       CALL keyword_release(keyword)
     935             : 
     936        8546 :       CALL section_add_subsection(subsubsection, subsubsubsection)
     937        8546 :       CALL section_release(subsubsubsection)
     938             : 
     939        8546 :       CALL section_add_subsection(subsection, subsubsection)
     940        8546 :       CALL section_release(subsubsection)
     941             : 
     942        8546 :       CALL section_add_subsection(section, subsection)
     943        8546 :       CALL section_release(subsection)
     944             : ! End of Kernel subsection
     945             : 
     946             :       CALL section_create(subsection, __LOCATION__, "PRINT", "Controls the printing of information during "// &
     947        8546 :                           "XAS TDP calculations", repeats=.FALSE.)
     948             : 
     949             :       CALL cp_print_key_section_create(print_key, __LOCATION__, name="SPECTRUM", &
     950             :                                        description="Controles the dumping of the XAS TDP spectrum in output files", &
     951        8546 :                                        print_level=low_print_level, filename="", common_iter_levels=3)
     952        8546 :       CALL section_add_subsection(subsection, print_key)
     953        8546 :       CALL section_release(print_key)
     954             : 
     955             :       CALL cp_print_key_section_create(print_key, __LOCATION__, name="RESTART_WFN", &
     956             :                                        description="Controles the dumping of a MO restart file for a given "// &
     957             :                                        "excited state index. Only for K-edge RKS calculations. "// &
     958             :                                        "Can be repeated to get multiple *.wfn files at once.", &
     959        8546 :                                        print_level=debug_print_level, filename="", common_iter_levels=1)
     960             :       CALL keyword_create(keyword, __LOCATION__, name="EXCITED_STATE_INDEX", variants=(/"INDEX"/), &
     961             :                           description="The index of the excited state that should be dumped", &
     962       17092 :                           usage="INDEX {int}", default_i_val=1, repeats=.TRUE.)
     963        8546 :       CALL section_add_keyword(print_key, keyword)
     964        8546 :       CALL keyword_release(keyword)
     965             : 
     966        8546 :       CALL section_add_subsection(subsection, print_key)
     967        8546 :       CALL section_release(print_key)
     968             : 
     969        8546 :       CALL create_pdos_section(print_key)
     970        8546 :       CALL section_add_subsection(subsection, print_key)
     971        8546 :       CALL section_release(print_key)
     972             : 
     973             :       CALL cp_print_key_section_create(print_key, __LOCATION__, "CUBES", &
     974             :                                        description="Controls the printing of the linear-response orbitals "// &
     975             :                                        "as *.cube files.", &
     976             :                                        print_level=high_print_level, common_iter_levels=1, &
     977        8546 :                                        add_last=add_last_numeric, filename="")
     978             : 
     979             :       CALL keyword_create(keyword, __LOCATION__, name="STRIDE", &
     980             :                           description="The stride (X,Y,Z) used to write the cube file "// &
     981             :                           "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
     982             :                           " 1 number valid for all components.", &
     983        8546 :                           usage="STRIDE 2 2 2", n_var=-1, default_i_vals=(/2, 2, 2/), type_of_var=integer_t)
     984        8546 :       CALL section_add_keyword(print_key, keyword)
     985        8546 :       CALL keyword_release(keyword)
     986             : 
     987             :       CALL keyword_create(keyword, __LOCATION__, name="CUBES_LU_BOUNDS", &
     988             :                           variants=(/"CUBES_LU"/), &
     989             :                           description="The lower and upper index of the excited states to be printed as cube", &
     990             :                           usage="CUBES_LU_BOUNDS integer integer", &
     991       17092 :                           n_var=2, default_i_vals=(/1, 0/), type_of_var=integer_t)
     992        8546 :       CALL section_add_keyword(print_key, keyword)
     993        8546 :       CALL keyword_release(keyword)
     994             : 
     995             :       CALL keyword_create(keyword, __LOCATION__, name="CUBES_LIST", &
     996             :                           description="Indexes of the excited states to be printed as cube files "// &
     997             :                           "This keyword can be repeated several times "// &
     998             :                           "(useful if you have to specify many indexes).", &
     999             :                           usage="CUBES_LIST 1 2", &
    1000        8546 :                           n_var=-1, type_of_var=integer_t, repeats=.TRUE.)
    1001        8546 :       CALL section_add_keyword(print_key, keyword)
    1002        8546 :       CALL keyword_release(keyword)
    1003             : 
    1004             :       CALL keyword_create(keyword, __LOCATION__, name="APPEND", &
    1005             :                           description="append the cube files when they already exist", &
    1006        8546 :                           default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
    1007        8546 :       CALL section_add_keyword(print_key, keyword)
    1008        8546 :       CALL keyword_release(keyword)
    1009             : 
    1010        8546 :       CALL section_add_subsection(subsection, print_key)
    1011        8546 :       CALL section_release(print_key)
    1012             : 
    1013             :       CALL cp_print_key_section_create(print_key, __LOCATION__, "RESTART", &
    1014             :                                        description="Controls the dumping of LR-orbitals coefficients "// &
    1015             :                                        "and corresponding excitation energies such that "// &
    1016             :                                        "the program can be restarted for PDOS or CUBE "// &
    1017             :                                        "printing without the heavy computing.", &
    1018        8546 :                                        print_level=high_print_level, filename="", common_iter_levels=3)
    1019        8546 :       CALL section_add_subsection(subsection, print_key)
    1020        8546 :       CALL section_release(print_key)
    1021             : 
    1022        8546 :       CALL section_add_subsection(section, subsection)
    1023        8546 :       CALL section_release(subsection)
    1024             : 
    1025        8546 :    END SUBROUTINE create_xas_tdp_section
    1026             : 
    1027             : END MODULE input_cp2k_xas

Generated by: LCOV version 1.15