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(:, :) :: 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
132 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: mat_a, mat_b, mat_c, mat_d
139 DIMENSION(:),
POINTER :: nl_iterator
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)
321 row=iatom, col=jatom, block=a_block(ispin)%r_coef, &
323 jmax = jmax + maxval(abs(a_block(ispin)%r_coef))
325 row=iatom, col=jatom, block=b_block(ispin)%r_coef, &
327 jmax = jmax + maxval(abs(b_block(ispin)%r_coef))
329 row=iatom, col=jatom, block=c_block(ispin)%r_coef, &
331 jmax = jmax + maxval(abs(c_block(ispin)%r_coef))
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)
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) .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)
subroutine, public get_qs_env(qs_env, atomic_kind_set, qs_kind_set, cell, super_cell, cell_ref, use_ref_cell, kpoints, dft_control, mos, sab_orb, sab_all, qmmm, qmmm_periodic, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, ecoul_1c, rho0_s_rs, rho0_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, harris_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs)
Get the QUICKSTEP environment.