52 USE dbcsr_api,
ONLY: dbcsr_add,&
104#include "./base/base_uses.f90"
108 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_p_env_methods'
109 LOGICAL,
PRIVATE,
PARAMETER :: debug_this_module = .false.
132 orthogonal_orbitals, linres_control)
136 TYPE(dbcsr_p_type),
DIMENSION(:),
OPTIONAL, &
137 POINTER :: p1_option, p1_admm_option
138 LOGICAL,
INTENT(in),
OPTIONAL :: orthogonal_orbitals
141 CHARACTER(len=*),
PARAMETER :: routinen =
'p_env_create'
143 INTEGER :: handle, n_ao, n_mo, n_spins, natom, spin
150 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_s, matrix_s_aux_fit
154 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
156 CALL timeset(routinen, handle)
157 NULLIFY (ao_mo_fm_pools, mo_mo_fm_pools, matrix_s, dft_control, para_env, blacs_env)
160 dft_control=dft_control, &
164 n_spins = dft_control%nspins
166 p_env%new_preconditioner = .true.
168 ALLOCATE (p_env%rho1)
170 ALLOCATE (p_env%rho1_xc)
173 ALLOCATE (p_env%kpp1_env)
176 IF (
PRESENT(p1_option))
THEN
177 p_env%p1 => p1_option
181 ALLOCATE (p_env%p1(spin)%matrix)
182 CALL dbcsr_copy(p_env%p1(spin)%matrix, matrix_s(1)%matrix, &
184 CALL dbcsr_set(p_env%p1(spin)%matrix, 0.0_dp)
188 IF (dft_control%do_admm)
THEN
189 CALL get_admm_env(qs_env%admm_env, matrix_s_aux_fit=matrix_s_aux_fit)
191 ALLOCATE (p_env%rho1_admm)
195 IF (
PRESENT(p1_admm_option))
THEN
196 p_env%p1_admm => p1_admm_option
200 ALLOCATE (p_env%p1_admm(spin)%matrix)
201 CALL dbcsr_copy(p_env%p1_admm(spin)%matrix, matrix_s_aux_fit(1)%matrix, &
202 name=
"p_env%p1_admm-"//trim(adjustl(
cp_to_string(spin))))
203 CALL dbcsr_set(p_env%p1_admm(spin)%matrix, 0.0_dp)
207 IF (admm_env%do_gapw)
THEN
208 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set)
209 admm_gapw_env => admm_env%admm_gapw_env
212 admm_gapw_env%admm_kind_set, dft_control, para_env)
216 CALL mpools_get(qs_env%mpools, ao_mo_fm_pools=ao_mo_fm_pools, &
217 mo_mo_fm_pools=mo_mo_fm_pools)
222 CALL get_mo_set(qs_env%mos(spin), mo_coeff=qs_env_c)
224 ncol_global=n_mo, nrow_global=n_ao)
225 p_env%n_mo(spin) = n_mo
226 p_env%n_ao(spin) = n_ao
229 p_env%orthogonal_orbitals = .false.
230 IF (
PRESENT(orthogonal_orbitals)) &
231 p_env%orthogonal_orbitals = orthogonal_orbitals
238 name=
"p_env%m_epsilon")
241 IF (.NOT. p_env%orthogonal_orbitals)
THEN
243 name=
"p_env%Smo_inv")
246 IF (.NOT. p_env%orthogonal_orbitals)
THEN
248 elements=p_env%psi0d, &
255 IF (dft_control%qs_control%gapw)
THEN
257 atomic_kind_set=atomic_kind_set, &
260 qs_kind_set=qs_kind_set)
264 qs_kind_set, dft_control, para_env)
266 CALL init_rho0(p_env%local_rho_set, qs_env, dft_control%qs_control%gapw_control, &
271 ELSEIF (dft_control%qs_control%gapw_xc)
THEN
273 atomic_kind_set=atomic_kind_set, &
274 qs_kind_set=qs_kind_set)
277 qs_kind_set, dft_control, para_env)
283 IF (
PRESENT(linres_control))
THEN
287 IF (.NOT.
ASSOCIATED(p_env%preconditioner))
THEN
289 ALLOCATE (p_env%preconditioner(n_spins))
292 para_env=para_env, blacs_env=blacs_env)
296 name=
"p_env%PS_psi0")
302 CALL timestop(handle)
320 CHARACTER(len=*),
PARAMETER :: routinen =
'p_env_check_i_alloc'
322 CHARACTER(len=25) :: name
323 INTEGER :: handle, ispin, nspins
325 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_s
328 CALL timeset(routinen, handle)
330 NULLIFY (dft_control, matrix_s)
332 CALL get_qs_env(qs_env, dft_control=dft_control)
333 gapw_xc = dft_control%qs_control%gapw_xc
334 IF (.NOT.
ASSOCIATED(p_env%kpp1))
THEN
336 nspins = dft_control%nspins
342 ALLOCATE (p_env%kpp1(ispin)%matrix)
343 CALL dbcsr_copy(p_env%kpp1(ispin)%matrix, matrix_s(1)%matrix, &
345 CALL dbcsr_set(p_env%kpp1(ispin)%matrix, 0.0_dp)
355 IF (dft_control%do_admm .AND. .NOT.
ASSOCIATED(p_env%kpp1_admm))
THEN
356 CALL get_admm_env(qs_env%admm_env, matrix_s_aux_fit=matrix_s)
357 nspins = dft_control%nspins
360 name =
"p_env%kpp1_admm-"
363 ALLOCATE (p_env%kpp1_admm(ispin)%matrix)
364 CALL dbcsr_copy(p_env%kpp1_admm(ispin)%matrix, matrix_s(1)%matrix, &
366 CALL dbcsr_set(p_env%kpp1_admm(ispin)%matrix, 0.0_dp)
375 IF (.NOT.
ASSOCIATED(p_env%rho1))
THEN
381 IF (dft_control%do_admm)
THEN
389 CALL timestop(handle)
401 CHARACTER(LEN=*),
PARAMETER :: routinen =
'p_env_update_rho'
403 CHARACTER(LEN=default_string_length) :: basis_type
404 INTEGER :: handle, ispin
406 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: rho1_ao
410 POINTER :: sab_aux_fit
416 CALL timeset(routinen, handle)
418 CALL get_qs_env(qs_env, dft_control=dft_control)
423 DO ispin = 1,
SIZE(rho1_ao)
424 CALL dbcsr_copy(rho1_ao(ispin)%matrix, p_env%p1(ispin)%matrix)
428 rho_xc_external=p_env%rho1_xc, &
429 local_rho_set=p_env%local_rho_set, &
432 IF (dft_control%do_admm)
THEN
434 NULLIFY (ks_env, rho1_ao, rho_g_aux, rho_r_aux, task_list)
436 CALL get_qs_env(qs_env, ks_env=ks_env, admm_env=admm_env)
437 basis_type =
"AUX_FIT"
438 CALL get_admm_env(qs_env%admm_env, task_list_aux_fit=task_list)
439 IF (admm_env%do_gapw)
THEN
440 basis_type =
"AUX_FIT_SOFT"
441 task_list => admm_env%admm_gapw_env%task_list
447 DO ispin = 1,
SIZE(rho1_ao)
448 CALL dbcsr_copy(rho1_ao(ispin)%matrix, p_env%p1_admm(ispin)%matrix)
450 matrix_p=rho1_ao(ispin)%matrix, &
451 rho=rho_r_aux(ispin), &
452 rho_gspace=rho_g_aux(ispin), &
453 soft_valid=.false., &
454 basis_type=basis_type, &
455 task_list_external=task_list)
457 IF (admm_env%do_gapw)
THEN
461 rho_atom_set=p_env%local_rho_set_admm%rho_atom_set, &
462 qs_kind_set=admm_env%admm_gapw_env%admm_kind_set, &
463 oce=admm_env%admm_gapw_env%oce, sab=sab_aux_fit, para_env=para_env)
468 CALL timestop(handle)
486 CHARACTER(len=*),
PARAMETER :: routinen =
'p_env_psi0_changed'
488 INTEGER :: handle, iounit, lfomo, n_spins, nmo, spin
489 LOGICAL :: was_present
490 REAL(kind=
dp) :: maxocc
492 TYPE(
cp_fm_type),
DIMENSION(:),
POINTER :: psi0
495 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_ks, matrix_s, rho_ao
504 CALL timeset(routinen, handle)
506 NULLIFY (ao_mo_fm_pools, mos, psi0, matrix_s, mos, para_env, ks_env, rho, &
507 logger, input, lr_section, energy, matrix_ks, dft_control, rho_ao)
514 matrix_ks=matrix_ks, &
519 dft_control=dft_control)
523 n_spins = dft_control%nspins
525 ao_mo_fm_pools=ao_mo_fm_pools)
526 ALLOCATE (psi0(n_spins))
535 IF (p_env%orthogonal_orbitals)
THEN
536 IF (
ASSOCIATED(p_env%psi0d))
THEN
547 p_env%S_psi0(spin), &
548 ncol=p_env%n_mo(spin), alpha=1.0_dp)
549 CALL parallel_gemm(transa=
'T', transb=
'N', n=p_env%n_mo(spin), &
550 m=p_env%n_mo(spin), k=p_env%n_ao(spin), alpha=1.0_dp, &
551 matrix_a=psi0(spin), &
552 matrix_b=p_env%S_psi0(spin), &
553 beta=0.0_dp, matrix_c=p_env%m_epsilon(spin))
561 triangular_matrix=p_env%m_epsilon(spin), &
562 matrix_b=p_env%Smo_inv(spin), side=
'R', &
563 invert_tr=.true., n_rows=p_env%n_mo(spin), &
564 n_cols=p_env%n_mo(spin))
566 triangular_matrix=p_env%m_epsilon(spin), &
567 matrix_b=p_env%Smo_inv(spin), side=
'R', &
568 transpose_tr=.true., &
569 invert_tr=.true., n_rows=p_env%n_mo(spin), &
570 n_cols=p_env%n_mo(spin))
577 triangular_matrix=p_env%m_epsilon(spin), &
578 matrix_b=p_env%psi0d(spin), side=
'R', &
579 invert_tr=.true., n_rows=p_env%n_ao(spin), &
580 n_cols=p_env%n_mo(spin))
582 triangular_matrix=p_env%m_epsilon(spin), &
583 matrix_b=p_env%psi0d(spin), side=
'R', &
584 transpose_tr=.true., &
585 invert_tr=.true., n_rows=p_env%n_ao(spin), &
586 n_cols=p_env%n_mo(spin))
590 nmo=nmo, maxocc=maxocc)
591 IF (lfomo > nmo)
THEN
592 CALL dbcsr_set(rho_ao(spin)%matrix, 0.0_dp)
594 matrix_v=psi0(spin), &
595 matrix_g=p_env%psi0d(spin), &
596 ncol=p_env%n_mo(spin))
597 CALL dbcsr_scale(rho_ao(spin)%matrix, alpha_scalar=maxocc)
599 cpabort(
"symmetrized onesided smearing to do")
614 extension=
".linresLog")
617 IF (was_present)
THEN
618 WRITE (unit=iounit, fmt=
"(/,(T3,A,T55,F25.14))") &
619 "Total energy ground state: ", energy%total
623 "PRINT%PROGRAM_RUN_INFO")
633 p_env%S_psi0(spin), p_env%n_mo(spin))
636 p_env%n_mo(spin), p_env%n_mo(spin), p_env%n_ao(spin), &
637 -1.0_dp, p_env%S_psi0(spin), p_env%psi0d(spin), &
638 0.0_dp, p_env%m_epsilon(spin))
651 p_env%S_psi0(spin), &
656 IF (p_env%orthogonal_orbitals)
THEN
665 CALL timestop(handle)
684 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(in) :: v
685 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(inout) :: res
687 INTEGER :: n_spins, spin
690 NULLIFY (dft_control)
691 CALL get_qs_env(qs_env, dft_control=dft_control)
693 n_spins = dft_control%nspins
695 CALL p_op_l1_spin(p_env, qs_env, spin, v(spin), &
715 SUBROUTINE p_op_l1_spin(p_env, qs_env, spin, v, res)
720 INTEGER,
INTENT(IN) :: spin
723 CHARACTER(len=*),
PARAMETER :: routinen =
'p_op_l1_spin'
725 INTEGER :: handle, ncol
727 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_ks, matrix_s
728 TYPE(dbcsr_type),
POINTER :: k_p
732 CALL timeset(routinen, handle)
733 NULLIFY (matrix_ks, matrix_s, dft_control)
738 matrix_ks=matrix_ks, &
739 dft_control=dft_control)
742 cpassert(spin <= dft_control%nspins)
746 k_p => matrix_ks(spin)%matrix
749 IF (p_env%orthogonal_orbitals)
THEN
753 CALL cp_fm_symm(
'R',
'U', p_env%n_ao(spin), p_env%n_mo(spin), 1.0_dp, &
754 p_env%Smo_inv(spin), tmp, 0.0_dp, res)
757 CALL cp_fm_symm(
'R',
'U', p_env%n_ao(spin), p_env%n_mo(spin), 1.0_dp, &
758 p_env%m_epsilon(spin), v, 0.0_dp, tmp)
760 res, p_env%n_mo(spin), alpha=1.0_dp, beta=1.0_dp)
763 CALL timestop(handle)
765 END SUBROUTINE p_op_l1_spin
784 SUBROUTINE p_op_l2(p_env, qs_env, p1, res, alpha, beta)
788 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: p1
789 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(INOUT) :: res
790 REAL(kind=
dp),
INTENT(in),
OPTIONAL :: alpha, beta
792 CHARACTER(len=*),
PARAMETER :: routinen =
'p_op_l2'
793 LOGICAL,
PARAMETER :: fdiff = .false.
795 INTEGER :: handle, ispin, n_spins
796 LOGICAL :: gapw, gapw_xc
797 REAL(kind=
dp) :: my_alpha, my_beta
798 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: rho1_ao
802 CALL timeset(routinen, handle)
803 NULLIFY (dft_control, rho, rho1_ao)
805 CALL get_qs_env(qs_env, dft_control=dft_control, rho=rho)
807 gapw = dft_control%qs_control%gapw
808 gapw_xc = dft_control%qs_control%gapw_xc
810 IF (
PRESENT(alpha)) my_alpha = alpha
812 IF (
PRESENT(beta)) my_beta = beta
815 n_spins = dft_control%nspins
818 DO ispin = 1,
SIZE(p1)
820 IF (.NOT.
ASSOCIATED(rho1_ao(ispin)%matrix, p1(ispin)%matrix))
THEN
821 CALL dbcsr_copy(rho1_ao(ispin)%matrix, p1(ispin)%matrix)
826 CALL qs_rho_update_rho(rho_struct=p_env%rho1, qs_env=qs_env, local_rho_set=p_env%local_rho_set)
827 ELSEIF (gapw_xc)
THEN
828 CALL qs_rho_update_rho(rho_struct=p_env%rho1, qs_env=qs_env, rho_xc_external=p_env%rho1_xc, &
829 local_rho_set=p_env%local_rho_set)
835 cpassert(.NOT. (gapw .OR. gapw_xc))
837 k_p_p1=p_env%kpp1, rho=rho, rho1=p_env%rho1)
840 rho1=p_env%rho1, rho1_xc=p_env%rho1_xc)
843 DO ispin = 1, n_spins
845 p_env%psi0d(ispin), res(ispin), &
846 ncol=p_env%n_mo(ispin), &
847 alpha=my_alpha, beta=my_beta)
850 CALL timestop(handle)
869 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(inout) :: v
870 INTEGER,
DIMENSION(:),
INTENT(in),
OPTIONAL :: n_cols
872 CHARACTER(len=*),
PARAMETER :: routinen =
'p_preortho'
874 INTEGER :: cols, handle, max_cols, maxnmo, n_spins, &
875 nmo2, spin, v_cols, v_rows
881 CALL timeset(routinen, handle)
883 NULLIFY (maxmo_maxmo_fm_pool, maxmo_maxmo_fmstruct, tmp_fmstruct, &
886 CALL get_qs_env(qs_env, dft_control=dft_control)
887 CALL mpools_get(qs_env%mpools, maxmo_maxmo_fm_pool=maxmo_maxmo_fm_pool)
888 n_spins = dft_control%nspins
890 CALL cp_fm_struct_get(maxmo_maxmo_fmstruct, nrow_global=nmo2, ncol_global=maxnmo)
891 cpassert(
SIZE(v) >= n_spins)
893 IF (
PRESENT(n_cols))
THEN
894 max_cols = maxval(n_cols(1:n_spins))
899 max_cols = max(max_cols, v_cols)
902 IF (max_cols <= nmo2)
THEN
906 ncol_global=maxnmo, template_fmstruct=maxmo_maxmo_fmstruct)
907 CALL cp_fm_create(tmp_matrix, matrix_struct=tmp_fmstruct)
914 nrow_global=v_rows, ncol_global=v_cols)
915 cpassert(v_rows >= p_env%n_ao(spin))
917 IF (
PRESENT(n_cols))
THEN
918 cpassert(n_cols(spin) <= cols)
921 cpassert(cols <= max_cols)
924 CALL parallel_gemm(transa=
'T', transb=
'N', m=cols, n=p_env%n_mo(spin), &
925 k=p_env%n_ao(spin), alpha=1.0_dp, matrix_a=v(spin), &
926 matrix_b=p_env%S_psi0(spin), beta=0.0_dp, &
929 CALL parallel_gemm(transa=
'N', transb=
'T', m=p_env%n_ao(spin), n=cols, &
930 k=p_env%n_mo(spin), alpha=-1.0_dp, &
931 matrix_a=p_env%psi0d(spin), matrix_b=tmp_matrix, &
932 beta=1.0_dp, matrix_c=v(spin))
936 IF (max_cols <= nmo2)
THEN
942 CALL timestop(handle)
961 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(inout) :: v
962 INTEGER,
DIMENSION(:),
INTENT(in),
OPTIONAL :: n_cols
964 CHARACTER(len=*),
PARAMETER :: routinen =
'p_postortho'
966 INTEGER :: cols, handle, max_cols, maxnmo, n_spins, &
967 nmo2, spin, v_cols, v_rows
973 CALL timeset(routinen, handle)
975 NULLIFY (maxmo_maxmo_fm_pool, maxmo_maxmo_fmstruct, tmp_fmstruct, &
978 CALL get_qs_env(qs_env, dft_control=dft_control)
979 CALL mpools_get(qs_env%mpools, maxmo_maxmo_fm_pool=maxmo_maxmo_fm_pool)
980 n_spins = dft_control%nspins
982 CALL cp_fm_struct_get(maxmo_maxmo_fmstruct, nrow_global=nmo2, ncol_global=maxnmo)
983 cpassert(
SIZE(v) >= n_spins)
985 IF (
PRESENT(n_cols))
THEN
986 max_cols = maxval(n_cols(1:n_spins))
991 max_cols = max(max_cols, v_cols)
994 IF (max_cols <= nmo2)
THEN
998 ncol_global=maxnmo, template_fmstruct=maxmo_maxmo_fmstruct)
999 CALL cp_fm_create(tmp_matrix, matrix_struct=tmp_fmstruct)
1003 DO spin = 1, n_spins
1006 nrow_global=v_rows, ncol_global=v_cols)
1007 cpassert(v_rows >= p_env%n_ao(spin))
1009 IF (
PRESENT(n_cols))
THEN
1010 cpassert(n_cols(spin) <= cols)
1013 cpassert(cols <= max_cols)
1016 CALL parallel_gemm(transa=
'T', transb=
'N', m=cols, n=p_env%n_mo(spin), &
1017 k=p_env%n_ao(spin), alpha=1.0_dp, matrix_a=v(spin), &
1018 matrix_b=p_env%psi0d(spin), beta=0.0_dp, &
1019 matrix_c=tmp_matrix)
1021 CALL parallel_gemm(transa=
'N', transb=
'T', m=p_env%n_ao(spin), n=cols, &
1022 k=p_env%n_mo(spin), alpha=-1.0_dp, &
1023 matrix_a=p_env%S_psi0(spin), matrix_b=tmp_matrix, &
1024 beta=1.0_dp, matrix_c=v(spin))
1028 IF (max_cols <= nmo2)
THEN
1034 CALL timestop(handle)
1047 CHARACTER(len=*),
PARAMETER :: routinen =
'p_env_finish_kpp1'
1049 INTEGER :: handle, ispin, nao, nao_aux
1051 TYPE(dbcsr_type) :: work_hmat
1054 CALL timeset(routinen, handle)
1056 CALL get_qs_env(qs_env, dft_control=dft_control, admm_env=admm_env)
1058 IF (dft_control%do_admm)
THEN
1059 CALL dbcsr_copy(work_hmat, p_env%kpp1(1)%matrix)
1061 CALL cp_fm_get_info(admm_env%A, nrow_global=nao_aux, ncol_global=nao)
1062 DO ispin = 1,
SIZE(p_env%kpp1)
1064 ncol=nao, alpha=1.0_dp, beta=0.0_dp)
1065 CALL parallel_gemm(
'T',
'N', nao, nao, nao_aux, 1.0_dp, admm_env%A, &
1066 admm_env%work_aux_orb, 0.0_dp, admm_env%work_orb_orb)
1067 CALL dbcsr_set(work_hmat, 0.0_dp)
1068 CALL copy_fm_to_dbcsr(admm_env%work_orb_orb, work_hmat, keep_sparsity=.true.)
1069 CALL dbcsr_add(p_env%kpp1(ispin)%matrix, work_hmat, 1.0_dp, 1.0_dp)
1072 CALL dbcsr_release(work_hmat)
1075 CALL timestop(handle)
Contains ADMM methods which require molecular orbitals.
subroutine, public admm_aux_response_density(qs_env, dm, dm_admm)
Calculate ADMM auxiliary response density.
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.
Define the atomic kind types and their sub types.
methods related to the blacs parallel environment
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
DBCSR operations in CP2K.
subroutine, public cp_dbcsr_sm_fm_multiply(matrix, fm_in, fm_out, ncol, alpha, beta)
multiply a dbcsr with a fm 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_symm(side, uplo, m, n, alpha, matrix_a, matrix_b, beta, matrix_c)
computes matrix_c = beta * matrix_c + alpha * matrix_a * matrix_b computes matrix_c = beta * matrix_c...
subroutine, public cp_fm_triangular_multiply(triangular_matrix, matrix_b, side, transpose_tr, invert_tr, uplo_tr, unit_diag_tr, n_rows, n_cols, alpha)
multiplies in place by a triangular matrix: matrix_b = alpha op(triangular_matrix) matrix_b or (if si...
various cholesky decomposition related routines
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,...
pool for for elements that are retained and released
subroutine, public fm_pool_create_fm(pool, element, name)
returns an element, allocating it if none is in the pool
subroutine, public fm_pool_give_back_fm(pool, element)
returns the element to the pool
type(cp_fm_struct_type) function, pointer, public fm_pool_get_el_struct(pool)
returns the structure of the elements in this pool
represent the structure of a full matrix
subroutine, public cp_fm_struct_create(fmstruct, para_env, context, nrow_global, ncol_global, nrow_block, ncol_block, descriptor, first_p_pos, local_leading_dimension, template_fmstruct, square_blocks, force_block)
allocates and initializes a full matrix structure
subroutine, public cp_fm_struct_get(fmstruct, para_env, context, descriptor, ncol_block, nrow_block, nrow_global, ncol_global, first_p_pos, row_indices, col_indices, nrow_local, ncol_local, nrow_locals, ncol_locals, local_leading_dimension)
returns the values of various attributes of the matrix structure
subroutine, public cp_fm_struct_release(fmstruct)
releases a full matrix structure
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
subroutine, public cp_fm_set_all(matrix, alpha, beta)
set all elements of a matrix to the same value, and optionally the diagonal to a different one
subroutine, public cp_fm_create(matrix, matrix_struct, name, use_sp)
creates a new full matrix with the given structure
various routines to log and control the output. The idea is that decisions about where to log should ...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer function, public cp_print_key_unit_nr(logger, basis_section, print_key_path, extension, middle_name, local, log_filename, ignore_should_output, file_form, file_position, file_action, file_status, do_backup, on_file, is_new_file, mpi_io, fout)
...
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
subroutine, public init_coulomb_local(hartree_local, natom)
...
subroutine, public hartree_local_create(hartree_local)
...
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
Interface to the message passing library MPI.
basic linear algebra operations for full matrixes
subroutine, public init_preconditioner(preconditioner_env, para_env, blacs_env)
...
container for various plainwaves related things
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.
Define the quickstep kind type and their sub types.
module that builds the second order perturbation kernel kpp1 = delta_rho|_P delta_rho|_P E drho(P1) d...
subroutine, public kpp1_calc_k_p_p1(p_env, qs_env, rho1, rho1_xc)
calculates the k_p_p1 kernel of the perturbation theory
subroutine, public kpp1_create(kpp1_env)
allocates and initializes a kpp1_env
subroutine, public kpp1_calc_k_p_p1_fdiff(qs_env, k_p_p1, rho, rho1, diff)
calcualtes the k_p_p1 kernel of the perturbation theory with finite differences
subroutine, public kpp1_did_change(kpp1_env)
function to advise of changes either in the grids
routines that build the Kohn-Sham matrix (i.e calculate the coulomb and xc parts
subroutine, public qs_ks_update_qs_env(qs_env, calculate_forces, just_energy, print_active)
updates the Kohn Sham matrix of the given qs_env (facility method)
subroutine, public qs_ks_did_change(ks_env, s_mstruct_changed, rho_changed, potential_changed, full_reset)
tells that some of the things relevant to the ks calculation did change. has to be called when change...
Type definitiona for linear response calculations.
subroutine, public local_rho_set_create(local_rho_set)
...
wrapper for the pools of matrixes
subroutine, public mpools_get(mpools, ao_mo_fm_pools, ao_ao_fm_pools, mo_mo_fm_pools, ao_mosub_fm_pools, mosub_mosub_fm_pools, maxao_maxmo_fm_pool, maxao_maxao_fm_pool, maxmo_maxmo_fm_pool)
returns various attributes of the mpools (notably the pools contained in it)
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.
Define the neighbor list data types and the corresponding functionality.
Utility functions for the perturbation calculations.
subroutine, public p_op_l1(p_env, qs_env, v, res)
Evaluates Fv (S_mo)^-1 - Sv(epsilon) and stores it in res.
subroutine, public p_postortho(p_env, qs_env, v, n_cols)
does a postorthogonalization on the given matrix vector: v = (I-SP) v
subroutine, public p_env_psi0_changed(p_env, qs_env)
To be called after the value of psi0 has changed. Recalculates the quantities S_psi0 and m_epsilon.
subroutine, public p_env_finish_kpp1(qs_env, p_env)
...
subroutine, public p_op_l2(p_env, qs_env, p1, res, alpha, beta)
evaluates res = alpha kpp1(v)*psi0 + beta res with kpp1 evaluated with p=qs_envrhorho_ao,...
subroutine, public p_env_create(p_env, qs_env, p1_option, p1_admm_option, orthogonal_orbitals, linres_control)
allocates and initializes the perturbation environment (no setup)
subroutine, public p_env_update_rho(p_env, qs_env)
...
subroutine, public p_preortho(p_env, qs_env, v, n_cols)
does a preorthogonalization of the given matrix: v = (I-PS)v
subroutine, public p_env_check_i_alloc(p_env, qs_env)
checks that the intenal storage is allocated, and allocs it if needed
basis types for the calculation of the perturbation of density theory.
subroutine, public rho0_s_grid_create(pw_env, rho0_mpole)
...
subroutine, public init_rho0(local_rho_set, qs_env, gapw_control, zcore)
...
subroutine, public allocate_rho_atom_internals(rho_atom_set, atomic_kind_set, qs_kind_set, dft_control, para_env)
...
subroutine, public calculate_rho_atom_coeff(qs_env, rho_ao, rho_atom_set, qs_kind_set, oce, sab, para_env)
...
methods of the rho structure (defined in qs_rho_types)
subroutine, public qs_rho_update_rho(rho_struct, qs_env, rho_xc_external, local_rho_set, task_list_external, task_list_external_soft, pw_env_external, para_env_external)
updates rho_r and rho_g to the rhorho_ao. if use_kinetic_energy_density also computes tau_r and tau_g...
subroutine, public qs_rho_rebuild(rho, qs_env, rebuild_ao, rebuild_grids, admm, pw_env_external)
rebuilds rho (if necessary allocating and initializing it)
superstucture that hold various representations of the density and keeps track of which ones are vali...
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...
subroutine, public qs_rho_create(rho)
Allocates a new instance of rho.
Utilities for string manipulations.
subroutine, public compress(string, full)
Eliminate multiple space characters in a string. If full is .TRUE., then all spaces are eliminated.
A subtype of the admm_env that contains the extra data needed for an ADMM GAPW calculation.
stores some data used in wavefunction fitting
Provides all information about an atomic kind.
represent a blacs multidimensional parallel environment (for the mpi corrispective see cp_paratypes/m...
to create arrays of pools
represent a pool of elements with the same structure
keeps the information about the structure of a full matrix
type of a logger, at the moment it contains just a print level starting at which level it should be l...
stores all the informations relevant to an mpi environment
contained for different pw related things
Provides all information about a quickstep kind.
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...
General settings for linear response calculations.
Represent a qs system that is perturbed. Can calculate the linear operator and the rhs of the system ...
keeps the density in various representations, keeping track of which ones are valid.