24                                              dbcsr_type_no_symmetry,&
 
   82#include "./base/base_uses.f90" 
   92   CHARACTER(len=*), 
PARAMETER, 
PRIVATE :: moduleN = 
'qs_dcdr_utils' 
   94   REAL(dp), 
DIMENSION(3, 3, 3), 
PARAMETER  :: Levi_Civita = reshape((/ &
 
   95                                                          0.0_dp, 0.0_dp, 0.0_dp, 0.0_dp, 0.0_dp, -1.0_dp, 0.0_dp, 1.0_dp, 0.0_dp, &
 
   96                                                          0.0_dp, 0.0_dp, 1.0_dp, 0.0_dp, 0.0_dp, 0.0_dp, -1.0_dp, 0.0_dp, 0.0_dp, &
 
   97                                                        0.0_dp, -1.0_dp, 0.0_dp, 1.0_dp, 0.0_dp, 0.0_dp, 0.0_dp, 0.0_dp, 0.0_dp/), &
 
  113      TYPE(
dbcsr_type), 
INTENT(IN), 
POINTER              :: ao_matrix
 
  116      INTEGER, 
INTENT(IN)                                :: nmo, icenter
 
  119      CHARACTER(LEN=*), 
PARAMETER :: routinen = 
'multiply_localization' 
  123      CALL timeset(routinen, handle)
 
  134      CALL timestop(handle)
 
 
  151      TYPE(
cp_fm_type), 
DIMENSION(:), 
INTENT(IN)         :: vec
 
  152      INTEGER, 
INTENT(IN)                                :: lambda, beta
 
  153      CHARACTER(LEN=*)                                   :: tag
 
  155      CHARACTER(LEN=*), 
PARAMETER                        :: routinen = 
'dcdr_read_restart' 
  157      CHARACTER(LEN=default_path_length)                 :: filename
 
  158      CHARACTER(LEN=default_string_length)               :: my_middle
 
  159      INTEGER :: beta_tmp, handle, i, i_block, ia, ie, iostat, iounit, ispin, j, lambda_tmp, &
 
  160         max_block, n_rep_val, nao, nao_tmp, nmo, nmo_tmp, nspins, nspins_tmp, rst_unit
 
  162      REAL(kind=dp), 
DIMENSION(:, :), 
POINTER            :: vecbuffer
 
  171      CALL timeset(routinen, handle)
 
  173      NULLIFY (mos, para_env, logger, print_key, vecbuffer)
 
  177                                    "PRINT%PROGRAM_RUN_INFO", extension=
".Log")
 
  186      IF (para_env%is_source()) 
THEN 
  191         my_middle = 
"RESTART-"//tag(ia:ie)//trim(
"-")//trim(adjustl(
cp_to_string(beta))) &
 
  194         IF (n_rep_val > 0) 
THEN 
  197            filename = filename(ia:ie)//trim(my_middle)//
".lr" 
  202                                                      extension=
".lr", middle_name=trim(my_middle), my_local=.false.)
 
  208            CALL open_file(file_name=trim(filename), &
 
  209                           file_action=
"READ", &
 
  210                           file_form=
"UNFORMATTED", &
 
  211                           file_position=
"REWIND", &
 
  213                           unit_number=rst_unit)
 
  215            IF (iounit > 0) 
WRITE (iounit, 
"(T2,A)") &
 
  216               "LINRES| Reading response wavefunctions from the restart file <"//trim(adjustl(filename))//
">" 
  218            IF (iounit > 0) 
WRITE (iounit, 
"(T2,A)") &
 
  219               "LINRES| Restart file  <"//trim(adjustl(filename))//
"> not found" 
  228         CALL cp_fm_get_info(mo_coeff, nrow_global=nao, ncol_block=max_block)
 
  230         ALLOCATE (vecbuffer(nao, max_block))
 
  233         IF (rst_unit > 0) 
READ (rst_unit, iostat=iostat) lambda_tmp, beta_tmp, nspins_tmp, nao_tmp
 
  234         CALL para_env%bcast(iostat)
 
  235         CALL para_env%bcast(beta_tmp)
 
  236         CALL para_env%bcast(lambda_tmp)
 
  237         CALL para_env%bcast(nspins_tmp)
 
  238         CALL para_env%bcast(nao_tmp)
 
  242         IF (nspins_tmp .NE. nspins) 
THEN 
  243            cpabort(
"nspins not consistent")
 
  245         IF (nao_tmp .NE. nao) cpabort(
"nao not consistent")
 
  248         IF (lambda_tmp .NE. lambda) cpabort(
"lambda not consistent")
 
  249         IF (beta_tmp .NE. beta) cpabort(
"beta not consistent")
 
  252            CALL get_mo_set(mos(ispin), mo_coeff=mo_coeff)
 
  255            IF (rst_unit > 0) 
