guess_huckel Subroutine

public subroutine guess_huckel(infos)

Uses

  • proc~~guess_huckel~~UsesGraph proc~guess_huckel guess_huckel iso_c_binding iso_c_binding proc~guess_huckel->iso_c_binding module~basis_tools basis_tools proc~guess_huckel->module~basis_tools module~guess guess proc~guess_huckel->module~guess module~huckel huckel proc~guess_huckel->module~huckel module~io_constants io_constants proc~guess_huckel->module~io_constants module~mathlib mathlib proc~guess_huckel->module~mathlib module~messages messages proc~guess_huckel->module~messages module~oqp_tagarray_driver oqp_tagarray_driver proc~guess_huckel->module~oqp_tagarray_driver module~parallel parallel proc~guess_huckel->module~parallel module~precision precision proc~guess_huckel->module~precision module~printing printing proc~guess_huckel->module~printing module~strings strings proc~guess_huckel->module~strings module~types types proc~guess_huckel->module~types module~util util proc~guess_huckel->module~util module~basis_tools->module~io_constants module~basis_tools->module~parallel 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~guess->module~precision module~oqp_linalg oqp_linalg module~guess->module~oqp_linalg module~huckel->module~precision module~huckel->module~oqp_linalg module~mathlib->module~precision module~mathlib->module~oqp_linalg 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~oqp_tagarray_driver->iso_c_binding tagarray tagarray module~oqp_tagarray_driver->tagarray module~parallel->iso_c_binding module~parallel->module~precision module~parallel->iso_fortran_env mpi mpi module~parallel->mpi module~precision->iso_fortran_env module~printing->module~precision module~strings->iso_c_binding module~types->iso_c_binding module~types->module~basis_tools module~types->module~parallel module~types->module~precision module~types->module~atomic_structure_m module~functionals functionals module~types->module~functionals module~types->tagarray module~util->module~precision module~atomic_structure_m->iso_c_binding module~constants->module~precision module~functionals->iso_c_binding module~functionals->module~precision xc_f03_lib_m xc_f03_lib_m module~functionals->xc_f03_lib_m module~blas_wrap blas_wrap module~oqp_linalg->module~blas_wrap module~lapack_wrap lapack_wrap module~oqp_linalg->module~lapack_wrap module~blas_wrap->module~messages module~blas_wrap->module~precision module~mathlib_types mathlib_types module~blas_wrap->module~mathlib_types module~lapack_wrap->module~messages module~lapack_wrap->module~precision module~lapack_wrap->module~mathlib_types

Arguments

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

Calls

