9#include "gauxc/gauxc_config.f"
12#define GAUXC_RETURN_IF_ERROR(status) IF (status%status%code /= 0) RETURN
14MODULE xc_gauxc_interface
16 USE iso_c_binding,
ONLY: &
57 USE gauxc_status,
ONLY: &
58 gauxc_status_message, &
60 USE gauxc_enums,
ONLY: &
61 gauxc_atomicgridsizedefault, &
62 gauxc_executionspace, &
63 gauxc_pruningscheme, &
65 USE gauxc_runtime_environment,
ONLY: &
66 gauxc_runtime_environment_delete, &
67 gauxc_runtime_environment_new, &
68 gauxc_runtime_environment_type
69 USE gauxc_molecule,
ONLY: &
71 gauxc_molecule_new_from_atoms, &
73 USE gauxc_atom,
ONLY: &
75 USE gauxc_basisset,
ONLY: &
77 gauxc_basisset_new_from_shells, &
78 gauxc_basisset_type, &
80 USE gauxc_shell,
ONLY: &
82 USE gauxc_molgrid,
ONLY: &
84 gauxc_molgrid_new_default, &
86 USE gauxc_load_balancer,
ONLY: &
88 gauxc_load_balancer_factory_get_instance, &
89 gauxc_load_balancer_factory_new, &
90 gauxc_load_balancer_factory_type, &
91 gauxc_load_balancer_type
92 USE gauxc_molecular_weights,
ONLY: &
95 gauxc_molecular_weights_factory_new, &
96 gauxc_molecular_weights_factory_type, &
97 gauxc_molecular_weights_modify_weights, &
98 gauxc_molecular_weights_settings, &
99 gauxc_molecular_weights_type
100 USE gauxc_xc_functional,
ONLY: &
102 gauxc_functional_from_string, &
103 gauxc_functional_type
104 USE gauxc_integrator,
ONLY: &
106 gauxc_integrator_eval_exc_grad_rks, &
107 gauxc_integrator_eval_exc_grad_uks, &
108 gauxc_integrator_eval_exc_vxc_rks, &
109 gauxc_integrator_eval_exc_vxc_uks, &
110 gauxc_integrator_new, &
111 gauxc_integrator_type
112#ifdef GAUXC_HAS_ONEDFT
113 USE gauxc_integrator,
ONLY: &
114 gauxc_integrator_eval_exc_grad_onedft_uks, &
115 gauxc_integrator_eval_exc_vxc_onedft_uks
117 omp_get_max_threads, &
124#include "../base/base_uses.f90"
133 TYPE cp_gauxc_molecule_type
134 END TYPE cp_gauxc_molecule_type
136 TYPE cp_gauxc_basisset_type
137 INTEGER :: max_l = -1
138 END TYPE cp_gauxc_basisset_type
140 TYPE cp_gauxc_grid_type
141 END TYPE cp_gauxc_grid_type
143 TYPE cp_gauxc_integrator_type
144 END TYPE cp_gauxc_integrator_type
146 TYPE cp_gauxc_status_type
147 END TYPE cp_gauxc_status_type
153 TYPE cp_gauxc_molecule_type
154 TYPE(gauxc_molecule_type) :: molecule
155 END TYPE cp_gauxc_molecule_type
157 TYPE cp_gauxc_basisset_type
158 TYPE(gauxc_basisset_type) :: basis
159 INTEGER :: max_l = -1
160 END TYPE cp_gauxc_basisset_type
162 TYPE cp_gauxc_grid_type
163 TYPE(gauxc_molgrid_type) :: grid
164 TYPE(gauxc_load_balancer_type) :: lb
165 TYPE(gauxc_load_balancer_factory_type) :: lbf
166 TYPE(gauxc_molecular_weights_type) :: mw
167 TYPE(gauxc_molecular_weights_factory_type) :: mwf
168 TYPE(gauxc_runtime_environment_type) :: rt
169 LOGICAL :: owns_rt = .false.
170 END TYPE cp_gauxc_grid_type
172 TYPE cp_gauxc_integrator_type
173 TYPE(gauxc_functional_type) :: func
175 END TYPE cp_gauxc_integrator_type
177 TYPE cp_gauxc_status_type
178 TYPE(gauxc_status_type) :: status
179 END TYPE cp_gauxc_status_type
181 TYPE(gauxc_runtime_environment_type) :: rt
182 INTEGER :: rt_mpi_comm = -1
183 LOGICAL :: rt_has_mpi_comm = .false.
187 TYPE cp_gauxc_xc_type
188 REAL(c_double) :: exc
189 REAL(c_double),
DIMENSION(:, :),
ALLOCATABLE :: vxc_scalar, vxc_zeta
190 END TYPE cp_gauxc_xc_type
192 TYPE cp_gauxc_xc_gradient_type
193 REAL(c_double),
ALLOCATABLE,
DIMENSION(:) :: exc_grad
194 END TYPE cp_gauxc_xc_gradient_type
196 CHARACTER(len=*),
PARAMETER :: no_gauxc_message =
"Compile CP2K with GauXC to use this functionality!"
199 cp_gauxc_basisset_type, &
200 cp_gauxc_grid_type, &
201 cp_gauxc_integrator_type, &
202 cp_gauxc_molecule_type, &
203 cp_gauxc_status_type, &
204 cp_gauxc_xc_gradient_type, &
206 gauxc_check_status, &
207 gauxc_compute_xc_gradient, &
209 gauxc_create_basisset, &
211 gauxc_create_integrator, &
212 gauxc_create_molecule, &
213 gauxc_destroy_basisset, &
214 gauxc_destroy_grid, &
215 gauxc_destroy_integrator, &
216 gauxc_destroy_molecule, &
227 TYPE(cp_gauxc_status_type) :: status
230 CHARACTER(kind=c_char),
POINTER :: s(:)
233 WRITE (0,
'(a,1x,i0)')
"GauXC returned with status code", status%status%code
234 IF (c_associated(status%status%message))
THEN
235 WRITE (0,
'(a)', advance=
'no')
"GauXC status message: ["
239 IF (s(i) == c_null_char)
EXIT
240 WRITE (0,
'(A)', advance=
'no') s(i)
245 WRITE (0,
'(a)')
"GauXC status message: [null]"
257 SUBROUTINE gauxc_init(mpi_comm, status)
258 INTEGER,
INTENT(IN),
OPTIONAL :: mpi_comm
259 TYPE(cp_gauxc_status_type),
INTENT(OUT) :: status
262#if defined(GAUXC_HAS_MPI) && defined(__parallel)
263 IF (
PRESENT(mpi_comm))
THEN
264 rt = gauxc_runtime_environment_new(status%status, mpi_comm)
265 rt_mpi_comm = mpi_comm
266 rt_has_mpi_comm = .true.
268 rt = gauxc_runtime_environment_new(status%status)
270 rt_has_mpi_comm = .false.
274 rt = gauxc_runtime_environment_new(status%status)
276 rt_has_mpi_comm = .false.
278 gauxc_return_if_error(status)
283 END SUBROUTINE gauxc_init
289 SUBROUTINE gauxc_finalize(status)
290 TYPE(cp_gauxc_status_type),
INTENT(OUT) :: status
293 CALL gauxc_runtime_environment_delete(status%status, rt)
294 gauxc_return_if_error(status)
296 rt_has_mpi_comm = .false.
300 END SUBROUTINE gauxc_finalize
308 FUNCTION gauxc_create_molecule(particle_set, status)
RESULT(res)
309 TYPE(
particle_type),
DIMENSION(:),
INTENT(IN) :: particle_set
310 TYPE(cp_gauxc_status_type),
INTENT(OUT) :: status
311 TYPE(cp_gauxc_molecule_type) :: res
314 CHARACTER(LEN=2) :: element_symbol
315 INTEGER :: atomic_number, i, natoms
317 TYPE(gauxc_atom_type),
ALLOCATABLE,
DIMENSION(:) :: atoms
319 natoms =
SIZE(particle_set)
320 ALLOCATE (atoms(natoms))
323 atomic_kind => particle_set(i)%atomic_kind
326 atoms(i)%atomic_number = int(atomic_number, c_int64_t)
327 atoms(i)%x = real(particle_set(i)%r(1), c_double)
328 atoms(i)%y = real(particle_set(i)%r(2), c_double)
329 atoms(i)%z = real(particle_set(i)%r(3), c_double)
332 res%molecule = gauxc_molecule_new_from_atoms(status%status, atoms, int(natoms, c_size_t))
333 gauxc_return_if_error(status)
337 mark_used(particle_set)
340 cpabort(no_gauxc_message)
342 END FUNCTION gauxc_create_molecule
351 FUNCTION gauxc_create_basisset(qs_kind_set, particle_set, status)
RESULT(res)
353 POINTER :: qs_kind_set
354 TYPE(
particle_type),
DIMENSION(:),
INTENT(IN) :: particle_set
355 TYPE(cp_gauxc_status_type),
INTENT(OUT) :: status
356 TYPE(cp_gauxc_basisset_type) :: res
359 INTEGER :: iatom, ikind, iprim, iset, ishell, lval, &
360 nkind, npgf, nset, nshell, &
361 nshell_total, shell_index, natoms
362 REAL(c_double),
DIMENSION(3) :: shell_origin
364 TYPE(gauxc_shell_type),
ALLOCATABLE,
DIMENSION(:) :: shells
368 nkind =
SIZE(qs_kind_set)
369 natoms =
SIZE(particle_set)
371 ALLOCATE (basis_set_list(nkind))
376 atomic_kind => particle_set(iatom)%atomic_kind
378 gto_basis => basis_set_list(ikind)%gto_basis_set
379 cpassert(
ASSOCIATED(gto_basis))
381 nshell_total = nshell_total + sum(gto_basis%nshell)
384 ALLOCATE (shells(nshell_total))
389 atomic_kind => particle_set(iatom)%atomic_kind
391 gto_basis => basis_set_list(ikind)%gto_basis_set
392 cpassert(
ASSOCIATED(gto_basis))
394 shell_origin(1) = real(particle_set(iatom)%r(1), c_double)
395 shell_origin(2) = real(particle_set(iatom)%r(2), c_double)
396 shell_origin(3) = real(particle_set(iatom)%r(3), c_double)
398 nset = gto_basis%nset
399 cpassert(nset ==
SIZE(gto_basis%nshell))
401 nshell = gto_basis%nshell(iset)
402 npgf = gto_basis%npgf(iset)
404 DO ishell = 1, gto_basis%nshell(iset)
405 shell_index = shell_index + 1
406 lval = gto_basis%l(ishell, iset)
407 res%max_l = max(res%max_l, lval)
408 shells(shell_index)%l = int(lval, c_int32_t)
411 shells(shell_index)%pure = .true._c_bool
412 shells(shell_index)%nprim = int(npgf, c_int32_t)
413 shells(shell_index)%origin = shell_origin
416 shells(shell_index)%exponents(iprim) = &
417 REAL(gto_basis%zet(iprim, iset), c_double)
418 shells(shell_index)%coefficients(iprim) = &
419 REAL(gto_basis%norm_cgf(gto_basis%first_cgf(ishell, iset))* &
420 gto_basis%gcc(iprim, ishell, iset), c_double)
426 res%basis = gauxc_basisset_new_from_shells( &
430 gauxc_return_if_error(status)
433 DEALLOCATE (basis_set_list)
436 mark_used(particle_set)
437 mark_used(qs_kind_set)
440 cpabort(no_gauxc_message)
442 END FUNCTION gauxc_create_basisset
457 FUNCTION gauxc_create_grid( &
466 mpi_comm)
RESULT(res)
468 TYPE(cp_gauxc_molecule_type),
INTENT(IN) :: molecule
469 TYPE(cp_gauxc_basisset_type),
INTENT(in) :: basis
470 CHARACTER(len=*) :: grid_type, lb_exec_space, &
471 pruning_scheme, radial_quadrature
472 INTEGER :: batch_size
473 TYPE(cp_gauxc_status_type),
INTENT(OUT) :: status
474 INTEGER,
INTENT(IN),
OPTIONAL :: mpi_comm
475 TYPE(cp_gauxc_grid_type) :: res
478 INTEGER(c_int) :: grid_type_local, int_exec_space_local, &
479 lb_exec_space_local, &
480 pruning_scheme_local, radial_quad_local
482 grid_type_local = read_atomic_grid_size(grid_type)
483 radial_quad_local = read_radial_quad(radial_quadrature)
484 pruning_scheme_local = read_pruning_scheme(pruning_scheme)
485 lb_exec_space_local = read_execution_space(lb_exec_space)
486 int_exec_space_local = read_execution_space(
"host")
487 res%owns_rt = .false.
489#if defined(GAUXC_HAS_MPI) && defined(__parallel)
490 IF (
PRESENT(mpi_comm))
THEN
493 IF (.NOT. rt_has_mpi_comm .OR. mpi_comm /= rt_mpi_comm)
THEN
494 res%rt = gauxc_runtime_environment_new(status%status, mpi_comm)
495 gauxc_return_if_error(status)
503 res%grid = gauxc_molgrid_new_default( &
506 pruning_scheme_local, &
507 int(batch_size, c_int64_t), &
510 gauxc_return_if_error(status)
512 res%lbf = gauxc_load_balancer_factory_new( &
515 gauxc_return_if_error(status)
517 IF (res%owns_rt)
THEN
518 res%lb = gauxc_load_balancer_factory_get_instance( &
526 res%lb = gauxc_load_balancer_factory_get_instance( &
534 gauxc_return_if_error(status)
536 res%mwf = gauxc_molecular_weights_factory_new( &
538 int_exec_space_local)
539 gauxc_return_if_error(status)
541 res%mw = gauxc_get_instance( &
544 gauxc_return_if_error(status)
546 CALL gauxc_molecular_weights_modify_weights( &
550 gauxc_return_if_error(status)
554 mark_used(batch_size)
556 mark_used(lb_exec_space)
559 mark_used(pruning_scheme)
560 mark_used(radial_quadrature)
563 cpabort(no_gauxc_message)
565 END FUNCTION gauxc_create_grid
576 FUNCTION gauxc_create_integrator( &
577 xc_functional_name, &
583 CHARACTER(len=*),
INTENT(IN) :: xc_functional_name, int_exec_space
584 TYPE(cp_gauxc_grid_type),
INTENT(IN) :: grid
585 INTEGER,
INTENT(IN) :: nspins
586 TYPE(cp_gauxc_status_type),
INTENT(OUT) :: status
587 TYPE(cp_gauxc_integrator_type) :: res
590 INTEGER(c_int) :: int_exec_space_local
591 LOGICAL(c_bool) :: polarized
593 polarized = (nspins == 2)
594 res%func = gauxc_functional_from_string( &
596 xc_functional_name, &
598 gauxc_return_if_error(status)
600 int_exec_space_local = read_execution_space(int_exec_space)
601 res%integrator = gauxc_integrator_new( &
605 int_exec_space_local)
606 gauxc_return_if_error(status)
610 mark_used(int_exec_space)
614 mark_used(xc_functional_name)
615 cpabort(no_gauxc_message)
617 END FUNCTION gauxc_create_integrator
629 FUNCTION gauxc_compute_xc( &
637 TYPE(cp_gauxc_integrator_type),
INTENT(IN) :: integrator
638 REAL(c_double),
DIMENSION(:, :),
INTENT(IN) :: density_scalar
639 REAL(c_double),
DIMENSION(:, :),
INTENT(IN), &
640 OPTIONAL :: density_zeta
641 INTEGER,
INTENT(IN) :: nspins
642 TYPE(cp_gauxc_status_type),
INTENT(OUT) :: status
643 CHARACTER(len=*),
INTENT(IN),
OPTIONAL :: model
644 TYPE(cp_gauxc_xc_type) :: res
647 CHARACTER(len=default_path_length) :: model_key
648 LOGICAL :: use_onedft
649#ifdef GAUXC_HAS_ONEDFT
650 REAL(c_double),
ALLOCATABLE,
DIMENSION(:, :) :: density_zeta_zero
651 INTEGER :: omp_max_threads_restore
655 IF (
PRESENT(model))
THEN
656 model_key = adjustl(model)
658 use_onedft = (trim(model_key) /=
"" .AND. trim(model_key) /=
"NONE")
661 IF (.NOT.
ALLOCATED(res%vxc_scalar))
THEN
662 ALLOCATE (res%vxc_scalar, mold=density_scalar)
664 cpassert(all(shape(res%vxc_scalar) == shape(density_scalar)))
666 res%vxc_scalar = 0._dp
669#ifndef GAUXC_HAS_ONEDFT
670 cpabort(
"GauXC lacks OneDFT support")
674 omp_max_threads_restore = omp_get_max_threads()
675 IF (.NOT.
ALLOCATED(res%vxc_zeta))
THEN
676 ALLOCATE (res%vxc_zeta, mold=density_scalar)
678 cpassert(all(shape(res%vxc_zeta) == shape(density_scalar)))
682 IF (nspins == 1)
THEN
683 ALLOCATE (density_zeta_zero, mold=density_scalar)
684 density_zeta_zero = 0._dp
685 CALL gauxc_integrator_eval_exc_vxc_onedft_uks( &
694 DEALLOCATE (density_zeta_zero)
696 cpassert(
PRESENT(density_zeta))
697 CALL gauxc_integrator_eval_exc_vxc_onedft_uks( &
707 CALL omp_set_num_threads(omp_max_threads_restore)
708 gauxc_return_if_error(status)
713 IF (nspins == 1)
THEN
714 CALL gauxc_integrator_eval_exc_vxc_rks( &
721 cpassert(
PRESENT(density_zeta))
723 IF (.NOT.
ALLOCATED(res%vxc_zeta))
THEN
724 ALLOCATE (res%vxc_zeta, mold=density_zeta)
726 cpassert(all(shape(res%vxc_zeta) == shape(density_scalar)))
730 CALL gauxc_integrator_eval_exc_vxc_uks( &
739 gauxc_return_if_error(status)
743 mark_used(density_scalar)
744 mark_used(density_zeta)
748 cpabort(no_gauxc_message)
750 END FUNCTION gauxc_compute_xc
763 FUNCTION gauxc_compute_xc_gradient( &
772 TYPE(cp_gauxc_integrator_type),
INTENT(IN) :: integrator
773 REAL(c_double),
DIMENSION(:, :),
INTENT(IN) :: density_scalar
774 REAL(c_double),
DIMENSION(:, :),
INTENT(IN), &
775 OPTIONAL :: density_zeta
776 INTEGER,
INTENT(IN) :: nspins, natom
777 TYPE(cp_gauxc_status_type),
INTENT(OUT) :: status
778 CHARACTER(len=*),
INTENT(IN),
OPTIONAL :: model
779 TYPE(cp_gauxc_xc_gradient_type) :: res
782 CHARACTER(len=default_path_length) :: model_key
783 LOGICAL :: use_onedft
784#ifdef GAUXC_HAS_ONEDFT
785 REAL(c_double),
ALLOCATABLE,
DIMENSION(:, :) :: density_zeta_zero
786 INTEGER :: omp_max_threads_restore
789 ALLOCATE (res%exc_grad(3*natom))
793 IF (
PRESENT(model))
THEN
794 model_key = adjustl(model)
796 use_onedft = (trim(model_key) /=
"" .AND. trim(model_key) /=
"NONE")
800#ifndef GAUXC_HAS_ONEDFT
801 cpabort(
"GauXC lacks OneDFT support")
805 omp_max_threads_restore = omp_get_max_threads()
806 IF (nspins == 1)
THEN
807 ALLOCATE (density_zeta_zero, mold=density_scalar)
808 density_zeta_zero = 0._dp
809 CALL gauxc_integrator_eval_exc_grad_onedft_uks( &
816 DEALLOCATE (density_zeta_zero)
818 cpassert(
PRESENT(density_zeta))
819 CALL gauxc_integrator_eval_exc_grad_onedft_uks( &
827 CALL omp_set_num_threads(omp_max_threads_restore)
828 gauxc_return_if_error(status)
833 IF (nspins == 1)
THEN
834 CALL gauxc_integrator_eval_exc_grad_rks( &
840 cpassert(
PRESENT(density_zeta))
841 CALL gauxc_integrator_eval_exc_grad_uks( &
848 gauxc_return_if_error(status)
851 mark_used(density_scalar)
852 mark_used(density_zeta)
859 cpabort(no_gauxc_message)
861 END FUNCTION gauxc_compute_xc_gradient
868 SUBROUTINE gauxc_destroy_molecule(molecule, status)
869 TYPE(cp_gauxc_molecule_type),
INTENT(INOUT) :: molecule
870 TYPE(cp_gauxc_status_type),
INTENT(OUT) :: status
873 CALL gauxc_delete(status%status, molecule%molecule)
874 gauxc_return_if_error(status)
878 cpabort(no_gauxc_message)
880 END SUBROUTINE gauxc_destroy_molecule
887 SUBROUTINE gauxc_destroy_basisset(basis, status)
888 TYPE(cp_gauxc_basisset_type),
INTENT(INOUT) :: basis
889 TYPE(cp_gauxc_status_type),
INTENT(OUT) :: status
892 CALL gauxc_delete(status%status, basis%basis)
893 gauxc_return_if_error(status)
897 cpabort(no_gauxc_message)
899 END SUBROUTINE gauxc_destroy_basisset
906 SUBROUTINE gauxc_destroy_grid(grid_result, status)
907 TYPE(cp_gauxc_grid_type),
INTENT(INOUT) :: grid_result
908 TYPE(cp_gauxc_status_type),
INTENT(OUT) :: status
911 CALL gauxc_delete(status%status, grid_result%mw)
912 gauxc_return_if_error(status)
913 CALL gauxc_delete(status%status, grid_result%mwf)
914 gauxc_return_if_error(status)
915 CALL gauxc_delete(status%status, grid_result%lb)
916 gauxc_return_if_error(status)
917 CALL gauxc_delete(status%status, grid_result%lbf)
918 gauxc_return_if_error(status)
919 CALL gauxc_delete(status%status, grid_result%grid)
920 gauxc_return_if_error(status)
921 IF (grid_result%owns_rt)
THEN
922 CALL gauxc_runtime_environment_delete(status%status, grid_result%rt)
923 gauxc_return_if_error(status)
924 grid_result%owns_rt = .false.
927 mark_used(grid_result)
929 cpabort(no_gauxc_message)
931 END SUBROUTINE gauxc_destroy_grid
938 SUBROUTINE gauxc_destroy_integrator(integrator_result, status)
939 TYPE(cp_gauxc_integrator_type),
INTENT(INOUT) :: integrator_result
940 TYPE(cp_gauxc_status_type),
INTENT(OUT) :: status
943 CALL gauxc_delete(status%status, integrator_result%integrator)
944 gauxc_return_if_error(status)
945 CALL gauxc_delete(status%status, integrator_result%func)
946 gauxc_return_if_error(status)
948 mark_used(integrator_result)
950 cpabort(no_gauxc_message)
952 END SUBROUTINE gauxc_destroy_integrator
958 SUBROUTINE gauxc_check_status(status)
959 TYPE(cp_gauxc_status_type),
INTENT(IN) :: status
962 IF (status%status%code /= 0)
THEN
964 cpabort(
"GauXC returned with non-zero status code")
969 END SUBROUTINE gauxc_check_status
982 PURE FUNCTION read_execution_space(spec)
RESULT(val)
983 CHARACTER(len=*),
INTENT(IN) :: spec
984 INTEGER(c_int) :: val
986 CHARACTER(len=LEN(spec)) :: spec_upper
991 SELECT CASE (spec_upper)
993 val = gauxc_executionspace%host
995 val = gauxc_executionspace%device
997 val = gauxc_executionspace%host
999 END FUNCTION read_execution_space
1006 PURE FUNCTION read_atomic_grid_size(spec)
RESULT(val)
1007 CHARACTER(len=*),
INTENT(IN) :: spec
1008 INTEGER(c_int) :: val
1010 CHARACTER(len=LEN(spec)) :: spec_upper
1015 SELECT CASE (spec_upper)
1017 val = gauxc_atomicgridsizedefault%finegrid
1019 val = gauxc_atomicgridsizedefault%ultrafinegrid
1021 val = gauxc_atomicgridsizedefault%superfinegrid
1023 val = gauxc_atomicgridsizedefault%gm3
1025 val = gauxc_atomicgridsizedefault%gm5
1027 val = gauxc_atomicgridsizedefault%finegrid
1029 END FUNCTION read_atomic_grid_size
1036 PURE FUNCTION read_radial_quad(spec)
RESULT(val)
1037 CHARACTER(len=*),
INTENT(IN) :: spec
1038 INTEGER(c_int) :: val
1040 CHARACTER(len=LEN(spec)) :: spec_upper
1045 SELECT CASE (spec_upper)
1047 val = gauxc_radialquad%becke
1048 CASE (
"MURAKNOWLES")
1049 val = gauxc_radialquad%mura_knowles
1050 CASE (
"TREUTLERAHLRICHS")
1051 val = gauxc_radialquad%treutler_ahlrichs
1052 CASE (
"MURRAYHANDYLAMING")
1053 val = gauxc_radialquad%murray_handy_laming
1055 val = gauxc_radialquad%mura_knowles
1057 END FUNCTION read_radial_quad
1064 PURE FUNCTION read_pruning_scheme(spec)
RESULT(val)
1065 CHARACTER(len=*),
INTENT(IN) :: spec
1066 INTEGER(c_int) :: val
1068 CHARACTER(len=LEN(spec)) :: spec_upper
1073 SELECT CASE (spec_upper)
1075 val = gauxc_pruningscheme%unpruned
1077 val = gauxc_pruningscheme%robust
1079 val = gauxc_pruningscheme%treutler
1081 val = gauxc_pruningscheme%robust
1083 END FUNCTION read_pruning_scheme
1087END MODULE xc_gauxc_interface
Define the atomic kind types and their sub types.
subroutine, public get_atomic_kind_set(atomic_kind_set, atom_of_kind, kind_of, natom_of_kind, maxatom, natom, nshell, fist_potential_present, shell_present, shell_adiabatic, shell_check_distance, damping_present)
Get attributes of an atomic kind set.
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.
subroutine, public write_gto_basis_set(gto_basis_set, output_unit, header)
Write a Gaussian-type orbital (GTO) basis set data set to the output unit.
Provides integrator routines (velocity verlet) for all the ensemble types.
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
integer, parameter, public default_path_length
Define the data structure for the particle information.
Periodic Table related data definitions.
subroutine, public get_ptable_info(symbol, number, amass, ielement, covalent_radius, metallic_radius, vdw_radius, found)
Pass information about the kind given the element symbol.
Definition of physical constants:
real(kind=dp), parameter, public bohr
Some utility functions for the calculation of integrals.
subroutine, public basis_set_list_setup(basis_set_list, basis_type, qs_kind_set)
Set up an easy accessible list of the basis sets for all kinds.
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.
Utilities for string manipulations.
elemental subroutine, public uppercase(string)
Convert all lower case characters in a string to upper case.
Provides all information about an atomic kind.
Provides all information about a quickstep kind.
subroutine print_gauxc_status_message(status)
...