43#include "./base/base_uses.f90"
51 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'lri_environment_init'
69 REAL(kind=
dp),
DIMENSION(:),
POINTER :: radii
78 l_val=lri_env%statistics)
81 l_val=lri_env%exact_1c_terms)
90 l_val=lri_env%use_shg_integrals)
93 i_val=lri_env%lri_overlap_inv)
95 r_val=lri_env%cond_max)
98 r_val=lri_env%eps_o3_int)
101 c_val=lri_env%ri_sinv_app)
104 l_val=lri_env%distant_pair_approximation)
106 c_val=lri_env%distant_pair_method)
108 cpassert(
SIZE(radii) == 2)
109 cpassert(radii(2) > radii(1))
110 cpassert(radii(1) > 0.0_dp)
111 lri_env%r_in = radii(1)
112 lri_env%r_out = radii(2)
115 IF (lri_env%use_shg_integrals)
CALL cite_reference(
golze2017a)
127 CHARACTER(len=*),
INTENT(IN) :: ri_type
130 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
132 INTEGER :: i, i1, i2, iat, ikind, ip, ipgf, iset, ishell, jp, l, lmax_ikind_orb, &
133 lmax_ikind_ri, maxl_orb, maxl_ri, n1, n2, natom, nbas, nkind, nribas, nspin
134 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: kind_of
135 REAL(kind=
dp) :: gcc, rad, rai, raj, xradius, zeta
136 REAL(kind=
dp),
DIMENSION(:),
POINTER :: int_aux, norm
142 CALL get_qs_env(qs_env=qs_env, atomic_kind_set=atomic_kind_set)
143 nkind =
SIZE(atomic_kind_set)
144 ALLOCATE (lri_env%orb_basis(nkind), lri_env%ri_basis(nkind))
148 NULLIFY (orb_basis_set, ri_basis_set)
149 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set, basis_type=
"ORB")
150 IF (ri_type ==
"LRI")
THEN
151 CALL get_qs_kind(qs_kind_set(ikind), basis_set=ri_basis_set, basis_type=
"LRI_AUX")
152 ELSE IF (ri_type ==
"P_LRI")
THEN
153 CALL get_qs_kind(qs_kind_set(ikind), basis_set=ri_basis_set, basis_type=
"P_LRI_AUX")
154 ELSE IF (ri_type ==
"RI")
THEN
155 CALL get_qs_kind(qs_kind_set(ikind), basis_set=ri_basis_set, basis_type=
"RI_HXC")
159 NULLIFY (lri_env%orb_basis(ikind)%gto_basis_set)
160 NULLIFY (lri_env%ri_basis(ikind)%gto_basis_set)
161 IF (
ASSOCIATED(orb_basis_set))
THEN
165 lmax_ikind_orb = maxval(lri_env%orb_basis(ikind)%gto_basis_set%lmax)
166 lmax_ikind_ri = maxval(lri_env%ri_basis(ikind)%gto_basis_set%lmax)
167 maxl_orb = max(maxl_orb, lmax_ikind_orb)
168 maxl_ri = max(maxl_ri, lmax_ikind_ri)
171 IF ((ri_type ==
"LRI") .OR. (ri_type ==
"P_LRI"))
THEN
173 IF (
ASSOCIATED(lri_env%cg_shg))
THEN
175 lri_env%cg_shg%cg_none0_list, &
176 lri_env%cg_shg%ncg_none0, &
181 IF (lri_env%distant_pair_approximation)
THEN
183 SELECT CASE (lri_env%distant_pair_method)
187 ALLOCATE (lri_env%aradius(nkind))
189 orb_basis_set => lri_env%orb_basis(i)%gto_basis_set
190 lri_env%aradius(i) = orb_basis_set%kind_radius
193 ALLOCATE (lri_env%wbas(nkind))
195 orb_basis_set => lri_env%orb_basis(i)%gto_basis_set
196 n1 = orb_basis_set%nsgf
197 ALLOCATE (lri_env%wbas(i)%vec(n1))
198 DO iset = 1, orb_basis_set%nset
199 i1 = orb_basis_set%first_sgf(1, iset)
200 n2 = orb_basis_set%nshell(iset)
201 i2 = orb_basis_set%last_sgf(n2, iset)
202 lri_env%wbas(i)%vec(i1:i2) = orb_basis_set%set_radius(iset)
206 ALLOCATE (lri_env%wbas(nkind))
208 orb_basis_set => lri_env%orb_basis(i)%gto_basis_set
209 n1 = orb_basis_set%nsgf
210 ALLOCATE (lri_env%wbas(i)%vec(n1))
211 DO iset = 1, orb_basis_set%nset
212 DO ishell = 1, orb_basis_set%nshell(iset)
213 i1 = orb_basis_set%first_sgf(ishell, iset)
214 i2 = orb_basis_set%last_sgf(ishell, iset)
215 l = orb_basis_set%l(ishell, iset)
217 DO ipgf = 1, orb_basis_set%npgf(iset)
218 gcc = orb_basis_set%gcc(ipgf, ishell, iset)
219 zeta = orb_basis_set%zet(ipgf, iset)
220 rad =
exp_radius(l, zeta, 1.e-5_dp, gcc, rlow=xradius)
221 xradius = max(xradius, rad)
223 lri_env%wbas(i)%vec(i1:i2) = xradius
228 cpabort(
"Unknown DISTANT_PAIR_METHOD in LRI")
231 ALLOCATE (lri_env%wmat(nkind, nkind))
232 SELECT CASE (lri_env%distant_pair_method)
236 n1 = lri_env%orb_basis(i1)%gto_basis_set%nsgf
238 n2 = lri_env%orb_basis(i2)%gto_basis_set%nsgf
239 ALLOCATE (lri_env%wmat(i1, i2)%mat(n1, n2))
240 lri_env%wmat(i1, i2)%mat(:, :) = 0.5_dp
245 n1 = lri_env%orb_basis(i1)%gto_basis_set%nsgf
247 n2 = lri_env%orb_basis(i2)%gto_basis_set%nsgf
248 ALLOCATE (lri_env%wmat(i1, i2)%mat(n1, n2))
249 rai = lri_env%aradius(i1)**2
250 raj = lri_env%aradius(i2)**2
252 lri_env%wmat(i1, i2)%mat(:, :) = 1.0_dp
254 lri_env%wmat(i1, i2)%mat(:, :) = 0.0_dp
260 n1 = lri_env%orb_basis(i1)%gto_basis_set%nsgf
262 n2 = lri_env%orb_basis(i2)%gto_basis_set%nsgf
263 ALLOCATE (lri_env%wmat(i1, i2)%mat(n1, n2))
264 DO ip = 1,
SIZE(lri_env%wbas(i1)%vec)
265 rai = lri_env%wbas(i1)%vec(ip)**2
266 DO jp = 1,
SIZE(lri_env%wbas(i2)%vec)
267 raj = lri_env%wbas(i2)%vec(jp)**2
269 lri_env%wmat(i1, i2)%mat(ip, jp) = 1.0_dp
271 lri_env%wmat(i1, i2)%mat(ip, jp) = 0.0_dp
279 ELSE IF (ri_type ==
"RI")
THEN
280 ALLOCATE (lri_env%ri_fit)
281 NULLIFY (lri_env%ri_fit%nvec)
282 NULLIFY (lri_env%ri_fit%bas_ptr)
285 ALLOCATE (lri_env%ri_fit%bas_ptr(2, natom))
286 ALLOCATE (kind_of(natom))
291 nribas = lri_env%ri_basis(ikind)%gto_basis_set%nsgf
292 lri_env%ri_fit%bas_ptr(1, iat) = nbas + 1
293 lri_env%ri_fit%bas_ptr(2, iat) = nbas + nribas
297 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
298 nspin = dft_control%nspins
299 ALLOCATE (lri_env%ri_fit%tvec(nbas, nspin), lri_env%ri_fit%rm1t(nbas, nspin))
301 ALLOCATE (lri_env%ri_fit%avec(nbas, nspin))
303 ALLOCATE (lri_env%ri_fit%fout(nbas, nspin))
305 NULLIFY (norm, int_aux)
306 nbas = lri_env%ri_fit%bas_ptr(2, natom)
307 ALLOCATE (lri_env%ri_fit%nvec(nbas), lri_env%ri_fit%rm1n(nbas))
310 IF (ikind /= kind_of(iat))
THEN
312 ri_basis_set => lri_env%ri_basis(ikind)%gto_basis_set
313 IF (
ASSOCIATED(norm))
DEALLOCATE (norm)
314 IF (
ASSOCIATED(int_aux))
DEALLOCATE (int_aux)
315 CALL basis_norm_s_func(ri_basis_set, norm)
316 CALL basis_int(ri_basis_set, int_aux, norm)
319 i1 = lri_env%ri_fit%bas_ptr(1, iat)
320 i2 = lri_env%ri_fit%bas_ptr(2, iat)
321 lri_env%ri_fit%nvec(i1:i2) = int_aux(1:nbas)
323 IF (
ASSOCIATED(norm))
DEALLOCATE (norm)
324 IF (
ASSOCIATED(int_aux))
DEALLOCATE (int_aux)
340 INTEGER :: ikind, nkind
341 INTEGER,
DIMENSION(:, :, :),
POINTER :: orb_index, ri_index
342 REAL(kind=
dp) :: delta
343 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :, :) :: dovlp3
344 REAL(kind=
dp),
DIMENSION(:),
POINTER :: orb_norm_r, ri_int_fbas, ri_norm_r, &
346 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: orb_ovlp, ri_ovlp, ri_ovlp_inv
347 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: scon_orb, scon_ri
348 REAL(kind=
dp),
DIMENSION(:, :, :, :),
POINTER :: scon_mix
351 IF (
ASSOCIATED(lri_env))
THEN
352 IF (
ASSOCIATED(lri_env%orb_basis))
THEN
353 cpassert(
ASSOCIATED(lri_env%ri_basis))
354 nkind =
SIZE(lri_env%orb_basis)
356 ALLOCATE (lri_env%bas_prop(nkind))
358 NULLIFY (orb_basis, ri_basis)
359 orb_basis => lri_env%orb_basis(ikind)%gto_basis_set
360 IF (
ASSOCIATED(orb_basis))
THEN
361 ri_basis => lri_env%ri_basis(ikind)%gto_basis_set
362 cpassert(
ASSOCIATED(ri_basis))
364 CALL basis_norm_radial(ri_basis, ri_norm_r)
366 CALL basis_norm_radial(orb_basis, orb_norm_r)
368 CALL basis_norm_s_func(ri_basis, ri_norm_s)
369 NULLIFY (ri_int_fbas)
370 CALL basis_int(ri_basis, ri_int_fbas, ri_norm_s)
371 lri_env%bas_prop(ikind)%int_fbas => ri_int_fbas
373 CALL basis_ovlp(ri_basis, ri_ovlp, ri_norm_r)
374 lri_env%bas_prop(ikind)%ri_ovlp => ri_ovlp
376 CALL basis_ovlp(orb_basis, orb_ovlp, orb_norm_r)
377 lri_env%bas_prop(ikind)%orb_ovlp => orb_ovlp
380 lri_env%bas_prop(ikind)%scon_ri => scon_ri
383 lri_env%bas_prop(ikind)%scon_orb => scon_orb
386 orb_index, ri_index, scon_mix)
387 lri_env%bas_prop(ikind)%scon_mix => scon_mix
388 lri_env%bas_prop(ikind)%orb_index => orb_index
389 lri_env%bas_prop(ikind)%ri_index => ri_index
390 ALLOCATE (lri_env%bas_prop(ikind)%ovlp3(orb_basis%nsgf, orb_basis%nsgf, ri_basis%nsgf))
391 ALLOCATE (dovlp3(orb_basis%nsgf, orb_basis%nsgf, ri_basis%nsgf, 3))
392 CALL int_overlap_aba_shg(lri_env%bas_prop(ikind)%ovlp3, dovlp3, (/0.0_dp, 0.0_dp, 0.0_dp/), &
393 orb_basis, orb_basis, ri_basis, scon_orb, &
394 scon_mix, orb_index, ri_index, &
395 lri_env%cg_shg%cg_coeff, &
396 lri_env%cg_shg%cg_none0_list, &
397 lri_env%cg_shg%ncg_none0, &
398 calculate_forces=.false.)
399 DEALLOCATE (orb_norm_r, ri_norm_r, ri_norm_s)
401 ALLOCATE (ri_ovlp_inv(ri_basis%nsgf, ri_basis%nsgf))
402 CALL invert_matrix(ri_ovlp, ri_ovlp_inv, delta, improve=.true.)
403 lri_env%bas_prop(ikind)%ri_ovlp_inv => ri_ovlp_inv
417 SUBROUTINE basis_norm_s_func(basis, norm)
420 REAL(
dp),
DIMENSION(:),
POINTER :: norm
422 INTEGER :: ipgf, iset, isgf, ishell, jpgf, l, nbas
423 REAL(kind=
dp) :: aai, aaj, cci, ccj, expa, ppl
428 ALLOCATE (norm(nbas))
431 DO iset = 1, basis%nset
432 DO ishell = 1, basis%nshell(iset)
433 l = basis%l(ishell, iset)
435 expa = 0.5_dp*real(2*l + 3,
dp)
436 ppl =
pi**(3._dp/2._dp)
437 DO isgf = basis%first_sgf(ishell, iset), basis%last_sgf(ishell, iset)
438 DO ipgf = 1, basis%npgf(iset)
439 cci = basis%gcc(ipgf, ishell, iset)
440 aai = basis%zet(ipgf, iset)
441 DO jpgf = 1, basis%npgf(iset)
442 ccj = basis%gcc(jpgf, ishell, iset)
443 aaj = basis%zet(jpgf, iset)
444 norm(isgf) = norm(isgf) + cci*ccj*ppl/(aai + aaj)**expa
447 norm(isgf) = 1.0_dp/sqrt(norm(isgf))
452 END SUBROUTINE basis_norm_s_func
460 SUBROUTINE basis_norm_radial(basis, norm)
463 REAL(
dp),
DIMENSION(:),
POINTER :: norm
465 INTEGER :: ipgf, iset, isgf, ishell, jpgf, l, nbas
466 REAL(kind=
dp) :: aai, aaj, cci, ccj, expa, ppl
471 ALLOCATE (norm(nbas))
474 DO iset = 1, basis%nset
475 DO ishell = 1, basis%nshell(iset)
476 l = basis%l(ishell, iset)
477 expa = 0.5_dp*real(2*l + 3,
dp)
479 DO isgf = basis%first_sgf(ishell, iset), basis%last_sgf(ishell, iset)
480 DO ipgf = 1, basis%npgf(iset)
481 cci = basis%gcc(ipgf, ishell, iset)
482 aai = basis%zet(ipgf, iset)
483 DO jpgf = 1, basis%npgf(iset)
484 ccj = basis%gcc(jpgf, ishell, iset)
485 aaj = basis%zet(jpgf, iset)
486 norm(isgf) = norm(isgf) + cci*ccj*ppl/(aai + aaj)**expa
489 norm(isgf) = 1.0_dp/sqrt(norm(isgf))
494 END SUBROUTINE basis_norm_radial
503 SUBROUTINE basis_int(basis, int_aux, norm)
506 REAL(
dp),
DIMENSION(:),
POINTER :: int_aux, norm
508 INTEGER :: ipgf, iset, isgf, ishell, l, nbas
509 REAL(kind=
dp) :: aa, cc, pp
512 ALLOCATE (int_aux(nbas))
515 DO iset = 1, basis%nset
516 DO ishell = 1, basis%nshell(iset)
517 l = basis%l(ishell, iset)
519 DO isgf = basis%first_sgf(ishell, iset), basis%last_sgf(ishell, iset)
520 DO ipgf = 1, basis%npgf(iset)
521 cc = basis%gcc(ipgf, ishell, iset)
522 aa = basis%zet(ipgf, iset)
523 pp = (
pi/aa)**(3._dp/2._dp)
524 int_aux(isgf) = int_aux(isgf) + norm(isgf)*cc*pp
530 END SUBROUTINE basis_int
541 SUBROUTINE basis_ovlp(basis, ovlp, norm)
544 REAL(
dp),
DIMENSION(:, :),
POINTER :: ovlp
545 REAL(
dp),
DIMENSION(:),
POINTER :: norm
547 INTEGER :: ipgf, iset, isgf, ishell, jpgf, jset, &
548 jsgf, jshell, l, li, lj, m_i, m_j, nbas
549 REAL(kind=
dp) :: aai, aaj, cci, ccj, expa, norm_i, &
553 ALLOCATE (ovlp(nbas, nbas))
556 DO iset = 1, basis%nset
557 DO ishell = 1, basis%nshell(iset)
558 li = basis%l(ishell, iset)
559 DO jset = 1, basis%nset
560 DO jshell = 1, basis%nshell(jset)
561 lj = basis%l(jshell, jset)
564 expa = 0.5_dp*real(2*l + 3,
dp)
566 DO isgf = basis%first_sgf(ishell, iset), basis%last_sgf(ishell, iset)
568 DO jsgf = basis%first_sgf(jshell, jset), basis%last_sgf(jshell, jset)
571 DO ipgf = 1, basis%npgf(iset)
572 cci = basis%gcc(ipgf, ishell, iset)
573 aai = basis%zet(ipgf, iset)
575 DO jpgf = 1, basis%npgf(jset)
576 ccj = basis%gcc(jpgf, jshell, jset)
577 aaj = basis%zet(jpgf, jset)
578 oo = 1._dp/(aai + aaj)**expa
580 ovlp(isgf, jsgf) = ovlp(isgf, jsgf) + norm_i*norm_j*ppl*cci*ccj*oo
592 END SUBROUTINE basis_ovlp
All kind of helpful little routines.
real(kind=dp) function, public exp_radius(l, alpha, threshold, prefactor, epsabs, epsrel, rlow)
The radius of a primitive Gaussian function for a given threshold is calculated. g(r) = prefactor*r**...
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 copy_gto_basis_set(basis_set_in, basis_set_out)
...
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public golze2017b
integer, save, public golze2017a
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
Initialization for solid harmonic Gaussian (SHG) integral scheme. Scheme for calculation of contracte...
subroutine, public contraction_matrix_shg_mix(orb_basis, ri_basis, orb_index, ri_index, scon_mix)
mixed contraction matrix for SHG integrals [aba] and [abb] for orbital and ri basis at the same atom
subroutine, public contraction_matrix_shg(basis, scon_shg)
contraction matrix for SHG integrals
subroutine, public get_clebsch_gordon_coefficients(my_cg, cg_none0_list, ncg_none0, maxl1, maxl2)
calculate the Clebsch-Gordon (CG) coefficients for expansion of the product of two spherical harmonic...
Calculation of contracted, spherical Gaussian integrals using the solid harmonic Gaussian (SHG) integ...
subroutine, public int_overlap_aba_shg(saba, dsaba, rab, oba, obb, fba, scon_obb, scona_mix, oba_index, fba_index, cg_coeff, cg_none0_list, ncg_none0, calculate_forces)
calculate integrals (a,b,fa)
Defines the basic variable types.
integer, parameter, public dp
initializes the environment for lri lri : local resolution of the identity
subroutine, public lri_basis_init(lri_env)
initializes the lri basis: calculates the norm, self-overlap and integral of the ri basis
subroutine, public lri_env_init(lri_env, lri_section)
initializes the lri env
subroutine, public lri_env_basis(ri_type, qs_env, lri_env, qs_kind_set)
initializes the lri env
contains the types and subroutines for dealing with the lri_env lri : local resolution of the identit...
subroutine, public deallocate_bas_properties(lri_env)
deallocates one-center overlap integrals, integral of ri basis and scon matrices
subroutine, public lri_env_create(lri_env)
creates and initializes an lri_env
Definition of mathematical constants and functions.
real(kind=dp), parameter, public pi
real(kind=dp), parameter, public rootpi
real(kind=dp), dimension(0:maxfac), parameter, public fac
Collection of simple mathematical functions and subroutines.
subroutine, public get_qs_env(qs_env, atomic_kind_set, qs_kind_set, cell, super_cell, cell_ref, use_ref_cell, kpoints, dft_control, mos, sab_orb, sab_all, qmmm, qmmm_periodic, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, ecoul_1c, rho0_s_rs, rho0_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, harris_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs)
Get the QUICKSTEP environment.
Define the quickstep kind type and their sub types.
subroutine, public get_qs_kind(qs_kind, basis_set, basis_type, ncgf, nsgf, all_potential, tnadd_potential, gth_potential, sgp_potential, upf_potential, se_parameter, dftb_parameter, xtb_parameter, dftb3_param, zatom, zeff, elec_conf, mao, lmax_dftb, alpha_core_charge, ccore_charge, core_charge, core_charge_radius, paw_proj_set, paw_atom, hard_radius, hard0_radius, max_rad_local, covalent_radius, vdw_radius, gpw_type_forced, harmonics, max_iso_not0, max_s_harm, grid_atom, ngrid_ang, ngrid_rad, lmax_rho0, dft_plus_u_atom, l_of_dft_plus_u, n_of_dft_plus_u, u_minus_j, u_of_dft_plus_u, j_of_dft_plus_u, alpha_of_dft_plus_u, beta_of_dft_plus_u, j0_of_dft_plus_u, occupation_of_dft_plus_u, dispersion, bs_occupation, magnetization, no_optimize, addel, laddel, naddel, orbitals, max_scf, eps_scf, smear, u_ramping, u_minus_j_target, eps_u_ramping, init_u_ramping_each_scf, reltmat, ghost, floating, name, element_symbol, pao_basis_size, pao_model_file, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
Provides all information about an atomic kind.
Provides all information about a quickstep kind.