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