proc~~guess_huckel~~CallsGraph proc~guess_huckel guess_huckel interface~data_has_tags data_has_tags proc~guess_huckel->interface~data_has_tags interface~tagarray_get_data tagarray_get_data proc~guess_huckel->interface~tagarray_get_data none~barrier par_env_t%barrier proc~guess_huckel->none~barrier none~bcast par_env_t%bcast proc~guess_huckel->none~bcast none~from_file basis_set%from_file proc~guess_huckel->none~from_file none~init~14 par_env_t%init proc~guess_huckel->none~init~14 proc~get_ab_initio_density get_ab_initio_density proc~guess_huckel->proc~get_ab_initio_density proc~huckel_guess huckel_guess proc~guess_huckel->proc~huckel_guess proc~measure_time measure_time proc~guess_huckel->proc~measure_time proc~print_module_info print_module_info proc~guess_huckel->proc~print_module_info remove_records remove_records proc~guess_huckel->remove_records reserve_data reserve_data proc~guess_huckel->reserve_data mpi_barrier mpi_barrier none~barrier->mpi_barrier none~par_env_t_bcast_byte par_env_t%par_env_t_bcast_byte none~bcast->none~par_env_t_bcast_byte none~par_env_t_bcast_c_bool par_env_t%par_env_t_bcast_c_bool none~bcast->none~par_env_t_bcast_c_bool none~par_env_t_bcast_dp_1d par_env_t%par_env_t_bcast_dp_1d none~bcast->none~par_env_t_bcast_dp_1d none~par_env_t_bcast_dp_2d par_env_t%par_env_t_bcast_dp_2d none~bcast->none~par_env_t_bcast_dp_2d none~par_env_t_bcast_dp_3d par_env_t%par_env_t_bcast_dp_3d none~bcast->none~par_env_t_bcast_dp_3d none~par_env_t_bcast_dp_4d par_env_t%par_env_t_bcast_dp_4d none~bcast->none~par_env_t_bcast_dp_4d none~par_env_t_bcast_dp_scalar par_env_t%par_env_t_bcast_dp_scalar none~bcast->none~par_env_t_bcast_dp_scalar none~par_env_t_bcast_int32_1d par_env_t%par_env_t_bcast_int32_1d none~bcast->none~par_env_t_bcast_int32_1d none~par_env_t_bcast_int32_scalar par_env_t%par_env_t_bcast_int32_scalar none~bcast->none~par_env_t_bcast_int32_scalar none~par_env_t_bcast_int64_1d par_env_t%par_env_t_bcast_int64_1d none~bcast->none~par_env_t_bcast_int64_1d none~par_env_t_bcast_int64_scalar par_env_t%par_env_t_bcast_int64_scalar none~bcast->none~par_env_t_bcast_int64_scalar none~append basis_set%append none~from_file->none~append none~calc_req_storage basis_library_t%calc_req_storage none~from_file->none~calc_req_storage none~from_file~2 basis_library_t%from_file none~from_file->none~from_file~2 none~normalize_contracted basis_set%normalize_contracted none~from_file->none~normalize_contracted none~normalize_primitives basis_set%normalize_primitives none~from_file->none~normalize_primitives none~reserve basis_set%reserve none~from_file->none~reserve none~set_bfnorms basis_set%set_bfnorms none~from_file->none~set_bfnorms mpi_comm_rank mpi_comm_rank none~init~14->mpi_comm_rank mpi_comm_size mpi_comm_size none~init~14->mpi_comm_size interface~show_message show_message proc~get_ab_initio_density->interface~show_message proc~orb_to_dens orb_to_dens proc~get_ab_initio_density->proc~orb_to_dens proc~huckel_guess->interface~show_message interface~unpack_matrix unpack_matrix proc~huckel_guess->interface~unpack_matrix proc~basis_overlap basis_overlap proc~huckel_guess->proc~basis_overlap proc~corresponding_orbital_projection corresponding_orbital_projection proc~huckel_guess->proc~corresponding_orbital_projection proc~diag_symm_full diag_symm_full proc~huckel_guess->proc~diag_symm_full proc~matrix_invsqrt matrix_invsqrt proc~huckel_guess->proc~matrix_invsqrt proc~mksphar mksphar proc~huckel_guess->proc~mksphar proc~oqp_dgemm_i64 oqp_dgemm_i64 proc~huckel_guess->proc~oqp_dgemm_i64 proc~oqp_dgeqrf_i64 oqp_dgeqrf_i64 proc~huckel_guess->proc~oqp_dgeqrf_i64 proc~oqp_dormqr_i64 oqp_dormqr_i64 proc~huckel_guess->proc~oqp_dormqr_i64 proc~oqp_dsymm_i64 oqp_dsymm_i64 proc~huckel_guess->proc~oqp_dsymm_i64 proc~orthogonal_transform_sym orthogonal_transform_sym proc~huckel_guess->proc~orthogonal_transform_sym proc~overlap overlap proc~huckel_guess->proc~overlap proc~unpack_f90 UNPACK_F90 interface~unpack_matrix->proc~unpack_f90 proc~get_element_id get_element_id none~from_file~2->proc~get_element_id mpi_bcast mpi_bcast none~par_env_t_bcast_byte->mpi_bcast none~par_env_t_bcast_c_bool->mpi_bcast none~par_env_t_bcast_dp_1d->mpi_bcast none~par_env_t_bcast_dp_2d->mpi_bcast none~par_env_t_bcast_dp_3d->mpi_bcast none~par_env_t_bcast_dp_4d->mpi_bcast none~par_env_t_bcast_dp_scalar->mpi_bcast none~par_env_t_bcast_int32_1d->mpi_bcast none~par_env_t_bcast_int32_scalar->mpi_bcast none~par_env_t_bcast_int64_1d->mpi_bcast none~par_env_t_bcast_int64_scalar->mpi_bcast none~alloc2 shpair_t%alloc2 proc~basis_overlap->none~alloc2 none~fetch_by_id shell_t%fetch_by_id proc~basis_overlap->none~fetch_by_id none~shell_pair2 shpair_t%shell_pair2 proc~basis_overlap->none~shell_pair2 proc~comp_kin_ovl_int1_prim comp_kin_ovl_int1_prim proc~basis_overlap->proc~comp_kin_ovl_int1_prim proc~update_rectangular_matrix update_rectangular_matrix proc~basis_overlap->proc~update_rectangular_matrix proc~corresponding_orbital_projection->interface~show_message proc~corresponding_orbital_projection->proc~diag_symm_full proc~corresponding_orbital_projection->proc~oqp_dgemm_i64 proc~oqp_dswap_i64 oqp_dswap_i64 proc~corresponding_orbital_projection->proc~oqp_dswap_i64 proc~oqp_dsyrk_i64 oqp_dsyrk_i64 proc~corresponding_orbital_projection->proc~oqp_dsyrk_i64 proc~schmd schmd proc~corresponding_orbital_projection->proc~schmd proc~diag_symm_full->interface~show_message dsyev dsyev proc~diag_symm_full->dsyev proc~matrix_invsqrt->interface~show_message proc~diag_symm_packed diag_symm_packed proc~matrix_invsqrt->proc~diag_symm_packed proc~mksphar->interface~show_message proc~oqp_dgemm_i64->interface~show_message dgemm dgemm proc~oqp_dgemm_i64->dgemm proc~oqp_dgeqrf_i64->interface~show_message dgeqrf dgeqrf proc~oqp_dgeqrf_i64->dgeqrf proc~oqp_dormqr_i64->interface~show_message dormqr dormqr proc~oqp_dormqr_i64->dormqr proc~oqp_dsymm_i64->interface~show_message dsymm dsymm proc~oqp_dsymm_i64->dsymm interface~pack_matrix pack_matrix proc~orb_to_dens->interface~pack_matrix proc~oqp_dsyr2k_i64 oqp_dsyr2k_i64 proc~orb_to_dens->proc~oqp_dsyr2k_i64 proc~orthogonal_transform_sym->interface~show_message proc~orthogonal_transform_sym->proc~oqp_dgemm_i64 proc~orthogonal_transform_sym->proc~oqp_dsymm_i64 proc~oqp_dtpttr_i64 oqp_dtpttr_i64 proc~orthogonal_transform_sym->proc~oqp_dtpttr_i64 proc~oqp_dtrttp_i64 oqp_dtrttp_i64 proc~orthogonal_transform_sym->proc~oqp_dtrttp_i64 none~alloc~2 shpair_t%alloc proc~overlap->none~alloc~2 proc~overlap->none~fetch_by_id none~shell_pair shpair_t%shell_pair proc~overlap->none~shell_pair proc~overlap->proc~comp_kin_ovl_int1_prim proc~update_triang_matrix update_triang_matrix proc~overlap->proc~update_triang_matrix proc~pack_f90 PACK_F90 interface~pack_matrix->proc~pack_f90 proc~doquadgausshermite doQuadGaussHermite proc~comp_kin_ovl_int1_prim->proc~doquadgausshermite proc~diag_symm_packed->interface~show_message dspev dspev proc~diag_symm_packed->dspev dspevx dspevx proc~diag_symm_packed->dspevx proc~to_upper to_upper proc~get_element_id->proc~to_upper proc~oqp_dswap_i64->interface~show_message dswap dswap proc~oqp_dswap_i64->dswap proc~oqp_dsyr2k_i64->interface~show_message dsyr2k dsyr2k proc~oqp_dsyr2k_i64->dsyr2k proc~oqp_dsyrk_i64->interface~show_message dsyrk dsyrk proc~oqp_dsyrk_i64->dsyrk proc~oqp_dtpttr_i64->interface~show_message dtpttr dtpttr proc~oqp_dtpttr_i64->dtpttr proc~oqp_dtrttp_i64->interface~show_message dtrttp dtrttp proc~oqp_dtrttp_i64->dtrttp proc~schmd->interface~show_message proc~schmd->proc~oqp_dgeqrf_i64 proc~oqp_dorgqr_i64 oqp_dorgqr_i64 proc~schmd->proc~oqp_dorgqr_i64 proc~unpack_f90->interface~show_message proc~unpack_f90->proc~oqp_dtpttr_i64 abrt abrt proc~doquadgausshermite->abrt proc~oqp_dorgqr_i64->interface~show_message dorgqr dorgqr proc~oqp_dorgqr_i64->dorgqr proc~pack_f90->interface~show_message proc~pack_f90->proc~oqp_dtrttp_i64

