LCOV - code coverage report
Current view: top level - src - qs_integral_utils.F (source / functions) Hit Total Coverage
Test: CP2K Regtests (git:2fce0f8) Lines: 17 30 56.7 %
Date: 2024-12-21 06:28:57 Functions: 3 5 60.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 Some utility functions for the calculation of integrals
      10             : !> \par History
      11             : !>      JGH: initial version
      12             : !> \author JGH (10.07.2014)
      13             : ! **************************************************************************************************
      14             : MODULE qs_integral_utils
      15             : 
      16             :    USE basis_set_types,                 ONLY: gto_basis_set_p_type,&
      17             :                                               gto_basis_set_type
      18             :    USE orbital_pointers,                ONLY: init_orbital_pointers
      19             :    USE qs_kind_types,                   ONLY: get_qs_kind,&
      20             :                                               get_qs_kind_set,&
      21             :                                               qs_kind_type
      22             : #include "./base/base_uses.f90"
      23             : 
      24             :    IMPLICIT NONE
      25             : 
      26             :    PRIVATE
      27             : 
      28             : ! *** Global parameters ***
      29             : 
      30             :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_integral_utils'
      31             : 
      32             : ! *** Interfaces ***
      33             : 
      34             :    INTERFACE get_memory_usage
      35             :       MODULE PROCEDURE get_memory_usage_a, get_memory_usage_ab, &
      36             :          get_memory_usage_abc, get_memory_usage_abcd
      37             :    END INTERFACE
      38             : 
      39             : ! *** Public subroutines ***
      40             : 
      41             :    PUBLIC :: get_memory_usage, basis_set_list_setup
      42             : 
      43             : CONTAINS
      44             : 
      45             : ! **************************************************************************************************
      46             : !> \brief Return the maximum memory usage in integral calculations
      47             : !> \param qs_kind_set The info for all atomic kinds
      48             : !> \param basis_type_a  Type of basis
      49             : !> \return Result
      50             : ! **************************************************************************************************
      51     2974507 :    FUNCTION get_memory_usage_a(qs_kind_set, basis_type_a) RESULT(ldmem)
      52             : 
      53             :       TYPE(qs_kind_type), DIMENSION(:), POINTER          :: qs_kind_set
      54             :       CHARACTER(LEN=*), INTENT(IN)                       :: basis_type_a
      55             :       INTEGER                                            :: ldmem
      56             : 
      57             :       INTEGER                                            :: maxc, maxl, maxs
      58             : 
      59             :       CALL get_qs_kind_set(qs_kind_set=qs_kind_set, &
      60             :                            maxco=maxc, maxlgto=maxl, maxsgf=maxs, &
      61     2974507 :                            basis_type=basis_type_a)
      62     2974507 :       ldmem = MAX(maxc, maxs)
      63             : 
      64     2974507 :       CALL init_orbital_pointers(maxl + 2)
      65             : 
      66     2974507 :    END FUNCTION get_memory_usage_a
      67             : 
      68             : ! **************************************************************************************************
      69             : !> \brief Return the maximum memory usage in integral calculations
      70             : !> \param qs_kind_set The info for all atomic kinds
      71             : !> \param basis_type_a  Type of basis
      72             : !> \param basis_type_b  Type of basis
      73             : !> \return Result
      74             : ! **************************************************************************************************
      75     1476801 :    FUNCTION get_memory_usage_ab(qs_kind_set, basis_type_a, basis_type_b) RESULT(ldmem)
      76             : 
      77             :       TYPE(qs_kind_type), DIMENSION(:), POINTER          :: qs_kind_set
      78             :       CHARACTER(LEN=*), INTENT(IN)                       :: basis_type_a, basis_type_b
      79             :       INTEGER                                            :: ldmem
      80             : 
      81             :       INTEGER                                            :: lda, ldb
      82             : 
      83     1476801 :       lda = get_memory_usage_a(qs_kind_set, basis_type_a)
      84     1476801 :       ldb = get_memory_usage_a(qs_kind_set, basis_type_b)
      85     1476801 :       ldmem = MAX(lda, ldb)
      86             : 
      87     1476801 :    END FUNCTION get_memory_usage_ab
      88             : 
      89             : ! **************************************************************************************************
      90             : !> \brief Return the maximum memory usage in integral calculations
      91             : !> \param qs_kind_set The info for all atomic kinds
      92             : !> \param basis_type_a  Type of basis
      93             : !> \param basis_type_b  Type of basis
      94             : !> \param basis_type_c  Type of basis
      95             : !> \return Result
      96             : ! **************************************************************************************************
      97           0 :    FUNCTION get_memory_usage_abc(qs_kind_set, basis_type_a, &
      98             :                                  basis_type_b, basis_type_c) RESULT(ldmem)
      99             : 
     100             :       TYPE(qs_kind_type), DIMENSION(:), POINTER          :: qs_kind_set
     101             :       CHARACTER(LEN=*), INTENT(IN)                       :: basis_type_a, basis_type_b, basis_type_c
     102             :       INTEGER                                            :: ldmem
     103             : 
     104             :       INTEGER                                            :: lda, ldb, ldc
     105             : 
     106           0 :       lda = get_memory_usage_a(qs_kind_set, basis_type_a)
     107           0 :       ldb = get_memory_usage_a(qs_kind_set, basis_type_b)
     108           0 :       ldc = get_memory_usage_a(qs_kind_set, basis_type_c)
     109           0 :       ldmem = MAX(lda, ldb, ldc)
     110             : 
     111           0 :    END FUNCTION get_memory_usage_abc
     112             : 
     113             : ! **************************************************************************************************
     114             : !> \brief Return the maximum memory usage in integral calculations
     115             : !> \param qs_kind_set The info for all atomic kinds
     116             : !> \param basis_type_a  Type of basis
     117             : !> \param basis_type_b  Type of basis
     118             : !> \param basis_type_c  Type of basis
     119             : !> \param basis_type_d  Type of basis
     120             : !> \return Result
     121             : ! **************************************************************************************************
     122           0 :    FUNCTION get_memory_usage_abcd(qs_kind_set, basis_type_a, &
     123             :                                   basis_type_b, basis_type_c, basis_type_d) RESULT(ldmem)
     124             : 
     125             :       TYPE(qs_kind_type), DIMENSION(:), POINTER          :: qs_kind_set
     126             :       CHARACTER(LEN=*), INTENT(IN)                       :: basis_type_a, basis_type_b, &
     127             :                                                             basis_type_c, basis_type_d
     128             :       INTEGER                                            :: ldmem
     129             : 
     130             :       INTEGER                                            :: lda, ldb, ldc, ldd
     131             : 
     132           0 :       lda = get_memory_usage_a(qs_kind_set, basis_type_a)
     133           0 :       ldb = get_memory_usage_a(qs_kind_set, basis_type_b)
     134           0 :       ldc = get_memory_usage_a(qs_kind_set, basis_type_c)
     135           0 :       ldd = get_memory_usage_a(qs_kind_set, basis_type_d)
     136           0 :       ldmem = MAX(lda, ldb, ldc, ldd)
     137             : 
     138           0 :    END FUNCTION get_memory_usage_abcd
     139             : 
     140             : ! **************************************************************************************************
     141             : 
     142             : ! **************************************************************************************************
     143             : !> \brief Set up an easy accessible list of the basis sets for all kinds
     144             : !> \param basis_set_list    The basis set list
     145             : !> \param basis_type ...
     146             : !> \param qs_kind_set   Kind information, the basis is used
     147             : ! **************************************************************************************************
     148      116723 :    SUBROUTINE basis_set_list_setup(basis_set_list, basis_type, qs_kind_set)
     149             : 
     150             :       TYPE(gto_basis_set_p_type), DIMENSION(:)           :: basis_set_list
     151             :       CHARACTER(len=*), INTENT(IN)                       :: basis_type
     152             :       TYPE(qs_kind_type), DIMENSION(:), POINTER          :: qs_kind_set
     153             : 
     154             :       INTEGER                                            :: ikind
     155             :       TYPE(gto_basis_set_type), POINTER                  :: basis_set
     156             :       TYPE(qs_kind_type), POINTER                        :: qs_kind
     157             : 
     158             :       ! set up basis sets
     159      335567 :       DO ikind = 1, SIZE(qs_kind_set)
     160      218844 :          qs_kind => qs_kind_set(ikind)
     161             :          CALL get_qs_kind(qs_kind=qs_kind, basis_set=basis_set, &
     162      218844 :                           basis_type=basis_type)
     163      218844 :          NULLIFY (basis_set_list(ikind)%gto_basis_set)
     164      335567 :          IF (ASSOCIATED(basis_set)) basis_set_list(ikind)%gto_basis_set => basis_set
     165             :       END DO
     166             : 
     167      116723 :    END SUBROUTINE basis_set_list_setup
     168             : 
     169             : ! **************************************************************************************************
     170             : 
     171             : END MODULE qs_integral_utils
     172             : 

Generated by: LCOV version 1.15