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, lmax_grid, lx, &
168 ly, lz, m, m1, m2, max_s_grid, n
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 max_s_grid = max(maxs, max_s_harm)
182 lmax_grid =
indso(1, max_s_grid)
184 harmonics%max_s_harm = max_s_harm
185 harmonics%llmax = llmax
188 NULLIFY (harmonics%my_CG, harmonics%my_CG_dxyz, harmonics%my_CG_dxyz_asym)
189 CALL reallocate(harmonics%my_CG, 1, maxs, 1, maxs, 1, max_s_harm)
190 CALL reallocate(harmonics%my_CG_dxyz, 1, 3, 1, maxs, 1, maxs, 1, max_s_harm)
191 CALL reallocate(harmonics%my_CG_dxyz_asym, 1, 3, 1, maxs, 1, maxs, 1, max_s_harm)
195 harmonics%my_CG(1:maxs, is1, i) = my_cg(1:maxs, is1, i)
201 NULLIFY (harmonics%slm, harmonics%dslm, harmonics%dslm_dxyz, harmonics%a, harmonics%slm_int)
202 CALL reallocate(harmonics%slm, 1, na, 1, max_s_grid)
203 CALL reallocate(harmonics%dslm, 1, 2, 1, na, 1, maxs)
204 CALL reallocate(harmonics%dslm_dxyz, 1, 3, 1, na, 1, max_s_grid)
206 CALL reallocate(harmonics%slm_int, 1, max_s_grid)
208 NULLIFY (slm, dslm_dxyz, slm_int)
210 dslm_dxyz => harmonics%dslm_dxyz
212 slm_int => harmonics%slm_int
223 DO iso = 1, max_s_grid
230 slm_int(iso) = slm_int(iso) + slm(ia, iso)*wa(ia)
248 ALLOCATE (dc(
nco(lmax_grid), 3))
260 ELSE IF (lx == 1)
THEN
270 ELSE IF (ly == 1)
THEN
280 ELSE IF (lz == 1)
THEN
287 dc(ic, 1) = drx*ry*rz
288 dc(ic, 2) = rx*dry*rz
289 dc(ic, 3) = rx*ry*drz
295 dslm_dxyz(:, ia, iso) = dslm_dxyz(:, ia, iso) + &
311 DO iso = 1, max_s_harm
317 rx = rx + wa(ia)*slm(ia, iso)* &
318 (dslm_dxyz(1, ia, iso1)*slm(ia, iso2) + slm(ia, iso1)*dslm_dxyz(1, ia, iso2))
319 ry = ry + wa(ia)*slm(ia, iso)* &
320 (dslm_dxyz(2, ia, iso1)*slm(ia, iso2) + slm(ia, iso1)*dslm_dxyz(2, ia, iso2))
321 rz = rz + wa(ia)*slm(ia, iso)* &
322 (dslm_dxyz(3, ia, iso1)*slm(ia, iso2) + slm(ia, iso1)*dslm_dxyz(3, ia, iso2))
325 harmonics%my_CG_dxyz(1, iso1, iso2, iso) = rx
326 harmonics%my_CG_dxyz(2, iso1, iso2, iso) = ry
327 harmonics%my_CG_dxyz(3, iso1, iso2, iso) = rz
342 DO iso = 1, max_s_harm
348 drx = drx + wa(ia)*slm(ia, iso)* &
349 (-dslm_dxyz(1, ia, iso1)*slm(ia, iso2) + &
350 slm(ia, iso1)*dslm_dxyz(1, ia, iso2))
351 dry = dry + wa(ia)*slm(ia, iso)* &
352 (-dslm_dxyz(2, ia, iso1)*slm(ia, iso2) + &
353 slm(ia, iso1)*dslm_dxyz(2, ia, iso2))
354 drz = drz + wa(ia)*slm(ia, iso)* &
355 (-dslm_dxyz(3, ia, iso1)*slm(ia, iso2) + &
356 slm(ia, iso1)*dslm_dxyz(3, ia, iso2))
359 harmonics%my_CG_dxyz_asym(1, iso1, iso2, iso) = drx
360 harmonics%my_CG_dxyz_asym(2, iso1, iso2, iso) = dry
361 harmonics%my_CG_dxyz_asym(3, iso1, iso2, iso) = drz
378 CALL dy_lm(cin, dylm, l, m)
379 harmonics%dslm(:, ia, iso) = dylm(:)
388 CALL timestop(handle)
403 INTEGER,
INTENT(IN) :: llmax, max_s_harm
405 CHARACTER(len=*),
PARAMETER :: routinen =
'get_maxl_CG'
407 INTEGER :: damax_iso_not0, dmax_iso_not0, handle, &
408 is1, is2, itmp, max_iso_not0, nset
409 INTEGER,
DIMENSION(:),
POINTER :: lmax, lmin
411 CALL timeset(routinen, handle)
413 cpassert(
ASSOCIATED(harmonics))
424 lmin(is1), lmax(is1), lmin(is2), lmax(is2), &
425 max_s_harm, llmax, max_iso_not0=itmp)
426 max_iso_not0 = max(max_iso_not0, itmp)
428 lmin(is1), lmax(is1), lmin(is2), lmax(is2), &
429 max_s_harm, llmax, max_iso_not0=itmp)
430 dmax_iso_not0 = max(dmax_iso_not0, itmp)
432 lmin(is1), lmax(is1), lmin(is2), lmax(is2), &
433 max_s_harm, llmax, max_iso_not0=itmp)
434 damax_iso_not0 = max(damax_iso_not0, itmp)
437 harmonics%max_iso_not0 = max_iso_not0
438 harmonics%dmax_iso_not0 = dmax_iso_not0
439 harmonics%damax_iso_not0 = damax_iso_not0
441 CALL timestop(handle)
458 SUBROUTINE get_none0_cg_list4(cgc, lmin1, lmax1, lmin2, lmax2, max_s_harm, llmax, &
459 list, n_list, max_iso_not0)
461 REAL(dp),
DIMENSION(:, :, :, :),
INTENT(IN) :: cgc
462 INTEGER,
INTENT(IN) :: lmin1, lmax1, lmin2, lmax2, max_s_harm, &
464 INTEGER,
DIMENSION(:, :, :),
INTENT(OUT),
OPTIONAL :: list
465 INTEGER,
DIMENSION(:),
INTENT(OUT),
OPTIONAL :: n_list
466 INTEGER,
INTENT(OUT) :: max_iso_not0
468 INTEGER :: iso, iso1, iso2, l1, l2, nlist
470 cpassert(
nsoset(lmax1) <=
SIZE(cgc, 2))
471 cpassert(
nsoset(lmax2) <=
SIZE(cgc, 3))
472 cpassert(max_s_harm <=
SIZE(cgc, 4))
473 IF (
PRESENT(n_list) .AND.
PRESENT(
list))
THEN
474 cpassert(max_s_harm <=
SIZE(
list, 3))
477 IF (
PRESENT(n_list) .AND.
PRESENT(
list)) n_list = 0
478 DO iso = 1, max_s_harm
483 IF (l1 + l2 > llmax) cycle
485 IF (abs(cgc(1, iso1, iso2, iso)) + &
486 abs(cgc(2, iso1, iso2, iso)) + &
487 abs(cgc(3, iso1, iso2, iso)) > 1.e-8_dp)
THEN
489 IF (
PRESENT(n_list) .AND.
PRESENT(
list))
THEN
490 list(1, nlist, iso) = iso1
491 list(2, nlist, iso) = iso2
493 max_iso_not0 = max(max_iso_not0, iso)
499 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, ccon)
...