READ (rst_unit) nmo_tmp
 
  256            CALL para_env%bcast(nmo_tmp)
 
  257            IF (nmo_tmp .NE. nmo) cpabort(
"nmo not consistent")
 
  260            DO i = 1, nmo, max(max_block, 1)
 
  261               i_block = min(max_block, nmo - i + 1)
 
  263                  IF (rst_unit > 0) 
READ (rst_unit) vecbuffer(1:nao, j)
 
  265               CALL para_env%bcast(vecbuffer)
 
  270         IF (iostat /= 0) 
THEN 
  271            IF (iounit > 0) 
WRITE (iounit, 
"(T2,A)") &
 
  272               "LINRES| Restart file <"//trim(adjustl(filename))//
"> not found" 
  275         DEALLOCATE (vecbuffer)
 
  279      IF (para_env%is_source()) 
THEN 
  283      CALL timestop(handle)
 
 
  301      TYPE(
cp_fm_type), 
DIMENSION(:), 
INTENT(IN)         :: vec
 
  302      INTEGER, 
INTENT(IN)                                :: lambda, beta
 
  303      CHARACTER(LEN=*)                                   :: tag
 
  305      CHARACTER(LEN=*), 
PARAMETER :: routinen = 
'dcdr_write_restart' 
  307      CHARACTER(LEN=default_path_length)                 :: filename
 
  308      CHARACTER(LEN=default_string_length)               :: my_middle, my_pos, my_status
 
  309      INTEGER                                            :: handle, i, i_block, ia, ie, iounit, &
 
  310                                                            ispin, j, max_block, nao, nmo, nspins, &
 
  312      REAL(kind=dp), 
DIMENSION(:, :), 
POINTER            :: vecbuffer
 
  319      NULLIFY (logger, mo_coeff, mos, para_env, print_key, vecbuffer)
 
  321      CALL timeset(routinen, handle)
 
  326                                           used_print_key=print_key), &
 
  330                                       "PRINT%PROGRAM_RUN_INFO", extension=
".Log")
 
  338         my_status = 
"REPLACE" 
  341         my_middle = 
"RESTART-"//tag(ia:ie)//trim(
"-")//trim(adjustl(
cp_to_string(beta))) &
 
  344                                         extension=
".lr", middle_name=trim(my_middle), file_status=trim(my_status), &
 
  345                                         file_position=trim(my_pos), file_action=
"WRITE", file_form=
"UNFORMATTED")
 
  348                                                   extension=
".lr", middle_name=trim(my_middle), my_local=.false.)
 
  351            WRITE (unit=iounit, fmt=
"(T2,A)") &
 
  352               "LINRES| Writing response functions to the restart file <"//trim(adjustl(filename))//
">" 
  359         CALL cp_fm_get_info(mo_coeff, nrow_global=nao, ncol_block=max_block)
 
  360         ALLOCATE (vecbuffer(nao, max_block))
 
  362         IF (rst_unit > 0) 
WRITE (rst_unit) lambda, beta, nspins, nao
 
  367            IF (rst_unit > 0) 
WRITE (rst_unit) nmo
 
  369            DO i = 1, nmo, max(max_block, 1)
 
  370               i_block = min(max_block, nmo - i + 1)
 
  376                  IF (rst_unit > 0) 
WRITE (rst_unit) vecbuffer(1:nao, j)
 
  381         DEALLOCATE (vecbuffer)
 
  387      CALL timestop(handle)
 
 
  401      CHARACTER(LEN=default_string_length)               :: description
 
  402      INTEGER                                            :: alpha, beta, delta, 
gamma, i, k, l, &
 
  403                                                            lambda, natom, nsubset, output_unit
 
  404      REAL(dp), 
DIMENSION(:, :, :), 
POINTER              :: apt_el_dcdr, apt_nuc_dcdr, apt_total_dcdr
 
  405      REAL(dp), 
DIMENSION(:, :, :, :), 
POINTER           :: apt_center_dcdr, apt_subset_dcdr
 
  406      REAL(kind=dp), 
DIMENSION(3, 3)                     :: sum_rule_0, sum_rule_1, sum_rule_2
 
  420      NULLIFY (particle_set)
 
  421      CALL get_qs_env(qs_env=qs_env, particle_set=particle_set, molecule_set=molecule_set)
 
  422      natom = 
SIZE(particle_set)
 
  423      nsubset = 
SIZE(molecule_set)
 
  425      apt_el_dcdr => dcdr_env%apt_el_dcdr
 
  426      apt_nuc_dcdr => dcdr_env%apt_nuc_dcdr
 
  427      apt_total_dcdr => dcdr_env%apt_total_dcdr
 
  428      apt_subset_dcdr => dcdr_env%apt_el_dcdr_per_subset
 
  429      apt_center_dcdr => dcdr_env%apt_el_dcdr_per_center
 
  431      IF (dcdr_env%localized_psi0) 
