LCOV - code coverage report
Current view: top level - src - input_cp2k_loc.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:123285f) Lines: 100.0 % 210 210
Test Date: 2026-11-04 00:58:17 Functions: 100.0 % 4 4

            Line data    Source code
       1              : !--------------------------------------------------------------------------------------------------!
       2              : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3              : !   Copyright 2000-2026 CP2K developers group <https://cp2k.org>                                   !
       4              : !                                                                                                  !
       5              : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6              : !--------------------------------------------------------------------------------------------------!
       7              : MODULE input_cp2k_loc
       8              :    USE bibliography,                    ONLY: Hunt2003,&
       9              :                                               Schreder2021,&
      10              :                                               Schreder2024_1,&
      11              :                                               Schreder2024_2
      12              :    USE cp_output_handling,              ONLY: add_last_numeric,&
      13              :                                               cp_print_key_section_create,&
      14              :                                               debug_print_level,&
      15              :                                               high_print_level,&
      16              :                                               low_print_level
      17              :    USE input_constants,                 ONLY: &
      18              :         do_loc_both, do_loc_cpo_atomic, do_loc_cpo_random, do_loc_cpo_restart, &
      19              :         do_loc_cpo_space_nmo, do_loc_cpo_space_wan, do_loc_crazy, do_loc_cs, do_loc_direct, &
      20              :         do_loc_gapo, do_loc_homo, do_loc_jacobi, do_loc_l1_norm_sd, do_loc_lumo, do_loc_max, &
      21              :         do_loc_min, do_loc_mixed, do_loc_none, do_loc_scdm, op_loc_berry, op_loc_boys, op_loc_pipek
      22              :    USE input_cp2k_mm,                   ONLY: create_dipoles_section
      23              :    USE input_cp2k_motion_print,         ONLY: add_format_keyword
      24              :    USE input_keyword_types,             ONLY: keyword_create,&
      25              :                                               keyword_release,&
      26              :                                               keyword_type
      27              :    USE input_section_types,             ONLY: section_add_keyword,&
      28              :                                               section_add_subsection,&
      29              :                                               section_create,&
      30              :                                               section_release,&
      31              :                                               section_type
      32              :    USE input_val_types,                 ONLY: integer_t,&
      33              :                                               lchar_t,&
      34              :                                               real_t
      35              :    USE kinds,                           ONLY: dp
      36              :    USE string_utilities,                ONLY: s2a
      37              : #include "./base/base_uses.f90"
      38              : 
      39              :    IMPLICIT NONE
      40              :    PRIVATE
      41              : 
      42              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'input_cp2k_loc'
      43              : 
      44              :    PUBLIC :: create_localize_section, print_wanniers
      45              : 
      46              : CONTAINS
      47              : 
      48              : ! **************************************************************************************************
      49              : !> \brief parameters fo the localization of wavefunctions
      50              : !> \param section ...
      51              : !> \par History
      52              : !>      03.2005 created [MI]
      53              : ! **************************************************************************************************
      54              : 
      55         5971 :    SUBROUTINE create_localize_section(section)
      56              : 
      57              :       TYPE(section_type), POINTER                        :: section
      58              : 
      59              :       TYPE(keyword_type), POINTER                        :: keyword
      60              :       TYPE(section_type), POINTER                        :: print_key, print_section, subsection
      61              : 
      62         5971 :       CPASSERT(.NOT. ASSOCIATED(section))
      63              : 
      64         5971 :       NULLIFY (keyword, print_key)
      65              :       CALL section_create(section, __LOCATION__, name="LOCALIZE", &
      66              :                           description="Use one of the available methods to define the localization"// &
      67              :                           " and possibly to optimize it to a minimum or a maximum.", &
      68              :                           n_keywords=8, n_subsections=0, repeats=.FALSE., &
      69        11942 :                           citations=[Schreder2021])
      70              : 
      71              :       CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
      72              :                           description="controls the activation of the MOS localization procedure", &
      73         5971 :                           usage="&LOCALIZE T", default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
      74         5971 :       CALL section_add_keyword(section, keyword)
      75         5971 :       CALL keyword_release(keyword)
      76              : 
      77              :       CALL keyword_create(keyword, __LOCATION__, name="MAX_ITER", &
      78              :                           description="Maximum number of iterations used for localization methods", &
      79         5971 :                           usage="MAX_ITER 2000", default_i_val=10000)
      80         5971 :       CALL section_add_keyword(section, keyword)
      81         5971 :       CALL keyword_release(keyword)
      82              : 
      83              :       CALL keyword_create( &
      84              :          keyword, __LOCATION__, name="MAX_CRAZY_ANGLE", &
      85              :          description="Largest allowed angle for the crazy rotations algorithm (smaller is slower but more stable).", &
      86         5971 :          usage="MAX_CRAZY_ANGLE 0.1", unit_str="rad", default_r_val=0.2_dp)
      87         5971 :       CALL section_add_keyword(section, keyword)
      88         5971 :       CALL keyword_release(keyword)
      89              : 
      90              :       CALL keyword_create(keyword, __LOCATION__, name="CRAZY_SCALE", &
      91              :                           description="scale angles", &
      92         5971 :                           usage="CRAZY_SCALE 0.9", default_r_val=1.0_dp)
      93         5971 :       CALL section_add_keyword(section, keyword)
      94         5971 :       CALL keyword_release(keyword)
      95              : 
      96              :       CALL keyword_create(keyword, __LOCATION__, name="CRAZY_USE_DIAG", &
      97              :                           description="Use diagonalization (slow) or pade based calculation of matrix exponentials.", &
      98         5971 :                           usage="CRAZY_USE_DIAG ", default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
      99         5971 :       CALL section_add_keyword(section, keyword)
     100         5971 :       CALL keyword_release(keyword)
     101              : 
     102              :       CALL keyword_create( &
     103              :          keyword, __LOCATION__, name="USE_HISTORY", &
     104              :          description="Generate an improved initial guess based on a history of results, which is useful during MD. "// &
     105              :          "Will only work if the number of states to be localized remains constant.", &
     106         5971 :          usage="USE_HISTORY ", default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
     107         5971 :       CALL section_add_keyword(section, keyword)
     108         5971 :       CALL keyword_release(keyword)
     109              : 
     110              :       CALL keyword_create(keyword, __LOCATION__, name="EACH", &
     111              :                           description="localize each n steps", &
     112         5971 :                           default_i_val=1)
     113         5971 :       CALL section_add_keyword(section, keyword)
     114         5971 :       CALL keyword_release(keyword)
     115              : 
     116              :       CALL keyword_create( &
     117              :          keyword, __LOCATION__, name="EPS_OCCUPATION", &
     118              :          description="Tolerance in the occupation number to select only fully occupied orbitals for the rotation", &
     119         5971 :          usage="EPS_OCCUPATION 1.E-5", default_r_val=1.0E-8_dp)
     120         5971 :       CALL section_add_keyword(section, keyword)
     121         5971 :       CALL keyword_release(keyword)
     122              : 
     123              :       CALL keyword_create(keyword, __LOCATION__, name="OUT_ITER_EACH", &
     124              :                           description="Every how many iterations of the localization algorithm "// &
     125              :                           "(Jacobi) the tolerance value is printed out", &
     126         5971 :                           usage="OUT_ITER_EACH 100", default_i_val=100)
     127         5971 :       CALL section_add_keyword(section, keyword)
     128         5971 :       CALL keyword_release(keyword)
     129              : 
     130              :       CALL keyword_create(keyword, __LOCATION__, name="EPS_LOCALIZATION", &
     131              :                           description="Tolerance used in the convergence criterion of the localization methods.", &
     132         5971 :                           usage="EPS_LOCALIZATION 1.0E-2", default_r_val=1.0E-4_dp)
     133         5971 :       CALL section_add_keyword(section, keyword)
     134         5971 :       CALL keyword_release(keyword)
     135              : 
     136              :       CALL keyword_create(keyword, __LOCATION__, name="MIN_OR_MAX", &
     137              :                           description="Requires the maximization of the spread of the wfn", &
     138              :                           usage="MIN_OR_MAX (SPREADMIN|SPREADMAX)", &
     139              :                           enum_c_vals=["SPREADMIN", "SPREADMAX"], &
     140              :                           enum_i_vals=[do_loc_min, do_loc_max], &
     141        17913 :                           default_i_val=do_loc_min)
     142         5971 :       CALL section_add_keyword(section, keyword)
     143         5971 :       CALL keyword_release(keyword)
     144              : 
     145              :       CALL keyword_create( &
     146              :          keyword, __LOCATION__, name="METHOD", &
     147              :          description="Method of optimization if any", &
     148              :          usage="METHOD (JACOBI|CRAZY|DIRECT|GAPO|L1SD|SCDM|CS|NONE)", &
     149              :          enum_c_vals=s2a("NONE", "JACOBI", "CRAZY", "GAPO", "L1SD", "DIRECT", "SCDM", "CS"), &
     150              :          enum_i_vals=[do_loc_none, &
     151              :                       do_loc_jacobi, &
     152              :                       do_loc_crazy, &
     153              :                       do_loc_gapo, &
     154              :                       do_loc_l1_norm_sd, &
     155              :                       do_loc_direct, &
     156              :                       do_loc_scdm, &
     157              :                       do_loc_cs], &
     158              :          enum_desc=s2a("No localization is applied", &
     159              :                        "Using 2 x 2 rotations of the orbitals, slow but robust", &
     160              :                        "A new fast method is applied, might be slightly less robust than jacobi, but usually much faster", &
     161              :                        "Gradient ascent for partially occupied wannier functions", &
     162              :                        "Steepest descent minimization of an approximate l1 norm", &
     163              :                        "Using a direct minimisation approacha", &
     164              :                        "Use QR factorization", &
     165              :                        "Using the Cardoso-Souloumiac algorithm for complex matrices"), &
     166              :          default_i_val=do_loc_jacobi, &
     167        17913 :          citations=[Schreder2021, Schreder2024_2])
     168         5971 :       CALL section_add_keyword(section, keyword)
     169         5971 :       CALL keyword_release(keyword)
     170              : 
     171              :       CALL keyword_create(keyword, __LOCATION__, name="CPO_GUESS", &
     172              :                           description="Initial guess for coefficients if METHOD GAPO is used", &
     173              :                           usage="CPO_GUESS (ATOMIC|RESTART|RANDOM)", &
     174              :                           enum_c_vals=s2a("ATOMIC", "RESTART", "RANDOM"), &
     175              :                           enum_i_vals=[do_loc_cpo_atomic, do_loc_cpo_restart, do_loc_cpo_random], &
     176         5971 :                           default_i_val=do_loc_cpo_atomic)
     177         5971 :       CALL section_add_keyword(section, keyword)
     178         5971 :       CALL keyword_release(keyword)
     179              : 
     180              :       CALL keyword_create(keyword, __LOCATION__, name="CPO_GUESS_SPACE", &
     181              :                           description="Orbital space from which initial guess for coefficients is determined "// &
     182              :                           "if METHOD GAPO and CPO_GUESS ATOMIC are employed", &
     183              :                           usage="CPO_GUESS_SPACE (WAN|ALL)", &
     184              :                           enum_c_vals=s2a("WAN", "ALL"), &
     185              :                           enum_i_vals=[do_loc_cpo_space_wan, do_loc_cpo_space_nmo], &
     186         5971 :                           default_i_val=do_loc_cpo_space_wan)
     187         5971 :       CALL section_add_keyword(section, keyword)
     188         5971 :       CALL keyword_release(keyword)
     189              : 
     190              :       CALL keyword_create(keyword, __LOCATION__, name="CG_PO", &
     191              :                           description="Use conjugate gradient in conjunction with METHOD GAPO. If FALSE, "// &
     192              :                           "steepest descent is used instead.", &
     193              :                           usage="CG_PO", default_l_val=.TRUE., &
     194         5971 :                           lone_keyword_l_val=.TRUE.)
     195         5971 :       CALL section_add_keyword(section, keyword)
     196         5971 :       CALL keyword_release(keyword)
     197              : 
     198              :       CALL keyword_create(keyword, __LOCATION__, name="JACOBI_FALLBACK", &
     199              :                           description="Use Jacobi method in case no convergence was achieved"// &
     200              :                           " by using the crazy rotations method.", &
     201              :                           usage="JACOBI_FALLBACK", default_l_val=.TRUE., &
     202         5971 :                           lone_keyword_l_val=.TRUE.)
     203         5971 :       CALL section_add_keyword(section, keyword)
     204         5971 :       CALL keyword_release(keyword)
     205              : 
     206              :       CALL keyword_create(keyword, __LOCATION__, name="JACOBI_REFINEMENT", &
     207              :                           description="Use Jacobi method to refine the localisation obtained by SCDM", &
     208              :                           usage="JACOBI_REFINEMENT", default_l_val=.FALSE., &
     209         5971 :                           lone_keyword_l_val=.TRUE.)
     210         5971 :       CALL section_add_keyword(section, keyword)
     211         5971 :       CALL keyword_release(keyword)
     212              : 
     213              :       CALL keyword_create(keyword, __LOCATION__, name="RESTART", &
     214              :                           description="Restart the localization from a set of orbitals"// &
     215              :                           " read from a localization restart file.", &
     216              :                           usage="RESTART", default_l_val=.FALSE., &
     217         5971 :                           lone_keyword_l_val=.TRUE.)
     218         5971 :       CALL section_add_keyword(section, keyword)
     219         5971 :       CALL keyword_release(keyword)
     220              : 
     221              :       CALL keyword_create(keyword, __LOCATION__, name="LOCHOMO_RESTART_FILE_NAME", &
     222              :                           description="File name where to read the MOS from "// &
     223              :                           "which to restart the localization procedure for occupied states", &
     224              :                           usage="LOCHOMO_RESTART_FILE_NAME <FILENAME>", &
     225         5971 :                           type_of_var=lchar_t)
     226         5971 :       CALL section_add_keyword(section, keyword)
     227         5971 :       CALL keyword_release(keyword)
     228              : 
     229              :       CALL keyword_create(keyword, __LOCATION__, name="LOCMIXD_RESTART_FILE_NAME", &
     230              :                           description="File name where to read the MOS from "// &
     231              :                           "which to restart the localization procedure for MIXED states", &
     232              :                           usage="LOCMIXD_RESTART_FILE_NAME <FILENAME>", &
     233         5971 :                           type_of_var=lchar_t)
     234         5971 :       CALL section_add_keyword(section, keyword)
     235         5971 :       CALL keyword_release(keyword)
     236              : 
     237              :       CALL keyword_create(keyword, __LOCATION__, name="LOCLUMO_RESTART_FILE_NAME", &
     238              :                           description="File name where to read the MOS from "// &
     239              :                           "which to restart the localization procedure for unoccupied states", &
     240              :                           usage="LOCLUMO_RESTART_FILE_NAME <FILENAME>", &
     241         5971 :                           type_of_var=lchar_t)
     242         5971 :       CALL section_add_keyword(section, keyword)
     243         5971 :       CALL keyword_release(keyword)
     244              : 
     245              :       CALL keyword_create(keyword, __LOCATION__, name="OPERATOR", &
     246              :                           description="Type of opertator which defines the spread functional", &
     247              :                           usage="OPERATOR (BERRY|BOYS|PIPEK)", &
     248              :                           enum_c_vals=s2a("BERRY", "BOYS", "PIPEK"), &
     249              :                           enum_i_vals=[op_loc_berry, op_loc_boys, op_loc_pipek], &
     250              :                           default_i_val=op_loc_berry, &
     251        11942 :                           citations=[Schreder2024_2])
     252         5971 :       CALL section_add_keyword(section, keyword)
     253         5971 :       CALL keyword_release(keyword)
     254              : 
     255              :       CALL keyword_create(keyword, __LOCATION__, name="LIST", &
     256              :                           description="Indexes of the occupied wfn to be localized "// &
     257              :                           "This keyword can be repeated several times "// &
     258              :                           "(useful if you have to specify many indexes).", &
     259              :                           usage="LIST 1 2", &
     260         5971 :                           n_var=-1, type_of_var=integer_t, repeats=.TRUE.)
     261         5971 :       CALL section_add_keyword(section, keyword)
     262         5971 :       CALL keyword_release(keyword)
     263              : 
     264              :       CALL keyword_create(keyword, __LOCATION__, name="LIST_UNOCCUPIED", &
     265              :                           description="Indexes of the unoccupied states to be localized, "// &
     266              :                           "up to now only valid in combination with GPW. "// &
     267              :                           "This keyword has to be present if unoccupied states should be localized. "// &
     268              :                           "This keyword can be repeated several times "// &
     269              :                           "(useful if you have to specify many indexes).", &
     270              :                           usage="LIST_UNOCCUPIED 1 2", &
     271         5971 :                           n_var=-1, type_of_var=integer_t, repeats=.TRUE.)
     272         5971 :       CALL section_add_keyword(section, keyword)
     273         5971 :       CALL keyword_release(keyword)
     274              : 
     275              :       CALL keyword_create(keyword, __LOCATION__, name="NEXTRA", &
     276              :                           description="Number of orbitals above fully occupied MOs to be localized, "// &
     277              :                           "up to now only valid in combination with GPW. "// &
     278              :                           "This keyword has to be present for STATES MIXED option. "// &
     279              :                           "Otherwise, only the fully occupied MOs are localized.", &
     280         5971 :                           usage="NEXTRA 5", default_i_val=0)
     281         5971 :       CALL section_add_keyword(section, keyword)
     282         5971 :       CALL keyword_release(keyword)
     283              : 
     284              :       CALL keyword_create(keyword, __LOCATION__, name="STATES", &
     285              :                           description="Which states to localize, LUMO up to now only available in GPW", &
     286              :                           usage="STATES (HOMO|LUMO|MIXED|ALL)", &
     287              :                           enum_c_vals=s2a("OCCUPIED", "UNOCCUPIED", "MIXED", "ALL"), &
     288              :                           enum_i_vals=[do_loc_homo, do_loc_lumo, do_loc_mixed, do_loc_both], &
     289         5971 :                           default_i_val=do_loc_homo)
     290         5971 :       CALL section_add_keyword(section, keyword)
     291         5971 :       CALL keyword_release(keyword)
     292              : 
     293              :       CALL keyword_create( &
     294              :          keyword, __LOCATION__, &
     295              :          name="ENERGY_RANGE", &
     296              :          description="Select the orbitals to be localized within the given energy range."// &
     297              :          " This type of selection cannot be added on top of the selection through a LIST. It reads to reals that are"// &
     298              :          " lower and higher boundaries of the energy range.", &
     299              :          usage="ENERGY_RANGE lower_bound {real}, higher_bound {real}", &
     300              :          repeats=.FALSE., &
     301              :          n_var=2, default_r_vals=[0._dp, 0._dp], unit_str='eV', &
     302         5971 :          type_of_var=real_t)
     303         5971 :       CALL section_add_keyword(section, keyword)
     304         5971 :       CALL keyword_release(keyword)
     305              : 
     306         5971 :       NULLIFY (print_section)
     307              :       CALL section_create(print_section, __LOCATION__, name="PRINT", &
     308              :                           description="Collects all printing options related to the Wannier centers and "// &
     309              :                           "properties computed with Wannier centers.", &
     310         5971 :                           n_keywords=0, n_subsections=1, repeats=.FALSE.)
     311         5971 :       NULLIFY (print_key)
     312              :       CALL cp_print_key_section_create(print_key, __LOCATION__, "program_run_info", &
     313              :                                        description="Controls the printing basic info about the method", &
     314         5971 :                                        print_level=low_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
     315         5971 :       CALL section_add_subsection(print_section, print_key)
     316         5971 :       CALL section_release(print_key)
     317              :       ! Add printing of wannier infos
     318         5971 :       CALL print_wanniers(print_section)
     319         5971 :       NULLIFY (subsection)
     320              :       ! Total Dipoles with wannier
     321         5971 :       CALL create_dipoles_section(subsection, "TOTAL_DIPOLE", debug_print_level + 1)
     322         5971 :       CALL section_add_subsection(print_section, subsection)
     323         5971 :       CALL section_release(subsection)
     324              :       ! Molecular Dipoles with wannier
     325         5971 :       CALL create_dipoles_section(subsection, "MOLECULAR_DIPOLES", debug_print_level + 1)
     326         5971 :       CALL section_add_subsection(print_section, subsection)
     327         5971 :       CALL section_release(subsection)
     328              :       ! Molecular Mulipole Moments with wannier
     329              :       CALL cp_print_key_section_create(subsection, __LOCATION__, name="MOLECULAR_MOMENTS", &
     330              :                                        description="Section controlling the calculation of molecular multipole moments.", &
     331         5971 :                                        print_level=debug_print_level + 1, filename="__STD_OUT__")
     332              :       CALL keyword_create(keyword, __LOCATION__, name="ORDER", &
     333              :                           description="Maximum order of mulitpoles to be calculated.", &
     334         5971 :                           usage="ORDER {integer}", default_i_val=2, type_of_var=integer_t)
     335         5971 :       CALL section_add_keyword(subsection, keyword)
     336         5971 :       CALL keyword_release(keyword)
     337              :       !
     338         5971 :       CALL section_add_subsection(print_section, subsection)
     339         5971 :       CALL section_release(subsection)
     340              :       !
     341              :       CALL cp_print_key_section_create(subsection, __LOCATION__, name="LOCALIZED_MOMENTS", &
     342              :                                        description="Section controlling the calculation of "// &
     343              :                                        "localized moments", &
     344              :                                        print_level=debug_print_level + 1, filename="__STD_OUT__", &
     345        17913 :                                        citations=[Schreder2021, Schreder2024_1])
     346              :       !
     347              :       CALL keyword_create(keyword, __LOCATION__, &
     348              :                           name="MAX_MOMENT", &
     349              :                           description="Maximum moment to be calculated.", &
     350              :                           usage="MAX_MOMENT {integer}", &
     351              :                           repeats=.FALSE., &
     352              :                           n_var=1, &
     353              :                           type_of_var=integer_t, &
     354         5971 :                           default_i_val=1)
     355         5971 :       CALL section_add_keyword(subsection, keyword)
     356         5971 :       CALL keyword_release(keyword)
     357              :       !
     358              :       CALL keyword_create(keyword, __LOCATION__, &
     359              :                           name="MAGNETIC", &
     360              :                           description="Calculate also magnetic moments.", &
     361              :                           usage="MAGNETIC .TRUE.", &
     362              :                           repeats=.FALSE., &
     363              :                           n_var=1, &
     364              :                           default_l_val=.FALSE., &
     365         5971 :                           lone_keyword_l_val=.TRUE.)
     366         5971 :       CALL section_add_keyword(subsection, keyword)
     367         5971 :       CALL keyword_release(keyword)
     368              :       !
     369              :       CALL keyword_create(keyword, __LOCATION__, &
     370              :                           name="VEL_REPRS", &
     371              :                           description="Calculate expectation values of the el. multipole "// &
     372              :                           "moments in their velocity representation during RTP. Implemented up "// &
     373              :                           "to el. quadrupole moment.", &
     374              :                           usage="VEL_REPRS .TRUE.", &
     375              :                           repeats=.FALSE., &
     376              :                           n_var=1, &
     377              :                           default_l_val=.FALSE., &
     378         5971 :                           lone_keyword_l_val=.TRUE.)
     379         5971 :       CALL section_add_keyword(subsection, keyword)
     380         5971 :       CALL keyword_release(keyword)
     381              :       !
     382              :       CALL keyword_create(keyword, __LOCATION__, &
     383              :                           name="COM_NL", &
     384              :                           description="Include non local commutator for velocity "// &
     385              :                           "representations. Necessary for origin independent results.", &
     386              :                           usage="COM_NL .TRUE.", &
     387              :                           repeats=.FALSE., &
     388              :                           n_var=1, &
     389              :                           default_l_val=.FALSE., &
     390         5971 :                           lone_keyword_l_val=.TRUE.)
     391         5971 :       CALL section_add_keyword(subsection, keyword)
     392         5971 :       CALL keyword_release(keyword)
     393              :       !
     394         5971 :       CALL section_add_subsection(print_section, subsection)
     395         5971 :       CALL section_release(subsection)
     396              :       ! Molecular States with wannier
     397         5971 :       CALL create_molecular_states_section(subsection)
     398         5971 :       CALL section_add_subsection(print_section, subsection)
     399         5971 :       CALL section_release(subsection)
     400              :       ! Wannier States with wannier
     401         5971 :       CALL create_wannier_states_section(subsection)
     402         5971 :       CALL section_add_subsection(print_section, subsection)
     403         5971 :       CALL section_release(subsection)
     404              :       !
     405         5971 :       CALL section_add_subsection(section, print_section)
     406         5971 :       CALL section_release(print_section)
     407              : 
     408         5971 :    END SUBROUTINE create_localize_section
     409              : 
     410              : ! **************************************************************************************************
     411              : !> \brief Controls the printing of the basic info coming from the LOCALIZE
     412              : !>        section
     413              : !> \param section ...
     414              : !> \author teo
     415              : ! **************************************************************************************************
     416         7452 :    SUBROUTINE print_wanniers(section)
     417              :       TYPE(section_type), POINTER                        :: section
     418              : 
     419              :       TYPE(keyword_type), POINTER                        :: keyword
     420              :       TYPE(section_type), POINTER                        :: print_key
     421              : 
     422         7452 :       CPASSERT(ASSOCIATED(section))
     423         7452 :       NULLIFY (print_key, keyword)
     424              :       CALL cp_print_key_section_create(print_key, __LOCATION__, "WANNIER_CUBES", &
     425              :                                        description="Controls the printing of the wannier functions ", &
     426         7452 :                                        print_level=high_print_level, add_last=add_last_numeric, filename="")
     427              :       CALL keyword_create(keyword, __LOCATION__, name="stride", &
     428              :                           description="The stride (X,Y,Z) used to write the cube file "// &
     429              :                           "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
     430              :                           " 1 number valid for all components.", &
     431         7452 :                           usage="STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=integer_t)
     432         7452 :       CALL section_add_keyword(print_key, keyword)
     433         7452 :       CALL keyword_release(keyword)
     434              : 
     435              :       CALL keyword_create(keyword, __LOCATION__, name="DENSITY", &
     436              :                           description="Controls the printing of the Wannier function "// &
     437              :                           "electronic densities", &
     438         7452 :                           default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
     439         7452 :       CALL section_add_keyword(print_key, keyword)
     440         7452 :       CALL keyword_release(keyword)
     441              : 
     442              :       CALL keyword_create(keyword, __LOCATION__, name="CUBES_LU_BOUNDS", &
     443              :                           variants=["CUBES_LU"], &
     444              :                           description="The lower and upper index of the states to be printed as cube", &
     445              :                           usage="CUBES_LU_BOUNDS integer integer", &
     446        14904 :                           n_var=2, default_i_vals=[0, -2], type_of_var=integer_t)
     447         7452 :       CALL section_add_keyword(print_key, keyword)
     448         7452 :       CALL keyword_release(keyword)
     449              : 
     450              :       CALL keyword_create(keyword, __LOCATION__, name="CUBES_LIST", &
     451              :                           description="Indexes of the states to be printed as cube files"// &
     452              :                           " This keyword can be repeated several times"// &
     453              :                           " (useful if you have to specify many indexes).", &
     454              :                           usage="CUBES_LIST 1 2", &
     455         7452 :                           n_var=-1, type_of_var=integer_t, repeats=.TRUE.)
     456         7452 :       CALL section_add_keyword(print_key, keyword)
     457         7452 :       CALL keyword_release(keyword)
     458              :       CALL keyword_create(keyword, __LOCATION__, name="APPEND", &
     459              :                           description="append the cube files when they already exist", &
     460         7452 :                           default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
     461         7452 :       CALL section_add_keyword(print_key, keyword)
     462         7452 :       CALL keyword_release(keyword)
     463              : 
     464         7452 :       CALL section_add_subsection(section, print_key)
     465         7452 :       CALL section_release(print_key)
     466              : 
     467         7452 :       NULLIFY (print_key)
     468              :       CALL cp_print_key_section_create(print_key, __LOCATION__, "WANNIER_CENTERS", &
     469              :                                        description="Controls the printing of the wannier functions", &
     470              :                                        print_level=high_print_level, add_last=add_last_numeric, filename="", &
     471         7452 :                                        unit_str="angstrom")
     472              : 
     473              :       CALL keyword_create(keyword, __LOCATION__, name="IONS+CENTERS", &
     474              :                           description="prints out the wannier centers together with the particles", &
     475              :                           usage="IONS+CENTERS", default_l_val=.FALSE., &
     476         7452 :                           lone_keyword_l_val=.TRUE.)
     477         7452 :       CALL section_add_keyword(print_key, keyword)
     478         7452 :       CALL keyword_release(keyword)
     479              : 
     480              :       CALL add_format_keyword(keyword, print_key, pos=.TRUE., &
     481         7452 :                               description="Specifies the format of the output file when IONS+CENTERS is enabled.")
     482         7452 :       CALL section_add_subsection(section, print_key)
     483         7452 :       CALL section_release(print_key)
     484              : 
     485         7452 :       NULLIFY (print_key)
     486              :       CALL cp_print_key_section_create(print_key, __LOCATION__, "WANNIER_SPREADS", &
     487              :                                        description="Controls the printing of the wannier functions", &
     488         7452 :                                        print_level=high_print_level, add_last=add_last_numeric, filename="")
     489              : 
     490              :       CALL keyword_create(keyword, __LOCATION__, name="SECOND_MOMENTS", &
     491              :                           description="Prints out the upper triangular part of the position covariance matrix. "// &
     492              :                           "Default is to use a non-periodic position operator. ", &
     493              :                           usage="SECOND_MOMENTS", default_l_val=.FALSE., &
     494         7452 :                           lone_keyword_l_val=.TRUE.)
     495         7452 :       CALL section_add_keyword(print_key, keyword)
     496         7452 :       CALL keyword_release(keyword)
     497              : 
     498              :       CALL keyword_create(keyword, __LOCATION__, name="PERIODIC", &
     499              :                           description="For the covariance matrix, use the periodic position operator."// &
     500              :                           " Requires setting LMAXN1 in QS section to 6 or higher.", &
     501              :                           usage="PERIODIC", default_l_val=.FALSE., &
     502         7452 :                           lone_keyword_l_val=.TRUE.)
     503         7452 :       CALL section_add_keyword(print_key, keyword)
     504         7452 :       CALL keyword_release(keyword)
     505              : 
     506         7452 :       CALL section_add_subsection(section, print_key)
     507         7452 :       CALL section_release(print_key)
     508              : 
     509         7452 :       NULLIFY (print_key)
     510              :       CALL cp_print_key_section_create(print_key, __LOCATION__, "LOC_RESTART", &
     511              :                                        description="Controls the printing of restart file for localized MOS", &
     512         7452 :                                        print_level=high_print_level, add_last=add_last_numeric, filename="")
     513         7452 :       CALL section_add_subsection(section, print_key)
     514         7452 :       CALL section_release(print_key)
     515              : 
     516         7452 :    END SUBROUTINE print_wanniers
     517              : 
     518              : ! **************************************************************************************************
     519              : !> \brief creates the input section for the molecular states
     520              : !> \param print_key ...
     521              : !> \author teo
     522              : ! **************************************************************************************************
     523         5971 :    SUBROUTINE create_molecular_states_section(print_key)
     524              :       TYPE(section_type), POINTER                        :: print_key
     525              : 
     526              :       TYPE(keyword_type), POINTER                        :: keyword
     527              :       TYPE(section_type), POINTER                        :: print_key2
     528              : 
     529         5971 :       CPASSERT(.NOT. ASSOCIATED(print_key))
     530         5971 :       NULLIFY (print_key2, keyword)
     531              :       CALL cp_print_key_section_create(print_key, __LOCATION__, "MOLECULAR_STATES", &
     532              :                                        description="Controls printing of molecular states ", &
     533        11942 :                                        print_level=high_print_level, filename=" ", citations=[Hunt2003])
     534              : 
     535              :       CALL keyword_create( &
     536              :          keyword, __LOCATION__, name="CUBE_EVAL_RANGE", &
     537              :          description="only write cubes if the energies of the corresponding molecular states lie in the given interval. "// &
     538              :          "Default is all states.", &
     539         5971 :          usage="CUBE_EVAL_RANGE -1.0 1.0", unit_str="hartree", n_var=2, type_of_var=real_t)
     540         5971 :       CALL section_add_keyword(print_key, keyword)
     541         5971 :       CALL keyword_release(keyword)
     542              : 
     543              :       CALL keyword_create(keyword, __LOCATION__, name="MARK_STATES", &
     544              :                           description="Can be used to mark given molecular states."// &
     545              :                           " Sets a mark to both, occupied and unoccupied states. "// &
     546              :                           "Occupied states are counted beginning with HOMO=1, "// &
     547              :                           "unoccupied states are counted beginning with LUMO=1, "// &
     548              :                           "This is only meaningful in combination with WFN_MIX. "// &
     549              :                           "First integer specifies the molecule, second integer specifies the state.", &
     550              :                           usage="MARK_STATES integer integer", &
     551         5971 :                           n_var=2, default_i_vals=[-1, -1], type_of_var=integer_t, repeats=.TRUE.)
     552         5971 :       CALL section_add_keyword(print_key, keyword)
     553         5971 :       CALL keyword_release(keyword)
     554              : 
     555              :       CALL cp_print_key_section_create(print_key2, __LOCATION__, "cubes", &
     556              :                                        description="Controls the printing of cube files", &
     557         5971 :                                        print_level=high_print_level, filename="")
     558              :       CALL keyword_create(keyword, __LOCATION__, name="stride", &
     559              :                           description="The stride (X,Y,Z) used to write the cube file "// &
     560              :                           "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
     561              :                           " 1 number valid for all components.", &
     562         5971 :                           usage="STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=integer_t)
     563         5971 :       CALL section_add_keyword(print_key2, keyword)
     564         5971 :       CALL keyword_release(keyword)
     565         5971 :       CALL section_add_subsection(print_key, print_key2)
     566         5971 :       CALL section_release(print_key2)
     567         5971 :    END SUBROUTINE create_molecular_states_section
     568              : 
     569              : ! **************************************************************************************************
     570              : !> \brief ...
     571              : !> \param print_key ...
     572              : ! **************************************************************************************************
     573         5971 :    SUBROUTINE create_wannier_states_section(print_key)
     574              :       TYPE(section_type), POINTER                        :: print_key
     575              : 
     576              :       TYPE(keyword_type), POINTER                        :: keyword
     577              :       TYPE(section_type), POINTER                        :: print_key2
     578              : 
     579         5971 :       CPASSERT(.NOT. ASSOCIATED(print_key))
     580         5971 :       NULLIFY (print_key2, keyword)
     581              :       CALL cp_print_key_section_create(print_key, __LOCATION__, "WANNIER_STATES", &
     582              :                                        description="Controls printing of Wannier states ", &
     583         5971 :                                        print_level=high_print_level, filename=" ")
     584              : 
     585              :       CALL keyword_create( &
     586              :          keyword, __LOCATION__, name="CUBE_EVAL_RANGE", &
     587              :          description="only write cubes if the energies of the corresponding molecular states lie in the given interval. "// &
     588              :          "Default is all states.", &
     589         5971 :          usage="CUBE_EVAL_RANGE -1.0 1.0", unit_str="hartree", n_var=2, type_of_var=real_t)
     590         5971 :       CALL section_add_keyword(print_key, keyword)
     591         5971 :       CALL keyword_release(keyword)
     592              : 
     593              :       CALL keyword_create(keyword, __LOCATION__, name="MARK_STATES", &
     594              :                           description="Can be used to mark given molecular states."// &
     595              :                           " Sets a mark to both, occupied and unoccupied states. "// &
     596              :                           "Occupied states are counted beginning with HOMO=1, "// &
     597              :                           "unoccupied states are counted beginning with LUMO=1, "// &
     598              :                           "This is only meaningful in combination with WFN_MIX. "// &
     599              :                           "First integer specifies the molecule, second integer specifies the state.", &
     600              :                           usage="MARK_STATES integer integer", &
     601         5971 :                           n_var=2, default_i_vals=[-1, -1], type_of_var=integer_t, repeats=.TRUE.)
     602         5971 :       CALL section_add_keyword(print_key, keyword)
     603         5971 :       CALL keyword_release(keyword)
     604              : 
     605              :       CALL keyword_create(keyword, __LOCATION__, name="CARTESIAN", &
     606              :                           description="Print the Wannier states in the Cartesian basis instead of the default spherical basis.", &
     607         5971 :                           default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
     608         5971 :       CALL section_add_keyword(print_key, keyword)
     609         5971 :       CALL keyword_release(keyword)
     610              : 
     611              :       CALL cp_print_key_section_create(print_key2, __LOCATION__, "cubes", &
     612              :                                        description="Controls the printing of cube files", &
     613         5971 :                                        print_level=high_print_level, filename="")
     614              :       CALL keyword_create(keyword, __LOCATION__, name="stride", &
     615              :                           description="The stride (X,Y,Z) used to write the cube file "// &
     616              :                           "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
     617              :                           " 1 number valid for all components.", &
     618         5971 :                           usage="STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=integer_t)
     619         5971 :       CALL section_add_keyword(print_key2, keyword)
     620         5971 :       CALL keyword_release(keyword)
     621         5971 :       CALL section_add_subsection(print_key, print_key2)
     622         5971 :       CALL section_release(print_key2)
     623         5971 :    END SUBROUTINE create_wannier_states_section
     624              : 
     625              : END MODULE input_cp2k_loc
        

Generated by: LCOV version 2.0-1