LCOV - code coverage report
Current view: top level - src - input_cp2k_pwdft.F (source / functions) Hit Total Coverage
Test: CP2K Regtests (git:2fce0f8) Lines: 109 121 90.1 %
Date: 2024-12-21 06:28:57 Functions: 5 5 100.0 %

          Line data    Source code
       1             : !--------------------------------------------------------------------------------------------------!
       2             : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3             : !   Copyright 2000-2024 CP2K developers group <https://cp2k.org>                                   !
       4             : !                                                                                                  !
       5             : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6             : !--------------------------------------------------------------------------------------------------!
       7             : !
       8             : ! **************************************************************************************************
       9             : ! > \brief Creates the PW section of the input
      10             : ! > \par History
      11             : ! >      07.2018 created
      12             : ! > \author JHU
      13             : ! **************************************************************************************************
      14             : 
      15             : MODULE input_cp2k_pwdft
      16             : #if defined(__SIRIUS)
      17             :    USE ISO_C_BINDING, ONLY: C_LOC
      18             :    USE SIRIUS, ONLY: &
      19             :       sirius_option_get, &
      20             :       sirius_option_get_section_length, sirius_option_get_info, &
      21             :       SIRIUS_INTEGER_TYPE, SIRIUS_NUMBER_TYPE, SIRIUS_STRING_TYPE, &
      22             :       SIRIUS_LOGICAL_TYPE, SIRIUS_ARRAY_TYPE, SIRIUS_INTEGER_ARRAY_TYPE, SIRIUS_LOGICAL_ARRAY_TYPE, &
      23             :       SIRIUS_NUMBER_ARRAY_TYPE, SIRIUS_STRING_ARRAY_TYPE, string_f2c
      24             : #endif
      25             :    USE input_keyword_types, ONLY: keyword_create, &
      26             :                                   keyword_release, &
      27             :                                   keyword_type
      28             :    USE input_section_types, ONLY: section_add_keyword, &
      29             :                                   section_add_subsection, &
      30             :                                   section_create, &
      31             :                                   section_release, &
      32             :                                   section_type
      33             :    USE input_val_types, ONLY: char_t, &
      34             :                               integer_t, &
      35             :                               lchar_t, &
      36             :                               logical_t, &
      37             :                               real_t
      38             :    USE cp_output_handling, ONLY: add_last_numeric, &
      39             :                                  cp_print_key_section_create, &
      40             :                                  debug_print_level, &
      41             :                                  high_print_level, &
      42             :                                  low_print_level, &
      43             :                                  medium_print_level, &
      44             :                                  silent_print_level
      45             :    USE kinds, ONLY: dp
      46             :    USE string_utilities, ONLY: s2a
      47             : #include "./base/base_uses.f90"
      48             : 
      49             :    IMPLICIT NONE
      50             :    PRIVATE
      51             : 
      52             :    LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .TRUE.
      53             :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'input_cp2k_pwdft'
      54             : 
      55             :    PUBLIC :: create_pwdft_section
      56             : 
      57             :    INTEGER, PARAMETER, PUBLIC :: SIRIUS_NO_VDW = -1
      58             :    INTEGER, PARAMETER, PUBLIC :: SIRIUS_FUNC_VDWDF = 1
      59             :    INTEGER, PARAMETER, PUBLIC :: SIRIUS_FUNC_VDWDF2 = 2
      60             :    INTEGER, PARAMETER, PUBLIC :: SIRIUS_FUNC_VDWDFCX = 3
      61             : 
      62             : CONTAINS
      63             : 
      64             : #if defined(__SIRIUS)
      65             : ! **************************************************************************************************
      66             : !> \brief Create the input section for PW calculations using SIRIUS
      67             : !> \param section the section to create
      68             : !> \par History
      69             : !>      07.2018 created
      70             : !> \author JHU
      71             : ! **************************************************************************************************
      72        9174 :    SUBROUTINE create_pwdft_section(section)
      73             :       TYPE(section_type), POINTER                        :: section
      74             : 
      75             :       TYPE(keyword_type), POINTER                        :: keyword
      76             :       TYPE(section_type), POINTER                        :: subsection
      77             : 
      78             : !     ------------------------------------------------------------------------
      79             : 
      80        9174 :       CPASSERT(.NOT. ASSOCIATED(section))
      81             :       CALL section_create(section, __LOCATION__, name="PW_DFT", &
      82             :                           description="DFT calculation using plane waves basis can be set in this section. "// &
      83             :                           "The backend called SIRIUS, computes the basic properties of the system, "// &
      84             :                           "such as ground state, forces and stresses tensors which can be used by "// &
      85             :                           "cp2k afterwards. The engine has all these features build-in, support of "// &
      86             :                           "pseudo-potentials and full-potentials, spin-orbit coupling, collinear and "// &
      87             :                           "non collinear magnetism, Hubbard correction, all exchange functionals "// &
      88        9174 :                           "supported by libxc and Van der Waals corrections (libvdwxc).")
      89             : 
      90        9174 :       NULLIFY (keyword)
      91             :       CALL keyword_create(keyword, __LOCATION__, &
      92             :                           name='ignore_convergence_failure', &
      93             :                           description="when set to true, calculation will continue irrespectively "// &
      94             :                           "of the convergence status of SIRIUS", &
      95             :                           type_of_var=logical_t, &
      96             :                           repeats=.FALSE., &
      97             :                           default_l_val=.FALSE., &
      98        9174 :                           lone_keyword_l_val=.TRUE.)
      99        9174 :       CALL section_add_keyword(section, keyword)
     100        9174 :       CALL keyword_release(keyword)
     101             : 
     102        9174 :       NULLIFY (subsection)
     103        9174 :       CALL create_sirius_section(subsection, 'control')
     104        9174 :       CALL section_add_subsection(section, subsection)
     105        9174 :       CALL section_release(subsection)
     106             : 
     107        9174 :       CALL create_sirius_section(subsection, 'parameters')
     108        9174 :       CALL section_add_subsection(section, subsection)
     109        9174 :       CALL section_release(subsection)
     110             : 
     111        9174 :       CALL create_sirius_section(subsection, 'settings')
     112        9174 :       CALL section_add_subsection(section, subsection)
     113        9174 :       CALL section_release(subsection)
     114             : 
     115        9174 :       CALL create_sirius_section(subsection, 'mixer')
     116        9174 :       CALL section_add_subsection(section, subsection)
     117        9174 :       CALL section_release(subsection)
     118             : 
     119        9174 :       CALL create_sirius_section(subsection, 'iterative_solver')
     120        9174 :       CALL section_add_subsection(section, subsection)
     121        9174 :       CALL section_release(subsection)
     122             : 
     123             :       !
     124             :       ! uncomment these lines when nlcg is officialy supported in cp2k
     125             :       !
     126             : 
     127             :       !      CALL create_sirius_section(subsection, 'nlcg')
     128             :       !      CALL section_add_subsection(section, subsection)
     129             :       !      CALL section_release(subsection)
     130             : 
     131        9174 :       CALL create_print_section(subsection)
     132        9174 :       CALL section_add_subsection(section, subsection)
     133        9174 :       CALL section_release(subsection)
     134             : 
     135        9174 :    END SUBROUTINE create_pwdft_section
     136             : 
     137             : ! **************************************************************************************************
     138             : !> \brief input section for PWDFT control
     139             : !> \param section will contain the CONTROL section
     140             : !> \param section_name ...
     141             : !> \author JHU
     142             : ! **************************************************************************************************
     143       45870 :    SUBROUTINE create_sirius_section(section, section_name)
     144             :       TYPE(section_type), POINTER                        :: section
     145             :       CHARACTER(len=*), INTENT(in)                       :: section_name
     146             : 
     147             :       INTEGER                                            :: length
     148             : 
     149           0 :       CPASSERT(.NOT. ASSOCIATED(section))
     150       45870 :       CALL sirius_option_get_section_length(TRIM(ADJUSTL(section_name)), length)
     151             : 
     152             :       CALL section_create(section, __LOCATION__, &
     153             :                           name=TRIM(ADJUSTL(section_name)), &
     154             :                           description=TRIM(section_name)//" section", &
     155             :                           n_subsections=0, &
     156             :                           n_keywords=length, &
     157       45870 :                           repeats=.FALSE.)
     158             : 
     159       45870 :       CALL fill_in_section(section, TRIM(ADJUSTL(section_name)))
     160       45870 :    END SUBROUTINE create_sirius_section
     161             : 
     162             : ! **************************************************************************************************
     163             : !> \brief ...
     164             : !> \param section ...
     165             : !> \param section_name ...
     166             : ! **************************************************************************************************
     167       45870 :    SUBROUTINE fill_in_section(section, section_name)
     168             :       TYPE(section_type), POINTER                        :: section
     169             :       CHARACTER(len=*), INTENT(in)                       :: section_name
     170             : 
     171             :       CHARACTER(len=128)                                 :: name
     172             :       CHARACTER(len=128), TARGET                         :: possible_values(1:16)
     173             :       CHARACTER(len=4096)                                :: description, usage
     174             :       INTEGER                                            :: ctype, enum_i_val(1:16), enum_length, i, &
     175             :                                                             j, length, num_possible_values
     176       45870 :       INTEGER, ALLOCATABLE, DIMENSION(:), TARGET         :: ivec
     177             :       INTEGER, TARGET                                    :: dummy_i
     178             :       LOGICAL                                            :: lvecl(1:16)
     179       45870 :       LOGICAL(4), ALLOCATABLE, DIMENSION(:), TARGET      :: lvec
     180             :       LOGICAL(4), TARGET                                 :: dummy_l
     181       45870 :       REAL(kind=dp), ALLOCATABLE, DIMENSION(:), TARGET   :: rvec
     182             :       REAL(kind=dp), TARGET                              :: dummy_r
     183             :       TYPE(keyword_type), POINTER                        :: keyword
     184             : 
     185       45870 :       ALLOCATE (ivec(1:16))
     186       45870 :       ALLOCATE (rvec(1:16))
     187       45870 :       ALLOCATE (lvec(1:16))
     188             : 
     189             : #ifdef __LIBVDWXC
     190       45870 :       IF (section_name == "parameters") THEN
     191        9174 :          NULLIFY (keyword)
     192             :          CALL keyword_create(keyword, __LOCATION__, name="VDW_FUNCTIONAL", &
     193             :                              description="Select the Van der Walls functionals corrections type", &
     194             :                              default_i_val=SIRIUS_NO_VDW, &
     195             :                              enum_i_vals=(/SIRIUS_NO_VDW, SIRIUS_FUNC_VDWDF, SIRIUS_FUNC_VDWDF2, SIRIUS_FUNC_VDWDFCX/), &
     196             :                              enum_c_vals=s2a("NONE", "FUNC_VDWDF", "FUNC_VDWDF2", "FUNC_VDWDFCX"), &
     197             :                              enum_desc=s2a("No VdW correction", &
     198             :                                            "FUNC_VDWDF", &
     199             :                                            "FUNC_VDWDF2", &
     200        9174 :                                            "FUNC_VDWDFCX"))
     201        9174 :          CALL section_add_keyword(section, keyword)
     202        9174 :          CALL keyword_release(keyword)
     203             :       END IF
     204             : #endif
     205             : 
     206       45870 :       CALL sirius_option_get_section_length(section_name, length)
     207             : 
     208      972444 :       DO i = 1, length
     209      926574 :          NULLIFY (keyword)
     210      926574 :          name = ''
     211      926574 :          description = ''
     212      926574 :          usage = ''
     213             :          CALL sirius_option_get_info(section_name, &
     214             :                                      i, &
     215             :                                      name, &
     216             :                                      128, &
     217             :                                      ctype, &
     218             :                                      num_possible_values, &
     219             :                                      enum_length, &
     220             :                                      description, &
     221             :                                      4096, &
     222             :                                      usage, &
     223      926574 :                                      4096)
     224             :          ! description and usage are ignored here
     225             :          ! it is a minor inconvenience from the api.
     226             : 
     227      926574 :          name = TRIM(ADJUSTL(name))
     228             :          ! I exclude these three keywords because one of them is for debugging
     229             :          ! purpose the other are replaced by a dedicated call in cp2k
     230             :          !
     231             :          ! Moreover xc_functionals would need a special treatment.
     232             : 
     233     1899018 :          IF ((name /= 'xc_functionals') .AND. (name /= 'memory_usage') .AND. (name /= 'vk')) THEN
     234             :             !     we need to null char since SIRIUS interface is basically C
     235      238524 :             SELECT CASE (ctype)
     236             :             CASE (SIRIUS_INTEGER_TYPE)
     237      238524 :                CALL sirius_option_get(section_name, name, ctype, C_LOC(dummy_i))
     238             :                CALL keyword_create(keyword, __LOCATION__, &
     239             :                                    name=TRIM(name), &
     240             :                                    description=TRIM(ADJUSTL(description)), &
     241             :                                    !                                   usage=TRIM(ADJUSTL(usage)), &
     242             :                                    type_of_var=integer_t, &
     243             :                                    repeats=.FALSE., &
     244      238524 :                                    default_i_val=dummy_i)
     245      238524 :                CALL section_add_keyword(section, keyword)
     246      238524 :                CALL keyword_release(keyword)
     247             :             CASE (SIRIUS_NUMBER_TYPE)
     248      256872 :                CALL sirius_option_get(section_name, name, ctype, C_LOC(dummy_r))
     249             :                CALL keyword_create(keyword, __LOCATION__, &
     250             :                                    name=name, &
     251             :                                    description=TRIM(ADJUSTL(description)), &
     252             :                                    !                                   usage=TRIM(ADJUSTL(usage)), &
     253             :                                    type_of_var=real_t, &
     254             :                                    repeats=.FALSE., &
     255      256872 :                                    default_r_val=dummy_r)
     256      256872 :                CALL section_add_keyword(section, keyword)
     257      256872 :                CALL keyword_release(keyword)
     258             :             CASE (SIRIUS_LOGICAL_TYPE)
     259      220176 :                dummy_l = .FALSE.
     260      220176 :                CALL sirius_option_get(section_name, name, ctype, C_LOC(dummy_l))
     261      220176 :                IF (dummy_l) THEN
     262             :                   CALL keyword_create(keyword, __LOCATION__, &
     263             :                                       name=name, &
     264             :                                       description=TRIM(ADJUSTL(description)), &
     265             :                                       !                                      usage=TRIM(ADJUSTL(usage)), &
     266             :                                       type_of_var=logical_t, &
     267             :                                       repeats=.FALSE., &
     268             :                                       default_l_val=.TRUE., &
     269       73392 :                                       lone_keyword_l_val=.TRUE.)
     270             :                ELSE
     271             :                   CALL keyword_create(keyword, __LOCATION__, &
     272             :                                       name=name, &
     273             :                                       description=TRIM(ADJUSTL(description)), &
     274             :                                       !                                      usage=TRIM(ADJUSTL(usage)), &
     275             :                                       type_of_var=logical_t, &
     276             :                                       repeats=.FALSE., &
     277             :                                       default_l_val=.FALSE., &
     278      146784 :                                       lone_keyword_l_val=.TRUE.)
     279             :                END IF
     280      220176 :                CALL section_add_keyword(section, keyword)
     281      220176 :                CALL keyword_release(keyword)
     282             :             CASE (SIRIUS_STRING_TYPE)
     283      146784 :                IF (enum_length >= 1) THEN
     284      605484 :                   DO j = 1, enum_length
     285      477048 :                      possible_values(j) = ''
     286      477048 :                      CALL sirius_option_get(section_name, name, ctype, C_LOC(possible_values(j)), max_length=128, enum_idx=j)
     287      477048 :                      enum_i_val(j) = j
     288      605484 :                      possible_values(j) = TRIM(ADJUSTL(possible_values(j)))
     289             :                   END DO
     290             : 
     291      128436 :                   IF (enum_length > 1) THEN
     292             :                      CALL keyword_create(keyword, __LOCATION__, &
     293             :                                          name=name, &
     294             :                                          description=TRIM(ADJUSTL(description)), &
     295             :                                          !                                      usage=TRIM(ADJUSTL(usage)), &
     296             :                                          repeats=.FALSE., &
     297             :                                          enum_i_vals=enum_i_val(1:enum_length), &
     298             :                                          enum_c_vals=possible_values(1:enum_length), &
     299      128436 :                                          default_i_val=1)
     300             :                   ELSE
     301             :                      CALL keyword_create(keyword, __LOCATION__, &
     302             :                                          name=name, &
     303             :                                          description=TRIM(ADJUSTL(description)), &
     304             :                                          !                                      usage=TRIM(ADJUSTL(usage)), &
     305             :                                          type_of_var=char_t, &
     306             :                                          default_c_val=possible_values(1), &
     307           0 :                                          repeats=.FALSE.)
     308             :                   END IF
     309             :                ELSE
     310             :                   CALL keyword_create(keyword, __LOCATION__, &
     311             :                                       name=name, &
     312             :                                       description=TRIM(ADJUSTL(description)), &
     313             :                                       !                                      usage=TRIM(ADJUSTL(usage)), &
     314             :                                       type_of_var=char_t, &
     315             :                                       default_c_val='', &
     316       18348 :                                       repeats=.FALSE.)
     317             :                END IF
     318      146784 :                CALL section_add_keyword(section, keyword)
     319      146784 :                CALL keyword_release(keyword)
     320             :             CASE (SIRIUS_INTEGER_ARRAY_TYPE)
     321       36696 :                CALL sirius_option_get(section_name, name, ctype, C_LOC(ivec(1)), max_length=16)
     322             : 
     323       36696 :                IF (num_possible_values .EQ. 0) THEN
     324             :                   CALL keyword_create(keyword, __LOCATION__, &
     325             :                                       name=name, &
     326             :                                       description=TRIM(ADJUSTL(description)), &
     327             :                                       type_of_var=integer_t, &
     328             :                                       n_var=-1, &
     329           0 :                                       repeats=.FALSE.)
     330             :                ELSE
     331             :                   CALL keyword_create(keyword, __LOCATION__, &
     332             :                                       name=name, &
     333             :                                       description=TRIM(ADJUSTL(description)), &
     334             :                                       type_of_var=integer_t, &
     335             :                                       repeats=.FALSE., &
     336             :                                       n_var=num_possible_values, &
     337       36696 :                                       default_i_vals=ivec(1:num_possible_values))
     338             :                END IF
     339       36696 :                CALL section_add_keyword(section, keyword)
     340       36696 :                CALL keyword_release(keyword)
     341             :             CASE (SIRIUS_LOGICAL_ARRAY_TYPE)
     342           0 :                CALL sirius_option_get(section_name, name, ctype, C_LOC(lvec(1)), max_length=16)
     343           0 :                DO j = 1, num_possible_values
     344           0 :                   lvecl(j) = lvec(j)
     345             :                END DO
     346           0 :                IF (num_possible_values > 0) THEN
     347             :                   CALL keyword_create(keyword, __LOCATION__, &
     348             :                                       name=name, &
     349             :                                       description=TRIM(ADJUSTL(description)), &
     350             :                                       !usage=TRIM(ADJUSTL(usage)), &
     351             :                                       type_of_var=logical_t, &
     352             :                                       repeats=.FALSE., &
     353             :                                       n_var=num_possible_values, &
     354           0 :                                       default_l_vals=lvecl(1:num_possible_values))
     355             :                ELSE
     356             :                   CALL keyword_create(keyword, __LOCATION__, &
     357             :                                       name=name, &
     358             :                                       description=TRIM(ADJUSTL(description)), &
     359             :                                       !usage=TRIM(ADJUSTL(usage)), &
     360             :                                       type_of_var=logical_t, &
     361             :                                       repeats=.FALSE., &
     362           0 :                                       n_var=-1)
     363             :                END IF
     364           0 :                CALL section_add_keyword(section, keyword)
     365           0 :                CALL keyword_release(keyword)
     366             :             CASE (SIRIUS_NUMBER_ARRAY_TYPE)
     367        9174 :                CALL sirius_option_get(section_name, name, ctype, C_LOC(rvec(1)), max_length=16)
     368             : 
     369        9174 :                IF (num_possible_values .EQ. 0) THEN
     370             :                   CALL keyword_create(keyword, __LOCATION__, &
     371             :                                       name=name, &
     372             :                                       description=TRIM(ADJUSTL(description)), &
     373             :                                       !                                   usage=TRIM(ADJUSTL(usage)), &
     374             :                                       type_of_var=real_t, &
     375             :                                       repeats=.FALSE., &
     376           0 :                                       n_var=-1)
     377             :                ELSE
     378             :                   CALL keyword_create(keyword, __LOCATION__, &
     379             :                                       name=name, &
     380             :                                       description=TRIM(ADJUSTL(description)), &
     381             :                                       !     usage=TRIM(ADJUSTL(usage)), &
     382             :                                       type_of_var=real_t, &
     383             :                                       repeats=.FALSE., &
     384             :                                       n_var=num_possible_values, &
     385        9174 :                                       default_r_vals=rvec(1:num_possible_values))
     386             :                END IF
     387        9174 :                CALL section_add_keyword(section, keyword)
     388      917400 :                CALL keyword_release(keyword)
     389             :             CASE default
     390             :             END SELECT
     391             :          END IF
     392             :       END DO
     393       91740 :    END SUBROUTINE fill_in_section
     394             : 
     395             : ! **************************************************************************************************
     396             : !> \brief Create the print section for sirius
     397             : !> \param section the section to create
     398             : !> \author jgh
     399             : ! **************************************************************************************************
     400        9174 :    SUBROUTINE create_print_section(section)
     401             :       TYPE(section_type), POINTER                        :: section
     402             : 
     403             :       TYPE(section_type), POINTER                        :: print_key
     404             : 
     405        9174 :       CPASSERT(.NOT. ASSOCIATED(section))
     406             :       CALL section_create(section, __LOCATION__, name="PRINT", &
     407             :                           description="Section of possible print options in PW_DFT code.", &
     408        9174 :                           n_keywords=0, n_subsections=1, repeats=.FALSE.)
     409             : 
     410        9174 :       NULLIFY (print_key)
     411        9174 :       CALL create_dos_section(print_key)
     412        9174 :       CALL section_add_subsection(section, print_key)
     413        9174 :       CALL section_release(print_key)
     414             : 
     415        9174 :    END SUBROUTINE create_print_section
     416             : 
     417             : ! **************************************************************************************************
     418             : !> \brief ...
     419             : !> \param print_key ...
     420             : ! **************************************************************************************************
     421        9174 :    SUBROUTINE create_dos_section(print_key)
     422             : 
     423             :       TYPE(section_type), POINTER                        :: print_key
     424             : 
     425             :       TYPE(keyword_type), POINTER                        :: keyword
     426             : 
     427        9174 :       NULLIFY (keyword)
     428             : 
     429             :       CALL cp_print_key_section_create(print_key, __LOCATION__, "DOS", &
     430             :                                        description="Print Density of States (DOS) (only available states from SCF)", &
     431        9174 :                                        print_level=debug_print_level, common_iter_levels=1, filename="")
     432             : 
     433             :       CALL keyword_create(keyword, __LOCATION__, name="APPEND", &
     434             :                           description="Append the DOS obtained at different iterations to the output file. "// &
     435             :                           "By default the file is overwritten", &
     436             :                           usage="APPEND", default_l_val=.FALSE., &
     437        9174 :                           lone_keyword_l_val=.TRUE.)
     438        9174 :       CALL section_add_keyword(print_key, keyword)
     439        9174 :       CALL keyword_release(keyword)
     440             : 
     441             :       CALL keyword_create(keyword, __LOCATION__, name="DELTA_E", &
     442             :                           description="Histogramm energy spacing.", &
     443        9174 :                           usage="DELTA_E 0.0005", type_of_var=real_t, default_r_val=0.001_dp)
     444        9174 :       CALL section_add_keyword(print_key, keyword)
     445        9174 :       CALL keyword_release(keyword)
     446             : 
     447        9174 :    END SUBROUTINE create_dos_section
     448             : 
     449             : #else
     450             : ! **************************************************************************************************
     451             : !> \brief ...
     452             : !> \param section ...
     453             : ! **************************************************************************************************
     454             :    SUBROUTINE create_pwdft_section(section)
     455             :       TYPE(section_type), POINTER                        :: section
     456             : 
     457             :       CPASSERT(.NOT. ASSOCIATED(section))
     458             : 
     459             :       CALL section_create(section, __LOCATION__, name="PW_DFT", &
     460             :                           description="This section contains all information to run an "// &
     461             :                           "SIRIUS PW calculation.", &
     462             :                           n_subsections=0, &
     463             :                           repeats=.FALSE.)
     464             : 
     465             :    END SUBROUTINE create_pwdft_section
     466             : 
     467             : #endif
     468             : 
     469             : END MODULE input_cp2k_pwdft

Generated by: LCOV version 1.15