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 : ! **************************************************************************************************
9 : !> \brief types for tblite
10 : !> \author JVP
11 : !> \history creation 09.2024
12 : ! **************************************************************************************************
13 :
14 : MODULE tblite_types
15 :
16 : #if defined(__TBLITE)
17 : USE mctc_io, ONLY: structure_type
18 : USE tblite_xtb_calculator, ONLY: xtb_calculator
19 : USE tblite_container_cache, ONLY: container_cache
20 : USE tblite_scf_mixer, ONLY: mixer_type
21 : USE tblite_wavefunction_type, ONLY: wavefunction_type
22 : USE tblite_scf_potential, ONLY: potential_type
23 : USE tblite_param, ONLY: param_record
24 : #endif
25 :
26 : USE cp_dbcsr_api, ONLY: dbcsr_p_type
27 : USE cp_dbcsr_operations, ONLY: dbcsr_deallocate_matrix_set
28 : USE input_constants, ONLY: tblite_mixer_damping_default, &
29 : tblite_mixer_iterations_default, &
30 : tblite_mixer_max_weight_default, &
31 : tblite_mixer_min_weight_default, &
32 : tblite_mixer_omega0_default, &
33 : tblite_mixer_weight_factor_default
34 : USE kinds, ONLY: dp
35 :
36 : #include "../base/base_uses.f90"
37 : IMPLICIT NONE
38 :
39 : PRIVATE
40 :
41 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'tblite_types'
42 :
43 : PUBLIC :: tblite_type, deallocate_tblite_type, allocate_tblite_type
44 :
45 : TYPE tblite_type
46 :
47 : LOGICAL :: use_virial = .FALSE.
48 : INTEGER, ALLOCATABLE :: el_num(:)
49 :
50 : REAL(KIND=dp) :: accuracy = 1.0_dp
51 : REAL(KIND=dp), DIMENSION(3, 3) :: sigma = -1.0_dp
52 : ! tblite contributions are currently replicated on every MPI rank.
53 : ! Force/virial assembly accounts for CP2K's subsequent MPI reductions.
54 : REAL(KIND=dp), ALLOCATABLE :: e_hal(:)
55 : REAL(KIND=dp), ALLOCATABLE :: e_rep(:)
56 : REAL(KIND=dp), ALLOCATABLE :: e_disp(:)
57 : REAL(KIND=dp), ALLOCATABLE :: e_scd(:)
58 : REAL(KIND=dp), ALLOCATABLE :: e_es(:)
59 : REAL(KIND=dp), ALLOCATABLE :: e_int(:)
60 : REAL(KIND=dp), ALLOCATABLE :: selfenergy(:)
61 : REAL(KIND=dp), ALLOCATABLE :: cn(:)
62 :
63 : REAL(KIND=dp), ALLOCATABLE :: grad(:, :)
64 : !derivatives w. r. t. coordination number
65 : REAL(KIND=dp), ALLOCATABLE :: dsedcn(:)
66 : REAL(KIND=dp), ALLOCATABLE :: dcndr(:, :, :)
67 : REAL(KIND=dp), ALLOCATABLE :: dcndL(:, :, :)
68 :
69 : TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: dipbra => Null(), &
70 : dipket => Null()
71 : TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: quadbra => Null(), &
72 : quadket => Null()
73 : ! Spin-resolved density snapshot used by the UKS/LSD force path.
74 : TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: rho_ao_kp_ref => Null()
75 : INTEGER :: mixer_memory = tblite_mixer_iterations_default
76 : REAL(KIND=dp) :: mixer_damping = tblite_mixer_damping_default
77 : REAL(KIND=dp) :: mixer_max_weight = tblite_mixer_max_weight_default
78 : REAL(KIND=dp) :: mixer_min_weight = tblite_mixer_min_weight_default
79 : REAL(KIND=dp) :: mixer_omega0 = tblite_mixer_omega0_default
80 : REAL(KIND=dp) :: mixer_weight_factor = tblite_mixer_weight_factor_default
81 :
82 : #if defined(__TBLITE)
83 : TYPE(structure_type) :: mol = structure_type()
84 : TYPE(xtb_calculator) :: calc = xtb_calculator()
85 : ! Geometry-dependent caches: Coulomb, dispersion and additional interactions.
86 : ! Refreshed by tb_init_ham, reused for SCC potentials, energies and gradients.
87 : TYPE(container_cache) :: cache = container_cache()
88 : TYPE(container_cache) :: dcache = container_cache()
89 : TYPE(container_cache) :: icache = container_cache()
90 : TYPE(wavefunction_type) :: wfn = wavefunction_type()
91 : TYPE(potential_type) :: pot = potential_type()
92 : CLASS(mixer_type), ALLOCATABLE :: mixer
93 : TYPE(param_record), ALLOCATABLE :: param
94 : #endif
95 :
96 : END TYPE tblite_type
97 :
98 : CONTAINS
99 :
100 : ! **************************************************************************************************
101 : !> \brief ...
102 : !> \param tb_tblite ...
103 : ! **************************************************************************************************
104 198 : SUBROUTINE allocate_tblite_type(tb_tblite)
105 :
106 : TYPE(tblite_type), POINTER :: tb_tblite
107 :
108 198 : CALL deallocate_tblite_type(tb_tblite)
109 :
110 2772 : ALLOCATE (tb_tblite)
111 :
112 198 : END SUBROUTINE allocate_tblite_type
113 :
114 : ! **************************************************************************************************
115 : !> \brief ...
116 : !> \param tb_tblite ...
117 : ! **************************************************************************************************
118 396 : SUBROUTINE deallocate_tblite_type(tb_tblite)
119 :
120 : TYPE(tblite_type), POINTER :: tb_tblite
121 :
122 396 : IF (ASSOCIATED(tb_tblite)) THEN
123 : ! Release pointer-owned DBCSR objects; allocatable components are released
124 : ! automatically when the parent object is deallocated.
125 198 : IF (ASSOCIATED(tb_tblite%dipbra)) THEN
126 110 : CALL dbcsr_deallocate_matrix_set(tb_tblite%dipbra)
127 : END IF
128 198 : IF (ASSOCIATED(tb_tblite%dipket)) THEN
129 110 : CALL dbcsr_deallocate_matrix_set(tb_tblite%dipket)
130 : END IF
131 198 : IF (ASSOCIATED(tb_tblite%quadbra)) THEN
132 110 : CALL dbcsr_deallocate_matrix_set(tb_tblite%quadbra)
133 : END IF
134 198 : IF (ASSOCIATED(tb_tblite%quadket)) THEN
135 110 : CALL dbcsr_deallocate_matrix_set(tb_tblite%quadket)
136 : END IF
137 198 : IF (ASSOCIATED(tb_tblite%rho_ao_kp_ref)) THEN
138 20 : CALL dbcsr_deallocate_matrix_set(tb_tblite%rho_ao_kp_ref)
139 : END IF
140 1128 : DEALLOCATE (tb_tblite)
141 : NULLIFY (tb_tblite)
142 : END IF
143 :
144 396 : END SUBROUTINE deallocate_tblite_type
145 :
146 0 : END MODULE tblite_types
|