LCOV - code coverage report
Current view: top level - src - post_scf_bandstructure_types.F (source / functions) Hit Total Coverage
Test: CP2K Regtests (git:b1f098b) Lines: 104 105 99.0 %
Date: 2024-05-05 06:30:09 Functions: 6 9 66.7 %

          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
      10             : !> \author Jan Wilhelm
      11             : !> \date 07.2023
      12             : ! **************************************************************************************************
      13             : MODULE post_scf_bandstructure_types
      14             :    USE basis_set_types,                 ONLY: gto_basis_set_p_type
      15             :    USE cp_cfm_types,                    ONLY: cp_cfm_release,&
      16             :                                               cp_cfm_type
      17             :    USE cp_dbcsr_operations,             ONLY: dbcsr_deallocate_matrix_set
      18             :    USE cp_fm_types,                     ONLY: cp_fm_release,&
      19             :                                               cp_fm_type
      20             :    USE dbcsr_api,                       ONLY: dbcsr_p_type,&
      21             :                                               dbcsr_release
      22             :    USE dbt_api,                         ONLY: dbt_destroy,&
      23             :                                               dbt_type
      24             :    USE kinds,                           ONLY: default_string_length,&
      25             :                                               dp,&
      26             :                                               int_8
      27             :    USE kpoint_types,                    ONLY: kpoint_release,&
      28             :                                               kpoint_type
      29             :    USE libint_2c_3c,                    ONLY: libint_potential_type
      30             :    USE message_passing,                 ONLY: mp_para_env_release,&
      31             :                                               mp_para_env_type
      32             :    USE qs_tensors_types,                ONLY: neighbor_list_3c_type
      33             : #include "./base/base_uses.f90"
      34             : 
      35             :    IMPLICIT NONE
      36             : 
      37             :    PRIVATE
      38             : 
      39             :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'post_scf_bandstructure_types'
      40             : 
      41             :    PUBLIC :: post_scf_bandstructure_type, band_edges_type, bs_env_release
      42             : 
      43             :    ! valence band maximum (VBM), conduction band minimum (CBM), direct band gap (DBG),
      44             :    ! indirect band gap (IDBG)
      45             :    TYPE band_edges_type
      46             :       REAL(KIND=dp)                                   :: VBM = -1.0_dp, &
      47             :                                                          CBM = -1.0_dp, &
      48             :                                                          DBG = -1.0_dp, &
      49             :                                                          IDBG = -1.0_dp
      50             :    END TYPE band_edges_type
      51             : 
      52             :    TYPE post_scf_bandstructure_type
      53             : 
      54             :       ! decide which calculations will be done
      55             :       LOGICAL                                         :: do_gw = .FALSE., &
      56             :                                                          do_soc = .FALSE., &
      57             :                                                          do_bs = .FALSE., &
      58             :                                                          do_bs_primitive_cell = .FALSE., &
      59             :                                                          do_ldos = .FALSE.
      60             : 
      61             :       ! various eigenvalues computed in GW code, some depend on k-points
      62             :       ! and have therefore three dimensions (band index, k-point, spin)
      63             :       REAL(KIND=dp), DIMENSION(:, :), ALLOCATABLE     :: eigenval_scf_Gamma
      64             :       REAL(KIND=dp), DIMENSION(:, :, :), ALLOCATABLE  :: eigenval_scf, &
      65             :                                                          eigenval_G0W0
      66             :       REAL(KIND=dp), DIMENSION(:, :, :), ALLOCATABLE  :: eigenval_scGW0
      67             :       REAL(KIND=dp), DIMENSION(:, :), ALLOCATABLE     :: eigenval_prim_cell_scf, &
      68             :                                                          eigenval_prim_cell_scf_soc, &
      69             :                                                          eigenval_prim_cell_G0W0, &
      70             :                                                          eigenval_prim_cell_G0W0_soc
      71             :       REAL(KIND=dp), DIMENSION(:, :), ALLOCATABLE     :: eigenval_scf_soc, &
      72             :                                                          eigenval_G0W0_soc
      73             :       TYPE(band_edges_type), DIMENSION(2)             :: band_edges_scf_Gamma
      74             :       TYPE(band_edges_type)                           :: band_edges_scf, &
      75             :                                                          band_edges_G0W0
      76             : 
      77             :       ! general parameters on molecular orbitals and basis sets
      78             :       INTEGER                                         :: n_ao = -1, &
      79             :                                                          n_RI = -1, &
      80             :                                                          n_spin = -1, &
      81             :                                                          n_atom = -1, &
      82             :                                                          max_AO_bf_per_atom = -1
      83             :       INTEGER, DIMENSION(:), ALLOCATABLE              :: i_ao_start_from_atom, &
      84             :                                                          i_ao_end_from_atom, &
      85             :                                                          i_RI_start_from_atom, &
      86             :                                                          i_RI_end_from_atom
      87             :       INTEGER, DIMENSION(2)                           :: n_occ = -1, &
      88             :                                                          n_vir = -1
      89             :       REAL(KIND=dp)                                   :: spin_degeneracy = -1.0_dp
      90             :       REAL(KIND=dp), DIMENSION(2)                     :: e_fermi = -1.0_dp
      91             : 
      92             :       ! kpoint mesh for chi, eps, W
      93             :       INTEGER, DIMENSION(:), POINTER                  :: nkp_grid_DOS_input => NULL()
      94             :       INTEGER, DIMENSION(3)                           :: nkp_grid_chi_eps_W_orig = -1, &
      95             :                                                          nkp_grid_chi_eps_W_extra = -1
      96             :       INTEGER                                         :: nkp_chi_eps_W_orig = -1, &
      97             :                                                          nkp_chi_eps_W_extra = -1, &
      98             :                                                          nkp_chi_eps_W_orig_plus_extra = -1, &
      99             :                                                          nkp_chi_eps_W_batch = -1, &
     100             :                                                          num_chi_eps_W_batches = -1, &
     101             :                                                          size_lattice_sum_V = -1
     102             :       TYPE(kpoint_type), POINTER                      :: kpoints_chi_eps_W => NULL(), &
     103             :                                                          kpoints_DOS => NULL(), &
     104             :                                                          kpoints_bandstructure => NULL()
     105             :       LOGICAL                                         :: approx_kp_extrapol = .FALSE.
     106             :       REAL(KIND=dp)                                   :: wkp_orig = -1.0_dp
     107             :       REAL(KIND=dp), DIMENSION(:), ALLOCATABLE        :: wkp_s_p, &
     108             :                                                          wkp_no_extra
     109             :       INTEGER, DIMENSION(:), ALLOCATABLE              :: l_RI
     110             :       INTEGER                                         :: input_kp_bs_npoints = -1, &
     111             :                                                          input_kp_bs_n_sp_pts = -1, &
     112             :                                                          nkp_bs = -1, &
     113             :                                                          nkp_DOS = -1
     114             :       REAL(KIND=dp), DIMENSION(:, :), ALLOCATABLE     :: xkp_special
     115             :       CHARACTER(LEN=default_string_length), &
     116             :          DIMENSION(:), ALLOCATABLE                    :: kp_special_name
     117             : 
     118             :       ! parameters for GW band structure calculation of small unit cell (with multiple unit cell)
     119             :       INTEGER, DIMENSION(3)                           :: periodic = -1, &
     120             :                                                          multiple_unit_cell = -1
     121             :       LOGICAL                                         :: calculate_bandstructure_of_primitive_cell &
     122             :                                                          = .FALSE.
     123             :       INTEGER                                         :: n_atom_in_primitive_cell = -1, &
     124             :                                                          n_primitive_cells = -1
     125             :       INTEGER, DIMENSION(:), ALLOCATABLE              :: atoms_i_primitive_cell, &
     126             :                                                          ref_atom_primitive_cell
     127             :       INTEGER, DIMENSION(:, :), ALLOCATABLE           :: cell_of_i_atom
     128             :       REAL(KIND=dp), DIMENSION(3, 3)                  :: hmat_primitive_cell = -1.0_dp, &
     129             :                                                          hinv_primitive_cell = -1.0_dp, &
     130             :                                                          hmat = -1.0_dp
     131             : 
     132             :       ! imaginary time and imaginary frequency grids
     133             :       INTEGER                                         :: num_time_freq_points = -1, &
     134             :                                                          num_freq_points_fit = -1
     135             :       REAL(KIND=dp), DIMENSION(:), ALLOCATABLE        :: imag_time_points, &
     136             :                                                          imag_freq_points, &
     137             :                                                          imag_freq_points_fit
     138             :       REAL(KIND=dp), DIMENSION(:, :), ALLOCATABLE     :: weights_cos_t_to_w, &
     139             :                                                          weights_cos_w_to_t, &
     140             :                                                          weights_sin_t_to_w
     141             :       INTEGER                                         :: nparam_pade = -1, &
     142             :                                                          num_points_per_magnitude = -1
     143             :       REAL(KIND=dp)                                   :: freq_max_fit = -1.0_dp, &
     144             :                                                          regularization_minimax = -1.0_dp, &
     145             :                                                          stabilize_exp = -1.0_dp
     146             : 
     147             :       ! filter threshold for matrix-tensor operations
     148             :       REAL(KIND=dp)                                   :: eps_filter = -1.0_dp, &
     149             :                                                          eps_3c_int = -1.0_dp, &
     150             :                                                          eps_atom_grid_2d_mat = -1.0_dp
     151             : 
     152             :       ! threshold for inverting ao overlap matrix, RI matrices
     153             :       REAL(KIND=dp)                                   :: eps_eigval_mat_s = -1.0_dp, &
     154             :                                                          eps_eigval_mat_RI = -1.0_dp, &
     155             :                                                          regularization_RI = -1.0_dp
     156             : 
     157             :       ! global full matrices used in GW
     158             :       TYPE(cp_fm_type)                                :: fm_s_Gamma, &
     159             :                                                          fm_Gocc, &
     160             :                                                          fm_Gvir
     161             :       TYPE(cp_fm_type), DIMENSION(2)                  :: fm_ks_Gamma, &
     162             :                                                          fm_V_xc_Gamma, &
     163             :                                                          fm_mo_coeff_Gamma
     164             :       TYPE(cp_fm_type), DIMENSION(4)                  :: fm_work_mo
     165             :       TYPE(cp_fm_type)                                :: fm_RI_RI, &
     166             :                                                          fm_chi_Gamma_freq, &
     167             :                                                          fm_W_MIC_freq, &
     168             :                                                          fm_W_MIC_freq_1_extra, &
     169             :                                                          fm_W_MIC_freq_1_no_extra, &
     170             :                                                          fm_h_G0W0_Gamma
     171             : 
     172             :       ! global dbcsr matrices used in GW
     173             :       TYPE(dbcsr_p_type)                              :: mat_ao_ao, &
     174             :                                                          mat_RI_RI
     175             :       TYPE(dbcsr_p_type), DIMENSION(:), POINTER       :: mat_chi_Gamma_tau => NULL()
     176             : 
     177             :       ! local dbcsr matrices used in GW (local in tensor group)
     178             :       TYPE(dbcsr_p_type)                              :: mat_ao_ao_tensor, &
     179             :                                                          mat_RI_RI_tensor, &
     180             :                                                          mat_Sigma_from_Gocc_tensor, &
     181             :                                                          mat_Sigma_from_Gvir_tensor, &
     182             :                                                          mat_W_MIC_time_tensor
     183             : 
     184             :       ! tensors for sparse matrix-tensor operations
     185             :       TYPE(dbt_type)                                  :: t_G, &
     186             :                                                          t_chi, &
     187             :                                                          t_W, &
     188             :                                                          t_RI_AO__AO, &
     189             :                                                          t_RI__AO_AO
     190             : 
     191             :       ! parameters and data for parallelization
     192             :       INTEGER                                         :: group_size_tensor = -1, &
     193             :                                                          tensor_group_color = -1, &
     194             :                                                          num_tensor_groups = -1, &
     195             :                                                          diag_group_color = -1, &
     196             :                                                          num_diag_groups = -1, &
     197             :                                                          min_block_size = -1
     198             :       REAL(KIND=dp)                                   :: input_memory_per_proc_GB = -1.0_dp
     199             :       INTEGER(KIND=int_8)                             :: input_memory_per_proc = -1
     200             :       TYPE(mp_para_env_type), POINTER                 :: para_env => NULL(), &
     201             :                                                          para_env_tensor => NULL()
     202             :       REAL(KIND=dp)                                   :: occupation_3c_int = -1.0_dp, &
     203             :                                                          max_dist_AO_atoms = -1.0_dp, &
     204             :                                                          safety_factor_memory = -1.0_dp
     205             :       ! parallelization: atom range i and atom range j for tensor group
     206             :       INTEGER, DIMENSION(2)                           :: atoms_i = -1, &
     207             :                                                          atoms_j = -1
     208             :       INTEGER                                         :: n_atom_i = -1, &
     209             :                                                          n_intervals_i = -1, &
     210             :                                                          n_atom_j = -1, &
     211             :                                                          n_intervals_j = -1, &
     212             :                                                          n_atom_per_interval_ij = -1, &
     213             :                                                          n_intervals_inner_loop_atoms = -1, &
     214             :                                                          n_atom_per_IL_interval = -1
     215             :       INTEGER, DIMENSION(:, :), ALLOCATABLE           :: i_atom_intervals, &
     216             :                                                          j_atom_intervals, &
     217             :                                                          inner_loop_atom_intervals, &
     218             :                                                          atoms_i_t_group, &
     219             :                                                          atoms_j_t_group
     220             :       LOGICAL, DIMENSION(:, :), ALLOCATABLE           :: skip_Sigma_occ, &
     221             :                                                          skip_Sigma_vir
     222             : 
     223             :       ! check-arrays and names for restarting
     224             :       LOGICAL, DIMENSION(:), ALLOCATABLE              :: read_chi, &
     225             :                                                          calc_chi
     226             :       LOGICAL, DIMENSION(:, :), ALLOCATABLE           :: Sigma_c_exists
     227             :       LOGICAL                                         :: all_W_exist = .FALSE., &
     228             :                                                          Sigma_x_exists = .FALSE.
     229             :       CHARACTER(LEN=3)                                :: chi_name = "chi"
     230             :       CHARACTER(LEN=6)                                :: W_time_name = "W_time"
     231             :       CHARACTER(LEN=7)                                :: Sigma_x_name = "Sigma_x"
     232             :       CHARACTER(LEN=13)                               :: Sigma_p_name = "Sigma_pos_tau", &
     233             :                                                          Sigma_n_name = "Sigma_neg_tau"
     234             :       CHARACTER(LEN=default_string_length)            :: prefix = ""
     235             : 
     236             :       REAL(KIND=dp)                                   :: t1 = -1.0_dp, &
     237             :                                                          t2 = -1.0_dp
     238             :       INTEGER                                         :: unit_nr = -1
     239             : 
     240             :       ! parameters and data for basis sets
     241             :       TYPE(gto_basis_set_p_type), DIMENSION(:), &
     242             :          ALLOCATABLE                                  :: basis_set_AO, &
     243             :                                                          basis_set_RI
     244             :       INTEGER, DIMENSION(:), ALLOCATABLE              :: sizes_AO, &
     245             :                                                          sizes_RI
     246             :       TYPE(neighbor_list_3c_type)                     :: nl_3c
     247             :       TYPE(libint_potential_type)                     :: ri_metric, &
     248             :                                                          trunc_coulomb
     249             : 
     250             :       ! parameters for SOC calculation
     251             :       REAL(KIND=dp)                                   :: energy_window_soc = -1.0_dp
     252             :       TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER    :: mat_V_SOC_xyz => NULL()
     253             :       TYPE(cp_fm_type), DIMENSION(3)                  :: fm_V_SOC_xyz_mo
     254             :       TYPE(cp_cfm_type)                               :: cfm_ks_spinor_ao_Gamma, &
     255             :                                                          cfm_SOC_spinor_ao_Gamma, &
     256             :                                                          cfm_s_spinor_Gamma
     257             :       TYPE(band_edges_type)                           :: band_edges_scf_SOC, &
     258             :                                                          band_edges_G0W0_SOC
     259             : 
     260             :       ! parameters for DOS and PDOS calculation
     261             :       REAL(KIND=dp)                                   :: energy_window_DOS = -1.0_dp, &
     262             :                                                          energy_step_DOS = -1.0_dp, &
     263             :                                                          broadening_DOS = -1.0_dp
     264             : 
     265             :       ! parameters for LDOS calculation (LDOS: local density of states)
     266             :       INTEGER                                         :: int_ldos_xyz = -1
     267             :       INTEGER, DIMENSION(:), POINTER                  :: bin_mesh => NULL()
     268             :       INTEGER                                         :: n_bins_max_for_printing = -1
     269             :       REAL(KIND=dp)                                   :: unit_ldos_int_z_inv_Ang2_eV = -1.0_dp
     270             : 
     271             :    END TYPE post_scf_bandstructure_type
     272             : 
     273             : CONTAINS
     274             : 
     275             : ! **************************************************************************************************
     276             : !> \brief ...
     277             : !> \param bs_env ...
     278             : ! **************************************************************************************************
     279          18 :    SUBROUTINE bs_env_release(bs_env)
     280             :       TYPE(post_scf_bandstructure_type), POINTER         :: bs_env
     281             : 
     282             :       CHARACTER(LEN=*), PARAMETER                        :: routineN = 'bs_env_release'
     283             : 
     284             :       INTEGER                                            :: handle
     285             : 
     286          18 :       CALL timeset(routineN, handle)
     287             : 
     288          18 :       CPASSERT(ASSOCIATED(bs_env))
     289             : 
     290          18 :       CALL safe_kpoints_release(bs_env%kpoints_chi_eps_W)
     291          18 :       CALL safe_kpoints_release(bs_env%kpoints_DOS)
     292          18 :       CALL safe_kpoints_release(bs_env%kpoints_bandstructure)
     293             : 
     294          18 :       IF (ALLOCATED(bs_env%wkp_s_p)) DEALLOCATE (bs_env%wkp_s_p)
     295          18 :       IF (ALLOCATED(bs_env%wkp_no_extra)) DEALLOCATE (bs_env%wkp_no_extra)
     296          18 :       IF (ALLOCATED(bs_env%l_RI)) DEALLOCATE (bs_env%l_RI)
     297          18 :       IF (ALLOCATED(bs_env%xkp_special)) DEALLOCATE (bs_env%xkp_special)
     298          18 :       IF (ALLOCATED(bs_env%kp_special_name)) DEALLOCATE (bs_env%kp_special_name)
     299          18 :       IF (ALLOCATED(bs_env%atoms_i_primitive_cell)) DEALLOCATE (bs_env%atoms_i_primitive_cell)
     300          18 :       IF (ALLOCATED(bs_env%ref_atom_primitive_cell)) DEALLOCATE (bs_env%ref_atom_primitive_cell)
     301          18 :       IF (ALLOCATED(bs_env%cell_of_i_atom)) DEALLOCATE (bs_env%cell_of_i_atom)
     302          18 :       IF (ALLOCATED(bs_env%imag_time_points)) DEALLOCATE (bs_env%imag_time_points)
     303          18 :       IF (ALLOCATED(bs_env%imag_freq_points)) DEALLOCATE (bs_env%imag_freq_points)
     304          18 :       IF (ALLOCATED(bs_env%eigenval_scf_Gamma)) DEALLOCATE (bs_env%eigenval_scf_Gamma)
     305          18 :       IF (ALLOCATED(bs_env%eigenval_scf)) DEALLOCATE (bs_env%eigenval_scf)
     306          18 :       IF (ALLOCATED(bs_env%eigenval_G0W0)) DEALLOCATE (bs_env%eigenval_G0W0)
     307          18 :       IF (ALLOCATED(bs_env%eigenval_scGW0)) DEALLOCATE (bs_env%eigenval_scGW0)
     308          18 :       IF (ALLOCATED(bs_env%eigenval_prim_cell_scf)) DEALLOCATE (bs_env%eigenval_prim_cell_scf)
     309          18 :       IF (ALLOCATED(bs_env%eigenval_prim_cell_scf_soc)) DEALLOCATE (bs_env%eigenval_prim_cell_scf_soc)
     310          18 :       IF (ALLOCATED(bs_env%eigenval_prim_cell_G0W0)) DEALLOCATE (bs_env%eigenval_prim_cell_G0W0)
     311          18 :       IF (ALLOCATED(bs_env%eigenval_prim_cell_G0W0_soc)) DEALLOCATE (bs_env%eigenval_prim_cell_G0W0_soc)
     312          18 :       IF (ALLOCATED(bs_env%eigenval_scf_soc)) DEALLOCATE (bs_env%eigenval_scf_soc)
     313          18 :       IF (ALLOCATED(bs_env%eigenval_G0W0_soc)) DEALLOCATE (bs_env%eigenval_G0W0_soc)
     314          18 :       IF (ALLOCATED(bs_env%i_ao_start_from_atom)) DEALLOCATE (bs_env%i_ao_start_from_atom)
     315          18 :       IF (ALLOCATED(bs_env%i_ao_end_from_atom)) DEALLOCATE (bs_env%i_ao_end_from_atom)
     316          18 :       IF (ALLOCATED(bs_env%i_RI_start_from_atom)) DEALLOCATE (bs_env%i_RI_start_from_atom)
     317          18 :       IF (ALLOCATED(bs_env%i_RI_end_from_atom)) DEALLOCATE (bs_env%i_RI_end_from_atom)
     318          18 :       IF (ALLOCATED(bs_env%i_atom_intervals)) DEALLOCATE (bs_env%i_atom_intervals)
     319          18 :       IF (ALLOCATED(bs_env%j_atom_intervals)) DEALLOCATE (bs_env%j_atom_intervals)
     320          18 :       IF (ALLOCATED(bs_env%atoms_i_t_group)) DEALLOCATE (bs_env%atoms_i_t_group)
     321          18 :       IF (ALLOCATED(bs_env%atoms_j_t_group)) DEALLOCATE (bs_env%atoms_j_t_group)
     322          18 :       IF (ALLOCATED(bs_env%skip_Sigma_occ)) DEALLOCATE (bs_env%skip_Sigma_occ)
     323          18 :       IF (ALLOCATED(bs_env%skip_Sigma_vir)) DEALLOCATE (bs_env%skip_Sigma_vir)
     324          18 :       IF (ALLOCATED(bs_env%read_chi)) DEALLOCATE (bs_env%read_chi)
     325          18 :       IF (ALLOCATED(bs_env%calc_chi)) DEALLOCATE (bs_env%calc_chi)
     326          18 :       IF (ALLOCATED(bs_env%Sigma_c_exists)) DEALLOCATE (bs_env%Sigma_c_exists)
     327          18 :       IF (ALLOCATED(bs_env%sizes_AO)) DEALLOCATE (bs_env%sizes_AO)
     328          18 :       IF (ALLOCATED(bs_env%sizes_RI)) DEALLOCATE (bs_env%sizes_RI)
     329             : 
     330          18 :       CALL cp_fm_release(bs_env%fm_s_Gamma)
     331          18 :       CALL cp_fm_release(bs_env%fm_ks_Gamma(1))
     332          18 :       CALL cp_fm_release(bs_env%fm_ks_Gamma(2))
     333          18 :       CALL cp_fm_release(bs_env%fm_V_xc_Gamma(1))
     334          18 :       CALL cp_fm_release(bs_env%fm_V_xc_Gamma(2))
     335          18 :       CALL cp_fm_release(bs_env%fm_mo_coeff_Gamma(1))
     336          18 :       CALL cp_fm_release(bs_env%fm_mo_coeff_Gamma(2))
     337          18 :       CALL cp_fm_release(bs_env%fm_Gocc)
     338          18 :       CALL cp_fm_release(bs_env%fm_Gvir)
     339          18 :       CALL cp_fm_release(bs_env%fm_work_mo(1))
     340          18 :       CALL cp_fm_release(bs_env%fm_work_mo(2))
     341          18 :       CALL cp_fm_release(bs_env%fm_work_mo(3))
     342          18 :       CALL cp_fm_release(bs_env%fm_work_mo(4))
     343          18 :       CALL cp_fm_release(bs_env%fm_RI_RI)
     344          18 :       CALL cp_fm_release(bs_env%fm_chi_Gamma_freq)
     345          18 :       CALL cp_fm_release(bs_env%fm_W_MIC_freq)
     346          18 :       CALL cp_fm_release(bs_env%fm_W_MIC_freq_1_extra)
     347          18 :       CALL cp_fm_release(bs_env%fm_W_MIC_freq_1_no_extra)
     348          18 :       CALL cp_fm_release(bs_env%fm_h_G0W0_Gamma)
     349             : 
     350          18 :       CALL release_dbcsr_p_type(bs_env%mat_ao_ao)
     351          18 :       CALL release_dbcsr_p_type(bs_env%mat_RI_RI)
     352          18 :       CALL safe_dbcsr_deallocate_matrix_set_1d(bs_env%mat_chi_Gamma_tau)
     353             : 
     354          18 :       CALL release_dbcsr_p_type(bs_env%mat_ao_ao_tensor)
     355          18 :       CALL release_dbcsr_p_type(bs_env%mat_RI_RI_tensor)
     356          18 :       CALL release_dbcsr_p_type(bs_env%mat_Sigma_from_Gocc_tensor)
     357          18 :       CALL release_dbcsr_p_type(bs_env%mat_Sigma_from_Gvir_tensor)
     358          18 :       CALL release_dbcsr_p_type(bs_env%mat_W_MIC_time_tensor)
     359             : 
     360          18 :       CALL mp_para_env_release(bs_env%para_env)
     361          18 :       IF (ASSOCIATED(bs_env%para_env_tensor)) CALL mp_para_env_release(bs_env%para_env_tensor)
     362             : 
     363          18 :       CALL safe_dbt_destroy(bs_env%t_G)
     364          18 :       CALL safe_dbt_destroy(bs_env%t_chi)
     365          18 :       CALL safe_dbt_destroy(bs_env%t_W)
     366          18 :       CALL safe_dbt_destroy(bs_env%t_RI_AO__AO)
     367          18 :       CALL safe_dbt_destroy(bs_env%t_RI__AO_AO)
     368             : 
     369          18 :       IF (ALLOCATED(bs_env%basis_set_AO)) DEALLOCATE (bs_env%basis_set_AO)
     370          18 :       IF (ALLOCATED(bs_env%basis_set_RI)) DEALLOCATE (bs_env%basis_set_RI)
     371             : 
     372             :       ! SOC matrices and arrays
     373          18 :       CALL safe_dbcsr_deallocate_matrix_set_2d(bs_env%mat_V_SOC_xyz)
     374          18 :       CALL cp_fm_release(bs_env%fm_V_SOC_xyz_mo(1))
     375          18 :       CALL cp_fm_release(bs_env%fm_V_SOC_xyz_mo(2))
     376          18 :       CALL cp_fm_release(bs_env%fm_V_SOC_xyz_mo(3))
     377          18 :       CALL cp_cfm_release(bs_env%cfm_ks_spinor_ao_Gamma)
     378          18 :       CALL cp_cfm_release(bs_env%cfm_SOC_spinor_ao_Gamma)
     379          18 :       CALL cp_cfm_release(bs_env%cfm_s_spinor_Gamma)
     380             : 
     381          18 :       DEALLOCATE (bs_env)
     382             : 
     383          18 :       CALL timestop(handle)
     384             : 
     385          18 :    END SUBROUTINE bs_env_release
     386             : 
     387             : ! **************************************************************************************************
     388             : !> \brief ...
     389             : !> \param kpoints ...
     390             : ! **************************************************************************************************
     391          54 :    SUBROUTINE safe_kpoints_release(kpoints)
     392             :       TYPE(kpoint_type), POINTER                         :: kpoints
     393             : 
     394          54 :       IF (ASSOCIATED(kpoints)) CALL kpoint_release(kpoints)
     395             : 
     396          54 :    END SUBROUTINE safe_kpoints_release
     397             : 
     398             : ! **************************************************************************************************
     399             : !> \brief ...
     400             : !> \param dbcsr_p_type_matrix ...
     401             : ! **************************************************************************************************
     402         126 :    SUBROUTINE release_dbcsr_p_type(dbcsr_p_type_matrix)
     403             :       TYPE(dbcsr_p_type)                                 :: dbcsr_p_type_matrix
     404             : 
     405         126 :       IF (ASSOCIATED(dbcsr_p_type_matrix%matrix)) THEN
     406          72 :          CALL dbcsr_release(dbcsr_p_type_matrix%matrix)
     407          72 :          DEALLOCATE (dbcsr_p_type_matrix%matrix)
     408             :       END IF
     409             : 
     410         126 :    END SUBROUTINE release_dbcsr_p_type
     411             : 
     412             : ! **************************************************************************************************
     413             : !> \brief ...
     414             : !> \param t ...
     415             : ! **************************************************************************************************
     416          90 :    SUBROUTINE safe_dbt_destroy(t)
     417             :       TYPE(dbt_type)                                     :: t
     418             : 
     419          90 :       IF (ASSOCIATED(t%matrix_rep)) CALL dbt_destroy(t)
     420             : 
     421          90 :    END SUBROUTINE safe_dbt_destroy
     422             : 
     423             : ! **************************************************************************************************
     424             : !> \brief ...
     425             : !> \param dbcsr_p_type_matrix_array ...
     426             : ! **************************************************************************************************
     427          18 :    SUBROUTINE safe_dbcsr_deallocate_matrix_set_1d(dbcsr_p_type_matrix_array)
     428             : 
     429             :       TYPE(dbcsr_p_type), DIMENSION(:), POINTER          :: dbcsr_p_type_matrix_array
     430             : 
     431          18 :       IF (ASSOCIATED(dbcsr_p_type_matrix_array)) CALL dbcsr_deallocate_matrix_set(dbcsr_p_type_matrix_array)
     432             : 
     433          18 :    END SUBROUTINE safe_dbcsr_deallocate_matrix_set_1d
     434             : ! **************************************************************************************************
     435             : !> \brief ...
     436             : !> \param dbcsr_p_type_matrix_array ...
     437             : ! **************************************************************************************************
     438          18 :    SUBROUTINE safe_dbcsr_deallocate_matrix_set_2d(dbcsr_p_type_matrix_array)
     439             : 
     440             :       TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER       :: dbcsr_p_type_matrix_array
     441             : 
     442          18 :       IF (ASSOCIATED(dbcsr_p_type_matrix_array)) CALL dbcsr_deallocate_matrix_set(dbcsr_p_type_matrix_array)
     443             : 
     444          18 :    END SUBROUTINE safe_dbcsr_deallocate_matrix_set_2d
     445             : 
     446           0 : END MODULE post_scf_bandstructure_types

Generated by: LCOV version 1.15