54#include "./base/base_uses.f90"
60 LOGICAL,
PRIVATE,
PARAMETER :: debug_this_module = .false.
62 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'accint_weights_forces'
81 INTEGER,
INTENT(IN) :: order
83 LOGICAL,
INTENT(IN),
OPTIONAL :: triplet
84 REAL(kind=
dp),
INTENT(IN),
OPTIONAL :: force_scale
86 CHARACTER(len=*),
PARAMETER :: routinen =
'accint_weight_force'
88 INTEGER :: atom_a, handle, iatom, ikind, natom, &
90 INTEGER,
DIMENSION(:),
POINTER :: atom_list
91 LOGICAL :: lr_triplet, uf_grid, use_virial
92 REAL(kind=
dp) :: my_force_scale
93 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: calpha, cvalue
94 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: aforce
95 REAL(kind=
dp),
DIMENSION(3, 3) :: avirial
99 TYPE(
pw_pool_type),
POINTER :: auxbas_pw_pool, xc_pw_pool
105 CALL timeset(routinen, handle)
107 CALL get_qs_env(qs_env, dft_control=dft_control)
109 IF (dft_control%qs_control%gapw_control%accurate_xcint)
THEN
111 CALL get_qs_env(qs_env=qs_env, force=force, virial=virial)
112 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
114 CALL get_qs_env(qs_env, natom=natom, nkind=nkind)
115 ALLOCATE (aforce(3, natom))
116 ALLOCATE (calpha(nkind), cvalue(nkind))
118 calpha(1:nkind) = dft_control%qs_control%gapw_control%aw(1:nkind)
120 CALL get_qs_env(qs_env, ks_env=ks_env, pw_env=pw_env)
121 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool, xc_pw_pool=xc_pw_pool)
122 uf_grid = .NOT.
pw_grid_compare(auxbas_pw_pool%pw_grid, xc_pw_pool%pw_grid)
124 CALL xc_pw_pool%create_pw(e_rspace)
126 CALL auxbas_pw_pool%create_pw(e_rspace)
130 IF (
PRESENT(triplet)) lr_triplet = triplet
131 my_force_scale = 1.0_dp
132 IF (
PRESENT(force_scale)) my_force_scale = force_scale
134 CALL xc_density(ks_env, rho, rho1, order, xc_section, lr_triplet, e_rspace)
137 CALL auxbas_pw_pool%create_pw(e_force_rspace)
140 CALL xc_pw_pool%create_pw(e_g_xc)
141 CALL auxbas_pw_pool%create_pw(e_g_aux)
145 CALL auxbas_pw_pool%give_back_pw(e_g_aux)
146 CALL xc_pw_pool%give_back_pw(e_g_xc)
148 CALL pw_scale(e_force_rspace, e_force_rspace%pw_grid%dvol)
149 CALL gauss_grid_force(e_force_rspace, qs_env, calpha, cvalue, aforce, avirial)
150 CALL auxbas_pw_pool%give_back_pw(e_force_rspace)
152 CALL pw_scale(e_rspace, e_rspace%pw_grid%dvol)
153 CALL gauss_grid_force(e_rspace, qs_env, calpha, cvalue, aforce, avirial)
157 CALL xc_pw_pool%give_back_pw(e_rspace)
159 CALL auxbas_pw_pool%give_back_pw(e_rspace)
162 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set)
164 CALL get_atomic_kind(atomic_kind_set(ikind), natom=natom_of_kind, atom_list=atom_list)
165 DO iatom = 1, natom_of_kind
166 atom_a = atom_list(iatom)
167 force(ikind)%rho_elec(1:3, iatom) = &
168 force(ikind)%rho_elec(1:3, iatom) + my_force_scale*aforce(1:3, atom_a)
172 virial%pv_exc = virial%pv_exc + my_force_scale*avirial
173 virial%pv_virial = virial%pv_virial + my_force_scale*avirial
176 DEALLOCATE (aforce, calpha, cvalue)
180 CALL timestop(handle)
193 SUBROUTINE gauss_grid_force(e_rspace, qs_env, calpha, cvalue, aforce, avirial)
194 TYPE(pw_r3d_rs_type),
INTENT(IN) :: e_rspace
195 TYPE(qs_environment_type),
POINTER :: qs_env
196 REAL(kind=dp),
DIMENSION(:),
INTENT(IN) :: calpha, cvalue
197 REAL(kind=dp),
DIMENSION(:, :),
INTENT(OUT) :: aforce
198 REAL(kind=dp),
DIMENSION(3, 3),
INTENT(OUT) :: avirial
200 CHARACTER(len=*),
PARAMETER :: routinen =
'gauss_grid_force'
202 INTEGER :: atom_a, handle, iatom, igrid, ikind, j, &
204 INTEGER,
DIMENSION(:),
POINTER :: atom_list, cores
205 LOGICAL :: use_virial
206 REAL(kind=dp) :: alpha, eps_rho_rspace, radius
207 REAL(kind=dp),
DIMENSION(3) :: force_a, force_b, ra
208 REAL(kind=dp),
DIMENSION(3, 3) :: my_virial_a, my_virial_b
209 REAL(kind=dp),
DIMENSION(:, :),
POINTER :: hab, pab
210 TYPE(atomic_kind_type),
DIMENSION(:),
POINTER :: atomic_kind_set
211 TYPE(cell_type),
POINTER :: cell
212 TYPE(dft_control_type),
POINTER :: dft_control
213 TYPE(particle_type),
DIMENSION(:),
POINTER :: particle_set
214 TYPE(pw_env_type),
POINTER :: pw_env
215 TYPE(pw_pool_p_type),
DIMENSION(:),
POINTER :: pw_pools
216 TYPE(realspace_grid_type),
DIMENSION(:),
POINTER :: rs_grids
217 TYPE(realspace_grid_type),
POINTER :: rs_v
219 CALL timeset(routinen, handle)
225 NULLIFY (pw_pools, rs_grids, rs_v)
227 CALL get_qs_env(qs_env, pw_env=pw_env)
228 CALL pw_env_get(pw_env, pw_pools=pw_pools, rs_grids=rs_grids)
229 DO igrid = 1,
SIZE(pw_pools)
230 IF (pw_grid_compare(e_rspace%pw_grid, pw_pools(igrid)%pool%pw_grid))
THEN
231 rs_v => rs_grids(igrid)
235 IF (.NOT.
ASSOCIATED(rs_v))
THEN
236 cpabort(
"No realspace grid for Accurate-XCINT weight force")
239 CALL transfer_pw2rs(rs_v, e_rspace)
241 CALL get_qs_env(qs_env, &
242 atomic_kind_set=atomic_kind_set, &
244 dft_control=dft_control, &
245 particle_set=particle_set)
251 eps_rho_rspace = dft_control%qs_control%eps_rho_rspace
253 DO ikind = 1,
SIZE(atomic_kind_set)
255 CALL get_atomic_kind(atomic_kind_set(ikind), natom=natom_of_kind, atom_list=atom_list)
257 alpha = calpha(ikind)
258 pab(1, 1) = -cvalue(ikind)
259 IF (alpha == 0.0_dp .OR. pab(1, 1) == 0.0_dp) cycle
261 CALL reallocate(cores, 1, natom_of_kind)
265 DO iatom = 1, natom_of_kind
266 atom_a = atom_list(iatom)
267 ra(:) = pbc(particle_set(atom_a)%r, cell)
268 IF (rs_v%desc%parallel .AND. .NOT. rs_v%desc%distributed)
THEN
270 IF (
modulo(iatom, rs_v%desc%group_size) == rs_v%desc%my_pos)
THEN
283 atom_a = atom_list(iatom)
284 ra(:) = pbc(particle_set(atom_a)%r, cell)
291 radius = exp_radius_very_extended(la_min=0, la_max=0, lb_min=0, lb_max=0, &
292 ra=ra, rb=ra, rp=ra, &
293 zetp=alpha, eps=eps_rho_rspace, &
294 pab=pab, o1=0, o2=0, &
295 prefactor=1.0_dp, cutoff=1.0_dp)
297 CALL integrate_pgf_product(0, alpha, 0, &
298 0, 0.0_dp, 0, ra, [0.0_dp, 0.0_dp, 0.0_dp], &
299 rs_v, hab, pab=pab, o1=0, o2=0, &
301 calculate_forces=.true., force_a=force_a, &
302 force_b=force_b, use_virial=use_virial, my_virial_a=my_virial_a, &
303 my_virial_b=my_virial_b, use_subpatch=.true., subpatch_pattern=0)
305 aforce(1:3, atom_a) = aforce(1:3, atom_a) + force_a(1:3)
306 avirial = avirial + my_virial_a
312 DEALLOCATE (hab, pab, cores)
314 CALL timestop(handle)
316 END SUBROUTINE gauss_grid_force
332 SUBROUTINE xc_density(ks_env, rho_struct, rho1_struct, order, xc_section, triplet, exc)
334 TYPE(qs_ks_env_type),
POINTER :: ks_env
335 TYPE(qs_rho_type),
POINTER :: rho_struct, rho1_struct
336 INTEGER,
INTENT(IN) :: order
337 TYPE(section_vals_type),
POINTER :: xc_section
338 LOGICAL,
INTENT(IN) :: triplet
339 TYPE(pw_r3d_rs_type) :: exc
341 CHARACTER(len=*),
PARAMETER :: routinen =
'xc_density'
343 INTEGER :: handle, ispin, myfun, nspins
344 LOGICAL :: rho1_g_valid, rho1_tau_g_valid, &
345 rho1_tau_valid, rho_g_valid, &
346 rho_tau_g_valid, rho_tau_valid, uf_grid
347 REAL(kind=dp) :: excint, factor
348 REAL(kind=dp),
DIMENSION(3, 3) :: vdum
349 TYPE(cell_type),
POINTER :: cell
350 TYPE(dft_control_type),
POINTER :: dft_control
351 TYPE(pw_c1d_gs_type),
DIMENSION(:),
POINTER :: rho1_g, rho1_g_base, rho_g, rho_g_base, &
352 tau1_g, tau1_g_base, tau_g, tau_g_base
353 TYPE(pw_c1d_gs_type),
POINTER :: rho_nlcc_g, rho_nlcc_g_use, rho_nlcc_g_xc
354 TYPE(pw_env_type),
POINTER :: pw_env
355 TYPE(pw_pool_type),
POINTER :: auxbas_pw_pool, xc_pw_pool
356 TYPE(pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho1_r, rho1_r_base, rho_r, rho_r_base, &
357 tau1_r, tau1_r_base, tau_r, &
358 tau_r_base, vxc_rho, vxc_tau
359 TYPE(pw_r3d_rs_type),
POINTER :: rho_nlcc, rho_nlcc_use, rho_nlcc_xc, &
361 TYPE(qs_rho_type),
POINTER :: rho_fxc
363 CALL timeset(routinen, handle)
366 NULLIFY (rho1_g, rho1_g_base, rho1_r, rho1_r_base, rho_fxc, tau1_g, tau1_g_base)
367 NULLIFY (rho_g, rho_g_base, rho_r, rho_r_base, tau_g, tau_g_base, tau_r, tau_r_base, &
369 NULLIFY (rho_nlcc_use, rho_nlcc_xc, rho_nlcc_g_use, rho_nlcc_g_xc, weights)
371 CALL get_ks_env(ks_env, &
372 dft_control=dft_control, &
376 rho_nlcc_g=rho_nlcc_g)
378 CALL qs_rho_get(rho_struct, rho_r=rho_r_base, rho_g=rho_g_base, tau_r=tau_r_base, &
379 tau_g=tau_g_base, rho_g_valid=rho_g_valid, tau_g_valid=rho_tau_g_valid, &
380 tau_r_valid=rho_tau_valid)
386 nspins = dft_control%nspins
388 CALL section_vals_val_get(xc_section,
"XC_FUNCTIONAL%_SECTION_PARAMETERS_", i_val=myfun)
390 CALL pw_env_get(pw_env, xc_pw_pool=xc_pw_pool, auxbas_pw_pool=auxbas_pw_pool)
391 uf_grid = .NOT. pw_grid_compare(auxbas_pw_pool%pw_grid, xc_pw_pool%pw_grid)
393 NULLIFY (rho_r, rho_g, tau_r, tau_g)
394 IF (rho_g_valid)
THEN
395 CALL create_density_on_pool(xc_pw_pool, rho_g_base, rho_r, rho_g)
396 ELSEIF (
ASSOCIATED(rho_r_base))
THEN
397 CALL create_density_on_pool_from_r(auxbas_pw_pool, xc_pw_pool, rho_r_base, rho_r, rho_g)
399 cpabort(
"Fine Grid in xc_density requires rho_r or rho_g")
401 IF (rho_tau_valid)
THEN
402 IF (rho_tau_g_valid)
THEN
403 CALL create_density_on_pool(xc_pw_pool, tau_g_base, tau_r, tau_g)
404 ELSEIF (
ASSOCIATED(tau_r_base))
THEN
405 CALL create_density_on_pool_from_r(auxbas_pw_pool, xc_pw_pool, tau_r_base, tau_r, tau_g)
407 cpabort(
"Fine Grid in xc_density requires tau_r or tau_g")
410 IF (
ASSOCIATED(rho_nlcc))
THEN
411 ALLOCATE (rho_nlcc_g_xc, rho_nlcc_xc)
412 CALL xc_pw_pool%create_pw(rho_nlcc_g_xc)
413 CALL xc_pw_pool%create_pw(rho_nlcc_xc)
414 CALL pw_transfer(rho_nlcc_g, rho_nlcc_g_xc)
415 CALL pw_transfer(rho_nlcc_g_xc, rho_nlcc_xc)
416 rho_nlcc_use => rho_nlcc_xc
417 rho_nlcc_g_use => rho_nlcc_g_xc
420 IF (.NOT.
ASSOCIATED(rho_nlcc_use))
THEN
421 rho_nlcc_use => rho_nlcc
422 rho_nlcc_g_use => rho_nlcc_g
427 IF (myfun /= xc_none)
THEN
429 cpassert(
ASSOCIATED(rho_struct))
430 cpassert(dft_control%sic_method_id == sic_none)
433 IF (
ASSOCIATED(rho_nlcc_use) .AND. order <= 1)
THEN
436 CALL pw_axpy(rho_nlcc_use, rho_r(ispin), factor)
437 CALL pw_axpy(rho_nlcc_g_use, rho_g(ispin), factor)
441 NULLIFY (vxc_rho, vxc_tau)
445 CALL xc_exc_pw_create(rho_r, rho_g, tau_r, xc_section, weights, xc_pw_pool, exc)
447 CALL qs_rho_get(rho1_struct, rho_r=rho1_r_base, rho_g=rho1_g_base, tau_r=tau1_r_base, &
448 tau_g=tau1_g_base, rho_g_valid=rho1_g_valid, &
449 tau_g_valid=rho1_tau_g_valid, tau_r_valid=rho1_tau_valid)
450 rho1_r => rho1_r_base
451 tau1_g => tau1_g_base
452 tau1_r => tau1_r_base
454 NULLIFY (rho1_r, rho1_g, tau1_r, tau1_g)
455 IF (rho1_g_valid)
THEN
456 CALL create_density_on_pool(xc_pw_pool, rho1_g_base, rho1_r, rho1_g)
457 ELSEIF (
ASSOCIATED(rho1_r_base))
THEN
458 CALL create_density_on_pool_from_r(auxbas_pw_pool, xc_pw_pool, rho1_r_base, rho1_r, rho1_g)
460 cpabort(
"Fine Grid in xc_density requires rho1_r or rho1_g")
462 IF (rho1_tau_valid)
THEN
463 IF (rho1_tau_g_valid)
THEN
464 CALL create_density_on_pool(xc_pw_pool, tau1_g_base, tau1_r, tau1_g)
465 ELSEIF (
ASSOCIATED(tau1_r_base))
THEN
466 CALL create_density_on_pool_from_r(auxbas_pw_pool, xc_pw_pool, tau1_r_base, tau1_r, tau1_g)
468 cpabort(
"Fine Grid in xc_density requires tau1_r or tau1_g")
472 CALL xc_vxc_pw_create(vxc_rho=vxc_rho, vxc_tau=vxc_tau, rho_r=rho_r, &
473 rho_g=rho_g, tau=tau_r, exc=excint, &
474 xc_section=xc_section, &
475 weights=weights, pw_pool=xc_pw_pool, &
476 compute_virial=.false., &
479 CALL qs_rho_get(rho1_struct, rho_r=rho1_r_base, rho_g=rho1_g_base, tau_r=tau1_r_base, &
480 tau_g=tau1_g_base, rho_g_valid=rho1_g_valid, &
481 tau_g_valid=rho1_tau_g_valid, tau_r_valid=rho1_tau_valid)
482 rho1_r => rho1_r_base
483 tau1_g => tau1_g_base
484 tau1_r => tau1_r_base
486 NULLIFY (rho1_r, rho1_g, tau1_r, tau1_g)
487 IF (rho1_g_valid)
THEN
488 CALL create_density_on_pool(xc_pw_pool, rho1_g_base, rho1_r, rho1_g)
489 ELSEIF (
ASSOCIATED(rho1_r_base))
THEN
490 CALL create_density_on_pool_from_r(auxbas_pw_pool, xc_pw_pool, rho1_r_base, rho1_r, rho1_g)
492 cpabort(
"Fine Grid in xc_density requires rho1_r or rho1_g")
494 IF (rho1_tau_valid)
THEN
495 IF (rho1_tau_g_valid)
THEN
496 CALL create_density_on_pool(xc_pw_pool, tau1_g_base, tau1_r, tau1_g)
497 ELSEIF (
ASSOCIATED(tau1_r_base))
THEN
498 CALL create_density_on_pool_from_r(auxbas_pw_pool, xc_pw_pool, tau1_r_base, tau1_r, tau1_g)
500 cpabort(
"Fine Grid in xc_density requires tau1_r or tau1_g")
504 CALL qs_rho_create(rho_fxc)
505 IF (rho_tau_valid)
THEN
506 CALL qs_rho_set(rho_fxc, rho_r=rho_r, rho_g=rho_g, tau_r=tau_r, &
507 rho_r_valid=.true., rho_g_valid=.true., tau_r_valid=.true.)
509 CALL qs_rho_set(rho_fxc, rho_r=rho_r, rho_g=rho_g, &
510 rho_r_valid=.true., rho_g_valid=.true.)
513 rho_fxc => rho_struct
515 CALL qs_fxc_analytic(rho_fxc, rho1_r, tau1_r, xc_section, weights, xc_pw_pool, &
516 triplet, vxc_rho, vxc_tau)
517 IF (uf_grid)
DEALLOCATE (rho_fxc)
519 cpabort(
"Derivative order not available in xc_density")
523 IF (
ASSOCIATED(rho_nlcc_use) .AND. order <= 1)
THEN
525 DO ispin = 1, dft_control%nspins
526 CALL pw_axpy(rho_nlcc_use, rho_r(ispin), factor)
527 CALL pw_axpy(rho_nlcc_g_use, rho_g(ispin), factor)
536 IF (
ASSOCIATED(vxc_rho))
THEN
538 CALL pw_multiply_with(vxc_rho(ispin), rho1_r(ispin))
539 CALL pw_axpy(vxc_rho(ispin), exc, 1.0_dp)
540 CALL vxc_rho(ispin)%release()
544 IF (
ASSOCIATED(vxc_tau))
THEN
545 IF (.NOT.
ASSOCIATED(tau1_r)) &
546 cpabort(
"Tau response density required for mGGA xc_density")
548 CALL pw_multiply_with(vxc_tau(ispin), tau1_r(ispin))
549 CALL pw_axpy(vxc_tau(ispin), exc, 1.0_dp)
550 CALL vxc_tau(ispin)%release()
555 cpabort(
"Derivative order not available in xc_density")
559 CALL pw_scale(exc, 0.5_dp)
565 CALL give_back_density_on_pool(xc_pw_pool, rho_r, rho_g)
566 IF (
ASSOCIATED(tau_r))
CALL give_back_density_on_pool(xc_pw_pool, tau_r, tau_g)
567 IF (
ASSOCIATED(rho1_r))
CALL give_back_density_on_pool(xc_pw_pool, rho1_r, rho1_g)
568 IF (
ASSOCIATED(tau1_r))
CALL give_back_density_on_pool(xc_pw_pool, tau1_r, tau1_g)
569 IF (
ASSOCIATED(rho_nlcc_xc))
THEN
570 CALL xc_pw_pool%give_back_pw(rho_nlcc_xc)
571 DEALLOCATE (rho_nlcc_xc)
573 IF (
ASSOCIATED(rho_nlcc_g_xc))
THEN
574 CALL xc_pw_pool%give_back_pw(rho_nlcc_g_xc)
575 DEALLOCATE (rho_nlcc_g_xc)
579 CALL timestop(handle)
581 END SUBROUTINE xc_density
590 SUBROUTINE create_density_on_pool(pw_pool, rho_g_in, rho_r_out, rho_g_out)
591 TYPE(pw_pool_type),
POINTER :: pw_pool
592 TYPE(pw_c1d_gs_type),
DIMENSION(:),
POINTER :: rho_g_in
593 TYPE(pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho_r_out
594 TYPE(pw_c1d_gs_type),
DIMENSION(:),
POINTER :: rho_g_out
596 INTEGER :: ispin, nspins
598 cpassert(
ASSOCIATED(pw_pool))
599 cpassert(
ASSOCIATED(rho_g_in))
601 nspins =
SIZE(rho_g_in)
602 ALLOCATE (rho_r_out(nspins), rho_g_out(nspins))
604 CALL pw_pool%create_pw(rho_g_out(ispin))
605 CALL pw_pool%create_pw(rho_r_out(ispin))
606 CALL pw_transfer(rho_g_in(ispin), rho_g_out(ispin))
607 CALL pw_transfer(rho_g_out(ispin), rho_r_out(ispin))
610 END SUBROUTINE create_density_on_pool
620 SUBROUTINE create_density_on_pool_from_r(source_pw_pool, target_pw_pool, rho_r_in, rho_r_out, rho_g_out)
621 TYPE(pw_pool_type),
POINTER :: source_pw_pool, target_pw_pool
622 TYPE(pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho_r_in, rho_r_out
623 TYPE(pw_c1d_gs_type),
DIMENSION(:),
POINTER :: rho_g_out
625 INTEGER :: ispin, nspins
626 TYPE(pw_c1d_gs_type) :: rho_g_in
628 cpassert(
ASSOCIATED(source_pw_pool))
629 cpassert(
ASSOCIATED(target_pw_pool))
630 cpassert(
ASSOCIATED(rho_r_in))
632 nspins =
SIZE(rho_r_in)
633 ALLOCATE (rho_r_out(nspins), rho_g_out(nspins))
635 CALL source_pw_pool%create_pw(rho_g_in)
636 CALL target_pw_pool%create_pw(rho_g_out(ispin))
637 CALL target_pw_pool%create_pw(rho_r_out(ispin))
638 CALL pw_transfer(rho_r_in(ispin), rho_g_in)
639 CALL pw_transfer(rho_g_in, rho_g_out(ispin))
640 CALL pw_transfer(rho_g_out(ispin), rho_r_out(ispin))
641 CALL source_pw_pool%give_back_pw(rho_g_in)
644 END SUBROUTINE create_density_on_pool_from_r
652 SUBROUTINE give_back_density_on_pool(pw_pool, rho_r, rho_g)
653 TYPE(pw_pool_type),
POINTER :: pw_pool
654 TYPE(pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho_r
655 TYPE(pw_c1d_gs_type),
DIMENSION(:),
POINTER :: rho_g
659 cpassert(
ASSOCIATED(pw_pool))
661 IF (
ASSOCIATED(rho_r))
THEN
662 DO ispin = 1,
SIZE(rho_r)
663 CALL pw_pool%give_back_pw(rho_r(ispin))
667 IF (
ASSOCIATED(rho_g))
THEN
668 DO ispin = 1,
SIZE(rho_g)
669 CALL pw_pool%give_back_pw(rho_g(ispin))
674 END SUBROUTINE give_back_density_on_pool
static GRID_HOST_DEVICE int modulo(int a, int m)
Equivalent of Fortran's MODULO, which always return a positive number. https://gcc....
subroutine, public accint_weight_force(qs_env, rho, rho1, order, xc_section, triplet, force_scale)
...
All kind of helpful little routines.
real(kind=dp) function, public exp_radius_very_extended(la_min, la_max, lb_min, lb_max, pab, o1, o2, ra, rb, rp, zetp, eps, prefactor, cutoff, epsabs)
computes the radius of the Gaussian outside of which it is smaller than eps
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.
Handles all functions related to the CELL.
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
Fortran API for the grid package, which is written in C.
subroutine, public integrate_pgf_product(la_max, zeta, la_min, lb_max, zetb, lb_min, ra, rab, rsgrid, hab, pab, o1, o2, radius, calculate_forces, force_a, force_b, compute_tau, use_virial, my_virial_a, my_virial_b, hdab, hadb, a_hdab, use_subpatch, subpatch_pattern)
low level function to compute matrix elements of primitive gaussian functions
Defines the basic variable types.
integer, parameter, public dp
Utility routines for the memory handling.
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
This module defines the grid data type and some basic operations on it.
logical function, public pw_grid_compare(grida, gridb)
Check if two pw_grids are equal.
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
subroutine, public qs_fxc_analytic(rho0, rho1_r, tau1_r, xc_section, weights, auxbas_pw_pool, is_triplet, v_xc, v_xc_tau, spinflip)
...
subroutine, public get_ks_env(ks_env, v_hartree_rspace, s_mstruct_changed, rho_changed, exc_accint, potential_changed, forces_up_to_date, complex_ks, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, kinetic, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_ks_im_kp, rho, rho_xc, vppl, xcint_weights, rho_core, rho_nlcc, rho_nlcc_g, vee, neighbor_list_id, sab_orb, sab_all, sac_ae, sac_ppl, sac_lri, sap_ppnl, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_vdw, sab_scp, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, task_list, task_list_soft, kpoints, do_kpoints, atomic_kind_set, qs_kind_set, cell, cell_ref, use_ref_cell, particle_set, energy, force, local_particles, local_molecules, molecule_kind_set, molecule_set, subsys, cp_subsys, virial, results, atprop, nkind, natom, dft_control, dbcsr_dist, distribution_2d, pw_env, para_env, blacs_env, nelectron_total, nelectron_spin)
...
superstucture that hold various representations of the density and keeps track of which ones are vali...
subroutine, public qs_rho_set(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)
...
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...
subroutine, public qs_rho_create(rho)
Allocates a new instance of rho.
subroutine, public transfer_pw2rs(rs, pw)
...
Exchange and Correlation functional calculations.
subroutine, public xc_vxc_pw_create(vxc_rho, vxc_tau, exc, rho_r, rho_g, tau, xc_section, weights, pw_pool, compute_virial, virial_xc, exc_r)
Exchange and Correlation functional calculations.
subroutine, public xc_exc_pw_create(rho_r, rho_g, tau, xc_section, weights, pw_pool, exc)
calculates just the exchange and correlation energy density
Provides all information about an atomic kind.
Type defining parameters related to the simulation cell.
contained for different pw related things
to create arrays of pools
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...
keeps the density in various representations, keeping track of which ones are valid.