Skip to content

Commit

Permalink
better copies
Browse files Browse the repository at this point in the history
  • Loading branch information
abussy committed Jul 11, 2022
1 parent 8ed2d75 commit 0eed7cc
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 14 deletions.
13 changes: 10 additions & 3 deletions src/hfx_ri.F
Original file line number Diff line number Diff line change
Expand Up @@ -2371,7 +2371,7 @@ SUBROUTINE hfx_ri_forces_Pmat(qs_env, ri_data, nspins, hf_fraction, rho_ao, rho_
TYPE(cp_para_env_type), POINTER :: para_env
TYPE(dbcsr_type) :: dbcsr_tmp
TYPE(dbt_type) :: rho_ao_1, rho_ao_2, t_2c_RI, t_2c_RI_tmp, t_2c_tmp, t_3c_1, t_3c_2, &
t_3c_3, t_3c_4, t_3c_ao_ri_ao, t_3c_help_1, t_3c_help_2, t_3c_int, t_3c_int_2, &
t_3c_3, t_3c_4, t_3c_5, t_3c_ao_ri_ao, t_3c_help_1, t_3c_help_2, t_3c_int, t_3c_int_2, &
t_3c_ri_ao_ao, t_3c_sparse, t_R, t_SVS
TYPE(dbt_type), DIMENSION(3) :: t_2c_der_metric, t_2c_der_RI, &
t_3c_der_AO, t_3c_der_RI, t_3c_tmp
Expand Down Expand Up @@ -2477,6 +2477,7 @@ SUBROUTINE hfx_ri_forces_Pmat(qs_env, ri_data, nspins, hf_fraction, rho_ao, rho_
CALL dbt_create(t_3c_ao_ri_ao, t_3c_2)
CALL dbt_create(t_3c_ri_ao_ao, t_3c_3)
CALL dbt_create(t_3c_ri_ao_ao, t_3c_4)
CALL dbt_create(t_3c_ri_ao_ao, t_3c_5)
CALL dbt_create(t_3c_ri_ao_ao, t_3c_help_1)
CALL dbt_create(t_3c_ri_ao_ao, t_3c_help_2)
Expand Down Expand Up @@ -2516,6 +2517,8 @@ SUBROUTINE hfx_ri_forces_Pmat(qs_env, ri_data, nspins, hf_fraction, rho_ao, rho_
CALL dbt_batched_contract_init(t_3c_2, batch_range_1=batch_ranges, batch_range_3=batch_ranges)
CALL dbt_batched_contract_init(t_3c_3, batch_range_2=batch_ranges, batch_range_3=batch_ranges)
CALL dbt_batched_contract_init(t_3c_4, batch_range_2=batch_ranges, batch_range_3=batch_ranges)
CALL dbt_batched_contract_init(t_3c_5, batch_range_2=batch_ranges, batch_range_3=batch_ranges)
CALL dbt_batched_contract_init(t_3c_sparse, batch_range_2=batch_ranges, batch_range_3=batch_ranges)
DO i_spin = 1, nspins
Expand Down Expand Up @@ -2597,7 +2600,7 @@ SUBROUTINE hfx_ri_forces_Pmat(qs_env, ri_data, nspins, hf_fraction, rho_ao, rho_
ri_data%dbcsr_nflop = ri_data%dbcsr_nflop + nflop
CALL dbt_batched_contract_finalize(t_SVS)
CALL dbt_copy(t_3c_4, t_3c_help_1, move_data=.TRUE., summation=.TRUE.)
CALL dbt_copy(t_3c_4, t_3c_5, move_data=.TRUE., summation=.TRUE.)
ijbounds(:, 1) = ibounds(:, 1)
ijbounds(:, 2) = jbounds(:, 1)
Expand All @@ -2612,10 +2615,11 @@ SUBROUTINE hfx_ri_forces_Pmat(qs_env, ri_data, nspins, hf_fraction, rho_ao, rho_
ri_data%dbcsr_nflop = ri_data%dbcsr_nflop + nflop
CALL dbt_batched_contract_finalize(t_R)
CALL dbt_copy(t_3c_4, t_3c_3)
END DO !j_mem
END DO !i_mem
CALL dbt_copy(t_3c_5, t_3c_help_1, move_data=.TRUE.)
!The force from the 3c derivatives
pref = -0.5_dp*2.0_dp*hf_fraction*spin_fac
IF (use_virial_prv) THEN
Expand Down Expand Up @@ -2727,6 +2731,8 @@ SUBROUTINE hfx_ri_forces_Pmat(qs_env, ri_data, nspins, hf_fraction, rho_ao, rho_
CALL dbt_batched_contract_finalize(t_3c_2)
CALL dbt_batched_contract_finalize(t_3c_3)
CALL dbt_batched_contract_finalize(t_3c_4)
CALL dbt_batched_contract_finalize(t_3c_5)
CALL dbt_batched_contract_finalize(t_3c_sparse)
CALL mp_sync(para_env%group)
t2 = m_walltime()
Expand All @@ -2744,6 +2750,7 @@ SUBROUTINE hfx_ri_forces_Pmat(qs_env, ri_data, nspins, hf_fraction, rho_ao, rho_
CALL dbt_destroy(t_3c_2)
CALL dbt_destroy(t_3c_3)
CALL dbt_destroy(t_3c_4)
CALL dbt_destroy(t_3c_5)
CALL dbt_destroy(t_3c_help_1)
CALL dbt_destroy(t_3c_help_2)
CALL dbt_destroy(t_3c_sparse)
Expand Down
36 changes: 25 additions & 11 deletions src/rpa_im_time_force_methods.F
Original file line number Diff line number Diff line change
Expand Up @@ -607,8 +607,8 @@ SUBROUTINE calc_laplace_loop_forces(force_data, mat_P_omega, t_3c_M, t_3c_O, t_3
dbcsr_work_symm, exp_occ, exp_virt, &
R_occ, R_virt, Y_1, Y_2
TYPE(dbt_type) :: t_2c_AO, t_2c_RI, t_2c_RI_2, t_2c_tmp, t_3c_0, t_3c_1, t_3c_3, t_3c_4, &
t_3c_5, t_3c_6, t_3c_7, t_3c_help_1, t_3c_help_2, t_3c_ints, t_3c_sparse, t_3c_work, &
t_dm_occ, t_dm_virt, t_KQKT, t_M_occ, t_M_virt, t_Q, t_R_occ, t_R_virt
t_3c_5, t_3c_6, t_3c_7, t_3c_8, t_3c_help_1, t_3c_help_2, t_3c_ints, t_3c_sparse, &
t_3c_work, t_dm_occ, t_dm_virt, t_KQKT, t_M_occ, t_M_virt, t_Q, t_R_occ, t_R_virt
TYPE(dbt_type), ALLOCATABLE, DIMENSION(:) :: t_P
TYPE(dft_control_type), POINTER :: dft_control
TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
Expand Down Expand Up @@ -697,6 +697,7 @@ SUBROUTINE calc_laplace_loop_forces(force_data, mat_P_omega, t_3c_M, t_3c_O, t_3
CALL dbt_create(t_3c_O, t_3c_5)
CALL dbt_create(t_3c_M, t_3c_6)
CALL dbt_create(t_3c_M, t_3c_7)
CALL dbt_create(t_3c_M, t_3c_8)
CALL dbt_create(t_3c_M, t_3c_sparse)
CALL dbt_create(t_3c_O, t_3c_help_1)
CALL dbt_create(t_3c_O, t_3c_help_2)
Expand Down Expand Up @@ -738,7 +739,10 @@ SUBROUTINE calc_laplace_loop_forces(force_data, mat_P_omega, t_3c_M, t_3c_O, t_3
batch_range_3=mc_ranges)
CALL dbt_batched_contract_init(t_3c_7, batch_range_1=mc_ranges_RI, batch_range_2=mc_ranges, &
batch_range_3=mc_ranges)
CALL dbt_batched_contract_init(t_3c_sparse, batch_range_2=mc_ranges, batch_range_3=mc_ranges)
CALL dbt_batched_contract_init(t_3c_8, batch_range_1=mc_ranges_RI, batch_range_2=mc_ranges, &
batch_range_3=mc_ranges)
CALL dbt_batched_contract_init(t_3c_sparse, batch_range_1=mc_ranges_RI, batch_range_2=mc_ranges, &
batch_range_3=mc_ranges)

DO jquad = 1, num_integ_points
tau = tau_tj(jquad)
Expand Down Expand Up @@ -805,7 +809,7 @@ SUBROUTINE calc_laplace_loop_forces(force_data, mat_P_omega, t_3c_M, t_3c_O, t_3
!Deal with the 3-center quantities.
CALL perform_3c_ops(force, work_virial, t_R_occ, t_R_virt, force_data, fac, cut_memory, n_mem_RI, &
t_KQKT, t_dm_occ, t_dm_virt, t_3c_O, t_3c_M, t_M_occ, t_M_virt, t_3c_0, t_3c_1, &
t_3c_3, t_3c_4, t_3c_5, t_3c_6, t_3c_7, t_3c_sparse, t_3c_help_1, t_3c_help_2, &
t_3c_3, t_3c_4, t_3c_5, t_3c_6, t_3c_7, t_3c_8, t_3c_sparse, t_3c_help_1, t_3c_help_2, &
t_3c_ints, t_3c_work, starts_array_mc, ends_array_mc, batch_start_RI, &
batch_end_RI, t_3c_O_compressed, t_3c_O_ind, use_virial, cell, particle_set, &
atom_of_kind, kind_of, eps_filter, occ_ddint, nze_ddint, dbcsr_nflop, &
Expand Down Expand Up @@ -935,6 +939,7 @@ SUBROUTINE calc_laplace_loop_forces(force_data, mat_P_omega, t_3c_M, t_3c_O, t_3
CALL dbt_batched_contract_finalize(t_3c_5)
CALL dbt_batched_contract_finalize(t_3c_6)
CALL dbt_batched_contract_finalize(t_3c_7)
CALL dbt_batched_contract_finalize(t_3c_8)
CALL dbt_batched_contract_finalize(t_3c_sparse)

!Calculate the periodic contributions of (P|Q) to the force and the virial
Expand Down Expand Up @@ -969,6 +974,7 @@ SUBROUTINE calc_laplace_loop_forces(force_data, mat_P_omega, t_3c_M, t_3c_O, t_3
CALL dbt_destroy(t_3c_5)
CALL dbt_destroy(t_3c_6)
CALL dbt_destroy(t_3c_7)
CALL dbt_destroy(t_3c_8)
CALL dbt_destroy(t_3c_sparse)
CALL dbt_destroy(t_3c_help_1)
CALL dbt_destroy(t_3c_help_2)
Expand Down Expand Up @@ -1106,8 +1112,8 @@ SUBROUTINE calc_rpa_loop_forces(force_data, mat_P_omega, t_3c_M, t_3c_O, t_3c_O_
dbcsr_work_symm, exp_occ, exp_virt, &
R_occ, R_virt, Y_1, Y_2
TYPE(dbt_type) :: t_2c_AO, t_2c_RI, t_2c_RI_2, t_2c_tmp, t_3c_0, t_3c_1, t_3c_3, t_3c_4, &
t_3c_5, t_3c_6, t_3c_7, t_3c_help_1, t_3c_help_2, t_3c_ints, t_3c_sparse, t_3c_work, &
t_dm_occ, t_dm_virt, t_KBKT, t_M_occ, t_M_virt, t_P, t_R_occ, t_R_virt
t_3c_5, t_3c_6, t_3c_7, t_3c_8, t_3c_help_1, t_3c_help_2, t_3c_ints, t_3c_sparse, &
t_3c_work, t_dm_occ, t_dm_virt, t_KBKT, t_M_occ, t_M_virt, t_P, t_R_occ, t_R_virt
TYPE(dbt_type), ALLOCATABLE, DIMENSION(:) :: t_B
TYPE(dft_control_type), POINTER :: dft_control
TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
Expand Down Expand Up @@ -1192,6 +1198,7 @@ SUBROUTINE calc_rpa_loop_forces(force_data, mat_P_omega, t_3c_M, t_3c_O, t_3c_O_
CALL dbt_create(t_3c_O, t_3c_5)
CALL dbt_create(t_3c_M, t_3c_6)
CALL dbt_create(t_3c_M, t_3c_7)
CALL dbt_create(t_3c_M, t_3c_8)
CALL dbt_create(t_3c_M, t_3c_sparse)
CALL dbt_create(t_3c_O, t_3c_help_1)
CALL dbt_create(t_3c_O, t_3c_help_2)
Expand Down Expand Up @@ -1310,7 +1317,10 @@ SUBROUTINE calc_rpa_loop_forces(force_data, mat_P_omega, t_3c_M, t_3c_O, t_3c_O_
batch_range_3=mc_ranges)
CALL dbt_batched_contract_init(t_3c_7, batch_range_1=mc_ranges_RI, batch_range_2=mc_ranges, &
batch_range_3=mc_ranges)
CALL dbt_batched_contract_init(t_3c_sparse, batch_range_2=mc_ranges, batch_range_3=mc_ranges)
CALL dbt_batched_contract_init(t_3c_8, batch_range_1=mc_ranges_RI, batch_range_2=mc_ranges, &
batch_range_3=mc_ranges)
CALL dbt_batched_contract_init(t_3c_sparse, batch_range_1=mc_ranges_RI, batch_range_2=mc_ranges, &
batch_range_3=mc_ranges)

fac = 1.0_dp/fourpi*mp2_env%ri_rpa%scale_rpa
IF (open_shell) fac = 0.5_dp*fac
Expand Down Expand Up @@ -1360,7 +1370,7 @@ SUBROUTINE calc_rpa_loop_forces(force_data, mat_P_omega, t_3c_M, t_3c_O, t_3c_O_
!Deal with the 3-center quantities.
CALL perform_3c_ops(force, work_virial, t_R_occ, t_R_virt, force_data, fac, cut_memory, n_mem_RI, &
t_KBKT, t_dm_occ, t_dm_virt, t_3c_O, t_3c_M, t_M_occ, t_M_virt, t_3c_0, t_3c_1, &
t_3c_3, t_3c_4, t_3c_5, t_3c_6, t_3c_7, t_3c_sparse, t_3c_help_1, t_3c_help_2, &
t_3c_3, t_3c_4, t_3c_5, t_3c_6, t_3c_7, t_3c_8, t_3c_sparse, t_3c_help_1, t_3c_help_2, &
t_3c_ints, t_3c_work, starts_array_mc, ends_array_mc, batch_start_RI, &
batch_end_RI, t_3c_O_compressed, t_3c_O_ind, use_virial, cell, particle_set, &
atom_of_kind, kind_of, eps_filter, occ_ddint, nze_ddint, dbcsr_nflop, &
Expand Down Expand Up @@ -1495,6 +1505,7 @@ SUBROUTINE calc_rpa_loop_forces(force_data, mat_P_omega, t_3c_M, t_3c_O, t_3c_O_
CALL dbt_batched_contract_finalize(t_3c_5)
CALL dbt_batched_contract_finalize(t_3c_6)
CALL dbt_batched_contract_finalize(t_3c_7)
CALL dbt_batched_contract_finalize(t_3c_8)
CALL dbt_batched_contract_finalize(t_3c_sparse)

!Calculate the periodic contributions of (P|Q) to the force and the virial
Expand Down Expand Up @@ -1530,6 +1541,7 @@ SUBROUTINE calc_rpa_loop_forces(force_data, mat_P_omega, t_3c_M, t_3c_O, t_3c_O_
CALL dbt_destroy(t_3c_5)
CALL dbt_destroy(t_3c_6)
CALL dbt_destroy(t_3c_7)
CALL dbt_destroy(t_3c_8)
CALL dbt_destroy(t_3c_sparse)
CALL dbt_destroy(t_3c_help_1)
CALL dbt_destroy(t_3c_help_2)
Expand Down Expand Up @@ -1720,6 +1732,7 @@ END SUBROUTINE perform_2c_ops
!> \param t_3c_5 ...
!> \param t_3c_6 ...
!> \param t_3c_7 ...
!> \param t_3c_8 ...
!> \param t_3c_sparse ...
!> \param t_3c_help_1 ...
!> \param t_3c_help_2 ...
Expand All @@ -1745,7 +1758,7 @@ END SUBROUTINE perform_2c_ops
! **************************************************************************************************
SUBROUTINE perform_3c_ops(force, work_virial, t_R_occ, t_R_virt, force_data, fac, cut_memory, n_mem_RI, &
t_KBKT, t_dm_occ, t_dm_virt, t_3c_O, t_3c_M, t_M_occ, t_M_virt, t_3c_0, t_3c_1, &
t_3c_3, t_3c_4, t_3c_5, t_3c_6, t_3c_7, t_3c_sparse, t_3c_help_1, t_3c_help_2, &
t_3c_3, t_3c_4, t_3c_5, t_3c_6, t_3c_7, t_3c_8, t_3c_sparse, t_3c_help_1, t_3c_help_2, &
t_3c_ints, t_3c_work, starts_array_mc, ends_array_mc, batch_start_RI, &
batch_end_RI, t_3c_O_compressed, t_3c_O_ind, use_virial, cell, particle_set, &
atom_of_kind, kind_of, eps_filter, occ_ddint, nze_ddint, dbcsr_nflop, &
Expand All @@ -1758,7 +1771,7 @@ SUBROUTINE perform_3c_ops(force, work_virial, t_R_occ, t_R_virt, force_data, fac
REAL(dp), INTENT(IN) :: fac
INTEGER, INTENT(IN) :: cut_memory, n_mem_RI
TYPE(dbt_type), INTENT(INOUT) :: t_KBKT, t_dm_occ, t_dm_virt, t_3c_O, t_3c_M, t_M_occ, &
t_M_virt, t_3c_0, t_3c_1, t_3c_3, t_3c_4, t_3c_5, t_3c_6, t_3c_7, t_3c_sparse, &
t_M_virt, t_3c_0, t_3c_1, t_3c_3, t_3c_4, t_3c_5, t_3c_6, t_3c_7, t_3c_8, t_3c_sparse, &
t_3c_help_1, t_3c_help_2, t_3c_ints, t_3c_work
INTEGER, DIMENSION(:), INTENT(IN) :: starts_array_mc, ends_array_mc, &
batch_start_RI, batch_end_RI
Expand Down Expand Up @@ -1928,11 +1941,12 @@ SUBROUTINE perform_3c_ops(force, work_virial, t_R_occ, t_R_virt, force_data, fac
dbcsr_nflop = dbcsr_nflop + flop
CALL dbt_batched_contract_finalize(t_KBKT)
CALL timestop(handle2)
CALL dbt_copy(t_3c_7, t_3c_help_1, summation=.TRUE.)
CALL dbt_copy(t_3c_7, t_3c_8, summation=.TRUE.)

END DO !k_mem
END DO !j_mem
END DO !i_mem
CALL dbt_copy(t_3c_8, t_3c_help_1, move_data=.TRUE.)

pref = 1.0_dp*fac
IF (use_virial) THEN
Expand Down

0 comments on commit 0eed7cc

Please sign in to comment.