30 USE dbcsr_api,
ONLY: &
31 dbcsr_add, dbcsr_copy, dbcsr_create, dbcsr_deallocate_matrix, dbcsr_desymmetrize, &
32 dbcsr_get_info, dbcsr_p_type, dbcsr_release, dbcsr_set, dbcsr_type, dbcsr_type_no_symmetry
63 #include "./base/base_uses.f90"
72 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'rtp_admm_methods'
84 TYPE(qs_environment_type),
POINTER :: qs_env
86 CHARACTER(LEN=*),
PARAMETER :: routinen =
'rtp_admm_calc_rho_aux'
88 CHARACTER(LEN=default_string_length) :: basis_type
89 INTEGER :: handle, ispin, nspins
90 LOGICAL :: gapw, s_mstruct_changed
91 REAL(kind=
dp),
DIMENSION(:),
POINTER :: tot_rho_r_aux
92 TYPE(admm_type),
POINTER :: admm_env
93 TYPE(cp_fm_type),
DIMENSION(:),
POINTER :: rtp_coeff_aux_fit
94 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_p_aux, matrix_p_aux_im, &
96 matrix_s_aux_fit_vs_orb
97 TYPE(dft_control_type),
POINTER :: dft_control
98 TYPE(mo_set_type),
DIMENSION(:),
POINTER :: mos, mos_aux_fit
99 TYPE(mp_para_env_type),
POINTER :: para_env
100 TYPE(pw_c1d_gs_type),
DIMENSION(:),
POINTER :: rho_g_aux
101 TYPE(pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho_r_aux
102 TYPE(qs_ks_env_type),
POINTER :: ks_env
103 TYPE(qs_rho_type),
POINTER :: rho, rho_aux_fit
104 TYPE(rt_prop_type),
POINTER :: rtp
105 TYPE(task_list_type),
POINTER :: task_list_aux_fit
107 CALL timeset(routinen, handle)
108 NULLIFY (admm_env, matrix_p_aux, matrix_p_aux_im, mos, &
109 mos_aux_fit, para_env, matrix_s_aux_fit, matrix_s_aux_fit_vs_orb, rho, &
110 ks_env, dft_control, tot_rho_r_aux, rho_r_aux, rho_g_aux, task_list_aux_fit)
115 dft_control=dft_control, &
120 s_mstruct_changed=s_mstruct_changed)
121 CALL get_admm_env(admm_env, matrix_s_aux_fit=matrix_s_aux_fit, task_list_aux_fit=task_list_aux_fit, &
122 matrix_s_aux_fit_vs_orb=matrix_s_aux_fit_vs_orb, mos_aux_fit=mos_aux_fit, &
123 rho_aux_fit=rho_aux_fit)
124 gapw = admm_env%do_gapw
126 nspins = dft_control%nspins
128 CALL get_rtp(rtp=rtp, admm_mos=rtp_coeff_aux_fit)
129 CALL rtp_admm_fit_mo_coeffs(qs_env, admm_env, dft_control%admm_control, para_env, &
130 matrix_s_aux_fit, matrix_s_aux_fit_vs_orb, &
131 mos, mos_aux_fit, rtp, rtp_coeff_aux_fit, &
136 rho_ao=matrix_p_aux, &
137 rho_ao_im=matrix_p_aux_im, &
140 tot_rho_r=tot_rho_r_aux)
142 CALL rtp_admm_calculate_dm(admm_env, rtp_coeff_aux_fit, &
143 matrix_p_aux(ispin)%matrix, &
144 matrix_p_aux_im(ispin)%matrix, &
148 basis_type =
"AUX_FIT"
150 basis_type =
"AUX_FIT_SOFT"
151 task_list_aux_fit => admm_env%admm_gapw_env%task_list
155 rho=rho_r_aux(ispin), &
156 rho_gspace=rho_g_aux(ispin), &
157 total_rho=tot_rho_r_aux(ispin), &
158 ks_env=ks_env, soft_valid=.false., &
159 basis_type=
"AUX_FIT", &
160 task_list_external=task_list_aux_fit)
165 rho_atom_set=admm_env%admm_gapw_env%local_rho_set%rho_atom_set, &
166 qs_kind_set=admm_env%admm_gapw_env%admm_kind_set, &
167 oce=admm_env%admm_gapw_env%oce, sab=admm_env%sab_aux_fit, &
170 CALL prepare_gapw_den(qs_env, local_rho_set=admm_env%admm_gapw_env%local_rho_set, &
171 do_rho0=.false., kind_set_external=admm_env%admm_gapw_env%admm_kind_set)
175 CALL qs_rho_set(rho_aux_fit, rho_r_valid=.true., rho_g_valid=.true.)
177 CALL timestop(handle)
189 SUBROUTINE rtp_admm_calculate_dm(admm_env, rtp_coeff_aux_fit, density_matrix_aux, &
190 density_matrix_aux_im, ispin)
191 TYPE(admm_type),
POINTER :: admm_env
192 TYPE(cp_fm_type),
DIMENSION(:),
POINTER :: rtp_coeff_aux_fit
193 TYPE(dbcsr_type),
POINTER :: density_matrix_aux, density_matrix_aux_im
194 INTEGER,
INTENT(in) :: ispin
196 CHARACTER(len=*),
PARAMETER :: routinen =
'rtp_admm_calculate_dm'
200 CALL timeset(routinen, handle)
202 SELECT CASE (admm_env%purification_method)
204 CALL calculate_rtp_admm_density(density_matrix_aux, density_matrix_aux_im, &
205 rtp_coeff_aux_fit, ispin)
207 cpwarn(
"only purification NONE possible with RTP/EMD at the moment")
210 CALL timestop(handle)
212 END SUBROUTINE rtp_admm_calculate_dm
228 SUBROUTINE rtp_admm_fit_mo_coeffs(qs_env, admm_env, admm_control, para_env, matrix_s_aux_fit, matrix_s_mixed, &
229 mos, mos_aux_fit, rtp, rtp_coeff_aux_fit, geometry_did_change)
231 TYPE(qs_environment_type),
POINTER :: qs_env
232 TYPE(admm_type),
POINTER :: admm_env
233 TYPE(admm_control_type),
POINTER :: admm_control
234 TYPE(mp_para_env_type),
POINTER :: para_env
235 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_s_aux_fit, matrix_s_mixed
236 TYPE(mo_set_type),
DIMENSION(:),
INTENT(IN) :: mos, mos_aux_fit
237 TYPE(rt_prop_type),
POINTER :: rtp
238 TYPE(cp_fm_type),
DIMENSION(:),
POINTER :: rtp_coeff_aux_fit
239 LOGICAL,
INTENT(IN) :: geometry_did_change
241 CHARACTER(LEN=*),
PARAMETER :: routinen =
'rtp_admm_fit_mo_coeffs'
243 INTEGER :: handle, nao_aux_fit, natoms
245 TYPE(qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
246 TYPE(section_vals_type),
POINTER :: input, xc_section
248 CALL timeset(routinen, handle)
250 NULLIFY (xc_section, qs_kind_set)
252 IF (.NOT. (
ASSOCIATED(admm_env)))
THEN
254 CALL get_qs_env(qs_env, input=input, natom=natoms, qs_kind_set=qs_kind_set)
255 CALL get_qs_kind_set(qs_kind_set, nsgf=nao_aux_fit, basis_type=
"AUX_FIT")
256 CALL admm_env_create(admm_env, admm_control, mos, para_env, natoms, nao_aux_fit)
262 cpwarn(
"RTP requires BASIS_PROJECTION.")
266 recalc_s = geometry_did_change .OR. (rtp%iter == 0 .AND. (rtp%istep == rtp%i_start))
268 SELECT CASE (admm_env%purification_method)
270 CALL rtp_fit_mo_coeffs_none(qs_env, admm_env, para_env, matrix_s_aux_fit, matrix_s_mixed, &
271 mos, mos_aux_fit, rtp, rtp_coeff_aux_fit, recalc_s)
273 cpwarn(
"Purification method not implemented in combination with RTP")
276 CALL timestop(handle)
278 END SUBROUTINE rtp_admm_fit_mo_coeffs
298 SUBROUTINE rtp_fit_mo_coeffs_none(qs_env, admm_env, para_env, matrix_s_aux_fit, matrix_s_mixed, &
299 mos, mos_aux_fit, rtp, rtp_coeff_aux_fit, geometry_did_change)
301 TYPE(qs_environment_type),
POINTER :: qs_env
302 TYPE(admm_type),
POINTER :: admm_env
303 TYPE(mp_para_env_type),
POINTER :: para_env
304 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_s_aux_fit, matrix_s_mixed
305 TYPE(mo_set_type),
DIMENSION(:),
INTENT(IN) :: mos, mos_aux_fit
306 TYPE(rt_prop_type),
POINTER :: rtp
307 TYPE(cp_fm_type),
DIMENSION(:),
POINTER :: rtp_coeff_aux_fit
308 LOGICAL,
INTENT(IN) :: geometry_did_change
310 CHARACTER(LEN=*),
PARAMETER :: routinen =
'rtp_fit_mo_coeffs_none'
312 INTEGER :: handle, ispin, nao_aux_fit, nao_orb, &
313 natoms, nmo, nmo_mos, nspins
314 REAL(kind=
dp),
DIMENSION(:),
POINTER :: occ_num, occ_num_aux
315 TYPE(cp_fm_type),
DIMENSION(:),
POINTER :: mos_new
316 TYPE(cp_fm_type),
POINTER :: mo_coeff, mo_coeff_aux_fit
317 TYPE(dft_control_type),
POINTER :: dft_control
318 TYPE(qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
319 TYPE(section_vals_type),
POINTER :: input, xc_section
321 CALL timeset(routinen, handle)
323 NULLIFY (dft_control, qs_kind_set)
325 IF (.NOT. (
ASSOCIATED(admm_env)))
THEN
326 CALL get_qs_env(qs_env, input=input, natom=natoms, dft_control=dft_control, qs_kind_set=qs_kind_set)
327 CALL get_qs_kind_set(qs_kind_set, nsgf=nao_aux_fit, basis_type=
"AUX_FIT")
328 CALL admm_env_create(admm_env, dft_control%admm_control, mos, para_env, natoms, nao_aux_fit)
334 nao_aux_fit = admm_env%nao_aux_fit
335 nao_orb = admm_env%nao_orb
340 IF (geometry_did_change)
THEN
343 CALL cp_fm_to_fm(admm_env%S_inv, admm_env%S)
353 CALL parallel_gemm(
'N',
'N', nao_aux_fit, nao_orb, nao_aux_fit, &
354 1.0_dp, admm_env%S_inv, admm_env%Q, 0.0_dp, &
360 nmo = admm_env%nmo(ispin)
363 CALL get_rtp(rtp=rtp, mos_new=mos_new)
364 CALL get_mo_set(mos(ispin), mo_coeff=mo_coeff, occupation_numbers=occ_num, nmo=nmo_mos)
365 CALL get_mo_set(mos_aux_fit(ispin), mo_coeff=mo_coeff_aux_fit, &
366 occupation_numbers=occ_num_aux)
368 CALL parallel_gemm(
'N',
'N', nao_aux_fit, nmo, nao_orb, &
369 1.0_dp, admm_env%A, mos_new(2*ispin - 1), 0.0_dp, &
370 rtp_coeff_aux_fit(2*ispin - 1))
371 CALL parallel_gemm(
'N',
'N', nao_aux_fit, nmo, nao_orb, &
372 1.0_dp, admm_env%A, mos_new(2*ispin), 0.0_dp, &
373 rtp_coeff_aux_fit(2*ispin))
375 CALL cp_fm_to_fm(rtp_coeff_aux_fit(2*ispin - 1), mo_coeff_aux_fit)
378 CALL timestop(handle)
380 END SUBROUTINE rtp_fit_mo_coeffs_none
389 SUBROUTINE calculate_rtp_admm_density(density_matrix_aux, density_matrix_aux_im, &
390 rtp_coeff_aux_fit, ispin)
392 TYPE(dbcsr_type),
POINTER :: density_matrix_aux, density_matrix_aux_im
393 TYPE(cp_fm_type),
DIMENSION(:),
INTENT(IN) :: rtp_coeff_aux_fit
394 INTEGER,
INTENT(in) :: ispin
396 CHARACTER(len=*),
PARAMETER :: routinen =
'calculate_rtp_admm_density'
397 REAL(kind=
dp),
PARAMETER ::
one = 1.0_dp,
zero = 0.0_dp
399 INTEGER :: handle, im, ncol, re
400 REAL(kind=
dp) :: alpha
402 CALL timeset(routinen, handle)
404 re = 2*ispin - 1; im = 2*ispin
405 alpha = 3*
one - real(
SIZE(rtp_coeff_aux_fit)/2,
dp)
406 CALL dbcsr_set(density_matrix_aux,
zero)
409 matrix_v=rtp_coeff_aux_fit(re), &
415 matrix_v=rtp_coeff_aux_fit(im), &
420 CALL dbcsr_set(density_matrix_aux_im,
zero)
422 matrix_v=rtp_coeff_aux_fit(im), &
423 matrix_g=rtp_coeff_aux_fit(re), &
425 alpha=2.0_dp*alpha, &
428 CALL timestop(handle)
430 END SUBROUTINE calculate_rtp_admm_density
437 TYPE(qs_environment_type),
POINTER :: qs_env
439 CHARACTER(LEN=*),
PARAMETER :: routinen =
'rtp_admm_merge_ks_matrix'
441 INTEGER :: handle, ispin
442 TYPE(admm_type),
POINTER :: admm_env
443 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_ks, matrix_ks_aux_fit, &
444 matrix_ks_aux_fit_im, matrix_ks_im
445 TYPE(dft_control_type),
POINTER :: dft_control
447 NULLIFY (admm_env, dft_control, matrix_ks, matrix_ks_im, matrix_ks_aux_fit, matrix_ks_aux_fit_im)
448 CALL timeset(routinen, handle)
452 dft_control=dft_control, &
453 matrix_ks=matrix_ks, &
454 matrix_ks_im=matrix_ks_im)
455 CALL get_admm_env(admm_env, matrix_ks_aux_fit=matrix_ks_aux_fit, matrix_ks_aux_fit_im=matrix_ks_aux_fit_im)
459 DO ispin = 1, dft_control%nspins
461 SELECT CASE (admm_env%purification_method)
463 CALL rt_merge_ks_matrix_none(ispin, admm_env, &
464 matrix_ks, matrix_ks_aux_fit)
465 CALL rt_merge_ks_matrix_none(ispin, admm_env, &
466 matrix_ks_im, matrix_ks_aux_fit_im)
468 cpwarn(
"only purification NONE possible with RTP/EMD at the moment")
472 CALL timestop(handle)
483 SUBROUTINE rt_merge_ks_matrix_none(ispin, admm_env, &
484 matrix_ks, matrix_ks_aux_fit)
485 INTEGER,
INTENT(IN) :: ispin
486 TYPE(admm_type),
POINTER :: admm_env
487 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_ks, matrix_ks_aux_fit
489 CHARACTER(LEN=*),
PARAMETER :: routinen =
'rt_merge_ks_matrix_none'
491 CHARACTER :: matrix_type_fit
492 INTEGER :: handle, nao_aux_fit, nao_orb, nmo
493 INTEGER,
SAVE :: counter = 0
494 TYPE(dbcsr_type) :: matrix_ks_nosym
495 TYPE(dbcsr_type),
POINTER :: matrix_k_tilde
497 CALL timeset(routinen, handle)
499 counter = counter + 1
500 nao_aux_fit = admm_env%nao_aux_fit
501 nao_orb = admm_env%nao_orb
502 nmo = admm_env%nmo(ispin)
503 CALL dbcsr_create(matrix_ks_nosym, template=matrix_ks_aux_fit(ispin)%matrix, &
504 matrix_type=dbcsr_type_no_symmetry)
505 CALL dbcsr_set(matrix_ks_nosym, 0.0_dp)
506 CALL dbcsr_desymmetrize(matrix_ks_aux_fit(ispin)%matrix, matrix_ks_nosym)
511 CALL parallel_gemm(
'N',
'N', nao_aux_fit, nao_orb, nao_aux_fit, &
512 1.0_dp, admm_env%K(ispin), admm_env%A, 0.0_dp, &
513 admm_env%work_aux_orb)
515 CALL parallel_gemm(
'T',
'N', nao_orb, nao_orb, nao_aux_fit, &
516 1.0_dp, admm_env%A, admm_env%work_aux_orb, 0.0_dp, &
517 admm_env%work_orb_orb)
519 CALL dbcsr_get_info(matrix_ks_aux_fit(ispin)%matrix, matrix_type=matrix_type_fit)
521 NULLIFY (matrix_k_tilde)
522 ALLOCATE (matrix_k_tilde)
523 CALL dbcsr_create(matrix_k_tilde, template=matrix_ks(ispin)%matrix, &
524 name=
'MATRIX K_tilde', matrix_type=matrix_type_fit)
526 CALL dbcsr_copy(matrix_k_tilde, matrix_ks(ispin)%matrix)
527 CALL dbcsr_set(matrix_k_tilde, 0.0_dp)
528 CALL copy_fm_to_dbcsr(admm_env%work_orb_orb, matrix_k_tilde, keep_sparsity=.true.)
530 CALL dbcsr_add(matrix_ks(ispin)%matrix, matrix_k_tilde, 1.0_dp, 1.0_dp)
532 CALL dbcsr_deallocate_matrix(matrix_k_tilde)
533 CALL dbcsr_release(matrix_ks_nosym)
535 CALL timestop(handle)
537 END SUBROUTINE rt_merge_ks_matrix_none
Types and set/get functions for auxiliary density matrix methods.
subroutine, public get_admm_env(admm_env, mo_derivs_aux_fit, mos_aux_fit, sab_aux_fit, sab_aux_fit_asymm, sab_aux_fit_vs_orb, matrix_s_aux_fit, matrix_s_aux_fit_kp, matrix_s_aux_fit_vs_orb, matrix_s_aux_fit_vs_orb_kp, task_list_aux_fit, matrix_ks_aux_fit, matrix_ks_aux_fit_kp, matrix_ks_aux_fit_im, matrix_ks_aux_fit_dft, matrix_ks_aux_fit_hfx, matrix_ks_aux_fit_dft_kp, matrix_ks_aux_fit_hfx_kp, rho_aux_fit, rho_aux_fit_buffer, admm_dm)
Get routine for the ADMM env.
subroutine, public admm_env_create(admm_env, admm_control, mos, para_env, natoms, nao_aux_fit, blacs_env_ext)
creates ADMM environment, initializes the basic types
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
DBCSR operations in CP2K.
subroutine, public copy_dbcsr_to_fm(matrix, fm)
Copy a DBCSR matrix to a BLACS matrix.
subroutine, public cp_dbcsr_plus_fm_fm_t(sparse_matrix, matrix_v, matrix_g, ncol, alpha, keep_sparsity, symmetry_mode)
performs the multiplication sparse_matrix+dense_mat*dens_mat^T if matrix_g is not explicitly given,...
subroutine, public copy_fm_to_dbcsr(fm, matrix, keep_sparsity)
Copy a BLACS matrix to a dbcsr matrix.
basic linear algebra operations for full matrices
subroutine, public cp_fm_upper_to_full(matrix, work)
given an upper triangular matrix computes the corresponding full matrix
various cholesky decomposition related routines
subroutine, public cp_fm_cholesky_invert(matrix, n, info_out)
used to replace the cholesky decomposition by the inverse
subroutine, public cp_fm_cholesky_decompose(matrix, n, info_out)
used to replace a symmetric positive def. matrix M with its cholesky decomposition U: M = U^T * U,...
represent a full matrix distributed on many processors
subroutine, public cp_fm_get_info(matrix, name, nrow_global, ncol_global, nrow_block, ncol_block, nrow_local, ncol_local, row_indices, col_indices, local_data, context, nrow_locals, ncol_locals, matrix_struct, para_env)
returns all kind of information about the full matrix
Utilities for hfx and admm methods.
subroutine, public create_admm_xc_section(x_data, xc_section, admm_env)
This routine modifies the xc section depending on the potential type used for the HF exchange and the...
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
Definition of mathematical constants and functions.
real(kind=dp), parameter, public one
real(kind=dp), parameter, public zero
Interface to the message passing library MPI.
basic linear algebra operations for full matrixes
Calculate the plane wave density by collocating the primitive Gaussian functions (pgf).
subroutine, public calculate_rho_elec(matrix_p, matrix_p_kp, rho, rho_gspace, total_rho, ks_env, soft_valid, compute_tau, compute_grad, basis_type, der_type, idir, task_list_external, pw_env_external)
computes the density corresponding to a given density matrix on the grid
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.
subroutine, public set_qs_env(qs_env, super_cell, mos, qmmm, qmmm_periodic, ewald_env, ewald_pw, mpools, rho_external, external_vxc, mask, scf_control, rel_control, qs_charges, ks_env, ks_qmmm_env, wf_history, scf_env, active_space, input, oce, rho_atom_set, rho0_atom_set, rho0_mpole, run_rtp, rtp, rhoz_set, rhoz_tot, ecoul_1c, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, efield, linres_control, xas_env, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, ls_scf_env, do_transport, transport_env, lri_env, lri_density, exstate_env, ec_env, dispersion_env, gcp_env, mp2_env, bs_env, kg_env, force, kpoints, WannierCentres, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, rhs)
Set the QUICKSTEP environment.
subroutine, public prepare_gapw_den(qs_env, local_rho_set, do_rho0, kind_set_external)
...
Define the quickstep kind type and their sub types.
subroutine, public get_qs_kind_set(qs_kind_set, all_potential_present, tnadd_potential_present, gth_potential_present, sgp_potential_present, paw_atom_present, dft_plus_u_atom_present, maxcgf, maxsgf, maxco, maxco_proj, maxgtops, maxlgto, maxlprj, maxnset, maxsgf_set, ncgf, npgf, nset, nsgf, nshell, maxpol, maxlppl, maxlppnl, maxppnl, nelectron, maxder, max_ngrid_rad, max_sph_harm, maxg_iso_not0, lmax_rho0, basis_rcut, basis_type, total_zeff_corr)
Get attributes of an atomic kind set.
Definition and initialisation of the mo data type.
subroutine, public get_mo_set(mo_set, maxocc, homo, lfomo, nao, nelectron, n_el_f, nmo, eigenvalues, occupation_numbers, mo_coeff, mo_coeff_b, uniform_occupation, kTS, mu, flexible_electron_count)
Get the components of a MO set data structure.
subroutine, public calculate_rho_atom_coeff(qs_env, rho_ao, rho_atom_set, qs_kind_set, oce, sab, para_env)
...
superstucture that hold various representations of the density and keeps track of which ones are vali...
subroutine, public qs_rho_set(rho_struct, rho_ao, rho_ao_im, rho_ao_kp, rho_ao_im_kp, rho_r, drho_r, rho_g, drho_g, tau_r, tau_g, rho_r_valid, drho_r_valid, rho_g_valid, drho_g_valid, tau_r_valid, tau_g_valid, tot_rho_r, tot_rho_g, rho_r_sccs, soft_valid, complex_rho_ao)
...
subroutine, public qs_rho_get(rho_struct, rho_ao, rho_ao_im, rho_ao_kp, rho_ao_im_kp, rho_r, drho_r, rho_g, drho_g, tau_r, tau_g, rho_r_valid, drho_r_valid, rho_g_valid, drho_g_valid, tau_r_valid, tau_g_valid, tot_rho_r, tot_rho_g, rho_r_sccs, soft_valid, complex_rho_ao)
returns info about the density described by this object. If some representation is not available an e...
Types and set_get for real time propagation depending on runtype and diagonalization method different...
subroutine, public get_rtp(rtp, exp_H_old, exp_H_new, H_last_iter, rho_old, rho_next, rho_new, mos, mos_new, mos_old, mos_next, S_inv, S_half, S_minus_half, B_mat, C_mat, propagator_matrix, mixing, mixing_factor, S_der, dt, nsteps, SinvH, SinvH_imag, SinvB, admm_mos)
...
Utilities for rtp in combination with admm methods adapted routines from admm_method (author Manuel G...
subroutine, public rtp_admm_merge_ks_matrix(qs_env)
...
subroutine, public rtp_admm_calc_rho_aux(qs_env)
Compute the ADMM density matrix in case of rtp (complex MO's)