Skip to content

Commit

Permalink
RI HFX: minor tweaks for block sizes and complete output of parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
pseewald committed Mar 7, 2020
1 parent 3568f8f commit e32a109
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 27 deletions.
21 changes: 7 additions & 14 deletions src/hfx_ri.F
Original file line number Diff line number Diff line change
Expand Up @@ -710,8 +710,7 @@ SUBROUTINE hfx_ri_update_ks_mo(qs_env, ri_data, ks_matrix, mo_coeff, &
TYPE(cp_para_env_type), POINTER :: para_env
TYPE(dbcsr_distribution_type) :: ks_dist
TYPE(dbcsr_t_pgrid_type) :: pgrid_1, pgrid_2, pgrid_2d
TYPE(dbcsr_t_type) :: ks_t, ks_t_split, mo_coeff_t, &
mo_coeff_t_split
TYPE(dbcsr_t_type) :: ks_t, mo_coeff_t, mo_coeff_t_split
TYPE(dbcsr_t_type), DIMENSION(1, 1) :: t_3c_ctr_KS, t_3c_ctr_KS_copy, &
t_3c_ctr_RI, t_3c_int_mo_1, &
t_3c_int_mo_2, t_3c_int_mo_3
Expand Down Expand Up @@ -749,24 +748,24 @@ SUBROUTINE hfx_ri_update_ks_mo(qs_env, ri_data, ks_matrix, mo_coeff, &
CALL dbcsr_t_pgrid_create(para_env%group, pdims, pgrid_2)

CALL create_3c_tensor(t_3c_int_mo_1(1, 1), dist1, dist2, dist3, ri_data%pgrid_1, &
ri_data%bsizes_AO_split, ri_data%bsizes_RI_split, mo_bsizes, &
ri_data%bsizes_AO, ri_data%bsizes_RI_split, mo_bsizes, &
[1, 2], [3], name="(AO RI | MO)")

DEALLOCATE (dist1, dist2, dist3)

CALL create_3c_tensor(t_3c_int_mo_2(1, 1), dist1, dist2, dist3, ri_data%pgrid_2, &
mo_bsizes, ri_data%bsizes_RI_split, ri_data%bsizes_AO_split, &
mo_bsizes, ri_data%bsizes_RI_split, ri_data%bsizes_AO, &
[1], [2, 3], "(MO | RI AO)")

DEALLOCATE (dist1, dist2, dist3)

CALL create_3c_tensor(t_3c_int_mo_3(1, 1), dist1, dist2, dist3, pgrid_2, &
ri_data%bsizes_RI_split, mo_bsizes, ri_data%bsizes_AO_split, &
ri_data%bsizes_RI_split, mo_bsizes, ri_data%bsizes_AO, &
[1], [2, 3], name="(RI | MO AO)")

DEALLOCATE (dist1, dist2, dist3)
CALL create_3c_tensor(t_3c_ctr_KS(1, 1), dist1, dist2, dist3, pgrid_2, &
ri_data%bsizes_RI_split, mo_bsizes, ri_data%bsizes_AO_split, &
ri_data%bsizes_RI_split, mo_bsizes, ri_data%bsizes_AO, &
[1, 2], [3], name="(RI MO | AO)")
DEALLOCATE (dist1, dist2, dist3)
CALL dbcsr_t_pgrid_destroy(pgrid_2)
Expand All @@ -781,11 +780,7 @@ SUBROUTINE hfx_ri_update_ks_mo(qs_env, ri_data, ks_matrix, mo_coeff, &
CALL dbcsr_distribution_get(ks_dist, group=comm_2d, nprows=pdims_2d(1), npcols=pdims_2d(2))
pgrid_2d = dbcsr_t_nd_mp_comm(comm_2d, [1], [2], pdims_2d=pdims_2d)

CALL create_2c_tensor(ks_t_split, dist1, dist2, pgrid_2d, ri_data%bsizes_AO_split, ri_data%bsizes_AO_split, &
name="(AO | AO)")
DEALLOCATE (dist1, dist2)

CALL create_2c_tensor(mo_coeff_t_split, dist1, dist2, pgrid_2d, ri_data%bsizes_AO_split, mo_bsizes, &
CALL create_2c_tensor(mo_coeff_t_split, dist1, dist2, pgrid_2d, ri_data%bsizes_AO, mo_bsizes, &
name="(AO | MO)")

DEALLOCATE (dist1, dist2)
Expand Down Expand Up @@ -867,7 +862,7 @@ SUBROUTINE hfx_ri_update_ks_mo(qs_env, ri_data, ks_matrix, mo_coeff, &

CALL timeset(routineN//"_3Cx3C", handle2)
CALL dbcsr_t_contract(dbcsr_scalar(1.0_dp), t_3c_ctr_KS(1, 1), t_3c_ctr_KS_copy(1, 1), &
dbcsr_scalar(0.0_dp), ks_t_split, &
dbcsr_scalar(0.0_dp), ks_t, &
contract_1=[1, 2], notcontract_1=[3], &
contract_2=[1, 2], notcontract_2=[3], &
map_1=[1], map_2=[2], filter_eps=ri_data%filter_eps, &
Expand All @@ -877,8 +872,6 @@ SUBROUTINE hfx_ri_update_ks_mo(qs_env, ri_data, ks_matrix, mo_coeff, &
CALL dbcsr_t_destroy(t_3c_ctr_KS(1, 1))
CALL dbcsr_t_destroy(t_3c_ctr_KS_copy(1, 1))

CALL dbcsr_t_copy(ks_t_split, ks_t, move_data=.TRUE.)
CALL dbcsr_t_destroy(ks_t_split)
CALL dbcsr_t_filter(ks_t, ri_data%filter_eps)
CALL dbcsr_t_copy_tensor_to_matrix(ks_t, ks_matrix(ispin, 1)%matrix, summation=.TRUE.)
CALL dbcsr_t_destroy(ks_t)
Expand Down
38 changes: 29 additions & 9 deletions src/hfx_types.F
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,7 @@ MODULE hfx_types
REAL(KIND=dp) :: filter_eps, filter_eps_2c, filter_eps_3c, filter_eps_mo, &
eps_lanczos, eps_pgf_orb
INTEGER :: t2c_sqrt_order, max_iter_lanczos, flavor, unit_nr_dbcsr, unit_nr, &
max_bsize, max_bsize_mo, t2c_method, nelectron_total
max_bsize_RI, max_bsize_mo, max_bsize_AO, t2c_method, nelectron_total
LOGICAL :: check_2c_inv

TYPE(libint_potential_type) :: ri_metric
Expand Down Expand Up @@ -1130,7 +1130,8 @@ SUBROUTINE hfx_ri_init_read_input(ri_data, ri_section, qs_kind_set, &
CALL section_vals_val_get(ri_section, "MAX_ITER_LANCZOS", i_val=ri_data%max_iter_lanczos)
CALL section_vals_val_get(ri_section, "RI_FLAVOR", i_val=ri_data%flavor)
CALL section_vals_val_get(ri_section, "EPS_PGF_ORB", r_val=ri_data%eps_pgf_orb)
CALL section_vals_val_get(ri_section, "MAX_BLOCK_SIZE", i_val=ri_data%max_bsize)
CALL section_vals_val_get(ri_section, "MAX_BLOCK_SIZE_RI", i_val=ri_data%max_bsize_RI)
CALL section_vals_val_get(ri_section, "MAX_BLOCK_SIZE_AO", i_val=ri_data%max_bsize_AO)
CALL section_vals_val_get(ri_section, "MAX_BLOCK_SIZE_MO", i_val=ri_data%max_bsize_mo)

ri_data%orb_basis_type = orb_basis_type
Expand Down Expand Up @@ -1266,8 +1267,8 @@ SUBROUTINE hfx_ri_init(ri_data, qs_kind_set, particle_set, para_env, basis_cntrl

! initialize tensors expressed in basis representation

CALL split_block_sizes(ri_data%bsizes_AO, ri_data%bsizes_AO_split, ri_data%max_bsize)
CALL split_block_sizes(ri_data%bsizes_RI, ri_data%bsizes_RI_split, ri_data%max_bsize)
CALL split_block_sizes(ri_data%bsizes_AO, ri_data%bsizes_AO_split, ri_data%max_bsize_AO)
CALL split_block_sizes(ri_data%bsizes_RI, ri_data%bsizes_RI_split, ri_data%max_bsize_RI)

IF (ri_data%flavor == ri_pmat) THEN
ALLOCATE (ri_data%t_3c_int_ctr_1(1, 1))
Expand Down Expand Up @@ -1329,13 +1330,13 @@ SUBROUTINE hfx_ri_init(ri_data, qs_kind_set, particle_set, para_env, basis_cntrl
CALL dbcsr_t_pgrid_create(para_env%group, pdims, ri_data%pgrid_2)

CALL create_3c_tensor(ri_data%t_3c_int_ctr_1(1, 1), ri_data%dist1_ao_1, ri_data%dist1_ri, ri_data%dist1_ao_2, &
ri_data%pgrid_1, ri_data%bsizes_AO_split, ri_data%bsizes_RI_split, ri_data%bsizes_AO_split, &
ri_data%pgrid_1, ri_data%bsizes_AO, ri_data%bsizes_RI_split, ri_data%bsizes_AO, &
[1, 2], [3], name="(AO RI | AO)")

ALLOCATE (ri_data%t_3c_int_ctr_2(1, 1))
CALL create_3c_tensor(ri_data%t_3c_int_ctr_2(1, 1), ri_data%dist2_ao_1, ri_data%dist2_ri, ri_data%dist2_ao_2, &
ri_data%pgrid_2, ri_data%bsizes_AO_split, ri_data%bsizes_RI_split, ri_data%bsizes_AO_split, &
[1], [2, 3], name="(AO | RI AO)")
ri_data%pgrid_2, ri_data%bsizes_AO, ri_data%bsizes_RI_split, ri_data%bsizes_AO, &
[1], [2, 3], "(AO | RI AO)")

ENDIF
CALL timestop(handle)
Expand Down Expand Up @@ -2504,18 +2505,37 @@ SUBROUTINE hfx_print_ri_info(ri_data, hfx_section)
WRITE (UNIT=iw, FMT="(T3, A, T78, A)") &
"HFX_RI_INFO| RI flavor: ", "RHO"
END SELECT
SELECT CASE (ri_data%do_loc)
CASE (.TRUE.)
WRITE (UNIT=iw, FMT="(T3, A, T80)") &
"HFX_RI_INFO| Localized MOs: ", "T"
CASE (.FALSE.)
WRITE (UNIT=iw, FMT="(T3, A, T80)") &
"HFX_RI_INFO| Localized MOs: ", "F"
END SELECT
SELECT CASE (ri_data%t2c_method)
CASE (hfx_ri_do_2c_iter)
WRITE (UNIT=iw, FMT="(T3, A, T69, A)") &
"HFX_RI_INFO| Matrix SQRT/INV", "DBCSR / iter"
CASE (hfx_ri_do_2c_diag)
WRITE (UNIT=iw, FMT="(T3, A, T65, A)") &
"HFX_RI_INFO| Matrix SQRT/INV", "Scalapack / diag"
"HFX_RI_INFO| Matrix SQRT/INV", "Dense / diag"
END SELECT
WRITE (UNIT=iw, FMT="(T3, A, T73, ES8.1)") &
"HFX_RI_INFO| EPS_FILTER", ri_data%filter_eps
WRITE (UNIT=iw, FMT="(T3, A, T73, ES8.1)") &
"HFX_RI_INFO| EPS_FILTER 2-center", ri_data%filter_eps_2c
WRITE (UNIT=iw, FMT="(T3, A, T73, ES8.1)") &
"HFX_RI_INFO| EPS_FILTER 3-center", ri_data%filter_eps_3c
WRITE (UNIT=iw, FMT="(T3, A, T73, ES8.1)") &
"HFX_RI_INFO| EPS_FILTER MO", ri_data%filter_eps_mo
WRITE (UNIT=iw, FMT="(T3, A, T73, ES8.1)") &
"HFX_RI_INFO| EPS_PGF_ORB", ri_data%eps_pgf_orb
WRITE (UNIT=iw, FMT="((T3, A, T73, ES8.1))") &
"HFX_INFO| EPS_SCHWARZ: ", ri_data%eps_schwarz
"HFX_RI_INFO| EPS_SCHWARZ: ", ri_data%eps_schwarz
WRITE (UNIT=iw, FMT="(T3, A, T70, I3, 1X, I3, 1X, I3)") &
"HFX_RI_INFO| Maximum block size RI, MO, AO", ri_data%max_bsize_RI, ri_data%max_bsize_mo, ri_data%max_bsize_AO
ENDIF
END SUBROUTINE
Expand Down
13 changes: 9 additions & 4 deletions src/input_cp2k_hfx.F
Original file line number Diff line number Diff line change
Expand Up @@ -625,15 +625,20 @@ SUBROUTINE create_hf_ri_section(section)
CALL section_add_keyword(section, keyword)
CALL keyword_release(keyword)

CALL keyword_create(keyword, __LOCATION__, name="MAX_BLOCK_SIZE", &
description="Maximum block size in one dimension for sparse tensors. Blocking affects load balancing.", &
CALL keyword_create(keyword, __LOCATION__, name="MAX_BLOCK_SIZE_RI", &
description="Maximum block size for RI orbitals.", &
default_i_val=10)
CALL section_add_keyword(section, keyword)
CALL keyword_release(keyword)

CALL keyword_create(keyword, __LOCATION__, name="MAX_BLOCK_SIZE_MO", &
description="Maximum block size for molecular orbitals. "// &
"Blocking affects parallelization strategy and load balancing.", &
description="Maximum block size for molecular orbitals.", &
default_i_val=10)
CALL section_add_keyword(section, keyword)
CALL keyword_release(keyword)

CALL keyword_create(keyword, __LOCATION__, name="MAX_BLOCK_SIZE_AO", &
description="Maximum block size for atomic orbitals.", &
default_i_val=10)
CALL section_add_keyword(section, keyword)
CALL keyword_release(keyword)
Expand Down

0 comments on commit e32a109

Please sign in to comment.