(git:374b731)
Loading...
Searching...
No Matches
iao_types.F
Go to the documentation of this file.
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 Calculate ntrinsic atomic orbitals and analyze wavefunctions
10!> \par History
11!> 03.2023 created [JGH]
12!> \author JGH
13! **************************************************************************************************
15 USE cell_types, ONLY: cell_type
22 USE kinds, ONLY: dp
23#include "./base/base_uses.f90"
24
25 IMPLICIT NONE
26 PRIVATE
27
29
30! **************************************************************************************************
32 LOGICAL :: do_iao = .false.
33 !
34 REAL(kind=dp) :: eps_svd = 0.0_dp
35 REAL(kind=dp) :: eps_occ = 0.0_dp
36 ! chages
37 LOGICAL :: do_charges = .false.
38 ! one-center expansion
39 LOGICAL :: do_oce = .false.
40 INTEGER :: lmax_oce = 0
41 INTEGER :: nbas_oce = 0
42 LOGICAL :: append_oce = .false.
43 ! Bond orbitals
44 LOGICAL :: do_bondorbitals = .false.
45 ! Wannier centers
46 LOGICAL :: do_center = .false.
47 LOGICAL :: pos_periodic = .false.
48 INTEGER :: loc_operator = 0
49 INTEGER :: eloc_function = 0
50 REAL(kind=dp) :: eloc_weight = 0.0_dp
51 ! Molden
52 LOGICAL :: molden_iao = .false.
53 LOGICAL :: molden_ibo = .false.
54 ! CUBE files
55 LOGICAL :: cubes_iao = .false.
56 LOGICAL :: cubes_ibo = .false.
57 ! Input sections
58 TYPE(section_vals_type), POINTER :: iao_cubes_section => null(), &
59 iao_molden_section => null(), &
60 ibo_cubes_section => null(), &
61 ibo_molden_section => null(), &
62 ibo_cc_section => null()
63 END TYPE iao_env_type
64
65! **************************************************************************************************
66
67CONTAINS
68
69! **************************************************************************************************
70!> \brief ...
71!> \param iao_env ...
72! **************************************************************************************************
73 SUBROUTINE iao_set_default(iao_env)
74 TYPE(iao_env_type), INTENT(INOUT) :: iao_env
75
76 !iao
77 iao_env%do_iao = .false.
78 iao_env%eps_svd = 0.0_dp
79 iao_env%eps_occ = 0.0_dp
80 ! charges
81 iao_env%do_charges = .false.
82 ! one-center expansion
83 iao_env%do_oce = .false.
84 iao_env%lmax_oce = 3
85 iao_env%nbas_oce = 10
86 iao_env%append_oce = .false.
87 ! Bond orbitals
88 iao_env%do_bondorbitals = .false.
89 ! Wannier centers
90 iao_env%do_center = .false.
91 iao_env%pos_periodic = .false.
92 iao_env%loc_operator = do_iaoloc_pm2
93 iao_env%eloc_function = do_iaoloc_enone
94 iao_env%eloc_weight = 0.0_dp
95 ! i/o
96 iao_env%molden_iao = .false.
97 iao_env%molden_ibo = .false.
98 iao_env%cubes_iao = .false.
99 iao_env%cubes_ibo = .false.
100 ! Input sections
101 NULLIFY (iao_env%iao_cubes_section, iao_env%iao_molden_section)
102 NULLIFY (iao_env%ibo_cubes_section, iao_env%ibo_molden_section)
103 NULLIFY (iao_env%ibo_cc_section)
104
105 END SUBROUTINE iao_set_default
106
107! **************************************************************************************************
108
109! **************************************************************************************************
110!> \brief ...
111!> \param iao_env ...
112!> \param iao_section ...
113!> \param cell ...
114! **************************************************************************************************
115 SUBROUTINE iao_read_input(iao_env, iao_section, cell)
116 TYPE(iao_env_type), INTENT(INOUT) :: iao_env
117 TYPE(section_vals_type), POINTER :: iao_section
118 TYPE(cell_type), OPTIONAL :: cell
119
120 LOGICAL :: explicit, iao_explicit
121 TYPE(section_vals_type), POINTER :: subsection
122
123 CALL iao_set_default(iao_env)
124
125 CALL section_vals_get(iao_section, explicit=iao_explicit)
126 IF (iao_explicit) THEN
127 iao_env%do_iao = .true.
128 ! input options
129 CALL section_vals_val_get(iao_section, "EPS_SVD", r_val=iao_env%eps_svd)
130 CALL section_vals_val_get(iao_section, "EPS_OCC", r_val=iao_env%eps_occ)
131 CALL section_vals_val_get(iao_section, "ATOMIC_CHARGES", l_val=iao_env%do_charges)
132 iao_env%iao_molden_section => section_vals_get_subs_vals(iao_section, "IAO_MOLDEN")
133 CALL section_vals_get(iao_env%iao_molden_section, explicit=iao_env%molden_iao)
134 iao_env%iao_cubes_section => section_vals_get_subs_vals(iao_section, "IAO_CUBES")
135 CALL section_vals_get(iao_env%iao_cubes_section, explicit=iao_env%cubes_iao)
136 subsection => section_vals_get_subs_vals(iao_section, "ONE_CENTER_EXPANSION")
137 CALL section_vals_get(subsection, explicit=iao_env%do_oce)
138 IF (iao_env%do_oce) THEN
139 subsection => section_vals_get_subs_vals(iao_section, "ONE_CENTER_EXPANSION")
140 CALL section_vals_val_get(subsection, "LMAX", i_val=iao_env%lmax_oce)
141 CALL section_vals_val_get(subsection, "NBAS", i_val=iao_env%nbas_oce)
142 CALL section_vals_val_get(subsection, "APPEND", l_val=iao_env%append_oce)
143 END IF
144 subsection => section_vals_get_subs_vals(iao_section, "BOND_ORBITALS")
145 CALL section_vals_get(subsection, explicit=iao_env%do_bondorbitals)
146 IF (iao_env%do_bondorbitals) THEN
147 subsection => section_vals_get_subs_vals(iao_section, "BOND_ORBITALS")
148 CALL section_vals_val_get(subsection, "LOCALIZATION_OPERATOR", i_val=iao_env%loc_operator)
149 CALL section_vals_val_get(subsection, "ENERGY_LOCALIZATION_FUNCTION", i_val=iao_env%eloc_function)
150 CALL section_vals_val_get(subsection, "ENERGY_LOCALIZATION_WEIGHT", r_val=iao_env%eloc_weight)
151 iao_env%ibo_molden_section => section_vals_get_subs_vals(subsection, "IBO_MOLDEN")
152 CALL section_vals_get(iao_env%ibo_molden_section, explicit=iao_env%molden_ibo)
153 iao_env%ibo_cubes_section => section_vals_get_subs_vals(subsection, "IBO_CUBES")
154 CALL section_vals_get(iao_env%ibo_cubes_section, explicit=iao_env%cubes_ibo)
155 iao_env%ibo_cc_section => section_vals_get_subs_vals(subsection, "CHARGE_CENTER")
156 CALL section_vals_get(iao_env%ibo_cc_section, explicit=iao_env%do_center)
157 IF (iao_env%do_center) THEN
158 CALL section_vals_val_get(iao_env%ibo_cc_section, "POSITION_OPERATOR_BERRY", &
159 l_val=iao_env%pos_periodic, explicit=explicit)
160 IF (.NOT. explicit) THEN
161 ! set default according to cell periodicity
162 iao_env%pos_periodic = .true.
163 IF (PRESENT(cell)) THEN
164 IF (all(cell%perd == 0)) iao_env%pos_periodic = .false.
165 END IF
166 END IF
167 END IF
168 END IF
169 END IF
170
171 END SUBROUTINE iao_read_input
172
173! **************************************************************************************************
174
175END MODULE iao_types
Handles all functions related to the CELL.
Definition cell_types.F:15
Calculate ntrinsic atomic orbitals and analyze wavefunctions.
Definition iao_types.F:14
subroutine, public iao_read_input(iao_env, iao_section, cell)
...
Definition iao_types.F:116
subroutine, public iao_set_default(iao_env)
...
Definition iao_types.F:74
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public do_iaoloc_enone
integer, parameter, public do_iaoloc_pm2
objects that represent the structure of input sections and the data contained in an input section
recursive type(section_vals_type) function, pointer, public section_vals_get_subs_vals(section_vals, subsection_name, i_rep_section, can_return_null)
returns the values of the requested subsection
subroutine, public section_vals_get(section_vals, ref_count, n_repetition, n_subs_vals_rep, section, explicit)
returns various attributes about the section_vals
subroutine, public section_vals_val_get(section_vals, keyword_name, i_rep_section, i_rep_val, n_rep_val, val, l_val, i_val, r_val, c_val, l_vals, i_vals, r_vals, c_vals, explicit)
returns the requested value
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Type defining parameters related to the simulation cell.
Definition cell_types.F:55