THEN 
  432         IF (dcdr_env%output_unit > 0) 
WRITE (dcdr_env%output_unit, 
"(A)") 
'APT | Write the final apt matrix per atom per subset' 
  435               IF (dcdr_env%output_unit > 0) 
WRITE (dcdr_env%output_unit, *) 
'APT | Subset', l
 
  437                  IF (dcdr_env%output_unit > 0) 
WRITE (dcdr_env%output_unit, 
"(A,I3,F15.6,F15.6,F15.6)") &
 
  438                     'APT | apt_subset ', i, apt_subset_dcdr(i, :, k, l)
 
  444      IF (dcdr_env%output_unit > 0) 
WRITE (dcdr_env%output_unit, 
"(A)") &
 
  445         'APT | Write the final apt matrix per atom (Position perturbation)' 
  447         IF (dcdr_env%output_unit > 0) 
WRITE (dcdr_env%output_unit, 
"(A,I3,A,F15.6)") &
 
  448            'APT | Atom', l, 
' - GAPT ', &
 
  449            (apt_total_dcdr(1, 1, l) &
 
  450             + apt_total_dcdr(2, 2, l) &
 
  451             + apt_total_dcdr(3, 3, l))/3._dp
 
  453            IF (dcdr_env%output_unit > 0) 
WRITE (dcdr_env%output_unit, 
"(A,F15.6,F15.6,F15.6)") 
"APT | ", apt_total_dcdr(i, :, l)
 
  457      IF (dcdr_env%output_unit > 0) 
WRITE (dcdr_env%output_unit, 
"(A)") 
'APT | Write the total apt matrix' 
  459         IF (dcdr_env%output_unit > 0) 
WRITE (dcdr_env%output_unit, &
 
  460                                              "(A,F15.6,F15.6,F15.6)") 
"APT | ", sum(apt_total_dcdr(i, :, :), dim=2)
 
  462      IF (dcdr_env%output_unit > 0) 
WRITE (dcdr_env%output_unit, 
"(A)") 
'APT | End Write the final apt matrix' 
  466      description = 
"[DIPOLE]" 
  467      CALL get_results(results=results, description=description, values=dcdr_env%dipole_pos(1:3))
 
  478               sum_rule_0(alpha, beta) = sum_rule_0(alpha, beta) &
 
  479                                         + apt_total_dcdr(alpha, beta, lambda)
 
  484               sum_rule_1(alpha, beta) = sum_rule_1(alpha, beta) &
 
  485                                         + levi_civita(alpha, beta, 
gamma)*dcdr_env%dipole_pos(
gamma)
 
  492                     sum_rule_2(alpha, beta) = sum_rule_2(alpha, beta) &
 
  493                                               + levi_civita(beta, 
gamma, delta) &
 
  494                                               *particle_set(lambda)%r(
gamma) &
 
  495                                               *apt_total_dcdr(delta, alpha, lambda)
 
  503      IF (dcdr_env%output_unit > 0) 
WRITE (dcdr_env%output_unit, 
"(A)") 
"APT | Position perturbation sum rules" 
  504      IF (dcdr_env%output_unit > 0) 
WRITE (dcdr_env%output_unit, 
"(A,T18,A,T34,A,T49,A)") &
 
  505         "APT |", 
"Total APT", 
"Dipole", 
"R * APT" 
  508            IF (dcdr_env%output_unit > 0) 
WRITE (dcdr_env%output_unit, &
 
  509                                                 "(A,I3,I3,F15.6,F15.6,F15.6)") &
 
  512               sum_rule_0(alpha, beta), &
 
  513               sum_rule_1(alpha, beta), &
 
  514               sum_rule_2(alpha, beta)
 
 
  527      REAL(dp), 
DIMENSION(3), 
INTENT(in)                 :: r
 
  528      TYPE(
cell_type), 
INTENT(in), 
POINTER               :: cell
 
  529      REAL(dp), 
DIMENSION(3), 
INTENT(out)                :: r_shifted
 
  532      REAL(kind=dp), 
DIMENSION(3)                        :: abc
 
  538         IF (r(i) < 0._dp) 
THEN 
  539            r_shifted(i) = r(i) + abc(i)
 
  540         ELSE IF (r(i) > abc(i)) 
THEN 
  541            r_shifted(i) = r(i) - abc(i)
 
 
  557      CHARACTER(LEN=*), 
PARAMETER                        :: routinen = 
'get_loc_setting' 
  559      INTEGER                                            :: handle, is, ispin, istate, max_states, &
 
  560                                                            nmo, nmoloc, nstate, nstate_list(2)
 
  561      INTEGER, 
ALLOCATABLE, 
DIMENSION(:, :)              :: state_list
 
  562      REAL(dp), 
