SUBROUTINE open_states(ieng, njvib_open, maxopen, anyopen, whichir) !========================================================================================= ! Written by: Jeff Crawford USE Numeric_Kinds_Module USE CommonInfo_Module USE EnergyGrid_Module USE Jacobi_Module USE APH_Module USE Print_Module USE SymGroup_Module USE QuantumNumber_Module USE SurfaceAPH_Module USE SurfaceJacobi_Module IMPLICIT NONE !========================================================================================= ! I N P U T INTEGER,INTENT(IN) :: ieng INTEGER :: whichir !========================================================================================= ! O U T P U T LOGICAL :: anyopen INTEGER :: njvib_open(0:jmax,req_chanls), maxopen(req_chanls) !========================================================================================= ! I N T E R N A L S CHARACTER(LEN=1) :: c1 CHARACTER(LEN=2) :: j2 CHARACTER(LEN=100) :: filename INTEGER :: ijrot, ichanl, ivib INTEGER :: open_j, next_j INTEGER :: neig, isum !========================================================================================= ! A L L O C A T A B L E REAL(dp), ALLOCATABLE :: jac_energy(:) !========================================================================================= ! F U N C T I O N S CHARACTER(LEN=1) :: label1 CHARACTER(LEN=2) :: label2 !========================================================================================= ! Must add in a minimum open energy based upon the initial rovib state. maxopen=0 isum=0 DO ijrot=0,jmax ! Need to make jmax channel dependent. DO ichanl=1,req_chanls open_j=njvib_open(ijrot,ichanl) next_j=open_j+1 c1=label1(ichanl) j2=label2(ijrot) filename = 'jacobi_energy_c'//c1//'_'//j2//'.bin' OPEN(UNIT=bin_unit0,FILE=TRIM(BinOutdir)//TRIM(filename),FORM='unformatted',STATUS='unknown') READ(bin_unit0) neig IF (ALLOCATED(jac_energy)) DEALLOCATE(jac_energy) ALLOCATE(jac_energy(neig)) READ(bin_unit0) jac_energy CLOSE(bin_unit0,STATUS='keep') IF (e_vals(ieng).lt.jac_energy(neig)) THEN !(2 IF) Precheck if open_j = neig DO ivib=next_j, neig ! (1 DO) vibloop IF (e_vals(ieng).ge.jac_energy(ivib)) THEN !(1 IF) Check for open states open_j=open_j+1 ! next available Jacobi vibrational !next_j=next_j+1 ! current highest available Jacobi vibrational state ELSE !(1 IF) EXIT ENDIF !(1 IF) njvib_open(ijrot,ichanl)=open_j IF (open_j.ge.neig) njvib_open(ijrot,ichanl) = neig ENDDO ! (1 DO) vibloop ELSE !(2 IF) for jac_energy(neig) conditional njvib_open(ijrot,ichanl) = neig ENDIF ! (2 IF) maxopen(ichanl)=maxopen(ichanl)+njvib_open(ijrot,ichanl) isum=isum+njvib_open(ijrot,ichanl) ENDDO ! chanl loop ENDDO ! rotloop IF (isum.gt.0) THEN anyopen = .true. ELSE anyopen = .false. ENDIF END SUBROUTINE open_states