lowdin Subroutine

public subroutine lowdin(infos)

Uses

  • proc~~lowdin~~UsesGraph proc~lowdin lowdin module~basis_tools basis_tools proc~lowdin->module~basis_tools module~io_constants io_constants proc~lowdin->module~io_constants module~messages messages proc~lowdin->module~messages module~precision precision proc~lowdin->module~precision module~strings strings proc~lowdin->module~strings module~types types proc~lowdin->module~types module~basis_tools->module~io_constants module~basis_tools->module~precision iso_fortran_env iso_fortran_env module~basis_tools->iso_fortran_env module~atomic_structure_m atomic_structure_m module~basis_tools->module~atomic_structure_m module~constants constants module~basis_tools->module~constants module~parallel parallel module~basis_tools->module~parallel module~messages->module~io_constants module~messages->module~precision comm_IOFILE comm_IOFILE module~messages->comm_IOFILE comm_PAR comm_PAR module~messages->comm_PAR module~precision->iso_fortran_env iso_c_binding iso_c_binding module~strings->iso_c_binding module~types->module~basis_tools module~types->module~precision module~types->iso_c_binding module~types->module~atomic_structure_m module~functionals functionals module~types->module~functionals module~types->module~parallel tagarray tagarray module~types->tagarray module~atomic_structure_m->iso_c_binding module~constants->module~precision module~functionals->module~precision module~functionals->iso_c_binding xc_f03_lib_m xc_f03_lib_m module~functionals->xc_f03_lib_m module~parallel->module~precision module~parallel->iso_c_binding module~parallel->iso_fortran_env mpi mpi module~parallel->mpi

Arguments

Type IntentOptional Attributes Name
type(information), intent(inout), target :: infos

Calls

proc~~lowdin~~CallsGraph proc~lowdin lowdin interface~show_message show_message proc~lowdin->interface~show_message none~bf_label basis_set%bf_label proc~lowdin->none~bf_label proc~run_population_analysis run_population_analysis proc~lowdin->proc~run_population_analysis proc~run_population_analysis->interface~show_message interface~data_has_tags data_has_tags proc~run_population_analysis->interface~data_has_tags interface~tagarray_get_data tagarray_get_data proc~run_population_analysis->interface~tagarray_get_data interface~unpack_matrix unpack_matrix proc~run_population_analysis->interface~unpack_matrix proc~diag_symm_packed diag_symm_packed proc~run_population_analysis->proc~diag_symm_packed proc~oqp_dgemm_i64 oqp_dgemm_i64 proc~run_population_analysis->proc~oqp_dgemm_i64 proc~unpack_f90 UNPACK_F90 interface~unpack_matrix->proc~unpack_f90 proc~diag_symm_packed->interface~show_message dspev dspev proc~diag_symm_packed->dspev dspevx dspevx proc~diag_symm_packed->dspevx proc~oqp_dgemm_i64->interface~show_message dgemm dgemm proc~oqp_dgemm_i64->dgemm proc~unpack_f90->interface~show_message proc~oqp_dtpttr_i64 oqp_dtpttr_i64 proc~unpack_f90->proc~oqp_dtpttr_i64 proc~oqp_dtpttr_i64->interface~show_message dtpttr dtpttr proc~oqp_dtpttr_i64->dtpttr

Source Code

  subroutine lowdin(infos)
    use precision, only: dp
    use io_constants, only: iw
    use basis_tools, only: basis_set
    use messages, only: show_message, with_abort
    use types, only: information
    use strings, only: Cstring, fstring

    implicit none

    type(information), target, intent(inout) :: infos

    type(basis_set), pointer :: basis
    real(kind=dp), allocatable :: orbital_pop(:)
    real(kind=dp), allocatable :: chg(:)
    integer :: nat, ok

    open (unit=IW, file=infos%log_filename, position="append")

!   Load basis set
    basis => infos%basis
    basis%atoms => infos%atoms
    nat = ubound(infos%atoms%zn,1)

    allocate(orbital_pop(basis%nbf), &
             chg(nat), &
             source=0.0d0, stat=ok)
    if (ok /= 0) call show_message('Cannot allocate memory', WITH_ABORT)

    write(iw,'(2/)')
    write(iw,'(4x,a)') '=========================='
    write(iw,'(4x,a)') 'Lowdin population analysis'
    write(iw,'(4x,a)') '=========================='
    call flush(iw)

    call run_population_analysis(infos, basis, orbital_pop, chg, POP_LOWDIN)

    write(iw,'(/,2X,A)') 'Gross AO population (Lowdin)'
    call print_ao_pop(infos, orbital_pop)

    write(iw,'(/,2X,A)') 'Atomic partial charges (Lowdin)'
    call print_charges(infos, chg)

    close(iw)

  end subroutine lowdin