227 adiabatic_rescale_factor, kind_set_external, &
228 rho_atom_set_external, xc_section_external, calculate_forces, &
229 composite_vxc_rho, composite_vxc_tau, composite_reference_active, &
230 direct_valence_atom_grid, atom_composite_grid)
233 LOGICAL,
INTENT(IN) :: energy_only
234 REAL(
dp),
INTENT(INOUT) :: exc1
235 REAL(
dp),
INTENT(IN),
OPTIONAL :: adiabatic_rescale_factor
237 POINTER :: kind_set_external
239 POINTER :: rho_atom_set_external
241 LOGICAL,
INTENT(IN),
OPTIONAL :: calculate_forces
243 POINTER :: composite_vxc_rho, composite_vxc_tau
244 LOGICAL,
INTENT(OUT),
OPTIONAL :: composite_reference_active
245 LOGICAL,
INTENT(IN),
OPTIONAL :: direct_valence_atom_grid, &
248 CHARACTER(LEN=*),
PARAMETER :: routinen =
'calculate_vxc_atom'
250 INTEGER :: adjoint_bin, adjoint_entry, adjoint_nbins, adjoint_nchannels, &
251 adjoint_tile_count(3), adjoint_tile_lower(3), adjoint_tile_upper(3), &
252 atom_composite_components, bo(2), composite_descriptor_target_image, &
253 composite_image_periodicity(3), composite_local_atom, composite_local_natom, &
254 composite_nflat, composite_partition_target_image, composite_pw_nflat, composite_row, &
255 gapw_density_partition, gapw_representation, handle, ia, iat, iatom, icomponent, idir, &
256 ikind, image_i1, image_i2, image_i3, image_lower(3), image_shell(3), image_shift(3), &
257 image_upper(3), ir, ispin, iw, jdir, myfun, na
258 INTEGER :: natom, nr, nspins, num_pe, on, source_atom, target_atom, xc_deriv_method_id, &
259 xc_rho_smooth_id, zatom
260 INTEGER(KIND=int_8),
ALLOCATABLE,
DIMENSION(:) :: composite_atomic_grid_sizes, &
261 composite_local_grid_sizes
262 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: adjoint_bin_offsets, adjoint_bin_rows, &
263 composite_atom_end, composite_atom_kind, composite_atom_kind_index, composite_atom_start, &
264 composite_grid_atom, composite_local_atoms
265 INTEGER,
DIMENSION(2, 3) :: bounds
266 INTEGER,
DIMENSION(:),
POINTER :: atom_list
267 LOGICAL :: accint, atom_composite_active, atom_composite_diagnostic, &
268 atom_composite_reference, direct_valence_atom_composite, donlcc, evaluate_hard, &
269 evaluate_soft, gradient_f, image_partition_atom_composite, lsd, my_calculate_forces, &
270 native_grid_diagnostics, nlcc, one_center_kind, paw_atom, paw_pseudopotentials, &
271 requested_atom_composite_grid, rho_g_valid, skala_atom_grid, source_matrix_local, tau_f, &
272 tau_r_valid, use_atom_composite_density, use_atom_composite_gradient, &
273 use_atom_composite_tau, use_virial
274 LOGICAL,
ALLOCATABLE,
DIMENSION(:) :: composite_partition_included
275 REAL(
dp) :: agr, alpha, atom_composite_exc, atom_composite_nelec, &
276 composite_cross_cutoff_max, composite_cross_density_max, composite_cross_grad_max, &
277 composite_cross_kin_max, composite_density_max, composite_density_min, &
278 composite_grad_max, composite_kin_max, composite_kin_min, composite_tau_integral, &
279 cross_cutoff, density_cut, descriptor_window_adjoint, descriptor_window_weight, exc_h, &
280 exc_s, feature_vxc_analytic, feature_vxc_fd, feature_vxc_minus, feature_vxc_plus, &
281 feature_vxc_step, gradient_cut, local_partition_weight, my_adiabatic_rescale_factor, &
282 nlcc_density, nlcc_spin_factor
283 REAL(
dp) :: one_center_density_field_contraction, one_center_density_matrix_contraction, &
284 one_center_field_contraction, one_center_gradient_field_contraction, &
285 one_center_gradient_matrix_contraction, one_center_matrix_contraction, &
286 one_center_rho_grad_field_contraction, one_center_rho_grad_matrix_contraction, &
287 one_center_tau_field_contraction, one_center_tau_matrix_contraction, &
288 one_center_tensor_contraction, partition_adjoint, partition_scale, partition_weight, &
289 smooth_grid_contraction, smooth_input_contraction, target_partition_adjoint, tau_cut, zeff
290 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: composite_atomic_grid_weight_grad, &
291 composite_atomic_grid_weights, composite_base_grid_weights, composite_distances, &
292 composite_grid_weight_grad, composite_grid_weights, composite_partition_weights, fw
293 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: composite_atom_coord_grad, composite_atom_coords, &
294 composite_cross_density, composite_cross_force, composite_cross_force_local, &
295 composite_cross_kin, composite_density, composite_density_grad, &
296 composite_descriptor_image_coords, composite_explicit_force, composite_grid_coord_force, &
297 composite_grid_coord_grad, composite_grid_coords, composite_kin, composite_kin_grad, &
298 composite_local_atom_coords, composite_model_atom_force, composite_moving_smooth_force, &
299 composite_nlcc_center_force, composite_nlcc_center_force_local, &
300 composite_nlcc_target_force
301 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: composite_partition_atom_coords, &
302 composite_partition_force, composite_partition_force_local, &
303 composite_partition_image_coords, composite_smooth_density_cache, &
304 composite_smooth_kin_cache, local_partition_datom
305 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :),
TARGET :: smooth_density_adjoint_storage, &
306 smooth_kin_adjoint_storage
307 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: composite_cross_grad, composite_grad, &
308 composite_grad_grad, composite_int_h, composite_int_s, composite_partition_datom, &
309 composite_partition_dstrain, composite_smooth_gradient_cache, vtau_h_local, vtau_s_local, &
310 vxc_h_local, vxc_s_local
311 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :, :),
TARGET :: smooth_grad_adjoint_storage
312 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :, :, :) :: vxg_h_local, vxg_s_local
313 REAL(
dp),
DIMENSION(1, 1, 1) :: tau_d
314 REAL(
dp),
DIMENSION(1, 1, 1, 1) :: rho_d
315 REAL(
dp),
DIMENSION(2) :: composite_smooth_density_adjoint_value, &
316 composite_smooth_density_value, composite_smooth_kin_adjoint_value, &
317 composite_smooth_kin_value, cross_density, cross_density_adjoint, cross_kin, &
319 REAL(
dp),
DIMENSION(3) :: composite_point, cross_displacement, cross_spatial_derivative, &
320 fractional, image_translation, nlcc_gradient, nlcc_spatial_derivative, &
321 skala_atom_force_h, skala_atom_force_s, spatial_derivative
322 REAL(
dp),
DIMENSION(3, 1) :: local_descriptor_datom
323 REAL(
dp),
DIMENSION(3, 2) :: composite_smooth_gradient_adjoint_value, &
324 composite_smooth_gradient_value, cross_density_spatial, cross_grad, cross_grad_adjoint, &
326 REAL(
dp),
DIMENSION(3, 3) :: composite_cross_image_virial, &
327 composite_cross_image_virial_local, composite_explicit_virial, composite_feature_virial, &
328 composite_interpolation_virial, composite_partition_strain_virial, &
329 local_descriptor_dstrain, local_partition_dstrain, nlcc_hessian, skala_atom_virial, &
330 skala_atom_virial_h, skala_atom_virial_s
331 REAL(
dp),
DIMENSION(3, 3, 2) :: cross_grad_spatial
332 REAL(
dp),
DIMENSION(4) :: feature_component_analytic, &
334 REAL(
dp),
DIMENSION(:, :),
POINTER :: rho_nlcc, smooth_density_adjoint, &
335 smooth_kin_adjoint, weight_h, weight_s
336 REAL(
dp),
DIMENSION(:, :, :),
POINTER :: composite_smooth_rho, composite_smooth_rhoa, &
337 composite_smooth_rhob, composite_smooth_tau, composite_smooth_tau_a, &
338 composite_smooth_tau_b, rho_h, rho_s, smooth_grad_adjoint, smooth_rho, smooth_rhoa, &
339 smooth_rhob, smooth_tau, smooth_tau_a, smooth_tau_b, tau_h, tau_s, vtau_h, vtau_s, vxc_h, &
341 REAL(
dp),
DIMENSION(:, :, :, :),
POINTER :: drho_h, drho_s, vxg_h, vxg_s
344 TYPE(
cp_3d_r_cp_type),
DIMENSION(3) :: composite_smooth_drho, composite_smooth_drhoa, &
345 composite_smooth_drhob, smooth_drho, smooth_drhoa, smooth_drhob
357 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
POINTER :: smooth_rho_r, smooth_tau_r, &
358 smooth_vxc_rho, smooth_vxc_tau
360 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: my_kind_set
362 TYPE(
rho_atom_coeff),
DIMENSION(:),
POINTER :: cpc_h, cpc_s, dr_h, dr_s, int_hh, &
365 TYPE(
rho_atom_type),
DIMENSION(:),
POINTER :: my_rho_atom_set
378 CALL timeset(routinen, handle)
381 NULLIFY (auxbas_pw_pool)
382 NULLIFY (my_kind_set)
383 NULLIFY (atomic_kind_set)
386 NULLIFY (gth_potential)
391 NULLIFY (particle_set)
395 NULLIFY (my_rho_atom_set)
397 NULLIFY (smooth_rho, smooth_rhoa, smooth_rhob, smooth_tau, smooth_tau_a, smooth_tau_b)
398 NULLIFY (composite_smooth_rho, composite_smooth_rhoa, composite_smooth_rhob, &
399 composite_smooth_tau, composite_smooth_tau_a, composite_smooth_tau_b)
400 NULLIFY (smooth_rho_g, smooth_rho_r, smooth_tau_r)
401 NULLIFY (smooth_vxc_rho, smooth_vxc_tau)
403 NULLIFY (smooth_drho(idir)%array, smooth_drhoa(idir)%array, smooth_drhob(idir)%array)
404 NULLIFY (composite_smooth_drho(idir)%array, &
405 composite_smooth_drhoa(idir)%array, &
406 composite_smooth_drhob(idir)%array)
408 NULLIFY (sgp_potential)
410 my_calculate_forces = .false.
411 IF (
PRESENT(calculate_forces)) my_calculate_forces = calculate_forces
412 IF (
PRESENT(composite_reference_active)) composite_reference_active = .false.
413 direct_valence_atom_composite = .false.
414 IF (
PRESENT(direct_valence_atom_grid))
THEN
415 direct_valence_atom_composite = direct_valence_atom_grid
417 requested_atom_composite_grid = .false.
418 IF (
PRESENT(atom_composite_grid)) requested_atom_composite_grid = atom_composite_grid
420 IF (
PRESENT(adiabatic_rescale_factor))
THEN
421 my_adiabatic_rescale_factor = adiabatic_rescale_factor
423 my_adiabatic_rescale_factor = 1.0_dp
427 dft_control=dft_control, &
430 atomic_kind_set=atomic_kind_set, &
431 qs_kind_set=my_kind_set, &
433 particle_set=particle_set, &
436 rho_atom_set=my_rho_atom_set, &
439 IF (dft_control%qs_control%gapw_xc)
THEN
440 CALL get_qs_env(qs_env=qs_env, rho_xc=rho_struct)
442 CALL get_qs_env(qs_env=qs_env, rho=rho_struct)
445 IF (
PRESENT(kind_set_external)) my_kind_set => kind_set_external
446 IF (
PRESENT(rho_atom_set_external)) my_rho_atom_set => rho_atom_set_external
449 accint = dft_control%qs_control%gapw_control%accurate_xcint
453 IF (
PRESENT(xc_section_external)) my_xc_section => xc_section_external
460 atom_composite_diagnostic = .false.
461 atom_composite_reference = .false.
462 paw_pseudopotentials = .false.
463 native_grid_diagnostics = .false.
464 atom_composite_components = 1
465 feature_vxc_step = 3.0e-3_dp
466 IF (skala_atom_grid)
THEN
468 cpassert(
ASSOCIATED(gauxc_section))
470 i_val=gapw_representation)
472 l_val=native_grid_diagnostics)
474 IF (skala_atom_grid)
THEN
475 DO ikind = 1,
SIZE(my_kind_set)
476 NULLIFY (gth_potential, sgp_potential)
477 CALL get_qs_kind(my_kind_set(ikind), paw_atom=paw_atom, &
478 gth_potential=gth_potential, sgp_potential=sgp_potential)
479 paw_pseudopotentials = paw_pseudopotentials .OR. &
480 (paw_atom .AND. (
ASSOCIATED(gth_potential) .OR. &
481 ASSOCIATED(sgp_potential)))
486 "NATIVE_GRID_GAPW_ATOM_COMPOSITE_DIAGNOSTIC", &
487 l_val=atom_composite_diagnostic)
489 "NATIVE_GRID_GAPW_ATOM_COMPOSITE_REFERENCE", &
490 l_val=atom_composite_reference)
492 "NATIVE_GRID_GAPW_ATOM_COMPOSITE_COMPONENTS", &
493 i_val=atom_composite_components)
495 "NATIVE_GRID_GAPW_ATOM_COMPOSITE_FD_STEP", &
496 r_val=feature_vxc_step)
498 atom_composite_reference = atom_composite_reference .OR. &
500 paw_pseudopotentials)
501 atom_composite_reference = atom_composite_reference .OR. requested_atom_composite_grid
502 atom_composite_reference = atom_composite_reference .OR. direct_valence_atom_composite
503 atom_composite_active = atom_composite_diagnostic .OR. atom_composite_reference
504 use_atom_composite_density = atom_composite_components <= 2
505 use_atom_composite_gradient = atom_composite_components <= 2
506 use_atom_composite_tau = atom_composite_components == 1 .OR. &
507 atom_composite_components == 3
508 IF (atom_composite_active)
THEN
509 CALL ensure_native_skala_atom_grids(my_kind_set, dft_control)
511 IF (direct_valence_atom_composite)
THEN
512 use_atom_composite_density = .false.
513 use_atom_composite_gradient = .false.
514 use_atom_composite_tau = .false.
518 image_partition_atom_composite = atom_composite_active
519 composite_image_periodicity = 1
520 IF (
PRESENT(composite_reference_active)) composite_reference_active = atom_composite_reference
522 IF (skala_atom_grid)
THEN
525 use_virial =
ASSOCIATED(virial)
526 IF (use_virial) use_virial = my_calculate_forces .AND. &
527 virial%pv_calculate .AND. (.NOT. virial%pv_numer)
531 my_rho_atom_set(:)%exc_h = 0.0_dp
532 my_rho_atom_set(:)%exc_s = 0.0_dp
541 lsd = dft_control%lsd
542 nspins = dft_control%nspins
545 calc_potential=.true.)
547 gradient_f = (needs%drho .OR. needs%drho_spin) .OR. skala_atom_grid
548 tau_f = (needs%tau .OR. needs%tau_spin) .OR. skala_atom_grid
550 IF (atom_composite_active)
THEN
552 needs%rho_spin = .true.
553 needs%drho_spin = .true.
554 needs%tau_spin = .true.
561 ALLOCATE (composite_atomic_grid_sizes(
SIZE(particle_set)), &
562 composite_atom_kind(
SIZE(particle_set)), &
563 composite_atom_kind_index(
SIZE(particle_set)), &
564 composite_atom_start(
SIZE(particle_set)), &
565 composite_atom_end(
SIZE(particle_set)), &
566 composite_atom_coords(3,
SIZE(particle_set)), &
567 composite_partition_weights(
SIZE(particle_set)), &
568 composite_partition_atom_coords(3,
SIZE(particle_set)), &
569 composite_distances(
SIZE(particle_set)))
570 composite_atomic_grid_sizes = 0_int_8
571 composite_atom_kind = 0
572 composite_atom_kind_index = 0
573 composite_atom_start = 0
574 composite_atom_end = 0
575 DO iatom = 1,
SIZE(particle_set)
576 composite_atom_coords(:, iatom) = particle_set(iatom)%r
578 DO ikind = 1,
SIZE(atomic_kind_set)
579 CALL get_atomic_kind(atomic_kind_set(ikind), atom_list=atom_list, natom=natom)
580 NULLIFY (gth_potential, sgp_potential)
581 CALL get_qs_kind(my_kind_set(ikind), paw_atom=paw_atom, &
582 gth_potential=gth_potential, grid_atom=grid_atom, &
583 sgp_potential=sgp_potential, zatom=zatom, zeff=zeff)
585 iatom = atom_list(iat)
586 composite_atomic_grid_sizes(iatom) = int(grid_atom%nr*grid_atom%ng_sphere, kind=
int_8)
587 composite_atom_kind(iatom) = ikind
588 composite_atom_kind_index(iatom) = iat
591 IF (any(composite_atomic_grid_sizes <= 0_int_8))
THEN
592 CALL cp_abort(__location__, &
593 "The atom-composite diagnostic requires a GAPW one-center grid for every atom.")
596 composite_local_natom = 0
597 DO ikind = 1,
SIZE(atomic_kind_set)
598 CALL get_atomic_kind(atomic_kind_set(ikind), atom_list=atom_list, natom=natom)
599 NULLIFY (gth_potential, sgp_potential)
600 CALL get_qs_kind(my_kind_set(ikind), paw_atom=paw_atom, &
601 gth_potential=gth_potential, sgp_potential=sgp_potential, &
602 zatom=zatom, zeff=zeff)
603 bo =
get_limit(natom, para_env%num_pe, para_env%mepos)
604 composite_local_natom = composite_local_natom + max(0, bo(2) - bo(1) + 1)
606 ALLOCATE (composite_local_atoms(composite_local_natom), &
607 composite_local_grid_sizes(composite_local_natom), &
608 composite_local_atom_coords(3, composite_local_natom))
609 composite_local_atom = 0
611 DO ikind = 1,
SIZE(atomic_kind_set)
612 CALL get_atomic_kind(atomic_kind_set(ikind), atom_list=atom_list, natom=natom)
613 NULLIFY (gth_potential, sgp_potential)
614 CALL get_qs_kind(my_kind_set(ikind), paw_atom=paw_atom, &
615 gth_potential=gth_potential, sgp_potential=sgp_potential, &
616 zatom=zatom, zeff=zeff)
617 bo =
get_limit(natom, para_env%num_pe, para_env%mepos)
618 DO iat = bo(1), bo(2)
619 iatom = atom_list(iat)
620 composite_local_atom = composite_local_atom + 1
621 composite_local_atoms(composite_local_atom) = iatom
622 composite_local_grid_sizes(composite_local_atom) = &
623 composite_atomic_grid_sizes(iatom)
624 composite_local_atom_coords(:, composite_local_atom) = &
625 composite_atom_coords(:, iatom)
626 composite_atom_start(iatom) = composite_nflat + 1
627 composite_nflat = composite_nflat + int(composite_atomic_grid_sizes(iatom))
628 composite_atom_end(iatom) = composite_nflat
631 cpassert(composite_local_atom == composite_local_natom)
632 ALLOCATE (composite_density(composite_nflat, 2), &
633 composite_grad(composite_nflat, 3, 2), &
634 composite_kin(composite_nflat, 2), &
635 composite_grid_atom(composite_nflat), &
636 composite_smooth_density_cache(composite_nflat, 2), &
637 composite_smooth_gradient_cache(composite_nflat, 3, 2), &
638 composite_smooth_kin_cache(composite_nflat, 2), &
639 composite_grid_coords(3, composite_nflat), &
640 composite_grid_weights(composite_nflat), &
641 composite_base_grid_weights(composite_nflat), &
642 composite_atomic_grid_weights(composite_nflat))
643 composite_density = 0.0_dp
644 composite_grad = 0.0_dp
645 composite_kin = 0.0_dp
646 DO composite_local_atom = 1, composite_local_natom
647 iatom = composite_local_atoms(composite_local_atom)
648 composite_grid_atom(composite_atom_start(iatom):composite_atom_end(iatom)) = iatom
650 composite_smooth_density_cache = 0.0_dp
651 composite_smooth_gradient_cache = 0.0_dp
652 composite_smooth_kin_cache = 0.0_dp
653 composite_grid_coords = 0.0_dp
654 composite_grid_weights = 0.0_dp
655 composite_base_grid_weights = 0.0_dp
656 composite_atomic_grid_weights = 0.0_dp
658 CALL qs_rho_get(rho_struct, rho_r=smooth_rho_r, rho_g=smooth_rho_g, &
659 tau_r=smooth_tau_r, rho_g_valid=rho_g_valid, &
660 tau_r_valid=tau_r_valid)
661 cpassert(rho_g_valid)
662 cpassert(tau_r_valid)
663 cpassert(
ASSOCIATED(smooth_rho_r))
664 cpassert(
ASSOCIATED(smooth_rho_g))
665 cpassert(
ASSOCIATED(smooth_tau_r))
667 cell, composite_nflat, image_partition_atom_composite)
668 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
670 i_val=xc_deriv_method_id)
672 i_val=xc_rho_smooth_id)
677 CALL xc_rho_set_update(smooth_rho_set, smooth_rho_r, smooth_rho_g, smooth_tau_r, needs, &
678 xc_deriv_method_id, xc_rho_smooth_id, auxbas_pw_pool)
680 CALL xc_rho_set_get(smooth_rho_set, rhoa=smooth_rhoa, rhob=smooth_rhob, &
681 drhoa=smooth_drhoa, drhob=smooth_drhob, &
682 tau_a=smooth_tau_a, tau_b=smooth_tau_b)
683 CALL gather_native_grid_field(smooth_rhoa, smooth_rho_r(1)%pw_grid, para_env, &
684 composite_smooth_rhoa)
685 CALL gather_native_grid_field(smooth_rhob, smooth_rho_r(1)%pw_grid, para_env, &
686 composite_smooth_rhob)
687 CALL gather_native_grid_field(smooth_tau_a, smooth_rho_r(1)%pw_grid, para_env, &
688 composite_smooth_tau_a)
689 CALL gather_native_grid_field(smooth_tau_b, smooth_rho_r(1)%pw_grid, para_env, &
690 composite_smooth_tau_b)
692 CALL gather_native_grid_field(smooth_drhoa(idir)%array, &
693 smooth_rho_r(1)%pw_grid, para_env, &
694 composite_smooth_drhoa(idir)%array)
695 CALL gather_native_grid_field(smooth_drhob(idir)%array, &
696 smooth_rho_r(1)%pw_grid, para_env, &
697 composite_smooth_drhob(idir)%array)
700 CALL xc_rho_set_get(smooth_rho_set, rho=smooth_rho, drho=smooth_drho, &
702 CALL gather_native_grid_field(smooth_rho, smooth_rho_r(1)%pw_grid, para_env, &
703 composite_smooth_rho)
704 CALL gather_native_grid_field(smooth_tau, smooth_rho_r(1)%pw_grid, para_env, &
705 composite_smooth_tau)
707 CALL gather_native_grid_field(smooth_drho(idir)%array, &
708 smooth_rho_r(1)%pw_grid, para_env, &
709 composite_smooth_drho(idir)%array)
718 NULLIFY (rho_h, drho_h, rho_s, drho_s, weight_h, weight_s)
719 NULLIFY (vxc_h, vxc_s, vxg_h, vxg_s)
720 NULLIFY (tau_h, tau_s)
721 NULLIFY (vtau_h, vtau_s)
725 DO ikind = 1,
SIZE(atomic_kind_set)
726 CALL get_atomic_kind(atomic_kind_set(ikind), atom_list=atom_list, natom=natom)
727 NULLIFY (gth_potential, sgp_potential)
728 CALL get_qs_kind(my_kind_set(ikind), paw_atom=paw_atom, &
729 gth_potential=gth_potential, harmonics=harmonics, &
730 grid_atom=grid_atom, sgp_potential=sgp_potential, &
731 zatom=zatom, zeff=zeff)
732 one_center_kind = .NOT. direct_valence_atom_composite
733 IF (one_center_kind)
THEN
734 CALL get_qs_kind(my_kind_set(ikind), basis_set=basis_1c, basis_type=
"GAPW_1C")
735 one_center_kind = paw_atom
736 IF (skala_atom_grid)
THEN
737 one_center_kind = native_skala_uses_one_center_kind( &
738 paw_atom, gapw_representation, &
739 ASSOCIATED(gth_potential) .OR.
ASSOCIATED(sgp_potential), &
743 IF (.NOT. one_center_kind .AND. .NOT. atom_composite_active) cycle
746 na = grid_atom%ng_sphere
748 IF (one_center_kind)
THEN
759 weight_h => grid_atom%weight
760 weight_s => grid_atom%weight
762 on = dft_control%qs_control%gapw_control%oweights
763 alpha = dft_control%qs_control%gapw_control%aw(ikind)
764 IF (
ASSOCIATED(grid_atom%gapw_weight_s))
THEN
765 IF (grid_atom%gapw_weight_alpha /= alpha)
DEALLOCATE (grid_atom%gapw_weight_s)
767 IF (.NOT.
ASSOCIATED(grid_atom%gapw_weight_s))
THEN
768 ALLOCATE (grid_atom%gapw_weight_s(na, nr))
772 agr = 1.0_dp - fw(ir)
773 grid_atom%gapw_weight_s(:, ir) = agr*grid_atom%weight(:, ir)
776 grid_atom%gapw_weight_alpha = alpha
778 weight_s => grid_atom%gapw_weight_s
785 drho_cutoff=gradient_cut, tau_cutoff=tau_cut)
787 drho_cutoff=gradient_cut, tau_cutoff=tau_cut)
793 CALL reallocate(rho_h, 1, na, 1, nr, 1, nspins)
794 CALL reallocate(rho_s, 1, na, 1, nr, 1, nspins)
795 CALL reallocate(vxc_h, 1, na, 1, nr, 1, nspins)
796 CALL reallocate(vxc_s, 1, na, 1, nr, 1, nspins)
799 CALL reallocate(drho_h, 1, 4, 1, na, 1, nr, 1, nspins)
800 CALL reallocate(drho_s, 1, 4, 1, na, 1, nr, 1, nspins)
801 CALL reallocate(vxg_h, 1, 3, 1, na, 1, nr, 1, nspins)
802 CALL reallocate(vxg_s, 1, 3, 1, na, 1, nr, 1, nspins)
807 CALL reallocate(tau_h, 1, na, 1, nr, 1, nspins)
808 CALL reallocate(tau_s, 1, na, 1, nr, 1, nspins)
809 CALL reallocate(vtau_h, 1, na, 1, nr, 1, nspins)
810 CALL reallocate(vtau_s, 1, na, 1, nr, 1, nspins)
817 rho_nlcc => my_kind_set(ikind)%nlcc_pot
818 IF (
ASSOCIATED(rho_nlcc)) donlcc = .true.
824 num_pe = para_env%num_pe
825 bo =
get_limit(natom, para_env%num_pe, para_env%mepos)
827 DO iat = bo(1), bo(2)
828 iatom = atom_list(iat)
830 IF (one_center_kind)
THEN
831 my_rho_atom_set(iatom)%exc_h = 0.0_dp
832 my_rho_atom_set(iatom)%exc_s = 0.0_dp
834 rho_atom => my_rho_atom_set(iatom)
838 NULLIFY (r_h, r_s, dr_h, dr_s, r_h_d, r_s_d)
840 rho_rad_s=r_s, drho_rad_h=dr_h, &
841 drho_rad_s=dr_s, rho_rad_h_d=r_h_d, &
847 CALL get_rho_atom(rho_atom=rho_atom, rho_rad_h=r_h, rho_rad_s=r_s)
851 CALL calc_tau_atom(tau_h, tau_s, rho_atom, tau_basis_cache, nspins)
858 ir, r_h, r_s, rho_h, rho_s, dr_h, dr_s, &
859 r_h_d, r_s_d, drho_h, drho_s)
862 ir, rho_nlcc(:, 1), rho_h, rho_s, &
863 rho_nlcc(:, 2), drho_h, drho_s)
868 IF (atom_composite_active)
THEN
869 IF (image_partition_atom_composite)
THEN
871 composite_atom_coords, cell, iatom, composite_image_periodicity, &
872 composite_partition_image_coords, composite_partition_target_image)
874 composite_atom_coords(:, iatom:iatom), cell, 1, &
875 composite_image_periodicity, composite_descriptor_image_coords, &
876 composite_descriptor_target_image)
901 composite_row = composite_atom_start(iatom) + (ir - 1)*na + ia - 1
902 composite_point(1) = particle_set(iatom)%r(1) + grid_atom%rad(ir)* &
903 grid_atom%sin_pol(ia)*grid_atom%cos_azi(ia)
904 composite_point(2) = particle_set(iatom)%r(2) + grid_atom%rad(ir)* &
905 grid_atom%sin_pol(ia)*grid_atom%sin_azi(ia)
906 composite_point(3) = particle_set(iatom)%r(3) + &
907 grid_atom%rad(ir)*grid_atom%cos_pol(ia)
908 composite_grid_coords(:, composite_row) = composite_point
909 IF (image_partition_atom_composite)
THEN
911 composite_point, composite_partition_image_coords, &
912 composite_partition_target_image, partition_weight)
916 composite_point, composite_descriptor_image_coords, &
917 composite_descriptor_target_image, descriptor_window_weight)
919 descriptor_window_weight)
922 composite_point, composite_atom_coords, cell, &
923 composite_partition_weights, composite_partition_atom_coords, &
925 partition_weight = composite_partition_weights(iatom)
926 partition_scale = 1.0_dp
928 composite_base_grid_weights(composite_row) = grid_atom%weight(ia, ir)
929 composite_atomic_grid_weights(composite_row) = &
930 composite_base_grid_weights(composite_row)*partition_scale
931 composite_grid_weights(composite_row) = &
932 composite_base_grid_weights(composite_row)* &
935 composite_point, interpolation_stencil))
THEN
936 CALL create_native_grid_interpolation_stencil( &
937 interpolation_stencil, smooth_rho_r(1)%pw_grid, cell, composite_point, &
938 image_partition_atom_composite)
940 composite_point, interpolation_stencil)
943 CALL interpolate_native_grid_fields( &
944 composite_smooth_rhoa, composite_smooth_drhoa(1)%array, &
945 composite_smooth_drhoa(2)%array, composite_smooth_drhoa(3)%array, &
946 composite_smooth_tau_a, interpolation_stencil, &
947 composite_smooth_density_value(1), &
948 composite_smooth_gradient_value(:, 1), &
949 composite_smooth_kin_value(1))
950 CALL interpolate_native_grid_fields( &
951 composite_smooth_rhob, composite_smooth_drhob(1)%array, &
952 composite_smooth_drhob(2)%array, composite_smooth_drhob(3)%array, &
953 composite_smooth_tau_b, interpolation_stencil, &
954 composite_smooth_density_value(2), &
955 composite_smooth_gradient_value(:, 2), &
956 composite_smooth_kin_value(2))
957 composite_smooth_density_cache(composite_row, :) = &
958 composite_smooth_density_value
959 composite_smooth_gradient_cache(composite_row, :, :) = &
960 composite_smooth_gradient_value
961 composite_smooth_kin_cache(composite_row, :) = &
962 composite_smooth_kin_value
964 composite_density(composite_row, ispin) = &
965 composite_smooth_density_value(ispin)
966 composite_grad(composite_row, :, ispin) = &
967 composite_smooth_gradient_value(:, ispin)
968 composite_kin(composite_row, ispin) = &
969 composite_smooth_kin_value(ispin)
970 IF (one_center_kind .AND. use_atom_composite_density)
THEN
971 composite_density(composite_row, ispin) = &
972 composite_density(composite_row, ispin) + &
973 rho_h(ia, ir, ispin) - rho_s(ia, ir, ispin)
975 IF (one_center_kind .AND. use_atom_composite_gradient)
THEN
977 composite_grad(composite_row, idir, ispin) = &
978 composite_grad(composite_row, idir, ispin) + &
979 drho_h(idir, ia, ir, ispin) - drho_s(idir, ia, ir, ispin)
982 IF (one_center_kind .AND. use_atom_composite_tau)
THEN
983 composite_kin(composite_row, ispin) = &
984 composite_kin(composite_row, ispin) + &
985 tau_h(ia, ir, ispin) - tau_s(ia, ir, ispin)
989 CALL interpolate_native_grid_fields( &
990 composite_smooth_rho, composite_smooth_drho(1)%array, &
991 composite_smooth_drho(2)%array, composite_smooth_drho(3)%array, &
992 composite_smooth_tau, interpolation_stencil, &
993 composite_smooth_density_value(1), &
994 composite_smooth_gradient_value(:, 1), &
995 composite_smooth_kin_value(1))
996 composite_smooth_density_cache(composite_row, 1) = &
997 composite_smooth_density_value(1)
998 composite_smooth_gradient_cache(composite_row, :, 1) = &
999 composite_smooth_gradient_value(:, 1)
1000 composite_smooth_kin_cache(composite_row, 1) = &
1001 composite_smooth_kin_value(1)
1002 composite_density(composite_row, :) = &
1003 0.5_dp*composite_smooth_density_value(1)
1005 composite_grad(composite_row, idir, :) = &
1006 0.5_dp*composite_smooth_gradient_value(idir, 1)
1008 composite_kin(composite_row, :) = &
1009 0.5_dp*composite_smooth_kin_value(1)
1010 IF (one_center_kind .AND. use_atom_composite_density)
THEN
1011 composite_density(composite_row, :) = &
1012 composite_density(composite_row, :) + &
1013 0.5_dp*(rho_h(ia, ir, 1) - rho_s(ia, ir, 1))
1015 IF (one_center_kind .AND. use_atom_composite_gradient)
THEN
1017 composite_grad(composite_row, idir, :) = &
1018 composite_grad(composite_row, idir, :) + &
1019 0.5_dp*(drho_h(idir, ia, ir, 1) - &
1020 drho_s(idir, ia, ir, 1))
1023 IF (one_center_kind .AND. use_atom_composite_tau)
THEN
1024 composite_kin(composite_row, :) = composite_kin(composite_row, :) + &
1025 0.5_dp*(tau_h(ia, ir, 1) - &
1029 IF (atom_composite_reference .AND. nlcc)
THEN
1030 nlcc_spin_factor = merge(1.0_dp, 0.5_dp, lsd)
1031 DO source_atom = 1,
SIZE(particle_set)
1032 NULLIFY (gth_potential, sgp_potential)
1033 CALL get_qs_kind(my_kind_set(composite_atom_kind(source_atom)), &
1034 gth_potential=gth_potential, &
1035 sgp_potential=sgp_potential)
1037 composite_point, particle_set(source_atom)%r, &
1038 gth_potential, sgp_potential, nlcc_density, &
1039 nlcc_gradient, nlcc_hessian)
1040 composite_density(composite_row, :) = &
1041 composite_density(composite_row, :) + &
1042 nlcc_spin_factor*nlcc_density
1044 composite_grad(composite_row, idir, :) = &
1045 composite_grad(composite_row, idir, :) + &
1046 nlcc_spin_factor*nlcc_gradient(idir)
1053 IF (image_partition_atom_composite)
THEN
1054 DEALLOCATE (composite_descriptor_image_coords, composite_partition_image_coords)
1056 cpassert(nr*na == composite_atom_end(iatom) - composite_atom_start(iatom) + 1)
1059 IF (.NOT. one_center_kind) cycle
1063 CALL fill_rho_set(rho_set_h, lsd, nspins, needs, rho_h, drho_h, tau_h, na, ir)
1064 CALL fill_rho_set(rho_set_s, lsd, nspins, needs, rho_s, drho_s, tau_s, na, ir)
1065 ELSE IF (gradient_f)
THEN
1066 CALL fill_rho_set(rho_set_h, lsd, nspins, needs, rho_h, drho_h, tau_d, na, ir)
1067 CALL fill_rho_set(rho_set_s, lsd, nspins, needs, rho_s, drho_s, tau_d, na, ir)
1069 CALL fill_rho_set(rho_set_h, lsd, nspins, needs, rho_h, rho_d, tau_d, na, ir)
1070 CALL fill_rho_set(rho_set_s, lsd, nspins, needs, rho_s, rho_d, tau_d, na, ir)
1074 evaluate_hard = .true.
1075 evaluate_soft = .true.
1076 skala_atom_force_h = 0.0_dp
1077 skala_atom_force_s = 0.0_dp
1078 skala_atom_virial_h = 0.0_dp
1079 skala_atom_virial_s = 0.0_dp
1080 IF (skala_atom_grid)
THEN
1081 SELECT CASE (gapw_density_partition)
1085 evaluate_soft = .false.
1087 evaluate_hard = .false.
1089 evaluate_hard = .false.
1090 evaluate_soft = .false.
1092 CALL cp_abort(__location__, &
1093 "Unknown GAUXC%NATIVE_GRID_GAPW_DENSITY_PARTITION value.")
1096 IF (atom_composite_reference)
THEN
1097 evaluate_hard = .false.
1098 evaluate_soft = .false.
1105 IF (.NOT. evaluate_hard)
THEN
1107 IF (.NOT. energy_only)
THEN
1109 IF (
ASSOCIATED(vxg_h)) vxg_h = 0.0_dp
1110 IF (
ASSOCIATED(vtau_h)) vtau_h = 0.0_dp
1112 ELSE IF (skala_atom_grid)
THEN
1114 my_xc_section, grid_atom, para_env, particle_set(iatom)%r, &
1115 rho_h, drho_h, tau_h, weight_h, lsd, nspins, na, nr, &
1116 exc_h, vxc_h, vxg_h, vtau_h, energy_only=energy_only, &
1117 atom_force=skala_atom_force_h, atom_virial=skala_atom_virial_h)
1119 CALL vxc_of_r_new(xc_fun_section, rho_set_h, deriv_set, 1, needs, weight_h, &
1120 lsd, na, nr, exc_h, vxc_h, vxg_h, vtau_h, energy_only=energy_only, &
1121 adiabatic_rescale_factor=my_adiabatic_rescale_factor)
1123 rho_atom%exc_h = rho_atom%exc_h + exc_h
1129 IF (.NOT. evaluate_soft)
THEN
1131 IF (.NOT. energy_only)
THEN
1133 IF (
ASSOCIATED(vxg_s)) vxg_s = 0.0_dp
1134 IF (
ASSOCIATED(vtau_s)) vtau_s = 0.0_dp
1136 ELSE IF (skala_atom_grid)
THEN
1138 my_xc_section, grid_atom, para_env, particle_set(iatom)%r, &
1139 rho_s, drho_s, tau_s, weight_s, lsd, nspins, na, nr, &
1140 exc_s, vxc_s, vxg_s, vtau_s, energy_only=energy_only, &
1141 atom_force=skala_atom_force_s, atom_virial=skala_atom_virial_s)
1143 CALL vxc_of_r_new(xc_fun_section, rho_set_s, deriv_set, 1, needs, weight_s, &
1144 lsd, na, nr, exc_s, vxc_s, vxg_s, vtau_s, energy_only=energy_only, &
1145 adiabatic_rescale_factor=my_adiabatic_rescale_factor)
1147 rho_atom%exc_s = rho_atom%exc_s + exc_s
1151 exc1 = exc1 + rho_atom%exc_h - rho_atom%exc_s
1152 IF (skala_atom_grid .AND. my_calculate_forces .AND.
ASSOCIATED(force))
THEN
1153 force(ikind)%rho_elec(:, iat) = force(ikind)%rho_elec(:, iat) + &
1154 skala_atom_force_h - skala_atom_force_s
1156 IF (skala_atom_grid .AND. use_virial)
THEN
1157 skala_atom_virial = skala_atom_virial_h - skala_atom_virial_s
1160 virial%pv_gapw(idir, jdir) = virial%pv_gapw(idir, jdir) + &
1161 skala_atom_virial(idir, jdir)
1162 virial%pv_virial(idir, jdir) = virial%pv_virial(idir, jdir) + &
1163 skala_atom_virial(idir, jdir)
1172 IF (.NOT. energy_only)
THEN
1173 NULLIFY (int_hh, int_ss)
1174 CALL get_rho_atom(rho_atom=rho_atom, ga_vlocal_gb_h=int_hh, ga_vlocal_gb_s=int_ss)
1175 IF (gradient_f)
THEN
1176 CALL gavxcgb_gc(vxc_h, vxc_s, vxg_h, vxg_s, int_hh, int_ss, &
1177 grid_atom, basis_1c, harmonics, nspins)
1180 grid_atom, basis_1c, harmonics, nspins)
1183 CALL dgavtaudgb(vtau_h, vtau_s, int_hh, int_ss, tau_basis_cache, nspins)
1186 NULLIFY (r_h, r_s, dr_h, dr_s)
1189 IF (one_center_kind)
THEN
1198 IF (atom_composite_active)
THEN
1199 ALLOCATE (composite_cross_density(composite_nflat, 2), &
1200 composite_cross_grad(composite_nflat, 3, 2), &
1201 composite_cross_kin(composite_nflat, 2))
1202 composite_cross_density = 0.0_dp
1203 composite_cross_grad = 0.0_dp
1204 composite_cross_kin = 0.0_dp
1205 composite_cross_cutoff_max = 0.0_dp
1206 IF (.NOT. direct_valence_atom_composite)
THEN
1207 DO ikind = 1,
SIZE(atomic_kind_set)
1208 CALL get_atomic_kind(atomic_kind_set(ikind), atom_list=atom_list, natom=natom)
1209 NULLIFY (gth_potential, sgp_potential)
1210 CALL get_qs_kind(my_kind_set(ikind), paw_atom=paw_atom, &
1211 gth_potential=gth_potential, harmonics=harmonics, &
1212 grid_atom=grid_atom, sgp_potential=sgp_potential, &
1213 zatom=zatom, zeff=zeff)
1214 CALL get_qs_kind(my_kind_set(ikind), basis_set=basis_1c, basis_type=
"GAPW_1C")
1215 IF (.NOT. native_skala_uses_one_center_kind( &
1216 paw_atom, gapw_representation, &
1217 ASSOCIATED(gth_potential) .OR.
ASSOCIATED(sgp_potential), &
1221 para_env, my_rho_atom_set, my_kind_set(ikind), atom_list, natom, nspins)
1223 na = grid_atom%ng_sphere
1225 CALL reallocate(rho_h, 1, na, 1, nr, 1, nspins)
1226 CALL reallocate(rho_s, 1, na, 1, nr, 1, nspins)
1227 CALL reallocate(drho_h, 1, 4, 1, na, 1, nr, 1, nspins)
1228 CALL reallocate(drho_s, 1, 4, 1, na, 1, nr, 1, nspins)
1229 CALL reallocate(tau_h, 1, na, 1, nr, 1, nspins)
1230 CALL reallocate(tau_s, 1, na, 1, nr, 1, nspins)
1235 source_atom = atom_list(iat)
1236 rho_atom => my_rho_atom_set(source_atom)
1237 NULLIFY (r_h, r_s, dr_h, dr_s, r_h_d, r_s_d)
1238 CALL get_rho_atom(rho_atom=rho_atom, rho_rad_h=r_h, rho_rad_s=r_s, &
1239 drho_rad_h=dr_h, drho_rad_s=dr_s, &
1240 rho_rad_h_d=r_h_d, rho_rad_s_d=r_s_d)
1245 CALL calc_tau_atom(tau_h, tau_s, rho_atom, tau_basis_cache, nspins)
1248 ir, r_h, r_s, rho_h, rho_s, dr_h, dr_s, &
1249 r_h_d, r_s_d, drho_h, drho_s)
1253 grid_atom, rho_h, rho_s, drho_h, drho_s, tau_h, tau_s)
1254 IF (cross_cutoff <= 0.0_dp) cycle
1255 composite_cross_cutoff_max = max(composite_cross_cutoff_max, cross_cutoff)
1258 IF (cell%perd(idir) == 1)
THEN
1259 image_shell(idir) = ceiling( &
1260 cross_cutoff*sqrt(sum(cell%h_inv(idir, :)**2))) + 1
1274 DO composite_row = 1, composite_nflat
1275 target_atom = composite_grid_atom(composite_row)
1279 fractional(idir) = fractional(idir) + cell%h_inv(idir, jdir)* &
1280 (composite_grid_coords(jdir, composite_row) - &
1281 particle_set(source_atom)%r(jdir))
1284 CALL atom_grid_image_bounds(cell, fractional, cross_cutoff, image_shell, &
1285 image_lower, image_upper)
1286 DO image_i3 = image_lower(3), image_upper(3)
1287 DO image_i2 = image_lower(2), image_upper(2)
1288 DO image_i1 = image_lower(1), image_upper(1)
1289 image_shift = [image_i1, image_i2, image_i3]
1290 IF (target_atom == source_atom .AND. &
1291 all(image_shift == 0)) cycle
1292 image_translation = matmul( &
1293 cell%hmat, real(image_shift,
dp))
1294 cross_displacement = composite_grid_coords(:, composite_row) - &
1295 particle_set(source_atom)%r - &
1297 IF (sqrt(sum(cross_displacement**2)) > cross_cutoff) cycle
1298 CALL interpolate_gapw_atom_grid_fields( &
1299 grid_atom, harmonics, cross_displacement, cross_cutoff, nspins, &
1300 rho_h, rho_s, drho_h, drho_s, tau_h, tau_s, &
1301 cross_density, cross_grad, cross_kin, cross_density_spatial, &
1302 cross_grad_spatial, cross_kin_spatial, calculate_spatial=.false.)
1304 IF (use_atom_composite_density)
THEN
1305 composite_cross_density(composite_row, 1:2) = &
1306 composite_cross_density(composite_row, 1:2) + &
1309 IF (use_atom_composite_gradient)
THEN
1310 composite_cross_grad(composite_row, :, 1:2) = &
1311 composite_cross_grad(composite_row, :, 1:2) + &
1314 IF (use_atom_composite_tau)
THEN
1315 composite_cross_kin(composite_row, 1:2) = &
1316 composite_cross_kin(composite_row, 1:2) + cross_kin(1:2)
1319 IF (use_atom_composite_density)
THEN
1320 composite_cross_density(composite_row, :) = &
1321 composite_cross_density(composite_row, :) + &
1322 0.5_dp*cross_density(1)
1324 IF (use_atom_composite_gradient)
THEN
1326 composite_cross_grad(composite_row, idir, :) = &
1327 composite_cross_grad(composite_row, idir, :) + &
1328 0.5_dp*cross_grad(idir, 1)
1331 IF (use_atom_composite_tau)
THEN
1332 composite_cross_kin(composite_row, :) = &
1333 composite_cross_kin(composite_row, :) + &
1348 IF (native_grid_diagnostics)
THEN
1349 composite_cross_density_max = maxval(abs(composite_cross_density))
1350 composite_cross_grad_max = maxval(abs(composite_cross_grad))
1351 composite_cross_kin_max = maxval(abs(composite_cross_kin))
1352 CALL para_env%max(composite_cross_cutoff_max)
1353 CALL para_env%max(composite_cross_density_max)
1354 CALL para_env%max(composite_cross_grad_max)
1355 CALL para_env%max(composite_cross_kin_max)
1358 WRITE (unit=iw, fmt=
"(T2,A,4(1X,ES20.12))") &
1359 "SKALA_GPW| Atom-composite cross support/maxima", &
1360 composite_cross_cutoff_max, composite_cross_density_max, &
1361 composite_cross_grad_max, composite_cross_kin_max
1364 composite_density(:, :) = composite_density(:, :) + composite_cross_density(:, :)
1365 composite_grad(:, :, :) = composite_grad(:, :, :) + composite_cross_grad(:, :, :)
1366 composite_kin(:, :) = composite_kin(:, :) + composite_cross_kin(:, :)
1367 DEALLOCATE (composite_cross_density, composite_cross_grad, composite_cross_kin)
1369 cpassert(all(composite_grid_weights >= 0.0_dp))
1370 atom_composite_nelec = sum(composite_grid_weights* &
1371 (composite_density(:, 1) + composite_density(:, 2)))
1372 CALL para_env%sum(atom_composite_nelec)
1373 IF (atom_composite_reference .AND. my_calculate_forces)
THEN
1375 my_xc_section, para_env, composite_density, composite_grad, composite_kin, &
1376 composite_grid_coords, composite_grid_weights, composite_atomic_grid_weights, &
1377 composite_local_grid_sizes, composite_local_atom_coords, atom_composite_exc, &
1378 composite_density_grad, composite_grad_grad, composite_kin_grad, &
1379 composite_grid_coord_grad, composite_grid_weight_grad, &
1380 composite_atomic_grid_weight_grad, composite_atom_coord_grad)
1381 ALLOCATE (composite_cross_force(3,
SIZE(particle_set)), &
1382 composite_explicit_force(3,
SIZE(particle_set)), &
1383 composite_grid_coord_force(3,
SIZE(particle_set)), &
1384 composite_model_atom_force(3,
SIZE(particle_set)), &
1385 composite_moving_smooth_force(3,
SIZE(particle_set)), &
1386 composite_nlcc_center_force(3,
SIZE(particle_set)), &
1387 composite_nlcc_target_force(3,
SIZE(particle_set)), &
1388 composite_partition_force(3,
SIZE(particle_set)), &
1389 composite_partition_included(
SIZE(particle_set)), &
1390 composite_partition_datom(3,
SIZE(particle_set),
SIZE(particle_set)), &
1391 composite_partition_dstrain(3, 3,
SIZE(particle_set)))
1392 composite_cross_force = 0.0_dp
1393 composite_cross_image_virial = 0.0_dp
1394 composite_model_atom_force = 0.0_dp
1395 composite_grid_coord_force = 0.0_dp
1396 composite_moving_smooth_force = 0.0_dp
1397 composite_nlcc_center_force = 0.0_dp
1398 composite_nlcc_target_force = 0.0_dp
1399 composite_partition_force = 0.0_dp
1400 composite_explicit_virial = 0.0_dp
1401 composite_feature_virial = 0.0_dp
1402 composite_interpolation_virial = 0.0_dp
1403 composite_partition_strain_virial = 0.0_dp
1412 DO composite_local_atom = 1, composite_local_natom
1413 iatom = composite_local_atoms(composite_local_atom)
1414 DO composite_row = composite_atom_start(iatom), composite_atom_end(iatom)
1417 composite_smooth_gradient_value(jdir, 1) = &
1418 interpolate_native_grid( &
1419 composite_smooth_drhoa(jdir)%array, smooth_rho_r(1)%pw_grid, &
1420 cell, composite_grid_coords(:, composite_row), &
1421 image_partition_atom_composite)
1422 composite_smooth_gradient_value(jdir, 2) = &
1423 interpolate_native_grid( &
1424 composite_smooth_drhob(jdir)%array, smooth_rho_r(1)%pw_grid, &
1425 cell, composite_grid_coords(:, composite_row), &
1426 image_partition_atom_composite)
1430 composite_smooth_gradient_value(jdir, :) = 0.5_dp* &
1431 interpolate_native_grid( &
1432 composite_smooth_drho(jdir)%array, smooth_rho_r(1)%pw_grid, &
1433 cell, composite_grid_coords(:, composite_row), &
1434 image_partition_atom_composite)
1440 composite_feature_virial(jdir, idir) = &
1441 composite_feature_virial(jdir, idir) - &
1442 composite_grad_grad(composite_row, idir, ispin)* &
1443 composite_smooth_gradient_value(jdir, ispin)
1474 ALLOCATE (composite_nlcc_center_force_local(3,
SIZE(particle_set)), &
1475 composite_partition_force_local(3,
SIZE(particle_set)), &
1476 local_partition_datom(3,
SIZE(particle_set)))
1477 composite_nlcc_center_force_local = 0.0_dp
1478 composite_partition_force_local = 0.0_dp
1480 DO composite_local_atom = 1, composite_local_natom
1481 iatom = composite_local_atoms(composite_local_atom)
1482 composite_model_atom_force(:, iatom) = &
1483 composite_atom_coord_grad(:, composite_local_atom)
1484 DO composite_row = composite_atom_start(iatom), composite_atom_end(iatom)
1485 composite_grid_coord_force(:, iatom) = &
1486 composite_grid_coord_force(:, iatom) + &
1487 composite_grid_coord_grad(:, composite_row)
1489 spatial_derivative = &
1490 composite_density_grad(composite_row, 1)* &
1491 interpolate_native_grid_gradient( &
1492 composite_smooth_rhoa, smooth_rho_r(1)%pw_grid, cell, &
1493 composite_grid_coords(:, composite_row), &
1494 image_partition_atom_composite) + &
1495 composite_density_grad(composite_row, 2)* &
1496 interpolate_native_grid_gradient( &
1497 composite_smooth_rhob, smooth_rho_r(1)%pw_grid, cell, &
1498 composite_grid_coords(:, composite_row), &
1499 image_partition_atom_composite) + &
1500 composite_kin_grad(composite_row, 1)* &
1501 interpolate_native_grid_gradient( &
1502 composite_smooth_tau_a, smooth_rho_r(1)%pw_grid, cell, &
1503 composite_grid_coords(:, composite_row), &
1504 image_partition_atom_composite) + &
1505 composite_kin_grad(composite_row, 2)* &
1506 interpolate_native_grid_gradient( &
1507 composite_smooth_tau_b, smooth_rho_r(1)%pw_grid, cell, &
1508 composite_grid_coords(:, composite_row), &
1509 image_partition_atom_composite)
1511 spatial_derivative = spatial_derivative + &
1512 composite_grad_grad(composite_row, idir, 1)* &
1513 interpolate_native_grid_gradient( &
1514 composite_smooth_drhoa(idir)%array, &
1515 smooth_rho_r(1)%pw_grid, cell, &
1516 composite_grid_coords(:, composite_row), &
1517 image_partition_atom_composite) + &
1518 composite_grad_grad(composite_row, idir, 2)* &
1519 interpolate_native_grid_gradient( &
1520 composite_smooth_drhob(idir)%array, &
1521 smooth_rho_r(1)%pw_grid, cell, &
1522 composite_grid_coords(:, composite_row), &
1523 image_partition_atom_composite)
1526 spatial_derivative = 0.5_dp*sum( &
1527 composite_density_grad(composite_row, :))* &
1528 interpolate_native_grid_gradient( &
1529 composite_smooth_rho, smooth_rho_r(1)%pw_grid, cell, &
1530 composite_grid_coords(:, composite_row), &
1531 image_partition_atom_composite) + &
1532 0.5_dp*sum(composite_kin_grad(composite_row, :))* &
1533 interpolate_native_grid_gradient( &
1534 composite_smooth_tau, smooth_rho_r(1)%pw_grid, cell, &
1535 composite_grid_coords(:, composite_row), &
1536 image_partition_atom_composite)
1538 spatial_derivative = spatial_derivative + 0.5_dp*sum( &
1539 composite_grad_grad(composite_row, idir, :))* &
1540 interpolate_native_grid_gradient( &
1541 composite_smooth_drho(idir)%array, &
1542 smooth_rho_r(1)%pw_grid, &
1543 cell, composite_grid_coords(:, composite_row), &
1544 image_partition_atom_composite)
1549 composite_interpolation_virial(idir, jdir) = &
1550 composite_interpolation_virial(idir, jdir) + &
1551 spatial_derivative(idir)*( &
1552 composite_grid_coords(jdir, composite_row) - &
1553 particle_set(iatom)%r(jdir))
1556 composite_moving_smooth_force(:, iatom) = &
1557 composite_moving_smooth_force(:, iatom) + spatial_derivative
1559 nlcc_spin_factor = merge(1.0_dp, 0.5_dp, lsd)
1560 DO source_atom = 1,
SIZE(particle_set)
1561 NULLIFY (gth_potential, sgp_potential)
1562 CALL get_qs_kind(my_kind_set(composite_atom_kind(source_atom)), &
1563 gth_potential=gth_potential, &
1564 sgp_potential=sgp_potential)
1566 composite_grid_coords(:, composite_row), &
1567 particle_set(source_atom)%r, gth_potential, sgp_potential, &
1568 nlcc_density, nlcc_gradient, nlcc_hessian)
1569 nlcc_spatial_derivative = 0.0_dp
1571 nlcc_spatial_derivative = nlcc_spatial_derivative + &
1572 nlcc_spin_factor*composite_density_grad(composite_row, ispin)* &
1576 nlcc_spatial_derivative(jdir) = &
1577 nlcc_spatial_derivative(jdir) + nlcc_spin_factor* &
1578 composite_grad_grad(composite_row, idir, ispin)* &
1579 nlcc_hessian(idir, jdir)
1583 composite_nlcc_target_force(:, iatom) = &
1584 composite_nlcc_target_force(:, iatom) + nlcc_spatial_derivative
1585 composite_nlcc_center_force_local(:, source_atom) = &
1586 composite_nlcc_center_force_local(:, source_atom) - nlcc_spatial_derivative
1589 IF (image_partition_atom_composite)
THEN
1591 composite_grid_coords(:, composite_row), composite_atom_coords, cell, &
1592 iatom, local_partition_weight, local_partition_datom, &
1593 local_partition_dstrain, composite_image_periodicity)
1595 composite_grid_coords(:, composite_row), &
1596 composite_atom_coords(:, iatom:iatom), cell, 1, &
1597 descriptor_window_weight, local_descriptor_datom, &
1598 local_descriptor_dstrain, composite_image_periodicity)
1601 target_partition_adjoint = composite_base_grid_weights(composite_row)* &
1602 composite_grid_weight_grad(composite_row)
1603 descriptor_window_adjoint = composite_base_grid_weights(composite_row)* &
1604 composite_atomic_grid_weight_grad(composite_row)* &
1606 descriptor_window_weight)
1607 DO target_atom = 1,
SIZE(particle_set)
1608 composite_partition_force_local(:, target_atom) = &
1609 composite_partition_force_local(:, target_atom) + &
1610 target_partition_adjoint*local_partition_datom(:, target_atom)
1612 composite_partition_force_local(:, iatom) = &
1613 composite_partition_force_local(:, iatom) - target_partition_adjoint* &
1614 sum(local_partition_datom, dim=2)
1615 composite_partition_strain_virial = &
1616 composite_partition_strain_virial - target_partition_adjoint* &
1617 local_partition_dstrain - descriptor_window_adjoint* &
1618 local_descriptor_dstrain
1621 composite_grid_coords(:, composite_row), composite_atom_coords, cell, &
1622 composite_partition_weights, composite_partition_included, &
1623 composite_partition_datom, composite_partition_dstrain)
1624 partition_adjoint = composite_grid_weight_grad(composite_row)* &
1625 composite_atomic_grid_weights(composite_row)
1626 DO target_atom = 1,
SIZE(particle_set)
1627 composite_partition_force_local(:, target_atom) = &
1628 composite_partition_force_local(:, target_atom) + &
1629 partition_adjoint* &
1630 composite_partition_datom(:, target_atom, iatom)
1632 composite_partition_force_local(:, iatom) = &
1633 composite_partition_force_local(:, iatom) - partition_adjoint* &
1634 sum(composite_partition_datom(:, :, iatom), dim=2)
1640 composite_nlcc_center_force(:, :) = composite_nlcc_center_force(:, :) + &
1641 composite_nlcc_center_force_local
1642 composite_partition_force(:, :) = composite_partition_force(:, :) + &
1643 composite_partition_force_local
1645 DEALLOCATE (composite_nlcc_center_force_local, composite_partition_force_local, &
1646 local_partition_datom)
1651 IF (.NOT. direct_valence_atom_composite)
THEN
1652 DO ikind = 1,
SIZE(atomic_kind_set)
1653 CALL get_atomic_kind(atomic_kind_set(ikind), atom_list=atom_list, natom=natom)
1654 NULLIFY (gth_potential, sgp_potential)
1655 CALL get_qs_kind(my_kind_set(ikind), paw_atom=paw_atom, &
1656 gth_potential=gth_potential, harmonics=harmonics, &
1657 grid_atom=grid_atom, sgp_potential=sgp_potential, &
1658 zatom=zatom, zeff=zeff)
1659 CALL get_qs_kind(my_kind_set(ikind), basis_set=basis_1c, basis_type=
"GAPW_1C")
1660 IF (.NOT. native_skala_uses_one_center_kind( &
1661 paw_atom, gapw_representation, &
1662 ASSOCIATED(gth_potential) .OR.
ASSOCIATED(sgp_potential), &
1666 na = grid_atom%ng_sphere
1668 CALL reallocate(rho_h, 1, na, 1, nr, 1, nspins)
1669 CALL reallocate(rho_s, 1, na, 1, nr, 1, nspins)
1670 CALL reallocate(drho_h, 1, 4, 1, na, 1, nr, 1, nspins)
1671 CALL reallocate(drho_s, 1, 4, 1, na, 1, nr, 1, nspins)
1672 CALL reallocate(tau_h, 1, na, 1, nr, 1, nspins)
1673 CALL reallocate(tau_s, 1, na, 1, nr, 1, nspins)
1676 source_atom = atom_list(iat)
1677 rho_atom => my_rho_atom_set(source_atom)
1678 NULLIFY (r_h, r_s, dr_h, dr_s, r_h_d, r_s_d)
1679 CALL get_rho_atom(rho_atom=rho_atom, rho_rad_h=r_h, rho_rad_s=r_s, &
1680 drho_rad_h=dr_h, drho_rad_s=dr_s, &
1681 rho_rad_h_d=r_h_d, rho_rad_s_d=r_s_d)
1686 CALL calc_tau_atom(tau_h, tau_s, rho_atom, tau_basis_cache, nspins)
1689 ir, r_h, r_s, rho_h, rho_s, dr_h, dr_s, &
1690 r_h_d, r_s_d, drho_h, drho_s)
1694 grid_atom, rho_h, rho_s, drho_h, drho_s, tau_h, tau_s)
1695 IF (cross_cutoff <= 0.0_dp) cycle
1698 IF (cell%perd(idir) == 1)
THEN
1699 image_shell(idir) = ceiling( &
1700 cross_cutoff*sqrt(sum(cell%h_inv(idir, :)**2))) + 1
1717 ALLOCATE (composite_cross_force_local(3,
SIZE(particle_set)))
1718 composite_cross_force_local = 0.0_dp
1719 composite_cross_image_virial_local = 0.0_dp
1721 DO composite_row = 1, composite_nflat
1722 target_atom = composite_grid_atom(composite_row)
1724 cross_density_adjoint = 0.0_dp
1725 cross_grad_adjoint = 0.0_dp
1726 cross_kin_adjoint = 0.0_dp
1727 IF (use_atom_composite_density)
THEN
1728 cross_density_adjoint(1:2) = &
1729 composite_density_grad(composite_row, 1:2)
1731 IF (use_atom_composite_gradient)
THEN
1732 cross_grad_adjoint(:, 1:2) = &
1733 composite_grad_grad(composite_row, :, 1:2)
1735 IF (use_atom_composite_tau)
THEN
1736 cross_kin_adjoint(1:2) = &
1737 composite_kin_grad(composite_row, 1:2)
1740 cross_density_adjoint = 0.0_dp
1741 cross_grad_adjoint = 0.0_dp
1742 cross_kin_adjoint = 0.0_dp
1743 IF (use_atom_composite_density)
THEN
1744 cross_density_adjoint(1) = 0.5_dp* &
1745 sum(composite_density_grad(composite_row, :))
1747 IF (use_atom_composite_gradient)
THEN
1749 cross_grad_adjoint(idir, 1) = 0.5_dp* &
1750 sum(composite_grad_grad(composite_row, idir, :))
1753 IF (use_atom_composite_tau)
THEN
1754 cross_kin_adjoint(1) = 0.5_dp* &
1755 sum(composite_kin_grad(composite_row, :))
1762 fractional(idir) = fractional(idir) + cell%h_inv(idir, jdir)* &
1763 (composite_grid_coords(jdir, composite_row) - &
1764 particle_set(source_atom)%r(jdir))
1767 CALL atom_grid_image_bounds(cell, fractional, cross_cutoff, image_shell, &
1768 image_lower, image_upper)
1769 DO image_i3 = image_lower(3), image_upper(3)
1770 DO image_i2 = image_lower(2), image_upper(2)
1771 DO image_i1 = image_lower(1), image_upper(1)
1772 image_shift = [image_i1, image_i2, image_i3]
1773 IF (target_atom == source_atom .AND. &
1774 all(image_shift == 0)) cycle
1775 image_translation = matmul( &
1776 cell%hmat, real(image_shift,
dp))
1777 cross_displacement = &
1778 composite_grid_coords(:, composite_row) - &
1779 particle_set(source_atom)%r - image_translation
1780 IF (sqrt(sum(cross_displacement**2)) > cross_cutoff) cycle
1781 CALL interpolate_gapw_atom_grid_fields( &
1782 grid_atom, harmonics, cross_displacement, cross_cutoff, &
1783 nspins, rho_h, rho_s, drho_h, drho_s, tau_h, tau_s, &
1784 cross_density, cross_grad, cross_kin, cross_density_spatial, &
1785 cross_grad_spatial, cross_kin_spatial)
1786 cross_spatial_derivative = 0.0_dp
1787 DO ispin = 1, nspins
1789 cross_spatial_derivative(idir) = &
1790 cross_spatial_derivative(idir) + &
1791 cross_density_adjoint(ispin)* &
1792 cross_density_spatial(idir, ispin) + &
1793 cross_kin_adjoint(ispin)* &
1794 cross_kin_spatial(idir, ispin)
1796 cross_spatial_derivative(idir) = &
1797 cross_spatial_derivative(idir) + &
1798 cross_grad_adjoint(jdir, ispin)* &
1799 cross_grad_spatial(jdir, idir, ispin)
1803 composite_cross_force_local(:, target_atom) = &
1804 composite_cross_force_local(:, target_atom) + &
1805 cross_spatial_derivative
1806 composite_cross_force_local(:, source_atom) = &
1807 composite_cross_force_local(:, source_atom) - &
1808 cross_spatial_derivative
1811 composite_cross_image_virial_local(idir, jdir) = &
1812 composite_cross_image_virial_local(idir, jdir) + &
1813 cross_spatial_derivative(idir)*image_translation(jdir)
1822 composite_cross_force(:, :) = &
1823 composite_cross_force(:, :) + composite_cross_force_local(:, :)
1824 composite_cross_image_virial = composite_cross_image_virial + &
1825 composite_cross_image_virial_local
1827 DEALLOCATE (composite_cross_force_local)
1834 composite_explicit_force(:, :) = composite_model_atom_force(:, :) + &
1835 composite_grid_coord_force(:, :) + &
1836 composite_moving_smooth_force(:, :) + &
1837 composite_cross_force(:, :) + &
1838 composite_nlcc_center_force(:, :) + &
1839 composite_nlcc_target_force(:, :) + &
1840 composite_partition_force(:, :)
1847 DO iatom = 1,
SIZE(particle_set)
1850 composite_explicit_virial(idir, jdir) = &
1851 composite_explicit_virial(idir, jdir) - ( &
1852 composite_model_atom_force(idir, iatom) + &
1853 composite_grid_coord_force(idir, iatom) + &
1854 composite_cross_force(idir, iatom) + &
1855 composite_nlcc_center_force(idir, iatom) + &
1856 composite_nlcc_target_force(idir, iatom) + &
1857 composite_partition_force(idir, iatom))*particle_set(iatom)%r(jdir)
1861 composite_explicit_virial = composite_explicit_virial + &
1862 composite_partition_strain_virial + &
1863 composite_cross_image_virial
1864 IF (
ASSOCIATED(force))
THEN
1865 DO iatom = 1,
SIZE(particle_set)
1866 ikind = composite_atom_kind(iatom)
1867 iat = composite_atom_kind_index(iatom)
1868 cpassert(ikind > 0 .AND. iat > 0)
1869 force(ikind)%rho_elec(:, iat) = force(ikind)%rho_elec(:, iat) + &
1870 composite_explicit_force(:, iatom)
1873 IF (use_virial)
THEN
1878 virial%pv_xc = composite_feature_virial - composite_interpolation_virial
1879 virial%pv_gapw = virial%pv_gapw + composite_explicit_virial
1880 virial%pv_virial = virial%pv_virial + composite_explicit_virial
1882 IF (native_grid_diagnostics)
THEN
1883 CALL para_env%sum(composite_cross_force)
1884 CALL para_env%sum(composite_cross_image_virial)
1885 CALL para_env%sum(composite_model_atom_force)
1886 CALL para_env%sum(composite_grid_coord_force)
1887 CALL para_env%sum(composite_moving_smooth_force)
1888 CALL para_env%sum(composite_nlcc_center_force)
1889 CALL para_env%sum(composite_nlcc_target_force)
1890 CALL para_env%sum(composite_partition_force)
1891 CALL para_env%sum(composite_explicit_force)
1892 CALL para_env%sum(composite_explicit_virial)
1893 CALL para_env%sum(composite_feature_virial)
1894 CALL para_env%sum(composite_interpolation_virial)
1897 DO iatom = 1,
SIZE(particle_set)
1898 WRITE (unit=iw, fmt=
"(T2,A,1X,I0,3(1X,ES20.12))") &
1899 "SKALA_GPW| Atom-composite model-atom force", iatom, &
1900 composite_model_atom_force(:, iatom)
1901 WRITE (unit=iw, fmt=
"(T2,A,1X,I0,3(1X,ES20.12))") &
1902 "SKALA_GPW| Atom-composite grid-coordinate force", iatom, &
1903 composite_grid_coord_force(:, iatom)
1904 WRITE (unit=iw, fmt=
"(T2,A,1X,I0,3(1X,ES20.12))") &
1905 "SKALA_GPW| Atom-composite moving-smooth force", iatom, &
1906 composite_moving_smooth_force(:, iatom)
1907 WRITE (unit=iw, fmt=
"(T2,A,1X,I0,3(1X,ES20.12))") &
1908 "SKALA_GPW| Atom-composite cross-region force", iatom, &
1909 composite_cross_force(:, iatom)
1910 WRITE (unit=iw, fmt=
"(T2,A,1X,I0,3(1X,ES20.12))") &
1911 "SKALA_GPW| Atom-composite NLCC-center force", iatom, &
1912 composite_nlcc_center_force(:, iatom)
1913 WRITE (unit=iw, fmt=
"(T2,A,1X,I0,3(1X,ES20.12))") &
1914 "SKALA_GPW| Atom-composite NLCC-target force", iatom, &
1915 composite_nlcc_target_force(:, iatom)
1916 WRITE (unit=iw, fmt=
"(T2,A,1X,I0,3(1X,ES20.12))") &
1917 "SKALA_GPW| Atom-composite partition force", iatom, &
1918 composite_partition_force(:, iatom)
1919 WRITE (unit=iw, fmt=
"(T2,A,1X,I0,3(1X,ES20.12))") &
1920 "SKALA_GPW| Atom-composite explicit force", iatom, &
1921 composite_explicit_force(:, iatom)
1923 WRITE (unit=iw, fmt=
"(T2,A)") &
1924 "SKALA_GPW| Atom-composite explicit virial"
1926 WRITE (unit=iw, fmt=
"(T2,A,1X,3ES20.10)") &
1927 "SKALA_GPW|", composite_explicit_virial(idir, :)
1929 WRITE (unit=iw, fmt=
"(T2,A)") &
1930 "SKALA_GPW| Atom-composite cross-image virial"
1932 WRITE (unit=iw, fmt=
"(T2,A,1X,3ES20.10)") &
1933 "SKALA_GPW|", composite_cross_image_virial(idir, :)
1935 WRITE (unit=iw, fmt=
"(T2,A)") &
1936 "SKALA_GPW| Atom-composite feature virial"
1938 WRITE (unit=iw, fmt=
"(T2,A,1X,3ES20.10)") &
1939 "SKALA_GPW|", composite_feature_virial(idir, :)
1941 WRITE (unit=iw, fmt=
"(T2,A)") &
1942 "SKALA_GPW| Atom-composite interpolation virial"
1944 WRITE (unit=iw, fmt=
"(T2,A,1X,3ES20.10)") &
1945 "SKALA_GPW|", composite_interpolation_virial(idir, :)
1949 DEALLOCATE (composite_atom_coord_grad, composite_atomic_grid_weight_grad, &
1950 composite_cross_force, &
1951 composite_explicit_force, composite_grid_coord_force, &
1952 composite_grid_coord_grad, composite_grid_weight_grad, &
1953 composite_model_atom_force, composite_moving_smooth_force, &
1954 composite_nlcc_center_force, &
1955 composite_nlcc_target_force, &
1956 composite_partition_datom, composite_partition_dstrain, &
1957 composite_partition_force, composite_partition_included)
1960 my_xc_section, para_env, composite_density, composite_grad, composite_kin, &
1961 composite_grid_coords, composite_grid_weights, composite_atomic_grid_weights, &
1962 composite_local_grid_sizes, composite_local_atom_coords, atom_composite_exc, &
1963 composite_density_grad, composite_grad_grad, composite_kin_grad)
1965 composite_pw_nflat = product(smooth_rho_r(1)%pw_grid%npts)
1966 adjoint_nchannels = merge(2, 1, lsd)
1967 ALLOCATE (smooth_density_adjoint_storage(composite_pw_nflat, adjoint_nchannels), &
1968 smooth_grad_adjoint_storage(composite_pw_nflat, 3, adjoint_nchannels), &
1969 smooth_kin_adjoint_storage(composite_pw_nflat, adjoint_nchannels))
1970 smooth_density_adjoint_storage = 0.0_dp
1971 smooth_grad_adjoint_storage = 0.0_dp
1972 smooth_kin_adjoint_storage = 0.0_dp
1973 CALL build_native_grid_adjoint_bins( &
1974 smooth_rho_r(1)%pw_grid, cell, composite_grid_coords, &
1975 image_partition_atom_composite, adjoint_tile_count, adjoint_bin_offsets, &
1977 adjoint_nbins =
SIZE(adjoint_bin_offsets) - 1
1987 DO adjoint_bin = 1, adjoint_nbins
1988 CALL native_grid_adjoint_tile_bounds( &
1989 smooth_rho_r(1)%pw_grid, adjoint_bin, adjoint_tile_count, &
1990 adjoint_tile_lower, adjoint_tile_upper)
1991 DO adjoint_entry = adjoint_bin_offsets(adjoint_bin), &
1992 adjoint_bin_offsets(adjoint_bin + 1) - 1
1993 composite_row = adjoint_bin_rows(adjoint_entry)
1995 composite_grid_coords(:, composite_row), interpolation_stencil))
THEN
1996 CALL create_native_grid_interpolation_stencil( &
1997 interpolation_stencil, smooth_rho_r(1)%pw_grid, cell, &
1998 composite_grid_coords(:, composite_row), image_partition_atom_composite)
2001 composite_smooth_density_adjoint_value = &
2002 composite_density_grad(composite_row, :)
2003 composite_smooth_gradient_adjoint_value = &
2004 composite_grad_grad(composite_row, :, :)
2005 composite_smooth_kin_adjoint_value = composite_kin_grad(composite_row, :)
2007 composite_smooth_density_adjoint_value = 0.0_dp
2008 composite_smooth_gradient_adjoint_value = 0.0_dp
2009 composite_smooth_kin_adjoint_value = 0.0_dp
2010 composite_smooth_density_adjoint_value(1) = &
2011 sum(composite_density_grad(composite_row, :))
2012 composite_smooth_gradient_adjoint_value(:, 1) = &
2013 sum(composite_grad_grad(composite_row, :, :), dim=2)
2014 composite_smooth_kin_adjoint_value(1) = &
2015 sum(composite_kin_grad(composite_row, :))
2017 CALL add_native_grid_fields_adjoint_tile( &
2018 smooth_density_adjoint_storage, smooth_grad_adjoint_storage, &
2019 smooth_kin_adjoint_storage, smooth_rho_r(1)%pw_grid, interpolation_stencil, &
2020 composite_smooth_density_adjoint_value, &
2021 composite_smooth_gradient_adjoint_value, &
2022 composite_smooth_kin_adjoint_value, adjoint_nchannels, &
2023 adjoint_tile_lower, adjoint_tile_upper)
2027 DEALLOCATE (adjoint_bin_offsets, adjoint_bin_rows)
2028 smooth_input_contraction = 0.0_dp
2035 DO composite_row = 1, composite_nflat
2036 composite_smooth_density_value = composite_smooth_density_cache(composite_row, :)
2037 composite_smooth_gradient_value = &
2038 composite_smooth_gradient_cache(composite_row, :, :)
2039 composite_smooth_kin_value = composite_smooth_kin_cache(composite_row, :)
2042 smooth_input_contraction = smooth_input_contraction + &
2043 composite_density_grad(composite_row, ispin)* &
2044 composite_smooth_density_value(ispin) + &
2045 composite_kin_grad(composite_row, ispin)* &
2046 composite_smooth_kin_value(ispin)
2048 smooth_input_contraction = smooth_input_contraction + &
2049 composite_grad_grad(composite_row, idir, ispin)* &
2050 composite_smooth_gradient_value(idir, ispin)
2053 smooth_input_contraction = smooth_input_contraction + 0.5_dp*( &
2054 composite_density_grad(composite_row, ispin)* &
2055 composite_smooth_density_value(1) + &
2056 composite_kin_grad(composite_row, ispin)* &
2057 composite_smooth_kin_value(1))
2059 smooth_input_contraction = smooth_input_contraction + 0.5_dp* &
2060 composite_grad_grad(composite_row, idir, ispin)* &
2061 composite_smooth_gradient_value(idir, 1)
2067 smooth_density_adjoint => smooth_density_adjoint_storage
2068 smooth_grad_adjoint => smooth_grad_adjoint_storage
2069 smooth_kin_adjoint => smooth_kin_adjoint_storage
2072 CALL para_env%sum(smooth_density_adjoint)
2073 CALL para_env%sum(smooth_grad_adjoint)
2074 CALL para_env%sum(smooth_kin_adjoint)
2075 CALL para_env%sum(smooth_input_contraction)
2077 smooth_vxc_rho, smooth_vxc_tau, smooth_rho_r, auxbas_pw_pool, &
2078 smooth_density_adjoint, smooth_grad_adjoint, smooth_kin_adjoint, &
2079 xc_deriv_method_id, global_grid_layout=.true.)
2080 NULLIFY (smooth_density_adjoint, smooth_grad_adjoint, smooth_kin_adjoint)
2081 DEALLOCATE (smooth_density_adjoint_storage, smooth_grad_adjoint_storage, &
2082 smooth_kin_adjoint_storage)
2083 smooth_grid_contraction = 0.0_dp
2084 DO ispin = 1, nspins
2085 smooth_grid_contraction = smooth_grid_contraction + smooth_rho_r(1)%pw_grid%dvol* &
2086 (sum(smooth_vxc_rho(ispin)%array* &
2087 smooth_rho_r(ispin)%array) + &
2088 sum(smooth_vxc_tau(ispin)%array* &
2089 smooth_tau_r(ispin)%array))
2090 IF (atom_composite_reference)
THEN
2091 cpassert(
PRESENT(composite_vxc_rho))
2092 cpassert(
PRESENT(composite_vxc_tau))
2093 cpassert(
ASSOCIATED(composite_vxc_rho))
2094 cpassert(
ASSOCIATED(composite_vxc_tau))
2095 cpassert(
SIZE(composite_vxc_rho) == nspins)
2096 cpassert(
SIZE(composite_vxc_tau) == nspins)
2097 CALL pw_axpy(smooth_vxc_rho(ispin), composite_vxc_rho(ispin), 1.0_dp)
2098 CALL pw_axpy(smooth_vxc_tau(ispin), composite_vxc_tau(ispin), 1.0_dp)
2100 CALL auxbas_pw_pool%give_back_pw(smooth_vxc_rho(ispin))
2101 CALL auxbas_pw_pool%give_back_pw(smooth_vxc_tau(ispin))
2103 CALL para_env%sum(smooth_grid_contraction)
2104 DEALLOCATE (smooth_vxc_rho, smooth_vxc_tau)
2106 one_center_field_contraction = 0.0_dp
2107 one_center_matrix_contraction = 0.0_dp
2108 one_center_density_field_contraction = 0.0_dp
2109 one_center_density_matrix_contraction = 0.0_dp
2110 one_center_gradient_field_contraction = 0.0_dp
2111 one_center_gradient_matrix_contraction = 0.0_dp
2112 one_center_rho_grad_field_contraction = 0.0_dp
2113 one_center_rho_grad_matrix_contraction = 0.0_dp
2114 one_center_tau_field_contraction = 0.0_dp
2115 one_center_tau_matrix_contraction = 0.0_dp
2116 IF (.NOT. direct_valence_atom_composite)
THEN
2117 DO ikind = 1,
SIZE(atomic_kind_set)
2118 CALL get_atomic_kind(atomic_kind_set(ikind), atom_list=atom_list, natom=natom)
2119 NULLIFY (gth_potential, sgp_potential)
2120 CALL get_qs_kind(my_kind_set(ikind), paw_atom=paw_atom, &
2121 gth_potential=gth_potential, harmonics=harmonics, &
2122 grid_atom=grid_atom, sgp_potential=sgp_potential, &
2123 zatom=zatom, zeff=zeff)
2124 CALL get_qs_kind(my_kind_set(ikind), basis_set=basis_1c, basis_type=
"GAPW_1C")
2125 IF (.NOT. native_skala_uses_one_center_kind( &
2126 paw_atom, gapw_representation, &
2127 ASSOCIATED(gth_potential) .OR.
ASSOCIATED(sgp_potential), &
2131 na = grid_atom%ng_sphere
2132 CALL reallocate(rho_h, 1, na, 1, nr, 1, nspins)
2133 CALL reallocate(rho_s, 1, na, 1, nr, 1, nspins)
2134 CALL reallocate(vxc_h, 1, na, 1, nr, 1, nspins)
2135 CALL reallocate(vxc_s, 1, na, 1, nr, 1, nspins)
2136 CALL reallocate(drho_h, 1, 4, 1, na, 1, nr, 1, nspins)
2137 CALL reallocate(drho_s, 1, 4, 1, na, 1, nr, 1, nspins)
2138 CALL reallocate(vxg_h, 1, 3, 1, na, 1, nr, 1, nspins)
2139 CALL reallocate(vxg_s, 1, 3, 1, na, 1, nr, 1, nspins)
2140 CALL reallocate(tau_h, 1, na, 1, nr, 1, nspins)
2141 CALL reallocate(tau_s, 1, na, 1, nr, 1, nspins)
2142 CALL reallocate(vtau_h, 1, na, 1, nr, 1, nspins)
2143 CALL reallocate(vtau_s, 1, na, 1, nr, 1, nspins)
2146 bo =
get_limit(natom, para_env%num_pe, para_env%mepos)
2148 iatom = atom_list(iat)
2149 source_matrix_local = iat >= bo(1) .AND. iat <= bo(2)
2150 rho_atom => my_rho_atom_set(iatom)
2151 NULLIFY (cpc_h, cpc_s, r_h, r_s, dr_h, dr_s, r_h_d, r_s_d, int_hh, int_ss)
2152 CALL get_rho_atom(rho_atom=rho_atom, cpc_h=cpc_h, cpc_s=cpc_s, &
2153 rho_rad_h=r_h, rho_rad_s=r_s, drho_rad_h=dr_h, &
2154 drho_rad_s=dr_s, rho_rad_h_d=r_h_d, rho_rad_s_d=r_s_d, &
2155 ga_vlocal_gb_h=int_hh, ga_vlocal_gb_s=int_ss)
2160 CALL calc_tau_atom(tau_h, tau_s, rho_atom, tau_basis_cache, nspins)
2163 ir, r_h, r_s, rho_h, rho_s, dr_h, dr_s, &
2164 r_h_d, r_s_d, drho_h, drho_s)
2173 IF (source_matrix_local)
THEN
2174 composite_row = composite_atom_start(iatom) - 1
2177 composite_row = composite_row + 1
2179 IF (use_atom_composite_density)
THEN
2180 vxc_h(ia, ir, 1:2) = composite_density_grad(composite_row, 1:2)
2181 vxc_s(ia, ir, 1:2) = composite_density_grad(composite_row, 1:2)
2183 IF (use_atom_composite_gradient)
THEN
2185 vxg_h(idir, ia, ir, 1:2) = &
2186 composite_grad_grad(composite_row, idir, 1:2)
2187 vxg_s(idir, ia, ir, 1:2) = &
2188 composite_grad_grad(composite_row, idir, 1:2)
2191 IF (use_atom_composite_tau)
THEN
2192 vtau_h(ia, ir, 1:2) = composite_kin_grad(composite_row, 1:2)
2193 vtau_s(ia, ir, 1:2) = composite_kin_grad(composite_row, 1:2)
2196 IF (use_atom_composite_density)
THEN
2197 vxc_h(ia, ir, 1) = 0.5_dp* &
2198 sum(composite_density_grad(composite_row, :))
2199 vxc_s(ia, ir, 1) = vxc_h(ia, ir, 1)
2201 IF (use_atom_composite_gradient)
THEN
2203 vxg_h(idir, ia, ir, 1) = 0.5_dp* &
2204 sum(composite_grad_grad( &
2205 composite_row, idir, :))
2206 vxg_s(idir, ia, ir, 1) = vxg_h(idir, ia, ir, 1)
2209 IF (use_atom_composite_tau)
THEN
2210 vtau_h(ia, ir, 1) = 0.5_dp* &
2211 sum(composite_kin_grad(composite_row, :))
2212 vtau_s(ia, ir, 1) = vtau_h(ia, ir, 1)
2217 cpassert(composite_row == composite_atom_end(iatom))
2221 grid_atom, rho_h, rho_s, drho_h, drho_s, tau_h, tau_s)
2222 IF (cross_cutoff > 0.0_dp)
THEN
2225 IF (cell%perd(idir) == 1)
THEN
2226 image_shell(idir) = ceiling( &
2227 cross_cutoff*sqrt(sum(cell%h_inv(idir, :)**2))) + 1
2242 ALLOCATE (vxc_h_local, mold=vxc_h)
2243 ALLOCATE (vxc_s_local, mold=vxc_s)
2244 ALLOCATE (vxg_h_local, mold=vxg_h)
2245 ALLOCATE (vxg_s_local, mold=vxg_s)
2246 ALLOCATE (vtau_h_local, mold=vtau_h)
2247 ALLOCATE (vtau_s_local, mold=vtau_s)
2248 vxc_h_local = 0.0_dp
2249 vxc_s_local = 0.0_dp
2250 vxg_h_local = 0.0_dp
2251 vxg_s_local = 0.0_dp
2252 vtau_h_local = 0.0_dp
2253 vtau_s_local = 0.0_dp
2255 DO composite_row = 1, composite_nflat
2256 target_atom = composite_grid_atom(composite_row)
2257 cross_density_adjoint = 0.0_dp
2258 cross_grad_adjoint = 0.0_dp
2259 cross_kin_adjoint = 0.0_dp
2261 IF (use_atom_composite_density)
THEN
2262 cross_density_adjoint(1:2) = &
2263 composite_density_grad(composite_row, 1:2)
2265 IF (use_atom_composite_gradient)
THEN
2266 cross_grad_adjoint(:, 1:2) = &
2267 composite_grad_grad(composite_row, :, 1:2)
2269 IF (use_atom_composite_tau)
THEN
2270 cross_kin_adjoint(1:2) = &
2271 composite_kin_grad(composite_row, 1:2)
2274 IF (use_atom_composite_density)
THEN
2275 cross_density_adjoint(1) = 0.5_dp* &
2276 sum(composite_density_grad(composite_row, :))
2278 IF (use_atom_composite_gradient)
THEN
2280 cross_grad_adjoint(idir, 1) = 0.5_dp* &
2281 sum(composite_grad_grad(composite_row, idir, :))
2284 IF (use_atom_composite_tau)
THEN
2285 cross_kin_adjoint(1) = 0.5_dp* &
2286 sum(composite_kin_grad(composite_row, :))
2292 fractional(idir) = fractional(idir) + cell%h_inv(idir, jdir)* &
2293 (composite_grid_coords(jdir, composite_row) - &
2294 particle_set(iatom)%r(jdir))
2297 CALL atom_grid_image_bounds(cell, fractional, cross_cutoff, image_shell, &
2298 image_lower, image_upper)
2299 DO image_i3 = image_lower(3), image_upper(3)
2300 DO image_i2 = image_lower(2), image_upper(2)
2301 DO image_i1 = image_lower(1), image_upper(1)
2302 image_shift = [image_i1, image_i2, image_i3]
2303 IF (target_atom == iatom .AND. all(image_shift == 0)) cycle
2304 image_translation = matmul( &
2305 cell%hmat, real(image_shift,
dp))
2306 cross_displacement = &
2307 composite_grid_coords(:, composite_row) - &
2308 particle_set(iatom)%r - image_translation
2310 IF (sqrt(sum(cross_displacement**2)) > cross_cutoff) cycle
2311 CALL add_gapw_atom_grid_interpolation_adjoint( &
2312 grid_atom, harmonics, cross_displacement, cross_cutoff, &
2313 nspins, cross_density_adjoint, cross_grad_adjoint, &
2314 cross_kin_adjoint, vxc_h_local, vxc_s_local, vxg_h_local, vxg_s_local, &
2315 vtau_h_local, vtau_s_local)
2322 vxc_h = vxc_h + vxc_h_local
2323 vxc_s = vxc_s + vxc_s_local
2324 vxg_h = vxg_h + vxg_h_local
2325 vxg_s = vxg_s + vxg_s_local
2326 vtau_h = vtau_h + vtau_h_local
2327 vtau_s = vtau_s + vtau_s_local
2329 DEALLOCATE (vxc_h_local, vxc_s_local, vxg_h_local, vxg_s_local, vtau_h_local, vtau_s_local)
2336 CALL para_env%sum(vxc_h)
2337 CALL para_env%sum(vxc_s)
2338 CALL para_env%sum(vxg_h)
2339 CALL para_env%sum(vxg_s)
2340 CALL para_env%sum(vtau_h)
2341 CALL para_env%sum(vtau_s)
2342 IF (.NOT. source_matrix_local) cycle
2344 one_center_rho_grad_field_contraction = &
2345 one_center_rho_grad_field_contraction + sum(vxc_h*(rho_h - rho_s)) + &
2346 sum(vxg_h*(drho_h(1:3, :, :, :) - drho_s(1:3, :, :, :)))
2347 one_center_density_field_contraction = one_center_density_field_contraction + &
2348 sum(vxc_h*(rho_h - rho_s))
2349 one_center_gradient_field_contraction = one_center_gradient_field_contraction + &
2350 sum(vxg_h*(drho_h(1:3, :, :, :) - &
2351 drho_s(1:3, :, :, :)))
2352 one_center_tau_field_contraction = one_center_tau_field_contraction + &
2353 sum(vtau_h*(tau_h - tau_s))
2355 ALLOCATE (composite_int_h(
SIZE(int_hh(1)%r_coef, 1), &
2356 SIZE(int_hh(1)%r_coef, 2), nspins), &
2357 composite_int_s(
SIZE(int_ss(1)%r_coef, 1), &
2358 SIZE(int_ss(1)%r_coef, 2), nspins))
2359 DO ispin = 1, nspins
2360 composite_int_h(:, :, ispin) = int_hh(ispin)%r_coef
2361 composite_int_s(:, :, ispin) = int_ss(ispin)%r_coef
2362 int_hh(ispin)%r_coef = 0.0_dp
2363 int_ss(ispin)%r_coef = 0.0_dp
2366 grid_atom, basis_1c, harmonics, nspins)
2367 DO ispin = 1, nspins
2368 one_center_density_matrix_contraction = &
2369 one_center_density_matrix_contraction + &
2370 contract_one_center_matrix(cpc_h(ispin)%r_coef, &
2371 int_hh(ispin)%r_coef, &
2372 tau_basis_cache%n2oindex) - &
2373 contract_one_center_matrix(cpc_s(ispin)%r_coef, &
2374 int_ss(ispin)%r_coef, &
2375 tau_basis_cache%n2oindex)
2376 int_hh(ispin)%r_coef = 0.0_dp
2377 int_ss(ispin)%r_coef = 0.0_dp
2379 CALL gavxcgb_gc(vxc_h, vxc_s, vxg_h, vxg_s, int_hh, int_ss, &
2380 grid_atom, basis_1c, harmonics, nspins)
2381 DO ispin = 1, nspins
2382 one_center_rho_grad_matrix_contraction = &
2383 one_center_rho_grad_matrix_contraction + &
2384 contract_one_center_matrix(cpc_h(ispin)%r_coef, &
2385 int_hh(ispin)%r_coef, &
2386 tau_basis_cache%n2oindex) - &
2387 contract_one_center_matrix(cpc_s(ispin)%r_coef, &
2388 int_ss(ispin)%r_coef, &
2389 tau_basis_cache%n2oindex)
2391 CALL dgavtaudgb(vtau_h, vtau_s, int_hh, int_ss, tau_basis_cache, nspins)
2392 DO ispin = 1, nspins
2393 one_center_matrix_contraction = one_center_matrix_contraction + &
2394 contract_one_center_matrix(cpc_h(ispin)%r_coef, &
2395 int_hh(ispin)%r_coef, &
2396 tau_basis_cache%n2oindex) - &
2397 contract_one_center_matrix(cpc_s(ispin)%r_coef, &
2398 int_ss(ispin)%r_coef, &
2399 tau_basis_cache%n2oindex)
2400 IF (.NOT. atom_composite_reference)
THEN
2401 int_hh(ispin)%r_coef = composite_int_h(:, :, ispin)
2402 int_ss(ispin)%r_coef = composite_int_s(:, :, ispin)
2405 DEALLOCATE (composite_int_h, composite_int_s)
2410 CALL para_env%sum(one_center_density_field_contraction)
2411 CALL para_env%sum(one_center_density_matrix_contraction)
2412 CALL para_env%sum(one_center_gradient_field_contraction)
2413 CALL para_env%sum(one_center_matrix_contraction)
2414 CALL para_env%sum(one_center_rho_grad_field_contraction)
2415 CALL para_env%sum(one_center_rho_grad_matrix_contraction)
2416 CALL para_env%sum(one_center_tau_field_contraction)
2417 one_center_field_contraction = one_center_rho_grad_field_contraction + &
2418 one_center_tau_field_contraction
2419 one_center_gradient_matrix_contraction = one_center_rho_grad_matrix_contraction - &
2420 one_center_density_matrix_contraction
2421 one_center_tau_matrix_contraction = one_center_matrix_contraction - &
2422 one_center_rho_grad_matrix_contraction
2423 feature_component_analytic(1) = sum(composite_density_grad*composite_density)
2424 feature_component_analytic(2) = sum(composite_grad_grad*composite_grad)
2425 feature_component_analytic(3) = sum(composite_kin_grad*composite_kin)
2426 feature_component_analytic(4) = sum(feature_component_analytic(1:3))
2427 CALL para_env%sum(feature_component_analytic)
2428 one_center_tensor_contraction = feature_component_analytic(4) - &
2429 smooth_input_contraction
2430 IF (atom_composite_diagnostic)
THEN
2431 DO icomponent = 1, 4
2432 SELECT CASE (icomponent)
2434 composite_density = (1.0_dp + feature_vxc_step)*composite_density
2436 composite_grad = (1.0_dp + feature_vxc_step)*composite_grad
2438 composite_kin = (1.0_dp + feature_vxc_step)*composite_kin
2440 composite_density = (1.0_dp + feature_vxc_step)*composite_density
2441 composite_grad = (1.0_dp + feature_vxc_step)*composite_grad
2442 composite_kin = (1.0_dp + feature_vxc_step)*composite_kin
2445 my_xc_section, para_env, composite_density, composite_grad, composite_kin, &
2446 composite_grid_coords, composite_grid_weights, composite_atomic_grid_weights, &
2447 composite_local_grid_sizes, composite_local_atom_coords, feature_vxc_plus)
2448 SELECT CASE (icomponent)
2450 composite_density = ((1.0_dp - feature_vxc_step)/ &
2451 (1.0_dp + feature_vxc_step))*composite_density
2453 composite_grad = ((1.0_dp - feature_vxc_step)/ &
2454 (1.0_dp + feature_vxc_step))*composite_grad
2456 composite_kin = ((1.0_dp - feature_vxc_step)/ &
2457 (1.0_dp + feature_vxc_step))*composite_kin
2459 composite_density = ((1.0_dp - feature_vxc_step)/ &
2460 (1.0_dp + feature_vxc_step))*composite_density
2461 composite_grad = ((1.0_dp - feature_vxc_step)/ &
2462 (1.0_dp + feature_vxc_step))*composite_grad
2463 composite_kin = ((1.0_dp - feature_vxc_step)/ &
2464 (1.0_dp + feature_vxc_step))*composite_kin
2467 my_xc_section, para_env, composite_density, composite_grad, composite_kin, &
2468 composite_grid_coords, composite_grid_weights, composite_atomic_grid_weights, &
2469 composite_local_grid_sizes, composite_local_atom_coords, feature_vxc_minus)
2470 SELECT CASE (icomponent)
2472 composite_density = composite_density/(1.0_dp - feature_vxc_step)
2474 composite_grad = composite_grad/(1.0_dp - feature_vxc_step)
2476 composite_kin = composite_kin/(1.0_dp - feature_vxc_step)
2478 composite_density = composite_density/(1.0_dp - feature_vxc_step)
2479 composite_grad = composite_grad/(1.0_dp - feature_vxc_step)
2480 composite_kin = composite_kin/(1.0_dp - feature_vxc_step)
2482 feature_component_fd(icomponent) = &
2483 (feature_vxc_plus - feature_vxc_minus)/(2.0_dp*feature_vxc_step)
2485 feature_vxc_analytic = feature_component_analytic(4)
2486 feature_vxc_fd = feature_component_fd(4)
2489 WRITE (unit=iw, fmt=
"(T2,A,1X,I0)") &
2490 "SKALA_GPW| Atom-composite reference components", atom_composite_components
2491 WRITE (unit=iw, fmt=
"(T2,A,1X,ES24.16)") &
2492 "SKALA_GPW| Atom-composite reference electrons", atom_composite_nelec
2493 WRITE (unit=iw, fmt=
"(T2,A,1X,ES24.16)") &
2494 "SKALA_GPW| Atom-composite reference XC energy", atom_composite_exc
2495 WRITE (unit=iw, fmt=
"(T2,A,1X,ES24.16)") &
2496 "SKALA_GPW| Atom-composite feature VXC contraction", feature_vxc_analytic
2497 WRITE (unit=iw, fmt=
"(T2,A,1X,ES24.16)") &
2498 "SKALA_GPW| Atom-composite feature finite difference", feature_vxc_fd
2499 WRITE (unit=iw, fmt=
"(T2,A,1X,ES24.16)") &
2500 "SKALA_GPW| Atom-composite feature VXC error", &
2501 feature_vxc_analytic - feature_vxc_fd
2502 WRITE (unit=iw, fmt=
"(T2,A,3(1X,ES24.16))") &
2503 "SKALA_GPW| Atom-composite smooth PW adjoint", smooth_input_contraction, &
2504 smooth_grid_contraction, smooth_grid_contraction - smooth_input_contraction
2505 WRITE (unit=iw, fmt=
"(T2,A,4(1X,ES24.16))") &
2506 "SKALA_GPW| Atom-composite one-center adjoint", one_center_tensor_contraction, &
2507 one_center_field_contraction, one_center_matrix_contraction, &
2508 one_center_matrix_contraction - one_center_tensor_contraction
2509 WRITE (unit=iw, fmt=
"(T2,A,4(1X,ES24.16))") &
2510 "SKALA_GPW| Atom-composite one-center channels", &
2511 one_center_rho_grad_field_contraction, one_center_rho_grad_matrix_contraction, &
2512 one_center_tau_field_contraction, one_center_tau_matrix_contraction
2513 WRITE (unit=iw, fmt=
"(T2,A,4(1X,ES24.16))") &
2514 "SKALA_GPW| Atom-composite one-center rho-gradient", &
2515 one_center_density_field_contraction, one_center_density_matrix_contraction, &
2516 one_center_gradient_field_contraction, one_center_gradient_matrix_contraction
2517 DO icomponent = 1, 3
2518 WRITE (unit=iw, fmt=
"(T2,A,1X,I0,3(1X,ES24.16))") &
2519 "SKALA_GPW| Atom-composite component VXC", icomponent, &
2520 feature_component_analytic(icomponent), feature_component_fd(icomponent), &
2521 feature_component_analytic(icomponent) - feature_component_fd(icomponent)
2525 IF (atom_composite_reference)
THEN
2526 exc1 = atom_composite_exc
2527 IF (native_grid_diagnostics)
THEN
2528 IF (composite_nflat > 0)
THEN
2529 composite_density_min = minval(composite_density)
2530 composite_density_max = maxval(composite_density)
2531 composite_kin_min = minval(composite_kin)
2532 composite_kin_max = maxval(composite_kin)
2533 composite_grad_max = maxval(abs(composite_grad))
2535 composite_density_min = huge(1.0_dp)
2536 composite_density_max = -huge(1.0_dp)
2537 composite_kin_min = huge(1.0_dp)
2538 composite_kin_max = -huge(1.0_dp)
2539 composite_grad_max = 0.0_dp
2541 composite_tau_integral = &
2542 sum(composite_grid_weights*sum(composite_kin, dim=2))
2543 CALL para_env%min(composite_density_min)
2544 CALL para_env%max(composite_density_max)
2545 CALL para_env%min(composite_kin_min)
2546 CALL para_env%max(composite_kin_max)
2547 CALL para_env%max(composite_grad_max)
2548 CALL para_env%sum(composite_tau_integral)
2552 WRITE (unit=iw, fmt=
"(T2,A,1X,ES24.16)") &
2553 "SKALA_GPW| Active atom-composite XC energy", atom_composite_exc
2554 IF (native_grid_diagnostics)
THEN
2555 WRITE (unit=iw, fmt=
"(T2,A,1X,ES24.16)") &
2556 "SKALA_GPW| Active atom-composite electrons", atom_composite_nelec
2557 WRITE (unit=iw, fmt=
"(T2,A,2(1X,ES24.16))") &
2558 "SKALA_GPW| Active atom-composite density range", &
2559 composite_density_min, composite_density_max
2560 WRITE (unit=iw, fmt=
"(T2,A,2(1X,ES24.16))") &
2561 "SKALA_GPW| Active atom-composite tau range", &
2562 composite_kin_min, composite_kin_max
2563 WRITE (unit=iw, fmt=
"(T2,A,1X,ES24.16)") &
2564 "SKALA_GPW| Active atom-composite tau integral", &
2565 composite_tau_integral
2566 WRITE (unit=iw, fmt=
"(T2,A,1X,ES24.16)") &
2567 "SKALA_GPW| Active atom-composite max gradient", &
2573 DEALLOCATE (composite_atomic_grid_sizes, composite_atom_kind, &
2574 composite_atom_kind_index, composite_atom_start, composite_atom_end, &
2575 composite_atom_coords, composite_local_atoms, composite_local_grid_sizes, &
2576 composite_local_atom_coords, composite_grid_atom, &
2577 composite_partition_weights, composite_partition_atom_coords, &
2578 composite_distances, composite_density, composite_grad, composite_kin, &
2579 composite_smooth_density_cache, composite_smooth_gradient_cache, &
2580 composite_smooth_kin_cache, &
2581 composite_density_grad, composite_grad_grad, composite_kin_grad, &
2582 composite_grid_coords, composite_grid_weights, &
2583 composite_base_grid_weights, composite_atomic_grid_weights)
2585 DEALLOCATE (composite_smooth_rhoa, composite_smooth_rhob, &
2586 composite_smooth_tau_a, composite_smooth_tau_b)
2588 DEALLOCATE (composite_smooth_drhoa(idir)%array, &
2589 composite_smooth_drhob(idir)%array)
2592 DEALLOCATE (composite_smooth_rho, composite_smooth_tau)
2594 DEALLOCATE (composite_smooth_drho(idir)%array)
2599 IF (.NOT. atom_composite_reference)
CALL para_env%sum(exc1)
2601 IF (
ASSOCIATED(rho_h))
DEALLOCATE (rho_h)
2602 IF (
ASSOCIATED(rho_s))
DEALLOCATE (rho_s)
2603 IF (
ASSOCIATED(vxc_h))
DEALLOCATE (vxc_h)
2604 IF (
ASSOCIATED(vxc_s))
DEALLOCATE (vxc_s)
2606 IF (gradient_f)
THEN
2607 IF (
ASSOCIATED(drho_h))
DEALLOCATE (drho_h)
2608 IF (
ASSOCIATED(drho_s))
DEALLOCATE (drho_s)
2609 IF (
ASSOCIATED(vxg_h))
DEALLOCATE (vxg_h)
2610 IF (
ASSOCIATED(vxg_s))
DEALLOCATE (vxg_s)
2614 IF (
ASSOCIATED(tau_h))
DEALLOCATE (tau_h)
2615 IF (
ASSOCIATED(tau_s))
DEALLOCATE (tau_s)
2616 IF (
ASSOCIATED(vtau_h))
DEALLOCATE (vtau_h)
2617 IF (
ASSOCIATED(vtau_s))
DEALLOCATE (vtau_s)
2622 CALL timestop(handle)