75#include "./base/base_uses.f90"
85 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_linres_atom_current'
107 mat_jp_riii, iB, idir)
111 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: mat_d0, mat_jp, mat_jp_rii, mat_jp_riii
112 INTEGER,
INTENT(IN) :: ib, idir
114 CHARACTER(LEN=*),
PARAMETER :: routinen =
'calculate_jrho_atom_coeff'
116 INTEGER :: bo(2), handle, iac, iat, iatom, ibc, idir2, ii, iii, ikind, ispin, istat, jatom, &
117 jkind, kac, katom, kbc, kkind, len_cpc, len_pc1, max_gau, max_nsgf, mepos, n_cont_a, &
118 n_cont_b, nat, natom, nkind, nsatbas, nsgfa, nsgfb,
nso, nsoctot, nspins, num_pe, &
120 INTEGER,
DIMENSION(3) :: cell_b
121 INTEGER,
DIMENSION(:),
POINTER :: atom_list, list_a, list_b
122 LOGICAL :: den_found, dista, distab, distb, &
123 is_not_associated, paw_atom, &
124 sgf_soft_only_a, sgf_soft_only_b
125 REAL(
dp) :: eps_cpc, jmax, nbr_dbl, rab(3), rbc(3)
126 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: proj_work1, proj_work2
127 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: a_matrix, b_matrix, c_matrix, d_matrix
128 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: c_coeff_hh_a, c_coeff_hh_b, &
129 c_coeff_ss_a, c_coeff_ss_b, r_coef_h, &
130 r_coef_s, tmp_coeff, zero_coeff
131 TYPE(
alist_type),
POINTER :: alist_ac, alist_bc
133 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: mat_a, mat_b, mat_c, mat_d
140 DIMENSION(:),
POINTER :: nl_iterator
144 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
145 TYPE(
rho_atom_coeff),
DIMENSION(:),
POINTER :: a_block, b_block, c_block, d_block, &
151 CALL timeset(routinen, handle)
153 NULLIFY (atomic_kind_set, qs_kind_set, dft_control, sab_all, jrho1_atom_set, oce, &
154 para_env, zero_coeff, tmp_coeff)
157 atomic_kind_set=atomic_kind_set, &
158 qs_kind_set=qs_kind_set, &
159 dft_control=dft_control, &
163 cpassert(
ASSOCIATED(oce))
165 CALL get_current_env(current_env=current_env, jrho1_atom_set=jrho1_atom_set)
166 cpassert(
ASSOCIATED(jrho1_atom_set))
169 maxsgf=max_nsgf, maxgtops=max_gau, basis_type=
"GAPW_1C")
171 eps_cpc = dft_control%qs_control%gapw_control%eps_cpc
186 nkind =
SIZE(qs_kind_set)
187 natom =
SIZE(jrho1_atom_set)
188 nspins = dft_control%nspins
194 atom_list=atom_list, &
196 CALL get_qs_kind(qs_kind_set(ikind), paw_atom=paw_atom)
199 IF (.NOT. paw_atom) cycle
203 iatom = atom_list(iat)
205 IF (
ASSOCIATED(jrho1_atom_set(iatom)%cjc0_h(1)%r_coef))
THEN
206 jrho1_atom_set(iatom)%cjc0_h(ispin)%r_coef = 0.0_dp
207 jrho1_atom_set(iatom)%cjc0_s(ispin)%r_coef = 0.0_dp
208 jrho1_atom_set(iatom)%cjc_h(ispin)%r_coef = 0.0_dp
209 jrho1_atom_set(iatom)%cjc_s(ispin)%r_coef = 0.0_dp
210 jrho1_atom_set(iatom)%cjc_ii_h(ispin)%r_coef = 0.0_dp
211 jrho1_atom_set(iatom)%cjc_ii_s(ispin)%r_coef = 0.0_dp
212 jrho1_atom_set(iatom)%cjc_iii_h(ispin)%r_coef = 0.0_dp
213 jrho1_atom_set(iatom)%cjc_iii_s(ispin)%r_coef = 0.0_dp
220 ALLOCATE (basis_set_list(nkind))
222 CALL get_qs_kind(qs_kind_set(ikind), basis_set=basis_set_a)
223 IF (
ASSOCIATED(basis_set_a))
THEN
224 basis_set_list(ikind)%gto_basis_set => basis_set_a
226 NULLIFY (basis_set_list(ikind)%gto_basis_set)
230 len_pc1 = max_nsgf*max_gau
231 len_cpc = max_gau*max_gau
265 NULLIFY (a_block, b_block, c_block, d_block)
266 NULLIFY (basis_1c_set, jp_rarnu, jp2_rarnu)
268 ALLOCATE (a_block(nspins), b_block(nspins), c_block(nspins), d_block(nspins), &
269 jp_rarnu(nspins), jp2_rarnu(nspins))
271 ALLOCATE (a_matrix(max_nsgf, max_nsgf), b_matrix(max_nsgf, max_nsgf), &
272 c_matrix(max_nsgf, max_nsgf), d_matrix(max_nsgf, max_nsgf))
273 ALLOCATE (proj_work1(len_pc1), proj_work2(len_cpc))
298 ikind=ikind, jkind=jkind, &
299 iatom=iatom, jatom=jatom, cell=cell_b, r=rab)
300 basis_set_a => basis_set_list(ikind)%gto_basis_set
301 IF (.NOT.
ASSOCIATED(basis_set_a)) cycle
302 basis_set_b => basis_set_list(jkind)%gto_basis_set
303 IF (.NOT.
ASSOCIATED(basis_set_b)) cycle
304 nsgfa = basis_set_a%nsgf
305 nsgfb = basis_set_b%nsgf
307 NULLIFY (jp_rarnu(ispin)%r_coef, jp2_rarnu(ispin)%r_coef)
308 ALLOCATE (jp_rarnu(ispin)%r_coef(nsgfa, nsgfb), &
309 jp2_rarnu(ispin)%r_coef(nsgfa, nsgfb))
315 NULLIFY (a_block(ispin)%r_coef)
316 NULLIFY (b_block(ispin)%r_coef)
317 NULLIFY (c_block(ispin)%r_coef)
318 NULLIFY (d_block(ispin)%r_coef)
320 row=iatom, col=jatom, block=a_block(ispin)%r_coef, &
322 jmax = jmax + maxval(abs(a_block(ispin)%r_coef))
324 row=iatom, col=jatom, block=b_block(ispin)%r_coef, &
326 jmax = jmax + maxval(abs(b_block(ispin)%r_coef))
328 row=iatom, col=jatom, block=c_block(ispin)%r_coef, &
330 jmax = jmax + maxval(abs(c_block(ispin)%r_coef))
332 row=iatom, col=jatom, block=d_block(ispin)%r_coef, &
334 jmax = jmax + maxval(abs(d_block(ispin)%r_coef))
340 basis_set=basis_1c_set, basis_type=
"GAPW_1C", &
344 IF (.NOT. paw_atom) cycle
349 iac = ikind + nkind*(kkind - 1)
350 ibc = jkind + nkind*(kkind - 1)
351 IF (.NOT.
ASSOCIATED(oce%intac(iac)%alist)) cycle
352 IF (.NOT.
ASSOCIATED(oce%intac(ibc)%alist)) cycle
354 CALL get_alist(oce%intac(iac), alist_ac, iatom)
355 CALL get_alist(oce%intac(ibc), alist_bc, jatom)
356 IF (.NOT.
ASSOCIATED(alist_ac)) cycle
357 IF (.NOT.
ASSOCIATED(alist_bc)) cycle
359 DO kac = 1, alist_ac%nclist
360 DO kbc = 1, alist_bc%nclist
361 IF (alist_ac%clist(kac)%catom /= alist_bc%clist(kbc)%catom) cycle
363 IF (all(cell_b + alist_bc%clist(kbc)%cell - alist_ac%clist(kac)%cell == 0))
THEN
364 IF (jmax*alist_bc%clist(kbc)%maxac*alist_ac%clist(kac)%maxac < eps_cpc) cycle
366 n_cont_a = alist_ac%clist(kac)%nsgf_cnt
367 n_cont_b = alist_bc%clist(kbc)%nsgf_cnt
368 sgf_soft_only_a = alist_ac%clist(kac)%sgf_soft_only
369 sgf_soft_only_b = alist_bc%clist(kbc)%sgf_soft_only
370 IF (n_cont_a == 0 .OR. n_cont_b == 0) cycle
376 IF (sgf_soft_only_a .AND. sgf_soft_only_b) cycle
378 list_a => alist_ac%clist(kac)%sgf_list
379 list_b => alist_bc%clist(kbc)%sgf_list
381 katom = alist_ac%clist(kac)%catom
383 IF (.NOT.
ASSOCIATED(jrho1_atom_set(katom)%cjc0_h(1)%r_coef))
THEN
391 rbc = alist_bc%clist(kbc)%rac
393 CALL dcopy(nsgfa*nsgfb, b_block(ispin)%r_coef(1, 1), 1, &
394 jp_rarnu(ispin)%r_coef(1, 1), 1)
395 CALL daxpy(nsgfa*nsgfb, -rbc(ii), d_block(ispin)%r_coef(1, 1), 1, &
396 jp_rarnu(ispin)%r_coef(1, 1), 1)
397 CALL daxpy(nsgfa*nsgfb, rbc(iii), c_block(ispin)%r_coef(1, 1), 1, &
398 jp_rarnu(ispin)%r_coef(1, 1), 1)
402 IF (iatom == katom .AND. all(alist_ac%clist(kac)%cell == 0))
THEN
403 c_coeff_hh_a => alist_ac%clist(kac)%achint(:, :, 1)
404 c_coeff_ss_a => alist_ac%clist(kac)%acint(:, :, 1)
407 c_coeff_hh_a => alist_ac%clist(kac)%acint(:, :, 1)
408 c_coeff_ss_a => alist_ac%clist(kac)%acint(:, :, 1)
412 IF (jatom == katom .AND. all(alist_bc%clist(kbc)%cell == 0))
THEN
413 c_coeff_hh_b => alist_bc%clist(kbc)%achint(:, :, 1)
414 c_coeff_ss_b => alist_bc%clist(kbc)%acint(:, :, 1)
417 c_coeff_hh_b => alist_bc%clist(kbc)%acint(:, :, 1)
418 c_coeff_ss_b => alist_bc%clist(kbc)%acint(:, :, 1)
422 distab = dista .AND. distb
430 a_matrix,
SIZE(a_matrix, 1), &
431 list_a, n_cont_a, list_b, n_cont_b)
434 b_matrix,
SIZE(b_matrix, 1), &
435 list_a, n_cont_a, list_b, n_cont_b)
438 c_matrix,
SIZE(c_matrix, 1), &
439 list_a, n_cont_a, list_b, n_cont_b)
441 d_matrix,
SIZE(d_matrix, 1), &
442 list_a, n_cont_a, list_b, n_cont_b)
447 r_coef_h => jrho1_atom_set(katom)%cjc0_h(ispin)%r_coef
448 r_coef_s => jrho1_atom_set(katom)%cjc0_s(ispin)%r_coef
449 CALL proj_blk(c_coeff_hh_a, c_coeff_ss_a, n_cont_a, &
450 c_coeff_hh_b, c_coeff_ss_b, n_cont_b, &
451 a_matrix, max_nsgf, r_coef_h, r_coef_s,
nso, &
452 len_pc1, len_cpc, 1.0_dp, distab, proj_work1, proj_work2)
455 r_coef_h => jrho1_atom_set(katom)%cjc_h(ispin)%r_coef
456 r_coef_s => jrho1_atom_set(katom)%cjc_s(ispin)%r_coef
457 CALL proj_blk(c_coeff_hh_a, c_coeff_ss_a, n_cont_a, &
458 c_coeff_hh_b, c_coeff_ss_b, n_cont_b, &
459 b_matrix, max_nsgf, r_coef_h, r_coef_s,
nso, &
460 len_pc1, len_cpc, 1.0_dp, distab, proj_work1, proj_work2)
463 r_coef_h => jrho1_atom_set(katom)%cjc_ii_h(ispin)%r_coef
464 r_coef_s => jrho1_atom_set(katom)%cjc_ii_s(ispin)%r_coef
465 CALL proj_blk(c_coeff_hh_a, c_coeff_ss_a, n_cont_a, &
466 c_coeff_hh_b, c_coeff_ss_b, n_cont_b, &
467 c_matrix, max_nsgf, r_coef_h, r_coef_s,
nso, &
468 len_pc1, len_cpc, 1.0_dp, distab, proj_work1, proj_work2)
471 r_coef_h => jrho1_atom_set(katom)%cjc_iii_h(ispin)%r_coef
472 r_coef_s => jrho1_atom_set(katom)%cjc_iii_s(ispin)%r_coef
473 CALL proj_blk(c_coeff_hh_a, c_coeff_ss_a, n_cont_a, &
474 c_coeff_hh_b, c_coeff_ss_b, n_cont_b, &
475 d_matrix, max_nsgf, r_coef_h, r_coef_s,
nso, &
476 len_pc1, len_cpc, 1.0_dp, distab, proj_work1, proj_work2)
489 DEALLOCATE (jp_rarnu(ispin)%r_coef, jp2_rarnu(ispin)%r_coef)
512 DEALLOCATE (a_matrix, b_matrix, c_matrix, d_matrix, proj_work1, proj_work2, &
513 a_block, b_block, c_block, d_block, &
514 jp_rarnu, jp2_rarnu &
520 DEALLOCATE (basis_set_list)
526 atom_list=atom_list, &
529 basis_set=basis_1c_set, basis_type=
"GAPW_1C", &
532 IF (.NOT. paw_atom) cycle
537 num_pe = para_env%num_pe
538 mepos = para_env%mepos
541 ALLOCATE (zero_coeff(nsoctot, nsoctot))
543 iatom = atom_list(iat)
544 is_not_associated = .NOT.
ASSOCIATED(jrho1_atom_set(iatom)%cjc0_h(1)%r_coef)
546 IF (iat >= bo(1) .AND. iat <= bo(2) .AND. is_not_associated)
THEN
552 tmp_coeff => jrho1_atom_set(iatom)%cjc0_h(ispin)%r_coef
553 IF (is_not_associated)
THEN
554 zero_coeff = 0.0_dp; tmp_coeff => zero_coeff
556 CALL para_env%sum(tmp_coeff)
558 tmp_coeff => jrho1_atom_set(iatom)%cjc0_s(ispin)%r_coef
559 IF (is_not_associated)
THEN
560 zero_coeff = 0.0_dp; tmp_coeff => zero_coeff
562 CALL para_env%sum(tmp_coeff)
564 tmp_coeff => jrho1_atom_set(iatom)%cjc_h(ispin)%r_coef
565 IF (is_not_associated)
THEN
566 zero_coeff = 0.0_dp; tmp_coeff => zero_coeff
569 CALL para_env%sum(tmp_coeff)
570 tmp_coeff => jrho1_atom_set(iatom)%cjc_s(ispin)%r_coef
571 IF (is_not_associated)
THEN
572 zero_coeff = 0.0_dp; tmp_coeff => zero_coeff
574 CALL para_env%sum(tmp_coeff)
576 tmp_coeff => jrho1_atom_set(iatom)%cjc_ii_h(ispin)%r_coef
577 IF (is_not_associated)
THEN
578 zero_coeff = 0.0_dp; tmp_coeff => zero_coeff
580 CALL para_env%sum(tmp_coeff)
582 tmp_coeff => jrho1_atom_set(iatom)%cjc_ii_s(ispin)%r_coef
583 IF (is_not_associated)
THEN
584 zero_coeff = 0.0_dp; tmp_coeff => zero_coeff
586 CALL para_env%sum(tmp_coeff)
588 tmp_coeff => jrho1_atom_set(iatom)%cjc_iii_h(ispin)%r_coef
589 IF (is_not_associated)
THEN
590 zero_coeff = 0.0_dp; tmp_coeff => zero_coeff
592 CALL para_env%sum(tmp_coeff)
594 tmp_coeff => jrho1_atom_set(iatom)%cjc_iii_s(ispin)%r_coef
595 IF (is_not_associated)
THEN
596 zero_coeff = 0.0_dp; tmp_coeff => zero_coeff
598 CALL para_env%sum(tmp_coeff)
600 IF (
ASSOCIATED(jrho1_atom_set(iatom)%cjc0_h(ispin)%r_coef))
THEN
601 nbr_dbl = nbr_dbl + 8.0_dp*real(
SIZE(jrho1_atom_set(iatom)%cjc0_h(ispin)%r_coef),
dp)
606 DEALLOCATE (zero_coeff)
611 IF (output_unit > 0)
THEN
612 WRITE (output_unit,
'(A,E8.2)')
'calculate_jrho_atom_coeff: nbr_dbl=', nbr_dbl
615 CALL timestop(handle)
629 INTEGER,
INTENT(IN) :: idir
631 CHARACTER(len=*),
PARAMETER :: routinen =
'calculate_jrho_atom_rad'
633 INTEGER :: damax_iso_not0, damax_iso_not0_local, handle, i1, i2, iat, iatom, icg, ikind, &
634 ipgf1, ipgf2, ir, iset1, iset2, iso, iso1, iso1_first, iso1_last, iso2, iso2_first, &
635 iso2_last, ispin, l, l_iso, llmax, lmax12, lmax_expansion, lmin12, m1s, m2s, m_iso, &
636 max_iso_not0, max_iso_not0_local, max_max_iso_not0, max_nso, max_s_harm, maxl, maxlgto, &
637 maxso, mepos, n1s, n2s, na, natom, natom_tot, nkind, nr, nset, nspins, num_pe, size1, &
639 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: cg_n_list, dacg_n_list
640 INTEGER,
ALLOCATABLE,
DIMENSION(:, :, :) :: cg_list, dacg_list
641 INTEGER,
DIMENSION(2) :: bo
642 INTEGER,
DIMENSION(:),
POINTER :: atom_list, lmax, lmin, npgf, o2nindex
644 LOGICAL,
ALLOCATABLE,
DIMENSION(:, :) :: is_set_to_0
645 REAL(
dp) :: hard_radius
646 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: g1, g2, gauge_h, gauge_s
647 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: cjc0_h_block, cjc0_s_block, cjc_h_block, &
648 cjc_ii_h_block, cjc_ii_s_block, cjc_iii_h_block, cjc_iii_s_block, cjc_s_block, dgg_1, gg, &
650 REAL(
dp),
DIMENSION(:, :),
POINTER :: coeff, fr_a_h, fr_a_h_ii, fr_a_h_iii, fr_a_s, &
651 fr_a_s_ii, fr_a_s_iii, fr_b_h, fr_b_h_ii, fr_b_h_iii, fr_b_s, fr_b_s_ii, fr_b_s_iii, &
653 REAL(
dp),
DIMENSION(:, :, :),
POINTER :: my_cg
654 REAL(
dp),
DIMENSION(:, :, :, :),
POINTER :: my_cg_dxyz_asym
663 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
665 CALL timeset(routinen, handle)
667 NULLIFY (atomic_kind_set, qs_kind_set, dft_control, para_env, &
668 coeff, fr_h, fr_s, fr_a_h, fr_a_s, fr_a_h_ii, fr_a_s_ii, &
669 fr_a_h_iii, fr_a_s_iii, fr_b_h, fr_b_s, fr_b_h_ii, &
670 fr_b_s_ii, fr_b_h_iii, fr_b_s_iii, jrho1_atom_set, &
674 atomic_kind_set=atomic_kind_set, &
675 qs_kind_set=qs_kind_set, &
676 dft_control=dft_control, &
683 jrho1_atom_set=jrho1_atom_set)
686 nkind =
SIZE(qs_kind_set)
687 nspins = dft_control%nspins
689 natom_tot =
SIZE(jrho1_atom_set, 1)
690 ALLOCATE (is_set_to_0(natom_tot, nspins))
691 is_set_to_0(:, :) = .false.
695 NULLIFY (atom_list, grid_atom, harmonics, basis_1c_set, &
696 lmax, lmin, npgf, zet, grid_atom, harmonics, my_cg, my_cg_dxyz_asym)
699 atom_list=atom_list, &
702 grid_atom=grid_atom, &
704 harmonics=harmonics, &
705 hard_radius=hard_radius, &
706 basis_set=basis_1c_set, &
707 basis_type=
"GAPW_1C")
710 IF (.NOT. paw_atom) cycle
713 lmax=lmax, lmin=lmin, &
714 maxl=maxl, npgf=npgf, &
715 nset=nset, zet=zet, &
720 na = grid_atom%ng_sphere
721 max_iso_not0 = harmonics%max_iso_not0
722 damax_iso_not0 = harmonics%damax_iso_not0
723 max_max_iso_not0 = max(max_iso_not0, damax_iso_not0)
724 lmax_expansion =
indso(1, max_max_iso_not0)
725 max_s_harm = harmonics%max_s_harm
726 llmax = harmonics%llmax
729 num_pe = para_env%num_pe
730 mepos = para_env%mepos
733 my_cg => harmonics%my_CG
734 my_cg_dxyz_asym => harmonics%my_CG_dxyz_asym
738 ALLOCATE (g1(nr), g2(nr), gg(nr, 0:2*maxl), gg_lm1(nr, 0:2*maxl), dgg_1(nr, 0:2*maxl), &
739 cjc0_h_block(max_nso, max_nso), cjc0_s_block(max_nso, max_nso), &
740 cjc_h_block(max_nso, max_nso), cjc_s_block(max_nso, max_nso), &
741 cjc_ii_h_block(max_nso, max_nso), cjc_ii_s_block(max_nso, max_nso), &
742 cjc_iii_h_block(max_nso, max_nso), cjc_iii_s_block(max_nso, max_nso), &
743 cg_list(2,
nsoset(maxl)**2, max_s_harm), cg_n_list(max_s_harm), &
744 dacg_list(2,
nsoset(maxl)**2, max_s_harm), dacg_n_list(max_s_harm), &
745 gauge_h(nr), gauge_s(nr))
748 SELECT CASE (current_env%gauge)
751 gauge_h(1:nr) = grid_atom%rad(1:nr)
752 gauge_s(1:nr) = grid_atom%rad(1:nr)
755 gauge_h(1:nr) = 0e0_dp
757 IF (grid_atom%rad(ir) <= hard_radius)
THEN
758 gauge_s(ir) = grid_atom%rad(ir)
760 gauge_s(ir) = gauge_h(ir)
765 gauge_h(1:nr) = huge(0e0_dp)
766 gauge_s(1:nr) = huge(0e0_dp)
768 cpabort(
"Unknown gauge, try again...")
776 CALL get_none0_cg_list(my_cg, lmin(iset1), lmax(iset1), lmin(iset2), lmax(iset2), &
777 max_s_harm, lmax_expansion, cg_list, cg_n_list, max_iso_not0_local)
778 cpassert(max_iso_not0_local <= max_iso_not0)
779 CALL get_none0_cg_list(my_cg_dxyz_asym, lmin(iset1), lmax(iset1), lmin(iset2), lmax(iset2), &
780 max_s_harm, lmax_expansion, dacg_list, dacg_n_list, damax_iso_not0_local)
781 cpassert(damax_iso_not0_local <= damax_iso_not0)
784 DO ipgf1 = 1, npgf(iset1)
785 iso1_first =
nsoset(lmin(iset1) - 1) + 1 + n1s*(ipgf1 - 1) + m1s
786 iso1_last =
nsoset(lmax(iset1)) + n1s*(ipgf1 - 1) + m1s
787 size1 = iso1_last - iso1_first + 1
788 iso1_first = o2nindex(iso1_first)
789 iso1_last = o2nindex(iso1_last)
790 i1 = iso1_last - iso1_first + 1
791 cpassert(size1 == i1)
792 i1 =
nsoset(lmin(iset1) - 1) + 1
794 g1(1:nr) = exp(-zet(ipgf1, iset1)*grid_atom%rad2(1:nr))
797 DO ipgf2 = 1, npgf(iset2)
798 iso2_first =
nsoset(lmin(iset2) - 1) + 1 + n2s*(ipgf2 - 1) + m2s
799 iso2_last =
nsoset(lmax(iset2)) + n2s*(ipgf2 - 1) + m2s
800 size2 = iso2_last - iso2_first + 1
801 iso2_first = o2nindex(iso2_first)
802 iso2_last = o2nindex(iso2_last)
803 i2 = iso2_last - iso2_first + 1
804 cpassert(size2 == i2)
805 i2 =
nsoset(lmin(iset2) - 1) + 1
807 g2(1:nr) = exp(-zet(ipgf2, iset2)*grid_atom%rad2(1:nr))
809 lmin12 = lmin(iset1) + lmin(iset2)
810 lmax12 = lmax(iset1) + lmax(iset2)
817 IF (lmin12 <= lmax_expansion)
THEN
819 IF (lmax12 > lmax_expansion) lmax12 = lmax_expansion
821 IF (lmin12 == 0)
THEN
822 gg(1:nr, lmin12) = g1(1:nr)*g2(1:nr)
823 gg_lm1(1:nr, lmin12) = 0.0_dp
825 gg(1:nr, lmin12) = grid_atom%rad2l(1:nr, lmin12)*g1(1:nr)*g2(1:nr)
826 gg_lm1(1:nr, lmin12) = grid_atom%rad2l(1:nr, lmin12 - 1)*g1(1:nr)*g2(1:nr)
829 DO l = lmin12 + 1, lmax12
830 gg(1:nr, l) = grid_atom%rad(1:nr)*gg(1:nr, l - 1)
831 gg_lm1(1:nr, l) = gg(1:nr, l - 1)
834 DO l = lmin12, lmax12
835 dgg_1(1:nr, l) = 2.0_dp*(zet(ipgf1, iset1) - zet(ipgf2, iset2))&
836 & *gg(1:nr, l)*grid_atom%rad(1:nr)
842 DO iat = bo(1), bo(2)
843 iatom = atom_list(iat)
848 cjc0_h_block = huge(1.0_dp)
849 cjc0_s_block = huge(1.0_dp)
852 coeff => jrho1_atom_set(iatom)%cjc0_h(ispin)%r_coef
853 cjc0_h_block(i1:i1 + size1 - 1, i2:i2 + size2 - 1) = &
854 coeff(iso1_first:iso1_last, iso2_first:iso2_last)
857 coeff => jrho1_atom_set(iatom)%cjc0_s(ispin)%r_coef
858 cjc0_s_block(i1:i1 + size1 - 1, i2:i2 + size2 - 1) = &
859 coeff(iso1_first:iso1_last, iso2_first:iso2_last)
862 cjc_h_block = huge(1.0_dp)
863 cjc_s_block = huge(1.0_dp)
866 coeff => jrho1_atom_set(iatom)%cjc_h(ispin)%r_coef
867 cjc_h_block(i1:i1 + size1 - 1, i2:i2 + size2 - 1) = &
868 coeff(iso1_first:iso1_last, iso2_first:iso2_last)
871 coeff => jrho1_atom_set(iatom)%cjc_s(ispin)%r_coef
872 cjc_s_block(i1:i1 + size1 - 1, i2:i2 + size2 - 1) = &
873 coeff(iso1_first:iso1_last, iso2_first:iso2_last)
876 cjc_ii_h_block = huge(1.0_dp)
877 cjc_ii_s_block = huge(1.0_dp)
880 coeff => jrho1_atom_set(iatom)%cjc_ii_h(ispin)%r_coef
881 cjc_ii_h_block(i1:i1 + size1 - 1, i2:i2 + size2 - 1) = &
882 coeff(iso1_first:iso1_last, iso2_first:iso2_last)
885 coeff => jrho1_atom_set(iatom)%cjc_ii_s(ispin)%r_coef
886 cjc_ii_s_block(i1:i1 + size1 - 1, i2:i2 + size2 - 1) = &
887 coeff(iso1_first:iso1_last, iso2_first:iso2_last)
890 cjc_iii_h_block = huge(1.0_dp)
891 cjc_iii_s_block = huge(1.0_dp)
895 coeff => jrho1_atom_set(iatom)%cjc_iii_h(ispin)%r_coef
896 cjc_iii_h_block(i1:i1 + size1 - 1, i2:i2 + size2 - 1) = &
897 coeff(iso1_first:iso1_last, iso2_first:iso2_last)
900 coeff => jrho1_atom_set(iatom)%cjc_iii_s(ispin)%r_coef
901 cjc_iii_s_block(i1:i1 + size1 - 1, i2:i2 + size2 - 1) = &
902 coeff(iso1_first:iso1_last, iso2_first:iso2_last)
906 jrho1_atom => jrho1_atom_set(iatom)
907 IF (.NOT.
ASSOCIATED(jrho1_atom%jrho_a_h(ispin)%r_coef))
THEN
910 is_set_to_0(iatom, ispin) = .true.
912 IF (.NOT. is_set_to_0(iatom, ispin))
THEN
914 is_set_to_0(iatom, ispin) = .true.
919 fr_h => jrho1_atom%jrho_h(ispin)%r_coef
920 fr_s => jrho1_atom%jrho_s(ispin)%r_coef
923 fr_a_h => jrho1_atom%jrho_a_h(ispin)%r_coef
924 fr_a_s => jrho1_atom%jrho_a_s(ispin)%r_coef
925 fr_b_h => jrho1_atom%jrho_b_h(ispin)%r_coef
926 fr_b_s => jrho1_atom%jrho_b_s(ispin)%r_coef
929 fr_a_h_ii => jrho1_atom%jrho_a_h_ii(ispin)%r_coef
930 fr_a_s_ii => jrho1_atom%jrho_a_s_ii(ispin)%r_coef
931 fr_b_h_ii => jrho1_atom%jrho_b_h_ii(ispin)%r_coef
932 fr_b_s_ii => jrho1_atom%jrho_b_s_ii(ispin)%r_coef
935 fr_a_h_iii => jrho1_atom%jrho_a_h_iii(ispin)%r_coef
936 fr_a_s_iii => jrho1_atom%jrho_a_s_iii(ispin)%r_coef
937 fr_b_h_iii => jrho1_atom%jrho_b_h_iii(ispin)%r_coef
938 fr_b_s_iii => jrho1_atom%jrho_b_s_iii(ispin)%r_coef
941 DO iso = 1, max_iso_not0_local
942 l_iso =
indso(1, iso)
943 m_iso =
indso(2, iso)
945 DO icg = 1, cg_n_list(iso)
947 iso1 = cg_list(1, icg, iso)
948 iso2 = cg_list(2, icg, iso)
950 IF (.NOT. (iso2 > 0 .AND. iso1 > 0))
THEN
951 WRITE (*, *)
'iso1=', iso1,
' iso2=', iso2,
' iso=', iso,
' icg=', icg
952 WRITE (*, *)
'.... will stop!'
954 cpassert(iso2 > 0 .AND. iso1 > 0)
957 IF (l > lmax_expansion .OR. l < .0)
THEN
958 WRITE (*, *)
'calculate_jrho_atom_rad: 1 l', l
959 WRITE (*, *)
'calculate_jrho_atom_rad: 1 lmax_expansion', lmax_expansion
960 WRITE (*, *)
'.... will stop!'
962 cpassert(l <= lmax_expansion)
968 fr_h(1:nr, iso) = fr_h(1:nr, iso) + &
969 gg(1:nr, l)*cjc0_h_block(iso1, iso2)* &
970 my_cg(iso1, iso2, iso)
972 fr_s(1:nr, iso) = fr_s(1:nr, iso) + &
973 gg(1:nr, l)*cjc0_s_block(iso1, iso2)* &
974 my_cg(iso1, iso2, iso)
977 fr_h(1:nr, iso) = fr_h(1:nr, iso) + &
978 gg(1:nr, l)*cjc0_h_block(iso1, iso2)* &
979 my_cg(iso1, iso2, iso)*(grid_atom%rad(1:nr) - gauge_h(1:nr))
981 fr_s(1:nr, iso) = fr_s(1:nr, iso) + &
982 gg(1:nr, l)*cjc0_s_block(iso1, iso2)* &
983 my_cg(iso1, iso2, iso)*(grid_atom%rad(1:nr) - gauge_s(1:nr))
989 fr_a_h(1:nr, iso) = fr_a_h(1:nr, iso) + &
990 dgg_1(1:nr, l)*cjc_h_block(iso1, iso2)* &
991 my_cg(iso1, iso2, iso)
994 fr_a_s(1:nr, iso) = fr_a_s(1:nr, iso) + &
995 dgg_1(1:nr, l)*cjc_s_block(iso1, iso2)* &
996 my_cg(iso1, iso2, iso)
1002 fr_a_h_ii(1:nr, iso) = fr_a_h_ii(1:nr, iso) + &
1004 cjc_ii_h_block(iso1, iso2)* &
1005 my_cg(iso1, iso2, iso)
1007 fr_a_s_ii(1:nr, iso) = fr_a_s_ii(1:nr, iso) + &
1009 cjc_ii_s_block(iso1, iso2)* &
1010 my_cg(iso1, iso2, iso)
1013 fr_a_h_ii(1:nr, iso) = fr_a_h_ii(1:nr, iso) + &
1014 dgg_1(1:nr, l)*gauge_h(1:nr)* &
1015 cjc_ii_h_block(iso1, iso2)* &
1016 my_cg(iso1, iso2, iso)
1018 fr_a_s_ii(1:nr, iso) = fr_a_s_ii(1:nr, iso) + &
1019 dgg_1(1:nr, l)*gauge_s(1:nr)* &
1020 cjc_ii_s_block(iso1, iso2)* &
1021 my_cg(iso1, iso2, iso)
1028 fr_a_h_iii(1:nr, iso) = fr_a_h_iii(1:nr, iso) + &
1030 cjc_iii_h_block(iso1, iso2)* &
1031 my_cg(iso1, iso2, iso)
1033 fr_a_s_iii(1:nr, iso) = fr_a_s_iii(1:nr, iso) + &
1035 cjc_iii_s_block(iso1, iso2)* &
1036 my_cg(iso1, iso2, iso)
1039 fr_a_h_iii(1:nr, iso) = fr_a_h_iii(1:nr, iso) + &
1040 dgg_1(1:nr, l)*gauge_h(1:nr)* &
1041 cjc_iii_h_block(iso1, iso2)* &
1042 my_cg(iso1, iso2, iso)
1044 fr_a_s_iii(1:nr, iso) = fr_a_s_iii(1:nr, iso) + &
1045 dgg_1(1:nr, l)*gauge_s(1:nr)* &
1046 cjc_iii_s_block(iso1, iso2)* &
1047 my_cg(iso1, iso2, iso)
1055 DO iso = 1, damax_iso_not0_local
1056 l_iso =
indso(1, iso)
1057 m_iso =
indso(2, iso)
1059 DO icg = 1, dacg_n_list(iso)
1061 iso1 = dacg_list(1, icg, iso)
1062 iso2 = dacg_list(2, icg, iso)
1064 IF (.NOT. (iso2 > 0 .AND. iso1 > 0))
THEN
1065 WRITE (*, *)
'iso1=', iso1,
' iso2=', iso2,
' iso=', iso,
' icg=', icg
1066 WRITE (*, *)
'.... will stop!'
1068 cpassert(iso2 > 0 .AND. iso1 > 0)
1071 IF (l > lmax_expansion)
THEN
1072 WRITE (*, *)
'calculate_jrho_atom_rad: 1 l', l
1073 WRITE (*, *)
'calculate_jrho_atom_rad: 1 lmax_expansion', lmax_expansion
1074 WRITE (*, *)
'.... will stop!'
1076 cpassert(l <= lmax_expansion)
1081 fr_b_h(1:nr, iso) = fr_b_h(1:nr, iso) + &
1082 gg_lm1(1:nr, l)*cjc_h_block(iso1, iso2)* &
1083 my_cg_dxyz_asym(idir, iso1, iso2, iso)
1086 fr_b_s(1:nr, iso) = fr_b_s(1:nr, iso) + &
1087 gg_lm1(1:nr, l)*cjc_s_block(iso1, iso2)* &
1088 my_cg_dxyz_asym(idir, iso1, iso2, iso)
1095 fr_b_h_ii(1:nr, iso) = fr_b_h_ii(1:nr, iso) + &
1097 cjc_ii_h_block(iso1, iso2)* &
1098 my_cg_dxyz_asym(idir, iso1, iso2, iso)
1100 fr_b_s_ii(1:nr, iso) = fr_b_s_ii(1:nr, iso) + &
1102 cjc_ii_s_block(iso1, iso2)* &
1103 my_cg_dxyz_asym(idir, iso1, iso2, iso)
1106 fr_b_h_ii(1:nr, iso) = fr_b_h_ii(1:nr, iso) + &
1107 gg_lm1(1:nr, l)*gauge_h(1:nr)* &
1108 cjc_ii_h_block(iso1, iso2)* &
1109 my_cg_dxyz_asym(idir, iso1, iso2, iso)
1111 fr_b_s_ii(1:nr, iso) = fr_b_s_ii(1:nr, iso) + &
1112 gg_lm1(1:nr, l)*gauge_s(1:nr)* &
1113 cjc_ii_s_block(iso1, iso2)* &
1114 my_cg_dxyz_asym(idir, iso1, iso2, iso)
1121 fr_b_h_iii(1:nr, iso) = fr_b_h_iii(1:nr, iso) + &
1123 cjc_iii_h_block(iso1, iso2)* &
1124 my_cg_dxyz_asym(idir, iso1, iso2, iso)
1126 fr_b_s_iii(1:nr, iso) = fr_b_s_iii(1:nr, iso) + &
1128 cjc_iii_s_block(iso1, iso2)* &
1129 my_cg_dxyz_asym(idir, iso1, iso2, iso)
1132 fr_b_h_iii(1:nr, iso) = fr_b_h_iii(1:nr, iso) + &
1133 gg_lm1(1:nr, l)*gauge_h(1:nr)* &
1134 cjc_iii_h_block(iso1, iso2)* &
1135 my_cg_dxyz_asym(idir, iso1, iso2, iso)
1137 fr_b_s_iii(1:nr, iso) = fr_b_s_iii(1:nr, iso) + &
1138 gg_lm1(1:nr, l)*gauge_s(1:nr)* &
1139 cjc_iii_s_block(iso1, iso2)* &
1140 my_cg_dxyz_asym(idir, iso1, iso2, iso)
1158 DEALLOCATE (cjc0_h_block, cjc0_s_block, cjc_h_block, cjc_s_block, cjc_ii_h_block, cjc_ii_s_block, &
1159 cjc_iii_h_block, cjc_iii_s_block, g1, g2, gg, gg_lm1, dgg_1, gauge_h, gauge_s, &
1160 cg_list, cg_n_list, dacg_list, dacg_n_list)
1161 DEALLOCATE (o2nindex)
1165 DEALLOCATE (is_set_to_0)
1167 CALL timestop(handle)
1185 SUBROUTINE calculate_jrho_atom_ang(jrho1_atom, jrho_h, jrho_s, grid_atom, &
1186 harmonics, do_igaim, ratom, natm_gauge, &
1190 REAL(
dp),
DIMENSION(:, :),
POINTER :: jrho_h, jrho_s
1193 LOGICAL,
INTENT(IN) :: do_igaim
1194 INTEGER,
INTENT(IN) :: ib, idir, ispin, natm_gauge
1195 REAL(
dp),
INTENT(IN) :: ratom(:, :)
1197 INTEGER :: ia, idir2, iib, iiib, ir, &
1198 iso, max_max_iso_not0, na, nr
1199 REAL(
dp) :: rad_part, scale
1200 REAL(
dp),
DIMENSION(:, :),
POINTER :: a, fr_a_h, fr_a_h_ii, fr_a_h_iii, &
1201 fr_a_s, fr_a_s_ii, fr_a_s_iii, fr_b_h, fr_b_h_ii, fr_b_h_iii, fr_b_s, &
1202 fr_b_s_ii, fr_b_s_iii, fr_h, fr_s, slm
1203 REAL(
dp),
DIMENSION(:),
POINTER :: r
1204 REAL(
dp),
DIMENSION(:, :, :),
ALLOCATABLE :: g
1207 NULLIFY (fr_h, fr_s, fr_a_h, fr_a_s, fr_a_h_ii, fr_a_s_ii, fr_a_h_iii, fr_a_s_iii, &
1208 fr_b_h, fr_b_s, fr_b_h_ii, fr_b_s_ii, fr_b_h_iii, fr_b_s_iii, &
1211 cpassert(
ASSOCIATED(jrho_h))
1212 cpassert(
ASSOCIATED(jrho_s))
1213 cpassert(
ASSOCIATED(jrho1_atom))
1215 cpassert(
ASSOCIATED(jrho1_atom%jrho_a_h))
1216 cpassert(
ASSOCIATED(jrho1_atom%jrho_a_s))
1217 cpassert(
ASSOCIATED(jrho1_atom%jrho_b_h))
1218 cpassert(
ASSOCIATED(jrho1_atom%jrho_b_s))
1219 cpassert(
ASSOCIATED(jrho1_atom%jrho_a_h(ispin)%r_coef))
1220 cpassert(
ASSOCIATED(jrho1_atom%jrho_a_s(ispin)%r_coef))
1221 cpassert(
ASSOCIATED(jrho1_atom%jrho_b_h(ispin)%r_coef))
1222 cpassert(
ASSOCIATED(jrho1_atom%jrho_b_s(ispin)%r_coef))
1223 cpassert(
ASSOCIATED(jrho1_atom%jrho_a_h_ii))
1224 cpassert(
ASSOCIATED(jrho1_atom%jrho_a_s_ii))
1225 cpassert(
ASSOCIATED(jrho1_atom%jrho_b_h_ii))
1226 cpassert(
ASSOCIATED(jrho1_atom%jrho_b_s_ii))
1227 cpassert(
ASSOCIATED(jrho1_atom%jrho_a_h_ii(ispin)%r_coef))
1228 cpassert(
ASSOCIATED(jrho1_atom%jrho_a_s_ii(ispin)%r_coef))
1229 cpassert(
ASSOCIATED(jrho1_atom%jrho_b_h_ii(ispin)%r_coef))
1230 cpassert(
ASSOCIATED(jrho1_atom%jrho_b_s_ii(ispin)%r_coef))
1231 cpassert(
ASSOCIATED(jrho1_atom%jrho_a_h_iii))
1232 cpassert(
ASSOCIATED(jrho1_atom%jrho_a_s_iii))
1233 cpassert(
ASSOCIATED(jrho1_atom%jrho_b_h_iii))
1234 cpassert(
ASSOCIATED(jrho1_atom%jrho_b_s_iii))
1235 cpassert(
ASSOCIATED(jrho1_atom%jrho_a_h_iii(ispin)%r_coef))
1236 cpassert(
ASSOCIATED(jrho1_atom%jrho_a_s_iii(ispin)%r_coef))
1237 cpassert(
ASSOCIATED(jrho1_atom%jrho_b_h_iii(ispin)%r_coef))
1238 cpassert(
ASSOCIATED(jrho1_atom%jrho_b_s_iii(ispin)%r_coef))
1242 na = grid_atom%ng_sphere
1243 max_max_iso_not0 = max(harmonics%max_iso_not0, harmonics%damax_iso_not0)
1244 ALLOCATE (g(3, nr, na))
1247 fr_h => jrho1_atom%jrho_h(ispin)%r_coef
1248 fr_s => jrho1_atom%jrho_s(ispin)%r_coef
1251 fr_a_h => jrho1_atom%jrho_a_h(ispin)%r_coef
1252 fr_a_s => jrho1_atom%jrho_a_s(ispin)%r_coef
1253 fr_b_h => jrho1_atom%jrho_b_h(ispin)%r_coef
1254 fr_b_s => jrho1_atom%jrho_b_s(ispin)%r_coef
1257 fr_a_h_ii => jrho1_atom%jrho_a_h_ii(ispin)%r_coef
1258 fr_a_s_ii => jrho1_atom%jrho_a_s_ii(ispin)%r_coef
1259 fr_b_h_ii => jrho1_atom%jrho_b_h_ii(ispin)%r_coef
1260 fr_b_s_ii => jrho1_atom%jrho_b_s_ii(ispin)%r_coef
1263 fr_a_h_iii => jrho1_atom%jrho_a_h_iii(ispin)%r_coef
1264 fr_a_s_iii => jrho1_atom%jrho_a_s_iii(ispin)%r_coef
1265 fr_b_h_iii => jrho1_atom%jrho_b_h_iii(ispin)%r_coef
1266 fr_b_s_iii => jrho1_atom%jrho_b_s_iii(ispin)%r_coef
1270 slm => harmonics%slm
1277 IF (idir /= ib)
THEN
1286 DO iso = 1, max_max_iso_not0
1295 rad_part = a(idir, ia)*fr_a_h(ir, iso) + fr_b_h(ir, iso) &
1296 & - g(iib, ir, ia)*(a(idir, ia)*fr_a_h_iii(ir, iso) + fr_b_h_iii(ir, iso))&
1297 & + g(iiib, ir, ia)*(a(idir, ia)*fr_a_h_ii(ir, iso) + fr_b_h_ii(ir, iso))&
1298 & + scale*(a(idir2, ia)*r(ir) - g(idir2, ir, ia))*fr_h(ir, iso)
1300 jrho_h(ir, ia) = jrho_h(ir, ia) + rad_part*slm(ia, iso)
1303 rad_part = a(idir, ia)*fr_a_s(ir, iso) + fr_b_s(ir, iso) &
1304 & - g(iib, ir, ia)*(a(idir, ia)*fr_a_s_iii(ir, iso) + fr_b_s_iii(ir, iso))&
1305 & + g(iiib, ir, ia)*(a(idir, ia)*fr_a_s_ii(ir, iso) + fr_b_s_ii(ir, iso))&
1306 & + scale*(a(idir2, ia)*r(ir) - g(idir2, ir, ia))*fr_s(ir, iso)
1308 jrho_s(ir, ia) = jrho_s(ir, ia) + rad_part*slm(ia, iso)
1317 rad_part = a(idir, ia)*fr_a_h(ir, iso) + fr_b_h(ir, iso) &
1318 & - a(iib, ia)*(a(idir, ia)*fr_a_h_iii(ir, iso) + fr_b_h_iii(ir, iso))&
1319 & + a(iiib, ia)*(a(idir, ia)*fr_a_h_ii(ir, iso) + fr_b_h_ii(ir, iso))&
1320 & + scale*a(idir2, ia)*fr_h(ir, iso)
1322 jrho_h(ir, ia) = jrho_h(ir, ia) + rad_part*slm(ia, iso)
1325 rad_part = a(idir, ia)*fr_a_s(ir, iso) + fr_b_s(ir, iso) &
1326 & - a(iib, ia)*(a(idir, ia)*fr_a_s_iii(ir, iso) + fr_b_s_iii(ir, iso))&
1327 & + a(iiib, ia)*(a(idir, ia)*fr_a_s_ii(ir, iso) + fr_b_s_ii(ir, iso))&
1328 & + scale*a(idir2, ia)*fr_s(ir, iso)
1330 jrho_s(ir, ia) = jrho_s(ir, ia) + rad_part*slm(ia, iso)
1344 SUBROUTINE get_gauge()
1345 INTEGER :: iatom, ixyz, jatom
1346 REAL(
dp) :: ab, pa, pb, point(3), pra(3), prb(3), &
1348 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: buf
1350 ALLOCATE (buf(natm_gauge))
1354 g(ixyz, ir, ia) = 0.0_dp
1356 point(1) = r(ir)*a(1, ia)
1357 point(2) = r(ir)*a(2, ia)
1358 point(3) = r(ir)*a(3, ia)
1359 DO iatom = 1, natm_gauge
1361 pra = point - ratom(:, iatom)
1362 pa = sqrt(pra(1)**2 + pra(2)**2 + pra(3)**2)
1363 DO jatom = 1, natm_gauge
1364 IF (iatom == jatom) cycle
1365 prb = point - ratom(:, jatom)
1366 pb = sqrt(prb(1)**2 + prb(2)**2 + prb(3)**2)
1367 ab = sqrt((pra(1) - prb(1))**2 + (pra(2) - prb(2))**2 + (pra(3) - prb(3))**2)
1370 tmp = 0.5_dp*(3.0_dp - tmp**2)*tmp
1371 tmp = 0.5_dp*(3.0_dp - tmp**2)*tmp
1372 tmp = 0.5_dp*(3.0_dp - tmp**2)*tmp
1373 buf(iatom) = buf(iatom)*0.5_dp*(1.0_dp - tmp)
1378 DO iatom = 1, natm_gauge
1379 res = res + ratom(ixyz, iatom)*buf(iatom)
1381 res = res/sum(buf(1:natm_gauge))
1383 g(ixyz, ir, ia) = res
1388 END SUBROUTINE get_gauge
1389 END SUBROUTINE calculate_jrho_atom_ang
1401 INTEGER,
INTENT(IN) :: ib, idir
1403 INTEGER :: iat, iatom, ikind, ispin, jatom, &
1404 natm_gauge, natm_tot, natom, nkind, &
1406 INTEGER,
DIMENSION(2) :: bo
1407 INTEGER,
DIMENSION(:),
POINTER :: atom_list
1408 LOGICAL :: do_igaim, gapw, paw_atom
1409 REAL(
dp) :: hard_radius, r(3)
1410 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: ratom
1420 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
1422 NULLIFY (para_env, dft_control)
1423 NULLIFY (jrho1_atom_set, grid_atom, harmonics)
1424 NULLIFY (atomic_kind_set, qs_kind_set, atom_list)
1426 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control, &
1427 atomic_kind_set=atomic_kind_set, &
1428 qs_kind_set=qs_kind_set, &
1429 particle_set=particle_set, &
1434 jrho1_atom_set=jrho1_atom_set)
1439 gapw = dft_control%qs_control%gapw
1440 nkind =
SIZE(qs_kind_set, 1)
1441 nspins = dft_control%nspins
1443 natm_tot =
SIZE(particle_set)
1444 ALLOCATE (ratom(3, natm_tot))
1448 NULLIFY (atom_list, grid_atom, harmonics)
1449 CALL get_atomic_kind(atomic_kind_set(ikind), atom_list=atom_list, natom=natom)
1451 grid_atom=grid_atom, &
1452 harmonics=harmonics, &
1453 hard_radius=hard_radius, &
1456 IF (.NOT. paw_atom) cycle
1460 bo =
get_limit(natom, para_env%num_pe, para_env%mepos)
1462 DO iat = bo(1), bo(2)
1463 iatom = atom_list(iat)
1464 NULLIFY (jrho1_atom)
1465 jrho1_atom => jrho1_atom_set(iatom)
1468 DO jatom = 1, natm_tot
1469 r(:) =
pbc(particle_set(jatom)%r(:) - particle_set(iatom)%r(:), cell)
1471 IF (sum(r(:)**2) <= (4.0_dp*hard_radius*hard_radius))
THEN
1472 natm_gauge = natm_gauge + 1
1473 ratom(:, natm_gauge) = r(:)
1477 DO ispin = 1, nspins
1478 jrho1_atom%jrho_vec_rad_h(idir, ispin)%r_coef = 0.0_dp
1479 jrho1_atom%jrho_vec_rad_s(idir, ispin)%r_coef = 0.0_dp
1480 CALL calculate_jrho_atom_ang(jrho1_atom, &
1481 jrho1_atom%jrho_vec_rad_h(idir, ispin)%r_coef, &
1482 jrho1_atom%jrho_vec_rad_s(idir, ispin)%r_coef, &
1483 grid_atom, harmonics, &
1485 ratom, natm_gauge, ib, idir, ispin)
Define the atomic kind types and their sub types.
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 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)
...
Handles all functions related to the CELL.
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dbcsr_get_block_p(matrix, row, col, block, found, row_size, col_size)
...
various routines to log and control the output. The idea is that decisions about where to log should ...
integer function, public cp_logger_get_default_io_unit(logger)
returns the unit nr for the ionode (-1 on all other processors) skips as well checks if the procs cal...
Defines the basic variable types.
integer, parameter, public dp
Interface to the message passing library MPI.
Provides Cartesian and spherical orbital pointers and indices.
integer, dimension(:), allocatable, public nsoset
integer, dimension(:, :), allocatable, public indso
integer, dimension(:), allocatable, public nso
Define the data structure for the particle information.
subroutine, public get_paw_basis_info(basis_1c, o2nindex, n2oindex, nsatbas)
Return some info on the PAW basis derived from a GTO basis set.
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, mimic, 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, sab_cneo, 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, matrix_vhxc, 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, xcint_weights, 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, rhoz_cneo_set, ecoul_1c, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_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, do_rixs, tb_tblite)
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, 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.
subroutine, public get_qs_kind_set(qs_kind_set, all_potential_present, tnadd_potential_present, gth_potential_present, sgp_potential_present, paw_atom_present, dft_plus_u_atom_present, maxcgf, maxsgf, maxco, maxco_proj, maxgtops, maxlgto, maxlprj, maxnset, maxsgf_set, ncgf, npgf, nset, nsgf, nshell, maxpol, maxlppl, maxlppnl, maxppnl, nelectron, maxder, max_ngrid_rad, max_sph_harm, maxg_iso_not0, lmax_rho0, basis_rcut, do_mtlr_present, basis_type, total_zeff_corr, npgf_seg, cneo_potential_present, nkind_q, natom_q)
Get attributes of an atomic kind set.
given the response wavefunctions obtained by the application of the (rxp), p, and ((dk-dl)xp) operato...
subroutine, public calculate_jrho_atom(current_env, qs_env, ib, idir)
...
subroutine, public calculate_jrho_atom_coeff(qs_env, current_env, mat_d0, mat_jp, mat_jp_rii, mat_jp_riii, ib, idir)
Calculate the expansion coefficients for the atomic terms of the current densitiy in GAPW.
subroutine, public calculate_jrho_atom_rad(qs_env, current_env, idir)
...
Calculate the operators p rxp and D needed in the optimization of the different contribution of the f...
subroutine, public set_vecp(i1, i2, i3)
...
real(dp) function, public fac_vecp(a, b, c)
...
subroutine, public set_vecp_rev(i1, i2, i3)
...
Type definitiona for linear response calculations.
subroutine, public get_current_env(current_env, simple_done, simple_converged, full_done, nao, nstates, gauge, list_cubes, statetrueindex, gauge_name, basisfun_center, nbr_center, center_list, centers_set, psi1_p, psi1_rxp, psi1_d, p_psi0, rxp_psi0, jrho1_atom_set, jrho1_set, chi_tensor, chi_tensor_loc, gauge_atom_radius, rs_gauge, use_old_gauge_atom, chi_pbc, psi0_order)
...
subroutine, public allocate_jrho_coeff(jrho1_atom_set, iatom, nsotot)
...
subroutine, public set2zero_jrho_atom_rad(jrho1_atom, ispin)
...
subroutine, public allocate_jrho_atom_rad(jrho1_atom, ispin, nr, na, max_iso_not0)
...
Define the neighbor list data types and the corresponding functionality.
subroutine, public neighbor_list_iterator_create(iterator_set, nl, search, nthread)
Neighbor list iterator functions.
subroutine, public neighbor_list_iterator_release(iterator_set)
...
integer function, public neighbor_list_iterate(iterator_set, mepos)
...
subroutine, public get_iterator_info(iterator_set, mepos, ikind, jkind, nkind, ilist, nlist, inode, nnode, iatom, jatom, r, cell)
...
Routines for the construction of the coefficients for the expansion of the atomic densities rho1_hard...
subroutine, public proj_blk(h_a, s_a, na, h_b, s_b, nb, blk, ldb, proj_h, proj_s, nso, len1, len2, fac, distab, work1, work2)
Project a matrix block onto the local atomic functions.
General overlap type integrals containers.
subroutine, public alist_pre_align_blk(blk_in, ldin, blk_out, ldout, ilist, in, jlist, jn)
...
subroutine, public get_alist(sap_int, alist, atom)
...
All kind of helpful little routines.
pure integer function, dimension(2), public get_limit(m, n, me)
divide m entries into n parts, return size of part me
Provides all information about an atomic kind.
Type defining parameters related to the simulation cell.
stores all the informations relevant to an mpi environment
Provides all information about a quickstep kind.