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, new
18 : USE tblite_xtb_calculator, ONLY: xtb_calculator
19 : USE tblite_container, 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 : tblite_solver_gvd
35 : USE kinds, ONLY: dp
36 :
37 : #include "./base/base_uses.f90"
38 : IMPLICIT NONE
39 :
40 : PRIVATE
41 :
42 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'tblite_types'
43 :
44 : PUBLIC :: tblite_type, deallocate_tblite_type, allocate_tblite_type
45 :
46 : TYPE tblite_type
47 :
48 : LOGICAL :: use_virial = .FALSE.
49 : INTEGER, ALLOCATABLE :: el_num(:)
50 :
51 : REAL(KIND=dp) :: accuracy = 1.0_dp
52 : REAL(KIND=dp), DIMENSION(3, 3) :: sigma = -1.0_dp
53 : REAL(KIND=dp), ALLOCATABLE :: e_hal(:)
54 : REAL(KIND=dp), ALLOCATABLE :: e_rep(:)
55 : REAL(KIND=dp), ALLOCATABLE :: e_disp(:)
56 : REAL(KIND=dp), ALLOCATABLE :: e_scd(:)
57 : REAL(KIND=dp), ALLOCATABLE :: e_es(:)
58 : REAL(KIND=dp), ALLOCATABLE :: e_int(:)
59 : REAL(KIND=dp), ALLOCATABLE :: selfenergy(:)
60 : REAL(KIND=dp), ALLOCATABLE :: cn(:)
61 :
62 : REAL(KIND=dp), ALLOCATABLE :: grad(:, :)
63 : !derivatives w. r. t. coordination number
64 : REAL(KIND=dp), ALLOCATABLE :: dsedcn(:)
65 : REAL(KIND=dp), ALLOCATABLE :: dcndr(:, :, :)
66 : REAL(KIND=dp), ALLOCATABLE :: dcndL(:, :, :)
67 :
68 : TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: dipbra => Null(), &
69 : dipket => Null()
70 : TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: quadbra => Null(), &
71 : quadket => Null()
72 : TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: rho_ao_kp_ref => Null()
73 : INTEGER :: mixer_memory = tblite_mixer_iterations_default
74 : INTEGER :: mixer_solver = tblite_solver_gvd
75 : REAL(KIND=dp) :: mixer_damping = tblite_mixer_damping_default
76 : REAL(KIND=dp) :: mixer_max_weight = tblite_mixer_max_weight_default
77 : REAL(KIND=dp) :: mixer_min_weight = tblite_mixer_min_weight_default
78 : REAL(KIND=dp) :: mixer_omega0 = tblite_mixer_omega0_default
79 : REAL(KIND=dp) :: mixer_weight_factor = tblite_mixer_weight_factor_default
80 :
81 : #if defined(__TBLITE)
82 : TYPE(structure_type) :: mol = structure_type()
83 : TYPE(xtb_calculator) :: calc = xtb_calculator()
84 : TYPE(container_cache) :: cache = container_cache()
85 : TYPE(container_cache) :: dcache = container_cache()
86 : TYPE(container_cache) :: icache = container_cache()
87 : TYPE(wavefunction_type) :: wfn = wavefunction_type()
88 : TYPE(potential_type) :: pot = potential_type()
89 : CLASS(mixer_type), ALLOCATABLE :: mixer
90 : TYPE(param_record), ALLOCATABLE :: param
91 : #endif
92 :
93 : END TYPE tblite_type
94 :
95 : CONTAINS
96 :
97 : ! **************************************************************************************************
98 : !> \brief ...
99 : !> \param tb_tblite ...
100 : ! **************************************************************************************************
101 172 : SUBROUTINE allocate_tblite_type(tb_tblite)
102 :
103 : TYPE(tblite_type), POINTER :: tb_tblite
104 :
105 172 : CALL deallocate_tblite_type(tb_tblite)
106 :
107 2408 : ALLOCATE (tb_tblite)
108 :
109 172 : END SUBROUTINE allocate_tblite_type
110 :
111 : ! **************************************************************************************************
112 : !> \brief ...
113 : !> \param tb_tblite ...
114 : ! **************************************************************************************************
115 344 : SUBROUTINE deallocate_tblite_type(tb_tblite)
116 :
117 : TYPE(tblite_type), POINTER :: tb_tblite
118 :
119 344 : IF (ASSOCIATED(tb_tblite)) THEN
120 172 : IF (ALLOCATED(tb_tblite%el_num)) DEALLOCATE (tb_tblite%el_num)
121 :
122 172 : IF (ALLOCATED(tb_tblite%e_hal)) DEALLOCATE (tb_tblite%e_hal)
123 172 : IF (ALLOCATED(tb_tblite%e_rep)) DEALLOCATE (tb_tblite%e_rep)
124 172 : IF (ALLOCATED(tb_tblite%e_disp)) DEALLOCATE (tb_tblite%e_disp)
125 172 : IF (ALLOCATED(tb_tblite%e_scd)) DEALLOCATE (tb_tblite%e_scd)
126 172 : IF (ALLOCATED(tb_tblite%e_es)) DEALLOCATE (tb_tblite%e_es)
127 172 : IF (ALLOCATED(tb_tblite%e_int)) DEALLOCATE (tb_tblite%e_int)
128 172 : IF (ALLOCATED(tb_tblite%selfenergy)) DEALLOCATE (tb_tblite%selfenergy)
129 172 : IF (ALLOCATED(tb_tblite%cn)) DEALLOCATE (tb_tblite%cn)
130 :
131 172 : IF (ALLOCATED(tb_tblite%grad)) DEALLOCATE (tb_tblite%grad)
132 172 : IF (ALLOCATED(tb_tblite%dsedcn)) DEALLOCATE (tb_tblite%dsedcn)
133 172 : IF (ALLOCATED(tb_tblite%dcndr)) DEALLOCATE (tb_tblite%dcndr)
134 172 : IF (ALLOCATED(tb_tblite%dcndL)) DEALLOCATE (tb_tblite%dcndL)
135 :
136 172 : IF (ASSOCIATED(tb_tblite%dipbra)) THEN
137 92 : CALL dbcsr_deallocate_matrix_set(tb_tblite%dipbra)
138 : END IF
139 172 : IF (ASSOCIATED(tb_tblite%dipket)) THEN
140 92 : CALL dbcsr_deallocate_matrix_set(tb_tblite%dipket)
141 : END IF
142 172 : IF (ASSOCIATED(tb_tblite%quadbra)) THEN
143 92 : CALL dbcsr_deallocate_matrix_set(tb_tblite%quadbra)
144 : END IF
145 172 : IF (ASSOCIATED(tb_tblite%quadket)) THEN
146 92 : CALL dbcsr_deallocate_matrix_set(tb_tblite%quadket)
147 : END IF
148 172 : IF (ASSOCIATED(tb_tblite%rho_ao_kp_ref)) THEN
149 30 : CALL dbcsr_deallocate_matrix_set(tb_tblite%rho_ao_kp_ref)
150 : END IF
151 : #if defined(__TBLITE)
152 344 : IF (ALLOCATED(tb_tblite%mixer)) DEALLOCATE (tb_tblite%mixer)
153 172 : IF (ALLOCATED(tb_tblite%param)) DEALLOCATE (tb_tblite%param)
154 : #endif
155 :
156 1102 : DEALLOCATE (tb_tblite)
157 : END IF
158 :
159 344 : END SUBROUTINE deallocate_tblite_type
160 :
161 0 : END MODULE tblite_types
|