99#include "./base/base_uses.f90"
105 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_fb_env_methods'
133 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_ks, matrix_s
135 LOGICAL,
INTENT(INOUT) :: diis_step
137 CHARACTER(LEN=*),
PARAMETER :: routinen =
'fb_env_do_diag'
139 CHARACTER(len=2) :: spin_string
140 CHARACTER(len=default_string_length) :: name
141 INTEGER :: filtered_nfullrowsorcols_total, handle, homo_filtered, ispin, lfomo_filtered, &
142 my_nmo, nao, ndep, nelectron, nmo, nmo_filtered, nspin, original_nfullrowsorcols_total
143 INTEGER,
DIMENSION(:),
POINTER :: filtered_roworcol_block_sizes, &
144 original_roworcol_block_sizes
145 LOGICAL :: collective_com
146 REAL(kind=
dp) :: diis_error, eps_default, eps_diis, eps_eigval, fermi_level, filter_temp, &
147 flexible_electron_count, kts_filtered, maxocc, mu_filtered
148 REAL(kind=
dp),
DIMENSION(:),
POINTER :: eigenvalues, eigenvalues_filtered, occ, &
152 TYPE(
cp_fm_type) :: fm_matrix_filter, fm_matrix_filtered_ks, &
153 fm_matrix_filtered_s, fm_matrix_ortho, &
155 TYPE(
cp_fm_type),
POINTER :: mo_coeff, mo_coeff_filtered
156 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_filter
157 TYPE(
dbcsr_type) :: matrix_filtered_ks, matrix_filtered_s, &
159 TYPE(
dbcsr_type),
POINTER :: matrix_filtered_p
162 TYPE(
mo_set_type),
DIMENSION(:),
POINTER :: mos, mos_filtered
170 CALL timeset(routinen, handle)
172 NULLIFY (scf_env, scf_control, para_env, blacs_env, particle_set)
173 NULLIFY (eigenvalues, eigenvalues_filtered, occ, occ_filtered)
174 NULLIFY (mos, mos_filtered)
175 NULLIFY (matrix_filter, matrix_filtered_p)
176 NULLIFY (fm_struct, filter_fm_struct)
177 NULLIFY (mo_coeff_filtered, mo_coeff)
181 NULLIFY (original_roworcol_block_sizes, filtered_roworcol_block_sizes)
186 scf_control=scf_control, &
188 blacs_env=blacs_env, &
189 particle_set=particle_set, &
192 nspin =
SIZE(matrix_ks)
200 scf_env%scf_work1(ispin))
203 eps_diis = scf_control%eps_diis
204 eps_eigval = epsilon(0.0_dp)
206 IF (scf_env%iter_count > 1 .AND. .NOT. scf_env%skip_diis)
THEN
207 CALL qs_diis_b_step(scf_env%scf_diis_buffer, mos, scf_env%scf_work1, &
208 scf_env%scf_work2, scf_env%iter_delta, &
209 diis_error, diis_step, eps_diis, scf_control%nmixing, &
210 s_matrix=matrix_s, scf_section=scf_section)
216 scf_env%iter_param = diis_error
217 scf_env%iter_method =
"DIIS/Filter"
219 IF (scf_env%mixing_method == 0)
THEN
220 scf_env%iter_method =
"NoMix/Filter"
221 ELSE IF (scf_env%mixing_method == 1)
THEN
222 scf_env%iter_param = scf_env%p_mix_alpha
223 scf_env%iter_method =
"P_Mix/Filter"
224 ELSE IF (scf_env%mixing_method > 1)
THEN
225 scf_env%iter_param = scf_env%mixing_store%alpha
226 scf_env%iter_method = trim(scf_env%mixing_store%iter_method)//
"/Filter"
235 filter_temperature=filter_temp, &
236 atomic_halos=atomic_halos, &
237 eps_default=eps_default)
241 CALL fb_env_build_trial_fns_auto(fb_env, qs_env, maxocc)
255 WRITE (spin_string, fmt=
"(I1)") ispin
256 name = trim(
"FILTER MATRIX SPIN "//spin_string)
262 collective_com=collective_com)
263 IF (collective_com)
THEN
265 s_mat=matrix_s(1)%matrix, &
266 atomic_halos=atomic_halos, &
267 trial_fns=trial_fns, &
269 particle_set=particle_set, &
270 fermi_level=fermi_level, &
271 filter_temp=filter_temp, &
273 filter_mat=matrix_filter(ispin)%matrix, &
274 tolerance=eps_default)
277 s_mat=matrix_s(1)%matrix, &
278 atomic_halos=atomic_halos, &
279 trial_fns=trial_fns, &
281 particle_set=particle_set, &
282 fermi_level=fermi_level, &
283 filter_temp=filter_temp, &
285 filter_mat=matrix_filter(ispin)%matrix, &
286 tolerance=eps_default)
302 row_blk_size=original_roworcol_block_sizes, &
303 nfullrows_total=original_nfullrowsorcols_total)
305 col_blk_size=filtered_roworcol_block_sizes, &
306 nfullcols_total=filtered_nfullrowsorcols_total)
311 ALLOCATE (mos_filtered(nspin))
315 nelectron=nelectron, &
316 flexible_electron_count=flexible_electron_count)
318 nao=filtered_nfullrowsorcols_total, &
319 nmo=filtered_nfullrowsorcols_total, &
320 nelectron=nelectron, &
321 n_el_f=real(nelectron,
dp), &
323 flexible_electron_count=flexible_electron_count)
330 CALL dbcsr_create(matrix=matrix_filtered_ks, template=matrix_ks(1)%matrix, &
331 name=trim(
"FILTERED_KS_MATRIX"), &
332 matrix_type=dbcsr_type_no_symmetry, &
333 row_blk_size=filtered_roworcol_block_sizes, &
334 col_blk_size=filtered_roworcol_block_sizes)
346 CALL dbcsr_create(matrix=matrix_filtered_s, template=matrix_s(1)%matrix, &
347 name=trim(
"FILTERED_S_MATRIX"), &
348 matrix_type=dbcsr_type_no_symmetry, &
349 row_blk_size=filtered_roworcol_block_sizes, &
350 col_blk_size=filtered_roworcol_block_sizes)
355 CALL dbcsr_create(matrix=matrix_tmp, template=matrix_s(1)%matrix, &
356 name=trim(
"TEMPORARY_MATRIX"), &
357 matrix_type=dbcsr_type_no_symmetry, &
358 row_blk_size=original_roworcol_block_sizes, &
359 col_blk_size=filtered_roworcol_block_sizes)
366 nrow_global=filtered_nfullrowsorcols_total, &
367 ncol_global=filtered_nfullrowsorcols_total)
372 name=
"FM_MATRIX_FILTERED_S")
375 name=
"FM_MATRIX_FILTERED_KS")
377 CALL cp_fm_create(fm_matrix_work, fm_struct, name=
"FM_MATRIX_WORK")
378 CALL cp_fm_create(fm_matrix_ortho, fm_struct, name=
"FM_MATRIX_ORTHO")
387 matrix_ks(ispin)%matrix, matrix_filter(ispin)%matrix, &
390 matrix_filter(ispin)%matrix, matrix_tmp, &
391 0.0_dp, matrix_filtered_ks)
394 matrix_s(1)%matrix, matrix_filter(ispin)%matrix, &
397 matrix_filter(ispin)%matrix, matrix_tmp, &
398 0.0_dp, matrix_filtered_s)
407 CALL get_mo_set(mos_filtered(ispin), nmo=nmo, nao=nao)
410 ncol_global=nmo, para_env=para_env, &
415 fm_struct=fm_struct, &
420 CALL fb_env_eigensolver(fm_matrix_filtered_ks, &
421 fm_matrix_filtered_s, &
422 mos_filtered(ispin), &
427 scf_env%cholesky_method)
445 smear=scf_control%smear)
450 ALLOCATE (matrix_filtered_p)
458 CALL dbcsr_create(matrix=matrix_filtered_p, template=scf_env%p_mix_new(1, 1)%matrix, &
459 name=trim(
"FILTERED_MATRIX_P"), &
460 row_blk_size=filtered_roworcol_block_sizes, &
461 col_blk_size=filtered_roworcol_block_sizes)
463 CALL fb_dbcsr_copy_sparse_struct(matrix_filtered_p, &
464 scf_env%p_mix_new(1, 1)%matrix)
468 CALL dbcsr_set(matrix_filtered_p, 0.0_dp)
476 matrix_filter(ispin)%matrix, matrix_filtered_p, &
479 matrix_tmp, matrix_filter(ispin)%matrix, &
480 0.0_dp, scf_env%p_mix_new(ispin, 1)%matrix, &
481 retain_sparsity=.true.)
489 DEALLOCATE (matrix_filtered_p)
516 nrow_global=original_nfullrowsorcols_total, &
517 ncol_global=filtered_nfullrowsorcols_total)
520 name=
"FM_MATRIX_FILTER")
527 homo=homo_filtered, &
528 lfomo=lfomo_filtered, &
530 eigenvalues=eigenvalues_filtered, &
531 occupation_numbers=occ_filtered, &
532 mo_coeff=mo_coeff_filtered, &
537 homo=homo_filtered, &
538 lfomo=lfomo_filtered, &
544 occupation_numbers=occ, &
545 eigenvalues=eigenvalues, &
549 my_nmo = min(nmo, nmo_filtered)
550 eigenvalues(:) = 0.0_dp
551 eigenvalues(1:my_nmo) = eigenvalues_filtered(1:my_nmo)
553 occ(1:my_nmo) = occ_filtered(1:my_nmo)
558 original_nfullrowsorcols_total, &
560 filtered_nfullrowsorcols_total, &
561 1.0_dp, fm_matrix_filter, mo_coeff_filtered, &
576 DEALLOCATE (mos_filtered)
579 CALL timestop(handle)
603 SUBROUTINE fb_env_eigensolver(fm_KS, fm_S, mo_set, fm_ortho, &
604 fm_work, eps_eigval, ndep, method)
607 TYPE(
cp_fm_type),
INTENT(IN) :: fm_ortho, fm_work
608 REAL(kind=
dp),
INTENT(IN) :: eps_eigval
609 INTEGER,
INTENT(OUT) :: ndep
610 INTEGER,
INTENT(IN) :: method
612 CHARACTER(len=*),
PARAMETER :: routinen =
'fb_env_eigensolver'
614 CHARACTER(len=8) :: ndep_string
615 INTEGER :: handle, info, my_method, nao, nmo
616 REAL(kind=
dp),
DIMENSION(:),
POINTER :: mo_eigenvalues
619 CALL timeset(routinen, handle)
624 eigenvalues=mo_eigenvalues, &
633 IF (info .NE. 0)
THEN
634 CALL cp_warn(__location__, &
635 "Unable to perform Cholesky decomposition on the overlap "// &
636 "matrix. The new filtered basis may not be linearly "// &
637 "independent set. Revert to using inverse square-root "// &
638 "of the overlap. To avoid this warning, you can try "// &
639 "to use a higher filter termperature.")
642 SELECT CASE (my_method)
644 CALL cp_abort(__location__, &
645 "filter matrix method with CHOLESKY_DBCSR is not yet implemented")
655 pos=
"LEFT", transa=
"T")
664 transpose_tr=.false., &
673 transpose_tr=.true., &
683 transpose_tr=.false., &
700 WRITE (ndep_string, fmt=
"(I8)") ndep
701 CALL cp_warn(__location__, &
702 "Number of linearly dependent filtered orbitals: "//ndep_string)
705 CALL cp_fm_symm(
"L",
"U", nao, nao, 1.0_dp, fm_ks, fm_ortho, &
707 CALL parallel_gemm(
"T",
"N", nao, nao, nao, 1.0_dp, fm_ortho, &
708 fm_work, 0.0_dp, fm_ks)
710 CALL parallel_gemm(
"N",
"N", nao, nmo, nao, 1.0_dp, fm_ortho, &
711 fm_work, 0.0_dp, mo_coeff)
714 CALL timestop(handle)
716 END SUBROUTINE fb_env_eigensolver
729 CHARACTER(len=*),
PARAMETER :: routinen =
'fb_env_read_input'
733 REAL(kind=
dp) :: r_val
736 CALL timeset(routinen, handle)
740 "DIAGONALIZATION%FILTER_MATRIX")
745 filter_temperature=r_val)
750 auto_cutoff_scale=r_val)
755 collective_com=l_val)
762 CALL timestop(handle)
778 CHARACTER(len=*),
PARAMETER :: routinen =
'fb_env_build_rcut_auto'
780 INTEGER :: handle, ikind, nkinds
781 REAL(kind=
dp) :: auto_cutoff_scale, kind_radius
782 REAL(kind=
dp),
DIMENSION(:),
POINTER :: rcut
786 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
788 CALL timeset(routinen, handle)
790 NULLIFY (rcut, qs_kind_set, dft_control)
793 qs_kind_set=qs_kind_set, &
794 dft_control=dft_control)
796 auto_cutoff_scale=auto_cutoff_scale)
798 nkinds =
SIZE(qs_kind_set)
799 ALLOCATE (rcut(nkinds))
808 ALLOCATE (basis_set_list(nkinds))
809 IF (dft_control%do_admm)
THEN
816 basis_set => basis_set_list(ikind)%gto_basis_set
818 rcut(ikind) = kind_radius*auto_cutoff_scale
825 DEALLOCATE (basis_set_list)
827 CALL timestop(handle)
846 CHARACTER(len=*),
PARAMETER :: routinen =
'fb_env_build_atomic_halos'
848 INTEGER :: handle, iatom, ihalo, max_natoms_local, natoms_global, natoms_local, nelectrons, &
849 nhalo_atoms, nkinds_global, owner_id_in_halo
850 INTEGER,
DIMENSION(:),
POINTER :: halo_atoms, local_atoms
851 REAL(kind=
dp) :: cost
852 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: pair_radii
853 REAL(kind=
dp),
DIMENSION(:),
POINTER :: rcut
859 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
861 CALL timeset(routinen, handle)
865 NULLIFY (cell, halos, halo_atoms, rcut, particle_set, para_env, &
866 qs_kind_set, local_atoms)
872 local_atoms=local_atoms, &
873 nlocal_atoms=natoms_local)
880 natom=natoms_global, &
881 particle_set=particle_set, &
882 qs_kind_set=qs_kind_set, &
883 nkind=nkinds_global, &
888 max_natoms_local = natoms_local
889 CALL para_env%max(max_natoms_local)
892 ALLOCATE (halos(natoms_local))
893 DO ihalo = 1, natoms_local
898 nhalos=natoms_local, &
899 max_nhalos=max_natoms_local)
901 ALLOCATE (pair_radii(nkinds_global, nkinds_global))
904 DO iatom = 1, natoms_local
914 owner_atom=local_atoms(iatom), &
915 owner_id_in_halo=owner_id_in_halo, &
916 natoms=nhalo_atoms, &
917 halo_atoms=halo_atoms)
928 nelectrons=nelectrons, &
933 DEALLOCATE (pair_radii)
939 atomic_halos=atomic_halos)
946 CALL timestop(handle)
959 SUBROUTINE fb_env_build_trial_fns_auto(fb_env, qs_env, maxocc)
963 REAL(kind=
dp),
INTENT(IN) :: maxocc
965 CHARACTER(len=*),
PARAMETER :: routinen =
'fb_env_build_trial_fns_auto'
967 INTEGER :: counter, handle, icgf, ico, ikind, iset, &
968 ishell, itrial, lshell, max_n_trial, &
969 nkinds, nset, old_lshell
970 INTEGER,
DIMENSION(:),
POINTER :: lmax, nfunctions, nshell
971 INTEGER,
DIMENSION(:, :),
POINTER :: functions
972 REAL(kind=
dp) :: zeff
977 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
979 CALL timeset(routinen, handle)
982 NULLIFY (nfunctions, functions, basis_set, basis_set_list, qs_kind_set, dft_control)
989 qs_kind_set=qs_kind_set, &
990 dft_control=dft_control)
992 nkinds =
SIZE(qs_kind_set)
1001 ALLOCATE (basis_set_list(nkinds))
1002 IF (dft_control%do_admm)
THEN
1008 ALLOCATE (nfunctions(nkinds))
1011 DO ikind = 1, nkinds
1013 basis_set => basis_set_list(ikind)%gto_basis_set
1021 bset1:
DO iset = 1, nset
1024 DO ishell = 1, nshell(iset)
1025 lshell = basis_set%l(ishell, iset)
1029 counter = counter + 1
1031 IF ((lshell .GT. old_lshell) .AND. (counter .LE.
nco(lshell)))
THEN
1032 nfunctions(ikind) = nfunctions(ikind) + 1
1039 IF (((lshell .GT. old_lshell) .OR. (lshell .EQ. lmax(iset))) .AND. &
1040 (maxocc*real(nfunctions(ikind),
dp) .GE. zeff))
THEN
1050 max_n_trial = maxval(nfunctions)
1051 ALLOCATE (functions(max_n_trial, nkinds))
1054 DO ikind = 1, nkinds
1056 basis_set => basis_set_list(ikind)%gto_basis_set
1065 bset2:
DO iset = 1, nset
1067 DO ishell = 1, nshell(iset)
1068 lshell = basis_set%l(ishell, iset)
1073 counter = counter + 1
1075 IF ((lshell .GT. old_lshell) .AND. (counter .LE.
nco(lshell)))
THEN
1077 functions(itrial, ikind) = icgf
1085 IF (((lshell .GT. old_lshell) .OR. (lshell .EQ. lmax(iset))) .AND. &
1086 (maxocc*real(itrial,
dp) .GE. zeff))
THEN
1096 nfunctions=nfunctions, &
1097 functions=functions)
1100 trial_fns=trial_fns)
1104 DEALLOCATE (basis_set_list)
1106 CALL timestop(handle)
1108 END SUBROUTINE fb_env_build_trial_fns_auto
1120 SUBROUTINE fb_dbcsr_copy_sparse_struct(matrix_out, matrix_in)
1122 TYPE(
dbcsr_type),
INTENT(INOUT) :: matrix_out
1125 INTEGER :: iatom, jatom, nblkcols_total, &
1126 nblkrows_total, nblks
1127 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: cols, rows
1131 nblkrows_total=nblkrows_total, &
1132 nblkcols_total=nblkcols_total)
1134 nblks = nblkrows_total*nblkcols_total
1135 ALLOCATE (rows(nblks))
1136 ALLOCATE (cols(nblks))
1155 END SUBROUTINE fb_dbcsr_copy_sparse_struct
1170 CHARACTER(len=*),
PARAMETER :: routinen =
'fb_env_write_info'
1172 CHARACTER(LEN=2) :: element_symbol
1173 INTEGER :: handle, ikind, nkinds, unit_nr
1174 LOGICAL :: collective_com
1175 REAL(kind=
dp) :: auto_cutoff_scale, filter_temperature
1176 REAL(kind=
dp),
DIMENSION(:),
POINTER :: rcut
1180 CALL timeset(routinen, handle)
1182 NULLIFY (rcut, atomic_kind_set, logger)
1185 atomic_kind_set=atomic_kind_set)
1187 filter_temperature=filter_temperature, &
1188 auto_cutoff_scale=auto_cutoff_scale, &
1190 collective_com=collective_com)
1192 nkinds =
SIZE(atomic_kind_set)
1196 "PRINT%FILTER_MATRIX", &
1198 IF (unit_nr > 0)
THEN
1199 IF (collective_com)
THEN
1200 WRITE (unit=unit_nr, fmt=
"(/,A,T71,A)") &
1201 " FILTER_MAT_DIAG| MPI communication method:", &
1204 WRITE (unit=unit_nr, fmt=
"(/,A,T71,A)") &
1205 " FILTER_MAT_DIAG| MPI communication method:", &
1208 WRITE (unit=unit_nr, fmt=
"(A,T71,g10.4)") &
1209 " FILTER_MAT_DIAG| Filter temperature [K]:", &
1211 WRITE (unit=unit_nr, fmt=
"(A,T71,f10.4)") &
1212 " FILTER_MAT_DIAG| Filter temperature [a.u.]:", &
1214 WRITE (unit=unit_nr, fmt=
"(A,T71,f10.4)") &
1215 " FILTER_MAT_DIAG| Auto atomic cutoff radius scale:", &
1217 WRITE (unit=unit_nr, fmt=
"(A)") &
1218 " FILTER_MAT_DIAG| atomic cutoff radii [a.u.]"
1219 DO ikind = 1, nkinds
1221 element_symbol=element_symbol)
1222 WRITE (unit=unit_nr, fmt=
"(A,A,T71,f10.4)") &
1223 " FILTER_MAT_DIAG| ", element_symbol, rcut(ikind)
1227 "PRINT%FILTER_MATRIX")
1229 CALL timestop(handle)
Define the atomic kind types and their sub types.
subroutine, public get_atomic_kind(atomic_kind, fist_potential, element_symbol, name, mass, kind_number, natom, atom_list, rcov, rvdw, z, qeff, apol, cpol, mm_radius, shell, shell_active, damping)
Get attributes of an atomic kind.
subroutine, public get_gto_basis_set(gto_basis_set, name, aliases, norm_type, kind_radius, ncgf, nset, nsgf, cgf_symbol, sgf_symbol, norm_cgf, set_radius, lmax, lmin, lx, ly, lz, m, ncgf_set, npgf, nsgf_set, nshell, cphi, pgf_radius, sphi, scon, zet, first_cgf, first_sgf, l, last_cgf, last_sgf, n, gcc, maxco, maxl, maxpgf, maxsgf_set, maxshell, maxso, nco_sum, npgf_sum, nshell_sum, maxder, short_kind_radius, npgf_seg_sum)
...
Handles all functions related to the CELL.
methods related to the blacs parallel environment
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dbcsr_iterator_next_block(iterator, row, column, block, block_number_argument_has_been_removed, row_size, col_size, row_offset, col_offset)
...
logical function, public dbcsr_iterator_blocks_left(iterator)
...
subroutine, public dbcsr_iterator_stop(iterator)
...
subroutine, public dbcsr_multiply(transa, transb, alpha, matrix_a, matrix_b, beta, matrix_c, first_row, last_row, first_column, last_column, first_k, last_k, retain_sparsity, filter_eps, flop)
...
subroutine, public dbcsr_get_info(matrix, nblkrows_total, nblkcols_total, nfullrows_total, nfullcols_total, nblkrows_local, nblkcols_local, nfullrows_local, nfullcols_local, my_prow, my_pcol, local_rows, local_cols, proc_row_dist, proc_col_dist, row_blk_size, col_blk_size, row_blk_offset, col_blk_offset, distribution, name, matrix_type, group)
...
subroutine, public dbcsr_reserve_blocks(matrix, rows, cols)
...
subroutine, public dbcsr_finalize(matrix)
...
subroutine, public dbcsr_set(matrix, alpha)
...
subroutine, public dbcsr_release(matrix)
...
subroutine, public dbcsr_iterator_readonly_start(iterator, matrix, shared, dynamic, dynamic_byrows)
Like dbcsr_iterator_start() but with matrix being INTENT(IN). When invoking this routine,...
DBCSR operations in CP2K.
subroutine, public copy_dbcsr_to_fm(matrix, fm)
Copy a DBCSR matrix to a BLACS matrix.
basic linear algebra operations for full matrices
subroutine, public cp_fm_gemm(transa, transb, m, n, k, alpha, matrix_a, matrix_b, beta, matrix_c, a_first_col, a_first_row, b_first_col, b_first_row, c_first_col, c_first_row)
computes matrix_c = beta * matrix_c + alpha * ( matrix_a ** transa ) * ( matrix_b ** transb )
subroutine, public cp_fm_cholesky_restore(fm_matrix, neig, fm_matrixb, fm_matrixout, op, pos, transa)
...
subroutine, public cp_fm_uplo_to_full(matrix, work, uplo)
given a triangular matrix according to uplo, computes the corresponding full matrix
subroutine, public cp_fm_triangular_invert(matrix_a, uplo_tr)
inverts a triangular matrix
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,...
subroutine, public cp_fm_cholesky_reduce(matrix, matrixb, itype)
reduce a matrix pencil A,B to normal form B has to be cholesky decomposed with cp_fm_cholesky_decompo...
used for collecting some of the diagonalization schemes available for cp_fm_type. cp_fm_power also mo...
subroutine, public cp_fm_power(matrix, work, exponent, threshold, n_dependent, verbose, eigvals)
...
subroutine, public choose_eigv_solver(matrix, eigenvectors, eigenvalues, info)
Choose the Eigensolver depending on which library is available ELPA seems to be unstable for small sy...
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_release(fmstruct)
releases a full matrix structure
represent a full matrix distributed on many processors
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,...
real(kind=dp) function, public cp_unit_from_cp2k(value, unit_str, defaults, power)
converts from the internal cp2k units to the given unit
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
Interface to the message passing library MPI.
Provides Cartesian and spherical orbital pointers and indices.
integer, dimension(:), allocatable, public nco
integer, dimension(:), allocatable, public ncoset
basic linear algebra operations for full matrixes
Define the data structure for the particle information.
collects routines that calculate density matrices
Apply the direct inversion in the iterative subspace (DIIS) of Pulay in the framework of an SCF itera...
subroutine, public qs_diis_b_step(diis_buffer, mo_array, kc, sc, delta, error_max, diis_step, eps_diis, nmixing, s_matrix, scf_section, roks)
Update the SCF DIIS buffer, and if appropriate does a diis step.
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_pp, 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, harris_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, eeq, rhs)
Get the QUICKSTEP environment.
real(kind=dp) function, public fb_atomic_halo_cost(atomic_halo, particle_set, qs_kind_set)
Estimates the computational cost with respect to the filter matrix calculation associated to an atomi...
subroutine, public fb_atomic_halo_build_halo_atoms(owner_atom, particle_set, cell, pair_radii, halo_atoms, nhalo_atoms, owner_id_in_halo)
Builds halo atoms for a given (owner) atom.
subroutine, public fb_atomic_halo_set(atomic_halo, owner_atom, owner_id_in_halo, natoms, nelectrons, halo_atoms, sorted, cost)
Sets attributes in a fb_atomic_halo object, one should only set the data content in a fb_atomic_halo ...
subroutine, public fb_atomic_halo_sort(atomic_halo)
Sort the list of atomic indices in the halo in ascending order. The atomic_halo must not be empty.
subroutine, public fb_atomic_halo_create(atomic_halo)
Creates and initialises an empty fb_atomic_halo object.
subroutine, public fb_atomic_halo_list_create(atomic_halos)
Creates and initialises an empty fb_atomic_halo_list object.
pure subroutine, public fb_build_pair_radii(rcut, nkinds, pair_radii)
Builds the required pair_radii array required for building the halo atoms from a given set of cut off...
subroutine, public fb_atomic_halo_list_set(atomic_halos, nhalos, max_nhalos, halos)
Sets attributes from an fb_atomic_halo_list object, one should only set the data content in a fb_atom...
subroutine, public fb_atomic_halo_nullify(atomic_halo)
Nullifies a fb_atomic_halo object, note that it does not release the original object....
integer function, public fb_atomic_halo_nelectrons_estimate_z(atomic_halo, particle_set)
Estimates the total number of electrons in a halo using atomic numbers.
subroutine, public fb_atomic_halo_list_write_info(atomic_halos, para_env, scf_section)
Writes out the atomic halo list summary, no detailed neighbour lists, just average,...
subroutine, public fb_atomic_halo_list_nullify(atomic_halos)
Nullifies a fb_atomic_halo_list object, note that it does not release the original object....
subroutine, public fb_env_do_diag(fb_env, qs_env, matrix_ks, matrix_s, scf_section, diis_step)
Do filtered matrix method diagonalisation.
subroutine, public fb_env_read_input(fb_env, scf_section)
Read input sections for filter matrix method.
subroutine, public fb_env_build_atomic_halos(fb_env, qs_env, scf_section)
Builds an fb_atomic_halo_list object using information from fb_env.
subroutine, public fb_env_write_info(fb_env, qs_env, scf_section)
Write out parameters used for the filter matrix method to output.
subroutine, public fb_env_build_rcut_auto(fb_env, qs_env)
Automatically generate the cutoff radii of atoms used for constructing the atomic halos,...
logical function, public fb_env_has_data(fb_env)
Checks if a fb_env object is associated with an actual data content or not.
subroutine, public fb_env_get(fb_env, rcut, filter_temperature, auto_cutoff_scale, eps_default, atomic_halos, trial_fns, collective_com, local_atoms, nlocal_atoms)
method to get attributes from a given fb_env object
subroutine, public fb_env_set(fb_env, rcut, filter_temperature, auto_cutoff_scale, eps_default, atomic_halos, trial_fns, collective_com, local_atoms, nlocal_atoms)
method to set attributes from a given fb_env object
subroutine, public fb_fltrmat_build_2(h_mat, s_mat, atomic_halos, trial_fns, para_env, particle_set, fermi_level, filter_temp, name, filter_mat, tolerance)
Build the filter matrix, with MPI communications grouped together. More effcient on communication,...
subroutine, public fb_fltrmat_build(h_mat, s_mat, atomic_halos, trial_fns, para_env, particle_set, fermi_level, filter_temp, name, filter_mat, tolerance)
Build the filter matrix, with MPI communications happening at each step. Less efficient on communicat...
subroutine, public fb_trial_fns_set(trial_fns, nfunctions, functions)
sets the attributes of a fb_trial_fns object
subroutine, public fb_trial_fns_nullify(trial_fns)
nullifies the content of given object
subroutine, public fb_trial_fns_release(trial_fns)
releases given object
subroutine, public fb_trial_fns_create(trial_fns)
creates an fb_trial_fns object and initialises it
Some utility functions for the calculation of integrals.
subroutine, public basis_set_list_setup(basis_set_list, basis_type, qs_kind_set)
Set up an easy accessible list of the basis sets for all kinds.
Define the quickstep kind type and their sub types.
subroutine, public get_qs_kind(qs_kind, basis_set, basis_type, ncgf, nsgf, all_potential, tnadd_potential, gth_potential, sgp_potential, upf_potential, se_parameter, dftb_parameter, xtb_parameter, dftb3_param, zatom, zeff, elec_conf, mao, lmax_dftb, alpha_core_charge, ccore_charge, core_charge, core_charge_radius, paw_proj_set, paw_atom, hard_radius, hard0_radius, max_rad_local, covalent_radius, vdw_radius, gpw_type_forced, harmonics, max_iso_not0, max_s_harm, grid_atom, ngrid_ang, ngrid_rad, lmax_rho0, dft_plus_u_atom, l_of_dft_plus_u, n_of_dft_plus_u, u_minus_j, u_of_dft_plus_u, j_of_dft_plus_u, alpha_of_dft_plus_u, beta_of_dft_plus_u, j0_of_dft_plus_u, occupation_of_dft_plus_u, dispersion, bs_occupation, magnetization, no_optimize, addel, laddel, naddel, orbitals, max_scf, eps_scf, smear, u_ramping, u_minus_j_target, eps_u_ramping, init_u_ramping_each_scf, reltmat, ghost, floating, name, element_symbol, pao_basis_size, pao_model_file, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
Set occupation of molecular orbitals.
Definition and initialisation of the mo data type.
subroutine, public set_mo_set(mo_set, maxocc, homo, lfomo, nao, nelectron, n_el_f, nmo, eigenvalues, occupation_numbers, uniform_occupation, kts, mu, flexible_electron_count)
Set the components of a MO set data structure.
subroutine, public allocate_mo_set(mo_set, nao, nmo, nelectron, n_el_f, maxocc, flexible_electron_count)
Allocates a mo set and partially initializes it (nao,nmo,nelectron, and flexible_electron_count are v...
subroutine, public deallocate_mo_set(mo_set)
Deallocate a wavefunction data structure.
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 init_mo_set(mo_set, fm_pool, fm_ref, fm_struct, name)
initializes an allocated mo_set. eigenvalues, mo_coeff, occupation_numbers are valid only after this ...
module that contains the definitions of the scf types
parameters that control an scf iteration
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.
elemental subroutine, public uppercase(string)
Convert all lower case characters in a string to upper case.
Provides all information about an atomic kind.
Type defining parameters related to the simulation cell.
represent a blacs multidimensional parallel environment (for the mpi corrispective see cp_paratypes/m...
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
defines a fb_atomic_halo_list object
defines a fb_atomic_halo object
the object container which allows for the creation of an array of pointers to fb_env
the object container which allows for the creation of an array of pointers to fb_trial_fns objects
Provides all information about a quickstep kind.