SUBROUTINE Kmatrx_Calc(ndelves, R_mat, RE_mat, K_mat, KE_mat, xk, &
chinuj, wvec, nbasis, usys2, etot, jtot, &
chanl, elect, nvib, jrot, lorb, xksq, &
energy, nchanl, narran, temp, endaph, &
Out_Unit, A_mat, B_mat, E_mat, F_mat, &
AE_mat, BE_mat, EE_mat, FE_mat, &
nopen, calc_kmat, EDeriv, njacobi, gamma, &
phor, phoi, temp1, temp2)
USE melm_Module
USE region_Module
USE dip_Module
!
IMPLICIT NONE
LOGICAL EDeriv, calc_kmat
LOGICAL, PARAMETER :: Full=.False.
INTEGER nopen, ndelves, njacobi
INTEGER narran, nchanl(narran), jtot, Out_Unit, i
INTEGER elect(ndelves), nvib(ndelves), jrot(ndelves)
INTEGER lorb(ndelves), chanl(ndelves), nbasis(ndelves)
REAL(Kind=WP_Kind) usys2, endaph, etot
REAL(Kind=WP_Kind) energy(ndelves), wvec(njacobi)
REAL(Kind=WP_Kind) xksq(njacobi), xk(njacobi)
REAL(Kind=WP_Kind) R_mat(ndelves,ndelves), RE_mat(ndelves,ndelves)
REAL(Kind=WP_Kind) K_mat(njacobi,njacobi), KE_mat(njacobi,njacobi)
REAL(Kind=WP_Kind) A_mat(ndelves,njacobi), B_mat(ndelves,njacobi)
REAL(Kind=WP_Kind) E_mat(ndelves,njacobi), F_mat(ndelves,njacobi)
REAL(Kind=WP_Kind) AE_mat(ndelves,njacobi), BE_mat(ndelves,njacobi)
REAL(Kind=WP_Kind) EE_mat(ndelves,njacobi), FE_mat(ndelves,njacobi)
REAL(Kind=WP_Kind) temp(njacobi,njacobi), chinuj(*)
REAL(Kind=WP_Kind) temp1(njacobi,njacobi)
REAL(Kind=WP_Kind) temp2(njacobi,njacobi)
REAL(Kind=WP_Kind) gamma(njacobi), phor(njacobi), phoi(njacobi)
!-----------------------------------------------------------------
! Calculate the asymptotic jacobi basis functions.
!-------------------------------------------------------------------
IF(njacobi/=ndelves)THEN
WRITE(Out_Unit,*)'currently njacobi must equal ndelves'
WRITE(Out_Unit,*)'You must have exactly the same basis'
WRITE(Out_Unit,*)'in the delves and jacobi regions'
WRITE(Out_Unit,*)' Stopped in boundary'
WRITE(Out_Unit,*)' ndelves= ', ndelves,' njacobi= ',njacobi
WRITE(*,*)'currently njacobi must equal ndelves'
WRITE(*,*)'You must have exactly the same basis'
WRITE(*,*)'in the delves and jacobi regions'
WRITE(*,*)' Stopped in boundary'
WRITE(*,*)' ndelves= ', ndelves,' njacobi= ',njacobi
STOP 'Stopping Inside Kmatrx_Calc'
ENDIF
nopen=njacobi
iregion='jacobi '
IF(Full)THEN
WRITE(Out_Unit,*)'Quantum Numbers just before calling upsiln'
CALL Quant_Out(ndelves, chanl, elect, nvib, jrot, lorb, energy, xksq,'KMatrx_Calc_1')
ENDIF
WRITE(Out_Unit,*)'Calculate jacobi basis functions in Kmatrx_Calc'
CALL upsiln(temp, A_mat, xksq, xk, endaph, chinuj)
iregion='delves '
DO i=1,ndelves
xksq(i)=usys2*(Etot-energy(i))
ENDDO
!-------------------------------------------------------------------
! Calculate the K-matrix.
!-------------------------------------------------------------------
IF(Full)THEN
WRITE(Out_Unit,*)'Inside Kmatrx_Calc Calling Quant_Out: Kmatrx_Full will be called'
CALL Quant_Out(ndelves, chanl, elect, nvib, jrot, lorb, energy, xksq,'KMatrx_Calc_2')
ENDIF
WRITE(Out_Unit,*)'Inside Kmatrx_Calc Calling Kmatrx_Full: NJacobi=',njacobi
CALL Kmatrx_Full (ndelves, R_mat, RE_mat, K_mat, KE_mat, wvec, &
chanl, elect, nvib, jrot, lorb, jtot, etot, &
energy, usys2, Out_Unit, temp, &
A_mat, B_mat, E_mat, F_mat, &
AE_mat, BE_mat, EE_mat, FE_mat, &
calc_kmat, EDeriv,njacobi,gamma,phor, &
phoi,temp1,temp2)
WRITE(Out_Unit,*)'Inside Kmatrx_Calc returned from calling Kmatrx_Full'
!-------------------------------------------------------------------
! Determine the number of open channels and then reduce the
! K-matrix to only include the open channels.
!-------------------------------------------------------------------
DO i=1,ndelves !do I need this tmpmodgregparker
xksq(i)=usys2*(Etot-energy(i))
ENDDO
IF(Full)THEN
WRITE(Out_Unit,*)'Inside Kmatrx_Calc Calling Quant_Out: Kmatrx_Open will be called'
CALL Quant_Out(ndelves, chanl, elect, nvib, jrot, lorb, energy, xksq,'KMatrx_Calc_3')
ENDIF
WRITE(Out_Unit,*)'Inside Kmatrx_Calc Calling Kmatrx_Open: NJacobi=',njacobi
CALL Kmatrx_Open (njacobi, nopen, K_mat, KE_mat, wvec, nbasis, &
chanl, elect, nvib, jrot, lorb, xksq, &
energy, nchanl, narran, Out_Unit, calc_kmat, &
EDeriv, phor, phoi)
!-------------------------------------------------------------------
! on return
! nopen = no. of open channels.
! K_mat = K_matrix
! KE_mat = derivative of K_matrix with respect to energy.
!-------------------------------------------------------------------
RETURN
ENDSUBROUTINE Kmatrx_Calc