SUBROUTINE POTV(V,R1,R2,XCOS) C TRANSFORM GENERALISED COORDINATES TO THOSE FOR PARTICULAR C SYSTEM. THIS VERSION TRANSFORMS TO AB2 BONDLENGTH-BONDANGLE C COORDINATES. ALLOWANCE MUST BE MADE FOR THE NUMBERING OF THE ATOMS c Input for POTV: R1,R2 are in au. IMPLICIT DOUBLE PRECISION (A-H,O-Z) c Dimensions for PES. dimension rij(3) COMMON /MASS/ XMASS(3),G1,G2 save icorr save icor C (R = R . S = R'. T = THETA) C DATA X1/1.0D0/,X0/0.0D0/,TINY/9.0D-15/,X2/2.0D0/ IF (G1 .EQ. X0) THEN C BONDLENGTH BONDANGLE COORDINATES: ATOM 1 = ATOM 2 Q1 = R1 Q2 = R2 THETA = ACOS(XCOS) ELSE IF (G2 .EQ. X0) THEN C SCATTERING COORDINATES: ATOM 2 = ATOM 3 XX = R1 * G1 YY = R1 * (X1 - G1) IF (R2 .EQ. X0 .OR. XCOS .GE. (X1 - TINY)) THEN Q1 = ABS(XX - R2) Q2 = (YY + R2) COST = -X1 ELSE IF (XCOS .LE. (TINY - X1)) THEN Q1 = (XX + R2) Q2 = ABS(YY + R2) COST = X1 ELSE Q1 = SQRT(XX*XX + R2*R2 - X2*XX*R2*XCOS) Q2 = SQRT(YY*YY + R2*R2 + X2*YY*R2*XCOS) COST = (Q1**2 + Q2**2 - R1**2) / (X2 * Q1 * Q2) ENDIF THETA = ACOS(COST) ELSE C GENERAL COORDINATES (INCLUDING RADAU): ATOM 1 = ATOM 2 F1= X1/G1 F2= X1/G2 F12= X1 - F1*F2 P1= R1*(X1-F1)/(G2*F12) P2= R2*(X1-F2)/(G1*F12) S1= R1-P1 S2= R2-P2 Q1= SQRT(P1*P1 + S2*S2 + X2*P1*S2*XCOS)/(X1-G1) Q2= SQRT(P2*P2 + S1*S1 + X2*P2*S1*XCOS)/(X1-G2) Q3= SQRT(P1*P1 + P2*P2 - X2*P1*P2*XCOS) COST = (Q1*Q1 + Q2*Q2 - Q3*Q3)/(X2*Q1*Q2) THETA = ACOS(COST) ENDIF c c c c Call pes ab initio surface. rij(1) = Q1*0.5291772d0 rij(2) = Q2*0.5291772d0 rij(3) = THETA Call PEScbsfci(VPv,rij(1),rij(2),rij(3)) CAll PEScvqz(VPcv,rij(1),rij(2),rij(3)) C Call PESrel(VPrel,rij(1),rij(2),rij(3)) C Call pesbodc(VPbodc,rij(1),rij(2),rij(3),31.972071d0,1.007825d0,1.007825d0) C Call pesbodc(VPbodc,rij(1),rij(2),rij(3),31.972071d0,1.0075505d0,1.0075505d0) C Call pesbodc(VPbodc,rij(1),rij(2),rij(3),31.972071d0,1.00727649d0,1.00727649d0) C Call pesbodc(VPbodc,rij(1),rij(2),rij(3),31.972071d0,2.014101d0,1.007825d0) C Call pesbodc(VPbodc,rij(1),rij(2),rij(3),31.972071d0,2.014101d0,2.014101d0) C Call pesbodc(VPbodc,rij(1),rij(2),rij(3),33.9678669d0,1.007825d0,1.007825d0) vp=vpv+vpcv if(vp.lt.0.0d0) then icorr=icorr + 1 else v=vp end if c Convert to Hartree v=v/219474.624d0 RETURN END C