51 TYPE(dbcsr_type) :: matrix_m_diag
53 CHARACTER(len=*),
PARAMETER :: routinen =
'pao_calc_grad_lnv_wrt_U'
56 REAL(kind=
dp) :: filter_eps
57 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_s
58 TYPE(dbcsr_type) :: matrix_m, matrix_ma, matrix_mb, matrix_nm
62 CALL timeset(routinen, handle)
64 ls_mstruct => ls_scf_env%ls_mstruct
65 pao => ls_scf_env%pao_env
66 filter_eps = ls_scf_env%eps_filter
72 CALL dbcsr_create(matrix_m, template=matrix_s(1)%matrix, matrix_type=
"N")
73 CALL dbcsr_reserve_diag_blocks(matrix_m)
75 CALL dbcsr_create(matrix_nm, template=ls_mstruct%matrix_A, matrix_type=
"N")
77 CALL dbcsr_multiply(
"N",
"N", 1.0_dp, pao%matrix_N_inv, matrix_ma, &
78 1.0_dp, matrix_nm, filter_eps=filter_eps)
80 CALL dbcsr_multiply(
"N",
"N", 1.0_dp, pao%matrix_N, matrix_mb, &
81 1.0_dp, matrix_nm, filter_eps=filter_eps)
83 CALL dbcsr_multiply(
"N",
"T", 1.0_dp, matrix_nm, pao%matrix_Y, &
84 1.0_dp, matrix_m, filter_eps=filter_eps)
88 CALL dbcsr_create(matrix_m_diag, &
89 name=
"PAO matrix_M", &
91 dist=pao%diag_distribution, &
92 template=matrix_s(1)%matrix)
93 CALL dbcsr_reserve_diag_blocks(matrix_m_diag)
94 CALL dbcsr_complete_redistribute(matrix_m, matrix_m_diag)
98 CALL dbcsr_release(matrix_m)
99 CALL dbcsr_release(matrix_ma)
100 CALL dbcsr_release(matrix_mb)
101 CALL dbcsr_release(matrix_nm)
103 CALL timestop(handle)
117 TYPE(dbcsr_type) :: matrix_u_diag
119 CHARACTER(len=*),
PARAMETER :: routinen =
'pao_calc_AB_from_U'
121 INTEGER :: acol, arow, handle, iatom
123 REAL(
dp),
DIMENSION(:, :),
POINTER :: block_a, block_b, block_n, block_n_inv, &
125 TYPE(dbcsr_iterator_type) :: iter
126 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_s
127 TYPE(dbcsr_type) :: matrix_u
130 CALL timeset(routinen, handle)
132 ls_mstruct => ls_scf_env%ls_mstruct
136 CALL pao_assert_unitary(pao, matrix_u_diag)
141 CALL dbcsr_create(matrix_u, matrix_type=
"N", template=matrix_s(1)%matrix)
142 CALL dbcsr_reserve_diag_blocks(matrix_u)
143 CALL dbcsr_complete_redistribute(matrix_u_diag, matrix_u)
151 CALL dbcsr_iterator_start(iter, matrix_u)
152 DO WHILE (dbcsr_iterator_blocks_left(iter))
153 CALL dbcsr_iterator_next_block(iter, arow, acol, block_u)
154 iatom = arow; cpassert(arow == acol)
156 CALL dbcsr_get_block_p(matrix=pao%matrix_Y, row=iatom, col=iatom, block=block_y, found=found)
157 cpassert(
ASSOCIATED(block_y))
159 CALL dbcsr_get_block_p(matrix=ls_mstruct%matrix_A, row=iatom, col=iatom, block=block_a, found=found)
160 CALL dbcsr_get_block_p(matrix=pao%matrix_N_inv, row=iatom, col=iatom, block=block_n_inv, found=found)
161 cpassert(
ASSOCIATED(block_a) .AND.
ASSOCIATED(block_n_inv))
163 CALL dbcsr_get_block_p(matrix=ls_mstruct%matrix_B, row=iatom, col=iatom, block=block_b, found=found)
164 CALL dbcsr_get_block_p(matrix=pao%matrix_N, row=iatom, col=iatom, block=block_n, found=found)
165 cpassert(
ASSOCIATED(block_b) .AND.
ASSOCIATED(block_n))
167 block_a = matmul(matmul(block_n_inv, block_u), block_y)
168 block_b = matmul(matmul(block_n, block_u), block_y)
171 CALL dbcsr_iterator_stop(iter)
174 CALL dbcsr_release(matrix_u)
176 CALL timestop(handle)
252 TYPE(dbcsr_type) :: matrix_ma, matrix_mb
254 CHARACTER(len=*),
PARAMETER :: routinen =
'pao_calc_grad_lnv_wrt_AB'
256 INTEGER :: handle, nspin
257 INTEGER,
DIMENSION(:),
POINTER :: pao_blk_sizes
258 REAL(kind=
dp) :: filter_eps
259 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_ks, matrix_s, rho_ao
260 TYPE(dbcsr_type) :: matrix_hb, matrix_hps, matrix_m, matrix_m1, matrix_m1_dc, matrix_m2, &
261 matrix_m2_dc, matrix_m3, matrix_m3_dc, matrix_pa, matrix_ph, matrix_php, matrix_psp, &
268 CALL timeset(routinen, handle)
270 ls_mstruct => ls_scf_env%ls_mstruct
271 pao => ls_scf_env%pao_env
275 matrix_ks=matrix_ks, &
277 dft_control=dft_control)
279 nspin = dft_control%nspins
280 filter_eps = ls_scf_env%eps_filter
282 CALL dbcsr_get_info(ls_mstruct%matrix_A, col_blk_size=pao_blk_sizes)
284 IF (nspin /= 1) cpabort(
"open shell not yet implemented")
292 CALL dbcsr_create(matrix_ph, template=ls_scf_env%matrix_s, matrix_type=
"N")
293 CALL dbcsr_multiply(
"N",
"N", 1.0_dp, ls_scf_env%matrix_p(1), ls_scf_env%matrix_ks(1), &
294 0.0_dp, matrix_ph, filter_eps=filter_eps)
296 CALL dbcsr_create(matrix_php, template=ls_scf_env%matrix_s, matrix_type=
"N")
297 CALL dbcsr_multiply(
"N",
"N", 1.0_dp, matrix_ph, ls_scf_env%matrix_p(1), &
298 0.0_dp, matrix_php, filter_eps=filter_eps)
300 CALL dbcsr_create(matrix_sp, template=ls_scf_env%matrix_s, matrix_type=
"N")
301 CALL dbcsr_multiply(
"N",
"N", 1.0_dp, ls_scf_env%matrix_s, ls_scf_env%matrix_p(1), &
302 0.0_dp, matrix_sp, filter_eps=filter_eps)
304 IF (nspin == 1)
CALL dbcsr_scale(matrix_sp, 0.5_dp)
306 CALL dbcsr_create(matrix_hps, template=ls_scf_env%matrix_s, matrix_type=
"N")
307 CALL dbcsr_multiply(
"N",
"T", 1.0_dp, ls_scf_env%matrix_ks(1), matrix_sp, &
308 0.0_dp, matrix_hps, filter_eps=filter_eps)
310 CALL dbcsr_create(matrix_psp, template=ls_scf_env%matrix_s, matrix_type=
"N")
311 CALL dbcsr_multiply(
"N",
"N", 1.0_dp, ls_scf_env%matrix_p(1), matrix_sp, &
312 0.0_dp, matrix_psp, filter_eps=filter_eps)
316 CALL dbcsr_create(matrix_m1, template=ls_scf_env%matrix_s, matrix_type=
"N")
318 CALL dbcsr_multiply(
"N",
"T", 3.0_dp, ls_scf_env%matrix_ks(1), matrix_sp, &
319 1.0_dp, matrix_m1, filter_eps=filter_eps)
321 CALL dbcsr_multiply(
"N",
"N", 3.0_dp, matrix_sp, ls_scf_env%matrix_ks(1), &
322 1.0_dp, matrix_m1, filter_eps=filter_eps)
324 CALL dbcsr_multiply(
"N",
"T", -2.0_dp, matrix_hps, matrix_sp, &
325 1.0_dp, matrix_m1, filter_eps=filter_eps)
327 CALL dbcsr_multiply(
"N",
"N", -2.0_dp, matrix_sp, matrix_hps, &
328 1.0_dp, matrix_m1, filter_eps=filter_eps)
330 CALL dbcsr_multiply(
"N",
"T", -2.0_dp, matrix_sp, matrix_hps, &
331 1.0_dp, matrix_m1, filter_eps=filter_eps)
334 CALL dbcsr_create(matrix_m1_dc, &
335 template=matrix_s(1)%matrix, &
336 row_blk_size=pao_blk_sizes, &
337 col_blk_size=pao_blk_sizes)
342 CALL dbcsr_create(matrix_m2, template=ls_scf_env%matrix_s, matrix_type=
"N")
344 CALL dbcsr_add(matrix_m2, matrix_psp, 1.0_dp, 3.0_dp)
346 CALL dbcsr_multiply(
"N",
"N", -2.0_dp, matrix_psp, matrix_sp, &
347 1.0_dp, matrix_m2, filter_eps=filter_eps)
350 CALL dbcsr_create(matrix_m2_dc, &
351 template=matrix_s(1)%matrix, &
352 row_blk_size=pao_blk_sizes, &
353 col_blk_size=pao_blk_sizes)
358 CALL dbcsr_create(matrix_m3, template=ls_scf_env%matrix_s, matrix_type=
"N")
360 CALL dbcsr_add(matrix_m3, matrix_php, 1.0_dp, 3.0_dp)
362 CALL dbcsr_multiply(
"N",
"N", -2.0_dp, matrix_php, matrix_sp, &
363 1.0_dp, matrix_m3, filter_eps=filter_eps)
365 CALL dbcsr_multiply(
"N",
"T", -2.0_dp, matrix_psp, matrix_ph, &
366 1.0_dp, matrix_m3, filter_eps=filter_eps)
369 CALL dbcsr_create(matrix_m3_dc, &
370 template=matrix_s(1)%matrix, &
371 row_blk_size=pao_blk_sizes, &
372 col_blk_size=pao_blk_sizes)
379 CALL dbcsr_create(matrix_ma, template=ls_mstruct%matrix_A, matrix_type=
"N")
380 CALL dbcsr_reserve_diag_blocks(matrix_ma)
381 CALL dbcsr_create(matrix_mb, template=ls_mstruct%matrix_B, matrix_type=
"N")
382 CALL dbcsr_reserve_diag_blocks(matrix_mb)
386 CALL dbcsr_create(matrix_pa, template=ls_mstruct%matrix_A, matrix_type=
"N")
387 CALL dbcsr_multiply(
"N",
"N", 1.0_dp, rho_ao(1)%matrix, ls_mstruct%matrix_A, &
388 0.0_dp, matrix_pa, filter_eps=filter_eps)
391 CALL dbcsr_multiply(
"N",
"N", 1.0_dp, matrix_pa, matrix_m1_dc, &
392 0.0_dp, matrix_ma, filter_eps=filter_eps)
396 CALL dbcsr_create(matrix_hb, template=ls_mstruct%matrix_B, matrix_type=
"N")
397 CALL dbcsr_multiply(
"N",
"N", 1.0_dp, matrix_ks(1)%matrix, ls_mstruct%matrix_B, &
398 0.0_dp, matrix_hb, filter_eps=filter_eps)
401 CALL dbcsr_multiply(
"N",
"N", 1.0_dp, matrix_hb, matrix_m2_dc, &
402 0.0_dp, matrix_mb, filter_eps=filter_eps)
406 CALL dbcsr_create(matrix_sb, template=ls_mstruct%matrix_B, matrix_type=
"N")
407 CALL dbcsr_multiply(
"N",
"N", 1.0_dp, matrix_s(1)%matrix, ls_mstruct%matrix_B, &
408 0.0_dp, matrix_sb, filter_eps=filter_eps)
410 IF (nspin == 1)
CALL dbcsr_scale(matrix_sb, 0.5_dp)
413 CALL dbcsr_multiply(
"N",
"N", 1.0_dp, matrix_sb, matrix_m3_dc, &
414 1.0_dp, matrix_mb, filter_eps=filter_eps)
416 IF (nspin == 1)
CALL dbcsr_scale(matrix_ma, 2.0_dp)
417 IF (nspin == 1)
CALL dbcsr_scale(matrix_mb, 2.0_dp)
421 CALL dbcsr_release(matrix_ph)
422 CALL dbcsr_release(matrix_php)
423 CALL dbcsr_release(matrix_sp)
424 CALL dbcsr_release(matrix_hps)
425 CALL dbcsr_release(matrix_psp)
426 CALL dbcsr_release(matrix_m)
427 CALL dbcsr_release(matrix_m1)
428 CALL dbcsr_release(matrix_m2)
429 CALL dbcsr_release(matrix_m3)
430 CALL dbcsr_release(matrix_m1_dc)
431 CALL dbcsr_release(matrix_m2_dc)
432 CALL dbcsr_release(matrix_m3_dc)
433 CALL dbcsr_release(matrix_pa)
434 CALL dbcsr_release(matrix_hb)
435 CALL dbcsr_release(matrix_sb)
437 CALL timestop(handle)
subroutine, public get_qs_env(qs_env, atomic_kind_set, qs_kind_set, cell, super_cell, cell_ref, use_ref_cell, kpoints, dft_control, mos, sab_orb, sab_all, qmmm, qmmm_periodic, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, ecoul_1c, rho0_s_rs, rho0_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, rhs)
Get the QUICKSTEP environment.