LCOV - code coverage report
Current view: top level - src - integration_grid_types.F (source / functions) Hit Total Coverage
Test: CP2K Regtests (git:262480d) Lines: 18 38 47.4 %
Date: 2024-11-22 07:00:40 Functions: 2 16 12.5 %

          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             : MODULE integration_grid_types
       9             : 
      10             :    USE kinds,                           ONLY: dp
      11             : #include "./base/base_uses.f90"
      12             : 
      13             :    IMPLICIT NONE
      14             : 
      15             :    PRIVATE
      16             : 
      17             :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'integration_grid_types'
      18             : 
      19             :    TYPE grid_batch_val_1d_type
      20             :       INTEGER                                                  :: np1 = -1
      21             :       REAL(KIND=dp), DIMENSION(:), ALLOCATABLE                 :: val1d
      22             :    END TYPE grid_batch_val_1d_type
      23             : 
      24             :    TYPE grid_batch_val_2d_type
      25             :       INTEGER                                                  :: np1 = -1, np2 = -1
      26             :       REAL(KIND=dp), DIMENSION(:, :), ALLOCATABLE              :: val2d
      27             :    END TYPE grid_batch_val_2d_type
      28             : 
      29             :    TYPE gnlist_type
      30             :       INTEGER, DIMENSION(:), ALLOCATABLE                       :: atom_list
      31             :       REAL(KIND=dp), DIMENSION(:, :), ALLOCATABLE              :: atom_pos
      32             :    END TYPE gnlist_type
      33             : 
      34             :    TYPE grid_batch_info_type
      35             :       INTEGER                                                  :: np = -1
      36             :       INTEGER                                                  :: ref_atom = -1
      37             :       INTEGER                                                  :: ibatch = -1
      38             :       TYPE(gnlist_type)                                        :: gnlist = gnlist_type()
      39             :       REAL(KIND=dp), DIMENSION(3)                              :: rcenter = 0.0_dp
      40             :       REAL(KIND=dp)                                            :: radius = 0.0_dp
      41             :       REAL(dp), DIMENSION(:, :), ALLOCATABLE                   :: rco
      42             :       REAL(dp), DIMENSION(:), ALLOCATABLE                      :: weight
      43             :       REAL(dp), DIMENSION(:), ALLOCATABLE                      :: wref
      44             :       REAL(dp), DIMENSION(:), ALLOCATABLE                      :: wsum
      45             :    END TYPE grid_batch_info_type
      46             : 
      47             :    TYPE integration_grid_type
      48             :       INTEGER                                                  :: nbatch = -1
      49             :       TYPE(grid_batch_info_type), DIMENSION(:), ALLOCATABLE    :: grid_batch
      50             :    END TYPE integration_grid_type
      51             : 
      52             :    TYPE integration_grid_value_type
      53             :       INTEGER                                                  :: nbatch = -1
      54             :       TYPE(grid_batch_val_1d_type), DIMENSION(:), ALLOCATABLE  :: grid_val_1d
      55             :       TYPE(grid_batch_val_2d_type), DIMENSION(:), ALLOCATABLE  :: grid_val_2d
      56             :    END TYPE integration_grid_value_type
      57             : 
      58             :    PUBLIC :: integration_grid_type, allocate_intgrid, deallocate_intgrid
      59             :    PUBLIC :: integration_grid_value_type, allocate_intgrid_val, deallocate_intgrid_val
      60             : 
      61             : ! **************************************************************************************************
      62             : 
      63             : CONTAINS
      64             : 
      65             : ! **************************************************************************************************
      66             : !> \brief   Initialize integration_grid_type
      67             : !> \param int_grid ...
      68             : !> \date    02.2018
      69             : !> \param
      70             : !> \author  JGH
      71             : !> \version 1.0
      72             : ! **************************************************************************************************
      73           4 :    SUBROUTINE allocate_intgrid(int_grid)
      74             : 
      75             :       TYPE(integration_grid_type), POINTER               :: int_grid
      76             : 
      77           4 :       IF (ASSOCIATED(int_grid)) CALL deallocate_intgrid(int_grid)
      78           4 :       ALLOCATE (int_grid)
      79           4 :       int_grid%nbatch = 0
      80             : 
      81           4 :    END SUBROUTINE allocate_intgrid
      82             : 
      83             : ! **************************************************************************************************
      84             : !> \brief   Deallocate integration_grid_type
      85             : !> \param int_grid ...
      86             : !> \date    02.2018
      87             : !> \param
      88             : !> \author  JGH
      89             : !> \version 1.0
      90             : ! **************************************************************************************************
      91           4 :    SUBROUTINE deallocate_intgrid(int_grid)
      92             :       TYPE(integration_grid_type), POINTER               :: int_grid
      93             : 
      94             :       INTEGER                                            :: i
      95             : 
      96           4 :       IF (ASSOCIATED(int_grid)) THEN
      97           4 :          IF (ALLOCATED(int_grid%grid_batch)) THEN
      98         884 :             DO i = 1, int_grid%nbatch
      99         880 :                IF (ALLOCATED(int_grid%grid_batch(i)%rco)) DEALLOCATE (int_grid%grid_batch(i)%rco)
     100         880 :                IF (ALLOCATED(int_grid%grid_batch(i)%weight)) DEALLOCATE (int_grid%grid_batch(i)%weight)
     101         880 :                IF (ALLOCATED(int_grid%grid_batch(i)%wref)) DEALLOCATE (int_grid%grid_batch(i)%wref)
     102         880 :                IF (ALLOCATED(int_grid%grid_batch(i)%wsum)) DEALLOCATE (int_grid%grid_batch(i)%wsum)
     103             :                !
     104         880 :                IF (ALLOCATED(int_grid%grid_batch(i)%gnlist%atom_list)) DEALLOCATE (int_grid%grid_batch(i)%gnlist%atom_list)
     105         884 :                IF (ALLOCATED(int_grid%grid_batch(i)%gnlist%atom_pos)) DEALLOCATE (int_grid%grid_batch(i)%gnlist%atom_pos)
     106             :             END DO
     107         884 :             DEALLOCATE (int_grid%grid_batch)
     108             :          END IF
     109           4 :          DEALLOCATE (int_grid)
     110             :       ELSE
     111             :          CALL cp_abort(__LOCATION__, &
     112             :                        "The pointer int_grid is not associated and "// &
     113           0 :                        "cannot be deallocated")
     114             :       END IF
     115           4 :    END SUBROUTINE deallocate_intgrid
     116             : 
     117             : ! **************************************************************************************************
     118             : !> \brief   Initialize integration_grid_value_type
     119             : !> \param int_grid ...
     120             : !> \date    02.2018
     121             : !> \param
     122             : !> \author  JGH
     123             : !> \version 1.0
     124             : ! **************************************************************************************************
     125           0 :    SUBROUTINE allocate_intgrid_val(int_grid)
     126             : 
     127             :       TYPE(integration_grid_value_type), POINTER         :: int_grid
     128             : 
     129           0 :       IF (ASSOCIATED(int_grid)) CALL deallocate_intgrid_val(int_grid)
     130           0 :       ALLOCATE (int_grid)
     131           0 :       int_grid%nbatch = 0
     132             : 
     133           0 :    END SUBROUTINE allocate_intgrid_val
     134             : 
     135             : ! **************************************************************************************************
     136             : !> \brief   Deallocate integration_grid_value_type
     137             : !> \param int_grid ...
     138             : !> \date    02.2018
     139             : !> \param
     140             : !> \author  JGH
     141             : !> \version 1.0
     142             : ! **************************************************************************************************
     143           0 :    SUBROUTINE deallocate_intgrid_val(int_grid)
     144             :       TYPE(integration_grid_value_type), POINTER         :: int_grid
     145             : 
     146             :       INTEGER                                            :: i
     147             : 
     148           0 :       IF (ASSOCIATED(int_grid)) THEN
     149           0 :          IF (ALLOCATED(int_grid%grid_val_1d)) THEN
     150           0 :             DO i = 1, int_grid%nbatch
     151           0 :                IF (ALLOCATED(int_grid%grid_val_1d(i)%val1d)) DEALLOCATE (int_grid%grid_val_1d(i)%val1d)
     152             :             END DO
     153           0 :             DEALLOCATE (int_grid%grid_val_1d)
     154             :          END IF
     155           0 :          IF (ALLOCATED(int_grid%grid_val_2d)) THEN
     156           0 :             DO i = 1, int_grid%nbatch
     157           0 :                IF (ALLOCATED(int_grid%grid_val_2d(i)%val2d)) DEALLOCATE (int_grid%grid_val_2d(i)%val2d)
     158             :             END DO
     159           0 :             DEALLOCATE (int_grid%grid_val_2d)
     160             :          END IF
     161           0 :          DEALLOCATE (int_grid)
     162             :       ELSE
     163             :          CALL cp_abort(__LOCATION__, &
     164             :                        "The pointer int_grid is not associated and "// &
     165           0 :                        "cannot be deallocated")
     166             :       END IF
     167           0 :    END SUBROUTINE deallocate_intgrid_val
     168             : 
     169           0 : END MODULE integration_grid_types

Generated by: LCOV version 1.15