(git:15c1bfc)
Loading...
Searching...
No Matches
qs_ks_types.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2025 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
9!> \par History
10!> 11.2002 created [fawzi]
11!> 10.2014 Moved many components from qs_env to here [Ole Schuett]
12!> 11.2014 unified k-point and gamma-point code [Ole Schuett]
13!> \author Fawzi Mohamed
14! **************************************************************************************************
17 USE atprop_types, ONLY: atprop_type
18 USE cell_types, ONLY: cell_type
39 USE kpoint_types, ONLY: kpoint_release,&
46 USE pw_env_types, ONLY: pw_env_release,&
49 USE pw_types, ONLY: pw_c1d_gs_type,&
56 USE qs_rho_types, ONLY: qs_rho_create,&
64 USE virial_types, ONLY: virial_type
65#include "./base/base_uses.f90"
66
67 IMPLICIT NONE
68 PRIVATE
69
70 LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .true.
71 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_ks_types'
72
75
76! **************************************************************************************************
77!> \brief calculation environment to calculate the ks matrix,
78!> holds all the needed vars.
79!> assumes that the core hamiltonian and energy are up to date.
80!> \param s_mstruct_changed if the sparsity structure of s in qs_env where this
81!> ks_env lives has changed
82!> \param rho_changed if the rho stored in the qs_env has changed
83!> \param forces_up_to_date if the forces are up to date
84!> \param potential_changed if some external potential changed (such as due to the constraint)
85!>
86!> \param matrix_h core hamiltonian (matrix_h(1)), if needed by the calculation also
87!> its derivatives wrt. x,y, and z (matrix_h(2:4))
88!> \param matrix_ks Khon-Sham matrix (filtered by the structure of S).
89!> with LSD an array with the different orbitals
90!> \param matrix_s the overlap matrix (matrix_s(1)), if needed by the calculation also
91!> its derivatives wrt. x,y, and z (matrix_s(2:4))
92!> \param kinetic kinetic part of h
93!>
94!> \param rho the (old) density, in various representations (ao+grid)
95!> \param rho_xc the (old) soft density, used for the GAPW_XC method only
96!> \param rho_core a grid with the charges of the cores of the atoms in the
97!> reciprocal (g) space
98!> \param vppl a realspace grid with the local pseudopotential
99!> \param vee a realspace grid with the external electrostatic potential
100!>
101!> \param neighbor_list_id the current version of the neighbor_list
102!> \param sab_orb ,sac_ae, sac_ppl, sac_lri, sap_ppnl:
103!> neighbor lists for the calculation of the core Hamiltonian matrix
104!> \param sap_oce: neighbor lists for the calculation of the expansion
105!> coefficients of the local atomic densities rho1_hard and rho1_soft
106!> \param sab_se: neighbor lists for the calculation of the 2 centers
107!> hartree term in semi-empirical methods
108!> \param sac_tbe: neighbor lists for the calculation of the tight binding
109!> Ewald terms (DFTB)
110!> \param sab_core neighbor lists for the calculation of the core interactions
111!> \param sab_xb neighbor lists for the calculation of the XB interactions in xTB
112!> \param sab_xtb_pp neighbor lists for the calculation of the repulsive interactions in xTB
113!> \param sab_xtb_nonbond neighbor lists for the calculation of the nonbonded interactions in xTB
114!> \param sab_all neighbor lists for the calculation of the matrix element of
115!> non-symmetric operators
116!> \param sab_vdw: neighbor lists for the calculation of dispersion interactions
117!> \param sab_scp: neighbor lists for the calculation of self-consistent polarization
118!> \param sab_almo: neighbor lists to create ALMO delocalization template
119!> \param sab_kp: neighbor lists to create kp image cell lists
120!> \param sab_kp_nosym: neighbor lists to create kp image cell lists, non-symmetric
121!> \param sab_cneo: neighbor lists for the calculation of the quantum nuclear core Hamiltonian matrix
122!>
123!> \param kpoints information on the kpoints used
124!> \param subsys the particles, molecules,... of this environment
125!> \param dft_control object that contains the values of various parameters
126!> relevant to a dft calculation
127!> \param distribution_2d: distribution of the atom pairs between the processors
128!>
129!> \par History
130!> 04.2002 created [fawzi]
131!> 10.2002 introduced pools, uses updated rho as input,
132!> removed most temporary variables, renamed may vars,
133!> began conversion to LSD [fawzi]
134!> 10.2014 Moved many components from qs_env here [Ole Schuett]
135!> \author Fawzi Mohamed
136! **************************************************************************************************
138 PRIVATE
139 LOGICAL :: s_mstruct_changed = .true., &
140 rho_changed = .true., &
141 potential_changed = .true., &
142 forces_up_to_date = .false., &
143 complex_ks = .false.
144 INTEGER :: n_evals = 0
145
146 ! hartree is supposed to contain the hartree potential (for cube output)
147 ! ugly to keep it always around only for a cube output...
148 TYPE(pw_r3d_rs_type), POINTER :: v_hartree_rspace => null()
149
150 TYPE(kpoint_transitional_type) :: matrix_ks, &
151 matrix_s, &
152 kinetic, &
153 matrix_h, &
154 matrix_w, &
155 matrix_vxc, &
156 matrix_s_ri_aux, &
157 matrix_ks_im, &
158 matrix_h_im
159
160 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_p_mp2 => null(), &
161 matrix_p_mp2_admm => null()
162
163 TYPE(qs_rho_type), POINTER :: rho => null(), &
164 rho_xc => null()
165
166 TYPE(pw_r3d_rs_type), POINTER :: vppl => null(), &
167 rho_nlcc => null()
168 TYPE(pw_c1d_gs_type), POINTER :: rho_nlcc_g => null()
169
170 TYPE(pw_c1d_gs_type), POINTER :: rho_core => null()
171 TYPE(pw_r3d_rs_type), POINTER :: vee => null()
172
173 INTEGER :: neighbor_list_id = -1
174 TYPE(neighbor_list_set_p_type), DIMENSION(:), POINTER :: sab_orb => null(), &
175 sac_ae => null(), &
176 sac_ppl => null(), &
177 sac_lri => null(), &
178 sap_ppnl => null(), &
179 sap_oce => null(), &
180 sab_se => null(), &
181 sab_vdw => null(), &
182 sab_scp => null(), &
183 sab_tbe => null(), &
184 sab_xtbe => null(), &
185 sab_core => null(), &
186 sab_xb => null(), &
187 sab_xtb_pp => null(), &
188 sab_xtb_nonbond => null(), &
189 sab_all => null(), &
190 sab_lrc => null(), &
191 sab_almo => null(), &
192 sab_kp => null(), &
193 sab_kp_nosym => null(), &
194 sab_cneo => null()
195
196 TYPE(task_list_type), POINTER :: task_list => null()
197 TYPE(task_list_type), POINTER :: task_list_soft => null()
198
199 TYPE(kpoint_type), POINTER :: kpoints => null()
200 TYPE(qs_subsys_type), POINTER :: subsys => null()
201 TYPE(dft_control_type), POINTER :: dft_control => null()
202 TYPE(dbcsr_distribution_type), POINTER :: dbcsr_dist => null()
203 TYPE(distribution_2d_type), POINTER :: distribution_2d => null()
204 TYPE(pw_env_type), POINTER :: pw_env => null()
205 TYPE(mp_para_env_type), POINTER :: para_env => null()
206 TYPE(cp_blacs_env_type), POINTER :: blacs_env => null()
207 END TYPE qs_ks_env_type
208
209CONTAINS
210
211! **************************************************************************************************
212!> \brief Allocates a new instance of ks_env.
213!> \param ks_env ...
214!> \author Ole Schuett
215! **************************************************************************************************
216 SUBROUTINE qs_ks_env_create(ks_env)
217 TYPE(qs_ks_env_type), INTENT(OUT) :: ks_env
218
219 ALLOCATE (ks_env%rho)
220 CALL qs_rho_create(ks_env%rho)
221 ALLOCATE (ks_env%rho_xc)
222 CALL qs_rho_create(ks_env%rho_xc)
223 END SUBROUTINE qs_ks_env_create
224
225! **************************************************************************************************
226!> \brief ...
227!> \param ks_env ...
228!> \param v_hartree_rspace ...
229!> \param s_mstruct_changed ...
230!> \param rho_changed ...
231!> \param potential_changed ...
232!> \param forces_up_to_date ...
233!> \param complex_ks ...
234!> \param matrix_h ...
235!> \param matrix_h_im ...
236!> \param matrix_ks ...
237!> \param matrix_ks_im ...
238!> \param matrix_vxc ...
239!> \param kinetic ...
240!> \param matrix_s ...
241!> \param matrix_s_RI_aux ...
242!> \param matrix_w ...
243!> \param matrix_p_mp2 ...
244!> \param matrix_p_mp2_admm ...
245!> \param matrix_h_kp ...
246!> \param matrix_h_im_kp ...
247!> \param matrix_ks_kp ...
248!> \param matrix_vxc_kp ...
249!> \param kinetic_kp ...
250!> \param matrix_s_kp ...
251!> \param matrix_w_kp ...
252!> \param matrix_s_RI_aux_kp ...
253!> \param matrix_ks_im_kp ...
254!> \param rho ...
255!> \param rho_xc ...
256!> \param vppl ...
257!> \param rho_core ...
258!> \param rho_nlcc ...
259!> \param rho_nlcc_g ...
260!> \param vee ...
261!> \param neighbor_list_id ...
262!> \param sab_orb ...
263!> \param sab_all ...
264!> \param sac_ae ...
265!> \param sac_ppl ...
266!> \param sac_lri ...
267!> \param sap_ppnl ...
268!> \param sap_oce ...
269!> \param sab_lrc ...
270!> \param sab_se ...
271!> \param sab_xtbe ...
272!> \param sab_tbe ...
273!> \param sab_core ...
274!> \param sab_xb ...
275!> \param sab_xtb_pp ...
276!> \param sab_xtb_nonbond ...
277!> \param sab_vdw ...
278!> \param sab_scp ...
279!> \param sab_almo ...
280!> \param sab_kp ...
281!> \param sab_kp_nosym ...
282!> \param sab_cneo ...
283!> \param task_list ...
284!> \param task_list_soft ...
285!> \param kpoints ...
286!> \param do_kpoints ...
287!> \param atomic_kind_set ...
288!> \param qs_kind_set ...
289!> \param cell ...
290!> \param cell_ref ...
291!> \param use_ref_cell ...
292!> \param particle_set ...
293!> \param energy ...
294!> \param force ...
295!> \param local_particles ...
296!> \param local_molecules ...
297!> \param molecule_kind_set ...
298!> \param molecule_set ...
299!> \param subsys ...
300!> \param cp_subsys ...
301!> \param virial ...
302!> \param results ...
303!> \param atprop ...
304!> \param nkind ...
305!> \param natom ...
306!> \param dft_control ...
307!> \param dbcsr_dist ...
308!> \param distribution_2d ...
309!> \param pw_env ...
310!> \param para_env ...
311!> \param blacs_env ...
312!> \param nelectron_total ...
313!> \param nelectron_spin ...
314! **************************************************************************************************
315 SUBROUTINE get_ks_env(ks_env, v_hartree_rspace, &
316 s_mstruct_changed, rho_changed, &
317 potential_changed, forces_up_to_date, complex_ks, &
318 matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, &
319 kinetic, matrix_s, &
320 matrix_s_RI_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, &
321 matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, &
322 matrix_s_RI_aux_kp, matrix_ks_im_kp, &
323 rho, rho_xc, &
324 vppl, rho_core, rho_nlcc, rho_nlcc_g, vee, &
325 neighbor_list_id, &
326 sab_orb, sab_all, sac_ae, sac_ppl, sac_lri, sap_ppnl, sap_oce, sab_lrc, &
327 sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, &
328 sab_vdw, sab_scp, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, &
329 task_list, task_list_soft, &
330 kpoints, do_kpoints, &
331 atomic_kind_set, qs_kind_set, cell, cell_ref, use_ref_cell, &
332 particle_set, energy, force, local_particles, local_molecules, &
333 molecule_kind_set, molecule_set, subsys, cp_subsys, virial, results, atprop, &
334 nkind, natom, dft_control, dbcsr_dist, distribution_2d, pw_env, &
335 para_env, blacs_env, nelectron_total, nelectron_spin)
336
337 TYPE(qs_ks_env_type), INTENT(IN) :: ks_env
338 TYPE(pw_r3d_rs_type), OPTIONAL, POINTER :: v_hartree_rspace
339 LOGICAL, OPTIONAL :: s_mstruct_changed, rho_changed, &
340 potential_changed, forces_up_to_date, &
341 complex_ks
342 TYPE(dbcsr_p_type), DIMENSION(:), OPTIONAL, POINTER :: matrix_h, matrix_h_im, matrix_ks, &
343 matrix_ks_im, matrix_vxc, kinetic, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, &
344 matrix_p_mp2_admm
345 TYPE(dbcsr_p_type), DIMENSION(:, :), OPTIONAL, POINTER :: matrix_h_kp, matrix_h_im_kp, &
346 matrix_ks_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, &
347 matrix_ks_im_kp
348 TYPE(qs_rho_type), OPTIONAL, POINTER :: rho, rho_xc
349 TYPE(pw_r3d_rs_type), OPTIONAL, POINTER :: vppl
350 TYPE(pw_c1d_gs_type), OPTIONAL, POINTER :: rho_core
351 TYPE(pw_r3d_rs_type), OPTIONAL, POINTER :: rho_nlcc
352 TYPE(pw_c1d_gs_type), OPTIONAL, POINTER :: rho_nlcc_g
353 TYPE(pw_r3d_rs_type), OPTIONAL, POINTER :: vee
354 INTEGER, OPTIONAL :: neighbor_list_id
355 TYPE(neighbor_list_set_p_type), DIMENSION(:), OPTIONAL, POINTER :: sab_orb, sab_all, sac_ae, &
356 sac_ppl, sac_lri, sap_ppnl, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, &
357 sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_vdw, sab_scp, sab_almo, sab_kp, sab_kp_nosym, &
358 sab_cneo
359 TYPE(task_list_type), OPTIONAL, POINTER :: task_list, task_list_soft
360 TYPE(kpoint_type), OPTIONAL, POINTER :: kpoints
361 LOGICAL, OPTIONAL :: do_kpoints
362 TYPE(atomic_kind_type), DIMENSION(:), OPTIONAL, &
363 POINTER :: atomic_kind_set
364 TYPE(qs_kind_type), DIMENSION(:), OPTIONAL, &
365 POINTER :: qs_kind_set
366 TYPE(cell_type), OPTIONAL, POINTER :: cell, cell_ref
367 LOGICAL, OPTIONAL :: use_ref_cell
368 TYPE(particle_type), DIMENSION(:), OPTIONAL, &
369 POINTER :: particle_set
370 TYPE(qs_energy_type), OPTIONAL, POINTER :: energy
371 TYPE(qs_force_type), DIMENSION(:), OPTIONAL, &
372 POINTER :: force
373 TYPE(distribution_1d_type), OPTIONAL, POINTER :: local_particles, local_molecules
374 TYPE(molecule_kind_type), DIMENSION(:), OPTIONAL, &
375 POINTER :: molecule_kind_set
376 TYPE(molecule_type), DIMENSION(:), OPTIONAL, &
377 POINTER :: molecule_set
378 TYPE(qs_subsys_type), OPTIONAL, POINTER :: subsys
379 TYPE(cp_subsys_type), OPTIONAL, POINTER :: cp_subsys
380 TYPE(virial_type), OPTIONAL, POINTER :: virial
381 TYPE(cp_result_type), OPTIONAL, POINTER :: results
382 TYPE(atprop_type), OPTIONAL, POINTER :: atprop
383 INTEGER, OPTIONAL :: nkind, natom
384 TYPE(dft_control_type), OPTIONAL, POINTER :: dft_control
385 TYPE(dbcsr_distribution_type), OPTIONAL, POINTER :: dbcsr_dist
386 TYPE(distribution_2d_type), OPTIONAL, POINTER :: distribution_2d
387 TYPE(pw_env_type), OPTIONAL, POINTER :: pw_env
388 TYPE(mp_para_env_type), OPTIONAL, POINTER :: para_env
389 TYPE(cp_blacs_env_type), OPTIONAL, POINTER :: blacs_env
390 INTEGER, OPTIONAL :: nelectron_total
391 INTEGER, DIMENSION(2), OPTIONAL :: nelectron_spin
392
393 IF (.NOT. ASSOCIATED(ks_env%subsys)) cpabort("get_ks_env: subsys not associated")
394
395 IF (PRESENT(s_mstruct_changed)) s_mstruct_changed = ks_env%s_mstruct_changed
396 IF (PRESENT(rho_changed)) rho_changed = ks_env%rho_changed
397 IF (PRESENT(potential_changed)) potential_changed = ks_env%potential_changed
398 IF (PRESENT(forces_up_to_date)) forces_up_to_date = ks_env%forces_up_to_date
399 IF (PRESENT(complex_ks)) complex_ks = ks_env%complex_ks
400 IF (PRESENT(v_hartree_rspace)) v_hartree_rspace => ks_env%v_hartree_rspace
401
402 IF (PRESENT(matrix_ks)) matrix_ks => get_1d_pointer(ks_env%matrix_ks)
403 IF (PRESENT(matrix_s)) matrix_s => get_1d_pointer(ks_env%matrix_s)
404 IF (PRESENT(matrix_s_ri_aux)) matrix_s_ri_aux => get_1d_pointer(ks_env%matrix_s_RI_aux)
405 IF (PRESENT(kinetic)) kinetic => get_1d_pointer(ks_env%kinetic)
406 IF (PRESENT(matrix_h)) matrix_h => get_1d_pointer(ks_env%matrix_h)
407 IF (PRESENT(matrix_h_im)) matrix_h_im => get_1d_pointer(ks_env%matrix_h_im)
408 IF (PRESENT(matrix_w)) matrix_w => get_1d_pointer(ks_env%matrix_w)
409 IF (PRESENT(matrix_vxc)) matrix_vxc => get_1d_pointer(ks_env%matrix_vxc)
410
411 IF (PRESENT(matrix_ks_kp)) matrix_ks_kp => get_2d_pointer(ks_env%matrix_ks)
412 IF (PRESENT(matrix_ks_im_kp)) matrix_ks_im_kp => get_2d_pointer(ks_env%matrix_ks_im)
413 IF (PRESENT(matrix_s_kp)) matrix_s_kp => get_2d_pointer(ks_env%matrix_s)
414 IF (PRESENT(matrix_s_ri_aux_kp)) matrix_s_ri_aux_kp => get_2d_pointer(ks_env%matrix_s_RI_aux)
415 IF (PRESENT(matrix_w_kp)) matrix_w_kp => get_2d_pointer(ks_env%matrix_w)
416 IF (PRESENT(kinetic_kp)) kinetic_kp => get_2d_pointer(ks_env%kinetic)
417 IF (PRESENT(matrix_h_kp)) matrix_h_kp => get_2d_pointer(ks_env%matrix_h)
418 IF (PRESENT(matrix_h_im_kp)) matrix_h_im_kp => get_2d_pointer(ks_env%matrix_h_im)
419 IF (PRESENT(matrix_vxc_kp)) matrix_vxc_kp => get_2d_pointer(ks_env%matrix_vxc)
420 IF (PRESENT(matrix_ks_im)) matrix_ks_im => get_1d_pointer(ks_env%matrix_ks_im)
421
422 IF (PRESENT(matrix_p_mp2)) matrix_p_mp2 => ks_env%matrix_p_mp2
423 IF (PRESENT(matrix_p_mp2_admm)) matrix_p_mp2_admm => ks_env%matrix_p_mp2_admm
424 IF (PRESENT(rho)) rho => ks_env%rho
425 IF (PRESENT(rho_xc)) rho_xc => ks_env%rho_xc
426 IF (PRESENT(rho_core)) rho_core => ks_env%rho_core
427 IF (PRESENT(rho_nlcc)) rho_nlcc => ks_env%rho_nlcc
428 IF (PRESENT(rho_nlcc_g)) rho_nlcc_g => ks_env%rho_nlcc_g
429 IF (PRESENT(vppl)) vppl => ks_env%vppl
430 IF (PRESENT(vee)) vee => ks_env%vee
431
432 IF (PRESENT(neighbor_list_id)) neighbor_list_id = ks_env%neighbor_list_id
433 IF (PRESENT(sab_orb)) sab_orb => ks_env%sab_orb
434 IF (PRESENT(sab_all)) sab_all => ks_env%sab_all
435 IF (PRESENT(sab_vdw)) sab_vdw => ks_env%sab_vdw
436 IF (PRESENT(sab_scp)) sab_scp => ks_env%sab_scp
437 IF (PRESENT(sac_ae)) sac_ae => ks_env%sac_ae
438 IF (PRESENT(sac_ppl)) sac_ppl => ks_env%sac_ppl
439 IF (PRESENT(sac_lri)) sac_lri => ks_env%sac_lri
440 IF (PRESENT(sap_ppnl)) sap_ppnl => ks_env%sap_ppnl
441 IF (PRESENT(sap_oce)) sap_oce => ks_env%sap_oce
442 IF (PRESENT(sab_se)) sab_se => ks_env%sab_se
443 IF (PRESENT(sab_lrc)) sab_lrc => ks_env%sab_lrc
444 IF (PRESENT(sab_tbe)) sab_tbe => ks_env%sab_tbe
445 IF (PRESENT(sab_xtbe)) sab_xtbe => ks_env%sab_xtbe
446 IF (PRESENT(sab_core)) sab_core => ks_env%sab_core
447 IF (PRESENT(sab_xb)) sab_xb => ks_env%sab_xb
448 IF (PRESENT(sab_xtb_pp)) sab_xtb_pp => ks_env%sab_xtb_pp
449 IF (PRESENT(sab_xtb_nonbond)) sab_xtb_nonbond => ks_env%sab_xtb_nonbond
450 IF (PRESENT(sab_almo)) sab_almo => ks_env%sab_almo
451 IF (PRESENT(sab_kp)) sab_kp => ks_env%sab_kp
452 IF (PRESENT(sab_kp_nosym)) sab_kp_nosym => ks_env%sab_kp_nosym
453 IF (PRESENT(sab_cneo)) sab_cneo => ks_env%sab_cneo
454 IF (PRESENT(dft_control)) dft_control => ks_env%dft_control
455 IF (PRESENT(dbcsr_dist)) dbcsr_dist => ks_env%dbcsr_dist
456 IF (PRESENT(distribution_2d)) distribution_2d => ks_env%distribution_2d
457 IF (PRESENT(pw_env)) pw_env => ks_env%pw_env
458 IF (PRESENT(para_env)) para_env => ks_env%para_env
459 IF (PRESENT(blacs_env)) blacs_env => ks_env%blacs_env
460
461 IF (PRESENT(task_list)) task_list => ks_env%task_list
462 IF (PRESENT(task_list_soft)) task_list_soft => ks_env%task_list_soft
463
464 IF (PRESENT(kpoints)) kpoints => ks_env%kpoints
465 IF (PRESENT(do_kpoints)) THEN
466 do_kpoints = (ks_env%kpoints%nkp > 0)
467 END IF
468
469 IF (PRESENT(subsys)) subsys => ks_env%subsys
470 CALL qs_subsys_get(ks_env%subsys, &
471 local_molecules=local_molecules, &
472 local_particles=local_particles, &
473 atprop=atprop, &
474 virial=virial, &
475 results=results, &
476 cell=cell, &
477 cell_ref=cell_ref, &
478 use_ref_cell=use_ref_cell, &
479 energy=energy, &
480 force=force, &
481 qs_kind_set=qs_kind_set, &
482 cp_subsys=cp_subsys, &
483 atomic_kind_set=atomic_kind_set, &
484 particle_set=particle_set, &
485 molecule_kind_set=molecule_kind_set, &
486 molecule_set=molecule_set, &
487 natom=natom, &
488 nkind=nkind, &
489 nelectron_total=nelectron_total, &
490 nelectron_spin=nelectron_spin)
491
492 END SUBROUTINE get_ks_env
493
494! **************************************************************************************************
495!> \brief ...
496!> \param ks_env ...
497!> \param v_hartree_rspace ...
498!> \param s_mstruct_changed ...
499!> \param rho_changed ...
500!> \param potential_changed ...
501!> \param forces_up_to_date ...
502!> \param complex_ks ...
503!> \param matrix_h ...
504!> \param matrix_h_im ...
505!> \param matrix_ks ...
506!> \param matrix_ks_im ...
507!> \param matrix_vxc ...
508!> \param kinetic ...
509!> \param matrix_s ...
510!> \param matrix_s_RI_aux ...
511!> \param matrix_w ...
512!> \param matrix_p_mp2 ...
513!> \param matrix_p_mp2_admm ...
514!> \param matrix_h_kp ...
515!> \param matrix_h_im_kp ...
516!> \param matrix_ks_kp ...
517!> \param matrix_vxc_kp ...
518!> \param kinetic_kp ...
519!> \param matrix_s_kp ...
520!> \param matrix_w_kp ...
521!> \param matrix_s_RI_aux_kp ...
522!> \param matrix_ks_im_kp ...
523!> \param vppl ...
524!> \param rho_core ...
525!> \param rho_nlcc ...
526!> \param rho_nlcc_g ...
527!> \param vee ...
528!> \param neighbor_list_id ...
529!> \param kpoints ...
530!> \param sab_orb ...
531!> \param sab_all ...
532!> \param sac_ae ...
533!> \param sac_ppl ...
534!> \param sac_lri ...
535!> \param sap_ppnl ...
536!> \param sap_oce ...
537!> \param sab_lrc ...
538!> \param sab_se ...
539!> \param sab_xtbe ...
540!> \param sab_tbe ...
541!> \param sab_core ...
542!> \param sab_xb ...
543!> \param sab_xtb_pp ...
544!> \param sab_xtb_nonbond ...
545!> \param sab_vdw ...
546!> \param sab_scp ...
547!> \param sab_almo ...
548!> \param sab_kp ...
549!> \param sab_kp_nosym ...
550!> \param sab_cneo ...
551!> \param task_list ...
552!> \param task_list_soft ...
553!> \param subsys ...
554!> \param dft_control ...
555!> \param dbcsr_dist ...
556!> \param distribution_2d ...
557!> \param pw_env ...
558!> \param para_env ...
559!> \param blacs_env ...
560! **************************************************************************************************
561 SUBROUTINE set_ks_env(ks_env, v_hartree_rspace, &
562 s_mstruct_changed, rho_changed, &
563 potential_changed, forces_up_to_date, complex_ks, &
564 matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, &
565 kinetic, matrix_s, &
566 matrix_s_RI_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, &
567 matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, &
568 matrix_s_RI_aux_kp, matrix_ks_im_kp, &
569 vppl, rho_core, rho_nlcc, rho_nlcc_g, vee, &
570 neighbor_list_id, &
571 kpoints, &
572 sab_orb, sab_all, sac_ae, sac_ppl, sac_lri, sap_ppnl, sap_oce, sab_lrc, &
573 sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, &
574 sab_vdw, sab_scp, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, &
575 task_list, task_list_soft, &
576 subsys, dft_control, dbcsr_dist, distribution_2d, pw_env, &
577 para_env, blacs_env)
578
579 TYPE(qs_ks_env_type), INTENT(INOUT) :: ks_env
580 TYPE(pw_r3d_rs_type), OPTIONAL, POINTER :: v_hartree_rspace
581 LOGICAL, OPTIONAL :: s_mstruct_changed, rho_changed, &
582 potential_changed, forces_up_to_date, &
583 complex_ks
584 TYPE(dbcsr_p_type), DIMENSION(:), OPTIONAL, POINTER :: matrix_h, matrix_h_im, matrix_ks, &
585 matrix_ks_im, matrix_vxc, kinetic, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, &
586 matrix_p_mp2_admm
587 TYPE(dbcsr_p_type), DIMENSION(:, :), OPTIONAL, POINTER :: matrix_h_kp, matrix_h_im_kp, &
588 matrix_ks_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, &
589 matrix_ks_im_kp
590 TYPE(pw_r3d_rs_type), OPTIONAL, POINTER :: vppl
591 TYPE(pw_c1d_gs_type), OPTIONAL, POINTER :: rho_core
592 TYPE(pw_r3d_rs_type), OPTIONAL, POINTER :: rho_nlcc
593 TYPE(pw_c1d_gs_type), OPTIONAL, POINTER :: rho_nlcc_g
594 TYPE(pw_r3d_rs_type), OPTIONAL, POINTER :: vee
595 INTEGER, OPTIONAL :: neighbor_list_id
596 TYPE(kpoint_type), OPTIONAL, POINTER :: kpoints
597 TYPE(neighbor_list_set_p_type), DIMENSION(:), OPTIONAL, POINTER :: sab_orb, sab_all, sac_ae, &
598 sac_ppl, sac_lri, sap_ppnl, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, &
599 sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_vdw, sab_scp, sab_almo, sab_kp, sab_kp_nosym, &
600 sab_cneo
601 TYPE(task_list_type), OPTIONAL, POINTER :: task_list, task_list_soft
602 TYPE(qs_subsys_type), OPTIONAL, POINTER :: subsys
603 TYPE(dft_control_type), OPTIONAL, POINTER :: dft_control
604 TYPE(dbcsr_distribution_type), OPTIONAL, POINTER :: dbcsr_dist
605 TYPE(distribution_2d_type), OPTIONAL, POINTER :: distribution_2d
606 TYPE(pw_env_type), OPTIONAL, POINTER :: pw_env
607 TYPE(mp_para_env_type), OPTIONAL, POINTER :: para_env
608 TYPE(cp_blacs_env_type), OPTIONAL, POINTER :: blacs_env
609
610 IF (PRESENT(s_mstruct_changed)) ks_env%s_mstruct_changed = s_mstruct_changed
611 IF (PRESENT(rho_changed)) ks_env%rho_changed = rho_changed
612 IF (PRESENT(potential_changed)) ks_env%potential_changed = potential_changed
613 IF (PRESENT(forces_up_to_date)) ks_env%forces_up_to_date = forces_up_to_date
614 IF (PRESENT(complex_ks)) ks_env%complex_ks = complex_ks
615 IF (ks_env%s_mstruct_changed .OR. ks_env%potential_changed .OR. ks_env%rho_changed) &
616 ks_env%forces_up_to_date = .false.
617 IF (PRESENT(v_hartree_rspace)) ks_env%v_hartree_rspace => v_hartree_rspace
618
619 IF (PRESENT(matrix_h)) CALL set_1d_pointer(ks_env%matrix_h, matrix_h)
620 IF (PRESENT(matrix_h_kp)) CALL set_2d_pointer(ks_env%matrix_h, matrix_h_kp)
621
622 IF (PRESENT(matrix_h_im)) CALL set_1d_pointer(ks_env%matrix_h_im, matrix_h_im)
623 IF (PRESENT(matrix_h_im_kp)) CALL set_2d_pointer(ks_env%matrix_h_im, matrix_h_im_kp)
624
625 IF (PRESENT(matrix_ks)) CALL set_1d_pointer(ks_env%matrix_ks, matrix_ks)
626 IF (PRESENT(matrix_ks_kp)) CALL set_2d_pointer(ks_env%matrix_ks, matrix_ks_kp)
627
628 IF (PRESENT(matrix_vxc)) CALL set_1d_pointer(ks_env%matrix_vxc, matrix_vxc)
629 IF (PRESENT(matrix_vxc_kp)) CALL set_2d_pointer(ks_env%matrix_vxc, matrix_vxc_kp)
630
631 IF (PRESENT(matrix_s)) CALL set_1d_pointer(ks_env%matrix_s, matrix_s)
632 IF (PRESENT(matrix_s_kp)) CALL set_2d_pointer(ks_env%matrix_s, matrix_s_kp)
633
634 IF (PRESENT(kinetic)) CALL set_1d_pointer(ks_env%kinetic, kinetic)
635 IF (PRESENT(kinetic_kp)) CALL set_2d_pointer(ks_env%kinetic, kinetic_kp)
636
637 IF (PRESENT(matrix_w)) CALL set_1d_pointer(ks_env%matrix_w, matrix_w)
638 IF (PRESENT(matrix_w_kp)) CALL set_2d_pointer(ks_env%matrix_w, matrix_w_kp)
639
640 IF (PRESENT(matrix_s_ri_aux)) CALL set_1d_pointer(ks_env%matrix_s_RI_aux, matrix_s_ri_aux)
641 IF (PRESENT(matrix_s_ri_aux_kp)) CALL set_2d_pointer(ks_env%matrix_s_RI_aux, matrix_s_ri_aux_kp)
642
643 IF (PRESENT(matrix_ks_im)) CALL set_1d_pointer(ks_env%matrix_ks_im, matrix_ks_im)
644 IF (PRESENT(matrix_ks_im_kp)) CALL set_2d_pointer(ks_env%matrix_ks_im, matrix_ks_im_kp)
645
646 IF (PRESENT(matrix_p_mp2)) ks_env%matrix_p_mp2 => matrix_p_mp2
647 IF (PRESENT(matrix_p_mp2_admm)) ks_env%matrix_p_mp2_admm => matrix_p_mp2_admm
648 IF (PRESENT(rho_core)) ks_env%rho_core => rho_core
649 IF (PRESENT(rho_nlcc)) ks_env%rho_nlcc => rho_nlcc
650 IF (PRESENT(rho_nlcc_g)) ks_env%rho_nlcc_g => rho_nlcc_g
651 IF (PRESENT(vppl)) ks_env%vppl => vppl
652 IF (PRESENT(vee)) ks_env%vee => vee
653
654 IF (PRESENT(neighbor_list_id)) ks_env%neighbor_list_id = neighbor_list_id
655 IF (PRESENT(kpoints)) ks_env%kpoints => kpoints
656 IF (PRESENT(sab_orb)) ks_env%sab_orb => sab_orb
657 IF (PRESENT(sab_vdw)) ks_env%sab_vdw => sab_vdw
658 IF (PRESENT(sab_scp)) ks_env%sab_scp => sab_scp
659 IF (PRESENT(sab_all)) ks_env%sab_all => sab_all
660 IF (PRESENT(sac_ae)) ks_env%sac_ae => sac_ae
661 IF (PRESENT(sac_ppl)) ks_env%sac_ppl => sac_ppl
662 IF (PRESENT(sac_lri)) ks_env%sac_lri => sac_lri
663 IF (PRESENT(sap_ppnl)) ks_env%sap_ppnl => sap_ppnl
664 IF (PRESENT(sap_oce)) ks_env%sap_oce => sap_oce
665 IF (PRESENT(sab_se)) ks_env%sab_se => sab_se
666 IF (PRESENT(sab_lrc)) ks_env%sab_lrc => sab_lrc
667 IF (PRESENT(sab_tbe)) ks_env%sab_tbe => sab_tbe
668 IF (PRESENT(sab_xtbe)) ks_env%sab_xtbe => sab_xtbe
669 IF (PRESENT(sab_core)) ks_env%sab_core => sab_core
670 IF (PRESENT(sab_xb)) ks_env%sab_xb => sab_xb
671 IF (PRESENT(sab_xtb_pp)) ks_env%sab_xtb_pp => sab_xtb_pp
672 IF (PRESENT(sab_xtb_nonbond)) ks_env%sab_xtb_nonbond => sab_xtb_nonbond
673 IF (PRESENT(sab_almo)) ks_env%sab_almo => sab_almo
674 IF (PRESENT(sab_kp)) ks_env%sab_kp => sab_kp
675 IF (PRESENT(sab_kp_nosym)) ks_env%sab_kp_nosym => sab_kp_nosym
676 IF (PRESENT(sab_cneo)) ks_env%sab_cneo => sab_cneo
677
678 IF (PRESENT(task_list)) ks_env%task_list => task_list
679 IF (PRESENT(task_list_soft)) ks_env%task_list_soft => task_list_soft
680
681 IF (PRESENT(subsys)) THEN
682 IF (ASSOCIATED(ks_env%subsys)) THEN
683 IF (ASSOCIATED(ks_env%subsys, subsys)) THEN
684 CALL qs_subsys_release(ks_env%subsys)
685 DEALLOCATE (ks_env%subsys)
686 END IF
687 END IF
688 ks_env%subsys => subsys
689 END IF
690 IF (PRESENT(dft_control)) THEN
691 IF (ASSOCIATED(ks_env%dft_control)) THEN
692 IF (.NOT. ASSOCIATED(ks_env%dft_control, dft_control)) THEN
693 CALL dft_control_release(ks_env%dft_control)
694 DEALLOCATE (ks_env%dft_control)
695 END IF
696 END IF
697 ks_env%dft_control => dft_control
698 END IF
699 IF (PRESENT(dbcsr_dist)) THEN
700 IF (ASSOCIATED(ks_env%dbcsr_dist)) THEN
701 IF (.NOT. ASSOCIATED(ks_env%dbcsr_dist, dbcsr_dist)) THEN
702 CALL dbcsr_distribution_release(ks_env%dbcsr_dist)
703 DEALLOCATE (ks_env%dbcsr_dist)
704 END IF
705 END IF
706 ks_env%dbcsr_dist => dbcsr_dist
707 END IF
708 IF (PRESENT(distribution_2d)) THEN
709 CALL distribution_2d_retain(distribution_2d)
710 CALL distribution_2d_release(ks_env%distribution_2d)
711 ks_env%distribution_2d => distribution_2d
712 END IF
713 IF (PRESENT(pw_env)) THEN
714 CALL pw_env_retain(pw_env)
715 CALL pw_env_release(ks_env%pw_env)
716 ks_env%pw_env => pw_env
717 END IF
718 IF (PRESENT(para_env)) THEN
719 CALL para_env%retain()
720 CALL mp_para_env_release(ks_env%para_env)
721 ks_env%para_env => para_env
722 END IF
723 IF (PRESENT(blacs_env)) THEN
724 CALL blacs_env%retain()
725 CALL cp_blacs_env_release(ks_env%blacs_env)
726 ks_env%blacs_env => blacs_env
727 END IF
728 END SUBROUTINE set_ks_env
729
730! **************************************************************************************************
731!> \brief releases the ks_env (see doc/ReferenceCounting.html)
732!> \param ks_env the ks_env to be released
733!> \par History
734!> 05.2002 created [fawzi]
735!> \author Fawzi Mohamed
736! **************************************************************************************************
737 SUBROUTINE qs_ks_release(ks_env)
738 TYPE(qs_ks_env_type), INTENT(INOUT) :: ks_env
739
740 IF (ASSOCIATED(ks_env%v_hartree_rspace)) THEN
741 CALL ks_env%v_hartree_rspace%release()
742 DEALLOCATE (ks_env%v_hartree_rspace)
743 END IF
744
745 CALL kpoint_transitional_release(ks_env%matrix_ks)
746 CALL kpoint_transitional_release(ks_env%matrix_ks_im)
747 CALL kpoint_transitional_release(ks_env%matrix_h)
748 CALL kpoint_transitional_release(ks_env%matrix_h_im)
749 CALL kpoint_transitional_release(ks_env%matrix_vxc)
750 CALL kpoint_transitional_release(ks_env%matrix_s)
751 CALL kpoint_transitional_release(ks_env%matrix_w)
752 CALL kpoint_transitional_release(ks_env%kinetic)
753 CALL kpoint_transitional_release(ks_env%matrix_s_RI_aux)
754
755 IF (ASSOCIATED(ks_env%matrix_p_mp2)) &
756 CALL dbcsr_deallocate_matrix_set(ks_env%matrix_p_mp2)
757 IF (ASSOCIATED(ks_env%matrix_p_mp2_admm)) &
758 CALL dbcsr_deallocate_matrix_set(ks_env%matrix_p_mp2_admm)
759 IF (ASSOCIATED(ks_env%rho)) THEN
760 CALL qs_rho_release(ks_env%rho)
761 DEALLOCATE (ks_env%rho)
762 END IF
763 IF (ASSOCIATED(ks_env%rho_xc)) THEN
764 CALL qs_rho_release(ks_env%rho_xc)
765 DEALLOCATE (ks_env%rho_xc)
766 END IF
767 IF (ASSOCIATED(ks_env%distribution_2d)) &
768 CALL distribution_2d_release(ks_env%distribution_2d)
769 IF (ASSOCIATED(ks_env%task_list)) &
770 CALL deallocate_task_list(ks_env%task_list)
771 IF (ASSOCIATED(ks_env%task_list_soft)) &
772 CALL deallocate_task_list(ks_env%task_list_soft)
773
774 IF (ASSOCIATED(ks_env%rho_nlcc_g)) THEN
775 CALL ks_env%rho_nlcc_g%release()
776 DEALLOCATE (ks_env%rho_nlcc_g)
777 END IF
778 IF (ASSOCIATED(ks_env%rho_nlcc)) THEN
779 CALL ks_env%rho_nlcc%release()
780 DEALLOCATE (ks_env%rho_nlcc)
781 END IF
782 IF (ASSOCIATED(ks_env%rho_core)) THEN
783 CALL ks_env%rho_core%release()
784 DEALLOCATE (ks_env%rho_core)
785 END IF
786 IF (ASSOCIATED(ks_env%vppl)) THEN
787 CALL ks_env%vppl%release()
788 DEALLOCATE (ks_env%vppl)
789 END IF
790 IF (ASSOCIATED(ks_env%vee)) THEN
791 CALL ks_env%vee%release()
792 DEALLOCATE (ks_env%vee)
793 END IF
794 IF (ASSOCIATED(ks_env%dbcsr_dist)) THEN
795 CALL dbcsr_distribution_release(ks_env%dbcsr_dist)
796 DEALLOCATE (ks_env%dbcsr_dist)
797 END IF
798
799 CALL release_neighbor_list_sets(ks_env%sab_orb)
800 CALL release_neighbor_list_sets(ks_env%sac_ae)
801 CALL release_neighbor_list_sets(ks_env%sac_ppl)
802 CALL release_neighbor_list_sets(ks_env%sac_lri)
803 CALL release_neighbor_list_sets(ks_env%sap_ppnl)
804 CALL release_neighbor_list_sets(ks_env%sap_oce)
805 CALL release_neighbor_list_sets(ks_env%sab_se)
806 CALL release_neighbor_list_sets(ks_env%sab_vdw)
807 CALL release_neighbor_list_sets(ks_env%sab_scp)
808 CALL release_neighbor_list_sets(ks_env%sab_tbe)
809 CALL release_neighbor_list_sets(ks_env%sab_xtbe)
810 CALL release_neighbor_list_sets(ks_env%sab_core)
811 CALL release_neighbor_list_sets(ks_env%sab_xb)
812 CALL release_neighbor_list_sets(ks_env%sab_xtb_pp)
813 CALL release_neighbor_list_sets(ks_env%sab_xtb_nonbond)
814 CALL release_neighbor_list_sets(ks_env%sab_all)
815 CALL release_neighbor_list_sets(ks_env%sab_lrc)
816 CALL release_neighbor_list_sets(ks_env%sab_almo)
817 CALL release_neighbor_list_sets(ks_env%sab_kp)
818 CALL release_neighbor_list_sets(ks_env%sab_kp_nosym)
819 CALL release_neighbor_list_sets(ks_env%sab_cneo)
820 IF (ASSOCIATED(ks_env%dft_control)) THEN
821 CALL dft_control_release(ks_env%dft_control)
822 DEALLOCATE (ks_env%dft_control)
823 END IF
824 CALL kpoint_release(ks_env%kpoints)
825 IF (ASSOCIATED(ks_env%subsys)) THEN
826 CALL qs_subsys_release(ks_env%subsys)
827 DEALLOCATE (ks_env%subsys)
828 END IF
829 CALL pw_env_release(ks_env%pw_env)
830 CALL mp_para_env_release(ks_env%para_env)
831 CALL cp_blacs_env_release(ks_env%blacs_env)
832
833 END SUBROUTINE qs_ks_release
834
835! **************************************************************************************************
836!> \brief releases part of the ks_env
837!> \param ks_env the ks_env to be released
838!> \par History
839!> 04.2022 created [JGH]
840! **************************************************************************************************
841 SUBROUTINE qs_ks_part_release(ks_env)
842 TYPE(qs_ks_env_type), INTENT(INOUT) :: ks_env
843
844 IF (ASSOCIATED(ks_env%v_hartree_rspace)) THEN
845 CALL ks_env%v_hartree_rspace%release()
846 DEALLOCATE (ks_env%v_hartree_rspace)
847 END IF
848
849 CALL kpoint_transitional_release(ks_env%matrix_h)
850 CALL kpoint_transitional_release(ks_env%matrix_h_im)
851 CALL kpoint_transitional_release(ks_env%matrix_ks_im)
852 CALL kpoint_transitional_release(ks_env%matrix_vxc)
853 CALL kpoint_transitional_release(ks_env%matrix_w)
854 CALL kpoint_transitional_release(ks_env%kinetic)
855 CALL kpoint_transitional_release(ks_env%matrix_s_RI_aux)
856
857 IF (ASSOCIATED(ks_env%matrix_p_mp2)) &
858 CALL dbcsr_deallocate_matrix_set(ks_env%matrix_p_mp2)
859 IF (ASSOCIATED(ks_env%matrix_p_mp2_admm)) &
860 CALL dbcsr_deallocate_matrix_set(ks_env%matrix_p_mp2_admm)
861 IF (ASSOCIATED(ks_env%rho)) THEN
862 CALL qs_rho_release(ks_env%rho)
863 DEALLOCATE (ks_env%rho)
864 END IF
865 IF (ASSOCIATED(ks_env%rho_xc)) THEN
866 CALL qs_rho_release(ks_env%rho_xc)
867 DEALLOCATE (ks_env%rho_xc)
868 END IF
869 IF (ASSOCIATED(ks_env%task_list)) &
870 CALL deallocate_task_list(ks_env%task_list)
871 IF (ASSOCIATED(ks_env%task_list_soft)) &
872 CALL deallocate_task_list(ks_env%task_list_soft)
873
874 IF (ASSOCIATED(ks_env%rho_nlcc_g)) THEN
875 CALL ks_env%rho_nlcc_g%release()
876 DEALLOCATE (ks_env%rho_nlcc_g)
877 END IF
878 IF (ASSOCIATED(ks_env%rho_nlcc)) THEN
879 CALL ks_env%rho_nlcc%release()
880 DEALLOCATE (ks_env%rho_nlcc)
881 END IF
882 IF (ASSOCIATED(ks_env%rho_core)) THEN
883 CALL ks_env%rho_core%release()
884 DEALLOCATE (ks_env%rho_core)
885 END IF
886 IF (ASSOCIATED(ks_env%vppl)) THEN
887 CALL ks_env%vppl%release()
888 DEALLOCATE (ks_env%vppl)
889 END IF
890 IF (ASSOCIATED(ks_env%vee)) THEN
891 CALL ks_env%vee%release()
892 DEALLOCATE (ks_env%vee)
893 END IF
894
895 CALL release_neighbor_list_sets(ks_env%sac_ae)
896 CALL release_neighbor_list_sets(ks_env%sac_ppl)
897 CALL release_neighbor_list_sets(ks_env%sac_lri)
898 CALL release_neighbor_list_sets(ks_env%sap_ppnl)
899 CALL release_neighbor_list_sets(ks_env%sap_oce)
900 CALL release_neighbor_list_sets(ks_env%sab_se)
901 CALL release_neighbor_list_sets(ks_env%sab_vdw)
902 CALL release_neighbor_list_sets(ks_env%sab_scp)
903 CALL release_neighbor_list_sets(ks_env%sab_tbe)
904 CALL release_neighbor_list_sets(ks_env%sab_xtbe)
905 CALL release_neighbor_list_sets(ks_env%sab_core)
906 CALL release_neighbor_list_sets(ks_env%sab_xb)
907 CALL release_neighbor_list_sets(ks_env%sab_xtb_pp)
908 CALL release_neighbor_list_sets(ks_env%sab_xtb_nonbond)
909 CALL release_neighbor_list_sets(ks_env%sab_all)
910 CALL release_neighbor_list_sets(ks_env%sab_lrc)
911 CALL release_neighbor_list_sets(ks_env%sab_almo)
912 CALL release_neighbor_list_sets(ks_env%sab_kp)
913 CALL release_neighbor_list_sets(ks_env%sab_kp_nosym)
914 CALL release_neighbor_list_sets(ks_env%sab_cneo)
915 CALL kpoint_release(ks_env%kpoints)
916 CALL pw_env_release(ks_env%pw_env, ks_env%para_env)
917 END SUBROUTINE qs_ks_part_release
918
919! **************************************************************************************************
920!> \brief tells that some of the things relevant to the ks calculation
921!> did change. has to be called when changes happen otherwise
922!> the calculation will give wrong results.
923!> \param ks_env the environment that is informed about the changes
924!> \param s_mstruct_changed if true it means that the structure of the
925!> overlap matrix has changed
926!> (atoms have moved)
927!> \param rho_changed if true it means that the density has changed
928!> \param potential_changed ...
929!> \param full_reset if true everything has changed
930!> \par History
931!> 4.2002 created [fawzi]
932!> 12.2014 moved from qs_ks_methods, added deallocation of KS-matrices [Ole Schuett]
933!> \author Fawzi Mohamed
934! **************************************************************************************************
935 SUBROUTINE qs_ks_did_change(ks_env, s_mstruct_changed, rho_changed, &
936 potential_changed, full_reset)
937 TYPE(qs_ks_env_type), INTENT(INOUT) :: ks_env
938 LOGICAL, INTENT(in), OPTIONAL :: s_mstruct_changed, rho_changed, &
939 potential_changed, full_reset
940
941 CHARACTER(len=*), PARAMETER :: routinen = 'qs_ks_did_change'
942
943 INTEGER :: handle
944 LOGICAL :: my_mstruct_chg
945
946 CALL timeset(routinen, handle)
947 my_mstruct_chg = .false.
948
949 IF (PRESENT(rho_changed)) THEN
950 IF (rho_changed) ks_env%rho_changed = .true.
951 END IF
952
953 IF (PRESENT(potential_changed)) THEN
954 IF (potential_changed) ks_env%potential_changed = .true.
955 END IF
956
957 IF (PRESENT(s_mstruct_changed)) THEN
958 IF (s_mstruct_changed) my_mstruct_chg = .true.
959 END IF
960
961 IF (PRESENT(full_reset)) THEN
962 IF (full_reset) THEN
963 ks_env%potential_changed = .true.
964 my_mstruct_chg = .true.
965 END IF
966 END IF
967
968 IF (my_mstruct_chg) THEN
969 ks_env%s_mstruct_changed = .true.
970 ! *** deallocate matrices that will have the wrong structure ***
971 CALL kpoint_transitional_release(ks_env%matrix_ks)
972 !TODO: deallocate imaginary parts as well
973 IF (ks_env%complex_ks) THEN
974 CALL kpoint_transitional_release(ks_env%matrix_ks_im)
975 END IF
976 !CALL dbcsr_deallocate_matrix_set(ks_env%matrix_ks_im)
977 !CALL dbcsr_deallocate_matrix_set(ks_env%matrix_ks_aux_fit_im)
978 END IF
979
980 CALL timestop(handle)
981
982 END SUBROUTINE qs_ks_did_change
983
984END MODULE qs_ks_types
Define the atomic kind types and their sub types.
Holds information on atomic properties.
Handles all functions related to the CELL.
Definition cell_types.F:15
methods related to the blacs parallel environment
subroutine, public cp_blacs_env_release(blacs_env)
releases the given blacs_env
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dft_control_release(dft_control)
...
subroutine, public dbcsr_distribution_release(dist)
...
DBCSR operations in CP2K.
set of type/routines to handle the storage of results in force_envs
types that represent a subsys, i.e. a part of the system
stores a lists of integer that are local to a processor. The idea is that these integers represent ob...
stores a mapping of 2D info (e.g. matrix) on a 2D processor distribution (i.e. blacs grid) where cpus...
subroutine, public distribution_2d_release(distribution_2d)
...
subroutine, public distribution_2d_retain(distribution_2d)
...
Datatype to translate between k-points (2d) and gamma-point (1d) code.
type(dbcsr_p_type) function, dimension(:), pointer, public get_1d_pointer(this)
Smart getter, raises an error when called during a k-point calculation.
type(dbcsr_p_type) function, dimension(:, :), pointer, public get_2d_pointer(this)
Simple getter, needed because of PRIVATE.
subroutine, public kpoint_transitional_release(this)
Release the matrix set, using the right pointer.
subroutine, public set_1d_pointer(this, ptr_1d)
Assigns a 1D pointer.
subroutine, public set_2d_pointer(this, ptr_2d)
Assigns a 2D pointer.
Types and basic routines needed for a kpoint calculation.
subroutine, public kpoint_release(kpoint)
Release a kpoint environment, deallocate all data.
Interface to the message passing library MPI.
subroutine, public mp_para_env_release(para_env)
releases the para object (to be called when you don't want anymore the shared copy of this object)
Define the molecule kind structure types and the corresponding functionality.
Define the data structure for the molecule information.
Define the data structure for the particle information.
container for various plainwaves related things
subroutine, public pw_env_retain(pw_env)
retains the pw_env (see doc/ReferenceCounting.html)
subroutine, public pw_env_release(pw_env, para_env)
releases the given pw_env (see doc/ReferenceCounting.html)
Define the quickstep kind type and their sub types.
subroutine, public qs_ks_release(ks_env)
releases the ks_env (see doc/ReferenceCounting.html)
subroutine, public set_ks_env(ks_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, complex_ks, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, kinetic, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_ks_im_kp, vppl, rho_core, rho_nlcc, rho_nlcc_g, vee, neighbor_list_id, kpoints, sab_orb, sab_all, sac_ae, sac_ppl, sac_lri, sap_ppnl, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_vdw, sab_scp, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, task_list, task_list_soft, subsys, dft_control, dbcsr_dist, distribution_2d, pw_env, para_env, blacs_env)
...
subroutine, public get_ks_env(ks_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, complex_ks, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, kinetic, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_ks_im_kp, rho, rho_xc, vppl, rho_core, rho_nlcc, rho_nlcc_g, vee, neighbor_list_id, sab_orb, sab_all, sac_ae, sac_ppl, sac_lri, sap_ppnl, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_vdw, sab_scp, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, task_list, task_list_soft, kpoints, do_kpoints, atomic_kind_set, qs_kind_set, cell, cell_ref, use_ref_cell, particle_set, energy, force, local_particles, local_molecules, molecule_kind_set, molecule_set, subsys, cp_subsys, virial, results, atprop, nkind, natom, dft_control, dbcsr_dist, distribution_2d, pw_env, para_env, blacs_env, nelectron_total, nelectron_spin)
...
subroutine, public qs_ks_did_change(ks_env, s_mstruct_changed, rho_changed, potential_changed, full_reset)
tells that some of the things relevant to the ks calculation did change. has to be called when change...
subroutine, public qs_ks_part_release(ks_env)
releases part of the ks_env
subroutine, public qs_ks_env_create(ks_env)
Allocates a new instance of ks_env.
Define the neighbor list data types and the corresponding functionality.
subroutine, public release_neighbor_list_sets(nlists)
releases an array of neighbor_list_sets
superstucture that hold various representations of the density and keeps track of which ones are vali...
subroutine, public qs_rho_create(rho)
Allocates a new instance of rho.
subroutine, public qs_rho_release(rho_struct)
releases a rho_struct by decreasing the reference count by one and deallocating if it reaches 0 (to b...
types that represent a quickstep subsys
subroutine, public qs_subsys_release(subsys)
releases a subsys (see doc/ReferenceCounting.html)
subroutine, public qs_subsys_get(subsys, atomic_kinds, atomic_kind_set, particles, particle_set, local_particles, molecules, molecule_set, molecule_kinds, molecule_kind_set, local_molecules, para_env, colvar_p, shell_particles, core_particles, gci, multipoles, natom, nparticle, ncore, nshell, nkind, atprop, virial, results, cell, cell_ref, use_ref_cell, energy, force, qs_kind_set, cp_subsys, nelectron_total, nelectron_spin)
...
types for task lists
subroutine, public deallocate_task_list(task_list)
deallocates the components and the object itself
Provides all information about an atomic kind.
type for the atomic properties
Type defining parameters related to the simulation cell.
Definition cell_types.F:55
represent a blacs multidimensional parallel environment (for the mpi corrispective see cp_paratypes/m...
contains arbitrary information which need to be stored
represents a system: atoms, molecules, their pos,vel,...
structure to store local (to a processor) ordered lists of integers.
distributes pairs on a 2d grid of processors
Contains information about kpoints.
stores all the informations relevant to an mpi environment
contained for different pw related things
Provides all information about a quickstep kind.
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...
keeps the density in various representations, keeping track of which ones are valid.