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

            Line data    Source code
       1              : !--------------------------------------------------------------------------------------------------!
       2              : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3              : !   Copyright 2000-2026 CP2K developers group <https://cp2k.org>                                   !
       4              : !                                                                                                  !
       5              : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6              : !--------------------------------------------------------------------------------------------------!
       7              : 
       8              : ! **************************************************************************************************
       9              : !> \par History
      10              : !>      - taken out of input_cp2k_motion
      11              : !> \author teo & fawzi
      12              : ! **************************************************************************************************
      13              : MODULE input_cp2k_colvar
      14              :    USE bibliography,                    ONLY: Branduardi2007,&
      15              :                                               Zhang2025
      16              :    USE colvar_types,                    ONLY: &
      17              :         do_clv_fix_point, do_clv_geo_center, do_clv_x, do_clv_xy, do_clv_xyz, do_clv_xz, do_clv_y, &
      18              :         do_clv_yz, do_clv_z, plane_def_atoms, plane_def_vec
      19              :    USE cp_output_handling,              ONLY: add_last_numeric,&
      20              :                                               cp_print_key_section_create,&
      21              :                                               high_print_level,&
      22              :                                               low_print_level
      23              :    USE cp_units,                        ONLY: cp_unit_to_cp2k
      24              :    USE fparser,                         ONLY: docf
      25              :    USE generic_function_input,          ONLY: create_function_section
      26              :    USE input_constants,                 ONLY: gaussian,&
      27              :                                               numerical,&
      28              :                                               rmsd_all,&
      29              :                                               rmsd_list,&
      30              :                                               rmsd_weightlist
      31              :    USE input_keyword_types,             ONLY: keyword_create,&
      32              :                                               keyword_release,&
      33              :                                               keyword_type
      34              :    USE input_section_types,             ONLY: section_add_keyword,&
      35              :                                               section_add_subsection,&
      36              :                                               section_create,&
      37              :                                               section_release,&
      38              :                                               section_type
      39              :    USE input_val_types,                 ONLY: char_t,&
      40              :                                               integer_t,&
      41              :                                               lchar_t,&
      42              :                                               real_t
      43              :    USE kinds,                           ONLY: dp
      44              :    USE string_utilities,                ONLY: newline,&
      45              :                                               s2a
      46              : #include "./base/base_uses.f90"
      47              : 
      48              :    IMPLICIT NONE
      49              :    PRIVATE
      50              : 
      51              :    LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .FALSE.
      52              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'input_cp2k_colvar'
      53              : 
      54              :    PUBLIC :: create_colvar_section, &
      55              :              create_colvar_xyz_d_section, &
      56              :              create_colvar_xyz_od_section
      57              : 
      58              : CONTAINS
      59              : 
      60              : ! **************************************************************************************************
      61              : !> \brief creates the colvar section
      62              : !> \param section the section to be created
      63              : !> \param skip_recursive_colvar ...
      64              : !> \author teo
      65              : ! **************************************************************************************************
      66         5848 :    RECURSIVE SUBROUTINE create_colvar_section(section, skip_recursive_colvar)
      67              :       TYPE(section_type), POINTER                        :: section
      68              :       LOGICAL, OPTIONAL                                  :: skip_recursive_colvar
      69              : 
      70              :       LOGICAL                                            :: skip
      71              :       TYPE(section_type), POINTER                        :: print_key, subsection
      72              : 
      73         5848 :       skip = .FALSE.
      74         5848 :       IF (PRESENT(skip_recursive_colvar)) skip = skip_recursive_colvar
      75         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
      76              :       CALL section_create(section, __LOCATION__, name="COLVAR", &
      77              :                           description="This section specifies the nature of the collective variables.", &
      78         5848 :                           n_keywords=1, n_subsections=1, repeats=.TRUE.)
      79         5848 :       NULLIFY (subsection, print_key)
      80              : 
      81              :       CALL create_colvar_var_section(subsection=subsection, &
      82         5848 :                                      section=section, skip_recursive_colvar=skip)
      83              : 
      84              :       CALL section_create(subsection, __LOCATION__, name="PRINT", &
      85              :                           description="Controls the printing of the colvar specifications", &
      86         5848 :                           n_keywords=0, n_subsections=1, repeats=.TRUE.)
      87         5848 :       NULLIFY (print_key)
      88              :       CALL cp_print_key_section_create(print_key, __LOCATION__, "PROGRAM_RUN_INFO", &
      89              :                                        description="Controls the printing of basic information during colvar setup.", &
      90         5848 :                                        print_level=low_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
      91         5848 :       CALL section_add_subsection(subsection, print_key)
      92         5848 :       CALL section_release(print_key)
      93         5848 :       CALL section_add_subsection(section, subsection)
      94         5848 :       CALL section_release(subsection)
      95              : 
      96         5848 :       CALL create_clv_info_section(subsection)
      97         5848 :       CALL section_add_subsection(section, subsection)
      98         5848 :       CALL section_release(subsection)
      99              : 
     100         5848 :    END SUBROUTINE create_colvar_section
     101              : 
     102              : ! **************************************************************************************************
     103              : !> \brief Create the restart section for colvar restraints
     104              : !>      This section will be only used for restraint restarts.
     105              : !>      Constraints are handled automatically
     106              : !> \param section the section to create
     107              : !> \author Teodoro Laino 08.2006
     108              : ! **************************************************************************************************
     109         5848 :    SUBROUTINE create_clv_info_section(section)
     110              :       TYPE(section_type), POINTER                        :: section
     111              : 
     112              :       TYPE(keyword_type), POINTER                        :: keyword
     113              : 
     114         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
     115         5848 :       NULLIFY (keyword)
     116              :       CALL section_create(section, __LOCATION__, name="COLVAR_FUNC_INFO", &
     117              :                           description="Specify further data possibly used by colvars, depending "// &
     118              :                           "on the starting geometry, for computing the functions value.", &
     119         5848 :                           n_subsections=0, repeats=.FALSE.)
     120              : 
     121              :       CALL keyword_create(keyword, __LOCATION__, name="_DEFAULT_KEYWORD_", &
     122              :                           description="Colvar function data."// &
     123              :                           " The order is an internal order. So if you decide to edit/modify/add these values by hand"// &
     124              :                           " you should know very well what you are doing.!", repeats=.TRUE., &
     125         5848 :                           usage="{Real} ...", type_of_var=real_t, n_var=-1)
     126         5848 :       CALL section_add_keyword(section, keyword)
     127         5848 :       CALL keyword_release(keyword)
     128              : 
     129         5848 :    END SUBROUTINE create_clv_info_section
     130              : 
     131              : ! **************************************************************************************************
     132              : !> \brief creates the collective variables for the colvar section
     133              : !> \param subsection ...
     134              : !> \param section the section to be created
     135              : !> \param skip_recursive_colvar ...
     136              : !> \author teo
     137              : ! **************************************************************************************************
     138         5848 :    RECURSIVE SUBROUTINE create_colvar_var_section(subsection, section, skip_recursive_colvar)
     139              :       TYPE(section_type), POINTER                        :: subsection, section
     140              :       LOGICAL, INTENT(IN)                                :: skip_recursive_colvar
     141              : 
     142         5848 :       CPASSERT(.NOT. ASSOCIATED(subsection))
     143         5848 :       CPASSERT(ASSOCIATED(section))
     144              : 
     145         5848 :       CALL create_colvar_dist_section(subsection)
     146         5848 :       CALL section_add_subsection(section, subsection)
     147         5848 :       CALL section_release(subsection)
     148              : 
     149         5848 :       CALL create_colvar_angle_section(subsection)
     150         5848 :       CALL section_add_subsection(section, subsection)
     151         5848 :       CALL section_release(subsection)
     152              : 
     153         5848 :       CALL create_colvar_torsion_section(subsection)
     154         5848 :       CALL section_add_subsection(section, subsection)
     155         5848 :       CALL section_release(subsection)
     156              : 
     157         5848 :       CALL create_colvar_coord_section(subsection)
     158         5848 :       CALL section_add_subsection(section, subsection)
     159         5848 :       CALL section_release(subsection)
     160              : 
     161         5848 :       CALL create_colvar_pop_section(subsection)
     162         5848 :       CALL section_add_subsection(section, subsection)
     163         5848 :       CALL section_release(subsection)
     164              : 
     165         5848 :       CALL create_colvar_gyr_section(subsection)
     166         5848 :       CALL section_add_subsection(section, subsection)
     167         5848 :       CALL section_release(subsection)
     168              : 
     169         5848 :       CALL create_colvar_d_pl_section(subsection)
     170         5848 :       CALL section_add_subsection(section, subsection)
     171         5848 :       CALL section_release(subsection)
     172              : 
     173         5848 :       CALL create_colvar_a_pl_section(subsection)
     174         5848 :       CALL section_add_subsection(section, subsection)
     175         5848 :       CALL section_release(subsection)
     176              : 
     177         5848 :       CALL create_colvar_rot_section(subsection)
     178         5848 :       CALL section_add_subsection(section, subsection)
     179         5848 :       CALL section_release(subsection)
     180              : 
     181         5848 :       CALL create_colvar_dfunct_section(subsection)
     182         5848 :       CALL section_add_subsection(section, subsection)
     183         5848 :       CALL section_release(subsection)
     184              : 
     185         5848 :       CALL create_colvar_qparm_section(subsection)
     186         5848 :       CALL section_add_subsection(section, subsection)
     187         5848 :       CALL section_release(subsection)
     188              : 
     189         5848 :       CALL create_colvar_hydronium_shell_section(subsection)
     190         5848 :       CALL section_add_subsection(section, subsection)
     191         5848 :       CALL section_release(subsection)
     192              : 
     193         5848 :       CALL create_colvar_hydronium_dist_section(subsection)
     194         5848 :       CALL section_add_subsection(section, subsection)
     195         5848 :       CALL section_release(subsection)
     196              : 
     197         5848 :       CALL create_colvar_acid_hyd_dist_section(subsection)
     198         5848 :       CALL section_add_subsection(section, subsection)
     199         5848 :       CALL section_release(subsection)
     200              : 
     201         5848 :       CALL create_colvar_acid_hyd_shell_section(subsection)
     202         5848 :       CALL section_add_subsection(section, subsection)
     203         5848 :       CALL section_release(subsection)
     204              : 
     205         5848 :       CALL create_colvar_rmsd_section(subsection)
     206         5848 :       CALL section_add_subsection(section, subsection)
     207         5848 :       CALL section_release(subsection)
     208              : 
     209         5848 :       CALL create_colvar_xyz_d_section(subsection)
     210         5848 :       CALL section_add_subsection(section, subsection)
     211         5848 :       CALL section_release(subsection)
     212              : 
     213         5848 :       CALL create_colvar_xyz_od_section(subsection)
     214         5848 :       CALL section_add_subsection(section, subsection)
     215         5848 :       CALL section_release(subsection)
     216              : 
     217         5848 :       CALL create_colvar_u_section(subsection)
     218         5848 :       CALL section_add_subsection(section, subsection)
     219         5848 :       CALL section_release(subsection)
     220              : 
     221         5848 :       CALL create_colvar_wc_section(subsection)
     222         5848 :       CALL section_add_subsection(section, subsection)
     223         5848 :       CALL section_release(subsection)
     224              : 
     225         5848 :       CALL create_colvar_hbp_section(subsection)
     226         5848 :       CALL section_add_subsection(section, subsection)
     227         5848 :       CALL section_release(subsection)
     228              : 
     229         5848 :       CALL create_colvar_ring_puckering_section(subsection)
     230         5848 :       CALL section_add_subsection(section, subsection)
     231         5848 :       CALL section_release(subsection)
     232              : 
     233         5848 :       CALL create_colvar_cond_dist_section(subsection)
     234         5848 :       CALL section_add_subsection(section, subsection)
     235         5848 :       CALL section_release(subsection)
     236              : 
     237         5848 :       CALL create_voronoiipz_section(subsection)
     238         5848 :       CALL section_add_subsection(section, subsection)
     239         5848 :       CALL section_release(subsection)
     240              : 
     241         5848 :       IF (.NOT. skip_recursive_colvar) THEN
     242         1462 :          CALL create_colvar_rpath_section(subsection)
     243         1462 :          CALL section_add_subsection(section, subsection)
     244         1462 :          CALL section_release(subsection)
     245              : 
     246         1462 :          CALL create_colvar_dpath_section(subsection)
     247         1462 :          CALL section_add_subsection(section, subsection)
     248         1462 :          CALL section_release(subsection)
     249              : 
     250         1462 :          CALL create_colvar_comb_section(subsection)
     251         1462 :          CALL section_add_subsection(section, subsection)
     252         1462 :          CALL section_release(subsection)
     253              :       END IF
     254              : 
     255         5848 :    END SUBROUTINE create_colvar_var_section
     256              : 
     257              : ! **************************************************************************************************
     258              : !> \brief collective variables specifying coordination
     259              : !> \param section the section to be created
     260              : !> \author teo
     261              : ! **************************************************************************************************
     262         5848 :    SUBROUTINE create_colvar_coord_section(section)
     263              :       TYPE(section_type), POINTER                        :: section
     264              : 
     265              :       TYPE(keyword_type), POINTER                        :: keyword
     266              :       TYPE(section_type), POINTER                        :: subsection
     267              : 
     268         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
     269              :       CALL section_create(section, __LOCATION__, name="coordination", &
     270              :                           description="Section to define the coordination number as a collective variable.", &
     271         5848 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
     272              : 
     273         5848 :       NULLIFY (subsection, keyword)
     274              : 
     275              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS_FROM", &
     276              :                           variants=["POINTS_FROM"], &
     277              :                           description="Specify indexes of atoms/points building the coordination variable. ", &
     278              :                           usage="ATOMS_FROM {integer} {integer} ..", repeats=.TRUE., &
     279        11696 :                           n_var=-1, type_of_var=integer_t)
     280         5848 :       CALL section_add_keyword(section, keyword)
     281         5848 :       CALL keyword_release(keyword)
     282              : 
     283              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS_TO", &
     284              :                           variants=["POINTS_TO"], &
     285              :                           description="Specify indexes of atoms/points building the coordination variable. ", &
     286              :                           usage="ATOMS_TO {integer} {integer} ..", repeats=.TRUE., &
     287        11696 :                           n_var=-1, type_of_var=integer_t)
     288         5848 :       CALL section_add_keyword(section, keyword)
     289         5848 :       CALL keyword_release(keyword)
     290              : 
     291              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS_TO_B", &
     292              :                           variants=["POINTS_TO_B"], &
     293              :                           description="For the CV given by the multiplication of two coorination numbers,"// &
     294              :                           " here specify indexes of the third set of atoms/points. ", &
     295              :                           usage="ATOMS_TO_B {integer} {integer} ..", repeats=.TRUE., &
     296        11696 :                           n_var=-1, type_of_var=integer_t)
     297         5848 :       CALL section_add_keyword(section, keyword)
     298         5848 :       CALL keyword_release(keyword)
     299              : 
     300              :       CALL keyword_create(keyword, __LOCATION__, name="KINDS_FROM", &
     301              :                           description="Specify alternatively kinds of atoms building the coordination variable.", &
     302              :                           usage="KINDS_FROM {CHAR} {CHAR} ..", repeats=.TRUE., &
     303         5848 :                           n_var=-1, type_of_var=char_t)
     304         5848 :       CALL section_add_keyword(section, keyword)
     305         5848 :       CALL keyword_release(keyword)
     306              : 
     307              :       CALL keyword_create(keyword, __LOCATION__, name="KINDS_TO", &
     308              :                           description="Specify alternatively kinds of atoms building the coordination variable.", &
     309              :                           usage="KINDS_TO {CHAR} {CHAR} ..", repeats=.TRUE., &
     310         5848 :                           n_var=-1, type_of_var=char_t)
     311         5848 :       CALL section_add_keyword(section, keyword)
     312         5848 :       CALL keyword_release(keyword)
     313              : 
     314              :       CALL keyword_create(keyword, __LOCATION__, name="KINDS_TO_B", &
     315              :                           description="For the CV given by the multiplication of two coorination numbers,"// &
     316              :                           " here specify alternatively kinds of atoms building the coordination variable.", &
     317              :                           usage="KINDS_TO_B {CHAR} {CHAR} ..", repeats=.TRUE., &
     318         5848 :                           n_var=-1, type_of_var=char_t)
     319         5848 :       CALL section_add_keyword(section, keyword)
     320         5848 :       CALL keyword_release(keyword)
     321              : 
     322              :       ! Must be present in each colvar and handled properly
     323         5848 :       CALL create_point_section(subsection)
     324         5848 :       CALL section_add_subsection(section, subsection)
     325         5848 :       CALL section_release(subsection)
     326              : 
     327              :       CALL keyword_create(keyword, __LOCATION__, name="R0", &
     328              :                           variants=["R_0"], &
     329              :                           description="Specify the R0 parameter in the coordination function.", &
     330              :                           usage="R0 {real}", default_r_val=3.0_dp, &
     331        11696 :                           unit_str="bohr", n_var=1)
     332         5848 :       CALL section_add_keyword(section, keyword)
     333         5848 :       CALL keyword_release(keyword)
     334              : 
     335              :       CALL keyword_create(keyword, __LOCATION__, name="NN", &
     336              :                           variants=["EXPON_NUMERATOR"], &
     337              :                           description="Sets the value of the numerator of the exponential factor"// &
     338              :                           " in the coordination FUNCTION.", &
     339              :                           usage="NN {integer}", default_i_val=6, &
     340        11696 :                           n_var=1)
     341         5848 :       CALL section_add_keyword(section, keyword)
     342         5848 :       CALL keyword_release(keyword)
     343              : 
     344              :       CALL keyword_create(keyword, __LOCATION__, name="ND", &
     345              :                           variants=["EXPON_DENOMINATOR"], &
     346              :                           description="Sets the value of the denominator of the exponential factor"// &
     347              :                           " in the coordination FUNCTION.", &
     348              :                           usage="ND {integer}", default_i_val=12, &
     349        11696 :                           n_var=1)
     350         5848 :       CALL section_add_keyword(section, keyword)
     351         5848 :       CALL keyword_release(keyword)
     352              : 
     353              :       CALL keyword_create(keyword, __LOCATION__, name="R0_B", &
     354              :                           variants=["R_0_B"], &
     355              :                           description="For the CV given by the multiplication of two coorination numbers,"// &
     356              :                           " specify the R0 parameter in the second coordination function.", &
     357              :                           usage="R0_B {real}", default_r_val=3.0_dp, &
     358        11696 :                           unit_str="bohr", n_var=1)
     359         5848 :       CALL section_add_keyword(section, keyword)
     360         5848 :       CALL keyword_release(keyword)
     361              : 
     362              :       CALL keyword_create(keyword, __LOCATION__, name="NN_B", &
     363              :                           variants=["EXPON_NUMERATOR_B"], &
     364              :                           description="For the CV given by the multiplication of two coorination numbers,"// &
     365              :                           " Sets the value of the numerator of the exponential factor"// &
     366              :                           " in the coordination FUNCTION.", &
     367              :                           usage="NN_B {integer}", default_i_val=6, &
     368        11696 :                           n_var=1)
     369         5848 :       CALL section_add_keyword(section, keyword)
     370         5848 :       CALL keyword_release(keyword)
     371              : 
     372              :       CALL keyword_create(keyword, __LOCATION__, name="ND_B", &
     373              :                           variants=["EXPON_DENOMINATOR_B"], &
     374              :                           description="For the CV given by the multiplication of two coorination numbers,"// &
     375              :                           " Sets the value of the denominator of the exponential factor"// &
     376              :                           " in the coordination FUNCTION.", &
     377              :                           usage="ND_B {integer}", default_i_val=12, &
     378        11696 :                           n_var=1)
     379         5848 :       CALL section_add_keyword(section, keyword)
     380         5848 :       CALL keyword_release(keyword)
     381              : 
     382         5848 :    END SUBROUTINE create_colvar_coord_section
     383              : 
     384              : ! **************************************************************************************************
     385              : !> \brief ...
     386              : !> \param section ...
     387              : ! **************************************************************************************************
     388         5848 :    SUBROUTINE create_colvar_cond_dist_section(section)
     389              :       TYPE(section_type), POINTER                        :: section
     390              : 
     391              :       TYPE(keyword_type), POINTER                        :: keyword
     392              :       TYPE(section_type), POINTER                        :: subsection
     393              : 
     394         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
     395              :       CALL section_create(section, __LOCATION__, name="CONDITIONED_DISTANCE", &
     396              :                           description="Section to define the conditioned distance as a collective variable.", &
     397         5848 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
     398              : 
     399         5848 :       NULLIFY (subsection, keyword)
     400              : 
     401              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS_DISTANCE", &
     402              :                           description="Specify indexes of atoms/points from which the distance is computed. ", &
     403              :                           usage="ATOMS_DISTANCE {integer} {integer} ..", repeats=.TRUE., &
     404         5848 :                           n_var=-1, type_of_var=integer_t)
     405         5848 :       CALL section_add_keyword(section, keyword)
     406         5848 :       CALL keyword_release(keyword)
     407              : 
     408              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS_FROM", &
     409              :                           variants=["POINTS_FROM"], &
     410              :                           description="Specify indexes of atoms/points building the coordination variable. ", &
     411              :                           usage="ATOMS_FROM {integer} {integer} ..", repeats=.TRUE., &
     412        11696 :                           n_var=-1, type_of_var=integer_t)
     413         5848 :       CALL section_add_keyword(section, keyword)
     414         5848 :       CALL keyword_release(keyword)
     415              : 
     416              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS_TO", &
     417              :                           variants=["POINTS_TO"], &
     418              :                           description="Specify indexes of atoms/points building the coordination variable. ", &
     419              :                           usage="ATOMS_TO {integer} {integer} ..", repeats=.TRUE., &
     420        11696 :                           n_var=-1, type_of_var=integer_t)
     421         5848 :       CALL section_add_keyword(section, keyword)
     422         5848 :       CALL keyword_release(keyword)
     423              : 
     424              :       CALL keyword_create(keyword, __LOCATION__, name="KINDS_FROM", &
     425              :                           description="Specify alternatively kinds of atoms building the coordination variable.", &
     426              :                           usage="KINDS_FROM {CHAR} {CHAR} ..", repeats=.TRUE., &
     427         5848 :                           n_var=-1, type_of_var=char_t)
     428         5848 :       CALL section_add_keyword(section, keyword)
     429         5848 :       CALL keyword_release(keyword)
     430              : 
     431              :       CALL keyword_create(keyword, __LOCATION__, name="KINDS_TO", &
     432              :                           description="Specify alternatively kinds of atoms building the coordination variable.", &
     433              :                           usage="KINDS_TO {CHAR} {CHAR} ..", repeats=.TRUE., &
     434         5848 :                           n_var=-1, type_of_var=char_t)
     435         5848 :       CALL section_add_keyword(section, keyword)
     436         5848 :       CALL keyword_release(keyword)
     437              : 
     438              :       ! Must be present in each colvar and handled properly
     439         5848 :       CALL create_point_section(subsection)
     440         5848 :       CALL section_add_subsection(section, subsection)
     441         5848 :       CALL section_release(subsection)
     442              : 
     443              :       CALL keyword_create(keyword, __LOCATION__, name="R0", &
     444              :                           variants=["R_0"], &
     445              :                           description="Specify the R0 parameter in the coordination function.", &
     446              :                           usage="R0 {real}", default_r_val=3.0_dp, &
     447        11696 :                           unit_str="bohr", n_var=1)
     448         5848 :       CALL section_add_keyword(section, keyword)
     449         5848 :       CALL keyword_release(keyword)
     450              : 
     451              :       CALL keyword_create(keyword, __LOCATION__, name="NN", &
     452              :                           variants=["EXPON_NUMERATOR"], &
     453              :                           description="Sets the value of the numerator of the exponential factor"// &
     454              :                           " in the coordination FUNCTION.", &
     455              :                           usage="NN {integer}", default_i_val=6, &
     456        11696 :                           n_var=1)
     457         5848 :       CALL section_add_keyword(section, keyword)
     458         5848 :       CALL keyword_release(keyword)
     459              : 
     460              :       CALL keyword_create(keyword, __LOCATION__, name="ND", &
     461              :                           variants=["EXPON_DENOMINATOR"], &
     462              :                           description="Sets the value of the denominator of the exponential factor"// &
     463              :                           " in the coordination FUNCTION.", &
     464              :                           usage="ND {integer}", default_i_val=12, &
     465        11696 :                           n_var=1)
     466         5848 :       CALL section_add_keyword(section, keyword)
     467         5848 :       CALL keyword_release(keyword)
     468              : 
     469              :       CALL keyword_create(keyword, __LOCATION__, name="LAMBDA", &
     470              :                           description="Specify the lambda parameter at the exponent of the conditioned distance function.", &
     471              :                           usage="LAMBDA {real}", default_r_val=3.0_dp, &
     472         5848 :                           unit_str="bohr", n_var=1)
     473         5848 :       CALL section_add_keyword(section, keyword)
     474         5848 :       CALL keyword_release(keyword)
     475              : 
     476         5848 :    END SUBROUTINE create_colvar_cond_dist_section
     477              : 
     478              : ! **************************************************************************************************
     479              : !> \brief collective variables specifying population of a specie based on coordination
     480              : !> \param section the section to be created
     481              : !> \date  01.2009
     482              : !> \author Fabio Sterpone
     483              : ! **************************************************************************************************
     484         5848 :    SUBROUTINE create_colvar_pop_section(section)
     485              :       TYPE(section_type), POINTER                        :: section
     486              : 
     487              :       TYPE(keyword_type), POINTER                        :: keyword
     488              :       TYPE(section_type), POINTER                        :: subsection
     489              : 
     490         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
     491              :       CALL section_create(section, __LOCATION__, name="population", &
     492              :                           description="Section to define the population of specie as a collective variable. "// &
     493              :                           "See also <https://doi.org/10.1021/jp3019588>.", &
     494         5848 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
     495              : 
     496         5848 :       NULLIFY (subsection, keyword)
     497              : 
     498              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS_FROM", &
     499              :                           variants=["POINTS_FROM"], &
     500              :                           description="Specify indexes of atoms/points building the coordination variable. ", &
     501              :                           usage="ATOMS_FROM {integer} {integer} ..", repeats=.TRUE., &
     502        11696 :                           n_var=-1, type_of_var=integer_t)
     503         5848 :       CALL section_add_keyword(section, keyword)
     504         5848 :       CALL keyword_release(keyword)
     505              : 
     506              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS_TO", &
     507              :                           variants=["POINTS_TO"], &
     508              :                           description="Specify indexes of atoms/points building the coordination variable. ", &
     509              :                           usage="ATOMS_TO {integer} {integer} ..", repeats=.TRUE., &
     510        11696 :                           n_var=-1, type_of_var=integer_t)
     511         5848 :       CALL section_add_keyword(section, keyword)
     512         5848 :       CALL keyword_release(keyword)
     513              : 
     514              :       CALL keyword_create(keyword, __LOCATION__, name="KINDS_FROM", &
     515              :                           description="Specify alternatively kinds of atoms building the coordination variable.", &
     516              :                           usage="KINDS_FROM {CHAR} {CHAR} ..", repeats=.TRUE., &
     517         5848 :                           n_var=-1, type_of_var=char_t)
     518         5848 :       CALL section_add_keyword(section, keyword)
     519         5848 :       CALL keyword_release(keyword)
     520              : 
     521              :       CALL keyword_create(keyword, __LOCATION__, name="KINDS_TO", &
     522              :                           description="Specify alternatively kinds of atoms building the coordination variable.", &
     523              :                           usage="KINDS_TO {CHAR} {CHAR} ..", repeats=.TRUE., &
     524         5848 :                           n_var=-1, type_of_var=char_t)
     525         5848 :       CALL section_add_keyword(section, keyword)
     526         5848 :       CALL keyword_release(keyword)
     527              : 
     528              :       ! Must be present in each colvar and handled properly
     529         5848 :       CALL create_point_section(subsection)
     530         5848 :       CALL section_add_subsection(section, subsection)
     531         5848 :       CALL section_release(subsection)
     532              : 
     533              :       CALL keyword_create(keyword, __LOCATION__, name="R0", &
     534              :                           variants=["R_0"], &
     535              :                           description="Specify the R0 parameter in the coordination function.", &
     536              :                           usage="R0 {real}", default_r_val=3.0_dp, &
     537        11696 :                           n_var=1)
     538         5848 :       CALL section_add_keyword(section, keyword)
     539         5848 :       CALL keyword_release(keyword)
     540              : 
     541              :       CALL keyword_create(keyword, __LOCATION__, name="NN", &
     542              :                           variants=["EXPON_NUMERATOR"], &
     543              :                           description="Sets the value of the numerator of the exponential factor"// &
     544              :                           " in the coordination FUNCTION.", &
     545              :                           usage="NN {integer}", default_i_val=6, &
     546        11696 :                           n_var=1)
     547         5848 :       CALL section_add_keyword(section, keyword)
     548         5848 :       CALL keyword_release(keyword)
     549              : 
     550              :       CALL keyword_create(keyword, __LOCATION__, name="ND", &
     551              :                           variants=["EXPON_DENOMINATOR"], &
     552              :                           description="Sets the value of the denominator of the exponential factor"// &
     553              :                           " in the coordination FUNCTION.", &
     554              :                           usage="ND {integer}", default_i_val=12, &
     555        11696 :                           n_var=1)
     556         5848 :       CALL section_add_keyword(section, keyword)
     557         5848 :       CALL keyword_release(keyword)
     558              : 
     559              :       CALL keyword_create(keyword, __LOCATION__, name="n0", &
     560              :                           variants=["n_0"], &
     561              :                           description="Specify the n0 parameter that sets the coordination of the species.", &
     562              :                           usage="n0 {integer}", default_i_val=4, &
     563        11696 :                           n_var=1)
     564         5848 :       CALL section_add_keyword(section, keyword)
     565         5848 :       CALL keyword_release(keyword)
     566              : 
     567              :       CALL keyword_create(keyword, __LOCATION__, name="SIGMA", &
     568              :                           description="Specify the gaussian width of used to build the population istogram.", &
     569              :                           usage="SIGMA {real}", default_r_val=0.5_dp, &
     570         5848 :                           n_var=1)
     571         5848 :       CALL section_add_keyword(section, keyword)
     572         5848 :       CALL keyword_release(keyword)
     573              : 
     574         5848 :    END SUBROUTINE create_colvar_pop_section
     575              : 
     576              : ! **************************************************************************************************
     577              : !> \brief ...
     578              : !> \param section ...
     579              : ! **************************************************************************************************
     580         5848 :    SUBROUTINE create_colvar_gyr_section(section)
     581              :       TYPE(section_type), POINTER                        :: section
     582              : 
     583              :       TYPE(keyword_type), POINTER                        :: keyword
     584              :       TYPE(section_type), POINTER                        :: subsection
     585              : 
     586         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
     587              :       CALL section_create(section, __LOCATION__, name="GYRATION_RADIUS", &
     588              :                           description="Section to define the gyration radius as a collective variable.", &
     589         5848 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
     590              : 
     591         5848 :       NULLIFY (subsection, keyword)
     592              : 
     593              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
     594              :                           variants=["POINTS"], &
     595              :                           description="Specify indexes of atoms/points defyining the gyration radius variable. ", &
     596              :                           usage="ATOMS {integer} {integer} ..", repeats=.TRUE., &
     597        11696 :                           n_var=-1, type_of_var=integer_t)
     598         5848 :       CALL section_add_keyword(section, keyword)
     599         5848 :       CALL keyword_release(keyword)
     600              : 
     601              :       CALL keyword_create(keyword, __LOCATION__, name="KINDS", &
     602              :                           description="Specify alternatively kinds of atoms defining the gyration radius.", &
     603              :                           usage="KINDS {CHAR} {CHAR} ..", repeats=.TRUE., &
     604         5848 :                           n_var=-1, type_of_var=char_t)
     605         5848 :       CALL section_add_keyword(section, keyword)
     606         5848 :       CALL keyword_release(keyword)
     607              : 
     608              :       ! Must be present in each colvar and handled properly
     609         5848 :       CALL create_point_section(subsection)
     610         5848 :       CALL section_add_subsection(section, subsection)
     611         5848 :       CALL section_release(subsection)
     612              : 
     613         5848 :    END SUBROUTINE create_colvar_gyr_section
     614              : 
     615              : ! **************************************************************************************************
     616              : !> \brief collective variables specifying torsion
     617              : !> \param section the section to be created
     618              : !> \author teo
     619              : ! **************************************************************************************************
     620         5848 :    SUBROUTINE create_colvar_dfunct_section(section)
     621              :       TYPE(section_type), POINTER                        :: section
     622              : 
     623              :       TYPE(keyword_type), POINTER                        :: keyword
     624              :       TYPE(section_type), POINTER                        :: subsection
     625              : 
     626         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
     627              :       CALL section_create(section, __LOCATION__, name="DISTANCE_FUNCTION", &
     628              :                           description="Section to define functions between two distances as collective variables."// &
     629              :                           " The function is defined as d1+coeff*d2", &
     630         5848 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
     631              : 
     632         5848 :       NULLIFY (keyword, subsection)
     633              : 
     634              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
     635              :                           variants=["POINTS"], &
     636              :                           description="Specifies the indexes of atoms/points for the two bonds d1=(1-2) d2=(3-4).", &
     637              :                           usage="ATOMS {integer} {integer} {integer} {integer}", &
     638        11696 :                           n_var=4, type_of_var=integer_t)
     639         5848 :       CALL section_add_keyword(section, keyword)
     640         5848 :       CALL keyword_release(keyword)
     641              : 
     642              :       CALL keyword_create(keyword, __LOCATION__, name="COEFFICIENT", &
     643              :                           description="Specifies the coefficient in the function for the constraint."// &
     644              :                           " -1.0 has to be used for distance difference, 1.0 for distance addition", &
     645              :                           usage="COEFFICIENT {real}", &
     646         5848 :                           type_of_var=real_t)
     647         5848 :       CALL section_add_keyword(section, keyword)
     648         5848 :       CALL keyword_release(keyword)
     649              : 
     650              :       CALL keyword_create(keyword, __LOCATION__, name="PBC", &
     651              :                           description="Whether periodic boundary conditions should be applied on the "// &
     652              :                           "atomic position before computing the colvar or not.", &
     653              :                           usage="PBC", &
     654         5848 :                           default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
     655         5848 :       CALL section_add_keyword(section, keyword)
     656         5848 :       CALL keyword_release(keyword)
     657              : 
     658              :       ! Must be present in each colvar and handled properly
     659         5848 :       CALL create_point_section(subsection)
     660         5848 :       CALL section_add_subsection(section, subsection)
     661         5848 :       CALL section_release(subsection)
     662              : 
     663         5848 :    END SUBROUTINE create_colvar_dfunct_section
     664              : 
     665              : ! **************************************************************************************************
     666              : !> \brief collective variables specifying torsion
     667              : !> \param section the section to be created
     668              : !> \author teo
     669              : ! **************************************************************************************************
     670         5848 :    SUBROUTINE create_colvar_torsion_section(section)
     671              :       TYPE(section_type), POINTER                        :: section
     672              : 
     673              :       TYPE(keyword_type), POINTER                        :: keyword
     674              :       TYPE(section_type), POINTER                        :: subsection
     675              : 
     676         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
     677              :       CALL section_create(section, __LOCATION__, name="torsion", &
     678              :                           description="Section to define the torsion as a collective variables.", &
     679         5848 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
     680              : 
     681         5848 :       NULLIFY (keyword, subsection)
     682              : 
     683              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
     684              :                           variants=["POINTS"], &
     685              :                           description="Specifies the indexes of atoms/points defining the torsion.", &
     686              :                           usage="ATOMS {integer} {integer} {integer} {integer}", &
     687        11696 :                           n_var=4, type_of_var=integer_t)
     688         5848 :       CALL section_add_keyword(section, keyword)
     689         5848 :       CALL keyword_release(keyword)
     690              : 
     691              :       ! Must be present in each colvar and handled properly
     692         5848 :       CALL create_point_section(subsection)
     693         5848 :       CALL section_add_subsection(section, subsection)
     694         5848 :       CALL section_release(subsection)
     695              : 
     696         5848 :    END SUBROUTINE create_colvar_torsion_section
     697              : 
     698              : ! **************************************************************************************************
     699              : !> \brief collective variables specifying torsion
     700              : !> \param section the section to be created
     701              : !> \author teo
     702              : ! **************************************************************************************************
     703         5848 :    SUBROUTINE create_colvar_rot_section(section)
     704              :       TYPE(section_type), POINTER                        :: section
     705              : 
     706              :       TYPE(keyword_type), POINTER                        :: keyword
     707              :       TYPE(section_type), POINTER                        :: subsection
     708              : 
     709         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
     710              :       CALL section_create(section, __LOCATION__, name="bond_rotation", &
     711              :                           description="Section to define the rotation of a bond/line with respect to"// &
     712              :                           " another bond/line", &
     713         5848 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
     714              : 
     715         5848 :       NULLIFY (keyword, subsection)
     716              : 
     717              :       CALL keyword_create(keyword, __LOCATION__, name="P1_BOND1", &
     718              :                           description="Specifies the index of atom/point defining the first point"// &
     719              :                           " of the first bond/line.", &
     720              :                           usage="P1_BOND1 {integer}", &
     721         5848 :                           n_var=1, type_of_var=integer_t)
     722         5848 :       CALL section_add_keyword(section, keyword)
     723         5848 :       CALL keyword_release(keyword)
     724              : 
     725              :       CALL keyword_create(keyword, __LOCATION__, name="P2_BOND1", &
     726              :                           description="Specifies the index of atom/point defining the second point"// &
     727              :                           " of the first bond/line.", &
     728              :                           usage="P2_BOND1 {integer}", &
     729         5848 :                           n_var=1, type_of_var=integer_t)
     730         5848 :       CALL section_add_keyword(section, keyword)
     731         5848 :       CALL keyword_release(keyword)
     732              : 
     733              :       CALL keyword_create(keyword, __LOCATION__, name="P1_BOND2", &
     734              :                           description="Specifies the index of atom/point defining the first point"// &
     735              :                           " of the second bond/line.", &
     736              :                           usage="P1_BOND2 {integer}", &
     737         5848 :                           n_var=1, type_of_var=integer_t)
     738         5848 :       CALL section_add_keyword(section, keyword)
     739         5848 :       CALL keyword_release(keyword)
     740              : 
     741              :       CALL keyword_create(keyword, __LOCATION__, name="P2_BOND2", &
     742              :                           description="Specifies the index of atom/point defining the second point"// &
     743              :                           " of the second bond/line.", &
     744              :                           usage="P2_BOND2 {integer}", &
     745         5848 :                           n_var=1, type_of_var=integer_t)
     746         5848 :       CALL section_add_keyword(section, keyword)
     747         5848 :       CALL keyword_release(keyword)
     748              : 
     749              :       ! Must be present in each colvar and handled properly
     750         5848 :       CALL create_point_section(subsection)
     751         5848 :       CALL section_add_subsection(section, subsection)
     752         5848 :       CALL section_release(subsection)
     753              : 
     754         5848 :    END SUBROUTINE create_colvar_rot_section
     755              : 
     756              : ! **************************************************************************************************
     757              : !> \brief collective variables specifying angles
     758              : !> \param section the section to be created
     759              : !> \author teo
     760              : ! **************************************************************************************************
     761         5848 :    SUBROUTINE create_colvar_angle_section(section)
     762              :       TYPE(section_type), POINTER                        :: section
     763              : 
     764              :       TYPE(keyword_type), POINTER                        :: keyword
     765              :       TYPE(section_type), POINTER                        :: subsection
     766              : 
     767         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
     768              :       CALL section_create(section, __LOCATION__, name="angle", &
     769              :                           description="Section to define the angle as a collective variables.", &
     770         5848 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
     771         5848 :       NULLIFY (keyword, subsection)
     772              : 
     773              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
     774              :                           variants=["POINTS"], &
     775              :                           description="Specifies the indexes of atoms/points defining the angle.", &
     776              :                           usage="ATOMS {integer} {integer} {integer}", &
     777        11696 :                           n_var=3, type_of_var=integer_t)
     778         5848 :       CALL section_add_keyword(section, keyword)
     779         5848 :       CALL keyword_release(keyword)
     780              : 
     781              :       ! Must be present in each colvar and handled properly
     782         5848 :       CALL create_point_section(subsection)
     783         5848 :       CALL section_add_subsection(section, subsection)
     784         5848 :       CALL section_release(subsection)
     785              : 
     786         5848 :    END SUBROUTINE create_colvar_angle_section
     787              : 
     788              : ! **************************************************************************************************
     789              : !> \brief creates the colvar section regarded to the collective variables dist
     790              : !> \param section the section to be created
     791              : !> \author teo
     792              : ! **************************************************************************************************
     793         5848 :    SUBROUTINE create_colvar_dist_section(section)
     794              :       TYPE(section_type), POINTER                        :: section
     795              : 
     796              :       TYPE(keyword_type), POINTER                        :: keyword
     797              :       TYPE(section_type), POINTER                        :: subsection
     798              : 
     799         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
     800              :       CALL section_create(section, __LOCATION__, name="distance", &
     801              :                           description="Section to define the distance as a collective variables.", &
     802         5848 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
     803         5848 :       NULLIFY (keyword, subsection)
     804              : 
     805              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
     806              :                           variants=["POINTS"], &
     807              :                           description="Specifies the indexes of atoms/points defining the distance.", &
     808              :                           usage="ATOMS {integer} {integer}", &
     809        11696 :                           n_var=2, type_of_var=integer_t)
     810         5848 :       CALL section_add_keyword(section, keyword)
     811         5848 :       CALL keyword_release(keyword)
     812              :       CALL keyword_create(keyword, __LOCATION__, name="AXIS", &
     813              :                           description="Define the axes along which the colvar should be evaluated", &
     814              :                           usage="AXIS (XYZ | X | Y | Z | XY| XZ | YZ)", &
     815              :                           enum_c_vals=s2a("XYZ", "X", "Y", "Z", "XY", "XZ", "YZ"), &
     816              :                           enum_i_vals=[do_clv_xyz, do_clv_x, do_clv_y, do_clv_z, do_clv_xy, do_clv_xz, do_clv_yz], &
     817         5848 :                           default_i_val=do_clv_xyz)
     818         5848 :       CALL section_add_keyword(section, keyword)
     819         5848 :       CALL keyword_release(keyword)
     820              : 
     821              :       CALL keyword_create(keyword, __LOCATION__, name="SIGN", &
     822              :                           description="Whether the distance along one Cartesian axis has to be considered with sign."// &
     823              :                           " This option is valid if only one dimension is selected.", &
     824              :                           usage="SIGN", &
     825         5848 :                           default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
     826         5848 :       CALL section_add_keyword(section, keyword)
     827         5848 :       CALL keyword_release(keyword)
     828              : 
     829              :       ! Must be present in each colvar and handled properly
     830         5848 :       CALL create_point_section(subsection)
     831         5848 :       CALL section_add_subsection(section, subsection)
     832         5848 :       CALL section_release(subsection)
     833              : 
     834         5848 :    END SUBROUTINE create_colvar_dist_section
     835              : 
     836              : ! **************************************************************************************************
     837              : !> \brief creates the colvar section regarded to the collective variables dist
     838              : !> \param section the section to be created
     839              : !> \author teo
     840              : ! **************************************************************************************************
     841         5851 :    SUBROUTINE create_colvar_xyz_d_section(section)
     842              :       TYPE(section_type), POINTER                        :: section
     843              : 
     844              :       TYPE(keyword_type), POINTER                        :: keyword
     845              :       TYPE(section_type), POINTER                        :: subsection
     846              : 
     847         5851 :       CPASSERT(.NOT. ASSOCIATED(section))
     848              :       CALL section_create(section, __LOCATION__, name="XYZ_DIAG", &
     849              :                           description="Section to define the distance of an atom from its starting "// &
     850              :                           "position ((X-X(0))^2+(Y-Y(0))^2+(Z-Z(0))^2) or part of its components as a collective variable. "// &
     851              :                           "If absolute_position is specified, instead the CV is represented by the "// &
     852              :                           "instantaneous position of the atom (only available for X, Y or Z components).", &
     853         5851 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
     854         5851 :       NULLIFY (keyword, subsection)
     855              : 
     856              :       CALL keyword_create(keyword, __LOCATION__, name="ATOM", &
     857              :                           variants=["POINT"], &
     858              :                           description="Specifies the index of the atom/point.", &
     859              :                           usage="ATOM {integer}", &
     860        11702 :                           n_var=1, type_of_var=integer_t)
     861         5851 :       CALL section_add_keyword(section, keyword)
     862         5851 :       CALL keyword_release(keyword)
     863              : 
     864              :       CALL keyword_create(keyword, __LOCATION__, name="COMPONENT", &
     865              :                           description="Define the component of the position vector which will be used "// &
     866              :                           "as a colvar.", &
     867              :                           usage="COMPONENT (XYZ | X | Y | Z | XY| XZ | YZ)", &
     868              :                           enum_c_vals=s2a("XYZ", "X", "Y", "Z", "XY", "XZ", "YZ"), &
     869              :                           enum_i_vals=[do_clv_xyz, do_clv_x, do_clv_y, do_clv_z, do_clv_xy, do_clv_xz, do_clv_yz], &
     870         5851 :                           default_i_val=do_clv_xyz)
     871         5851 :       CALL section_add_keyword(section, keyword)
     872         5851 :       CALL keyword_release(keyword)
     873              : 
     874              :       CALL keyword_create(keyword, __LOCATION__, name="PBC", &
     875              :                           description="Whether periodic boundary conditions should be applied on the "// &
     876              :                           "atomic position before computing the colvar or not.", &
     877              :                           usage="PBC", &
     878         5851 :                           default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
     879         5851 :       CALL section_add_keyword(section, keyword)
     880         5851 :       CALL keyword_release(keyword)
     881              : 
     882              :       CALL keyword_create(keyword, __LOCATION__, name="ABSOLUTE_POSITION", &
     883              :                           description="If enabled, the absolute position of the atoms will be used. ", &
     884              :                           usage="ABSOLUTE_POSITION", &
     885         5851 :                           default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
     886         5851 :       CALL section_add_keyword(section, keyword)
     887         5851 :       CALL keyword_release(keyword)
     888              : 
     889              :       ! Must be present in each colvar and handled properly
     890         5851 :       CALL create_point_section(subsection)
     891         5851 :       CALL section_add_subsection(section, subsection)
     892         5851 :       CALL section_release(subsection)
     893              : 
     894         5851 :    END SUBROUTINE create_colvar_xyz_d_section
     895              : 
     896              : ! **************************************************************************************************
     897              : !> \brief creates the colvar section regarded to the collective variables dist
     898              : !> \param section the section to be created
     899              : !> \author teo
     900              : ! **************************************************************************************************
     901         5851 :    SUBROUTINE create_colvar_xyz_od_section(section)
     902              :       TYPE(section_type), POINTER                        :: section
     903              : 
     904              :       TYPE(keyword_type), POINTER                        :: keyword
     905              :       TYPE(section_type), POINTER                        :: subsection
     906              : 
     907         5851 :       CPASSERT(.NOT. ASSOCIATED(section))
     908              :       CALL section_create(section, __LOCATION__, name="XYZ_OUTERDIAG", &
     909              :                           description="Section to define the cross term (XA-XA(0))*(XB-XB(0))+(XA-XA(0))*(YB-YB(0))"// &
     910              :                           " or part of its components as a collective variable. The final term is given by the product"// &
     911              :                           " of the components of A with the components of B.", &
     912         5851 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
     913         5851 :       NULLIFY (keyword, subsection)
     914              : 
     915              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
     916              :                           variants=["POINTS"], &
     917              :                           description="Specifies the index of the atoms/points A and B.", &
     918              :                           usage="ATOMS {integer} {integer}", &
     919        11702 :                           n_var=2, type_of_var=integer_t)
     920         5851 :       CALL section_add_keyword(section, keyword)
     921         5851 :       CALL keyword_release(keyword)
     922              : 
     923              :       CALL keyword_create(keyword, __LOCATION__, name="COMPONENT_A", &
     924              :                           description="Define the component of the position vector which will be used "// &
     925              :                           "as a colvar for atom A.", &
     926              :                           usage="COMPONENT_A (XYZ | X | Y | Z | XY| XZ | YZ)", &
     927              :                           enum_c_vals=s2a("XYZ", "X", "Y", "Z", "XY", "XZ", "YZ"), &
     928              :                           enum_i_vals=[do_clv_xyz, do_clv_x, do_clv_y, do_clv_z, do_clv_xy, do_clv_xz, do_clv_yz], &
     929         5851 :                           default_i_val=do_clv_xyz)
     930         5851 :       CALL section_add_keyword(section, keyword)
     931         5851 :       CALL keyword_release(keyword)
     932              : 
     933              :       CALL keyword_create(keyword, __LOCATION__, name="COMPONENT_B", &
     934              :                           description="Define the component of the position vector which will be used "// &
     935              :                           "as a colvar for atom B.", &
     936              :                           usage="COMPONENT_B (XYZ | X | Y | Z | XY| XZ | YZ)", &
     937              :                           enum_c_vals=s2a("XYZ", "X", "Y", "Z", "XY", "XZ", "YZ"), &
     938              :                           enum_i_vals=[do_clv_xyz, do_clv_x, do_clv_y, do_clv_z, do_clv_xy, do_clv_xz, do_clv_yz], &
     939         5851 :                           default_i_val=do_clv_xyz)
     940         5851 :       CALL section_add_keyword(section, keyword)
     941         5851 :       CALL keyword_release(keyword)
     942              : 
     943              :       CALL keyword_create(keyword, __LOCATION__, name="PBC", &
     944              :                           description="Whether periodic boundary conditions should be applied on the "// &
     945              :                           "atomic position before computing the colvar or not.", &
     946              :                           usage="PBC", &
     947         5851 :                           default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
     948         5851 :       CALL section_add_keyword(section, keyword)
     949         5851 :       CALL keyword_release(keyword)
     950              : 
     951              :       ! Must be present in each colvar and handled properly
     952         5851 :       CALL create_point_section(subsection)
     953         5851 :       CALL section_add_subsection(section, subsection)
     954         5851 :       CALL section_release(subsection)
     955              : 
     956         5851 :    END SUBROUTINE create_colvar_xyz_od_section
     957              : 
     958              : ! **************************************************************************************************
     959              : !> \brief energy as collective variable
     960              : !> \param section the section to be created
     961              : !> \author Sebastiano Caravati
     962              : ! **************************************************************************************************
     963         5848 :    SUBROUTINE create_colvar_u_section(section)
     964              :       TYPE(section_type), POINTER                        :: section
     965              : 
     966              :       TYPE(section_type), POINTER                        :: subsection
     967              : 
     968         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
     969              :       CALL section_create(section, __LOCATION__, name="u", &
     970              :                           description="Section to define the energy as a generalized collective variable.", &
     971         5848 :                           n_keywords=0, n_subsections=0, repeats=.FALSE.)
     972              : 
     973         5848 :       NULLIFY (subsection)
     974              :       CALL create_function_section(subsection, "MIXED", "ENERGY_FUNCTION", &
     975              :                                    description="This section allows to use any function of the energy subsystems "// &
     976              :                                    "in a mixed_env calculation as a collective variable. Same as the section "// &
     977              :                                    "FORCE_EVAL/MIXED/GENERIC, to allow an efficient mapping the order of the "// &
     978              :                                    "energy variables will be considered identical to the order of the force_eval "// &
     979         5848 :                                    "in the MULTIPLE_FORCE_EVALS/FORCE_EVAL_ORDER list.", do_deriv=.TRUE.)
     980         5848 :       CALL section_add_subsection(section, subsection)
     981         5848 :       CALL section_release(subsection)
     982              : 
     983         5848 :    END SUBROUTINE create_colvar_u_section
     984              : 
     985              : ! **************************************************************************************************
     986              : !> \brief creates the colvar section regarded to the collective variables distance
     987              : !>      of a point from a plane
     988              : !> \param section the section to be created
     989              : !> \author teo
     990              : ! **************************************************************************************************
     991         5848 :    SUBROUTINE create_colvar_d_pl_section(section)
     992              :       TYPE(section_type), POINTER                        :: section
     993              : 
     994              :       TYPE(keyword_type), POINTER                        :: keyword
     995              :       TYPE(section_type), POINTER                        :: subsection
     996              : 
     997         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
     998              :       CALL section_create(section, __LOCATION__, name="distance_point_plane", &
     999              :                           description="Section to define the distance of a point from a plane "// &
    1000              :                           "as a collective variables.", &
    1001         5848 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
    1002         5848 :       NULLIFY (keyword, subsection)
    1003              : 
    1004              :       CALL keyword_create(keyword, __LOCATION__, name="PBC", &
    1005              :                           description="Whether periodic boundary conditions should be applied on the "// &
    1006              :                           "atomic position before computing the colvar or not.", &
    1007              :                           usage="PBC", &
    1008         5848 :                           default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
    1009         5848 :       CALL section_add_keyword(section, keyword)
    1010         5848 :       CALL keyword_release(keyword)
    1011              : 
    1012              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS_PLANE", &
    1013              :                           variants=["POINTS_PLANE"], &
    1014              :                           description="Specifies the indexes of atoms/points defining the plane.", &
    1015              :                           usage="ATOMS_PLANE <INTEGER> <INTEGER> <INTEGER>", &
    1016        11696 :                           n_var=3, type_of_var=integer_t)
    1017         5848 :       CALL section_add_keyword(section, keyword)
    1018         5848 :       CALL keyword_release(keyword)
    1019              : 
    1020              :       CALL keyword_create(keyword, __LOCATION__, name="ATOM_POINT", &
    1021              :                           variants=["POINT_POINT"], &
    1022              :                           description="Specifies the atom/point index defining the point.", &
    1023              :                           usage="ATOM_POINT <INTEGER>", &
    1024        11696 :                           n_var=1, type_of_var=integer_t)
    1025         5848 :       CALL section_add_keyword(section, keyword)
    1026         5848 :       CALL keyword_release(keyword)
    1027              : 
    1028              :       ! Must be present in each colvar and handled properly
    1029         5848 :       CALL create_point_section(subsection)
    1030         5848 :       CALL section_add_subsection(section, subsection)
    1031         5848 :       CALL section_release(subsection)
    1032              : 
    1033         5848 :    END SUBROUTINE create_colvar_d_pl_section
    1034              : 
    1035              : ! **************************************************************************************************
    1036              : !> \brief creates the colvar section regarded to the collective variables
    1037              : !>      angles betweem two planes
    1038              : !> \param section the section to be created
    1039              : !> \author teo
    1040              : ! **************************************************************************************************
    1041         5848 :    SUBROUTINE create_colvar_a_pl_section(section)
    1042              :       TYPE(section_type), POINTER                        :: section
    1043              : 
    1044              :       TYPE(keyword_type), POINTER                        :: keyword
    1045              :       TYPE(section_type), POINTER                        :: subsection
    1046              : 
    1047         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
    1048              :       CALL section_create(section, __LOCATION__, name="angle_plane_plane", &
    1049              :                           description="This section defines the angle between two planes "// &
    1050              :                           "as a collective variables.", &
    1051         5848 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
    1052         5848 :       NULLIFY (keyword, subsection)
    1053              : 
    1054              :       CALL section_create(subsection, __LOCATION__, name="PLANE", &
    1055              :                           description="This section defines the plane. When using this colvar, "// &
    1056              :                           "two plane section must be defined!", &
    1057         5848 :                           n_keywords=1, n_subsections=0, repeats=.TRUE.)
    1058              : 
    1059              :       CALL keyword_create(keyword, __LOCATION__, name="DEF_TYPE", &
    1060              :                           description="Specify how the plane is defined: either by 3 atoms or by a fixed normal "// &
    1061              :                           "vector. At least one plane must be defined through atoms.", &
    1062              :                           usage="DEF_TYPE ATOMS", &
    1063              :                           default_i_val=plane_def_atoms, &
    1064              :                           enum_c_vals=s2a("ATOMS", "VECTOR"), &
    1065              :                           enum_desc=s2a("Plane defined by the position of 3 atoms", &
    1066              :                                         "Plane defined by a fixed normal vector"), &
    1067         5848 :                           enum_i_vals=[plane_def_atoms, plane_def_vec])
    1068         5848 :       CALL section_add_keyword(subsection, keyword)
    1069         5848 :       CALL keyword_release(keyword)
    1070              : 
    1071              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
    1072              :                           description="Specifies the indexes of 3 atoms/points defining the plane.", &
    1073              :                           usage="ATOMS <INTEGER> <INTEGER> <INTEGER>", &
    1074         5848 :                           n_var=3, type_of_var=integer_t)
    1075         5848 :       CALL section_add_keyword(subsection, keyword)
    1076         5848 :       CALL keyword_release(keyword)
    1077              : 
    1078              :       CALL keyword_create(keyword, __LOCATION__, name="NORMAL_VECTOR", &
    1079              :                           description="Alternatively to 3 atoms/points one can define one of the two, "// &
    1080              :                           "planes by defining its NORMAL vector.", &
    1081              :                           usage="NORMAL_VECTOR 0.0 1.0 0.0", &
    1082         5848 :                           n_var=3, type_of_var=real_t)
    1083         5848 :       CALL section_add_keyword(subsection, keyword)
    1084         5848 :       CALL keyword_release(keyword)
    1085         5848 :       CALL section_add_subsection(section, subsection)
    1086         5848 :       CALL section_release(subsection)
    1087              : 
    1088              :       ! Must be present in each colvar and handled properly
    1089         5848 :       CALL create_point_section(subsection)
    1090         5848 :       CALL section_add_subsection(section, subsection)
    1091         5848 :       CALL section_release(subsection)
    1092         5848 :    END SUBROUTINE create_colvar_a_pl_section
    1093              : 
    1094              : ! **************************************************************************************************
    1095              : !> \brief create a geometrical point as a function of several atom coordinates
    1096              : !> \param section the section to be created
    1097              : !> \author teo
    1098              : ! **************************************************************************************************
    1099        99422 :    SUBROUTINE create_point_section(section)
    1100              :       TYPE(section_type), POINTER                        :: section
    1101              : 
    1102              :       TYPE(keyword_type), POINTER                        :: keyword
    1103              : 
    1104        99422 :       CPASSERT(.NOT. ASSOCIATED(section))
    1105              :       CALL section_create(section, __LOCATION__, name="POINT", &
    1106              :                           description="Enables the possibility to use geometrical centers instead of single atoms"// &
    1107              :                           " to define colvars", &
    1108        99422 :                           n_keywords=1, n_subsections=0, repeats=.TRUE.)
    1109              : 
    1110        99422 :       NULLIFY (keyword)
    1111              : 
    1112              :       CALL keyword_create(keyword, __LOCATION__, name="TYPE", &
    1113              :                           description="Chooses the type of geometrical point", &
    1114              :                           usage="type (GEO_CENTER|FIX_POINT)", &
    1115              :                           enum_c_vals=s2a("GEO_CENTER", "FIX_POINT"), &
    1116              :                           enum_desc=s2a("Computes the geometrical center of the listed atoms", &
    1117              :                                         "Defines a fixed point in space"), &
    1118              :                           enum_i_vals=[do_clv_geo_center, do_clv_fix_point], &
    1119        99422 :                           default_i_val=do_clv_geo_center)
    1120        99422 :       CALL section_add_keyword(section, keyword)
    1121        99422 :       CALL keyword_release(keyword)
    1122              : 
    1123              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
    1124              :                           description="Specifies the indexes of atoms defining the geometrical center", &
    1125              :                           usage="ATOMS {integer} {integer} {integer} {integer}", &
    1126        99422 :                           n_var=-1, type_of_var=integer_t, repeats=.TRUE.)
    1127        99422 :       CALL section_add_keyword(section, keyword)
    1128        99422 :       CALL keyword_release(keyword)
    1129              : 
    1130              :       CALL keyword_create( &
    1131              :          keyword, __LOCATION__, name="WEIGHTS", &
    1132              :          description="Specifies the weights for a weighted geometrical center. Default is 1/natoms for every atom", &
    1133              :          usage="WEIGHTS {real} {real} {real} {real}", &
    1134        99422 :          n_var=-1, type_of_var=real_t, repeats=.TRUE.)
    1135        99422 :       CALL section_add_keyword(section, keyword)
    1136        99422 :       CALL keyword_release(keyword)
    1137              : 
    1138              :       CALL keyword_create(keyword, __LOCATION__, name="XYZ", &
    1139              :                           description="Specifies the xyz of the fixed point (if the case)", &
    1140              :                           usage="XYZ {real} {real} {real}", &
    1141              :                           n_var=3, type_of_var=real_t, unit_str="bohr", &
    1142        99422 :                           repeats=.FALSE.)
    1143        99422 :       CALL section_add_keyword(section, keyword)
    1144        99422 :       CALL keyword_release(keyword)
    1145              : 
    1146        99422 :    END SUBROUTINE create_point_section
    1147              : 
    1148              : ! **************************************************************************************************
    1149              : !> \brief collective variables specifying torsion
    1150              : !> \param section the section to be created
    1151              : !> \author teo
    1152              : ! **************************************************************************************************
    1153         5848 :    SUBROUTINE create_colvar_qparm_section(section)
    1154              :       TYPE(section_type), POINTER                        :: section
    1155              : 
    1156              :       TYPE(keyword_type), POINTER                        :: keyword
    1157              :       TYPE(section_type), POINTER                        :: subsection
    1158              : 
    1159         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
    1160              :       CALL section_create(section, __LOCATION__, name="qparm", &
    1161              :                           description="Section to define the Q parameter (crystalline order parameter) as a collective variable.", &
    1162         5848 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
    1163              : 
    1164         5848 :       NULLIFY (keyword, subsection)
    1165              : 
    1166              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS_FROM", &
    1167              :                           variants=["POINTS_FROM"], &
    1168              :                           description="Specify indexes of atoms/points building the coordination variable. ", &
    1169              :                           usage="ATOMS_FROM {integer} {integer} ..", repeats=.TRUE., &
    1170        11696 :                           n_var=-1, type_of_var=integer_t)
    1171         5848 :       CALL section_add_keyword(section, keyword)
    1172         5848 :       CALL keyword_release(keyword)
    1173              : 
    1174              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS_TO", &
    1175              :                           variants=["POINTS_TO"], &
    1176              :                           description="Specify indexes of atoms/points building the coordination variable. ", &
    1177              :                           usage="ATOMS_TO {integer} {integer} ..", repeats=.TRUE., &
    1178        11696 :                           n_var=-1, type_of_var=integer_t)
    1179         5848 :       CALL section_add_keyword(section, keyword)
    1180         5848 :       CALL keyword_release(keyword)
    1181              : 
    1182              :       CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
    1183              :                           description="Specifies the distance cutoff for neighbors. "// &
    1184              :                           "Cutoff function is exactly zero for all neighbors beyond RCUT.", &
    1185              :                           usage="RCUT {real}", &
    1186         5848 :                           n_var=1, unit_str="angstrom", type_of_var=real_t)
    1187         5848 :       CALL section_add_keyword(section, keyword)
    1188         5848 :       CALL keyword_release(keyword)
    1189              : 
    1190              :       CALL keyword_create(keyword, __LOCATION__, name="INCLUDE_IMAGES", &
    1191              :                           description="Whether to include periodic images of ATOMS_TO into the neighbor list.", &
    1192              :                           usage="INCLUDE_IMAGES", &
    1193         5848 :                           default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
    1194         5848 :       CALL section_add_keyword(section, keyword)
    1195         5848 :       CALL keyword_release(keyword)
    1196              : 
    1197              :       CALL keyword_create(keyword, __LOCATION__, name="RSTART", &
    1198              :                           description="Specifies the distance cutoff for neighbors. "// &
    1199              :                           "Cutoff function is exactly 1 for all neighbors closer than RSTART.", &
    1200              :                           usage="RSTART {real}", &
    1201         5848 :                           n_var=1, unit_str="angstrom", type_of_var=real_t)
    1202         5848 :       CALL section_add_keyword(section, keyword)
    1203         5848 :       CALL keyword_release(keyword)
    1204              : 
    1205              :       CALL keyword_create(keyword, __LOCATION__, name="L", &
    1206              :                           description="Specifies the L spherical harmonics from Ylm.", &
    1207              :                           usage="L {integer}", &
    1208         5848 :                           n_var=1, type_of_var=integer_t)
    1209         5848 :       CALL section_add_keyword(section, keyword)
    1210         5848 :       CALL keyword_release(keyword)
    1211              : 
    1212              :       !CALL keyword_create(keyword, __LOCATION__, name="ALPHA", &
    1213              :       !                    description="Specifies the width of the Fermi-Dirac style smearing around RCUT.", &
    1214              :       !                    usage="ALPHA {real}", unit_str="angstrom^-1", default_r_val=0.0_dp)
    1215              :       !CALL section_add_keyword(section, keyword)
    1216              :       !CALL keyword_release(keyword)
    1217              : 
    1218              :       ! Must be present in each colvar and handled properly
    1219         5848 :       CALL create_point_section(subsection)
    1220         5848 :       CALL section_add_subsection(section, subsection)
    1221         5848 :       CALL section_release(subsection)
    1222              : 
    1223         5848 :    END SUBROUTINE create_colvar_qparm_section
    1224              : 
    1225              : ! **************************************************************************************************
    1226              : !> \brief collective variables specifying hydronium solvation
    1227              : !> \param section the section to be created
    1228              : !> \author Marcel Baer
    1229              : ! **************************************************************************************************
    1230         5848 :    SUBROUTINE create_colvar_hydronium_shell_section(section)
    1231              :       TYPE(section_type), POINTER                        :: section
    1232              : 
    1233              :       TYPE(keyword_type), POINTER                        :: keyword
    1234              : 
    1235         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
    1236              :       CALL section_create(section, __LOCATION__, name="HYDRONIUM_SHELL", &
    1237              :                           description="Section to define the formation of a hydronium as a"// &
    1238              :                           " collective variable. Number of oxygens in the 1st shell of the"// &
    1239              :                           " hydronium. Adapted from Equation (3) in Supplementary Info of"// &
    1240              :                           " J. Am. Chem. Soc.,128, 2006, 11318, i.e. omitting the cutoff function"// &
    1241              :                           " and summing only over the oxygens of water.", &
    1242         5848 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
    1243              : 
    1244         5848 :       NULLIFY (keyword)
    1245              : 
    1246              :       CALL keyword_create(keyword, __LOCATION__, name="OXYGENS", &
    1247              :                           description="Specifies indexes of atoms building the coordination variable."// &
    1248              :                           " Oxygens of the water molecules.", &
    1249              :                           usage="OXYGENS {integer} {integer} ..", repeats=.TRUE., &
    1250         5848 :                           n_var=-1, type_of_var=integer_t)
    1251         5848 :       CALL section_add_keyword(section, keyword)
    1252         5848 :       CALL keyword_release(keyword)
    1253              : 
    1254              :       CALL keyword_create(keyword, __LOCATION__, name="HYDROGENS", &
    1255              :                           description="Specifies indexes of atoms building the coordination variable."// &
    1256              :                           " Hydrogens of the water molecules.", &
    1257              :                           usage="HYDROGENS {integer} {integer} ..", repeats=.TRUE., &
    1258         5848 :                           n_var=-1, type_of_var=integer_t)
    1259         5848 :       CALL section_add_keyword(section, keyword)
    1260         5848 :       CALL keyword_release(keyword)
    1261              : 
    1262              :       CALL keyword_create(keyword, __LOCATION__, name="ROO", &
    1263              :                           description="Specifies the rc parameter in the coordination function:"// &
    1264              :                           " number of oxygens per water oxygen.", &
    1265              :                           usage="ROO {real}", default_r_val=cp_unit_to_cp2k(value=3.0_dp, &
    1266         5848 :                                                                             unit_str="bohr"), unit_str="bohr", n_var=1)
    1267         5848 :       CALL section_add_keyword(section, keyword)
    1268         5848 :       CALL keyword_release(keyword)
    1269              : 
    1270              :       CALL keyword_create(keyword, __LOCATION__, name="pOO", &
    1271              :                           variants=["EXPON_NUMERATORA"], &
    1272              :                           description="Sets the value of the numerator of the exponential factor"// &
    1273              :                           " in the coordination function: number of oxygens per water oxygen.", &
    1274              :                           usage="pOO {integer}", default_i_val=6, &
    1275        11696 :                           n_var=1)
    1276         5848 :       CALL section_add_keyword(section, keyword)
    1277         5848 :       CALL keyword_release(keyword)
    1278              : 
    1279              :       CALL keyword_create(keyword, __LOCATION__, name="qOO", &
    1280              :                           variants=["EXPON_DENOMINATORA"], &
    1281              :                           description="Sets the value of the denominator of the exponential factor"// &
    1282              :                           " in the coordination function: number of oxygens per water oxygen.", &
    1283              :                           usage="qOO {integer}", default_i_val=12, &
    1284        11696 :                           n_var=1)
    1285         5848 :       CALL section_add_keyword(section, keyword)
    1286         5848 :       CALL keyword_release(keyword)
    1287              : 
    1288              :       CALL keyword_create(keyword, __LOCATION__, name="ROH", &
    1289              :                           description="Specifies the rc parameter in the coordination function:"// &
    1290              :                           " number of hydrogens per water molecule.", &
    1291              :                           usage="ROH {real}", default_r_val=cp_unit_to_cp2k(value=3.0_dp, &
    1292         5848 :                                                                             unit_str="bohr"), unit_str="bohr", n_var=1)
    1293         5848 :       CALL section_add_keyword(section, keyword)
    1294         5848 :       CALL keyword_release(keyword)
    1295              : 
    1296              :       CALL keyword_create(keyword, __LOCATION__, name="pOH", &
    1297              :                           variants=["EXPON_NUMERATORB"], &
    1298              :                           description="Sets the value of the numerator of the exponential factor"// &
    1299              :                           " in the coordination function: number of hydrogens per water molecule.", &
    1300              :                           usage="pOH {integer}", default_i_val=6, &
    1301        11696 :                           n_var=1)
    1302         5848 :       CALL section_add_keyword(section, keyword)
    1303         5848 :       CALL keyword_release(keyword)
    1304              : 
    1305              :       CALL keyword_create(keyword, __LOCATION__, name="qOH", &
    1306              :                           variants=["EXPON_DENOMINATORB"], &
    1307              :                           description="Sets the value of the denominator of the exponential factor"// &
    1308              :                           " in the coordination function: number of hydrogens per water molecule.", &
    1309              :                           usage="qOH {integer}", default_i_val=12, &
    1310        11696 :                           n_var=1)
    1311         5848 :       CALL section_add_keyword(section, keyword)
    1312         5848 :       CALL keyword_release(keyword)
    1313              : 
    1314              :       CALL keyword_create(keyword, __LOCATION__, name="NH", &
    1315              :                           description="Specifies the NH parameter in the M function.", &
    1316              :                           usage="NH {real}", default_r_val=3.0_dp, &
    1317         5848 :                           n_var=1)
    1318         5848 :       CALL section_add_keyword(section, keyword)
    1319         5848 :       CALL keyword_release(keyword)
    1320              : 
    1321              :       CALL keyword_create(keyword, __LOCATION__, name="pM", &
    1322              :                           variants=["EXPON_NUMERATOR"], &
    1323              :                           description="Sets the value of the numerator of the exponential factor"// &
    1324              :                           " in the M function.", &
    1325              :                           usage="pM {integer}", default_i_val=8, &
    1326        11696 :                           n_var=1)
    1327         5848 :       CALL section_add_keyword(section, keyword)
    1328         5848 :       CALL keyword_release(keyword)
    1329              : 
    1330              :       CALL keyword_create(keyword, __LOCATION__, name="qM", &
    1331              :                           variants=["EXPON_DENOMINATOR"], &
    1332              :                           description="Sets the value of the denominator of the exponential factor"// &
    1333              :                           " in the M function.", &
    1334              :                           usage="qM {integer}", default_i_val=16, &
    1335        11696 :                           n_var=1)
    1336         5848 :       CALL section_add_keyword(section, keyword)
    1337         5848 :       CALL keyword_release(keyword)
    1338              : 
    1339              :       CALL keyword_create(keyword, __LOCATION__, name="LAMBDA", &
    1340              :                           description="Specify the LAMBDA parameter in the hydronium function.", &
    1341              :                           usage="LAMBDA {real}", default_r_val=10.0_dp, &
    1342         5848 :                           n_var=1)
    1343         5848 :       CALL section_add_keyword(section, keyword)
    1344         5848 :       CALL keyword_release(keyword)
    1345              : 
    1346         5848 :    END SUBROUTINE create_colvar_hydronium_shell_section
    1347              : 
    1348              : ! **************************************************************************************************
    1349              : !> \brief collective variables specifying the distance between hydronium and hydroxide ion
    1350              : !> \param section the section to be created
    1351              : !> \author Dorothea Golze
    1352              : ! **************************************************************************************************
    1353         5848 :    SUBROUTINE create_colvar_hydronium_dist_section(section)
    1354              :       TYPE(section_type), POINTER                        :: section
    1355              : 
    1356              :       TYPE(keyword_type), POINTER                        :: keyword
    1357              : 
    1358         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
    1359              :       CALL section_create(section, __LOCATION__, name="HYDRONIUM_DISTANCE", &
    1360              :                           description="Section to define the formation of a hydronium as a"// &
    1361              :                           " collective variable. Distance between hydronium and hydroxide ion"// &
    1362              :                           " Experimental at this point, i.e. not proved to be an effective"// &
    1363              :                           " collective variable.", &
    1364         5848 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
    1365              : 
    1366         5848 :       NULLIFY (keyword)
    1367              : 
    1368              :       CALL keyword_create(keyword, __LOCATION__, name="OXYGENS", &
    1369              :                           description="Specifies indexes of atoms building the coordination variable."// &
    1370              :                           " Oxygens of the water molecules.", &
    1371              :                           usage="OXYGENS {integer} {integer} ..", repeats=.TRUE., &
    1372         5848 :                           n_var=-1, type_of_var=integer_t)
    1373         5848 :       CALL section_add_keyword(section, keyword)
    1374         5848 :       CALL keyword_release(keyword)
    1375              : 
    1376              :       CALL keyword_create(keyword, __LOCATION__, name="HYDROGENS", &
    1377              :                           description="Specifies indexes of atoms building the coordination variable."// &
    1378              :                           " Hydrogens of the water molecules.", &
    1379              :                           usage="HYDROGENS {integer} {integer} ..", repeats=.TRUE., &
    1380         5848 :                           n_var=-1, type_of_var=integer_t)
    1381         5848 :       CALL section_add_keyword(section, keyword)
    1382         5848 :       CALL keyword_release(keyword)
    1383              : 
    1384              :       CALL keyword_create(keyword, __LOCATION__, name="ROH", &
    1385              :                           description="Specifies the rc parameter in the coordination function:"// &
    1386              :                           " number of hydrogens per water molecule.", &
    1387              :                           usage="ROH {real}", default_r_val=cp_unit_to_cp2k(value=2.4_dp, &
    1388         5848 :                                                                             unit_str="bohr"), unit_str="bohr", n_var=1)
    1389         5848 :       CALL section_add_keyword(section, keyword)
    1390         5848 :       CALL keyword_release(keyword)
    1391              : 
    1392              :       CALL keyword_create(keyword, __LOCATION__, name="pOH", &
    1393              :                           description="Sets the value of the numerator of the exponential factor"// &
    1394              :                           " in the coordination function: number of hydrogens per water molecule.", &
    1395              :                           usage="pOH {integer}", default_i_val=6, &
    1396         5848 :                           n_var=1)
    1397         5848 :       CALL section_add_keyword(section, keyword)
    1398         5848 :       CALL keyword_release(keyword)
    1399              : 
    1400              :       CALL keyword_create(keyword, __LOCATION__, name="qOH", &
    1401              :                           description="Sets the value of the denominator of the exponential factor"// &
    1402              :                           " in the coordination function: number of hydrogens per water molecule.", &
    1403              :                           usage="qOH {integer}", default_i_val=12, &
    1404         5848 :                           n_var=1)
    1405         5848 :       CALL section_add_keyword(section, keyword)
    1406         5848 :       CALL keyword_release(keyword)
    1407              : 
    1408              :       CALL keyword_create(keyword, __LOCATION__, name="NH", &
    1409              :                           description="Specifies the NH parameter in the M function.", &
    1410              :                           usage="NH {real}", default_r_val=2.2_dp, &
    1411         5848 :                           n_var=1)
    1412         5848 :       CALL section_add_keyword(section, keyword)
    1413         5848 :       CALL keyword_release(keyword)
    1414              : 
    1415              :       CALL keyword_create(keyword, __LOCATION__, name="pM", &
    1416              :                           description="Sets the value of the numerator of the exponential factor"// &
    1417              :                           " in the M function.", &
    1418              :                           usage="pM {integer}", default_i_val=8, &
    1419         5848 :                           n_var=1)
    1420         5848 :       CALL section_add_keyword(section, keyword)
    1421         5848 :       CALL keyword_release(keyword)
    1422              : 
    1423              :       CALL keyword_create(keyword, __LOCATION__, name="qM", &
    1424              :                           description="Sets the value of the denominator of the exponential factor"// &
    1425              :                           " in the M function.", &
    1426              :                           usage="qM {integer}", default_i_val=16, &
    1427         5848 :                           n_var=1)
    1428         5848 :       CALL section_add_keyword(section, keyword)
    1429         5848 :       CALL keyword_release(keyword)
    1430              : 
    1431              :       CALL keyword_create(keyword, __LOCATION__, name="NN", &
    1432              :                           description="Specifies the NN parameter in the F function.", &
    1433              :                           usage="NN {real}", default_r_val=1.5_dp, &
    1434         5848 :                           n_var=1)
    1435         5848 :       CALL section_add_keyword(section, keyword)
    1436         5848 :       CALL keyword_release(keyword)
    1437              : 
    1438              :       CALL keyword_create(keyword, __LOCATION__, name="pF", &
    1439              :                           description="Sets the value of the numerator of the exponential factor"// &
    1440              :                           " in the F function.", &
    1441              :                           usage="pF {integer}", default_i_val=8, &
    1442         5848 :                           n_var=1)
    1443         5848 :       CALL section_add_keyword(section, keyword)
    1444         5848 :       CALL keyword_release(keyword)
    1445              : 
    1446              :       CALL keyword_create(keyword, __LOCATION__, name="qF", &
    1447              :                           description="Sets the value of the denominator of the exponential factor"// &
    1448              :                           " in the F function.", &
    1449              :                           usage="qF {integer}", default_i_val=16, &
    1450         5848 :                           n_var=1)
    1451         5848 :       CALL section_add_keyword(section, keyword)
    1452         5848 :       CALL keyword_release(keyword)
    1453              : 
    1454              :       CALL keyword_create(keyword, __LOCATION__, name="LAMBDA", &
    1455              :                           description="Specify the LAMBDA parameter in the hydronium function.", &
    1456              :                           usage="LAMBDA {real}", default_r_val=20.0_dp, &
    1457         5848 :                           n_var=1)
    1458         5848 :       CALL section_add_keyword(section, keyword)
    1459         5848 :       CALL keyword_release(keyword)
    1460              : 
    1461         5848 :    END SUBROUTINE create_colvar_hydronium_dist_section
    1462              : 
    1463              : ! **************************************************************************************************
    1464              : !> \brief collective variables specifying the solvation of carboxylic acid;
    1465              : !>        distance between hydronium ion and acetate ion; Equation (2) in
    1466              : !>        Supplementary Information of J. Am. Chem. Soc.,128,  2006, 11318
    1467              : !> \param section the section to be created
    1468              : !> \author Dorothea Golze
    1469              : ! **************************************************************************************************
    1470         5848 :    SUBROUTINE create_colvar_acid_hyd_dist_section(section)
    1471              :       TYPE(section_type), POINTER                        :: section
    1472              : 
    1473              :       TYPE(keyword_type), POINTER                        :: keyword
    1474              : 
    1475         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
    1476              :       CALL section_create(section, __LOCATION__, name="ACID_HYDRONIUM_DISTANCE", &
    1477              :                           description="Section to define the dissociation of a carboxylic acid in"// &
    1478              :                           " water. Distance between hydronium ion and acetate ion. Equation (2)"// &
    1479              :                           " in Supplementary Info of J. Am. Chem. Soc.,128,  2006, 11318.", &
    1480         5848 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
    1481              : 
    1482         5848 :       NULLIFY (keyword)
    1483              : 
    1484              :       CALL keyword_create(keyword, __LOCATION__, name="OXYGENS_WATER", &
    1485              :                           description="Specifies indexes of atoms building the coordination variable."// &
    1486              :                           " Oxygens of the water molecules. ", &
    1487              :                           usage="OXYGENS_WATER {integer} {integer} ..", repeats=.TRUE., &
    1488         5848 :                           n_var=-1, type_of_var=integer_t)
    1489         5848 :       CALL section_add_keyword(section, keyword)
    1490         5848 :       CALL keyword_release(keyword)
    1491              : 
    1492              :       CALL keyword_create(keyword, __LOCATION__, name="OXYGENS_ACID", &
    1493              :                           description="Specifies indexes of atoms building the coordination variable."// &
    1494              :                           " Oxygens of the carboxyl groups.", &
    1495              :                           usage="OXYGENS_ACID {integer} {integer} ..", repeats=.TRUE., &
    1496         5848 :                           n_var=-1, type_of_var=integer_t)
    1497         5848 :       CALL section_add_keyword(section, keyword)
    1498         5848 :       CALL keyword_release(keyword)
    1499              : 
    1500              :       CALL keyword_create(keyword, __LOCATION__, name="HYDROGENS", &
    1501              :                           description="Specifies indexes of atoms building the coordination variable."// &
    1502              :                           " Hydrogens of the water molecules and of the carboxyl groups.", &
    1503              :                           usage="HYDROGENS {integer} {integer} ..", repeats=.TRUE., &
    1504         5848 :                           n_var=-1, type_of_var=integer_t)
    1505         5848 :       CALL section_add_keyword(section, keyword)
    1506         5848 :       CALL keyword_release(keyword)
    1507              : 
    1508              :       CALL keyword_create(keyword, __LOCATION__, name="pWOH", &
    1509              :                           description="Sets the value of the numerator of the exponential factor"// &
    1510              :                           " in the coordination function: number of hydrogens per water molecule.", &
    1511              :                           usage="pWOH {integer}", default_i_val=8, &
    1512         5848 :                           n_var=1)
    1513         5848 :       CALL section_add_keyword(section, keyword)
    1514         5848 :       CALL keyword_release(keyword)
    1515              : 
    1516              :       CALL keyword_create(keyword, __LOCATION__, name="qWOH", &
    1517              :                           description="Sets the value of the denominator of the exponential factor"// &
    1518              :                           " in the coordination function: number of hydrogens per water molecule.", &
    1519              :                           usage="qWOH {integer}", default_i_val=16, &
    1520         5848 :                           n_var=1)
    1521         5848 :       CALL section_add_keyword(section, keyword)
    1522         5848 :       CALL keyword_release(keyword)
    1523              : 
    1524              :       CALL keyword_create(keyword, __LOCATION__, name="RWOH", &
    1525              :                           description="Specify the rc parameter in the coordination function:"// &
    1526              :                           " number of hydrogens per water molecule.", &
    1527              :                           usage="RWOH {real}", default_r_val=cp_unit_to_cp2k(value=2.4_dp, &
    1528         5848 :                                                                              unit_str="bohr"), unit_str="bohr", n_var=1)
    1529         5848 :       CALL section_add_keyword(section, keyword)
    1530         5848 :       CALL keyword_release(keyword)
    1531              : 
    1532              :       CALL keyword_create(keyword, __LOCATION__, name="pAOH", &
    1533              :                           description="Sets the value of the numerator of the exponential factor"// &
    1534              :                           " in the coordination function: number of hydrogens per carboxyl group.", &
    1535              :                           usage="pAOH {integer}", default_i_val=6, &
    1536         5848 :                           n_var=1)
    1537         5848 :       CALL section_add_keyword(section, keyword)
    1538         5848 :       CALL keyword_release(keyword)
    1539              : 
    1540              :       CALL keyword_create(keyword, __LOCATION__, name="qAOH", &
    1541              :                           description="Sets the value of the denominator of the exponential factor"// &
    1542              :                           " in the coordination function: number of hydrogens per carboxyl group.", &
    1543              :                           usage="qAOH {integer}", default_i_val=14, &
    1544         5848 :                           n_var=1)
    1545         5848 :       CALL section_add_keyword(section, keyword)
    1546         5848 :       CALL keyword_release(keyword)
    1547              : 
    1548              :       CALL keyword_create(keyword, __LOCATION__, name="RAOH", &
    1549              :                           description="Specify the rc parameter in the coordination function:"// &
    1550              :                           " number of hydrogens per carboxyl group.", &
    1551              :                           usage="RAOH {real}", default_r_val=cp_unit_to_cp2k(value=2.4_dp, &
    1552         5848 :                                                                              unit_str="bohr"), unit_str="bohr", n_var=1)
    1553         5848 :       CALL section_add_keyword(section, keyword)
    1554         5848 :       CALL keyword_release(keyword)
    1555              : 
    1556              :       CALL keyword_create(keyword, __LOCATION__, name="pCUT", &
    1557              :                           description="Sets the value of the numerator of the exponential factor"// &
    1558              :                           " in the cutoff function.", &
    1559              :                           usage="pCUT {integer}", default_i_val=6, &
    1560         5848 :                           n_var=1)
    1561         5848 :       CALL section_add_keyword(section, keyword)
    1562         5848 :       CALL keyword_release(keyword)
    1563              : 
    1564              :       CALL keyword_create(keyword, __LOCATION__, name="qCUT", &
    1565              :                           description="Sets the value of the denominator of the exponential factor"// &
    1566              :                           " in the cutoff function.", &
    1567              :                           usage="qCUT {integer}", default_i_val=12, &
    1568         5848 :                           n_var=1)
    1569         5848 :       CALL section_add_keyword(section, keyword)
    1570         5848 :       CALL keyword_release(keyword)
    1571              : 
    1572              :       CALL keyword_create(keyword, __LOCATION__, name="NC", &
    1573              :                           description="Specifies the NC parameter in the cutoff function.", &
    1574              :                           usage="NC {real}", default_r_val=0.56_dp, &
    1575         5848 :                           n_var=1)
    1576         5848 :       CALL section_add_keyword(section, keyword)
    1577         5848 :       CALL keyword_release(keyword)
    1578              : 
    1579              :       CALL keyword_create(keyword, __LOCATION__, name="LAMBDA", &
    1580              :                           variants=["LAMBDA"], &
    1581              :                           description="Specifies the LAMBDA parameter carboxylic acid function.", &
    1582              :                           usage="LAMBDA {real}", default_r_val=20.0_dp, &
    1583        11696 :                           n_var=1)
    1584         5848 :       CALL section_add_keyword(section, keyword)
    1585         5848 :       CALL keyword_release(keyword)
    1586              : 
    1587         5848 :    END SUBROUTINE create_colvar_acid_hyd_dist_section
    1588              : 
    1589              : ! **************************************************************************************************
    1590              : !> \brief collective variables specifying the solvation of carboxylic acid;
    1591              : !>        number of oxygens in the 1st shell of the hydronium; Equation (3) in
    1592              : !>        Supplementary Information of J. Am. Chem. Soc.,128,  2006, 11318
    1593              : !> \param section the section to be created
    1594              : !> \author Dorothea Golze
    1595              : ! **************************************************************************************************
    1596         5848 :    SUBROUTINE create_colvar_acid_hyd_shell_section(section)
    1597              :       TYPE(section_type), POINTER                        :: section
    1598              : 
    1599              :       TYPE(keyword_type), POINTER                        :: keyword
    1600              : 
    1601         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
    1602              :       CALL section_create(section, __LOCATION__, name="ACID_HYDRONIUM_SHELL", &
    1603              :                           description="Section to define the dissociation of a carboxylic acid in"// &
    1604              :                           " water. Number of oxygens in the 1st shell of the hydronium. Equation (3)"// &
    1605              :                           " in Supplementary Info of J. Am. Chem. Soc.,128,  2006, 11318. Similar to"// &
    1606              :                           " the HYDRONIUM colvar, but with modification for the acid.", &
    1607         5848 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
    1608              : 
    1609         5848 :       NULLIFY (keyword)
    1610              : 
    1611              :       CALL keyword_create(keyword, __LOCATION__, name="OXYGENS_WATER", &
    1612              :                           description="Specifies indexes of atoms building the coordination variable."// &
    1613              :                           " Oxygens of the water molecules. ", &
    1614              :                           usage="OXYGENS_WATER {integer} {integer} ..", repeats=.TRUE., &
    1615         5848 :                           n_var=-1, type_of_var=integer_t)
    1616         5848 :       CALL section_add_keyword(section, keyword)
    1617         5848 :       CALL keyword_release(keyword)
    1618              : 
    1619              :       CALL keyword_create(keyword, __LOCATION__, name="OXYGENS_ACID", &
    1620              :                           description="Specifies indexes of atoms building the coordination variable."// &
    1621              :                           " Oxygens of the carboxyl groups.", &
    1622              :                           usage="OXYGENS_ACID {integer} {integer} ..", repeats=.TRUE., &
    1623         5848 :                           n_var=-1, type_of_var=integer_t)
    1624         5848 :       CALL section_add_keyword(section, keyword)
    1625         5848 :       CALL keyword_release(keyword)
    1626              : 
    1627              :       CALL keyword_create(keyword, __LOCATION__, name="HYDROGENS", &
    1628              :                           description="Specifies indexes of atoms building the coordination variable."// &
    1629              :                           " Hydrogens of the water molecules and of the carboxyl groups.", &
    1630              :                           usage="HYDROGENS {integer} {integer} ..", repeats=.TRUE., &
    1631         5848 :                           n_var=-1, type_of_var=integer_t)
    1632         5848 :       CALL section_add_keyword(section, keyword)
    1633         5848 :       CALL keyword_release(keyword)
    1634              : 
    1635              :       CALL keyword_create(keyword, __LOCATION__, name="pWOH", &
    1636              :                           description="Sets the value of the numerator of the exponential factor"// &
    1637              :                           " in the coordination function: number of hydrogens per water molecule.", &
    1638              :                           usage="pWOH {integer}", default_i_val=8, &
    1639         5848 :                           n_var=1)
    1640         5848 :       CALL section_add_keyword(section, keyword)
    1641         5848 :       CALL keyword_release(keyword)
    1642              : 
    1643              :       CALL keyword_create(keyword, __LOCATION__, name="qWOH", &
    1644              :                           description="Sets the value of the denominator of the exponential factor"// &
    1645              :                           " in the coordination function: number of hydrogens per water molecule.", &
    1646              :                           usage="qWOH {integer}", default_i_val=16, &
    1647         5848 :                           n_var=1)
    1648         5848 :       CALL section_add_keyword(section, keyword)
    1649         5848 :       CALL keyword_release(keyword)
    1650              : 
    1651              :       CALL keyword_create(keyword, __LOCATION__, name="RWOH", &
    1652              :                           description="Specifies the rc parameter in the coordination function:"// &
    1653              :                           " number of hydrogens per water molecule.", &
    1654              :                           usage="RWOH {real}", default_r_val=cp_unit_to_cp2k(value=2.4_dp, &
    1655         5848 :                                                                              unit_str="bohr"), unit_str="bohr", n_var=1)
    1656         5848 :       CALL section_add_keyword(section, keyword)
    1657         5848 :       CALL keyword_release(keyword)
    1658              : 
    1659              :       CALL keyword_create(keyword, __LOCATION__, name="pAOH", &
    1660              :                           description="Sets the value of the numerator of the exponential factor"// &
    1661              :                           " in the coordination function: number of hydrogens per carboxyl group.", &
    1662              :                           usage="pAOH {integer}", default_i_val=6, &
    1663         5848 :                           n_var=1)
    1664         5848 :       CALL section_add_keyword(section, keyword)
    1665         5848 :       CALL keyword_release(keyword)
    1666              : 
    1667              :       CALL keyword_create(keyword, __LOCATION__, name="qAOH", &
    1668              :                           description="Sets the value of the denominator of the exponential factor"// &
    1669              :                           " in the coordination function: number of hydrogens per carboxyl group.", &
    1670              :                           usage="qAOH {integer}", default_i_val=14, &
    1671         5848 :                           n_var=1)
    1672         5848 :       CALL section_add_keyword(section, keyword)
    1673         5848 :       CALL keyword_release(keyword)
    1674              : 
    1675              :       CALL keyword_create(keyword, __LOCATION__, name="RAOH", &
    1676              :                           description="Specifies the rc parameter in the coordination function:"// &
    1677              :                           " number of hydrogens per carboxyl group.", &
    1678              :                           usage="RAOH {real}", default_r_val=cp_unit_to_cp2k(value=2.4_dp, &
    1679         5848 :                                                                              unit_str="bohr"), unit_str="bohr", n_var=1)
    1680         5848 :       CALL section_add_keyword(section, keyword)
    1681         5848 :       CALL keyword_release(keyword)
    1682              : 
    1683              :       CALL keyword_create(keyword, __LOCATION__, name="pOO", &
    1684              :                           description="Sets the value of the numerator of the exponential factor"// &
    1685              :                           " in the coordination function: number of oxygens per water oxygen.", &
    1686              :                           usage="pOO {integer}", default_i_val=6, &
    1687         5848 :                           n_var=1)
    1688         5848 :       CALL section_add_keyword(section, keyword)
    1689         5848 :       CALL keyword_release(keyword)
    1690              : 
    1691              :       CALL keyword_create(keyword, __LOCATION__, name="qOO", &
    1692              :                           description="Sets the value of the denominator of the exponential factor"// &
    1693              :                           " in the coordination function: number of oxygens per water oxygen.", &
    1694              :                           usage="qOO {integer}", default_i_val=12, &
    1695         5848 :                           n_var=1)
    1696         5848 :       CALL section_add_keyword(section, keyword)
    1697         5848 :       CALL keyword_release(keyword)
    1698              : 
    1699              :       CALL keyword_create(keyword, __LOCATION__, name="ROO", &
    1700              :                           description="Specifies the rc parameter in the coordination function:"// &
    1701              :                           " number of oxygens per water oxygen.", &
    1702              :                           usage="ROO {real}", default_r_val=cp_unit_to_cp2k(value=5.5_dp, &
    1703         5848 :                                                                             unit_str="bohr"), unit_str="bohr", n_var=1)
    1704         5848 :       CALL section_add_keyword(section, keyword)
    1705         5848 :       CALL keyword_release(keyword)
    1706              : 
    1707              :       CALL keyword_create(keyword, __LOCATION__, name="pM", &
    1708              :                           description="Sets the value of the numerator of the exponential factor"// &
    1709              :                           " in the M function.", &
    1710              :                           usage="pM {integer}", default_i_val=8, &
    1711         5848 :                           n_var=1)
    1712         5848 :       CALL section_add_keyword(section, keyword)
    1713         5848 :       CALL keyword_release(keyword)
    1714              : 
    1715              :       CALL keyword_create(keyword, __LOCATION__, name="qM", &
    1716              :                           description="Sets the value of the denominator of the exponential factor"// &
    1717              :                           " in the M function.", &
    1718              :                           usage="qM {integer}", default_i_val=16, &
    1719         5848 :                           n_var=1)
    1720         5848 :       CALL section_add_keyword(section, keyword)
    1721         5848 :       CALL keyword_release(keyword)
    1722              : 
    1723              :       CALL keyword_create(keyword, __LOCATION__, name="NH", &
    1724              :                           description="Specifies the NH parameter in the M function.", &
    1725              :                           usage="NH {real}", default_r_val=2.2_dp, &
    1726         5848 :                           n_var=1)
    1727         5848 :       CALL section_add_keyword(section, keyword)
    1728         5848 :       CALL keyword_release(keyword)
    1729              : 
    1730              :       CALL keyword_create(keyword, __LOCATION__, name="pCUT", &
    1731              :                           description="Sets the value of the numerator of the exponential factor"// &
    1732              :                           " in the cutoff function.", &
    1733              :                           usage="pCUT {integer}", default_i_val=6, &
    1734         5848 :                           n_var=1)
    1735         5848 :       CALL section_add_keyword(section, keyword)
    1736         5848 :       CALL keyword_release(keyword)
    1737              : 
    1738              :       CALL keyword_create(keyword, __LOCATION__, name="qCUT", &
    1739              :                           description="Sets the value of the denominator of the exponential factor"// &
    1740              :                           " in the cutoff function.", &
    1741              :                           usage="qCUT {integer}", default_i_val=12, &
    1742         5848 :                           n_var=1)
    1743         5848 :       CALL section_add_keyword(section, keyword)
    1744         5848 :       CALL keyword_release(keyword)
    1745              : 
    1746              :       CALL keyword_create(keyword, __LOCATION__, name="NC", &
    1747              :                           description="Specifies the NC parameter in the cutoff function.", &
    1748              :                           usage="NC {real}", default_r_val=0.9_dp, &
    1749         5848 :                           n_var=1)
    1750         5848 :       CALL section_add_keyword(section, keyword)
    1751         5848 :       CALL keyword_release(keyword)
    1752              : 
    1753              :       CALL keyword_create(keyword, __LOCATION__, name="LAMBDA", &
    1754              :                           variants=["LAMBDA"], &
    1755              :                           description="Specifies the LAMBDA parameter carboxylic acid function.", &
    1756              :                           usage="LAMBDA {real}", default_r_val=10.0_dp, &
    1757        11696 :                           n_var=1)
    1758         5848 :       CALL section_add_keyword(section, keyword)
    1759         5848 :       CALL keyword_release(keyword)
    1760              : 
    1761         5848 :    END SUBROUTINE create_colvar_acid_hyd_shell_section
    1762              : 
    1763              : ! **************************************************************************************************
    1764              : !> \brief ...
    1765              : !> \param section ...
    1766              : ! **************************************************************************************************
    1767         5848 :    SUBROUTINE create_colvar_rmsd_section(section)
    1768              :       TYPE(section_type), POINTER                        :: section
    1769              : 
    1770              :       TYPE(keyword_type), POINTER                        :: keyword
    1771              :       TYPE(section_type), POINTER                        :: subsection, subsubsection
    1772              : 
    1773         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
    1774              :       CALL section_create(section, __LOCATION__, name="rmsd", &
    1775              :                           description="Section to define a CV as function of RMSD computed with respect to"// &
    1776              :                           " given reference configurations. For 2 configurations the colvar is equal to:"// &
    1777              :                           " ss = (RMSDA-RMSDB)/(RMSDA+RMSDB), while if only 1 configuration is given, then the"// &
    1778              :                           " colvar is just the RMSD from that frame.", &
    1779         5848 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
    1780              : 
    1781         5848 :       NULLIFY (keyword, subsection, subsubsection)
    1782              :       CALL keyword_create(keyword, __LOCATION__, name="SUBSET_TYPE", &
    1783              :                           description="Define the subsytem used to compute the RMSD. With ALL the displacements"// &
    1784              :                           " are mass-weighted, with LIST all weights are set to 1,"// &
    1785              :                           " with WEIGHT_LIST a list of weights is expected from input.", &
    1786              :                           usage="SUBSET_TYPE ALL", &
    1787              :                           enum_c_vals=s2a("ALL", "LIST", "WEIGHT_LIST"), &
    1788              :                           enum_i_vals=[rmsd_all, rmsd_list, rmsd_weightlist], &
    1789         5848 :                           default_i_val=rmsd_all)
    1790         5848 :       CALL section_add_keyword(section, keyword)
    1791         5848 :       CALL keyword_release(keyword)
    1792              : 
    1793              :       CALL keyword_create(keyword, __LOCATION__, name="ALIGN_FRAMES", &
    1794              :                           description="Whether the reference frames should be aligned to minimize the RMSD", &
    1795              :                           usage="ALIGN_FRAMES", &
    1796         5848 :                           default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
    1797         5848 :       CALL section_add_keyword(section, keyword)
    1798         5848 :       CALL keyword_release(keyword)
    1799              : 
    1800              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
    1801              :                           description="Specify indexes of atoms building the subset. ", &
    1802              :                           usage="ATOMS {integer} {integer} ..", repeats=.TRUE., &
    1803         5848 :                           n_var=-1, type_of_var=integer_t)
    1804         5848 :       CALL section_add_keyword(section, keyword)
    1805         5848 :       CALL keyword_release(keyword)
    1806              : 
    1807              :       CALL keyword_create(keyword, __LOCATION__, name="WEIGHTS", &
    1808              :                           description="Specify weights of atoms building the subset. It is used only with WEIGHT_LIST ", &
    1809              :                           usage="weightS {real} {real} ..", repeats=.TRUE., &
    1810         5848 :                           n_var=-1, type_of_var=real_t)
    1811         5848 :       CALL section_add_keyword(section, keyword)
    1812         5848 :       CALL keyword_release(keyword)
    1813              : 
    1814              :       CALL section_create(subsection, __LOCATION__, name="FRAME", &
    1815              :                           description="Specify coordinates of the frame (number of frames can be either 1 or 2)", &
    1816         5848 :                           repeats=.TRUE.)
    1817              : 
    1818              :       CALL keyword_create(keyword, __LOCATION__, name="COORD_FILE_NAME", &
    1819              :                           description="Name of the xyz file with coordinates (alternative to &COORD section)", &
    1820              :                           usage="COORD_FILE_NAME <CHAR>", &
    1821         5848 :                           default_lc_val="")
    1822         5848 :       CALL section_add_keyword(subsection, keyword)
    1823         5848 :       CALL keyword_release(keyword)
    1824              : 
    1825         5848 :       CALL create_coord_section_cv(subsubsection, "RMSD")
    1826         5848 :       CALL section_add_subsection(subsection, subsubsection)
    1827         5848 :       CALL section_release(subsubsection)
    1828              : 
    1829         5848 :       CALL section_add_subsection(section, subsection)
    1830         5848 :       CALL section_release(subsection)
    1831              : 
    1832         5848 :    END SUBROUTINE create_colvar_rmsd_section
    1833              : 
    1834              : ! **************************************************************************************************
    1835              : !> \brief collective variables specifying the space orthogonal to the reaction path
    1836              : !>        in the space spanned by the involved collective coordinates
    1837              : !> \param section the section to be created
    1838              : !> \author fschiff
    1839              : ! **************************************************************************************************
    1840         1462 :    SUBROUTINE create_colvar_rpath_section(section)
    1841              :       TYPE(section_type), POINTER                        :: section
    1842              : 
    1843         1462 :       CPASSERT(.NOT. ASSOCIATED(section))
    1844              :       CALL section_create(section, __LOCATION__, name="REACTION_PATH", &
    1845              :                           description="Section defining a one dimensional reaction path in an Q-dimensional space of colvars. "// &
    1846              :                           "Constraining this colvar, allows to sample the space orthogonal to the reaction path, "// &
    1847              :                           "both in the Q-dimensional colvar and 3N-Q remaining coordinates. "// &
    1848              :                           "For the details of the function see cited literature."//newline//newline// &
    1849              :                           "The default is to use the colvars defined in the COLVAR subsections, which "// &
    1850              :                           "requires FUNCTION, VARIABLE, RANGE, STEP_SIZE keywords and optionally "// &
    1851              :                           "the MAP print key. Switching on either RMSD or DISTANCES_RMSD (which are "// &
    1852              :                           "mutually exclusive) instead requires the SUBSET_TYPE, ALIGN_FRAMES (and "// &
    1853              :                           "optionally ATOMS) keywords and the FRAME subsections. The LAMBDA keyword "// &
    1854              :                           "is always required for each of the three possibilities.", &
    1855              :                           n_keywords=1, n_subsections=0, repeats=.FALSE., &
    1856         2924 :                           citations=[Branduardi2007])
    1857              : 
    1858         1462 :       CALL keywords_colvar_path(section)
    1859         1462 :    END SUBROUTINE create_colvar_rpath_section
    1860              : 
    1861              : ! **************************************************************************************************
    1862              : !> \brief Distance from reaction path
    1863              : !> \param section the section to be created
    1864              : !> \author 01.2010
    1865              : ! **************************************************************************************************
    1866         1462 :    SUBROUTINE create_colvar_dpath_section(section)
    1867              :       TYPE(section_type), POINTER                        :: section
    1868              : 
    1869         1462 :       CPASSERT(.NOT. ASSOCIATED(section))
    1870              :       CALL section_create(section, __LOCATION__, name="DISTANCE_FROM_PATH", &
    1871              :                           description="Section defining the distance from a one dimensional reaction "// &
    1872              :                           "path in an Q-dimensional space of colvars. "// &
    1873              :                           "Constraining this colvar, allows to sample the space equidistant to the reaction path, "// &
    1874              :                           "both in the Q-dimensional colvar and 3N-Q remaining coordinates. "// &
    1875              :                           "For the details of the function see cited literature."//newline//newline// &
    1876              :                           "The default is to use the colvars defined in the COLVAR subsections, which "// &
    1877              :                           "requires FUNCTION, VARIABLE, RANGE, STEP_SIZE keywords and optionally "// &
    1878              :                           "the MAP print key. Switching on either RMSD or DISTANCES_RMSD (which are "// &
    1879              :                           "mutually exclusive) instead requires the SUBSET_TYPE, ALIGN_FRAMES (and "// &
    1880              :                           "optionally ATOMS) keywords and the FRAME subsections. The LAMBDA keyword "// &
    1881              :                           "is always required for each of the three possibilities.", &
    1882              :                           n_keywords=1, n_subsections=0, repeats=.FALSE., &
    1883         2924 :                           citations=[Branduardi2007])
    1884              : 
    1885         1462 :       CALL keywords_colvar_path(section)
    1886         1462 :    END SUBROUTINE create_colvar_dpath_section
    1887              : 
    1888              : ! **************************************************************************************************
    1889              : !> \brief Section describing keywords for both reaction path and distance from reaction path
    1890              : !> \param section the section to be created
    1891              : !> \author 01.2010
    1892              : ! **************************************************************************************************
    1893         2924 :    SUBROUTINE keywords_colvar_path(section)
    1894              : 
    1895              :       TYPE(section_type), POINTER                        :: section
    1896              : 
    1897              :       TYPE(keyword_type), POINTER                        :: keyword
    1898              :       TYPE(section_type), POINTER                        :: print_key, subsection, subsubsection
    1899              : 
    1900         2924 :       NULLIFY (keyword, subsection, subsubsection, print_key)
    1901         2924 :       CALL create_colvar_section(subsection, skip_recursive_colvar=.TRUE.)
    1902         2924 :       CALL section_add_subsection(section, subsection)
    1903         2924 :       CALL section_release(subsection)
    1904              : 
    1905              :       CALL keyword_create(keyword, __LOCATION__, name="DISTANCES_RMSD", &
    1906              :                           description="Whether to use distances RMSD instead of COLVARs.", &
    1907              :                           usage="DISTANCES_RMSD T", &
    1908         2924 :                           default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
    1909         2924 :       CALL section_add_keyword(section, keyword)
    1910         2924 :       CALL keyword_release(keyword)
    1911              : 
    1912              :       CALL keyword_create(keyword, __LOCATION__, name="RMSD", &
    1913              :                           description="Whether to use RMSD instead of COLVARs.", &
    1914              :                           usage="RMSD T", &
    1915         2924 :                           default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
    1916         2924 :       CALL section_add_keyword(section, keyword)
    1917         2924 :       CALL keyword_release(keyword)
    1918              : 
    1919              :       CALL keyword_create(keyword, __LOCATION__, name="SUBSET_TYPE", &
    1920              :                           description="Define the subsytem used to compute the RMSD", &
    1921              :                           usage="SUBSET_TYPE ALL", &
    1922              :                           enum_c_vals=s2a("ALL", "LIST"), &
    1923              :                           enum_i_vals=[rmsd_all, rmsd_list], &
    1924         2924 :                           default_i_val=rmsd_all)
    1925         2924 :       CALL section_add_keyword(section, keyword)
    1926         2924 :       CALL keyword_release(keyword)
    1927              : 
    1928              :       CALL keyword_create(keyword, __LOCATION__, name="ALIGN_FRAMES", &
    1929              :                           description="Whether the reference frames should be aligned to minimize the RMSD", &
    1930              :                           usage="ALIGN_FRAMES", &
    1931         2924 :                           default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
    1932         2924 :       CALL section_add_keyword(section, keyword)
    1933         2924 :       CALL keyword_release(keyword)
    1934              : 
    1935              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
    1936              :                           description="Specify indexes of atoms building the subset. ", &
    1937              :                           usage="ATOMS {integer} {integer} ..", repeats=.TRUE., &
    1938         2924 :                           n_var=-1, type_of_var=integer_t)
    1939         2924 :       CALL section_add_keyword(section, keyword)
    1940         2924 :       CALL keyword_release(keyword)
    1941              : 
    1942              :       CALL section_create(subsection, __LOCATION__, name="FRAME", &
    1943              :                           description="Specify coordinates of the frame", &
    1944         2924 :                           repeats=.TRUE.)
    1945              : 
    1946              :       CALL keyword_create(keyword, __LOCATION__, name="COORD_FILE_NAME", &
    1947              :                           description="Name of the xyz file with coordinates (alternative to &COORD section)", &
    1948              :                           usage="COORD_FILE_NAME <CHAR>", &
    1949         2924 :                           default_lc_val="")
    1950         2924 :       CALL section_add_keyword(subsection, keyword)
    1951         2924 :       CALL keyword_release(keyword)
    1952              : 
    1953         2924 :       CALL create_coord_section_cv(subsubsection, "RMSD")
    1954         2924 :       CALL section_add_subsection(subsection, subsubsection)
    1955         2924 :       CALL section_release(subsubsection)
    1956              : 
    1957         2924 :       CALL section_add_subsection(section, subsection)
    1958         2924 :       CALL section_release(subsection)
    1959              : 
    1960              :       CALL keyword_create(keyword, __LOCATION__, name="FUNCTION", &
    1961              :                           description="Specifies the ith element of the vector valued function that "// &
    1962              :                           "defines the reaction path. This keyword needs to repeat exactly Q times, "// &
    1963              :                           "and the order must match the order of the colvars defined in the COLVAR "// &
    1964              :                           "subsections. The VARIABLE (e.g. T) which parametrises the curve can be "// &
    1965              :                           "used as the target of a constraint. "//docf(), &
    1966              :                           usage="FUNCTION (sin(T+2)+2*T)", type_of_var=lchar_t, &
    1967         2924 :                           n_var=1, default_lc_val="0", repeats=.TRUE.)
    1968         2924 :       CALL section_add_keyword(section, keyword)
    1969         2924 :       CALL keyword_release(keyword)
    1970              : 
    1971              :       CALL keyword_create(keyword, __LOCATION__, name="VARIABLE", &
    1972              :                           description="Specifies the name of the variable that parametrises the FUNCTION "// &
    1973              :                           "defining the reaction path. All Q functions must use this variable.", &
    1974              :                           usage="VARIABLE T", type_of_var=char_t, &
    1975         2924 :                           n_var=1, repeats=.FALSE.)
    1976         2924 :       CALL section_add_keyword(section, keyword)
    1977         2924 :       CALL keyword_release(keyword)
    1978              : 
    1979              :       CALL keyword_create( &
    1980              :          keyword, __LOCATION__, name="LAMBDA", &
    1981              :          description="Specifies the exponent of the Gaussian used in the integral representation of the colvar. "// &
    1982              :          "The shape of the space orthogonal to the reaction path is defined by this choice. "// &
    1983              :          "In the limit of large values, it is given by the plane orthogonal to the path. "// &
    1984              :          "In practice, modest values are required for stable numerical integration.", &
    1985              :          usage="LAMBDA {real}", &
    1986         2924 :          type_of_var=real_t, default_r_val=5.0_dp)
    1987         2924 :       CALL section_add_keyword(section, keyword)
    1988         2924 :       CALL keyword_release(keyword)
    1989              : 
    1990              :       CALL keyword_create(keyword, __LOCATION__, name="STEP_SIZE", &
    1991              :                           description="Step size in the numerical integration, "// &
    1992              :                           "a few thousand points are common, and the proper number also depends on LAMBDA.", &
    1993              :                           usage="STEP_SIZE {real}", &
    1994         2924 :                           type_of_var=real_t, default_r_val=0.01_dp)
    1995         2924 :       CALL section_add_keyword(section, keyword)
    1996         2924 :       CALL keyword_release(keyword)
    1997              : 
    1998              :       CALL keyword_create(keyword, __LOCATION__, name="RANGE", &
    1999              :                           description="The range of VARIABLE used for the parametrisation.", &
    2000              :                           usage="RANGE <REAL> <REAL>", &
    2001         2924 :                           n_var=2, type_of_var=real_t)
    2002         2924 :       CALL section_add_keyword(section, keyword)
    2003         2924 :       CALL keyword_release(keyword)
    2004              : 
    2005              :       CALL cp_print_key_section_create( &
    2006              :          print_key, __LOCATION__, name="MAP", &
    2007              :          description="Activating this print key will print once a file with the values of the FUNCTION on a grid "// &
    2008              :          "of COLVAR values in a specified range. "// &
    2009              :          "GRID_SPACING and RANGE for every COLVAR has to be specified again in the same order as they are in the input.", &
    2010         2924 :          print_level=high_print_level, filename="PATH")
    2011              : 
    2012              :       CALL keyword_create(keyword, __LOCATION__, name="RANGE", &
    2013              :                           description="The range of of the grid of the COLVAR.", &
    2014              :                           usage="RANGE <REAL> <REAL>", &
    2015         2924 :                           n_var=2, type_of_var=real_t, repeats=.TRUE.)
    2016         2924 :       CALL section_add_keyword(print_key, keyword)
    2017         2924 :       CALL keyword_release(keyword)
    2018              : 
    2019              :       CALL keyword_create(keyword, __LOCATION__, name="GRID_SPACING", &
    2020              :                           description="Distance between two gridpoints for the grid on the COLVAR", &
    2021              :                           usage="GRID_SPACING {real}", repeats=.TRUE., &
    2022         2924 :                           type_of_var=real_t, default_r_val=0.01_dp)
    2023         2924 :       CALL section_add_keyword(print_key, keyword)
    2024         2924 :       CALL keyword_release(keyword)
    2025              : 
    2026         2924 :       CALL section_add_subsection(section, print_key)
    2027         2924 :       CALL section_release(print_key)
    2028              : 
    2029         2924 :    END SUBROUTINE keywords_colvar_path
    2030              : 
    2031              : ! **************************************************************************************************
    2032              : !> \brief Colvar allowing a combination of COLVARS
    2033              : !> \param section the section to be created
    2034              : !> \author Teodoro Laino [tlaino] - 12.2008
    2035              : ! **************************************************************************************************
    2036         1462 :    SUBROUTINE create_colvar_comb_section(section)
    2037              :       TYPE(section_type), POINTER                        :: section
    2038              : 
    2039              :       TYPE(section_type), POINTER                        :: subsection
    2040              : 
    2041         1462 :       CPASSERT(.NOT. ASSOCIATED(section))
    2042              : 
    2043              :       CALL create_function_section(section, "COMBINE_COLVAR", "FUNCTION", &
    2044              :                                    description="Defines a COLVAR as a combination of several other "// &
    2045              :                                    "COLVARs with a generic function. To allow an efficient mapping "// &
    2046              :                                    "the order of the COLVARs will be considered identical to the "// &
    2047              :                                    "order of definition in the input file, and no extraneous COLVAR "// &
    2048              :                                    "that is not involved in the generic function should be present.", &
    2049         1462 :                                    do_deriv=.TRUE.)
    2050              : 
    2051         1462 :       NULLIFY (subsection)
    2052         1462 :       CALL create_colvar_section(subsection, skip_recursive_colvar=.TRUE.)
    2053         1462 :       CALL section_add_subsection(section, subsection)
    2054         1462 :       CALL section_release(subsection)
    2055              : 
    2056         1462 :    END SUBROUTINE create_colvar_comb_section
    2057              : 
    2058              : ! **************************************************************************************************
    2059              : !> \brief Creates the coord section
    2060              : !> \param section the section to create
    2061              : !> \param name ...
    2062              : !> \author teo
    2063              : ! **************************************************************************************************
    2064         8772 :    SUBROUTINE create_coord_section_cv(section, name)
    2065              :       TYPE(section_type), POINTER                        :: section
    2066              :       CHARACTER(LEN=*), INTENT(IN)                       :: name
    2067              : 
    2068              :       TYPE(keyword_type), POINTER                        :: keyword
    2069              : 
    2070         8772 :       CPASSERT(.NOT. ASSOCIATED(section))
    2071              :       CALL section_create(section, __LOCATION__, name="coord", &
    2072              :                           description="The positions for "//TRIM(name)//" used for restart", &
    2073         8772 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
    2074         8772 :       NULLIFY (keyword)
    2075              : 
    2076              :       CALL keyword_create(keyword, __LOCATION__, name="_DEFAULT_KEYWORD_", &
    2077              :                           description="Specify positions of the system", repeats=.TRUE., &
    2078         8772 :                           usage="{Real} ...", type_of_var=real_t, n_var=-1)
    2079         8772 :       CALL section_add_keyword(section, keyword)
    2080         8772 :       CALL keyword_release(keyword)
    2081              : 
    2082         8772 :    END SUBROUTINE create_coord_section_cv
    2083              : 
    2084              : ! **************************************************************************************************
    2085              : !> \brief collective variables specifying h bonds
    2086              : !> \param section the section to be created
    2087              : !> \author alin m elena
    2088              : ! **************************************************************************************************
    2089         5848 :    SUBROUTINE create_colvar_wc_section(section)
    2090              :       TYPE(section_type), POINTER                        :: section
    2091              : 
    2092              :       TYPE(keyword_type), POINTER                        :: keyword
    2093              :       TYPE(section_type), POINTER                        :: subsection
    2094              : 
    2095         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
    2096              :       CALL section_create(section, __LOCATION__, name="wc", &
    2097              :                           description="Section to define the hbond wannier centre as a collective variables.", &
    2098         5848 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
    2099         5848 :       NULLIFY (keyword, subsection)
    2100              : 
    2101              :       CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
    2102              :                           description="Parameter used for computing the cutoff radius for searching "// &
    2103              :                           "the wannier centres around an atom", &
    2104              :                           usage="RCUT <REAL>", default_r_val=0.529177208590000_dp, unit_str="angstrom", &
    2105         5848 :                           type_of_var=real_t, repeats=.FALSE.)
    2106         5848 :       CALL section_add_keyword(section, keyword)
    2107         5848 :       CALL keyword_release(keyword)
    2108              : 
    2109              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
    2110              :                           variants=["POINTS"], &
    2111              :                           description="Specifies the indexes of atoms/points defining the bond (Od, H, Oa).", &
    2112              :                           usage="ATOMS {integer} {integer} {integer}", &
    2113        11696 :                           n_var=3, type_of_var=integer_t, repeats=.TRUE.)
    2114         5848 :       CALL section_add_keyword(section, keyword)
    2115         5848 :       CALL keyword_release(keyword)
    2116              : 
    2117              :       ! Must be present in each colvar and handled properly
    2118         5848 :       CALL create_point_section(subsection)
    2119         5848 :       CALL section_add_subsection(section, subsection)
    2120         5848 :       CALL section_release(subsection)
    2121              : 
    2122         5848 :    END SUBROUTINE create_colvar_wc_section
    2123              : 
    2124              :    ! **************************************************************************************************
    2125              : !> \brief collective variables specifying h bonds= wire
    2126              : !> \param section the section to be created
    2127              : !> \author alin m elena
    2128              : ! **************************************************************************************************
    2129         5848 :    SUBROUTINE create_colvar_hbp_section(section)
    2130              :       TYPE(section_type), POINTER                        :: section
    2131              : 
    2132              :       TYPE(keyword_type), POINTER                        :: keyword
    2133              :       TYPE(section_type), POINTER                        :: subsection
    2134              : 
    2135         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
    2136              :       CALL section_create(section, __LOCATION__, name="hbp", &
    2137              :                           description="Section to define the hbond wannier centre as a collective variables.", &
    2138         5848 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
    2139         5848 :       NULLIFY (keyword, subsection)
    2140              : 
    2141              :       CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
    2142              :                           description="Parameter used for computing the cutoff radius for searching "// &
    2143              :                           "the wannier centres around an atom", &
    2144              :                           usage="RCUT <REAL>", default_r_val=0.529177208590000_dp, unit_str="angstrom", &
    2145         5848 :                           type_of_var=real_t, repeats=.FALSE.)
    2146         5848 :       CALL section_add_keyword(section, keyword)
    2147         5848 :       CALL keyword_release(keyword)
    2148              : 
    2149              :       CALL keyword_create(keyword, __LOCATION__, name="SHIFT", &
    2150              :                           description="Parameter used for shifting each term in the sum ", &
    2151              :                           usage="SHIFT <REAL>", default_r_val=0.5_dp, &
    2152         5848 :                           type_of_var=real_t, repeats=.FALSE.)
    2153         5848 :       CALL section_add_keyword(section, keyword)
    2154         5848 :       CALL keyword_release(keyword)
    2155              : 
    2156              :       CALL keyword_create(keyword, __LOCATION__, name="NPOINTS", &
    2157              :                           description="The number of points in the path", &
    2158              :                           usage="NPOINTS {integer}", default_i_val=-1, &
    2159         5848 :                           n_var=1, type_of_var=integer_t, repeats=.FALSE.)
    2160         5848 :       CALL section_add_keyword(section, keyword)
    2161         5848 :       CALL keyword_release(keyword)
    2162              : 
    2163              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
    2164              :                           variants=["POINTS"], &
    2165              :                           description="Specifies the indexes of atoms/points defining the bond (Od, H, Oa).", &
    2166              :                           usage="ATOMS {integer} {integer} {integer}", &
    2167        11696 :                           n_var=3, type_of_var=integer_t, repeats=.TRUE.)
    2168         5848 :       CALL section_add_keyword(section, keyword)
    2169         5848 :       CALL keyword_release(keyword)
    2170              : 
    2171              :       ! Must be present in each colvar and handled properly
    2172         5848 :       CALL create_point_section(subsection)
    2173         5848 :       CALL section_add_subsection(section, subsection)
    2174         5848 :       CALL section_release(subsection)
    2175              : 
    2176         5848 :    END SUBROUTINE create_colvar_hbp_section
    2177              : 
    2178              : ! **************************************************************************************************
    2179              : !> \brief collective variables specifying ring puckering
    2180              : !> \brief D. Cremer and J.A. Pople, JACS 97 1354 (1975)
    2181              : !> \param section the section to be created
    2182              : !> \author Marcel Baer
    2183              : ! **************************************************************************************************
    2184         5848 :    SUBROUTINE create_colvar_ring_puckering_section(section)
    2185              :       TYPE(section_type), POINTER                        :: section
    2186              : 
    2187              :       TYPE(keyword_type), POINTER                        :: keyword
    2188              :       TYPE(section_type), POINTER                        :: subsection
    2189              : 
    2190         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
    2191              :       CALL section_create(section, __LOCATION__, name="RING_PUCKERING", &
    2192              :                           description="Section to define general ring puckering collective variables.", &
    2193         5848 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
    2194              : 
    2195         5848 :       NULLIFY (keyword, subsection)
    2196              : 
    2197              :       CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
    2198              :                           variants=["POINTS"], &
    2199              :                           description="Specifies the indexes of atoms/points defining the ring. "// &
    2200              :                           "At least 4 Atoms are needed.", &
    2201              :                           usage="ATOMS {integer} {integer} {integer} ..", &
    2202        11696 :                           n_var=-1, type_of_var=integer_t)
    2203         5848 :       CALL section_add_keyword(section, keyword)
    2204         5848 :       CALL keyword_release(keyword)
    2205              : 
    2206              :       CALL keyword_create(keyword, __LOCATION__, name="COORDINATE", &
    2207              :                           description="Indicate the coordinate to be used. Follow the Cremer-Pople definition for a N ring. "// &
    2208              :                           "0 is the total puckering variable Q, "// &
    2209              :                           "2..[N/2] are puckering coordinates. "// &
    2210              :                           "-2..-[N/2-1] are puckering angles.", &
    2211              :                           usage="COORDINATE {integer}", default_i_val=0, &
    2212         5848 :                           n_var=1)
    2213         5848 :       CALL section_add_keyword(section, keyword)
    2214         5848 :       CALL keyword_release(keyword)
    2215              : 
    2216              :       ! Must be present in each colvar and handled properly
    2217         5848 :       CALL create_point_section(subsection)
    2218         5848 :       CALL section_add_subsection(section, subsection)
    2219         5848 :       CALL section_release(subsection)
    2220              : 
    2221         5848 :    END SUBROUTINE create_colvar_ring_puckering_section
    2222              : 
    2223              : ! **************************************************************************************************
    2224              : !> \brief Creates the VORONOIIPZ collective variable input section
    2225              : !> \param section the section to create
    2226              : ! **************************************************************************************************
    2227         5848 :    SUBROUTINE create_voronoiipz_section(section)
    2228              :       TYPE(section_type), POINTER                        :: section
    2229              : 
    2230              :       TYPE(keyword_type), POINTER                        :: keyword
    2231              : 
    2232         5848 :       CPASSERT(.NOT. ASSOCIATED(section))
    2233         5848 :       NULLIFY (keyword)
    2234              :       CALL section_create(section, __LOCATION__, name="VORONOIIPZ", &
    2235              :                           description="Absolute location of a hydronium ion along a Cartesian axis, "// &
    2236              :                           "based on continuous Voronoi weights.", &
    2237        11696 :                           citations=[Zhang2025], n_subsections=0, repeats=.FALSE.)
    2238              : 
    2239              :       CALL keyword_create(keyword, __LOCATION__, name="LAMBDA", &
    2240              :                           description="Exponent in the Voronoi weight exp(LAMBDA*r). "// &
    2241              :                           "Negative values assign each hydrogen predominantly to nearby oxygen atoms.", &
    2242              :                           usage="LAMBDA [angstrom^-1] -8.0", type_of_var=real_t, &
    2243              :                           default_r_val=cp_unit_to_cp2k(value=-8.0_dp, unit_str="angstrom^-1"), &
    2244         5848 :                           unit_str="angstrom^-1", n_var=1)
    2245         5848 :       CALL section_add_keyword(section, keyword)
    2246         5848 :       CALL keyword_release(keyword)
    2247              : 
    2248              :       CALL keyword_create(keyword, __LOCATION__, name="ZMID", &
    2249              :                           description="Coordinate of the reference plane along the selected axis.", &
    2250              :                           usage="ZMID [angstrom] 0.0", type_of_var=real_t, default_r_val=0.0_dp, &
    2251         5848 :                           unit_str="angstrom", n_var=1)
    2252         5848 :       CALL section_add_keyword(section, keyword)
    2253         5848 :       CALL keyword_release(keyword)
    2254              : 
    2255              :       CALL keyword_create(keyword, __LOCATION__, name="ZIDX", &
    2256              :                           description="Cartesian direction used for the ion location: 1=X, 2=Y, 3=Z.", &
    2257         5848 :                           usage="ZIDX 3", type_of_var=integer_t, default_i_val=3, n_var=1)
    2258         5848 :       CALL section_add_keyword(section, keyword)
    2259         5848 :       CALL keyword_release(keyword)
    2260              : 
    2261              :       CALL keyword_create(keyword, __LOCATION__, name="D_0", &
    2262              :                           description="Reference coordination of the non-reactive GROUPA atoms.", &
    2263         5848 :                           usage="D_0 2.0", type_of_var=real_t, default_r_val=2.0_dp, n_var=1)
    2264         5848 :       CALL section_add_keyword(section, keyword)
    2265         5848 :       CALL keyword_release(keyword)
    2266              : 
    2267              :       CALL keyword_create(keyword, __LOCATION__, name="D_1", &
    2268              :                           description="Reference coordination of the first reactive GROUPA atom.", &
    2269         5848 :                           usage="D_1 2.0", type_of_var=real_t, default_r_val=2.0_dp, n_var=1)
    2270         5848 :       CALL section_add_keyword(section, keyword)
    2271         5848 :       CALL keyword_release(keyword)
    2272              : 
    2273              :       CALL keyword_create(keyword, __LOCATION__, name="D_2", &
    2274              :                           description="Reference coordination of the second reactive GROUPA atom.", &
    2275         5848 :                           usage="D_2 2.0", type_of_var=real_t, default_r_val=2.0_dp, n_var=1)
    2276         5848 :       CALL section_add_keyword(section, keyword)
    2277         5848 :       CALL keyword_release(keyword)
    2278              : 
    2279              :       CALL keyword_create(keyword, __LOCATION__, name="D_3", &
    2280              :                           description="Reference coordination of the third reactive GROUPA atom.", &
    2281         5848 :                           usage="D_3 2.0", type_of_var=real_t, default_r_val=2.0_dp, n_var=1)
    2282         5848 :       CALL section_add_keyword(section, keyword)
    2283         5848 :       CALL keyword_release(keyword)
    2284              : 
    2285              :       CALL keyword_create(keyword, __LOCATION__, name="NL_CUTOFF", &
    2286              :                           description="Maximum GROUPA-GROUPB distance included in the Voronoi weights.", &
    2287              :                           usage="NL_CUTOFF [angstrom] 2.4", &
    2288              :                           default_r_val=cp_unit_to_cp2k(value=2.4_dp, unit_str="angstrom"), &
    2289         5848 :                           unit_str="angstrom", n_var=1)
    2290         5848 :       CALL section_add_keyword(section, keyword)
    2291         5848 :       CALL keyword_release(keyword)
    2292              : 
    2293              :       CALL keyword_create(keyword, __LOCATION__, name="GROUPA", &
    2294              :                           description="Oxygen atoms used as Voronoi sites. Any reactive sites must "// &
    2295              :                           "be the final NRX entries.", &
    2296         5848 :                           usage="GROUPA 1 4 7", n_var=-1, type_of_var=integer_t)
    2297         5848 :       CALL section_add_keyword(section, keyword)
    2298         5848 :       CALL keyword_release(keyword)
    2299              : 
    2300              :       CALL keyword_create(keyword, __LOCATION__, name="GROUPB", &
    2301              :                           description="Hydrogen atoms assigned to the GROUPA sites.", &
    2302         5848 :                           usage="GROUPB 2 3 5 6 8 9", n_var=-1, type_of_var=integer_t)
    2303         5848 :       CALL section_add_keyword(section, keyword)
    2304         5848 :       CALL keyword_release(keyword)
    2305              : 
    2306              :       CALL keyword_create(keyword, __LOCATION__, name="NRX", &
    2307              :                           description="Number of reactive sites at the end of GROUPA (zero to three). "// &
    2308              :                           "Their reference coordinations are D_1 through D_3.", &
    2309         5848 :                           usage="NRX 0", type_of_var=integer_t, default_i_val=0, n_var=1)
    2310         5848 :       CALL section_add_keyword(section, keyword)
    2311         5848 :       CALL keyword_release(keyword)
    2312              : 
    2313         5848 :    END SUBROUTINE create_voronoiipz_section
    2314              : 
    2315              : END MODULE input_cp2k_colvar
        

Generated by: LCOV version 2.0-1