DIMENSION(:, :), 
POINTER                 :: center_array
 
  569      CALL timeset(routinen, handle)
 
  572                      linres_control=linres_control, &
 
  578      max_states = max(max_states, nmo)
 
  581      nmoloc = 
SIZE(linres_control%qs_loc_env%localized_wfn_control%centers_set(1)%array, 2)
 
  582      IF (nmoloc .NE. nmo) 
THEN 
  583         cpabort(
"The number of localized functions is not equal to the number of states.")
 
  589      SELECT CASE (dcdr_env%orb_center)
 
  591         dcdr_env%orb_center_name = 
"WANNIER" 
  596      qs_loc_env => linres_control%qs_loc_env
 
  597      CALL get_qs_loc_env(qs_loc_env, localized_wfn_control=localized_wfn_control)
 
  599      ALLOCATE (dcdr_env%centers_set(dcdr_env%nspins))
 
  600      ALLOCATE (dcdr_env%center_list(dcdr_env%nspins))
 
  601      ALLOCATE (state_list(max_states, dcdr_env%nspins))
 
  602      state_list(:, :) = huge(0)
 
  603      nstate_list(:) = huge(0)
 
  606      DO ispin = 1, dcdr_env%nspins
 
  607         center_array => localized_wfn_control%centers_set(ispin)%array
 
  609         DO istate = 1, 
SIZE(center_array, 2)
 
  611            state_list(nstate, ispin) = istate
 
  613         nstate_list(ispin) = nstate
 
  616         nstate = nstate_list(ispin)
 
  617         dcdr_env%nstates(ispin) = nstate
 
  619         ALLOCATE (dcdr_env%center_list(ispin)%array(2, nstate + 1))
 
  620         ALLOCATE (dcdr_env%centers_set(ispin)%array(3, nstate))
 
  621         dcdr_env%center_list(ispin)%array(:, :) = huge(0)
 
  622         dcdr_env%centers_set(ispin)%array(:, :) = huge(0.0_dp)
 
  624         center_array => localized_wfn_control%centers_set(ispin)%array
 
  627         SELECT CASE (dcdr_env%orb_center)
 
  630            dcdr_env%nbr_center(ispin) = nstate
 
  632               istate = state_list(is, 1)
 
  633               dcdr_env%centers_set(ispin)%array(1:3, is) = center_array(1:3, istate)
 
  634               dcdr_env%center_list(ispin)%array(1, is) = is
 
  635               dcdr_env%center_list(ispin)%array(2, is) = istate
 
  637            dcdr_env%center_list(ispin)%array(1, nstate + 1) = nstate + 1
 
  640            cpabort(
"Unknown orbital center...")
 
  644      CALL timestop(handle)
 
 
  656      CHARACTER(LEN=*), 
PARAMETER                        :: routinen = 
'dcdr_env_init' 
  658      INTEGER                                            :: handle, homo, i, isize, ispin, j, jg, &
 
  659                                                            n_rep, nao, natom, nmo, nspins, &
 
  660                                                            nsubset, output_unit, reference, &
 
  662      INTEGER, 
DIMENSION(:), 
POINTER                     :: tmplist
 
  664      REAL(kind=dp), 
DIMENSION(:), 
POINTER               :: ref_point
 
  668      TYPE(
dbcsr_p_type), 
DIMENSION(:), 
POINTER          :: matrix_ks, matrix_s
 
  669      TYPE(
dbcsr_p_type), 
DIMENSION(:, :), 
POINTER       :: matrix_p
 
  675         POINTER                                         :: sab_all, sab_orb
 
  680      CALL timeset(routinen, handle)
 
  683      NULLIFY (logger, loc_section, dcdr_section, lr_section)
 
  688                                                  extension=
".data", middle_name=
"dcdr", log_filename=.false., &
 
  689                                                  file_position=
"REWIND", file_status=
"REPLACE")
 
  693                                         extension=
".linresLog")
 
  694      unit_number = 
cp_print_key_unit_nr(logger, lr_section, 
"PRINT%PROGRAM_RUN_INFO", extension=
".linresLog")
 
  696      IF (output_unit > 0) 
THEN 
  697         WRITE (output_unit, 
"(/,T20,A,/)") 
"*** Start DCDR calculation ***" 
  700      NULLIFY (ks_env, dft_control, sab_orb, sab_all, particle_set, molecule_set, matrix_s, matrix_ks, mos, para_env)
 
  703                      dft_control=dft_control, &
 
  706                      particle_set=particle_set, &
 
  707                      molecule_set=molecule_set, &
 
  709                      matrix_ks=matrix_ks, &
 
  713      natom = 
SIZE(particle_set)
 
  714      nsubset = 
