subroutine oqp_apply_basis(infos)
use messages, only: with_abort
use types, only: information
use atomic_structure_m, only: atomic_structure
use strings, only: fstring
use oqp_tagarray_driver
use iso_c_binding, only: c_char
use parallel, only: par_env_t
use basis_api, only: map_shell2basis_set, print_basis
implicit none
type(information), intent(inout) :: infos
type(par_env_t) :: pe
character(len=:), allocatable :: basis_file
integer :: iw, i
logical :: err
!
! Section of Tagarray for the basis filename
! We are getting basis file name from Python via tagarray
!
character(len=1,kind=c_char), contiguous, pointer :: basis_filename(:)
character(len=*), parameter :: subroutine_name = "oqp_apply_basis"
character(len=*), parameter :: tags_general(1) = (/ character(len=80) :: &
OQP_basis_filename /)
call data_has_tags(infos%dat, tags_general, module_name, subroutine_name, with_abort)
call tagarray_get_data(infos%dat, OQP_basis_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
! ! 3. LOG: Write: Main output file
! ! 5. BAS: read: Basis set library (internally)
!
open (newunit=iw, file=infos%log_filename, position="append")
!
write(iw,'(/,20x,"++++++++++++++++++++++++++++++++++++++++")')
write(iw,'( 22X,"MODULE: apply_basis ")')
write(iw,'( 22X,"Setting up basis set information")')
write(iw,'(20x,"++++++++++++++++++++++++++++++++++++++++")')
call pe%init(infos%mpiinfo%comm, infos%mpiinfo%usempi)
call map_shell2basis_set(infos, infos%basis)
! if (pe%rank == 0) then
! call infos%basis%from_file(basis_file, infos%atoms, err)
! infos%control%basis_set_issue = err
! endif
! call infos%basis%basis_broadcast(infos%mpiinfo%comm, infos%mpiinfo%usempi)
if (sum(infos%basis%ecp_zn_num)>0) then
call pe%bcast(infos%mol_prop%nelec, 1)
call pe%bcast(infos%mol_prop%nelec_A, 1)
call pe%bcast(infos%mol_prop%nelec_B, 1)
call pe%bcast(infos%mol_prop%nocc, 1)
end if
! Checking error of basis set reading..
! call pe%bcast(infos%control%basis_set_issue, 1)
write(iw,'(/5X,"Basis Sets options"/&
&5X,18("-")/&
&5X,"Basis Sets: ",A/&
&5X,"Number of Shells =",I8,5X,"Number of Primitives =",I8/&
&5X,"Number of Basis Set functions =",I8/&
&5X,"Maximum Angluar Momentum =",I8/)') &
trim(basis_file), &
infos%basis%nshell, infos%basis%nprim, &
infos%basis%nbf, infos%basis%mxam
close (iw)
call print_basis(infos)
end subroutine oqp_apply_basis