81 CHARACTER(len=*),
PARAMETER :: routinen =
'init_interaction_radii'
83 INTEGER :: handle, i, iexp_ppl, ikind, ip, iprj_ppnl, j, l, lppl, lppnl, lppsl, lprj, &
84 lprj_ppnl, maxl, n_local, nexp_lpot, nexp_lsd, nexp_ppl, nkind, nloc
85 INTEGER,
DIMENSION(0:10) :: npot
86 INTEGER,
DIMENSION(1:10) :: nrloc
87 INTEGER,
DIMENSION(1:15, 0:10) :: nrpot
88 INTEGER,
DIMENSION(:),
POINTER :: nct_lpot, nct_lsd, nprj, nprj_ppnl
89 LOGICAL :: ecp_local, ecp_semi_local, llsd, lpot, &
91 LOGICAL,
DIMENSION(0:5) :: is_nonlocal
92 REAL(kind=
dp) :: alpha_core_charge, alpha_ppl, ccore_charge, cerf_ppl, core_charge_radius, &
93 cval, ppl_radius, ppnl_radius, rcprj, zeta
94 REAL(kind=
dp),
DIMENSION(1:10) :: aloc, bloc
95 REAL(kind=
dp),
DIMENSION(1:15, 0:10) :: apot, bpot
96 REAL(kind=
dp),
DIMENSION(:),
POINTER :: a_local, a_nonlocal, alpha_lpot, &
97 alpha_lsd, alpha_ppnl, c_local, &
99 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: cprj_ppnl, cval_lpot, cval_lsd, rzetprj, &
101 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: c_nonlocal
107 nuc_basis_set, orb_basis_set, p_lri_basis, rhoin_basis, ri_aux_basis_set, ri_basis, &
108 ri_xas_basis, soft_basis, tda_k_basis
112 CALL timeset(routinen, handle)
114 NULLIFY (all_potential, gth_potential, sgp_potential, cneo_potential)
115 NULLIFY (
aux_basis_set, aux_fit_basis_set, aux_gw_basis, tda_k_basis, &
116 harris_basis, lri_basis,
mao_basis, orb_basis_set, p_lri_basis, ri_aux_basis_set, &
117 ri_basis, ri_xas_basis, soft_basis, gapw_1c_basis, aux_opt_basis_set,
min_basis_set, &
119 NULLIFY (nprj_ppnl, nprj)
120 NULLIFY (alpha_ppnl, cexp_ppl, cprj_ppnl, zet)
122 nkind =
SIZE(qs_kind_set)
127 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set, basis_type=
"ORB")
130 CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_fit_basis_set, basis_type=
"AUX_FIT")
131 CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_opt_basis_set, basis_type=
"AUX_OPT")
132 CALL get_qs_kind(qs_kind_set(ikind), basis_set=lri_basis, basis_type=
"LRI_AUX")
133 CALL get_qs_kind(qs_kind_set(ikind), basis_set=p_lri_basis, basis_type=
"P_LRI_AUX")
134 CALL get_qs_kind(qs_kind_set(ikind), basis_set=ri_basis, basis_type=
"RI_HXC")
135 CALL get_qs_kind(qs_kind_set(ikind), basis_set=ri_aux_basis_set, basis_type=
"RI_AUX")
137 CALL get_qs_kind(qs_kind_set(ikind), basis_set=harris_basis, basis_type=
"HARRIS")
138 CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_gw_basis, basis_type=
"AUX_GW")
139 CALL get_qs_kind(qs_kind_set(ikind), basis_set=ri_xas_basis, basis_type=
"RI_XAS")
140 CALL get_qs_kind(qs_kind_set(ikind), basis_set=soft_basis, basis_type=
"ORB_SOFT")
141 CALL get_qs_kind(qs_kind_set(ikind), basis_set=gapw_1c_basis, basis_type=
"GAPW_1C")
142 CALL get_qs_kind(qs_kind_set(ikind), basis_set=tda_k_basis, basis_type=
"TDA_HFX")
143 CALL get_qs_kind(qs_kind_set(ikind), basis_set=rhoin_basis, basis_type=
"RHOIN")
144 CALL get_qs_kind(qs_kind_set(ikind), basis_set=nuc_basis_set, basis_type=
"NUC")
146 paw_proj_set=paw_proj_set, &
148 all_potential=all_potential, &
149 gth_potential=gth_potential, &
150 sgp_potential=sgp_potential, &
151 cneo_potential=cneo_potential)
157 IF (
ASSOCIATED(orb_basis_set))
THEN
159 qs_control%eps_kg_orb)
162 IF (
ASSOCIATED(all_potential))
THEN
165 alpha_core_charge=alpha_core_charge, &
166 ccore_charge=ccore_charge)
170 core_charge_radius =
exp_radius(0, alpha_core_charge, &
171 qs_control%eps_core_charge, &
175 core_charge_radius=core_charge_radius)
177 ELSE IF (
ASSOCIATED(gth_potential))
THEN
180 alpha_core_charge=alpha_core_charge, &
181 ccore_charge=ccore_charge, &
182 alpha_ppl=alpha_ppl, &
189 alpha_ppnl=alpha_ppnl, &
190 nprj_ppnl=nprj_ppnl, &
194 core_charge_radius =
exp_radius(0, alpha_core_charge, &
195 qs_control%eps_core_charge, &
200 ppl_radius =
exp_radius(0, alpha_ppl, qs_control%eps_ppl, cerf_ppl)
202 DO iexp_ppl = 1, nexp_ppl
203 lppl = 2*(iexp_ppl - 1)
204 ppl_radius = max(ppl_radius, &
206 qs_control%eps_ppl, &
207 cexp_ppl(iexp_ppl), &
213 nexp_lpot=nexp_lpot, &
214 alpha_lpot=alpha_lpot, &
218 DO i = 1, nct_lpot(j)
220 ppl_radius = max(ppl_radius, &
221 exp_radius(lppl, alpha_lpot(j), qs_control%eps_ppl, &
222 cval_lpot(i, j), rlow=ppl_radius))
230 alpha_lsd=alpha_lsd, &
236 ppl_radius = max(ppl_radius, &
237 exp_radius(lppl, alpha_lsd(j), qs_control%eps_ppl, &
238 cval_lsd(i, j), rlow=ppl_radius))
247 DO iprj_ppnl = 1, nprj_ppnl(l)
248 lprj_ppnl = l + 2*(iprj_ppnl - 1)
249 ppnl_radius = max(ppnl_radius, &
251 qs_control%eps_pgf_orb, &
252 cprj_ppnl(iprj_ppnl, l), &
257 core_charge_radius=core_charge_radius, &
258 ppl_radius=ppl_radius, &
259 ppnl_radius=ppnl_radius)
261 ELSE IF (
ASSOCIATED(sgp_potential))
THEN
265 alpha_core_charge=alpha_core_charge, &
266 ccore_charge=ccore_charge)
267 core_charge_radius =
exp_radius(0, alpha_core_charge, &
268 qs_control%eps_core_charge, &
271 ppl_radius = core_charge_radius
272 CALL get_potential(potential=sgp_potential, ecp_local=ecp_local)
273 IF (
ALLOCATED(sgp_potential%upf_data))
THEN
274 IF (sgp_potential%upf_local%radial%degree < 0 .OR. &
275 sgp_potential%upf_local%eps /= qs_control%eps_ppl)
THEN
277 max(0, sgp_potential%upf_local%radial%degree), &
278 sgp_potential%upf_local, qs_control%eps_ppl)
280 ppl_radius = max(ppl_radius, sgp_potential%upf_local%radial%radius)
281 ELSE IF (ecp_local)
THEN
282 CALL get_potential(potential=sgp_potential, nloc=nloc, nrloc=nrloc, aloc=aloc, bloc=bloc)
284 lppl = max(0, nrloc(i) - 2)
285 ppl_radius = max(ppl_radius, &
286 exp_radius(lppl, bloc(i), qs_control%eps_ppl, aloc(i), rlow=ppl_radius))
289 CALL get_potential(potential=sgp_potential, n_local=n_local, a_local=a_local, c_local=c_local)
291 ppl_radius = max(ppl_radius, &
292 exp_radius(0, a_local(i), qs_control%eps_ppl, c_local(i), rlow=ppl_radius))
296 CALL get_potential(potential=sgp_potential, ecp_semi_local=ecp_semi_local)
297 IF (ecp_semi_local)
THEN
298 CALL get_potential(potential=sgp_potential, sl_lmax=lppsl, npot=npot, nrpot=nrpot, &
299 apot=apot, bpot=bpot)
302 lppl = max(0, nrpot(i, l) - 2)
303 ppl_radius = max(ppl_radius, &
304 exp_radius(lppl, bpot(i, l), qs_control%eps_ppl, apot(i, l), &
311 CALL get_potential(potential=sgp_potential, lmax=lppnl, n_nonlocal=nloc)
312 CALL get_potential(potential=sgp_potential, is_nonlocal=is_nonlocal, &
313 a_nonlocal=a_nonlocal, c_nonlocal=c_nonlocal)
314 IF (
ALLOCATED(sgp_potential%upf_data))
THEN
315 ppnl_radius = sgp_potential%upf_projectors%radius
318 IF (is_nonlocal(l))
THEN
322 cval = sqrt(real(2*l + 1,
dp))*maxval(abs(c_nonlocal(i, :, l)))
323 ppnl_radius = max(ppnl_radius, &
324 exp_radius(l, a_nonlocal(i), qs_control%eps_pgf_orb, cval, rlow=ppnl_radius))
330 core_charge_radius=core_charge_radius, &
331 ppl_radius=ppl_radius, &
332 ppnl_radius=ppnl_radius)
334 ELSE IF (
ASSOCIATED(cneo_potential))
THEN
336 IF (
ASSOCIATED(nuc_basis_set))
THEN
338 sqrt(cneo_potential%zeff))
344 IF (
ASSOCIATED(aux_fit_basis_set))
THEN
346 qs_control%eps_kg_orb)
350 IF (
ASSOCIATED(aux_opt_basis_set))
THEN
365 IF (
ASSOCIATED(ri_aux_basis_set))
THEN
375 IF (
ASSOCIATED(harris_basis))
THEN
380 IF (
ASSOCIATED(aux_gw_basis))
THEN
385 IF (
ASSOCIATED(soft_basis))
THEN
390 IF (
ASSOCIATED(gapw_1c_basis))
THEN
395 IF (
ASSOCIATED(tda_k_basis))
THEN
400 IF (
ASSOCIATED(lri_basis))
THEN
403 IF (
ASSOCIATED(ri_basis))
THEN
406 IF (
ASSOCIATED(ri_xas_basis))
THEN
409 IF (
ASSOCIATED(p_lri_basis))
THEN
414 IF (
ASSOCIATED(rhoin_basis))
THEN
419 IF (
ASSOCIATED(paw_proj_set))
THEN
428 DO ip = 1, nprj(lprj)
430 rzetprj(ip, lprj) = max(rzetprj(ip, lprj), &
431 exp_radius(lprj, zeta, qs_control%eps_pgf_orb, &
432 1.0_dp, rlow=rzetprj(ip, lprj)))
433 rcprj = max(rcprj, rzetprj(ip, lprj))
443 CALL timestop(handle)
687 CHARACTER(len=*) :: basis
689 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
692 CHARACTER(LEN=10) :: bas
693 CHARACTER(LEN=default_string_length) :: name, unit_str
694 INTEGER :: ikind, ipgf, iset, nkind, nset, &
696 INTEGER,
DIMENSION(:),
POINTER :: npgf
697 REAL(kind=
dp) :: conv, kind_radius, short_kind_radius
698 REAL(kind=
dp),
DIMENSION(:),
POINTER :: set_radius
699 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: pgf_radius
702 nuc_basis_set, orb_basis_set
706 NULLIFY (
aux_basis_set, orb_basis_set, lri_basis_set, nuc_basis_set)
708 bas(1:3) = basis(1:3)
710 IF (bas(1:3) ==
"ORB")
THEN
712 ELSE IF (bas(1:3) ==
"AUX")
THEN
714 ELSE IF (bas(1:3) ==
"LRI")
THEN
716 ELSE IF (bas(1:3) ==
"NUC")
THEN
719 cpabort(
"Undefined basis set type")
722 nkind =
SIZE(qs_kind_set)
726 "PRINT%RADII/KIND_RADII", extension=
".Log")
729 IF (output_unit > 0)
THEN
730 WRITE (unit=output_unit, fmt=
"(/,T2,A,T46,A,T53,A,T63,A,T71,A)") &
731 "RADII: "//trim(bas)//
" BASIS in "//trim(unit_str), &
732 "Kind",
"Label",
"Radius",
"OCE Radius"
735 IF (bas(1:3) ==
"ORB")
THEN
736 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set)
737 IF (
ASSOCIATED(orb_basis_set))
THEN
739 kind_radius=kind_radius, &
740 short_kind_radius=short_kind_radius)
742 ELSE IF (bas(1:3) ==
"AUX")
THEN
746 kind_radius=kind_radius)
748 ELSE IF (bas(1:3) ==
"LOC")
THEN
749 CALL get_qs_kind(qs_kind_set(ikind), basis_set=lri_basis_set, basis_type=
"LRI_AUX")
750 IF (
ASSOCIATED(lri_basis_set))
THEN
752 kind_radius=kind_radius)
754 ELSE IF (bas(1:3) ==
"NUC")
THEN
755 CALL get_qs_kind(qs_kind_set(ikind), basis_set=nuc_basis_set, basis_type=
"NUC")
756 IF (
ASSOCIATED(nuc_basis_set))
THEN
758 kind_radius=kind_radius, &
759 short_kind_radius=short_kind_radius)
762 cpabort(
"Undefined basis set type")
764 IF (
ASSOCIATED(
aux_basis_set) .OR.
ASSOCIATED(orb_basis_set) .OR. &
765 ASSOCIATED(nuc_basis_set))
THEN
766 WRITE (unit=output_unit, fmt=
"(T45,I5,T53,A5,T57,F12.6,T69,F12.6)") &
767 ikind, name, kind_radius*conv, short_kind_radius*conv
769 WRITE (unit=output_unit, fmt=
"(T55,I5,T63,A5,T72,A9)") &
770 ikind, name,
"no basis"
775 "PRINT%RADII/KIND_RADII")
779 "PRINT%RADII/SET_RADII", extension=
".Log")
780 IF (output_unit > 0)
THEN
781 WRITE (unit=output_unit, fmt=
"(/,T2,A,T51,A,T57,A,T65,A,T75,A)") &
782 "RADII: SHELL SETS OF "//trim(bas)//
" BASIS in "// &
783 trim(unit_str),
"Kind",
"Label",
"Set",
"Radius"
786 IF (bas(1:3) ==
"ORB")
THEN
787 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set)
788 IF (
ASSOCIATED(orb_basis_set))
THEN
791 set_radius=set_radius)
793 ELSE IF (bas(1:3) ==
"AUX")
THEN
798 set_radius=set_radius)
800 ELSE IF (bas(1:3) ==
"LOC")
THEN
801 CALL get_qs_kind(qs_kind_set(ikind), basis_set=lri_basis_set, basis_type=
"LRI_AUX")
802 IF (
ASSOCIATED(lri_basis_set))
THEN
805 set_radius=set_radius)
807 ELSE IF (bas(1:3) ==
"NUC")
THEN
808 CALL get_qs_kind(qs_kind_set(ikind), basis_set=nuc_basis_set, basis_type=
"NUC")
809 IF (
ASSOCIATED(nuc_basis_set))
THEN
812 set_radius=set_radius)
815 cpabort(
"Undefined basis set type")
817 IF (
ASSOCIATED(
aux_basis_set) .OR.
ASSOCIATED(orb_basis_set) .OR. &
818 ASSOCIATED(nuc_basis_set))
THEN
819 WRITE (unit=output_unit, fmt=
"(T50,I5,T57,A5,(T63,I5,T69,F12.6))") &
820 ikind, name, (iset, set_radius(iset)*conv, iset=1, nset)
822 WRITE (unit=output_unit, fmt=
"(T50,I5,T58,A5,T73,A8)") &
823 ikind, name,
"no basis"
828 "PRINT%RADII/SET_RADII")
831 "PRINT%RADII/PGF_RADII", extension=
".Log")
832 IF (output_unit > 0)
THEN
833 WRITE (unit=output_unit, fmt=
"(/,T2,A,T51,A,T57,A,T65,A,T75,A)") &
834 "RADII: PRIMITIVE GAUSSIANS OF "//trim(bas)//
" BASIS in "// &
835 trim(unit_str),
"Kind",
"Label",
"Set",
"Radius"
838 IF (bas(1:3) ==
"ORB")
THEN
839 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set)
840 IF (
ASSOCIATED(orb_basis_set))
THEN
844 pgf_radius=pgf_radius)
846 ELSE IF (bas(1:3) ==
"AUX")
THEN
852 pgf_radius=pgf_radius)
854 ELSE IF (bas(1:3) ==
"LOC")
THEN
855 CALL get_qs_kind(qs_kind_set(ikind), basis_set=lri_basis_set, basis_type=
"LRI_AUX")
856 IF (
ASSOCIATED(lri_basis_set))
THEN
860 pgf_radius=pgf_radius)
862 ELSE IF (bas(1:3) ==
"NUC")
THEN
863 CALL get_qs_kind(qs_kind_set(ikind), basis_set=nuc_basis_set, basis_type=
"NUC")
864 IF (
ASSOCIATED(nuc_basis_set))
THEN
868 pgf_radius=pgf_radius)
871 cpabort(
"Undefined basis type")
873 IF (
ASSOCIATED(
aux_basis_set) .OR.
ASSOCIATED(orb_basis_set) .OR. &
874 ASSOCIATED(lri_basis_set) .OR.
ASSOCIATED(nuc_basis_set))
THEN
876 WRITE (unit=output_unit, fmt=
"(T50,I5,T57,A5,T63,I5,(T69,F12.6))") &
878 (pgf_radius(ipgf, iset)*conv, ipgf=1, npgf(iset))
881 WRITE (unit=output_unit, fmt=
"(T50,I5,T58,A5,T73,A8)") &
882 ikind, name,
"no basis"
887 "PRINT%RADII/PGF_RADII")
subroutine, public get_gto_basis_set(gto_basis_set, name, aliases, norm_type, kind_radius, ncgf, nset, nsgf, cgf_symbol, sgf_symbol, norm_cgf, set_radius, lmax, lmin, lx, ly, lz, m, ncgf_set, npgf, nsgf_set, nshell, cphi, pgf_radius, sphi, scon, zet, first_cgf, first_sgf, l, last_cgf, last_sgf, n, gcc, maxco, maxl, maxpgf, maxsgf_set, maxshell, maxso, nco_sum, npgf_sum, nshell_sum, maxder, short_kind_radius, npgf_seg_sum, ccon)
...
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, hund_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, proj_shell_charge, lr_atom, do_mtlr, u_j_loop, ao_coef, 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.