SIZE(molecule_set)
 
  715      nspins = dft_control%nspins
 
  716      dcdr_env%nspins = dft_control%nspins
 
  718      NULLIFY (dcdr_env%matrix_s)
 
  720                                matrix_name=
"OVERLAP MATRIX", &
 
  722                                basis_type_a=
"ORB", &
 
  723                                basis_type_b=
"ORB", &
 
  726      NULLIFY (dcdr_env%matrix_t)
 
  729                                 matrix_name=
"KINETIC ENERGY MATRIX", &
 
  730                                 calculate_forces=.false., &
 
  734                                 eps_filter=dft_control%qs_control%eps_filter_matrix)
 
  743      CALL section_vals_val_get(dcdr_section, 
"DISTRIBUTED_ORIGIN", l_val=dcdr_env%distributed_origin)
 
  748      dcdr_env%ref_point = 0._dp
 
  755         ALLOCATE (dcdr_env%list_of_atoms(natom))
 
  757            dcdr_env%list_of_atoms(jg) = jg
 
  761            ALLOCATE (dcdr_env%list_of_atoms(isize))
 
  763            CALL reallocate(dcdr_env%list_of_atoms, 1, isize + 
SIZE(tmplist))
 
  764            dcdr_env%list_of_atoms(isize + 1:isize + 
SIZE(tmplist)) = tmplist
 
  765            isize = 
SIZE(dcdr_env%list_of_atoms)
 
  770      IF (dcdr_env%localized_psi0) 
THEN 
  781               cpabort(
"User-defined reference point should be given explicitly")
 
  785                                  reference=reference, &
 
  790      NULLIFY (dcdr_env%aoao_fm_struct, &
 
  791               dcdr_env%momo_fm_struct, &
 
  792               dcdr_env%likemos_fm_struct, &
 
  793               dcdr_env%homohomo_fm_struct)
 
  794      CALL get_mo_set(mo_set=mos(1), mo_coeff=mo_coeff, &
 
  795                      nao=nao, nmo=nmo, homo=homo)
 
  797                               ncol_global=nao, para_env=para_env, &
 
  798                               context=mo_coeff%matrix_struct%context)
 
  800                               ncol_global=homo, para_env=para_env, &
 
  801                               context=mo_coeff%matrix_struct%context)
 
  804      ALLOCATE (dcdr_env%nmo(nspins))
 
  805      ALLOCATE (dcdr_env%momo_fm_struct(nspins))
 
  806      ALLOCATE (dcdr_env%likemos_fm_struct(nspins))
 
  808         CALL get_mo_set(mo_set=mos(ispin), mo_coeff=mo_coeff, &
 
  809                         nao=nao, nmo=nmo, homo=homo)
 
  811                                  ncol_global=nmo, para_env=para_env, &
 
  812                                  context=mo_coeff%matrix_struct%context)
 
  814                                  template_fmstruct=mo_coeff%matrix_struct)
 
  815         dcdr_env%nmo(ispin) = nmo
 
  819      ALLOCATE (dcdr_env%deltaR(3, natom))
 
  820      ALLOCATE (dcdr_env%delta_basis_function(3, natom))
 
  821      ALLOCATE (dcdr_env%apt_el_dcdr(3, 3, natom))
 
  822      ALLOCATE (dcdr_env%apt_nuc_dcdr(3, 3, natom))
 
  823      ALLOCATE (dcdr_env%apt_total_dcdr(3, 3, natom))
 
  825      dcdr_env%apt_el_dcdr = 0._dp
 
  826      dcdr_env%apt_nuc_dcdr = 0._dp
 
  827      dcdr_env%apt_total_dcdr = 0._dp
 
  829      dcdr_env%deltaR = 0.0_dp
 
  830      dcdr_env%delta_basis_function = 0._dp
 
  833      IF (dcdr_env%localized_psi0) 
THEN 
  834         ALLOCATE (dcdr_env%apt_el_dcdr_per_center(3, 3, natom, dcdr_env%nbr_center(1)))
 
  835         ALLOCATE (dcdr_env%apt_el_dcdr_per_subset(3, 3, natom, nsubset))
 
  836         ALLOCATE (dcdr_env%apt_subset(3, 3, natom, nsubset))
 
  837         dcdr_env%apt_el_dcdr_per_center = 0._dp
 
  838         dcdr_env%apt_el_dcdr_per_subset = 0._dp
 
  839         dcdr_env%apt_subset = 0.0_dp
 
  843      ALLOCATE (dcdr_env%mo_coeff(nspins))
 
  844      ALLOCATE (dcdr_env%dCR(nspins))
 
  845      ALLOCATE (dcdr_env%dCR_prime(nspins))
 
  846      ALLOCATE (dcdr_env%chc(nspins))
 
  847      ALLOCATE (dcdr_env%op_dR(nspins))
 
  850         CALL cp_fm_create(dcdr_env%dCR(ispin), dcdr_env%likemos_fm_struct(ispin)%struct)
 
  851         CALL cp_fm_create(dcdr_env%dCR_prime(ispin), dcdr_env%likemos_fm_struct(ispin)%struct)
 
  852         CALL cp_fm_create(dcdr_env%mo_coeff(ispin), dcdr_env%likemos_fm_struct(ispin)%struct)
 
  853         CALL cp_fm_create(dcdr_env%chc(ispin), dcdr_env%momo_fm_struct(ispin)%struct)
 
  854         CALL cp_fm_create(dcdr_env%op_dR(ispin), dcdr_env%likemos_fm_struct(ispin)%struct)
 
  856         CALL get_mo_set(mo_set=mos(ispin), mo_coeff=mo_coeff)
 
  857         CALL cp_fm_to_fm(mo_coeff, dcdr_env%mo_coeff(ispin))
 
  860      IF (dcdr_env%z_matrix_method) 
