LCOV - code coverage report
Current view: top level - src - kg_environment_types.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:42dac4a) Lines: 91.4 % 35 32
Test Date: 2025-07-25 12:55:17 Functions: 20.0 % 5 1

            Line data    Source code
       1              : !--------------------------------------------------------------------------------------------------!
       2              : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3              : !   Copyright 2000-2025 CP2K developers group <https://cp2k.org>                                   !
       4              : !                                                                                                  !
       5              : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6              : !--------------------------------------------------------------------------------------------------!
       7              : 
       8              : ! **************************************************************************************************
       9              : !> \brief Types needed for a Kim-Gordon-like partitioning into molecular
      10              : !>        subunits
      11              : !> \par History
      12              : !>       2012.07 created [Martin Haeufel]
      13              : !> \author Martin Haeufel
      14              : ! **************************************************************************************************
      15              : MODULE kg_environment_types
      16              :    USE cp_dbcsr_api,                    ONLY: dbcsr_p_type
      17              :    USE cp_dbcsr_operations,             ONLY: dbcsr_deallocate_matrix_set
      18              :    USE input_section_types,             ONLY: section_vals_type
      19              :    USE integration_grid_types,          ONLY: deallocate_intgrid,&
      20              :                                               integration_grid_type
      21              :    USE kinds,                           ONLY: dp
      22              :    USE lri_environment_types,           ONLY: lri_density_release,&
      23              :                                               lri_density_type,&
      24              :                                               lri_env_release,&
      25              :                                               lri_environment_type
      26              :    USE molecule_types,                  ONLY: molecule_type
      27              :    USE qs_dispersion_types,             ONLY: qs_dispersion_type
      28              :    USE qs_grid_atom,                    ONLY: atom_integration_grid_type,&
      29              :                                               deallocate_atom_int_grid
      30              :    USE qs_neighbor_list_types,          ONLY: neighbor_list_set_p_type,&
      31              :                                               release_neighbor_list_sets
      32              :    USE task_list_types,                 ONLY: deallocate_task_list,&
      33              :                                               task_list_type
      34              : #include "./base/base_uses.f90"
      35              : 
      36              :    IMPLICIT NONE
      37              : 
      38              :    PRIVATE
      39              : 
      40              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'kg_environment_types'
      41              : 
      42              :    PUBLIC :: kg_environment_type, kg_env_release, energy_correction_type
      43              : 
      44              :    TYPE subset_type
      45              :       TYPE(neighbor_list_set_p_type), DIMENSION(:), POINTER :: sab_orb => NULL()
      46              :       TYPE(task_list_type), POINTER :: task_list => NULL()
      47              :    END TYPE subset_type
      48              : 
      49              : ! *****************************************************************************
      50              : !> \brief Contains information on the energy correction functional for KG
      51              : !> \par History
      52              : !>       03.2014 created
      53              : !> \author JGH
      54              : ! *****************************************************************************
      55              :    TYPE energy_correction_type
      56              :       CHARACTER(len=20)                                :: ec_name = ""
      57              :       INTEGER                                          :: energy_functional = -1
      58              :       INTEGER                                          :: ks_solver = -1
      59              :       INTEGER                                          :: factorization = -1
      60              :       REAL(KIND=dp)                                    :: eps_default = 0.0_dp
      61              :       ! basis set
      62              :       CHARACTER(len=20)                                :: basis = ""
      63              :       LOGICAL                                          :: mao = .FALSE.
      64              :       INTEGER                                          :: mao_max_iter = -1
      65              :       REAL(KIND=dp)                                    :: mao_eps_grad = 0.0_dp
      66              :       ! energy components
      67              :       REAL(KIND=dp)                                    :: etotal = 0.0_dp
      68              :       REAL(KIND=dp)                                    :: eband = 0.0_dp, exc = 0.0_dp, ehartree = 0.0_dp, vhxc = 0.0_dp
      69              :       REAL(KIND=dp)                                    :: edispersion = 0.0_dp
      70              :       ! full neighbor lists and corresponding task list
      71              :       TYPE(neighbor_list_set_p_type), &
      72              :          DIMENSION(:), POINTER                         :: sab_orb => NULL(), sac_ppl => NULL(), sap_ppnl => NULL()
      73              :       TYPE(task_list_type), POINTER                    :: task_list => NULL()
      74              :       ! the XC function to be used for the correction, dispersion info
      75              :       TYPE(section_vals_type), POINTER                 :: xc_section => NULL()
      76              :       TYPE(qs_dispersion_type), POINTER                :: dispersion_env => NULL()
      77              :       ! matrices in complete basis
      78              :       ! KS: Kohn-Sham; H: Core; S: overlap; T: kinetic energy;
      79              :       TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER  :: matrix_ks => NULL()
      80              :       TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER  :: matrix_h => NULL()
      81              :       TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER  :: matrix_s => NULL()
      82              :       TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER  :: matrix_t => NULL()
      83              :       TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER  :: matrix_p => NULL()
      84              :       ! reduce basis
      85              :       TYPE(dbcsr_p_type), DIMENSION(:), POINTER     :: mao_coef => NULL()
      86              :    END TYPE energy_correction_type
      87              : 
      88              : ! **************************************************************************************************
      89              : !> \brief Contains all the info needed for KG runs...
      90              : !> \param xc_section_kg:    XC section with only the KE functional
      91              : !> \param molecule_set:     set of molecular entities as in qs_env
      92              : !> \param sab_orb_full:     full neighborlist (build with molecular=.FALSE.)
      93              : !>                          needed for the coloring
      94              : !> \param subset_of_mol:    ith entry contains the index of the subset, the ith
      95              : !>                          molecule belongs to
      96              : !> \param subset:   task list and neighbor list of each subset of molecules
      97              : !> \param nsubsets: number of subsets
      98              : !> \par History
      99              : !>       2012.07 created [Martin Haeufel]
     100              : !> \author Martin Haeufel
     101              : ! **************************************************************************************************
     102              :    TYPE kg_environment_type
     103              :       INTEGER                                         :: nspins = -1
     104              :       INTEGER                                         :: natom = -1
     105              :       TYPE(section_vals_type), POINTER                :: xc_section_kg => NULL()
     106              :       INTEGER, ALLOCATABLE, DIMENSION(:)              :: atom_to_molecule
     107              :       TYPE(molecule_type), DIMENSION(:), POINTER      :: molecule_set => NULL()
     108              :       INTEGER                                         :: tnadd_method = -1
     109              :       TYPE(neighbor_list_set_p_type), &
     110              :          DIMENSION(:), POINTER                        :: sab_orb_full => NULL(), sac_kin => NULL()
     111              :       !
     112              :       INTEGER, DIMENSION(:), POINTER                  :: subset_of_mol => NULL()
     113              :       TYPE(subset_type), DIMENSION(:), POINTER        :: subset => NULL()
     114              :       INTEGER                                         :: nsubsets = -1
     115              :       INTEGER                                         :: maxdegree = -1
     116              :       INTEGER                                         :: coloring_method = -1
     117              :       !
     118              :       TYPE(dbcsr_p_type), DIMENSION(:), POINTER       :: tnadd_mat => NULL()
     119              :       ! LRI
     120              :       TYPE(lri_environment_type), POINTER             :: lri_env => NULL(), lri_env1 => NULL()
     121              :       TYPE(lri_density_type), POINTER                 :: lri_density => NULL(), lri_rho1 => NULL()
     122              :       ! atomic grid
     123              :       TYPE(atom_integration_grid_type), POINTER       :: int_grid_atom => NULL()
     124              :       TYPE(integration_grid_type), POINTER            :: int_grid_molecules => NULL()
     125              :       TYPE(integration_grid_type), POINTER            :: int_grid_full => NULL()
     126              :    END TYPE kg_environment_type
     127              : 
     128              : CONTAINS
     129              : 
     130              : ! **************************************************************************************************
     131              : !> \brief ...
     132              : !> \param kg_env ...
     133              : ! **************************************************************************************************
     134           66 :    SUBROUTINE kg_env_release(kg_env)
     135              :       TYPE(kg_environment_type), POINTER                 :: kg_env
     136              : 
     137              :       CHARACTER(LEN=*), PARAMETER                        :: routineN = 'kg_env_release'
     138              : 
     139              :       INTEGER                                            :: handle, isub
     140              : 
     141           66 :       CALL timeset(routineN, handle)
     142              : 
     143           66 :       CPASSERT(ASSOCIATED(kg_env))
     144              : 
     145           66 :       CALL release_neighbor_list_sets(kg_env%sab_orb_full)
     146           66 :       CALL release_neighbor_list_sets(kg_env%sac_kin)
     147              : 
     148           66 :       IF (ASSOCIATED(kg_env%tnadd_mat)) THEN
     149           12 :          CALL dbcsr_deallocate_matrix_set(kg_env%tnadd_mat)
     150              :       END IF
     151              : 
     152          172 :       DO isub = 1, kg_env%nsubsets
     153          106 :          CALL release_neighbor_list_sets(kg_env%subset(isub)%sab_orb)
     154          172 :          CALL deallocate_task_list(kg_env%subset(isub)%task_list)
     155              :       END DO
     156              : 
     157           66 :       IF (ASSOCIATED(kg_env%subset_of_mol)) DEALLOCATE (kg_env%subset_of_mol)
     158           66 :       IF (ASSOCIATED(kg_env%subset)) DEALLOCATE (kg_env%subset)
     159              : 
     160           66 :       IF (ALLOCATED(kg_env%atom_to_molecule)) DEALLOCATE (kg_env%atom_to_molecule)
     161              : 
     162              :       ! LRI
     163           66 :       IF (ASSOCIATED(kg_env%lri_env)) THEN
     164            2 :          CALL lri_env_release(kg_env%lri_env)
     165            2 :          DEALLOCATE (kg_env%lri_env)
     166              :       END IF
     167           66 :       IF (ASSOCIATED(kg_env%lri_density)) THEN
     168            2 :          CALL lri_density_release(kg_env%lri_density)
     169            2 :          DEALLOCATE (kg_env%lri_density)
     170              :       END IF
     171           66 :       IF (ASSOCIATED(kg_env%lri_env1)) THEN
     172            2 :          CALL lri_env_release(kg_env%lri_env1)
     173            2 :          DEALLOCATE (kg_env%lri_env1)
     174              :       END IF
     175           66 :       IF (ASSOCIATED(kg_env%lri_rho1)) THEN
     176            0 :          CALL lri_density_release(kg_env%lri_rho1)
     177            0 :          DEALLOCATE (kg_env%lri_rho1)
     178              :       END IF
     179              :       ! atom grids
     180           66 :       IF (ASSOCIATED(kg_env%int_grid_atom)) THEN
     181            2 :          CALL deallocate_atom_int_grid(kg_env%int_grid_atom)
     182              :       END IF
     183           66 :       IF (ASSOCIATED(kg_env%int_grid_molecules)) THEN
     184            2 :          CALL deallocate_intgrid(kg_env%int_grid_molecules)
     185              :       END IF
     186           66 :       IF (ASSOCIATED(kg_env%int_grid_full)) THEN
     187            2 :          CALL deallocate_intgrid(kg_env%int_grid_full)
     188              :       END IF
     189              : 
     190           66 :       DEALLOCATE (kg_env)
     191              : 
     192           66 :       CALL timestop(handle)
     193              : 
     194           66 :    END SUBROUTINE kg_env_release
     195              : 
     196            0 : END MODULE kg_environment_types
        

Generated by: LCOV version 2.0-1