(git:ed6f26b)
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) &
292 CALL pw_axpy(p_env%local_rho_set%rho0_mpole%rho0_s_gs, rho1_tot_gspace)
293
294 IF (.NOT. (nspins == 1 .AND. lr_triplet)) THEN
295 CALL pw_poisson_solve(poisson_env, rho1_tot_gspace, &
296 energy_hartree, &
297 v_hartree_gspace)
298 CALL pw_transfer(v_hartree_gspace, v_hartree_rspace)
299 END IF
300
301 CALL auxbas_pw_pool%give_back_pw(rho1_tot_gspace)
302
303 ! *** calculate the xc potential ***
304 NULLIFY (rho1a)
305 IF (gapw_xc) THEN
306 rho0 => rho_xc
307 rho1a => rho1_xc
308 ELSE
309 rho0 => rho
310 rho1a => rho1
311 END IF
312
313 deriv2_analytic = section_get_lval(xc_section, "2ND_DERIV_ANALYTICAL")
314 NULLIFY (v_xc_tau)
315 IF (deriv2_analytic) THEN
316 CALL qs_rho_get(rho1a, rho_r=rho1_r, tau_r=tau1_r)
317 CALL qs_fxc_analytic(rho0, rho1_r, tau1_r, xc_section, auxbas_pw_pool, lr_triplet, v_xc, v_xc_tau)
318 IF (gapw .OR. gapw_xc) THEN
319 CALL get_qs_env(qs_env, rho_atom_set=rho_atom_set)
320 rho1_atom_set => p_env%local_rho_set%rho_atom_set
321 CALL calculate_xc_2nd_deriv_atom(rho_atom_set, rho1_atom_set, qs_env, xc_section, para_env, &
322 do_triplet=lr_triplet)
323 END IF
324 ELSE
325 CALL qs_fxc_fdiff(ks_env, rho0, rho1a, xc_section, 6, lr_triplet, v_xc, v_xc_tau)
326 cpassert((.NOT. gapw) .AND. (.NOT. gapw_xc))
327 END IF
328
329 v_rspace_new => v_xc
330 NULLIFY (v_xc)
331
332 CALL pw_scale(v_hartree_rspace, v_hartree_rspace%pw_grid%dvol)
333 DO ispin = 1, nspins
334 CALL pw_scale(v_rspace_new(ispin), v_rspace_new(ispin)%pw_grid%dvol)
335 IF (ASSOCIATED(v_xc_tau)) CALL pw_scale(v_xc_tau(ispin), v_xc_tau(ispin)%pw_grid%dvol)
336 END DO
337
338 ! ADMM Correction
339 IF (dft_control%do_admm) THEN
340 IF (admm_env%aux_exch_func /= do_admm_aux_exch_func_none) THEN
341 IF (.NOT. ASSOCIATED(kpp1_env%deriv_set_admm)) THEN
342 cpassert(.NOT. lr_triplet)
343 xc_section_aux => admm_env%xc_section_aux
344 CALL get_admm_env(qs_env%admm_env, rho_aux_fit=rho_aux)
345 CALL qs_rho_get(rho_aux, rho_r=rho_r)
346 ALLOCATE (kpp1_env%deriv_set_admm, kpp1_env%rho_set_admm)
347 CALL xc_prep_2nd_deriv(kpp1_env%deriv_set_admm, kpp1_env%rho_set_admm, &
348 rho_r, auxbas_pw_pool, &
349 xc_section=xc_section_aux)
350 END IF
351 END IF
352 END IF
353
354 !-------------------------------!
355 ! Add both hartree and xc terms !
356 !-------------------------------!
357 DO ispin = 1, nspins
358 CALL dbcsr_set(kpp1_env%v_ao(ispin)%matrix, 0.0_dp)
359
360 IF (gapw_xc) THEN
361 ! XC and Hartree are integrated separatedly
362 ! XC uses the soft basis set only
363
364 IF (nspins == 1) THEN
365
366 IF (.NOT. (lr_triplet)) THEN
367 CALL pw_scale(v_rspace_new(1), 2.0_dp)
368 IF (ASSOCIATED(v_xc_tau)) CALL pw_scale(v_xc_tau(1), 2.0_dp)
369 END IF
370 CALL qs_rho_get(rho1, rho_ao=rho1_ao)
371 ! remove kpp1_env%v_ao and work directly on k_p_p1 ?
372 CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), &
373 pmat=rho1_ao(ispin), &
374 hmat=kpp1_env%v_ao(ispin), &
375 qs_env=qs_env, &
376 calculate_forces=.false., gapw=gapw_xc)
377
378 IF (ASSOCIATED(v_xc_tau)) THEN
379 CALL integrate_v_rspace(v_rspace=v_xc_tau(ispin), &
380 pmat=rho1_ao(ispin), &
381 hmat=kpp1_env%v_ao(ispin), &
382 qs_env=qs_env, &
383 compute_tau=.true., &
384 calculate_forces=.false., gapw=gapw_xc)
385 END IF
386
387 ! add hartree only for SINGLETS
388 IF (.NOT. lr_triplet) THEN
389 CALL pw_axpy(v_hartree_rspace, v_rspace_new(1), 2.0_dp, 0.0_dp)
390
391 CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), &
392 pmat=rho_ao(ispin), &
393 hmat=kpp1_env%v_ao(ispin), &
394 qs_env=qs_env, &
395 calculate_forces=.false., gapw=gapw)
396 END IF
397 ELSE
398 ! remove kpp1_env%v_ao and work directly on k_p_p1 ?
399 CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), &
400 pmat=rho_ao(ispin), &
401 hmat=kpp1_env%v_ao(ispin), &
402 qs_env=qs_env, &
403 calculate_forces=.false., gapw=gapw_xc)
404
405 IF (ASSOCIATED(v_xc_tau)) THEN
406 CALL integrate_v_rspace(v_rspace=v_xc_tau(ispin), &
407 pmat=rho_ao(ispin), &
408 hmat=kpp1_env%v_ao(ispin), &
409 qs_env=qs_env, &
410 compute_tau=.true., &
411 calculate_forces=.false., gapw=gapw_xc)
412 END IF
413
414 CALL pw_copy(v_hartree_rspace, v_rspace_new(ispin))
415 CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), &
416 pmat=rho_ao(ispin), &
417 hmat=kpp1_env%v_ao(ispin), &
418 qs_env=qs_env, &
419 calculate_forces=.false., gapw=gapw)
420 END IF
421
422 ELSE
423
424 IF (nspins == 1) THEN
425 IF (.NOT. (lr_triplet)) THEN
426 CALL pw_scale(v_rspace_new(1), 2.0_dp)
427 IF (ASSOCIATED(v_xc_tau)) CALL pw_scale(v_xc_tau(1), 2.0_dp)
428 END IF
429 ! add hartree only for SINGLETS
430 !IF (res_etype == tddfpt_singlet) THEN
431 IF (.NOT. lr_triplet) THEN
432 CALL pw_axpy(v_hartree_rspace, v_rspace_new(1), 2.0_dp)
433 END IF
434 ELSE
435 CALL pw_axpy(v_hartree_rspace, v_rspace_new(ispin), 1.0_dp)
436 END IF
437
438 IF (lrigpw) THEN
439 IF (ASSOCIATED(v_xc_tau)) &
440 cpabort("metaGGA-functionals not supported with LRI!")
441
442 lri_v_int => lri_density%lri_coefs(ispin)%lri_kinds
443 CALL get_qs_env(qs_env, nkind=nkind)
444 DO ikind = 1, nkind
445 lri_v_int(ikind)%v_int = 0.0_dp
446 END DO
447 CALL integrate_v_rspace_one_center(v_rspace_new(ispin), qs_env, &
448 lri_v_int, .false., "LRI_AUX")
449 DO ikind = 1, nkind
450 CALL para_env%sum(lri_v_int(ikind)%v_int)
451 END DO
452 ALLOCATE (k1mat(1))
453 k1mat(1)%matrix => kpp1_env%v_ao(ispin)%matrix
454 IF (lri_env%exact_1c_terms) THEN
455 CALL integrate_v_rspace_diagonal(v_rspace_new(ispin), k1mat(1)%matrix, &
456 rho_ao(ispin)%matrix, qs_env, .false., "ORB")
457 END IF
458 CALL calculate_lri_ks_matrix(lri_env, lri_v_int, k1mat, atomic_kind_set)
459 DEALLOCATE (k1mat)
460 ELSE
461 CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), &
462 pmat=rho_ao(ispin), &
463 hmat=kpp1_env%v_ao(ispin), &
464 qs_env=qs_env, &
465 calculate_forces=.false., gapw=gapw)
466
467 IF (ASSOCIATED(v_xc_tau)) THEN
468 CALL integrate_v_rspace(v_rspace=v_xc_tau(ispin), &
469 pmat=rho_ao(ispin), &
470 hmat=kpp1_env%v_ao(ispin), &
471 qs_env=qs_env, &
472 compute_tau=.true., &
473 calculate_forces=.false., gapw=gapw)
474 END IF
475 END IF
476
477 END IF
478
479 CALL dbcsr_copy(p_env%kpp1(ispin)%matrix, kpp1_env%v_ao(ispin)%matrix)
480 END DO
481
482 IF (gapw) THEN
483 IF (.NOT. ((nspins == 1 .AND. lr_triplet))) THEN
484 CALL vh_1c_gg_integrals(qs_env, energy_hartree_1c, &
485 p_env%hartree_local%ecoul_1c, &
486 p_env%local_rho_set, &
487 para_env, tddft=.true., core_2nd=.true.)
488
489 CALL integrate_vhg0_rspace(qs_env, v_hartree_rspace, para_env, &
490 calculate_forces=.false., &
491 local_rho_set=p_env%local_rho_set)
492 END IF
493 ! *** Add single atom contributions to the KS matrix ***
494 ! remap pointer
495 ns = SIZE(p_env%kpp1)
496 ksmat(1:ns, 1:1) => p_env%kpp1(1:ns)
497 ns = SIZE(rho_ao)
498 psmat(1:ns, 1:1) => rho_ao(1:ns)
499 CALL update_ks_atom(qs_env, ksmat, psmat, forces=.false., tddft=.true., &
500 rho_atom_external=p_env%local_rho_set%rho_atom_set)
501 ELSEIF (gapw_xc) THEN
502 ns = SIZE(p_env%kpp1)
503 ksmat(1:ns, 1:1) => p_env%kpp1(1:ns)
504 ns = SIZE(rho_ao)
505 psmat(1:ns, 1:1) => rho_ao(1:ns)
506 CALL update_ks_atom(qs_env, ksmat, psmat, forces=.false., tddft=.true., &
507 rho_atom_external=p_env%local_rho_set%rho_atom_set)
508 END IF
509
510 ! KG embedding, contribution of kinetic energy functional to kernel
511 IF (dft_control%qs_control%do_kg .AND. .NOT. (lr_triplet .OR. gapw .OR. gapw_xc)) THEN
512 IF (qs_env%kg_env%tnadd_method == kg_tnadd_embed) THEN
513
514 CALL qs_rho_get(rho1, rho_ao=rho1_ao)
515 alpha = 1.0_dp
516
517 ekin_mol = 0.0_dp
518 CALL get_qs_env(qs_env, kg_env=kg_env)
519 CALL kg_ekin_subset(qs_env=qs_env, &
520 ks_matrix=p_env%kpp1, &
521 ekin_mol=ekin_mol, &
522 calc_force=.false., &
523 do_kernel=.true., &
524 pmat_ext=rho1_ao)
525 END IF
526 END IF
527
528 CALL auxbas_pw_pool%give_back_pw(v_hartree_gspace)
529 CALL auxbas_pw_pool%give_back_pw(v_hartree_rspace)
530 DO ispin = 1, nspins
531 CALL auxbas_pw_pool%give_back_pw(v_rspace_new(ispin))
532 END DO
533 DEALLOCATE (v_rspace_new)
534 IF (ASSOCIATED(v_xc_tau)) THEN
535 DO ispin = 1, nspins
536 CALL auxbas_pw_pool%give_back_pw(v_xc_tau(ispin))
537 END DO
538 DEALLOCATE (v_xc_tau)
539 END IF
540
541 CALL timestop(handle)
542
543 END SUBROUTINE apply_op_2_dft
544
545! **************************************************************************************************
546!> \brief ...
547!> \param qs_env ...
548!> \param p_env ...
549! **************************************************************************************************
550 SUBROUTINE apply_op_2_xtb(qs_env, p_env)
551 TYPE(qs_environment_type), POINTER :: qs_env
552 TYPE(qs_p_env_type) :: p_env
553
554 CHARACTER(len=*), PARAMETER :: routinen = 'apply_op_2_xtb'
555
556 INTEGER :: atom_a, handle, iatom, ikind, is, ispin, &
557 na, natom, natorb, nkind, ns, nsgf, &
558 nspins
559 INTEGER, DIMENSION(25) :: lao
560 INTEGER, DIMENSION(5) :: occ
561 LOGICAL :: lr_triplet
562 REAL(dp), ALLOCATABLE, DIMENSION(:) :: mcharge, mcharge1
563 REAL(dp), ALLOCATABLE, DIMENSION(:, :) :: aocg, aocg1, charges, charges1
564 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
565 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: rho_ao
566 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_p, matrix_p1, matrix_s
567 TYPE(dft_control_type), POINTER :: dft_control
568 TYPE(linres_control_type), POINTER :: linres_control
569 TYPE(mp_para_env_type), POINTER :: para_env
570 TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
571 TYPE(pw_env_type), POINTER :: pw_env
572 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
573 TYPE(qs_kpp1_env_type), POINTER :: kpp1_env
574 TYPE(qs_rho_type), POINTER :: rho, rho1
575 TYPE(xtb_atom_type), POINTER :: xtb_kind
576
577 CALL timeset(routinen, handle)
578
579 cpassert(ASSOCIATED(p_env%kpp1_env))
580 cpassert(ASSOCIATED(p_env%kpp1))
581 kpp1_env => p_env%kpp1_env
582
583 rho1 => p_env%rho1
584 cpassert(ASSOCIATED(rho1))
585
586 CALL get_qs_env(qs_env=qs_env, &
587 pw_env=pw_env, &
588 para_env=para_env, &
589 rho=rho, &
590 linres_control=linres_control, &
591 dft_control=dft_control)
592
593 CALL qs_rho_get(rho, rho_ao=rho_ao)
594
595 lr_triplet = linres_control%lr_triplet
596 cpassert(.NOT. lr_triplet)
597
598 nspins = SIZE(p_env%kpp1)
599
600 DO ispin = 1, nspins
601 CALL dbcsr_set(p_env%kpp1(ispin)%matrix, 0.0_dp)
602 END DO
603
604 IF (dft_control%qs_control%xtb_control%coulomb_interaction) THEN
605 ! Mulliken charges
606 CALL get_qs_env(qs_env, particle_set=particle_set, matrix_s_kp=matrix_s)
607 natom = SIZE(particle_set)
608 CALL qs_rho_get(rho, rho_ao_kp=matrix_p)
609 CALL qs_rho_get(rho1, rho_ao_kp=matrix_p1)
610 ALLOCATE (mcharge(natom), charges(natom, 5))
611 ALLOCATE (mcharge1(natom), charges1(natom, 5))
612 charges = 0.0_dp
613 charges1 = 0.0_dp
614 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set)
615 nkind = SIZE(atomic_kind_set)
616 CALL get_qs_kind_set(qs_kind_set, maxsgf=nsgf)
617 ALLOCATE (aocg(nsgf, natom))
618 aocg = 0.0_dp
619 ALLOCATE (aocg1(nsgf, natom))
620 aocg1 = 0.0_dp
621 CALL ao_charges(matrix_p, matrix_s, aocg, para_env)
622 CALL ao_charges(matrix_p1, matrix_s, aocg1, para_env)
623 DO ikind = 1, nkind
624 CALL get_atomic_kind(atomic_kind_set(ikind), natom=na)
625 CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_kind)
626 CALL get_xtb_atom_param(xtb_kind, natorb=natorb, lao=lao, occupation=occ)
627 DO iatom = 1, na
628 atom_a = atomic_kind_set(ikind)%atom_list(iatom)
629 charges(atom_a, :) = real(occ(:), kind=dp)
630 DO is = 1, natorb
631 ns = lao(is) + 1
632 charges(atom_a, ns) = charges(atom_a, ns) - aocg(is, atom_a)
633 charges1(atom_a, ns) = charges1(atom_a, ns) - aocg1(is, atom_a)
634 END DO
635 END DO
636 END DO
637 DEALLOCATE (aocg, aocg1)
638 DO iatom = 1, natom
639 mcharge(iatom) = sum(charges(iatom, :))
640 mcharge1(iatom) = sum(charges1(iatom, :))
641 END DO
642 ! Coulomb Kernel
643 CALL xtb_coulomb_hessian(qs_env, p_env%kpp1, charges1, mcharge1, mcharge)
644 !
645 DEALLOCATE (charges, mcharge, charges1, mcharge1)
646 END IF
647
648 CALL timestop(handle)
649
650 END SUBROUTINE apply_op_2_xtb
651
652! **************************************************************************************************
653!> \brief Update action of TDDFPT operator on trial vectors by adding exact-exchange term.
654!> \param qs_env ...
655!> \param p_env ...
656!> \par History
657!> * 11.2019 adapted from tddfpt_apply_hfx
658! **************************************************************************************************
659 SUBROUTINE apply_hfx(qs_env, p_env)
660 TYPE(qs_environment_type), POINTER :: qs_env
661 TYPE(qs_p_env_type) :: p_env
662
663 CHARACTER(LEN=*), PARAMETER :: routinen = 'apply_hfx'
664
665 INTEGER :: handle, ispin, nspins
666 LOGICAL :: do_hfx
667 REAL(kind=dp) :: alpha
668 TYPE(cp_logger_type), POINTER :: logger
669 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: h1_mat, matrix_s, rho1_ao, work
670 TYPE(dft_control_type), POINTER :: dft_control
671 TYPE(section_vals_type), POINTER :: hfx_section, input
672
673 CALL timeset(routinen, handle)
674
675 logger => cp_get_default_logger()
676
677 CALL get_qs_env(qs_env=qs_env, &
678 input=input, &
679 matrix_s=matrix_s, &
680 dft_control=dft_control)
681 nspins = dft_control%nspins
682
683 hfx_section => section_vals_get_subs_vals(input, "DFT%XC%HF")
684 CALL section_vals_get(hfx_section, explicit=do_hfx)
685
686 IF (do_hfx) THEN
687
688 IF (dft_control%do_admm) THEN
689 IF (dft_control%admm_control%purification_method /= do_admm_purify_none) THEN
690 cpabort("ADMM: Linear Response needs purification_method=none")
691 END IF
692 IF (dft_control%admm_control%scaling_model /= do_admm_exch_scaling_none) THEN
693 cpabort("ADMM: Linear Response needs scaling_model=none")
694 END IF
695 IF (dft_control%admm_control%method /= do_admm_basis_projection) THEN
696 cpabort("ADMM: Linear Response needs admm_method=basis_projection")
697 END IF
698 !
699 rho1_ao => p_env%p1_admm
700 h1_mat => p_env%kpp1_admm
701 ELSE
702 rho1_ao => p_env%p1
703 h1_mat => p_env%kpp1
704 END IF
705
706 NULLIFY (work)
707 CALL dbcsr_allocate_matrix_set(work, nspins)
708 DO ispin = 1, nspins
709 ALLOCATE (work(ispin)%matrix)
710 CALL dbcsr_create(work(ispin)%matrix, template=h1_mat(ispin)%matrix)
711 CALL dbcsr_copy(work(ispin)%matrix, h1_mat(ispin)%matrix)
712 CALL dbcsr_set(work(ispin)%matrix, 0.0_dp)
713 END DO
714
715 CALL hfx_matrix(work, rho1_ao, qs_env, hfx_section)
716
717 alpha = 2.0_dp
718 IF (nspins == 2) alpha = 1.0_dp
719
720 DO ispin = 1, nspins
721 CALL dbcsr_add(h1_mat(ispin)%matrix, work(ispin)%matrix, 1.0_dp, alpha)
722 END DO
723
725
726 END IF
727
728 CALL timestop(handle)
729
730 END SUBROUTINE apply_hfx
731
732! **************************************************************************************************
733!> \brief Add the hfx contributions to the Hamiltonian
734!>
735!> \param matrix_ks ...
736!> \param rho_ao ...
737!> \param qs_env ...
738!> \param hfx_sections ...
739!> \param external_x_data ...
740!> \param ex ...
741!> \note
742!> Simplified version of subroutine hfx_ks_matrix()
743! **************************************************************************************************
744 SUBROUTINE hfx_matrix(matrix_ks, rho_ao, qs_env, hfx_sections, external_x_data, ex)
745 TYPE(dbcsr_p_type), DIMENSION(:), TARGET :: matrix_ks, rho_ao
746 TYPE(qs_environment_type), POINTER :: qs_env
747 TYPE(section_vals_type), POINTER :: hfx_sections
748 TYPE(hfx_type), DIMENSION(:, :), OPTIONAL, TARGET :: external_x_data
749 REAL(kind=dp), OPTIONAL :: ex
750
751 CHARACTER(LEN=*), PARAMETER :: routinen = 'hfx_matrix'
752
753 INTEGER :: handle, irep, ispin, mspin, n_rep_hf, &
754 nspins
755 LOGICAL :: distribute_fock_matrix, &
756 hfx_treat_lsd_in_core, &
757 s_mstruct_changed
758 REAL(kind=dp) :: eh1, ehfx
759 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_ks_kp, rho_ao_kp
760 TYPE(dft_control_type), POINTER :: dft_control
761 TYPE(hfx_type), DIMENSION(:, :), POINTER :: x_data
762 TYPE(mp_para_env_type), POINTER :: para_env
763
764 CALL timeset(routinen, handle)
765
766 NULLIFY (dft_control, para_env, matrix_ks_kp, rho_ao_kp, x_data)
767
768 CALL get_qs_env(qs_env=qs_env, &
769 dft_control=dft_control, &
770 para_env=para_env, &
771 s_mstruct_changed=s_mstruct_changed, &
772 x_data=x_data)
773
774 IF (PRESENT(external_x_data)) x_data => external_x_data
775
776 cpassert(dft_control%nimages == 1)
777 nspins = dft_control%nspins
778
779 CALL section_vals_get(hfx_sections, n_repetition=n_rep_hf)
780 CALL section_vals_val_get(hfx_sections, "TREAT_LSD_IN_CORE", l_val=hfx_treat_lsd_in_core, &
781 i_rep_section=1)
782
783 CALL section_vals_get(hfx_sections, n_repetition=n_rep_hf)
784 distribute_fock_matrix = .true.
785
786 mspin = 1
787 IF (hfx_treat_lsd_in_core) mspin = nspins
788
789 matrix_ks_kp(1:nspins, 1:1) => matrix_ks(1:nspins)
790 rho_ao_kp(1:nspins, 1:1) => rho_ao(1:nspins)
791
792 DO irep = 1, n_rep_hf
793 ehfx = 0.0_dp
794
795 IF (x_data(irep, 1)%do_hfx_ri) THEN
796 CALL hfx_ri_update_ks(qs_env, x_data(irep, 1)%ri_data, matrix_ks_kp, ehfx, &
797 rho_ao=rho_ao_kp, geometry_did_change=s_mstruct_changed, &
798 nspins=nspins, hf_fraction=x_data(irep, 1)%general_parameter%fraction)
799
800 ELSE
801
802 DO ispin = 1, mspin
803 CALL integrate_four_center(qs_env, x_data, matrix_ks_kp, eh1, rho_ao_kp, hfx_sections, para_env, &
804 s_mstruct_changed, irep, distribute_fock_matrix, ispin=ispin)
805 ehfx = ehfx + eh1
806 END DO
807
808 END IF
809 END DO
810
811 ! Export energy
812 IF (PRESENT(ex)) ex = ehfx
813
814 CALL timestop(handle)
815
816 END SUBROUTINE hfx_matrix
817
818! **************************************************************************************************
819!> \brief ...
820!> \param qs_env ...
821!> \param p_env ...
822! **************************************************************************************************
823 SUBROUTINE apply_xc_admm(qs_env, p_env)
824 TYPE(qs_environment_type), POINTER :: qs_env
825 TYPE(qs_p_env_type) :: p_env
826
827 CHARACTER(len=*), PARAMETER :: routinen = 'apply_xc_admm'
828
829 CHARACTER(LEN=default_string_length) :: basis_type
830 INTEGER :: handle, ispin, ns, nspins
831 INTEGER, DIMENSION(2, 3) :: bo
832 LOGICAL :: gapw, lsd
833 REAL(kind=dp) :: alpha
834 TYPE(admm_type), POINTER :: admm_env
835 TYPE(dbcsr_p_type) :: xcmat
836 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_s
837 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: ksmat, psmat
838 TYPE(dft_control_type), POINTER :: dft_control
839 TYPE(linres_control_type), POINTER :: linres_control
840 TYPE(mp_para_env_type), POINTER :: para_env
841 TYPE(neighbor_list_set_p_type), DIMENSION(:), &
842 POINTER :: sab_aux_fit
843 TYPE(pw_c1d_gs_type), DIMENSION(:), POINTER :: rho1_aux_g
844 TYPE(pw_env_type), POINTER :: pw_env
845 TYPE(pw_pool_type), POINTER :: auxbas_pw_pool
846 TYPE(pw_r3d_rs_type), DIMENSION(:), POINTER :: rho1_aux_r, tau_pw, v_xc, v_xc_tau
847 TYPE(rho_atom_type), DIMENSION(:), POINTER :: rho1_atom_set, rho_atom_set
848 TYPE(section_vals_type), POINTER :: xc_fun_section, xc_section
849 TYPE(task_list_type), POINTER :: task_list
850 TYPE(xc_rho_cflags_type) :: needs
851 TYPE(xc_rho_set_type) :: rho1_set
852
853 CALL timeset(routinen, handle)
854
855 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
856
857 IF (dft_control%do_admm) THEN
858 IF (qs_env%admm_env%aux_exch_func == do_admm_aux_exch_func_none) THEN
859 ! nothing to do
860 ELSE
861 CALL get_qs_env(qs_env=qs_env, linres_control=linres_control)
862 cpassert(.NOT. dft_control%qs_control%lrigpw)
863 cpassert(.NOT. linres_control%lr_triplet)
864
865 nspins = dft_control%nspins
866
867 ! AUX basis contribution
868 CALL get_qs_env(qs_env=qs_env, pw_env=pw_env)
869 cpassert(ASSOCIATED(pw_env))
870 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
871 NULLIFY (tau_pw)
872 ! calculate the xc potential
873 lsd = (nspins == 2)
874 CALL get_admm_env(qs_env%admm_env, matrix_s_aux_fit=matrix_s)
875 ALLOCATE (xcmat%matrix)
876 CALL dbcsr_create(xcmat%matrix, template=matrix_s(1)%matrix)
877
878 CALL get_qs_env(qs_env, admm_env=admm_env)
879 gapw = admm_env%do_gapw
880
881 CALL qs_rho_get(p_env%rho1_admm, rho_r=rho1_aux_r, rho_g=rho1_aux_g)
882 xc_section => admm_env%xc_section_aux
883 bo = rho1_aux_r(1)%pw_grid%bounds_local
884 ! create the place where to store the argument for the functionals
885 CALL xc_rho_set_create(rho1_set, bo, &
886 rho_cutoff=section_get_rval(xc_section, "DENSITY_CUTOFF"), &
887 drho_cutoff=section_get_rval(xc_section, "GRADIENT_CUTOFF"), &
888 tau_cutoff=section_get_rval(xc_section, "TAU_CUTOFF"))
889
890 xc_fun_section => section_vals_get_subs_vals(xc_section, "XC_FUNCTIONAL")
891 needs = xc_functionals_get_needs(xc_fun_section, lsd, .true.)
892
893 ! calculate the arguments needed by the functionals
894 CALL xc_rho_set_update(rho1_set, rho1_aux_r, rho1_aux_g, tau_pw, needs, &
895 section_get_ival(xc_section, "XC_GRID%XC_DERIV"), &
896 section_get_ival(xc_section, "XC_GRID%XC_SMOOTH_RHO"), &
897 auxbas_pw_pool)
898 CALL xc_calc_2nd_deriv(v_xc, v_xc_tau, p_env%kpp1_env%deriv_set_admm, p_env%kpp1_env%rho_set_admm, &
899 rho1_aux_r, rho1_aux_g, tau_pw, auxbas_pw_pool, gapw=.false., &
900 xc_section=xc_section)
901 IF (ASSOCIATED(v_xc_tau)) THEN
902 cpabort("Meta-GGA ADMM functionals not yet supported!")
903 END IF
904 CALL xc_rho_set_release(rho1_set)
905
906 basis_type = "AUX_FIT"
907 CALL get_qs_env(qs_env, para_env=para_env)
908 CALL get_admm_env(admm_env, task_list_aux_fit=task_list)
909 IF (admm_env%do_gapw) THEN
910 CALL prepare_gapw_den(qs_env, local_rho_set=p_env%local_rho_set_admm, &
911 do_rho0=.false., kind_set_external=admm_env%admm_gapw_env%admm_kind_set)
912 rho_atom_set => admm_env%admm_gapw_env%local_rho_set%rho_atom_set
913 rho1_atom_set => p_env%local_rho_set_admm%rho_atom_set
914 CALL calculate_xc_2nd_deriv_atom(rho_atom_set, rho1_atom_set, qs_env, xc_section, para_env, &
915 kind_set_external=admm_env%admm_gapw_env%admm_kind_set)
916 basis_type = "AUX_FIT_SOFT"
917 task_list => admm_env%admm_gapw_env%task_list
918 END IF
919
920 alpha = 1.0_dp
921 IF (nspins == 1) alpha = 2.0_dp
922
923 DO ispin = 1, nspins
924 CALL pw_scale(v_xc(ispin), v_xc(ispin)%pw_grid%dvol)
925 CALL dbcsr_copy(xcmat%matrix, matrix_s(1)%matrix)
926 CALL dbcsr_set(xcmat%matrix, 0.0_dp)
927 CALL integrate_v_rspace(v_rspace=v_xc(ispin), hmat=xcmat, qs_env=qs_env, &
928 calculate_forces=.false., basis_type=basis_type, &
929 task_list_external=task_list)
930 CALL dbcsr_add(p_env%kpp1_admm(ispin)%matrix, xcmat%matrix, 1.0_dp, alpha)
931 END DO
932
933 IF (admm_env%do_gapw) THEN
934 CALL get_admm_env(admm_env, sab_aux_fit=sab_aux_fit)
935 ns = SIZE(p_env%kpp1_admm)
936 ksmat(1:ns, 1:1) => p_env%kpp1_admm(1:ns)
937 psmat(1:ns, 1:1) => p_env%p1_admm(1:ns)
938 CALL update_ks_atom(qs_env, ksmat, psmat, forces=.false., tddft=.true., &
939 rho_atom_external=p_env%local_rho_set_admm%rho_atom_set, &
940 kind_set_external=admm_env%admm_gapw_env%admm_kind_set, &
941 oce_external=admm_env%admm_gapw_env%oce, &
942 sab_external=sab_aux_fit)
943 END IF
944
945 DO ispin = 1, nspins
946 CALL auxbas_pw_pool%give_back_pw(v_xc(ispin))
947 END DO
948 DEALLOCATE (v_xc)
949 CALL dbcsr_deallocate_matrix(xcmat%matrix)
950
951 END IF
952 END IF
953
954 CALL timestop(handle)
955
956 END SUBROUTINE apply_xc_admm
957
958END 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)
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:1036
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, 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, ecoul_1c, rho0_s_rs, rho0_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)
Get the QUICKSTEP environment.
https://en.wikipedia.org/wiki/Finite_difference_coefficient
Definition qs_fxc.F:27
subroutine, public qs_fxc_analytic(rho0, rho1_r, tau1_r, xc_section, auxbas_pw_pool, is_triplet, v_xc, v_xc_tau)
...
Definition qs_fxc.F:85
subroutine, public qs_fxc_fdiff(ks_env, rho0_struct, rho1_struct, xc_section, accuracy, is_triplet, fxc_rho, fxc_tau)
...
Definition qs_fxc.F:146
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, 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)
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, 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_update(rho_set, rho_r, rho_g, tau, needs, xc_deriv_method_id, xc_rho_smooth_id, pw_pool)
updates the given rho set with the density given by rho_r (and rho_g). The rho set will contain the c...
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
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_triplet, compute_virial, virial_xc)
Caller routine to calculate the second order potential in the direction of rho1_r.
Definition xc.F:1528
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:5373
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:509
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