THEN 
  861         ALLOCATE (dcdr_env%matrix_m_alpha(3, nspins))
 
  864               CALL cp_fm_create(dcdr_env%matrix_m_alpha(i, ispin), dcdr_env%likemos_fm_struct(1)%struct)
 
  865               CALL cp_fm_set_all(dcdr_env%matrix_m_alpha(i, ispin), 0.0_dp)
 
  871      NULLIFY (dcdr_env%hamiltonian1)
 
  872      NULLIFY (dcdr_env%moments)
 
  873      NULLIFY (dcdr_env%matrix_difdip)
 
  874      NULLIFY (dcdr_env%matrix_core_charge_1)
 
  875      NULLIFY (dcdr_env%matrix_s1)
 
  876      NULLIFY (dcdr_env%matrix_t1)
 
  877      NULLIFY (dcdr_env%matrix_apply_op_constant)
 
  878      NULLIFY (dcdr_env%matrix_d_vhxc_dR)
 
  879      NULLIFY (dcdr_env%matrix_vhxc_perturbed_basis)
 
  880      NULLIFY (dcdr_env%matrix_hc)
 
  881      NULLIFY (dcdr_env%matrix_ppnl_1)
 
  900         CALL dbcsr_create(dcdr_env%matrix_nosym_temp(i)%matrix, template=matrix_ks(1)%matrix, &
 
  901                           matrix_type=dbcsr_type_no_symmetry)
 
  903         CALL dbcsr_set(dcdr_env%matrix_nosym_temp(i)%matrix, 0._dp)
 
  905         CALL dbcsr_init_p(dcdr_env%matrix_nosym_temp2(i)%matrix)
 
  906         CALL dbcsr_create(dcdr_env%matrix_nosym_temp2(i)%matrix, template=matrix_ks(1)%matrix, &
 
  907                           matrix_type=dbcsr_type_no_symmetry)
 
  909         CALL dbcsr_set(dcdr_env%matrix_nosym_temp2(i)%matrix, 0._dp)
 
  915         CALL dbcsr_copy(dcdr_env%moments(i)%matrix, matrix_ks(1)%matrix, 
"dcdr_env%moments")
 
  916         CALL dbcsr_set(dcdr_env%moments(i)%matrix, 0.0_dp)
 
  923            CALL dbcsr_copy(dcdr_env%matrix_difdip(i, j)%matrix, dcdr_env%matrix_nosym_temp(1)%matrix)
 
  924            CALL dbcsr_set(dcdr_env%matrix_difdip(i, j)%matrix, 0.0_dp)
 
  930         CALL dbcsr_init_p(dcdr_env%perturbed_dm_correction(ispin)%matrix)
 
  931         CALL dbcsr_init_p(dcdr_env%matrix_apply_op_constant(ispin)%matrix)
 
  932         CALL dbcsr_copy(dcdr_env%matrix_apply_op_constant(ispin)%matrix, matrix_ks(1)%matrix)
 
  933         CALL dbcsr_copy(dcdr_env%perturbed_dm_correction(ispin)%matrix, matrix_ks(1)%matrix)
 
  941      CALL dbcsr_copy(dcdr_env%matrix_s1(1)%matrix, matrix_s(1)%matrix)
 
  942      CALL dbcsr_copy(dcdr_env%matrix_t1(1)%matrix, dcdr_env%matrix_t(1)%matrix)
 
  946         CALL dbcsr_copy(dcdr_env%matrix_s1(i)%matrix, dcdr_env%matrix_nosym_temp(1)%matrix)
 
  949         CALL dbcsr_copy(dcdr_env%matrix_t1(i)%matrix, dcdr_env%matrix_nosym_temp(1)%matrix)
 
  955            CALL dbcsr_init_p(dcdr_env%matrix_vhxc_perturbed_basis(ispin, j)%matrix)
 
  956            CALL dbcsr_copy(dcdr_env%matrix_vhxc_perturbed_basis(ispin, j)%matrix, dcdr_env%matrix_s1(1)%matrix)
 
  962         CALL dbcsr_create(dcdr_env%matrix_hc(i)%matrix, template=matrix_ks(1)%matrix, &
 
  963                           matrix_type=dbcsr_type_symmetric)
 
  965         CALL dbcsr_set(dcdr_env%matrix_hc(i)%matrix, 0.0_dp)
 
  970         CALL dbcsr_create(dcdr_env%matrix_ppnl_1(i)%matrix, template=matrix_ks(1)%matrix, &
 
  971                           matrix_type=dbcsr_type_symmetric)
 
  973         CALL dbcsr_set(dcdr_env%matrix_ppnl_1(i)%matrix, 0.0_dp)
 
  978            CALL dbcsr_init_p(dcdr_env%matrix_d_vhxc_dR(i, ispin)%matrix)
 
  979            CALL dbcsr_copy(dcdr_env%matrix_d_vhxc_dR(i, ispin)%matrix, dcdr_env%matrix_s1(1)%matrix)
 
  982         CALL dbcsr_init_p(dcdr_env%matrix_core_charge_1(i)%matrix)
 
  983         CALL dbcsr_copy(dcdr_env%matrix_core_charge_1(i)%matrix, dcdr_env%matrix_s1(1)%matrix)
 
  984         CALL dbcsr_set(dcdr_env%matrix_core_charge_1(i)%matrix, 0.0_dp)
 
  989         CALL get_mo_set(mo_set=mos(ispin), mo_coeff=mo_coeff, nao=nao, nmo=nmo)
 
  990         CALL cp_fm_create(buf, dcdr_env%likemos_fm_struct(ispin)%struct)
 
  995                            1.0_dp, mo_coeff, buf, &
 
  996                            0.0_dp, dcdr_env%chc(ispin))
 
 1002                                        "PRINT%PROGRAM_RUN_INFO")
 
 1004      CALL timestop(handle)
 
 
 1026      DEALLOCATE (dcdr_env%list_of_atoms)
 
 1030      DO ispin = 1, dcdr_env%nspins
 
 1034      DEALLOCATE (dcdr_env%momo_fm_struct)
 
 1035      DEALLOCATE (dcdr_env%likemos_fm_struct)
 
 1037      DEALLOCATE (dcdr_env%deltar)
 
 1038      DEALLOCATE (dcdr_env%delta_basis_function)
 
 1040      IF (dcdr_env%localized_psi0) 
