SUBROUTINE MassFac(little) ! !----------------------------------------------------------------------- ! Routine to calculate all the factors that are only dependent ! on the masses. !----------------------------------------------------------------------- USE Numeric_Kinds_Module USE Parms_Module USE FileUnits_Module USE Masses_Module USE Save_Module USE Convrsns_Module USE ChiAng_Module USE Das_Module IMPLICIT NONE REAL(KIND=dp) totmas, cchi, schi, chiab, chibc, chica, pi, angp REAL(KIND=dp) angm REAL(KIND=dp), PARAMETER:: one=1.0d0, two=2.0d0, four=4.0d0 INTEGER i, ip, im LOGICAL little !----------------------------------------------------------------------- pi=four*atan(one) amass=amass*amutoau bmass=bmass*amutoau cmass=cmass*amutoau totmas=amass+bmass+cmass usys=sqrt(amass*bmass*cmass/totmas) usys2=two*usys dscale(1)=sqrt(amass/usys*(one-(amass/totmas))) dscale(2)=sqrt(bmass/usys*(one-(bmass/totmas))) dscale(3)=sqrt(cmass/usys*(one-(cmass/totmas))) cchi=-usys/(dscale(1)*dscale(2)*cmass) schi=one/(dscale(1)*dscale(2)) chiab=atan2(schi,cchi) cchi=-usys/(dscale(2)*dscale(3)*amass) schi=one/(dscale(2)*dscale(3)) chibc=atan2(schi,cchi) cchi=-usys/(dscale(3)*dscale(1)*bmass) schi=one/(dscale(3)*dscale(1)) chica=atan2(schi,cchi) cchi=chiab+chibc+chica chif1(1)=0.0d0 chif1(2)=-chiab chif1(3)=chica IF(little)THEN WRITE(Output_Unit,310) amass, bmass, cmass WRITE(Output_Unit,311) totmas, usys WRITE(Output_Unit,320) chiab, chibc, chica, cchi WRITE(Output_Unit,*)'chif1=', chif1 WRITE(Output_Unit,*)'dscale=', dscale ENDIF !----------------------------------------------------------------------- ! More mass factors. ! chij(i+1,i) is negative obtuse, kinematic angle between channels. !----------------------------------------------------------------------- xm(1)=amass xm(2)=bmass xm(3)=cmass DO i=1, narran chij(i,i)=0.0d0 d(i)=dscale(i) ENDDO DO i=1, narran ip=i+1 im=i-1 IF(i .eq. narran)ip=1 IF(i .eq. 1)im=narran chij(i,ip)=acos(-usys/(dscale(i)*dscale(ip)*xm(im))) chij(ip,i)=-chij(i,ip) ENDDO ! ------------------------------------------------------------ ! acute(i) is the smallest of the acute angles between channel i ! and its neighbors. jacute(i) is the index of that nearest neighbor. ! -------------------------------------------------------------------- DO i=1, narran ip=i+1 im=i-1 IF(i .eq. narran)ip=1 IF(i .eq. 1)im=narran angp=chij(ip,i)+pi angm=chij(i,im)+pi IF(angp .le. angm) THEN acute(i)=angp jacute(i)=ip ELSE acute(i)=angm jacute(i)=im ENDIF ENDDO WRITE(Output_Unit,330) (jacute(i), acute(i), i=1, narran) 310 FORMAT (' amass=', 1pe14.7, ' bmass=', 1pe14.7, ' cmass=', 1pe14.7) 311 FORMAT (' total mass=', 1pe14.7, ' hyperspherical reduced mass=', 1pe14.7) 320 FORMAT (' chi-ab=', 1pe14.7, ' chi-bc=', 1pe14.7, ' chi-ca=', 1pe14.7, ' chi-sum=', 1pe14.7) 330 FORMAT (' jacute, acute=', 3(i5, 1x, e14.7)) !-----------***END-massfac***------------------------------------------- RETURN END SUBROUTINE MassFac