(git:da6e80d)
Loading...
Searching...
No Matches
qs_linres_kernel.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!> \brief linres kernel functions
10!> \par History
11!> created from qs_linres_methods
12!> \author JGH
13! **************************************************************************************************
15 USE admm_types, ONLY: admm_type,&
20 USE cp_dbcsr_api, ONLY: dbcsr_add,&
29 USE cp_fm_types, ONLY: cp_fm_get_info,&
36 USE hfx_ri, ONLY: hfx_ri_update_ks
37 USE hfx_types, ONLY: hfx_type
52 USE kinds, ONLY: default_string_length,&
53 dp
59 USE mulliken, ONLY: ao_charges
61 USE pw_env_types, ONLY: pw_env_get,&
63 USE pw_methods, ONLY: pw_axpy,&
64 pw_copy,&
65 pw_scale,&
70 USE pw_types, ONLY: pw_c1d_gs_type,&
74 USE qs_fxc, ONLY: qs_fxc_analytic,&
77 USE qs_integrate_potential, ONLY: integrate_v_rspace,&
78 integrate_v_rspace_diagonal,&
79 integrate_v_rspace_one_center
80 USE qs_kind_types, ONLY: get_qs_kind,&
84 USE qs_ks_atom, ONLY: update_ks_atom
92 USE qs_rho_types, ONLY: qs_rho_get,&
96 USE xc, ONLY: xc_calc_2nd_deriv,&
105 USE xtb_types, ONLY: get_xtb_atom_param,&
107#include "./base/base_uses.f90"
108
109 IMPLICIT NONE
110
111 PRIVATE
112
113 ! *** Public subroutines ***
114 PUBLIC :: apply_xc_admm
115 PUBLIC :: apply_hfx
116 PUBLIC :: apply_op_2
117 PUBLIC :: hfx_matrix
118
119 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_linres_kernel'
120
121! **************************************************************************************************
122
123CONTAINS
124
125! **************************************************************************************************
126!> \brief ...
127!> \param qs_env ...
128!> \param p_env ...
129!> \param c0 ...
130!> \param Av ...
131! **************************************************************************************************
132 SUBROUTINE apply_op_2(qs_env, p_env, c0, Av)
133 !
134 TYPE(qs_environment_type), POINTER :: qs_env
135 TYPE(qs_p_env_type) :: p_env
136 TYPE(cp_fm_type), DIMENSION(:), INTENT(IN) :: c0
137 TYPE(cp_fm_type), DIMENSION(:), INTENT(INOUT) :: av
138
139 INTEGER :: ispin, ncol
140 TYPE(dft_control_type), POINTER :: dft_control
141
142 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
143 IF (dft_control%qs_control%semi_empirical) THEN
144 cpabort("Linear response not available with SE methods")
145 ELSEIF (dft_control%qs_control%dftb) THEN
146 cpabort("Linear response not available with DFTB")
147 ELSEIF (dft_control%qs_control%xtb) THEN
148 CALL apply_op_2_xtb(qs_env, p_env)
149 ELSE
150 CALL apply_op_2_dft(qs_env, p_env)
151 CALL apply_hfx(qs_env, p_env)
152 CALL apply_xc_admm(qs_env, p_env)
153 IF (dft_control%do_admm) CALL p_env_finish_kpp1(qs_env, p_env)
154 END IF
155
156 DO ispin = 1, SIZE(c0)
157 CALL cp_fm_get_info(c0(ispin), ncol_global=ncol)
158 CALL cp_dbcsr_sm_fm_multiply(p_env%kpp1(ispin)%matrix, &
159 c0(ispin), &
160 av(ispin), &
161 ncol=ncol, alpha=1.0_dp, beta=1.0_dp)
162 END DO
163
164 END SUBROUTINE apply_op_2
165
166! **************************************************************************************************
167!> \brief ...
168!> \param qs_env ...
169!> \param p_env ...
170! **************************************************************************************************
171 SUBROUTINE apply_op_2_dft(qs_env, p_env)
172 TYPE(qs_environment_type), POINTER :: qs_env
173 TYPE(qs_p_env_type) :: p_env
174
175 CHARACTER(len=*), PARAMETER :: routinen = 'apply_op_2_dft'
176
177 INTEGER :: handle, ikind, ispin, nkind, ns, nspins
178 LOGICAL :: deriv2_analytic, gapw, gapw_xc, &
179 lr_triplet, lrigpw
180 REAL(kind=dp) :: alpha, ekin_mol, energy_hartree, &
181 energy_hartree_1c
182 TYPE(admm_type), POINTER :: admm_env
183 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
184 TYPE(cp_logger_type), POINTER :: logger
185 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: k1mat, matrix_s, rho1_ao, rho_ao
186 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: ksmat, psmat
187 TYPE(dft_control_type), POINTER :: dft_control
188 TYPE(kg_environment_type), POINTER :: kg_env
189 TYPE(linres_control_type), POINTER :: linres_control
190 TYPE(lri_density_type), POINTER :: lri_density
191 TYPE(lri_environment_type), POINTER :: lri_env
192 TYPE(lri_kind_type), DIMENSION(:), POINTER :: lri_v_int
193 TYPE(mp_para_env_type), POINTER :: para_env
194 TYPE(pw_c1d_gs_type) :: rho1_tot_gspace, v_hartree_gspace
195 TYPE(pw_c1d_gs_type), DIMENSION(:), POINTER :: rho1_g
196 TYPE(pw_env_type), POINTER :: pw_env
197 TYPE(pw_poisson_type), POINTER :: poisson_env
198 TYPE(pw_pool_type), POINTER :: auxbas_pw_pool
199 TYPE(pw_r3d_rs_type) :: v_hartree_rspace
200 TYPE(pw_r3d_rs_type), DIMENSION(:), POINTER :: rho1_r, rho_r, tau1_r, v_rspace_new, &
201 v_xc, v_xc_tau
202 TYPE(qs_kpp1_env_type), POINTER :: kpp1_env
203 TYPE(qs_ks_env_type), POINTER :: ks_env
204 TYPE(qs_rho_type), POINTER :: rho, rho0, rho1, rho1_xc, rho1a, &
205 rho_aux, rho_xc
206 TYPE(rho_atom_type), DIMENSION(:), POINTER :: rho1_atom_set, rho_atom_set
207 TYPE(section_vals_type), POINTER :: input, xc_section, xc_section_aux
208
209 CALL timeset(routinen, handle)
210
211 NULLIFY (auxbas_pw_pool, pw_env, v_rspace_new, para_env, rho1_r, &
212 v_xc, rho1_ao, rho_ao, poisson_env, input, rho, dft_control, &
213 logger, rho1_g, v_xc_tau)
214 logger => cp_get_default_logger()
215
216 energy_hartree = 0.0_dp
217 energy_hartree_1c = 0.0_dp
218
219 cpassert(ASSOCIATED(p_env%kpp1))
220 cpassert(ASSOCIATED(p_env%kpp1_env))
221 kpp1_env => p_env%kpp1_env
222
223 CALL get_qs_env(qs_env=qs_env, &
224 ks_env=ks_env, &
225 pw_env=pw_env, &
226 input=input, &
227 admm_env=admm_env, &
228 para_env=para_env, &
229 rho=rho, &
230 rho_xc=rho_xc, &
231 linres_control=linres_control, &
232 dft_control=dft_control)
233
234 gapw = dft_control%qs_control%gapw
235 gapw_xc = dft_control%qs_control%gapw_xc
236 lr_triplet = linres_control%lr_triplet
237
238 rho1 => p_env%rho1
239 rho1_xc => p_env%rho1_xc
240 cpassert(ASSOCIATED(rho1))
241 IF (gapw_xc) THEN
242 cpassert(ASSOCIATED(rho1_xc))
243 END IF
244
245 CALL qs_rho_get(rho, rho_ao=rho_ao, rho_r=rho_r)
246 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
247
248 nspins = SIZE(p_env%kpp1)
249 lrigpw = dft_control%qs_control%lrigpw
250 IF (lrigpw) THEN
251 CALL get_qs_env(qs_env, &
252 lri_env=lri_env, &
253 lri_density=lri_density, &
254 atomic_kind_set=atomic_kind_set)
255 END IF
256
257 IF (.NOT. ASSOCIATED(kpp1_env%v_ao)) THEN
258 CALL get_qs_env(qs_env, matrix_s=matrix_s)
259 CALL dbcsr_allocate_matrix_set(kpp1_env%v_ao, nspins)
260 DO ispin = 1, nspins
261 ALLOCATE (kpp1_env%v_ao(ispin)%matrix)
262 CALL dbcsr_copy(kpp1_env%v_ao(ispin)%matrix, matrix_s(1)%matrix, &
263 name="kpp1%v_ao-"//adjustl(cp_to_string(ispin)))
264 END DO
265 END IF
266
267 IF (dft_control%do_admm) THEN
268 xc_section => admm_env%xc_section_primary
269 ELSE
270 xc_section => section_vals_get_subs_vals(input, "DFT%XC")
271 END IF
272
273 ! gets the tmp grids
274 cpassert(ASSOCIATED(pw_env))
275 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool, &
276 poisson_env=poisson_env)
277 CALL auxbas_pw_pool%create_pw(v_hartree_gspace)
278 CALL auxbas_pw_pool%create_pw(v_hartree_rspace)
279
280 IF (gapw .OR. gapw_xc) &
281 CALL prepare_gapw_den(qs_env, p_env%local_rho_set, do_rho0=(.NOT. gapw_xc))
282
283 ! *** calculate the hartree potential on the total density ***
284 CALL auxbas_pw_pool%create_pw(rho1_tot_gspace)
285
286 CALL qs_rho_get(rho1, rho_g=rho1_g)
287 CALL pw_copy(rho1_g(1), rho1_tot_gspace)
288 DO ispin = 2, nspins
289 CALL pw_axpy(rho1_g(ispin), rho1_tot_gspace)
290 END DO
291 IF (gapw) THEN
292 CALL pw_axpy(p_env%local_rho_set%rho0_mpole%rho0_s_gs, rho1_tot_gspace)
293 IF (ASSOCIATED(p_env%local_rho_set%rho0_mpole%rhoz_cneo_s_gs)) THEN
294 CALL pw_axpy(p_env%local_rho_set%rho0_mpole%rhoz_cneo_s_gs, rho1_tot_gspace)
295 END IF
296 END IF
297
298 IF (.NOT. (nspins == 1 .AND. lr_triplet)) THEN
299 CALL pw_poisson_solve(poisson_env, rho1_tot_gspace, &
300 energy_hartree, &
301 v_hartree_gspace)
302 CALL pw_transfer(v_hartree_gspace, v_hartree_rspace)
303 END IF
304
305 CALL auxbas_pw_pool%give_back_pw(rho1_tot_gspace)
306
307 ! *** calculate the xc potential ***
308 NULLIFY (rho1a)
309 IF (gapw_xc) THEN
310 rho0 => rho_xc
311 rho1a => rho1_xc
312 ELSE
313 rho0 => rho
314 rho1a => rho1
315 END IF
316
317 deriv2_analytic = section_get_lval(xc_section, "2ND_DERIV_ANALYTICAL")
318 NULLIFY (v_xc_tau)
319 IF (deriv2_analytic) THEN
320 CALL qs_rho_get(rho1a, rho_r=rho1_r, tau_r=tau1_r)
321 CALL qs_fxc_analytic(rho0, rho1_r, tau1_r, xc_section, auxbas_pw_pool, lr_triplet, v_xc, v_xc_tau)
322 IF (gapw .OR. gapw_xc) THEN
323 CALL get_qs_env(qs_env, rho_atom_set=rho_atom_set)
324 rho1_atom_set => p_env%local_rho_set%rho_atom_set
325 CALL calculate_xc_2nd_deriv_atom(rho_atom_set, rho1_atom_set, qs_env, xc_section, para_env, &
326 do_triplet=lr_triplet)
327 END IF
328 ELSE
329 CALL qs_fxc_fdiff(ks_env, rho0, rho1a, xc_section, 6, lr_triplet, v_xc, v_xc_tau)
330 cpassert((.NOT. gapw) .AND. (.NOT. gapw_xc))
331 END IF
332
333 v_rspace_new => v_xc
334 NULLIFY (v_xc)
335
336 CALL pw_scale(v_hartree_rspace, v_hartree_rspace%pw_grid%dvol)
337 DO ispin = 1, nspins
338 CALL pw_scale(v_rspace_new(ispin), v_rspace_new(ispin)%pw_grid%dvol)
339 IF (ASSOCIATED(v_xc_tau)) CALL pw_scale(v_xc_tau(ispin), v_xc_tau(ispin)%pw_grid%dvol)
340 END DO
341
342 ! ADMM Correction
343 IF (dft_control%do_admm) THEN
344 IF (admm_env%aux_exch_func /= do_admm_aux_exch_func_none) THEN
345 IF (.NOT. ASSOCIATED(kpp1_env%deriv_set_admm)) THEN
346 cpassert(.NOT. lr_triplet)
347 xc_section_aux => admm_env%xc_section_aux
348 CALL get_admm_env(qs_env%admm_env, rho_aux_fit=rho_aux)
349 CALL qs_rho_get(rho_aux, rho_r=rho_r)
350 ALLOCATE (kpp1_env%deriv_set_admm, kpp1_env%rho_set_admm)
351 CALL xc_prep_2nd_deriv(kpp1_env%deriv_set_admm, kpp1_env%rho_set_admm, &
352 rho_r, auxbas_pw_pool, &
353 xc_section=xc_section_aux)
354 END IF
355 END IF
356 END IF
357
358 !-------------------------------!
359 ! Add both hartree and xc terms !
360 !-------------------------------!
361 DO ispin = 1, nspins
362 CALL dbcsr_set(kpp1_env%v_ao(ispin)%matrix, 0.0_dp)
363
364 IF (gapw_xc) THEN
365 ! XC and Hartree are integrated separatedly
366 ! XC uses the soft basis set only
367
368 IF (nspins == 1) THEN
369
370 IF (.NOT. (lr_triplet)) THEN
371 CALL pw_scale(v_rspace_new(1), 2.0_dp)
372 IF (ASSOCIATED(v_xc_tau)) CALL pw_scale(v_xc_tau(1), 2.0_dp)
373 END IF
374 CALL qs_rho_get(rho1, rho_ao=rho1_ao)
375 ! remove kpp1_env%v_ao and work directly on k_p_p1 ?
376 CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), &
377 pmat=rho1_ao(ispin), &
378 hmat=kpp1_env%v_ao(ispin), &
379 qs_env=qs_env, &
380 calculate_forces=.false., gapw=gapw_xc)
381
382 IF (ASSOCIATED(v_xc_tau)) THEN
383 CALL integrate_v_rspace(v_rspace=v_xc_tau(ispin), &
384 pmat=rho1_ao(ispin), &
385 hmat=kpp1_env%v_ao(ispin), &
386 qs_env=qs_env, &
387 compute_tau=.true., &
388 calculate_forces=.false., gapw=gapw_xc)
389 END IF
390
391 ! add hartree only for SINGLETS
392 IF (.NOT. lr_triplet) THEN
393 CALL pw_axpy(v_hartree_rspace, v_rspace_new(1), 2.0_dp, 0.0_dp)
394
395 CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), &
396 pmat=rho_ao(ispin), &
397 hmat=kpp1_env%v_ao(ispin), &
398 qs_env=qs_env, &
399 calculate_forces=.false., gapw=gapw)
400 END IF
401 ELSE
402 ! remove kpp1_env%v_ao and work directly on k_p_p1 ?
403 CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), &
404 pmat=rho_ao(ispin), &
405 hmat=kpp1_env%v_ao(ispin), &
406 qs_env=qs_env, &
407 calculate_forces=.false., gapw=gapw_xc)
408
409 IF (ASSOCIATED(v_xc_tau)) THEN
410 CALL integrate_v_rspace(v_rspace=v_xc_tau(ispin), &
411 pmat=rho_ao(ispin), &
412 hmat=kpp1_env%v_ao(ispin), &
413 qs_env=qs_env, &
414 compute_tau=.true., &
415 calculate_forces=.false., gapw=gapw_xc)
416 END IF
417
418 CALL pw_copy(v_hartree_rspace, v_rspace_new(ispin))
419 CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), &
420 pmat=rho_ao(ispin), &
421 hmat=kpp1_env%v_ao(ispin), &
422 qs_env=qs_env, &
423 calculate_forces=.false., gapw=gapw)
424 END IF
425
426 ELSE
427
428 IF (nspins == 1) THEN
429 IF (.NOT. (lr_triplet)) THEN
430 CALL pw_scale(v_rspace_new(1), 2.0_dp)
431 IF (ASSOCIATED(v_xc_tau)) CALL pw_scale(v_xc_tau(1), 2.0_dp)
432 END IF
433 ! add hartree only for SINGLETS
434 !IF (res_etype == tddfpt_singlet) THEN
435 IF (.NOT. lr_triplet) THEN
436 CALL pw_axpy(v_hartree_rspace, v_rspace_new(1), 2.0_dp)
437 END IF
438 ELSE
439 CALL pw_axpy(v_hartree_rspace, v_rspace_new(ispin), 1.0_dp)
440 END IF
441
442 IF (lrigpw) THEN
443 IF (ASSOCIATED(v_xc_tau)) &
444 cpabort("metaGGA-functionals not supported with LRI!")
445
446 lri_v_int => lri_density%lri_coefs(ispin)%lri_kinds
447 CALL get_qs_env(qs_env, nkind=nkind)
448 DO ikind = 1, nkind
449 lri_v_int(ikind)%v_int = 0.0_dp
450 END DO
451 CALL integrate_v_rspace_one_center(v_rspace_new(ispin), qs_env, &
452 lri_v_int, .false., "LRI_AUX")
453 DO ikind = 1, nkind
454 CALL para_env%sum(lri_v_int(ikind)%v_int)
455 END DO
456 ALLOCATE (k1mat(1))
457 k1mat(1)%matrix => kpp1_env%v_ao(ispin)%matrix
458 IF (lri_env%exact_1c_terms) THEN
459 CALL integrate_v_rspace_diagonal(v_rspace_new(ispin), k1mat(1)%matrix, &
460 rho_ao(ispin)%matrix, qs_env, .false., "ORB")
461 END IF
462 CALL calculate_lri_ks_matrix(lri_env, lri_v_int, k1mat, atomic_kind_set)
463 DEALLOCATE (k1mat)
464 ELSE
465 CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), &
466 pmat=rho_ao(ispin), &
467 hmat=kpp1_env%v_ao(ispin), &
468 qs_env=qs_env, &
469 calculate_forces=.false., gapw=gapw)
470
471 IF (ASSOCIATED(v_xc_tau)) THEN
472 CALL integrate_v_rspace(v_rspace=v_xc_tau(ispin), &
473 pmat=rho_ao(ispin), &
474 hmat=kpp1_env%v_ao(ispin), &
475 qs_env=qs_env, &
476 compute_tau=.true., &
477 calculate_forces=.false., gapw=gapw)
478 END IF
479 END IF
480
481 END IF
482
483 CALL dbcsr_copy(p_env%kpp1(ispin)%matrix, kpp1_env%v_ao(ispin)%matrix)
484 END DO
485
486 IF (gapw) THEN
487 IF (.NOT. ((nspins == 1 .AND. lr_triplet))) THEN
488 CALL vh_1c_gg_integrals(qs_env, energy_hartree_1c, &
489 p_env%hartree_local%ecoul_1c, &
490 p_env%local_rho_set, &
491 para_env, tddft=.true., core_2nd=.true.)
492
493 CALL integrate_vhg0_rspace(qs_env, v_hartree_rspace, para_env, &
494 calculate_forces=.false., &
495 local_rho_set=p_env%local_rho_set)
496 END IF
497 ! *** Add single atom contributions to the KS matrix ***
498 ! remap pointer
499 ns = SIZE(p_env%kpp1)
500 ksmat(1:ns, 1:1) => p_env%kpp1(1:ns)
501 ns = SIZE(rho_ao)
502 psmat(1:ns, 1:1) => rho_ao(1:ns)
503 CALL update_ks_atom(qs_env, ksmat, psmat, forces=.false., tddft=.true., &
504 rho_atom_external=p_env%local_rho_set%rho_atom_set)
505 ELSEIF (gapw_xc) THEN
506 ns = SIZE(p_env%kpp1)
507 ksmat(1:ns, 1:1) => p_env%kpp1(1:ns)
508 ns = SIZE(rho_ao)
509 psmat(1:ns, 1:1) => rho_ao(1:ns)
510 CALL update_ks_atom(qs_env, ksmat, psmat, forces=.false., tddft=.true., &
511 rho_atom_external=p_env%local_rho_set%rho_atom_set)
512 END IF
513
514 ! KG embedding, contribution of kinetic energy functional to kernel
515 IF (dft_control%qs_control%do_kg .AND. .NOT. (lr_triplet .OR. gapw .OR. gapw_xc)) THEN
516 IF (qs_env%kg_env%tnadd_method == kg_tnadd_embed) THEN
517
518 CALL qs_rho_get(rho1, rho_ao=rho1_ao)
519 alpha = 1.0_dp
520
521 ekin_mol = 0.0_dp
522 CALL get_qs_env(qs_env, kg_env=kg_env)
523 CALL kg_ekin_subset(qs_env=qs_env, &
524 ks_matrix=p_env%kpp1, &
525 ekin_mol=ekin_mol, &
526 calc_force=.false., &
527 do_kernel=.true., &
528 pmat_ext=rho1_ao)
529 END IF
530 END IF
531
532 CALL auxbas_pw_pool%give_back_pw(v_hartree_gspace)
533 CALL auxbas_pw_pool%give_back_pw(v_hartree_rspace)
534 DO ispin = 1, nspins
535 CALL auxbas_pw_pool%give_back_pw(v_rspace_new(ispin))
536 END DO
537 DEALLOCATE (v_rspace_new)
538 IF (ASSOCIATED(v_xc_tau)) THEN
539 DO ispin = 1, nspins
540 CALL auxbas_pw_pool%give_back_pw(v_xc_tau(ispin))
541 END DO
542 DEALLOCATE (v_xc_tau)
543 END IF
544
545 CALL timestop(handle)
546
547 END SUBROUTINE apply_op_2_dft
548
549! **************************************************************************************************
550!> \brief ...
551!> \param qs_env ...
552!> \param p_env ...
553! **************************************************************************************************
554 SUBROUTINE apply_op_2_xtb(qs_env, p_env)
555 TYPE(qs_environment_type), POINTER :: qs_env
556 TYPE(qs_p_env_type) :: p_env
557
558 CHARACTER(len=*), PARAMETER :: routinen = 'apply_op_2_xtb'
559
560 INTEGER :: atom_a, handle, iatom, ikind, is, ispin, &
561 na, natom, natorb, nkind, ns, nsgf, &
562 nspins
563 INTEGER, DIMENSION(25) :: lao
564 INTEGER, DIMENSION(5) :: occ
565 LOGICAL :: lr_triplet
566 REAL(dp), ALLOCATABLE, DIMENSION(:) :: mcharge, mcharge1
567 REAL(dp), ALLOCATABLE, DIMENSION(:, :) :: aocg, aocg1, charges, charges1
568 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
569 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: rho_ao
570 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_p, matrix_p1, matrix_s
571 TYPE(dft_control_type), POINTER :: dft_control
572 TYPE(linres_control_type), POINTER :: linres_control
573 TYPE(mp_para_env_type), POINTER :: para_env
574 TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
575 TYPE(pw_env_type), POINTER :: pw_env
576 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
577 TYPE(qs_kpp1_env_type), POINTER :: kpp1_env
578 TYPE(qs_rho_type), POINTER :: rho, rho1
579 TYPE(xtb_atom_type), POINTER :: xtb_kind
580
581 CALL timeset(routinen, handle)
582
583 cpassert(ASSOCIATED(p_env%kpp1_env))
584 cpassert(ASSOCIATED(p_env%kpp1))
585 kpp1_env => p_env%kpp1_env
586
587 rho1 => p_env%rho1
588 cpassert(ASSOCIATED(rho1))
589
590 CALL get_qs_env(qs_env=qs_env, &
591 pw_env=pw_env, &
592 para_env=para_env, &
593 rho=rho, &
594 linres_control=linres_control, &
595 dft_control=dft_control)
596
597 CALL qs_rho_get(rho, rho_ao=rho_ao)
598
599 lr_triplet = linres_control%lr_triplet
600 cpassert(.NOT. lr_triplet)
601
602 nspins = SIZE(p_env%kpp1)
603
604 DO ispin = 1, nspins
605 CALL dbcsr_set(p_env%kpp1(ispin)%matrix, 0.0_dp)
606 END DO
607
608 IF (dft_control%qs_control%xtb_control%coulomb_interaction) THEN
609 ! Mulliken charges
610 CALL get_qs_env(qs_env, particle_set=particle_set, matrix_s_kp=matrix_s)
611 natom = SIZE(particle_set)
612 CALL qs_rho_get(rho, rho_ao_kp=matrix_p)
613 CALL qs_rho_get(rho1, rho_ao_kp=matrix_p1)
614 ALLOCATE (mcharge(natom), charges(natom, 5))
615 ALLOCATE (mcharge1(natom), charges1(natom, 5))
616 charges = 0.0_dp
617 charges1 = 0.0_dp
618 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set)
619 nkind = SIZE(atomic_kind_set)
620 CALL get_qs_kind_set(qs_kind_set, maxsgf=nsgf)
621 ALLOCATE (aocg(nsgf, natom))
622 aocg = 0.0_dp
623 ALLOCATE (aocg1(nsgf, natom))
624 aocg1 = 0.0_dp
625 CALL ao_charges(matrix_p, matrix_s, aocg, para_env)
626 CALL ao_charges(matrix_p1, matrix_s, aocg1, para_env)
627 DO ikind = 1, nkind
628 CALL get_atomic_kind(atomic_kind_set(ikind), natom=na)
629 CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_kind)
630 CALL get_xtb_atom_param(xtb_kind, natorb=natorb, lao=lao, occupation=occ)
631 DO iatom = 1, na
632 atom_a = atomic_kind_set(ikind)%atom_list(iatom)
633 charges(atom_a, :) = real(occ(:), kind=dp)
634 DO is = 1, natorb
635 ns = lao(is) + 1
636 charges(atom_a, ns) = charges(atom_a, ns) - aocg(is, atom_a)
637 charges1(atom_a, ns) = charges1(atom_a, ns) - aocg1(is, atom_a)
638 END DO
639 END DO
640 END DO
641 DEALLOCATE (aocg, aocg1)
642 DO iatom = 1, natom
643 mcharge(iatom) = sum(charges(iatom, :))
644 mcharge1(iatom) = sum(charges1(iatom, :))
645 END DO
646 ! Coulomb Kernel
647 CALL xtb_coulomb_hessian(qs_env, p_env%kpp1, charges1, mcharge1, mcharge)
648 !
649 DEALLOCATE (charges, mcharge, charges1, mcharge1)
650 END IF
651
652 CALL timestop(handle)
653
654 END SUBROUTINE apply_op_2_xtb
655
656! **************************************************************************************************
657!> \brief Update action of TDDFPT operator on trial vectors by adding exact-exchange term.
658!> \param qs_env ...
659!> \param p_env ...
660!> \par History
661!> * 11.2019 adapted from tddfpt_apply_hfx
662! **************************************************************************************************
663 SUBROUTINE apply_hfx(qs_env, p_env)
664 TYPE(qs_environment_type), POINTER :: qs_env
665 TYPE(qs_p_env_type) :: p_env
666
667 CHARACTER(LEN=*), PARAMETER :: routinen = 'apply_hfx'
668
669 INTEGER :: handle, ispin, nspins
670 LOGICAL :: do_hfx
671 REAL(kind=dp) :: alpha
672 TYPE(cp_logger_type), POINTER :: logger
673 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: h1_mat, matrix_s, rho1_ao, work
674 TYPE(dft_control_type), POINTER :: dft_control
675 TYPE(section_vals_type), POINTER :: hfx_section, input
676
677 CALL timeset(routinen, handle)
678
679 logger => cp_get_default_logger()
680
681 CALL get_qs_env(qs_env=qs_env, &
682 input=input, &
683 matrix_s=matrix_s, &
684 dft_control=dft_control)
685 nspins = dft_control%nspins
686
687 hfx_section => section_vals_get_subs_vals(input, "DFT%XC%HF")
688 CALL section_vals_get(hfx_section, explicit=do_hfx)
689
690 IF (do_hfx) THEN
691
692 IF (dft_control%do_admm) THEN
693 IF (dft_control%admm_control%purification_method /= do_admm_purify_none) THEN
694 cpabort("ADMM: Linear Response needs purification_method=none")
695 END IF
696 IF (dft_control%admm_control%scaling_model /= do_admm_exch_scaling_none) THEN
697 cpabort("ADMM: Linear Response needs scaling_model=none")
698 END IF
699 IF (dft_control%admm_control%method /= do_admm_basis_projection) THEN
700 cpabort("ADMM: Linear Response needs admm_method=basis_projection")
701 END IF
702 !
703 rho1_ao => p_env%p1_admm
704 h1_mat => p_env%kpp1_admm
705 ELSE
706 rho1_ao => p_env%p1
707 h1_mat => p_env%kpp1
708 END IF
709
710 NULLIFY (work)
711 CALL dbcsr_allocate_matrix_set(work, nspins)
712 DO ispin = 1, nspins
713 ALLOCATE (work(ispin)%matrix)
714 CALL dbcsr_create(work(ispin)%matrix, template=h1_mat(ispin)%matrix)
715 CALL dbcsr_copy(work(ispin)%matrix, h1_mat(ispin)%matrix)
716 CALL dbcsr_set(work(ispin)%matrix, 0.0_dp)
717 END DO
718
719 CALL hfx_matrix(work, rho1_ao, qs_env, hfx_section)
720
721 alpha = 2.0_dp
722 IF (nspins == 2) alpha = 1.0_dp
723
724 DO ispin = 1, nspins
725 CALL dbcsr_add(h1_mat(ispin)%matrix, work(ispin)%matrix, 1.0_dp, alpha)
726 END DO
727
729
730 END IF
731
732 CALL timestop(handle)
733
734 END SUBROUTINE apply_hfx
735
736! **************************************************************************************************
737!> \brief Add the hfx contributions to the Hamiltonian
738!>
739!> \param matrix_ks ...
740!> \param rho_ao ...
741!> \param qs_env ...
742!> \param hfx_sections ...
743!> \param external_x_data ...
744!> \param ex ...
745!> \note
746!> Simplified version of subroutine hfx_ks_matrix()
747! **************************************************************************************************
748 SUBROUTINE hfx_matrix(matrix_ks, rho_ao, qs_env, hfx_sections, external_x_data, ex)
749 TYPE(dbcsr_p_type), DIMENSION(:), TARGET :: matrix_ks, rho_ao
750 TYPE(qs_environment_type), POINTER :: qs_env
751 TYPE(section_vals_type), POINTER :: hfx_sections
752 TYPE(hfx_type), DIMENSION(:, :), OPTIONAL, TARGET :: external_x_data
753 REAL(kind=dp), OPTIONAL :: ex
754
755 CHARACTER(LEN=*), PARAMETER :: routinen = 'hfx_matrix'
756
757 INTEGER :: handle, irep, ispin, mspin, n_rep_hf, &
758 nspins
759 LOGICAL :: distribute_fock_matrix, &
760 hfx_treat_lsd_in_core, &
761 s_mstruct_changed
762 REAL(kind=dp) :: eh1, ehfx
763 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_ks_kp, rho_ao_kp
764 TYPE(dft_control_type), POINTER :: dft_control
765 TYPE(hfx_type), DIMENSION(:, :), POINTER :: x_data
766 TYPE(mp_para_env_type), POINTER :: para_env
767
768 CALL timeset(routinen, handle)
769
770 NULLIFY (dft_control, para_env, matrix_ks_kp, rho_ao_kp, x_data)
771
772 CALL get_qs_env(qs_env=qs_env, &
773 dft_control=dft_control, &
774 para_env=para_env, &
775 s_mstruct_changed=s_mstruct_changed, &
776 x_data=x_data)
777
778 IF (PRESENT(external_x_data)) x_data => external_x_data
779
780 cpassert(dft_control%nimages == 1)
781 nspins = dft_control%nspins
782
783 CALL section_vals_get(hfx_sections, n_repetition=n_rep_hf)
784 CALL section_vals_val_get(hfx_sections, "TREAT_LSD_IN_CORE", l_val=hfx_treat_lsd_in_core, &
785 i_rep_section=1)
786
787 CALL section_vals_get(hfx_sections, n_repetition=n_rep_hf)
788 distribute_fock_matrix = .true.
789
790 mspin = 1
791 IF (hfx_treat_lsd_in_core) mspin = nspins
792
793 matrix_ks_kp(1:nspins, 1:1) => matrix_ks(1:nspins)
794 rho_ao_kp(1:nspins, 1:1) => rho_ao(1:nspins)
795
796 DO irep = 1, n_rep_hf
797 ehfx = 0.0_dp
798
799 IF (x_data(irep, 1)%do_hfx_ri) THEN
800 CALL hfx_ri_update_ks(qs_env, x_data(irep, 1)%ri_data, matrix_ks_kp, ehfx, &
801 rho_ao=rho_ao_kp, geometry_did_change=s_mstruct_changed, &
802 nspins=nspins, hf_fraction=x_data(irep, 1)%general_parameter%fraction)
803
804 ELSE
805
806 DO ispin = 1, mspin
807 CALL integrate_four_center(qs_env, x_data, matrix_ks_kp, eh1, rho_ao_kp, hfx_sections, para_env, &
808 s_mstruct_changed, irep, distribute_fock_matrix, ispin=ispin)
809 ehfx = ehfx + eh1
810 END DO
811
812 END IF
813 END DO
814
815 ! Export energy
816 IF (PRESENT(ex)) ex = ehfx
817
818 CALL timestop(handle)
819
820 END SUBROUTINE hfx_matrix
821
822! **************************************************************************************************
823!> \brief ...
824!> \param qs_env ...
825!> \param p_env ...
826! **************************************************************************************************
827 SUBROUTINE apply_xc_admm(qs_env, p_env)
828 TYPE(qs_environment_type), POINTER :: qs_env
829 TYPE(qs_p_env_type) :: p_env
830
831 CHARACTER(len=*), PARAMETER :: routinen = 'apply_xc_admm'
832
833 CHARACTER(LEN=default_string_length) :: basis_type
834 INTEGER :: handle, ispin, ns, nspins
835 INTEGER, DIMENSION(2, 3) :: bo
836 LOGICAL :: gapw, lsd
837 REAL(kind=dp) :: alpha
838 TYPE(admm_type), POINTER :: admm_env
839 TYPE(dbcsr_p_type) :: xcmat
840 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_s
841 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: ksmat, psmat
842 TYPE(dft_control_type), POINTER :: dft_control
843 TYPE(linres_control_type), POINTER :: linres_control
844 TYPE(mp_para_env_type), POINTER :: para_env
845 TYPE(neighbor_list_set_p_type), DIMENSION(:), &
846 POINTER :: sab_aux_fit
847 TYPE(pw_c1d_gs_type), DIMENSION(:), POINTER :: rho1_aux_g
848 TYPE(pw_env_type), POINTER :: pw_env
849 TYPE(pw_pool_type), POINTER :: auxbas_pw_pool
850 TYPE(pw_r3d_rs_type), DIMENSION(:), POINTER :: rho1_aux_r, tau_pw, v_xc, v_xc_tau
851 TYPE(rho_atom_type), DIMENSION(:), POINTER :: rho1_atom_set, rho_atom_set
852 TYPE(section_vals_type), POINTER :: xc_fun_section, xc_section
853 TYPE(task_list_type), POINTER :: task_list
854 TYPE(xc_rho_cflags_type) :: needs
855 TYPE(xc_rho_set_type) :: rho1_set
856
857 CALL timeset(routinen, handle)
858
859 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
860
861 IF (dft_control%do_admm) THEN
862 IF (qs_env%admm_env%aux_exch_func == do_admm_aux_exch_func_none) THEN
863 ! nothing to do
864 ELSE
865 CALL get_qs_env(qs_env=qs_env, linres_control=linres_control)
866 cpassert(.NOT. dft_control%qs_control%lrigpw)
867 cpassert(.NOT. linres_control%lr_triplet)
868
869 nspins = dft_control%nspins
870
871 ! AUX basis contribution
872 CALL get_qs_env(qs_env=qs_env, pw_env=pw_env)
873 cpassert(ASSOCIATED(pw_env))
874 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
875 NULLIFY (tau_pw)
876 ! calculate the xc potential
877 lsd = (nspins == 2)
878 CALL get_admm_env(qs_env%admm_env, matrix_s_aux_fit=matrix_s)
879 ALLOCATE (xcmat%matrix)
880 CALL dbcsr_create(xcmat%matrix, template=matrix_s(1)%matrix)
881
882 CALL get_qs_env(qs_env, admm_env=admm_env)
883 gapw = admm_env%do_gapw
884
885 CALL qs_rho_get(p_env%rho1_admm, rho_r=rho1_aux_r, rho_g=rho1_aux_g)
886 xc_section => admm_env%xc_section_aux
887 bo = rho1_aux_r(1)%pw_grid%bounds_local
888 ! create the place where to store the argument for the functionals
889 CALL xc_rho_set_create(rho1_set, bo, &
890 rho_cutoff=section_get_rval(xc_section, "DENSITY_CUTOFF"), &
891 drho_cutoff=section_get_rval(xc_section, "GRADIENT_CUTOFF"), &
892 tau_cutoff=section_get_rval(xc_section, "TAU_CUTOFF"))
893
894 xc_fun_section => section_vals_get_subs_vals(xc_section, "XC_FUNCTIONAL")
895 needs = xc_functionals_get_needs(xc_fun_section, lsd, .true.)
896
897 ! calculate the arguments needed by the functionals
898 CALL xc_rho_set_update(rho1_set, rho1_aux_r, rho1_aux_g, tau_pw, needs, &
899 section_get_ival(xc_section, "XC_GRID%XC_DERIV"), &
900 section_get_ival(xc_section, "XC_GRID%XC_SMOOTH_RHO"), &
901 auxbas_pw_pool)
902 CALL xc_calc_2nd_deriv(v_xc, v_xc_tau, p_env%kpp1_env%deriv_set_admm, p_env%kpp1_env%rho_set_admm, &
903 rho1_aux_r, rho1_aux_g, tau_pw, auxbas_pw_pool, gapw=.false., &
904 xc_section=xc_section)
905 IF (ASSOCIATED(v_xc_tau)) THEN
906 cpabort("Meta-GGA ADMM functionals not yet supported!")
907 END IF
908 CALL xc_rho_set_release(rho1_set)
909
910 basis_type = "AUX_FIT"
911 CALL get_qs_env(qs_env, para_env=para_env)
912 CALL get_admm_env(admm_env, task_list_aux_fit=task_list)
913 IF (admm_env%do_gapw) THEN
914 CALL prepare_gapw_den(qs_env, local_rho_set=p_env%local_rho_set_admm, &
915 do_rho0=.false., kind_set_external=admm_env%admm_gapw_env%admm_kind_set)
916 rho_atom_set => admm_env%admm_gapw_env%local_rho_set%rho_atom_set
917 rho1_atom_set => p_env%local_rho_set_admm%rho_atom_set
918 CALL calculate_xc_2nd_deriv_atom(rho_atom_set, rho1_atom_set, qs_env, xc_section, para_env, &
919 kind_set_external=admm_env%admm_gapw_env%admm_kind_set)
920 basis_type = "AUX_FIT_SOFT"
921 task_list => admm_env%admm_gapw_env%task_list
922 END IF
923
924 alpha = 1.0_dp
925 IF (nspins == 1) alpha = 2.0_dp
926
927 DO ispin = 1, nspins
928 CALL pw_scale(v_xc(ispin), v_xc(ispin)%pw_grid%dvol)
929 CALL dbcsr_copy(xcmat%matrix, matrix_s(1)%matrix)
930 CALL dbcsr_set(xcmat%matrix, 0.0_dp)
931 CALL integrate_v_rspace(v_rspace=v_xc(ispin), hmat=xcmat, qs_env=qs_env, &
932 calculate_forces=.false., basis_type=basis_type, &
933 task_list_external=task_list)
934 CALL dbcsr_add(p_env%kpp1_admm(ispin)%matrix, xcmat%matrix, 1.0_dp, alpha)
935 END DO
936
937 IF (admm_env%do_gapw) THEN
938 CALL get_admm_env(admm_env, sab_aux_fit=sab_aux_fit)
939 ns = SIZE(p_env%kpp1_admm)
940 ksmat(1:ns, 1:1) => p_env%kpp1_admm(1:ns)
941 psmat(1:ns, 1:1) => p_env%p1_admm(1:ns)
942 CALL update_ks_atom(qs_env, ksmat, psmat, forces=.false., tddft=.true., &
943 rho_atom_external=p_env%local_rho_set_admm%rho_atom_set, &
944 kind_set_external=admm_env%admm_gapw_env%admm_kind_set, &
945 oce_external=admm_env%admm_gapw_env%oce, &
946 sab_external=sab_aux_fit)
947 END IF
948
949 DO ispin = 1, nspins
950 CALL auxbas_pw_pool%give_back_pw(v_xc(ispin))
951 END DO
952 DEALLOCATE (v_xc)
953 CALL dbcsr_deallocate_matrix(xcmat%matrix)
954
955 END IF
956 END IF
957
958 CALL timestop(handle)
959
960 END SUBROUTINE apply_xc_admm
961
962END MODULE qs_linres_kernel
Types and set/get functions for auxiliary density matrix methods.
Definition admm_types.F:15
subroutine, public get_admm_env(admm_env, mo_derivs_aux_fit, mos_aux_fit, sab_aux_fit, sab_aux_fit_asymm, sab_aux_fit_vs_orb, matrix_s_aux_fit, matrix_s_aux_fit_kp, matrix_s_aux_fit_vs_orb, matrix_s_aux_fit_vs_orb_kp, task_list_aux_fit, matrix_ks_aux_fit, matrix_ks_aux_fit_kp, matrix_ks_aux_fit_im, matrix_ks_aux_fit_dft, matrix_ks_aux_fit_hfx, matrix_ks_aux_fit_dft_kp, matrix_ks_aux_fit_hfx_kp, rho_aux_fit, rho_aux_fit_buffer, admm_dm)
Get routine for the ADMM env.
Definition admm_types.F:593
Define the atomic kind types and their sub types.
subroutine, public get_atomic_kind(atomic_kind, fist_potential, element_symbol, name, mass, kind_number, natom, atom_list, rcov, rvdw, z, qeff, apol, cpol, mm_radius, shell, shell_active, damping)
Get attributes of an atomic kind.
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dbcsr_deallocate_matrix(matrix)
...
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
subroutine, public dbcsr_set(matrix, alpha)
...
subroutine, public dbcsr_add(matrix_a, matrix_b, alpha_scalar, beta_scalar)
...
DBCSR operations in CP2K.
subroutine, public cp_dbcsr_sm_fm_multiply(matrix, fm_in, fm_out, ncol, alpha, beta)
multiply a dbcsr with a fm matrix
represent a full matrix distributed on many processors
Definition cp_fm_types.F:15
subroutine, public cp_fm_get_info(matrix, name, nrow_global, ncol_global, nrow_block, ncol_block, nrow_local, ncol_local, row_indices, col_indices, local_data, context, nrow_locals, ncol_locals, matrix_struct, para_env)
returns all kind of information about the full matrix
various routines to log and control the output. The idea is that decisions about where to log should ...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
subroutine, public vh_1c_gg_integrals(qs_env, energy_hartree_1c, ecoul_1c, local_rho_set, para_env, tddft, local_rho_set_2nd, core_2nd)
Calculates one center GAPW Hartree energies and matrix elements Hartree potentials are input Takes po...
Routines to calculate HFX energy and potential.
subroutine, public integrate_four_center(qs_env, x_data, ks_matrix, ehfx, rho_ao, hfx_section, para_env, geometry_did_change, irep, distribute_fock_matrix, ispin, nspins)
computes four center integrals for a full basis set and updates the Kohn-Sham-Matrix and energy....
RI-methods for HFX.
Definition hfx_ri.F:12
subroutine, public hfx_ri_update_ks(qs_env, ri_data, ks_matrix, ehfx, mos, rho_ao, geometry_did_change, nspins, hf_fraction)
...
Definition hfx_ri.F:1041
Types and set/get functions for HFX.
Definition hfx_types.F:15
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public do_admm_purify_none
integer, parameter, public kg_tnadd_embed
integer, parameter, public do_admm_basis_projection
integer, parameter, public do_admm_aux_exch_func_none
integer, parameter, public do_admm_exch_scaling_none
objects that represent the structure of input sections and the data contained in an input section
real(kind=dp) function, public section_get_rval(section_vals, keyword_name)
...
integer function, public section_get_ival(section_vals, keyword_name)
...
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
logical function, public section_get_lval(section_vals, keyword_name)
...
Routines for a Kim-Gordon-like partitioning into molecular subunits.
subroutine, public kg_ekin_subset(qs_env, ks_matrix, ekin_mol, calc_force, do_kernel, pmat_ext)
Calculates the subsystem Hohenberg-Kohn kinetic energy and the forces.
Types needed for a Kim-Gordon-like partitioning into molecular subunits.
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
integer, parameter, public default_string_length
Definition kinds.F:57
contains the types and subroutines for dealing with the lri_env lri : local resolution of the identit...
routines that build the Kohn-Sham matrix for the LRIGPW and xc parts
subroutine, public calculate_lri_ks_matrix(lri_env, lri_v_int, h_matrix, atomic_kind_set, cell_to_index)
update of LRIGPW KS matrix
Interface to the message passing library MPI.
compute mulliken charges we (currently) define them as c_i = 1/2 [ (PS)_{ii} + (SP)_{ii} ]
Definition mulliken.F:13
Define the data structure for the particle information.
container for various plainwaves related things
subroutine, public pw_env_get(pw_env, pw_pools, cube_info, gridlevel_info, auxbas_pw_pool, auxbas_grid, auxbas_rs_desc, auxbas_rs_grid, rs_descs, rs_grids, xc_pw_pool, vdw_pw_pool, poisson_env, interp_section)
returns the various attributes of the pw env
functions related to the poisson solver on regular grids
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
subroutine, public get_qs_env(qs_env, atomic_kind_set, qs_kind_set, cell, super_cell, cell_ref, use_ref_cell, kpoints, dft_control, mos, sab_orb, sab_all, qmmm, qmmm_periodic, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, rhoz_cneo_set, ecoul_1c, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, harris_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs, do_rixs, tb_tblite)
Get the QUICKSTEP environment.
https://en.wikipedia.org/wiki/Finite_difference_coefficient
Definition qs_fxc.F:27
subroutine, public qs_fxc_fdiff(ks_env, rho0_struct, rho1_struct, xc_section, accuracy, is_triplet, fxc_rho, fxc_tau)
...
Definition qs_fxc.F:161
subroutine, public qs_fxc_analytic(rho0, rho1_r, tau1_r, xc_section, auxbas_pw_pool, is_triplet, v_xc, v_xc_tau, spinflip)
...
Definition qs_fxc.F:94
subroutine, public prepare_gapw_den(qs_env, local_rho_set, do_rho0, kind_set_external, pw_env_sub)
...
Integrate single or product functions over a potential on a RS grid.
Define the quickstep kind type and their sub types.
subroutine, public get_qs_kind(qs_kind, basis_set, basis_type, ncgf, nsgf, all_potential, tnadd_potential, gth_potential, sgp_potential, upf_potential, cneo_potential, se_parameter, dftb_parameter, xtb_parameter, dftb3_param, zatom, zeff, elec_conf, mao, lmax_dftb, alpha_core_charge, ccore_charge, core_charge, core_charge_radius, paw_proj_set, paw_atom, hard_radius, hard0_radius, max_rad_local, covalent_radius, vdw_radius, gpw_type_forced, harmonics, max_iso_not0, max_s_harm, grid_atom, ngrid_ang, ngrid_rad, lmax_rho0, dft_plus_u_atom, l_of_dft_plus_u, n_of_dft_plus_u, u_minus_j, u_of_dft_plus_u, j_of_dft_plus_u, alpha_of_dft_plus_u, beta_of_dft_plus_u, j0_of_dft_plus_u, occupation_of_dft_plus_u, dispersion, bs_occupation, magnetization, no_optimize, addel, laddel, naddel, orbitals, max_scf, eps_scf, smear, u_ramping, u_minus_j_target, eps_u_ramping, init_u_ramping_each_scf, reltmat, ghost, floating, name, element_symbol, pao_basis_size, pao_model_file, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
subroutine, public get_qs_kind_set(qs_kind_set, all_potential_present, tnadd_potential_present, gth_potential_present, sgp_potential_present, paw_atom_present, dft_plus_u_atom_present, maxcgf, maxsgf, maxco, maxco_proj, maxgtops, maxlgto, maxlprj, maxnset, maxsgf_set, ncgf, npgf, nset, nsgf, nshell, maxpol, maxlppl, maxlppnl, maxppnl, nelectron, maxder, max_ngrid_rad, max_sph_harm, maxg_iso_not0, lmax_rho0, basis_rcut, basis_type, total_zeff_corr, npgf_seg, cneo_potential_present, nkind_q, natom_q)
Get attributes of an atomic kind set.
basis types for the calculation of the perturbation of density theory.
routines that build the Kohn-Sham matrix contributions coming from local atomic densities
Definition qs_ks_atom.F:12
subroutine, public update_ks_atom(qs_env, ksmat, pmat, forces, tddft, rho_atom_external, kind_set_external, oce_external, sab_external, kscale, kintegral, kforce, fscale)
The correction to the KS matrix due to the GAPW local terms to the hartree and XC contributions is he...
Definition qs_ks_atom.F:110
linres kernel functions
subroutine, public apply_op_2(qs_env, p_env, c0, av)
...
subroutine, public apply_xc_admm(qs_env, p_env)
...
subroutine, public hfx_matrix(matrix_ks, rho_ao, qs_env, hfx_sections, external_x_data, ex)
Add the hfx contributions to the Hamiltonian.
subroutine, public apply_hfx(qs_env, p_env)
Update action of TDDFPT operator on trial vectors by adding exact-exchange term.
Type definitiona for linear response calculations.
Define the neighbor list data types and the corresponding functionality.
Utility functions for the perturbation calculations.
subroutine, public p_env_finish_kpp1(qs_env, p_env)
...
basis types for the calculation of the perturbation of density theory.
subroutine, public integrate_vhg0_rspace(qs_env, v_rspace, para_env, calculate_forces, local_rho_set, local_rho_set_2nd, atener, kforce, my_pools, my_rs_descs)
...
superstucture that hold various representations of the density and keeps track of which ones are vali...
subroutine, public qs_rho_get(rho_struct, rho_ao, rho_ao_im, rho_ao_kp, rho_ao_im_kp, rho_r, drho_r, rho_g, drho_g, tau_r, tau_g, rho_r_valid, drho_r_valid, rho_g_valid, drho_g_valid, tau_r_valid, tau_g_valid, tot_rho_r, tot_rho_g, rho_r_sccs, soft_valid, complex_rho_ao)
returns info about the density described by this object. If some representation is not available an e...
routines that build the integrals of the Vxc potential calculated for the atomic density in the basis...
Definition qs_vxc_atom.F:12
subroutine, public calculate_xc_2nd_deriv_atom(rho_atom_set, rho1_atom_set, qs_env, xc_section, para_env, do_tddfpt2, do_triplet, do_sf, kind_set_external)
...
types for task lists
type(xc_rho_cflags_type) function, public xc_functionals_get_needs(functionals, lsd, calc_potential)
...
contains the structure
contains the structure
subroutine, public xc_rho_set_create(rho_set, local_bounds, rho_cutoff, drho_cutoff, tau_cutoff)
allocates and does (minimal) initialization of a rho_set
subroutine, public xc_rho_set_release(rho_set, pw_pool)
releases the given rho_set
subroutine, public xc_rho_set_update(rho_set, rho_r, rho_g, tau, needs, xc_deriv_method_id, xc_rho_smooth_id, pw_pool, spinflip)
updates the given rho set with the density given by rho_r (and rho_g). The rho set will contain the c...
Exchange and Correlation functional calculations.
Definition xc.F:17
subroutine, public xc_calc_2nd_deriv(v_xc, v_xc_tau, deriv_set, rho_set, rho1_r, rho1_g, tau1_r, pw_pool, xc_section, gapw, vxg, do_excitations, do_sf, do_triplet, compute_virial, virial_xc)
Caller routine to calculate the second order potential in the direction of rho1_r.
Definition xc.F:1532
subroutine, public xc_prep_2nd_deriv(deriv_set, rho_set, rho_r, pw_pool, xc_section, tau_r)
Prepare objects for the calculation of the 2nd derivatives of the density functional....
Definition xc.F:6131
Calculation of Coulomb Hessian contributions in xTB.
Definition xtb_ehess.F:12
subroutine, public xtb_coulomb_hessian(qs_env, ks_matrix, charges1, mcharge1, mcharge)
...
Definition xtb_ehess.F:77
Definition of the xTB parameter types.
Definition xtb_types.F:20
subroutine, public get_xtb_atom_param(xtb_parameter, symbol, aname, typ, defined, z, zeff, natorb, lmax, nao, lao, rcut, rcov, kx, eta, xgamma, alpha, zneff, nshell, nval, lval, kpoly, kappa, hen, zeta, xi, kappa0, alpg, occupation, electronegativity, chmax, en, kqat2, kcn, kq)
...
Definition xtb_types.F:199
stores some data used in wavefunction fitting
Definition admm_types.F:120
Provides all information about an atomic kind.
represent a full matrix
type of a logger, at the moment it contains just a print level starting at which level it should be l...
stores some data used in construction of Kohn-Sham matrix
Definition hfx_types.F:510
Contains all the info needed for KG runs...
stores all the informations relevant to an mpi environment
contained for different pw related things
environment for the poisson solver
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
Provides all information about a quickstep kind.
environment that keeps the informations and temporary val to build the kpp1 kernel matrix
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...
General settings for linear response calculations.
Represent a qs system that is perturbed. Can calculate the linear operator and the rhs of the system ...
keeps the density in various representations, keeping track of which ones are valid.
contains a flag for each component of xc_rho_set, so that you can use it to tell which components you...
represent a density, with all the representation and data needed to perform a functional evaluation