THEN 
 1042         DEALLOCATE (dcdr_env%centers_set(1)%array)
 
 1043         DEALLOCATE (dcdr_env%center_list(1)%array)
 
 1044         DEALLOCATE (dcdr_env%centers_set)
 
 1045         DEALLOCATE (dcdr_env%center_list)
 
 1046         DEALLOCATE (dcdr_env%apt_subset)
 
 1049      DEALLOCATE (dcdr_env%apt_el_dcdr)
 
 1050      DEALLOCATE (dcdr_env%apt_nuc_dcdr)
 
 1051      DEALLOCATE (dcdr_env%apt_total_dcdr)
 
 1052      IF (dcdr_env%localized_psi0) 
THEN 
 1053         DEALLOCATE (dcdr_env%apt_el_dcdr_per_center)
 
 1054         DEALLOCATE (dcdr_env%apt_el_dcdr_per_subset)
 
 1064      IF (dcdr_env%z_matrix_method) 
THEN 
 
Handles all functions related to the CELL.
 
subroutine, public get_cell(cell, alpha, beta, gamma, deth, orthorhombic, abc, periodic, h, h_inv, symmetry_id, tag)
Get informations about a simulation cell.
 
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
 
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
 
subroutine, public dbcsr_init_p(matrix)
...
 
subroutine, public dbcsr_set(matrix, alpha)
...
 
Routines that link DBCSR and CP2K concepts together.
 
subroutine, public cp_dbcsr_alloc_block_from_nbl(matrix, sab_orb, desymmetrize)
allocate the blocks of a dbcsr based on the neighbor list
 
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
 
Utility routines to open and close files. Tracking of preconnections.
 
subroutine, public open_file(file_name, file_status, file_form, file_action, file_position, file_pad, unit_number, debug, skip_get_unit_number, file_access)
Opens the requested file using a free unit number.
 
subroutine, public close_file(unit_number, file_status, keep_preconnection)
Close an open file given by its logical unit number. Optionally, keep the file and unit preconnected.
 
