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 : #endif
24 :
25 : USE cp_dbcsr_api, ONLY: dbcsr_p_type
26 : USE cp_dbcsr_operations, ONLY: dbcsr_deallocate_matrix_set
27 : USE kinds, ONLY: dp
28 :
29 : #include "./base/base_uses.f90"
30 : IMPLICIT NONE
31 :
32 : PRIVATE
33 :
34 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'tblite_types'
35 :
36 : PUBLIC :: tblite_type, deallocate_tblite_type, allocate_tblite_type
37 :
38 : TYPE tblite_type
39 :
40 : LOGICAL :: use_virial = .FALSE.
41 : INTEGER, ALLOCATABLE :: el_num(:)
42 :
43 : REAL(KIND=dp), DIMENSION(3, 3) :: sigma = -1.0_dp
44 : REAL(KIND=dp), ALLOCATABLE :: e_hal(:)
45 : REAL(KIND=dp), ALLOCATABLE :: e_rep(:)
46 : REAL(KIND=dp), ALLOCATABLE :: e_disp(:)
47 : REAL(KIND=dp), ALLOCATABLE :: e_scd(:)
48 : REAL(KIND=dp), ALLOCATABLE :: e_es(:)
49 : REAL(KIND=dp), ALLOCATABLE :: selfenergy(:)
50 : REAL(KIND=dp), ALLOCATABLE :: cn(:)
51 :
52 : REAL(KIND=dp), ALLOCATABLE :: grad(:, :)
53 : !derivatives w. r. t. coordination number
54 : REAL(KIND=dp), ALLOCATABLE :: dsedcn(:)
55 : REAL(KIND=dp), ALLOCATABLE :: dcndr(:, :, :)
56 : REAL(KIND=dp), ALLOCATABLE :: dcndL(:, :, :)
57 :
58 : TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: dipbra => Null(), &
59 : dipket => Null()
60 : TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: quadbra => Null(), &
61 : quadket => Null()
62 :
63 : #if defined(__TBLITE)
64 : TYPE(structure_type) :: mol = structure_type()
65 : TYPE(xtb_calculator) :: calc = xtb_calculator()
66 : TYPE(container_cache) :: cache = container_cache()
67 : TYPE(container_cache) :: dcache = container_cache()
68 : TYPE(wavefunction_type) :: wfn = wavefunction_type()
69 : TYPE(potential_type) :: pot = potential_type()
70 : CLASS(mixer_type), ALLOCATABLE :: mixer
71 : #endif
72 :
73 : END TYPE tblite_type
74 :
75 : CONTAINS
76 :
77 : ! **************************************************************************************************
78 : !> \brief ...
79 : !> \param tb_tblite ...
80 : ! **************************************************************************************************
81 82 : SUBROUTINE allocate_tblite_type(tb_tblite)
82 :
83 : TYPE(tblite_type), POINTER :: tb_tblite
84 :
85 82 : CALL deallocate_tblite_type(tb_tblite)
86 :
87 1148 : ALLOCATE (tb_tblite)
88 :
89 82 : END SUBROUTINE allocate_tblite_type
90 :
91 : ! **************************************************************************************************
92 : !> \brief ...
93 : !> \param tb_tblite ...
94 : ! **************************************************************************************************
95 164 : SUBROUTINE deallocate_tblite_type(tb_tblite)
96 :
97 : TYPE(tblite_type), POINTER :: tb_tblite
98 :
99 164 : IF (ASSOCIATED(tb_tblite)) THEN
100 82 : IF (ALLOCATED(tb_tblite%el_num)) DEALLOCATE (tb_tblite%el_num)
101 :
102 82 : IF (ALLOCATED(tb_tblite%e_hal)) DEALLOCATE (tb_tblite%e_hal)
103 82 : IF (ALLOCATED(tb_tblite%e_rep)) DEALLOCATE (tb_tblite%e_rep)
104 82 : IF (ALLOCATED(tb_tblite%e_disp)) DEALLOCATE (tb_tblite%e_disp)
105 82 : IF (ALLOCATED(tb_tblite%e_scd)) DEALLOCATE (tb_tblite%e_scd)
106 82 : IF (ALLOCATED(tb_tblite%e_es)) DEALLOCATE (tb_tblite%e_es)
107 82 : IF (ALLOCATED(tb_tblite%selfenergy)) DEALLOCATE (tb_tblite%selfenergy)
108 82 : IF (ALLOCATED(tb_tblite%cn)) DEALLOCATE (tb_tblite%cn)
109 :
110 82 : IF (ALLOCATED(tb_tblite%grad)) DEALLOCATE (tb_tblite%grad)
111 82 : IF (ALLOCATED(tb_tblite%dsedcn)) DEALLOCATE (tb_tblite%dsedcn)
112 82 : IF (ALLOCATED(tb_tblite%dcndr)) DEALLOCATE (tb_tblite%dcndr)
113 82 : IF (ALLOCATED(tb_tblite%dcndL)) DEALLOCATE (tb_tblite%dcndL)
114 :
115 82 : IF (ASSOCIATED(tb_tblite%dipbra)) &
116 34 : CALL dbcsr_deallocate_matrix_set(tb_tblite%dipbra)
117 82 : IF (ASSOCIATED(tb_tblite%dipket)) &
118 34 : CALL dbcsr_deallocate_matrix_set(tb_tblite%dipket)
119 82 : IF (ASSOCIATED(tb_tblite%quadbra)) &
120 34 : CALL dbcsr_deallocate_matrix_set(tb_tblite%quadbra)
121 82 : IF (ASSOCIATED(tb_tblite%quadket)) &
122 34 : CALL dbcsr_deallocate_matrix_set(tb_tblite%quadket)
123 : #if defined(__TBLITE)
124 164 : IF (ALLOCATED(tb_tblite%mixer)) DEALLOCATE (tb_tblite%mixer)
125 : #endif
126 :
127 82 : DEALLOCATE (tb_tblite)
128 : END IF
129 :
130 164 : END SUBROUTINE deallocate_tblite_type
131 :
132 0 : END MODULE tblite_types
|