LCOV - code coverage report
Current view: top level - src - qs_fb_trial_fns_types.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:123285f) Lines: 72.3 % 47 34
Test Date: 2026-11-04 00:58:17 Functions: 60.0 % 10 6

            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              : MODULE qs_fb_trial_fns_types
       9              : 
      10              : #include "./base/base_uses.f90"
      11              :    IMPLICIT NONE
      12              : 
      13              :    PRIVATE
      14              : 
      15              : ! public types
      16              :    PUBLIC :: fb_trial_fns_obj
      17              : 
      18              : ! public methods
      19              : !API
      20              :    PUBLIC :: fb_trial_fns_release, &
      21              :              fb_trial_fns_nullify, &
      22              :              fb_trial_fns_associate, &
      23              :              fb_trial_fns_has_data, &
      24              :              fb_trial_fns_create, &
      25              :              fb_trial_fns_get, &
      26              :              fb_trial_fns_set
      27              : 
      28              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_fb_trial_fns_types'
      29              : 
      30              : ! **************************************************************************************************
      31              : !> \brief data containing information on trial functions used by filter
      32              : !>        matrix diagonalisation method
      33              : !> \param nfunctions : nfunctions(ikind) = number of trial functions for
      34              : !>                     atomic kind ikind
      35              : !> \param functions  : functions(itrial,ikind) = the index of the
      36              : !>                     GTO atomic orbital corresponding to itrial-th trial
      37              : !>                     function for kind ikind
      38              : !> \author Lianheng Tong (LT) lianheng.tong@kcl.ac.uk
      39              : ! **************************************************************************************************
      40              :    TYPE fb_trial_fns_data
      41              :       INTEGER, DIMENSION(:), POINTER :: nfunctions => NULL()
      42              :       INTEGER, DIMENSION(:, :), POINTER :: functions => NULL()
      43              :    END TYPE fb_trial_fns_data
      44              : 
      45              : ! **************************************************************************************************
      46              : !> \brief the object container which allows for the creation of an array
      47              : !>        of pointers to fb_trial_fns objects
      48              : !> \param obj : pointer to the fb_trial_fns object
      49              : !> \author Lianheng Tong (LT) lianheng.tong@kcl.ac.uk
      50              : ! **************************************************************************************************
      51              :    TYPE fb_trial_fns_obj
      52              :       TYPE(fb_trial_fns_data), POINTER, PRIVATE :: obj => NULL()
      53              :    END TYPE fb_trial_fns_obj
      54              : 
      55              : CONTAINS
      56              : 
      57              : ! **************************************************************************************************
      58              : !> \brief releases given object
      59              : !> \brief ...
      60              : !> \param trial_fns : the fb_trial_fns object in question
      61              : !> \author Lianheng Tong (LT) lianheng.tong@kcl.ac.uk
      62              : ! **************************************************************************************************
      63           90 :    SUBROUTINE fb_trial_fns_release(trial_fns)
      64              :       TYPE(fb_trial_fns_obj), INTENT(INOUT)              :: trial_fns
      65              : 
      66           90 :       IF (ASSOCIATED(trial_fns%obj)) THEN
      67           80 :          IF (ASSOCIATED(trial_fns%obj%nfunctions)) THEN
      68           80 :             DEALLOCATE (trial_fns%obj%nfunctions)
      69              :          END IF
      70           80 :          IF (ASSOCIATED(trial_fns%obj%functions)) THEN
      71           80 :             DEALLOCATE (trial_fns%obj%functions)
      72              :          END IF
      73           80 :          DEALLOCATE (trial_fns%obj)
      74              :       ELSE
      75           10 :          NULLIFY (trial_fns%obj)
      76              :       END IF
      77           90 :    END SUBROUTINE fb_trial_fns_release
      78              : 
      79              : ! **************************************************************************************************
      80              : !> \brief nullifies the content of given object
      81              : !> \param trial_fns : the fb_trial_fns object in question
      82              : !> \author Lianheng Tong (LT) lianheng.tong@kcl.ac.uk
      83              : ! **************************************************************************************************
      84          170 :    SUBROUTINE fb_trial_fns_nullify(trial_fns)
      85              :       TYPE(fb_trial_fns_obj), INTENT(INOUT)              :: trial_fns
      86              : 
      87          170 :       NULLIFY (trial_fns%obj)
      88          170 :    END SUBROUTINE fb_trial_fns_nullify
      89              : 
      90              : ! **************************************************************************************************
      91              : !> \brief associates the content of an object to that of another object
      92              : !>        of the same type
      93              : !> \param a : the output object
      94              : !> \param b : the input object
      95              : !> \author Lianheng Tong (LT) lianheng.tong@kcl.ac.uk
      96              : ! **************************************************************************************************
      97           80 :    SUBROUTINE fb_trial_fns_associate(a, b)
      98              :       TYPE(fb_trial_fns_obj), INTENT(INOUT)              :: a
      99              :       TYPE(fb_trial_fns_obj), INTENT(IN)                 :: b
     100              : 
     101           80 :       CALL fb_trial_fns_release(a)
     102           80 :       a%obj => b%obj
     103           80 :    END SUBROUTINE fb_trial_fns_associate
     104              : 
     105              : ! **************************************************************************************************
     106              : !> \brief check if the object has data associated to it
     107              : !> \param trial_fns : the fb_trial_fns object in question
     108              : !> \return : true if trial_fns%obj is associated, false otherwise
     109              : !> \author Lianheng Tong (LT) lianheng.tong@kcl.ac.uk
     110              : ! **************************************************************************************************
     111            0 :    FUNCTION fb_trial_fns_has_data(trial_fns) RESULT(res)
     112              :       TYPE(fb_trial_fns_obj), INTENT(IN)                 :: trial_fns
     113              :       LOGICAL                                            :: res
     114              : 
     115            0 :       res = ASSOCIATED(trial_fns%obj)
     116            0 :    END FUNCTION fb_trial_fns_has_data
     117              : 
     118              : ! **************************************************************************************************
     119              : !> \brief creates an fb_trial_fns object and initialises it
     120              : !> \param trial_fns : the fb_trial_fns object in question
     121              : !> \author Lianheng Tong (LT) lianheng.tong@kcl.ac.uk
     122              : ! **************************************************************************************************
     123           80 :    SUBROUTINE fb_trial_fns_create(trial_fns)
     124              :       TYPE(fb_trial_fns_obj), INTENT(INOUT)              :: trial_fns
     125              : 
     126           80 :       CPASSERT(.NOT. ASSOCIATED(trial_fns%obj))
     127           80 :       ALLOCATE (trial_fns%obj)
     128              :       NULLIFY (trial_fns%obj%nfunctions)
     129              :       NULLIFY (trial_fns%obj%functions)
     130           80 :    END SUBROUTINE fb_trial_fns_create
     131              : 
     132              : ! **************************************************************************************************
     133              : !> \brief initialises an fb_trial_fns object
     134              : !> \param trial_fns : the fb_trial_fns object in question
     135              : !> \author Lianheng Tong (LT) lianheng.tong@kcl.ac.uk
     136              : ! **************************************************************************************************
     137            0 :    SUBROUTINE fb_trial_fns_init(trial_fns)
     138              :       TYPE(fb_trial_fns_obj), INTENT(INOUT)              :: trial_fns
     139              : 
     140            0 :       CPASSERT(ASSOCIATED(trial_fns%obj))
     141              :       ! if halo_atoms are associated, then deallocate and de-associate
     142            0 :       IF (ASSOCIATED(trial_fns%obj%nfunctions)) THEN
     143            0 :          DEALLOCATE (trial_fns%obj%nfunctions)
     144              :       END IF
     145            0 :       IF (ASSOCIATED(trial_fns%obj%functions)) THEN
     146            0 :          DEALLOCATE (trial_fns%obj%functions)
     147              :       END IF
     148            0 :    END SUBROUTINE fb_trial_fns_init
     149              : 
     150              : ! **************************************************************************************************
     151              : !> \brief get values of the attributes of a fb_trial_fns object
     152              : !> \param trial_fns  : the fb_trial_fns object in question
     153              : !> \param nfunctions : outputs pointer to trial_fns%obj%nfunctions
     154              : !> \param functions  : outputs pointer to trial_fns%obj%functions
     155              : !> \author Lianheng Tong (LT) lianheng.tong@kcl.ac.uk
     156              : ! **************************************************************************************************
     157          400 :    SUBROUTINE fb_trial_fns_get(trial_fns, &
     158              :                                nfunctions, &
     159              :                                functions)
     160              :       TYPE(fb_trial_fns_obj), INTENT(IN)                 :: trial_fns
     161              :       INTEGER, DIMENSION(:), OPTIONAL, POINTER           :: nfunctions
     162              :       INTEGER, DIMENSION(:, :), OPTIONAL, POINTER        :: functions
     163              : 
     164          400 :       CPASSERT(ASSOCIATED(trial_fns%obj))
     165          400 :       IF (PRESENT(nfunctions)) nfunctions => trial_fns%obj%nfunctions
     166          400 :       IF (PRESENT(functions)) functions => trial_fns%obj%functions
     167          400 :    END SUBROUTINE fb_trial_fns_get
     168              : 
     169              : ! **************************************************************************************************
     170              : !> \brief sets the attributes of a fb_trial_fns object
     171              : !> \param trial_fns  : the fb_trial_fns object in question
     172              : !> \param nfunctions : associates trial_fns%obj%nfunctions to this pointer
     173              : !> \param functions  : associates trial_fns%obj%nfunctions to this pointer
     174              : !> \author Lianheng Tong (LT) lianheng.tong@kcl.ac.uk
     175              : ! **************************************************************************************************
     176           80 :    SUBROUTINE fb_trial_fns_set(trial_fns, &
     177              :                                nfunctions, &
     178              :                                functions)
     179              :       TYPE(fb_trial_fns_obj), INTENT(INOUT)              :: trial_fns
     180              :       INTEGER, DIMENSION(:), OPTIONAL, POINTER           :: nfunctions
     181              :       INTEGER, DIMENSION(:, :), OPTIONAL, POINTER        :: functions
     182              : 
     183           80 :       CPASSERT(ASSOCIATED(trial_fns%obj))
     184           80 :       IF (PRESENT(nfunctions)) THEN
     185           80 :          IF (ASSOCIATED(trial_fns%obj%nfunctions)) THEN
     186            0 :             DEALLOCATE (trial_fns%obj%nfunctions)
     187              :          END IF
     188           80 :          trial_fns%obj%nfunctions => nfunctions
     189              :       END IF
     190           80 :       IF (PRESENT(functions)) THEN
     191           80 :          IF (ASSOCIATED(trial_fns%obj%functions)) THEN
     192            0 :             DEALLOCATE (trial_fns%obj%functions)
     193              :          END IF
     194           80 :          trial_fns%obj%functions => functions
     195              :       END IF
     196           80 :    END SUBROUTINE fb_trial_fns_set
     197              : 
     198            0 : END MODULE qs_fb_trial_fns_types
        

Generated by: LCOV version 2.0-1