160 REAL(
dp),
DIMENSION(:, :, :),
POINTER :: my_cg
161 INTEGER,
INTENT(IN) :: na, llmax, maxs, max_s_harm, ll
162 REAL(
dp),
DIMENSION(:),
INTENT(IN) :: wa, azi, pol
164 CHARACTER(len=*),
PARAMETER :: routinen =
'create_harmonics_atom'
166 INTEGER :: handle, i, ia, ic, is, is1, is2, iso, &
167 iso1, iso2, l, l1, l2, lx, ly, lz, m, &
169 REAL(
dp) :: drx, dry, drz, rx, ry, rz
170 REAL(
dp),
DIMENSION(2) :: cin, dylm
171 REAL(
dp),
DIMENSION(:),
POINTER :: slm_int, y
172 REAL(
dp),
DIMENSION(:, :),
POINTER :: dc, slm
173 REAL(
dp),
DIMENSION(:, :, :),
POINTER :: dslm_dxyz
175 CALL timeset(routinen, handle)
177 NULLIFY (y, slm, dslm_dxyz, dc)
179 cpassert(
ASSOCIATED(harmonics))
181 harmonics%max_s_harm = max_s_harm
182 harmonics%llmax = llmax
185 NULLIFY (harmonics%my_CG, harmonics%my_CG_dxyz, harmonics%my_CG_dxyz_asym)
186 CALL reallocate(harmonics%my_CG, 1, maxs, 1, maxs, 1, max_s_harm)
187 CALL reallocate(harmonics%my_CG_dxyz, 1, 3, 1, maxs, 1, maxs, 1, max_s_harm)
188 CALL reallocate(harmonics%my_CG_dxyz_asym, 1, 3, 1, maxs, 1, maxs, 1, max_s_harm)
192 harmonics%my_CG(1:maxs, is1, i) = my_cg(1:maxs, is1, i)
198 NULLIFY (harmonics%slm, harmonics%dslm, harmonics%dslm_dxyz, harmonics%a, harmonics%slm_int)
199 CALL reallocate(harmonics%slm, 1, na, 1, max_s_harm)
200 CALL reallocate(harmonics%dslm, 1, 2, 1, na, 1, maxs)
201 CALL reallocate(harmonics%dslm_dxyz, 1, 3, 1, na, 1, max_s_harm)
203 CALL reallocate(harmonics%slm_int, 1, max_s_harm)
205 NULLIFY (slm, dslm_dxyz, slm_int)
207 dslm_dxyz => harmonics%dslm_dxyz
209 slm_int => harmonics%slm_int
220 DO iso = 1, max_s_harm
227 slm_int(iso) = slm_int(iso) + slm(ia, iso)*wa(ia)
245 ALLOCATE (dc(
nco(llmax), 3))
248 DO l = 0,
indso(1, max_s_harm)
257 ELSE IF (lx == 1)
THEN
267 ELSE IF (ly == 1)
THEN
277 ELSE IF (lz == 1)
THEN
284 dc(ic, 1) = drx*ry*rz
285 dc(ic, 2) = rx*dry*rz
286 dc(ic, 3) = rx*ry*drz
292 dslm_dxyz(:, ia, iso) = dslm_dxyz(:, ia, iso) + &
308 DO iso = 1, max_s_harm
314 rx = rx + wa(ia)*slm(ia, iso)* &
315 (dslm_dxyz(1, ia, iso1)*slm(ia, iso2) + slm(ia, iso1)*dslm_dxyz(1, ia, iso2))
316 ry = ry + wa(ia)*slm(ia, iso)* &
317 (dslm_dxyz(2, ia, iso1)*slm(ia, iso2) + slm(ia, iso1)*dslm_dxyz(2, ia, iso2))
318 rz = rz + wa(ia)*slm(ia, iso)* &
319 (dslm_dxyz(3, ia, iso1)*slm(ia, iso2) + slm(ia, iso1)*dslm_dxyz(3, ia, iso2))
322 harmonics%my_CG_dxyz(1, iso1, iso2, iso) = rx
323 harmonics%my_CG_dxyz(2, iso1, iso2, iso) = ry
324 harmonics%my_CG_dxyz(3, iso1, iso2, iso) = rz
339 DO iso = 1, max_s_harm
345 drx = drx + wa(ia)*slm(ia, iso)* &
346 (-dslm_dxyz(1, ia, iso1)*slm(ia, iso2) + &
347 slm(ia, iso1)*dslm_dxyz(1, ia, iso2))
348 dry = dry + wa(ia)*slm(ia, iso)* &
349 (-dslm_dxyz(2, ia, iso1)*slm(ia, iso2) + &
350 slm(ia, iso1)*dslm_dxyz(2, ia, iso2))
351 drz = drz + wa(ia)*slm(ia, iso)* &
352 (-dslm_dxyz(3, ia, iso1)*slm(ia, iso2) + &
353 slm(ia, iso1)*dslm_dxyz(3, ia, iso2))
356 harmonics%my_CG_dxyz_asym(1, iso1, iso2, iso) = drx
357 harmonics%my_CG_dxyz_asym(2, iso1, iso2, iso) = dry
358 harmonics%my_CG_dxyz_asym(3, iso1, iso2, iso) = drz
375 CALL dy_lm(cin, dylm, l, m)
376 harmonics%dslm(:, ia, iso) = dylm(:)
385 CALL timestop(handle)
400 INTEGER,
INTENT(IN) :: llmax, max_s_harm
402 CHARACTER(len=*),
PARAMETER :: routinen =
'get_maxl_CG'
404 INTEGER :: damax_iso_not0, dmax_iso_not0, handle, &
405 is1, is2, itmp, max_iso_not0, nset
406 INTEGER,
DIMENSION(:),
POINTER :: lmax, lmin
408 CALL timeset(routinen, handle)
410 cpassert(
ASSOCIATED(harmonics))
421 lmin(is1), lmax(is1), lmin(is2), lmax(is2), &
422 max_s_harm, llmax, max_iso_not0=itmp)
423 max_iso_not0 = max(max_iso_not0, itmp)
425 lmin(is1), lmax(is1), lmin(is2), lmax(is2), &
426 max_s_harm, llmax, max_iso_not0=itmp)
427 dmax_iso_not0 = max(dmax_iso_not0, itmp)
429 lmin(is1), lmax(is1), lmin(is2), lmax(is2), &
430 max_s_harm, llmax, max_iso_not0=itmp)
431 damax_iso_not0 = max(damax_iso_not0, itmp)
434 harmonics%max_iso_not0 = max_iso_not0
435 harmonics%dmax_iso_not0 = dmax_iso_not0
436 harmonics%damax_iso_not0 = damax_iso_not0
438 CALL timestop(handle)
455 SUBROUTINE get_none0_cg_list4(cgc, lmin1, lmax1, lmin2, lmax2, max_s_harm, llmax, &
456 list, n_list, max_iso_not0)
458 REAL(dp),
DIMENSION(:, :, :, :),
INTENT(IN) :: cgc
459 INTEGER,
INTENT(IN) :: lmin1, lmax1, lmin2, lmax2, max_s_harm, &
461 INTEGER,
DIMENSION(:, :, :),
INTENT(OUT),
OPTIONAL :: list
462 INTEGER,
DIMENSION(:),
INTENT(OUT),
OPTIONAL :: n_list
463 INTEGER,
INTENT(OUT) :: max_iso_not0
465 INTEGER :: iso, iso1, iso2, l1, l2, nlist
467 cpassert(
nsoset(lmax1) .LE.
SIZE(cgc, 2))
468 cpassert(
nsoset(lmax2) .LE.
SIZE(cgc, 3))
469 cpassert(max_s_harm .LE.
SIZE(cgc, 4))
470 IF (
PRESENT(n_list) .AND.
PRESENT(
list))
THEN
471 cpassert(max_s_harm .LE.
SIZE(
list, 3))
474 IF (
PRESENT(n_list) .AND.
PRESENT(
list)) n_list = 0
475 DO iso = 1, max_s_harm
480 IF (l1 + l2 > llmax) cycle
482 IF (abs(cgc(1, iso1, iso2, iso)) + &
483 abs(cgc(2, iso1, iso2, iso)) + &
484 abs(cgc(3, iso1, iso2, iso)) > 1.e-8_dp)
THEN
486 IF (
PRESENT(n_list) .AND.
PRESENT(
list))
THEN
487 list(1, nlist, iso) = iso1
488 list(2, nlist, iso) = iso2
490 max_iso_not0 = max(max_iso_not0, iso)
496 IF (
PRESENT(n_list) .AND.
PRESENT(
list)) n_list(iso) = nlist
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)
...