logical function, public file_exists(file_name)
Checks if file exists, considering also the file discovery mechanism.
 
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_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_submatrix(fm, new_values, start_row, start_col, n_rows, n_cols, alpha, beta, transpose)
sets a submatrix of a full matrix fm(start_row:start_row+n_rows,start_col:start_col+n_cols) = alpha*o...
 
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_get_submatrix(fm, target_m, start_row, start_col, n_rows, n_cols, transpose)
gets a submatrix of a full matrix op(target_m)(1:n_rows,1:n_cols) =fm(start_row:start_row+n_rows,...
 
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 ...
 
integer function, public cp_logger_get_default_io_unit(logger)
returns the unit nr for the ionode (-1 on all other processors) skips as well checks if the procs cal...
 
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)
...
 
character(len=default_path_length) function, public cp_print_key_generate_filename(logger, print_key, middle_name, extension, my_local)
Utility function that returns a unit number to write the print key. Might open a file with a unique f...
 
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,...
 
integer, parameter, public cp_p_file
 
integer function, public cp_print_key_should_output(iteration_info, basis_section, print_key_path, used_print_key, first_time)
returns what should be done with the given property if btest(res,cp_p_store) then the property should...
 
set of type/routines to handle the storage of results in force_envs
 
set of type/routines to handle the storage of results in force_envs
 
Calculation of the incomplete Gamma function F_n(t) for multi-center integrals over Cartesian Gaussia...
 
Defines the basic variable types.
 
integer, parameter, public dp
 
integer, parameter, public default_string_length
 
integer, parameter, public default_path_length
 
Utility routines for the memory handling.
 
Interface to the message passing library MPI.
 
Define the data structure for the molecule information.
 
Calculates the moment integrals <a|r^m|b>
 
subroutine, public get_reference_point(rpoint, drpoint, qs_env, fist_env, reference, ref_point, ifirst, ilast)
...
 
basic linear algebra operations for full matrixes
 
Define the data structure for the particle information.
 
Calculation of the core Hamiltonian integral matrix <a|H|b> over Cartesian Gaussian-type functions.
 
subroutine, public kinetic_energy_matrix(qs_env, matrixkp_t, matrix_t, matrix_p, matrix_name, calculate_forces, nderivative, sab_orb, eps_filter, basis_type, debug_forces, debug_stress)
Calculate kinetic energy matrix and possible relativistic correction.
 
Calculate the derivatives of the MO coefficients wrt nuclear coordinates.
 
subroutine, public dcdr_env_cleanup(qs_env, dcdr_env)
Deallocate the dcdr environment.
 
subroutine, public multiply_localization(ao_matrix, mo_coeff, work, nmo, icenter, res)
Multiply (ao_matrix @ mo_coeff) and store the column icenter in res.
 
subroutine, public dcdr_print(dcdr_env, qs_env)
Print the APT and sum rules.
 
subroutine, public dcdr_read_restart(qs_env, linres_section, vec, lambda, beta, tag)
Copied from linres_read_restart.
 
subroutine, public shift_wannier_into_cell(r, cell, r_shifted)
...
 
subroutine, public get_loc_setting(dcdr_env, qs_env)
...
 
subroutine, public dcdr_write_restart(qs_env, linres_section, vec, lambda, beta, tag)
Copied from linres_write_restart.
 
subroutine, public dcdr_env_init(dcdr_env, qs_env)
Initialize the dcdr environment.
 
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, sab_cneo, 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, rhoz_cneo_set, ecoul_1c, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_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, do_rixs, tb_tblite)
Get the QUICKSTEP environment.
 
Type definitiona for linear response calculations.
 
New version of the module for the localization of the molecular orbitals This should be able to use d...
 
subroutine, public get_qs_loc_env(qs_loc_env, cell, local_molecules, localized_wfn_control, moloc_coeff, op_sm_set, op_fm_set, para_env, particle_set, weights, dim_op)
...
 
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.
 
Calculates the moment integrals <a|r^m|b> and <a|r x d/dr|b>
 
subroutine, public build_local_moment_matrix(qs_env, moments, nmoments, ref_point, ref_points, basis_type)
...
 
Define the neighbor list data types and the corresponding functionality.
 
Calculation of overlap matrix, its derivatives and forces.
 
subroutine, public build_overlap_matrix(ks_env, matrix_s, matrixkp_s, matrix_name, nderivative, basis_type_a, basis_type_b, sab_nl, calculate_forces, matrix_p, matrixkp_p)
Calculation of the overlap matrix over Cartesian Gaussian functions.
 
Utilities for string manipulations.
 
elemental subroutine, public xstring(string, ia, ib)
...
 
Type defining parameters related to the simulation cell.
 
type of a logger, at the moment it contains just a print level starting at which level it should be l...
 
contains arbitrary information which need to be stored
 
stores all the informations relevant to an mpi environment
 
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...
 
General settings for linear response calculations.
 
A type that holds controlling information for the calculation of the spread of wfn and the optimizati...
 
contains all the info needed by quickstep to calculate the spread of a selected set of orbitals and i...