21 gto_basis_set_p_type,&
27 USE dbcsr_api,
ONLY: dbcsr_get_block_p,&
58 neighbor_list_iterator_p_type,&
60 neighbor_list_set_p_type
75 #include "./base/base_uses.f90"
85 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_linres_atom_current'
107 mat_jp_riii, iB, idir)
109 TYPE(qs_environment_type),
POINTER :: qs_env
110 TYPE(current_env_type) :: current_env
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(:, :) :: a_matrix, b_matrix, c_matrix, d_matrix
127 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: c_coeff_hh_a, c_coeff_hh_b, &
128 c_coeff_ss_a, c_coeff_ss_b, r_coef_h, &
129 r_coef_s, tmp_coeff, zero_coeff
130 TYPE(alist_type),
POINTER :: alist_ac, alist_bc
131 TYPE(atomic_kind_type),
DIMENSION(:),
POINTER :: atomic_kind_set
132 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: mat_a, mat_b, mat_c, mat_d
133 TYPE(dft_control_type),
POINTER :: dft_control
134 TYPE(gto_basis_set_p_type),
DIMENSION(:),
POINTER :: basis_set_list
135 TYPE(gto_basis_set_type),
POINTER :: basis_1c_set, basis_set_a, basis_set_b
136 TYPE(jrho_atom_type),
DIMENSION(:),
POINTER :: jrho1_atom_set
137 TYPE(mp_para_env_type),
POINTER :: para_env
138 TYPE(neighbor_list_iterator_p_type), &
139 DIMENSION(:),
POINTER :: nl_iterator
140 TYPE(neighbor_list_set_p_type),
DIMENSION(:), &
142 TYPE(oce_matrix_type),
POINTER :: oce
143 TYPE(qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
144 TYPE(rho_atom_coeff),
DIMENSION(:),
POINTER :: a_block, b_block, c_block, d_block, &
150 CALL timeset(routinen, handle)
152 NULLIFY (atomic_kind_set, qs_kind_set, dft_control, sab_all, jrho1_atom_set, oce, &
153 para_env, zero_coeff, tmp_coeff)
156 atomic_kind_set=atomic_kind_set, &
157 qs_kind_set=qs_kind_set, &
158 dft_control=dft_control, &
162 cpassert(
ASSOCIATED(oce))
164 CALL get_current_env(current_env=current_env, jrho1_atom_set=jrho1_atom_set)
165 cpassert(
ASSOCIATED(jrho1_atom_set))
168 maxsgf=max_nsgf, maxgtops=max_gau, basis_type=
"GAPW_1C")
170 eps_cpc = dft_control%qs_control%gapw_control%eps_cpc
173 IF (idir .NE. ib)
THEN
185 nkind =
SIZE(qs_kind_set)
186 natom =
SIZE(jrho1_atom_set)
187 nspins = dft_control%nspins
193 atom_list=atom_list, &
195 CALL get_qs_kind(qs_kind_set(ikind), paw_atom=paw_atom)
198 IF (.NOT. paw_atom) cycle
202 iatom = atom_list(iat)
204 IF (
ASSOCIATED(jrho1_atom_set(iatom)%cjc0_h(1)%r_coef))
THEN
205 jrho1_atom_set(iatom)%cjc0_h(ispin)%r_coef = 0.0_dp
206 jrho1_atom_set(iatom)%cjc0_s(ispin)%r_coef = 0.0_dp
207 jrho1_atom_set(iatom)%cjc_h(ispin)%r_coef = 0.0_dp
208 jrho1_atom_set(iatom)%cjc_s(ispin)%r_coef = 0.0_dp
209 jrho1_atom_set(iatom)%cjc_ii_h(ispin)%r_coef = 0.0_dp
210 jrho1_atom_set(iatom)%cjc_ii_s(ispin)%r_coef = 0.0_dp
211 jrho1_atom_set(iatom)%cjc_iii_h(ispin)%r_coef = 0.0_dp
212 jrho1_atom_set(iatom)%cjc_iii_s(ispin)%r_coef = 0.0_dp
219 ALLOCATE (basis_set_list(nkind))
221 CALL get_qs_kind(qs_kind_set(ikind), basis_set=basis_set_a)
222 IF (
ASSOCIATED(basis_set_a))
THEN
223 basis_set_list(ikind)%gto_basis_set => basis_set_a
225 NULLIFY (basis_set_list(ikind)%gto_basis_set)
229 len_pc1 = max_nsgf*max_gau
230 len_cpc = max_gau*max_gau
263 NULLIFY (a_block, b_block, c_block, d_block)
264 NULLIFY (basis_1c_set, jp_rarnu, jp2_rarnu)
266 ALLOCATE (a_block(nspins), b_block(nspins), c_block(nspins), d_block(nspins), &
267 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), &
299 ikind=ikind, jkind=jkind, &
300 iatom=iatom, jatom=jatom, cell=cell_b, r=rab)
301 basis_set_a => basis_set_list(ikind)%gto_basis_set
302 IF (.NOT.
ASSOCIATED(basis_set_a)) cycle
303 basis_set_b => basis_set_list(jkind)%gto_basis_set
304 IF (.NOT.
ASSOCIATED(basis_set_b)) cycle
305 nsgfa = basis_set_a%nsgf
306 nsgfb = basis_set_b%nsgf
308 NULLIFY (jp_rarnu(ispin)%r_coef, jp2_rarnu(ispin)%r_coef)
309 ALLOCATE (jp_rarnu(ispin)%r_coef(nsgfa, nsgfb), &
310 jp2_rarnu(ispin)%r_coef(nsgfa, nsgfb))
316 NULLIFY (a_block(ispin)%r_coef)
317 NULLIFY (b_block(ispin)%r_coef)
318 NULLIFY (c_block(ispin)%r_coef)
319 NULLIFY (d_block(ispin)%r_coef)
320 CALL dbcsr_get_block_p(matrix=mat_a(ispin)%matrix, &
321 row=iatom, col=jatom, block=a_block(ispin)%r_coef, &
323 jmax = jmax + maxval(abs(a_block(ispin)%r_coef))
324 CALL dbcsr_get_block_p(matrix=mat_b(ispin)%matrix, &
325 row=iatom, col=jatom, block=b_block(ispin)%r_coef, &
327 jmax = jmax + maxval(abs(b_block(ispin)%r_coef))
328 CALL dbcsr_get_block_p(matrix=mat_c(ispin)%matrix, &
329 row=iatom, col=jatom, block=c_block(ispin)%r_coef, &
331 jmax = jmax + maxval(abs(c_block(ispin)%r_coef))
332 CALL dbcsr_get_block_p(matrix=mat_d(ispin)%matrix, &
333 row=iatom, col=jatom, block=d_block(ispin)%r_coef, &
335 jmax = jmax + maxval(abs(d_block(ispin)%r_coef))
341 basis_set=basis_1c_set, basis_type=
"GAPW_1C", &
345 IF (.NOT. paw_atom) cycle
350 iac = ikind + nkind*(kkind - 1)
351 ibc = jkind + nkind*(kkind - 1)
352 IF (.NOT.
ASSOCIATED(oce%intac(iac)%alist)) cycle
353 IF (.NOT.
ASSOCIATED(oce%intac(ibc)%alist)) cycle
355 CALL get_alist(oce%intac(iac), alist_ac, iatom)
356 CALL get_alist(oce%intac(ibc), alist_bc, jatom)
357 IF (.NOT.
ASSOCIATED(alist_ac)) cycle
358 IF (.NOT.
ASSOCIATED(alist_bc)) cycle
360 DO kac = 1, alist_ac%nclist
361 DO kbc = 1, alist_bc%nclist
362 IF (alist_ac%clist(kac)%catom /= alist_bc%clist(kbc)%catom) cycle
364 IF (all(cell_b + alist_bc%clist(kbc)%cell - alist_ac%clist(kac)%cell == 0))
THEN
365 IF (jmax*alist_bc%clist(kbc)%maxac*alist_ac%clist(kac)%maxac < eps_cpc) cycle
367 n_cont_a = alist_ac%clist(kac)%nsgf_cnt
368 n_cont_b = alist_bc%clist(kbc)%nsgf_cnt
369 sgf_soft_only_a = alist_ac%clist(kac)%sgf_soft_only
370 sgf_soft_only_b = alist_bc%clist(kbc)%sgf_soft_only
371 IF (n_cont_a .EQ. 0 .OR. n_cont_b .EQ. 0) cycle
377 IF (sgf_soft_only_a .AND. sgf_soft_only_b) cycle
379 list_a => alist_ac%clist(kac)%sgf_list
380 list_b => alist_bc%clist(kbc)%sgf_list
382 katom = alist_ac%clist(kac)%catom
384 IF (.NOT.
ASSOCIATED(jrho1_atom_set(katom)%cjc0_h(1)%r_coef))
THEN
392 rbc = alist_bc%clist(kbc)%rac
394 CALL dcopy(nsgfa*nsgfb, b_block(ispin)%r_coef(1, 1), 1, &
395 jp_rarnu(ispin)%r_coef(1, 1), 1)
396 CALL daxpy(nsgfa*nsgfb, -rbc(ii), d_block(ispin)%r_coef(1, 1), 1, &
397 jp_rarnu(ispin)%r_coef(1, 1), 1)
398 CALL daxpy(nsgfa*nsgfb, rbc(iii), c_block(ispin)%r_coef(1, 1), 1, &
399 jp_rarnu(ispin)%r_coef(1, 1), 1)
403 IF (iatom == katom .AND. all(alist_ac%clist(kac)%cell == 0))
THEN
404 c_coeff_hh_a => alist_ac%clist(kac)%achint(:, :, 1)
405 c_coeff_ss_a => alist_ac%clist(kac)%acint(:, :, 1)
408 c_coeff_hh_a => alist_ac%clist(kac)%acint(:, :, 1)
409 c_coeff_ss_a => alist_ac%clist(kac)%acint(:, :, 1)
413 IF (jatom == katom .AND. all(alist_bc%clist(kbc)%cell == 0))
THEN
414 c_coeff_hh_b => alist_bc%clist(kbc)%achint(:, :, 1)
415 c_coeff_ss_b => alist_bc%clist(kbc)%acint(:, :, 1)
418 c_coeff_hh_b => alist_bc%clist(kbc)%acint(:, :, 1)
419 c_coeff_ss_b => alist_bc%clist(kbc)%acint(:, :, 1)
423 distab = dista .AND. distb
431 a_matrix,
SIZE(a_matrix, 1), &
432 list_a, n_cont_a, list_b, n_cont_b)
435 b_matrix,
SIZE(b_matrix, 1), &
436 list_a, n_cont_a, list_b, n_cont_b)
439 c_matrix,
SIZE(c_matrix, 1), &
440 list_a, n_cont_a, list_b, n_cont_b)
442 d_matrix,
SIZE(d_matrix, 1), &
443 list_a, n_cont_a, list_b, n_cont_b)
448 r_coef_h => jrho1_atom_set(katom)%cjc0_h(ispin)%r_coef
449 r_coef_s => jrho1_atom_set(katom)%cjc0_s(ispin)%r_coef
450 CALL proj_blk(c_coeff_hh_a, c_coeff_ss_a, n_cont_a, &
451 c_coeff_hh_b, c_coeff_ss_b, n_cont_b, &
452 a_matrix, max_nsgf, r_coef_h, r_coef_s, nso, &
453 len_pc1, len_cpc, 1.0_dp, distab)
456 r_coef_h => jrho1_atom_set(katom)%cjc_h(ispin)%r_coef
457 r_coef_s => jrho1_atom_set(katom)%cjc_s(ispin)%r_coef
458 CALL proj_blk(c_coeff_hh_a, c_coeff_ss_a, n_cont_a, &
459 c_coeff_hh_b, c_coeff_ss_b, n_cont_b, &
460 b_matrix, max_nsgf, r_coef_h, r_coef_s, nso, &
461 len_pc1, len_cpc, 1.0_dp, distab)
464 r_coef_h => jrho1_atom_set(katom)%cjc_ii_h(ispin)%r_coef
465 r_coef_s => jrho1_atom_set(katom)%cjc_ii_s(ispin)%r_coef
466 CALL proj_blk(c_coeff_hh_a, c_coeff_ss_a, n_cont_a, &
467 c_coeff_hh_b, c_coeff_ss_b, n_cont_b, &
468 c_matrix, max_nsgf, r_coef_h, r_coef_s, nso, &
469 len_pc1, len_cpc, 1.0_dp, distab)
472 r_coef_h => jrho1_atom_set(katom)%cjc_iii_h(ispin)%r_coef
473 r_coef_s => jrho1_atom_set(katom)%cjc_iii_s(ispin)%r_coef
474 CALL proj_blk(c_coeff_hh_a, c_coeff_ss_a, n_cont_a, &
475 c_coeff_hh_b, c_coeff_ss_b, n_cont_b, &
476 d_matrix, max_nsgf, r_coef_h, r_coef_s, nso, &
477 len_pc1, len_cpc, 1.0_dp, distab)
490 DEALLOCATE (jp_rarnu(ispin)%r_coef, jp2_rarnu(ispin)%r_coef)
513 DEALLOCATE (a_matrix, b_matrix, c_matrix, d_matrix, &
514 a_block, b_block, c_block, d_block, &
515 jp_rarnu, jp2_rarnu &
521 DEALLOCATE (basis_set_list)
527 atom_list=atom_list, &
530 basis_set=basis_1c_set, basis_type=
"GAPW_1C", &
533 IF (.NOT. paw_atom) cycle
538 num_pe = para_env%num_pe
539 mepos = para_env%mepos
542 ALLOCATE (zero_coeff(nsoctot, nsoctot))
544 iatom = atom_list(iat)
545 is_not_associated = .NOT.
ASSOCIATED(jrho1_atom_set(iatom)%cjc0_h(1)%r_coef)
547 IF (iat .GE. bo(1) .AND. iat .LE. bo(2) .AND. is_not_associated)
THEN
553 tmp_coeff => jrho1_atom_set(iatom)%cjc0_h(ispin)%r_coef
554 IF (is_not_associated)
THEN
555 zero_coeff = 0.0_dp; tmp_coeff => zero_coeff
557 CALL para_env%sum(tmp_coeff)
559 tmp_coeff => jrho1_atom_set(iatom)%cjc0_s(ispin)%r_coef
560 IF (is_not_associated)
THEN
561 zero_coeff = 0.0_dp; tmp_coeff => zero_coeff
563 CALL para_env%sum(tmp_coeff)
565 tmp_coeff => jrho1_atom_set(iatom)%cjc_h(ispin)%r_coef
566 IF (is_not_associated)
THEN
567 zero_coeff = 0.0_dp; tmp_coeff => zero_coeff
570 CALL para_env%sum(tmp_coeff)
571 tmp_coeff => jrho1_atom_set(iatom)%cjc_s(ispin)%r_coef
572 IF (is_not_associated)
THEN
573 zero_coeff = 0.0_dp; tmp_coeff => zero_coeff
575 CALL para_env%sum(tmp_coeff)
577 tmp_coeff => jrho1_atom_set(iatom)%cjc_ii_h(ispin)%r_coef
578 IF (is_not_associated)
THEN
579 zero_coeff = 0.0_dp; tmp_coeff => zero_coeff
581 CALL para_env%sum(tmp_coeff)
583 tmp_coeff => jrho1_atom_set(iatom)%cjc_ii_s(ispin)%r_coef
584 IF (is_not_associated)
THEN
585 zero_coeff = 0.0_dp; tmp_coeff => zero_coeff
587 CALL para_env%sum(tmp_coeff)
589 tmp_coeff => jrho1_atom_set(iatom)%cjc_iii_h(ispin)%r_coef
590 IF (is_not_associated)
THEN
591 zero_coeff = 0.0_dp; tmp_coeff => zero_coeff
593 CALL para_env%sum(tmp_coeff)
595 tmp_coeff => jrho1_atom_set(iatom)%cjc_iii_s(ispin)%r_coef
596 IF (is_not_associated)
THEN
597 zero_coeff = 0.0_dp; tmp_coeff => zero_coeff
599 CALL para_env%sum(tmp_coeff)
601 IF (
ASSOCIATED(jrho1_atom_set(iatom)%cjc0_h(ispin)%r_coef)) &
602 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)
627 TYPE(qs_environment_type),
POINTER :: qs_env
628 TYPE(current_env_type) :: current_env
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
655 TYPE(atomic_kind_type),
DIMENSION(:),
POINTER :: atomic_kind_set
656 TYPE(dft_control_type),
POINTER :: dft_control
657 TYPE(grid_atom_type),
POINTER :: grid_atom
658 TYPE(gto_basis_set_type),
POINTER :: basis_1c_set
659 TYPE(harmonics_atom_type),
POINTER :: harmonics
660 TYPE(jrho_atom_type),
DIMENSION(:),
POINTER :: jrho1_atom_set
661 TYPE(jrho_atom_type),
POINTER :: jrho1_atom
662 TYPE(mp_para_env_type),
POINTER :: para_env
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) .LE. 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 .LE. 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 .LE. 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 .LE. lmax_expansion)
THEN
819 IF (lmax12 .GT. 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 .GT. lmax_expansion .OR. l .LT. .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 .GT. 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, &
1189 TYPE(jrho_atom_type),
POINTER :: jrho1_atom
1190 REAL(
dp),
DIMENSION(:, :),
POINTER :: jrho_h, jrho_s
1191 TYPE(grid_atom_type),
POINTER :: grid_atom
1192 TYPE(harmonics_atom_type),
POINTER :: harmonics
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 .NE. 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 .EQ. 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
1399 TYPE(current_env_type) :: current_env
1400 TYPE(qs_environment_type),
POINTER :: qs_env
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
1411 TYPE(atomic_kind_type),
DIMENSION(:),
POINTER :: atomic_kind_set
1412 TYPE(cell_type),
POINTER :: cell
1413 TYPE(mp_para_env_type),
POINTER :: para_env
1414 TYPE(dft_control_type),
POINTER :: dft_control
1415 TYPE(grid_atom_type),
POINTER :: grid_atom
1416 TYPE(harmonics_atom_type),
POINTER :: harmonics
1417 TYPE(jrho_atom_type),
DIMENSION(:),
POINTER :: jrho1_atom_set
1418 TYPE(jrho_atom_type),
POINTER :: jrho1_atom
1419 TYPE(particle_type),
DIMENSION(:),
POINTER :: particle_set
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) .LE. (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)
subroutine pbc(r, r_pbc, s, s_pbc, a, b, c, alpha, beta, gamma, debug, info, pbc0, h, hinv)
...
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)
...
Handles all functions related to the CELL.
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
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
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, 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_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, 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, 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, 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_r3d_rs_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_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, basis_type, total_zeff_corr)
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_rad(qs_env, current_env, 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.
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 allocate_jrho_coeff(jrho1_atom_set, iatom, nsotot)
...
subroutine, public set2zero_jrho_atom_rad(jrho1_atom, ispin)
...
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_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)
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