Called by

proc~~guess_huckel~~CalledByGraph proc~guess_huckel guess_huckel proc~guess_huckel_c guess_huckel_C proc~guess_huckel_c->proc~guess_huckel

Source Code

  subroutine guess_huckel(infos)
    use precision, only: dp
    use types, only: information
    use io_constants, only: IW
    use oqp_tagarray_driver
    use basis_tools, only: basis_set
    use guess, only: get_ab_initio_density
    use mathlib, only: matrix_invsqrt
    use huckel, only: huckel_guess
    use util, only: measure_time
    use messages, only: show_message, WITH_ABORT
    use strings, only: Cstring, fstring
    use printing, only: print_module_info
    use oqp_tagarray_driver
    use iso_c_binding, only: c_char
    use parallel, only: par_env_t

    implicit none

    character(len=*), parameter :: subroutine_name = "guess_huckel"

    type(information), target, intent(inout) :: infos
    integer :: i, nbf, nbf2

    type(basis_set), pointer :: basis
    type(basis_set) :: huckel_basis
    character(len=:), allocatable :: basis_file
    logical :: err
    integer , parameter :: root = 0
    type(par_env_t) :: pe
  ! tagarray
    real(kind=dp), contiguous, pointer :: &
      Smat(:), &
      dmat_a(:), mo_a(:,:), mo_energy_a(:), &
      dmat_b(:), mo_b(:,:), mo_energy_b(:)
    character(len=*), parameter :: tags_alpha(3) = (/ character(len=80) :: &
      OQP_DM_A, OQP_E_MO_A, OQP_VEC_MO_A /)
    character(len=*), parameter :: tags_beta(3) = (/ character(len=80) :: &
      OQP_DM_B, OQP_E_MO_B, OQP_VEC_MO_B /)
    character(len=*), parameter :: tags_general(2) = (/ character(len=80) :: &
      OQP_SM, OQP_hbasis_filename /)
    character(len=1,kind=c_char), contiguous, pointer :: basis_filename(:)
  !
  ! Section of Tagarray for the log filename
  ! We are getting lot file name from Python via tagarray
  !

    call data_has_tags(infos%dat, tags_general, module_name, subroutine_name, with_abort)
    call tagarray_get_data(infos%dat, OQP_hbasis_filename, basis_filename)
    allocate(character(ubound(basis_filename,1)) :: basis_file)
    do i = 1, ubound(basis_filename,1)
       basis_file(i:i) = basis_filename(i)
    end do
   !
  ! Files open
  ! 1. XYZ: Read : Geometric data, ATOMS
  ! 3. LOG: Read Write: Main output file
  !
    open (unit=IW, file=infos%log_filename, position="append")
  !
    call print_module_info('Guess_Huckel','Initial guess using Huckel theory')
  !
  ! Readings
  ! load basis set
    basis => infos%basis
    call pe%init(infos%mpiinfo%comm, infos%mpiinfo%usempi)

    if (pe%rank == root) then
      call huckel_basis%from_file(basis_file, infos%atoms, err)
    end if

  ! Checking error of basis set reading..
    infos%control%basis_set_issue = err
    call pe%bcast(infos%control%basis_set_issue, 1)

    basis%atoms => infos%atoms
  !  Allocate H, S ,T and D matrices
    nbf = basis%nbf
    nbf2 =nbf*(nbf+1)/2

    ! clean data
    call infos%dat%remove_records(tags_alpha)
    call infos%dat%remove_records(tags_beta)

    ! load general data
    call data_has_tags(infos%dat, tags_general, module_name, subroutine_name, WITH_ABORT)
    call tagarray_get_data(infos%dat, OQP_SM, smat)

    ! allocate alpha
    call infos%dat%reserve_data(OQP_DM_A, TA_TYPE_REAL64, nbf2, comment=OQP_DM_A_comment)
    call infos%dat%reserve_data(OQP_E_MO_A, TA_TYPE_REAL64, nbf, comment=OQP_E_MO_A_comment)
    call infos%dat%reserve_data(OQP_VEC_MO_A, TA_TYPE_REAL64, nbf*nbf, (/ nbf, nbf /), comment=OQP_VEC_MO_A_comment)

    ! load alpha data
    call data_has_tags(infos%dat, tags_alpha, module_name, subroutine_name, WITH_ABORT)
    call tagarray_get_data(infos%dat, OQP_DM_A, dmat_a)
    call tagarray_get_data(infos%dat, OQP_E_MO_A, mo_energy_a)
    call tagarray_get_data(infos%dat, OQP_VEC_MO_A, mo_a)

  ! UHF/ROHF
    if (infos%control%scftype >= 2) then
      ! allocate beta
      call infos%dat%reserve_data(OQP_DM_B, TA_TYPE_REAL64, nbf2, comment=OQP_DM_B_comment)
      call infos%dat%reserve_data(OQP_E_MO_B, TA_TYPE_REAL64, nbf, comment=OQP_E_MO_B_comment)
      call infos%dat%reserve_data(OQP_VEC_MO_B, TA_TYPE_REAL64, nbf*nbf, (/ nbf, nbf /), comment=OQP_VEC_MO_B_comment)

      ! load beta
      call data_has_tags(infos%dat, tags_beta, module_name, subroutine_name, WITH_ABORT)
      call tagarray_get_data(infos%dat, OQP_DM_B, dmat_b)
      call tagarray_get_data(infos%dat, OQP_E_MO_B, mo_energy_b)
      call tagarray_get_data(infos%dat, OQP_VEC_MO_B, mo_b)
    end if

  ! Calculate Huckel MO
    if (pe%rank == root) then
      call huckel_guess(Smat, MO_A, infos, basis, huckel_basis)
    endif
  !  For ROHF/UHF
    if (INFOS%control%scftype >= 2) MO_B = MO_A
  !
  ! Calculate Density Matrix
    if (pe%rank == root) then
  ! RHF
      if (infos%control%scftype == 1) then
        call get_ab_initio_density(Dmat_A, MO_A, infos=infos, basis=basis)
  ! ROHF/UHF
      else
        call get_ab_initio_density(Dmat_A, MO_A, Dmat_B, MO_B, infos, basis)
      endif
    endif
    ! Broadcast MO and density matrices to all processes
    call pe%bcast(MO_A, nbf*nbf)
    if (infos%control%scftype >= 2) then
      call pe%bcast(MO_B, nbf*nbf)
    endif
    ! Broadcast the density matrices to all processes
    if (infos%control%scftype == 1) then
      call pe%bcast(Dmat_A, nbf2)
    else
      call pe%bcast(Dmat_A, nbf2)
      call pe%bcast(Dmat_B, nbf2)
    endif
    call pe%barrier()
    write (iw, '(/x,a,/)') '...... End of initial orbital guess ......'
    call measure_time(print_total=1, log_unit=iw)
    close(iw)
  end subroutine guess_huckel