C                                                                               
      SUBROUTINE PREPOT                                                         
C                                                                               
C   System:             FH2                                                     
C   Functional form:    Double many-body expansion                              
C   Common name:        5SEC-COG1                                               
C   Reference:          unpublished                                             
C   Cross reference:    S. L. Mielke, G. C. Lynch,                              
C                       D. G. Truhlar, and D. W. Schwenke                       
C                       Chem. Phys. Lett. 213, 10-16 (1993)                     
C                                                                               
C   Protocol:                                                                   
C      PREPOT - initializes the potential's variables                           
C               must be called once before any calls to POT                     
C      POT    - driver for the evaluation of the energy and the derivatives     
C               of the energy with respect to the coordinates for a given       
C               geometric configuration                                         
C                                                                               
C   Units:                                                                      
C      energies    - hartrees                                                   
C      coordinates - bohr                                                       
C      derivatives - hartrees/bohr                                              
C                                                                               
C   Surfaces:                                                                   
C      ground electronic state                                                  
C                                                                               
C   Zero of energy:                                                             
C      The classical potential energy is set equal to zero for the F            
C      infinitely far from the H2 diatomic and R(H2) set equal to the           
C      H2 equilibrium diatomic value.                                           
C                                                                               
C   Parameters:                                                                 
C      Set in the BLOCK DATA subprogram PTPACM                                  
C                                                                               
C   Coordinates:                                                                
C      Internal, Definition: R(1) = R(F-H)                                      
C                            R(2) = R(H-H)                                      
C                            R(3) = R(H-F)                                      
C                                                                               
C   Common Blocks (used between the calling program and this potential):        
C        passes the coordinates, energy, and derivatives of                     
C        the energy with respect to the coordinates.                            
C        passes the control flags where                                         
C        NDER  = 0 => no derivatives are calculated                             
C        NDER  = 1 => calculate first derivatives of the energy for the         
C                     ground electronic state with respect to the coordinates   
C        NFLAG  - Control flags                                                 
C      NFLAG(18-20)                                                             
C        passes the FORTRAN unit number used for potential output               
C      /ASYCM/ EASYAB, EASYBC, EASYAC                                           
C        passes the energy in the three asymptotic valleys for an A+BC system.  
C        The energy in the AB valley, EASYAB, is equal to the energy            
C        of the C atom "infinitely" far from the AB diatomic and R(AB) set      
C        equal to Re(AB), the equilibrium bond length for the AB diatomic.      
C        In this potential the AB valley represents H infinitely far from       
C        the FH diatomic and R(FH) equal to Re(FH).                             
C        Similarly, the terms EASYBC and EASYAC represent the energies in the   
C        H2 and the other HF asymptotic valleys, respectively.                  
C                                                                               
C   Default Parameter Values:                                                   
C      Variable      Default value                                              
C      NDER             1                                                       
C      NFLAG(18)        6                                                       
C                                                                               
C*****                                                                          
C                                                                               
C   ENERGY  = E(EHF) + E(CORR) + De(H2)                                         
C   E(EHF)  = E(London) + E(3-body)                                             
C   E(CORR) = ECORR(2-body) + ECORR(3-body)                                     
C                                                                               
C   Note:  The zero of energy for this surface is F infinitely far              
C          from H2 at R(H2) = Re(H2).                                           
C          To get the zero of energy R1 must be at least 50 a.u.                
C                                                                               
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)                                       
C                                                                               
      CHARACTER*75 REF(5)                                                       
C                                                                               
      PARAMETER (N3ATOM = 75)                                                   
      PARAMETER (ISURF = 5)                                                     
      PARAMETER (JSURF = ISURF*(ISURF+1)/2)                             
      PARAMETER (PI = 3.141592653589793D0)                                      
      PARAMETER (NATOM = 25)                                                    
C                                                                               
      COMMON /PT3CM/ EZERO(ISURF+1)                                             
C                                                                               
      COMMON/INFOCM/ CARTNU(NATOM,3),INDEXES(NATOM),                            
     +               IRCTNT,NATOMS,ICARTR,MDER,MSURF,REF                        
C                                                                               
C                                                                               
      COMMON/USRICM/ CART(NATOM,3),ANUZERO,                                     
     +               NULBL(NATOM),NFLAG(20),                                    
     +               NASURF(ISURF+1,ISURF+1),NDER                               
C                                                                               
      COMMON /ASYCM/ EASYAB,EASYBC,EASYAC                                       
C                                                                               
      COMMON /DECM/  DISSE(3)                                                   
      COMMON /DIST/   RM(3),R0(3)                                               
      COMMON /REF/    RO(3)                                                     
      COMMON /TPAR/   XHH(3),XHF(3),P(4)                                        
      COMMON /ATAT/   CHH(10),CHF(10)                                           
      COMMON /TRIAL/  ETA1(10),ETA2(10),ETA3(10),                               
     +                ETAP1(10),ETAP2(10),ETAP3(10)                             
      COMMON /KKP/    CK1(10),CK2(10),CK3(10),CKP1(10),CKP2(10),CKP3(10)        
      COMMON /DIAT/   D(3),A1(3),A2(3),A3(3),GAMMA(3)                           
      COMMON /SWPAR/  DEC(3),RB(3),SW(3),DSW(3,3)                               
      COMMON /LOCAL/  C3C,ALF,ALFP,ALFT,P3C,Q3C,BETP                            
      COMMON /DISPC/  ALPH0,ALPH1,BET0,BET1                                     
C                                                                               
      COMMON /DAMPC/  AD1,AD2,AD3,BD1,BD2,BD3                                   
      COMMON /DPC/    DP1(3),DP2(3),DP3(3),DDP1(3),DDP2(3),DDP3(3)              
      COMMON /DEGSDRCM/ DCORR2(3),DCORR3(3),DLDR(3),DE3C(3)                     
      COMMON /ENGYCM/ ECOR2B, ECOR3B, ELOND, E3C                                
      COMMON /PAR/    BHH(5),BHF(5)                                             
      COMMON /VTANH/  RTANH(3,10),DRTANH(3,10)                                  
C                                                                               
C   Echo the potential name and parameters to the file linked to                
C   UNIT NFLAG(18)                                                              
C                                                                               
      IF(NATOMS.GT.25) THEN                                                     
         WRITE(NFLAG(18),1111)                                                  
 1111    FORMAT(2X,'STOP. NUMBER OF ATOMS EXCEEDS ARRAY DIMENSIONS')            
         STOP                                                                   
      END IF                                                                    
C                                                                               
      WRITE(NFLAG(18), 1000)                                                    
      WRITE(NFLAG(18), 1100) (XHH(I),I=1,3)                                     
      WRITE(NFLAG(18), 1200) (XHF(I),I=1,3)                                     
      WRITE(NFLAG(18), 1300) (P(I),I=1,4)                                       
      WRITE(NFLAG(18), 1400) C3C, P3C, ALF, ALFT, ALFP, BETP                    
C                                                                               
C     CONSTANTS NEEDED FOR THE DAMPING FUNCTION                                 
C     A=ALPH0/FLOAT(N)**ALPH1        N=6,8,10                                   
C     B=BET0*EXP(-BET1*FLOAT(N))     N=6,8,10                                   
C                                                                               
      AD1= ALPH0/6.0D0**ALPH1                                                   
      AD2= ALPH0/8.0D0**ALPH1                                                   
      AD3= ALPH0/10.0D0**ALPH1                                                  
      BD1= BET0*EXP(-BET1*6.0D0)                                                
      BD2= BET0*EXP(-BET1*8.0D0)                                                
      BD3= BET0*EXP(-BET1*10.0D0)                                               
C                                                                               
C    Initialize the energy in the three asymptotic valleys                      
C                                                                               
      EASYAB = DISSE(1)                                                         
      EASYBC = DISSE(2)                                                         
      EASYAC = DISSE(3)                                                         
C                                                                               
1000  FORMAT(/,1X,'*****','Potential Energy Surface',1X,'*****',                
     *      //,1X,T5,'FH2 5SEC-COG1 potential energy surface',                  
     *       /,1X,T20,'a = 0.07, b = 0.1, c = 4.0, d = 2.0')                    
1100  FORMAT(/,1X,T5,'Potential parameters',/,                                  
     1       /,1X,T5,'Parameters for the H2 diatomic:',                         
     2       /,1X,T8,'a4',T13,'=',T15,F10.6,T29,'a5',T33,'=',T35,F10.6,         
     3            T48,'a6',T52,'=',T54,F10.6)                                   
1200  FORMAT(/,1X,T5,'Parameters for the FH diatomic:',                         
     1       /,1X,T8,'Deff',T13,'=',T15,F10.6,T29,'a7',T33,'=',                 
     2            T35,F10.6,T48,'a8',T52,'=',T54,F10.6)                         
1300  FORMAT(1X,T8,'c11',T13,'=',T15,F10.6,T29,'c12',T33,'=',                   
     1            T35,F10.6,/,1X,T8,'c21',T13,'=',T15,F10.6,T29,                
     2            'c22',T33,'=',T35,F10.6)                                      
1400  FORMAT(/,1X,T5,'Parameters for the 3-body term:',                         
     1       /,1X,T8,'J',T13,'=',T15,F10.6,T29,'p',T33,'=',T35,F10.6,           
     2            T48,'c1',T52,'=',T54,F10.6,                                   
     3       /,1X,T8,'c2',T13,'=',T15,F10.6,T29,'c3',T33,'=',T35,F10.6,         
     4            T48,'c4',T52,'=',T54,F10.6,//,1X,'*****')                     
C                                                                               
C                                                                               
      EZERO(1)=DISSE(2)                                                         
C                                                                               
       DO I=1,5                                                                 
          REF(I) = ' '                                                          
       END DO                                                                   
C                                                                               
       REF(1)='S. L. Mielke, G. C. Lynch,'                                      
       REF(2)='D. G. Truhlar, D. W. Schwenke,'                                  
       REF(3)='Chem. Phys. Lett. 213, 10(1993)'                                 
C                                                                               
      INDEXES(1) = 9                                                            
      INDEXES(2) = 1                                                            
      INDEXES(3) = 1                                                            
C                                                                               
C                                                                               
C                                                                               
      IRCTNT=2                                                                  
C                                                                               
      CALL POTINFO                                                              
C                                                                               
      CALL ANCVRT                                                               
C                                                                               
      RETURN                                                                    
      END                                                                       
C                                                                               
C============================================================================== 
C   POT: driver for computing the energy and the derivatives.                   
C============================================================================== 
C                                                                               
      SUBROUTINE POT                                                            
C                                                                               
C   Surfaces:                                                                   
C      ground electronic state                                                  
C                                                                               
C   Zero of energy:                                                             
C      The classical potential energy is set equal to zero for the F            
C      infinitely far from the H2 diatomic and R(H2) set equal to the           
C      H2 equilibrium diatomic value.                                           
C                                                                               
C   Coordinates:                                                                
C      Internal, Definition: R(1) = R(F-H)                                      
C                            R(2) = R(H-H)                                      
C                            R(3) = R(H-F)                                      
C                                                                               
C        The energy in the AB valley, EASYAB, is equal to the energy            
C        of the C atom "infinitely" far from the AB diatomic and R(AB) set      
C        equal to Re(AB), the equilibrium bond length for the AB diatomic.      
C        In this potential the AB valley represents H infinitely far from       
C        the FH diatomic and R(FH) equal to Re(FH).                             
C        Similarly, the terms EASYBC and EASYAC represent the energies in the   
C        H2 and the other HF asymptotic valleys, respectively.                  
C                                                                               
C      ENTRY POT                                                                
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)                                       
C                                                                               
      CHARACTER*75 REF(5)                                                       
C                                                                               
      PARAMETER (N3ATOM = 75)                                                   
      PARAMETER (ISURF = 5)                                                     
      PARAMETER (JSURF = ISURF*(ISURF+1)/2)                             
      PARAMETER (PI = 3.141592653589793D0)                                      
      PARAMETER (NATOM = 25)                                                    
C                                                                               
      COMMON /PT1CM/ R(N3ATOM),ENGYGS,DEGSDR(N3ATOM)                            
      COMMON /PT3CM/ EZERO(ISURF+1)                                             
      COMMON /PT4CM/ ENGYES(ISURF),DEESDR(N3ATOM,ISURF)                         
      COMMON /PT5CM/ ENGYIJ(JSURF),DEIJDR(N3ATOM,JSURF)                         
C                                                                               
      COMMON/INFOCM/ CARTNU(NATOM,3),INDEXES(NATOM),                            
     +               IRCTNT,NATOMS,ICARTR,MDER,MSURF,REF                        
C                                                                               
      COMMON/USROCM/ PENGYGS,PENGYES(ISURF),                                    
     +               PENGYIJ(JSURF),                                            
     +               DGSCART(NATOM,3),DESCART(NATOM,3,ISURF),                   
     +               DIJCART(NATOM,3,JSURF)                                     
C                                                                               
      COMMON/USRICM/ CART(NATOM,3),ANUZERO,                                     
     +               NULBL(NATOM),NFLAG(20),                                    
     +               NASURF(ISURF+1,ISURF+1),NDER                               
C                                                                               
      COMMON /ASYCM/ EASYAB,EASYBC,EASYAC                                       
C                                                                               
      COMMON /DECM/  DISSE(3)                                                   
      COMMON /DIST/   RM(3),R0(3)                                               
      COMMON /REF/    RO(3)                                                     
      COMMON /TPAR/   XHH(3),XHF(3),P(4)                                        
      COMMON /ATAT/   CHH(10),CHF(10)                                           
      COMMON /TRIAL/  ETA1(10),ETA2(10),ETA3(10),                               
     +                ETAP1(10),ETAP2(10),ETAP3(10)                             
      COMMON /KKP/    CK1(10),CK2(10),CK3(10),CKP1(10),CKP2(10),CKP3(10)        
      COMMON /DIAT/   D(3),A1(3),A2(3),A3(3),GAMMA(3)                           
      COMMON /SWPAR/  DEC(3),RB(3),SW(3),DSW(3,3)                               
      COMMON /LOCAL/  C3C,ALF,ALFP,ALFT,P3C,Q3C,BETP                            
      COMMON /DISPC/  ALPH0,ALPH1,BET0,BET1                                     
C                                                                               
      COMMON /DAMPC/  AD1,AD2,AD3,BD1,BD2,BD3                                   
      COMMON /DPC/    DP1(3),DP2(3),DP3(3),DDP1(3),DDP2(3),DDP3(3)              
      COMMON /DEGSDRCM/ DCORR2(3),DCORR3(3),DLDR(3),DE3C(3)                     
      COMMON /ENGYCM/ ECOR2B, ECOR3B, ELOND, E3C                                
      COMMON /PAR/    BHH(5),BHF(5)                                             
      COMMON /VTANH/  RTANH(3,10),DRTANH(3,10)                                  
C                                                                               
      CALL CARTOU                                                               
      CALL CARTTOR                                                              
C                                                                               
C   Check the value of NDER                                                     
C                                                                               
         IF (NDER .GT. 1) THEN                                                  
             WRITE (NFLAG(18), 900) NDER                                        
             STOP 'POT 1'                                                       
         ENDIF                                                                  
C                                                                               
C   I: Compute the damping function for the N th. dispersion coefficient        
C      and, if NDER = 1, compute the derivative of the damping function         
C      w.r.t. R(i)                                                              
C                                                                               
      CALL DAMP(R,RM)                                                           
C                                                                               
C   II: Compute the two-body dynamical correlation term and, if NDER = 1,       
C       compute the derivative of the two-body dynamical correlation term       
C       w.r.t. R(i)                                                             
C                                                                               
      CALL CORR2                                                                
C                                                                               
C   III: Compute the auxiliary function, hn(R), and, if NDER = 1,               
C            compute the derivative of hn(R) w.r.t. R                           
C                                                                               
      CALL XTANH(1,ETA1)                                                        
      CALL XTANH(2,ETA2)                                                        
      CALL XTANH(3,ETA3)                                                        
C                                                                               
C   IV: Compute the three-body dynamical correlation term and, if NDER = 1,     
C       compute the derivative of the three-body dynamical correlation term     
C       w.r.t. R(i)                                                             
C                                                                               
      CALL CORR3                                                                
C                                                                               
C   V: Compute the switching function, S(R), which is used in the computation   
C      of the H2 triplet state curves.  If NDER = 1, compute the derivatives    
C      of S w.r.t. R                                                            
C                                                                               
      CALL SWITCH                                                               
C                                                                               
C   VI: Compute the lower eigenvalue of the London eq. and, if NDER = 1,        
C       compute the derivatives of the London energy w.r.t. R.                  
C                                                                               
      CALL VLOND                                                                
C                                                                               
C   VII: Compute the three-body term and, if NDER = 1, compute the              
C        the derivatives of the three-body energy w.r.t. R.                     
C                                                                               
      CALL THCENT                                                               
C                                                                               
C   IX: Compute the total energy which is a sum of the extended-Hartree-Fock    
C       and the dynamical correlation terms.                                    
C                                                                               
       ENGYGS = ECOR2B + ECOR3B + ELOND + E3C + EZERO(1) - ANUZERO              
C                                                                               
C   Compute the derivatives of the energy with respect to the coordinates.      
C                                                                               
      IF (NDER .EQ. 1) THEN                                                     
          DO 10 I = 1, 3                                                        
                DEGSDR(I) = DCORR2(I) + DCORR3(I) + DLDR(I) + DE3C(I)           
10        CONTINUE                                                              
      ENDIF                                                                     
C                                                                               
900   FORMAT(/,1X,T5, 'Error: POT has been called with NDER = ',I5,             
     *       /,1X,T12,'only the first derivatives, NDER = 1, are ',             
     *                'coded in this potential')                                
C                                                                               
      CALL EUNITZERO                                                            
      IF(NDER.NE.0) THEN                                                        
         CALL RTOCART                                                           
         CALL DEDCOU                                                            
      ENDIF                                                                     
C                                                                               
      RETURN                                                                    
      END                                                                       
C                                                                               
C*****                                                                          
C                                                                               
      SUBROUTINE CORR2                                                          
C============================================================================== 
C   Compute the two-body dynamical energies and derivatives.                    
C============================================================================== 
C                                                                               
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)                                       
C                                                                               
      CHARACTER*75 REF(5)                                                       
C                                                                               
      PARAMETER (N3ATOM = 75)                                                   
      PARAMETER (ISURF = 5)                                                     
      PARAMETER (JSURF = ISURF*(ISURF+1)/2)                             
      PARAMETER (PI = 3.141592653589793D0)                                      
      PARAMETER (NATOM = 25)                                                    
C                                                                               
      COMMON /PT1CM/ R(N3ATOM),ENGYGS,DEGSDR(N3ATOM)                            
      COMMON /PT3CM/ EZERO(ISURF+1)                                             
      COMMON /PT4CM/ ENGYES(ISURF),DEESDR(N3ATOM,ISURF)                         
      COMMON /PT5CM/ ENGYIJ(JSURF),DEIJDR(N3ATOM,JSURF)                         
C                                                                               
      COMMON/INFOCM/ CARTNU(NATOM,3),INDEXES(NATOM),                            
     +               IRCTNT,NATOMS,ICARTR,MDER,MSURF,REF                        
C                                                                               
      COMMON/USROCM/ PENGYGS,PENGYES(ISURF),                                    
     +               PENGYIJ(JSURF),                                            
     +               DGSCART(NATOM,3),DESCART(NATOM,3,ISURF),                   
     +               DIJCART(NATOM,3,JSURF)                                     
C                                                                               
      COMMON/USRICM/ CART(NATOM,3),ANUZERO,                                     
     +               NULBL(NATOM),NFLAG(20),                                    
     +               NASURF(ISURF+1,ISURF+1),NDER                               
C                                                                               
      COMMON /ASYCM/ EASYAB,EASYBC,EASYAC                                       
C                                                                               
      COMMON /ATAT/CHH(10),CHF(10)                                              
      COMMON /DEGSDRCM/DCORR2(3),DCORR3(3),DLDR(3),DE3C(3)                      
      COMMON /DPC/DP1(3),DP2(3),DP3(3),DDP1(3),DDP2(3),DDP3(3)                  
      COMMON /ENGYCM/ECOR2B, ECOR3B, ELOND, E3C                                 
C                                                                               
      R1P6  = R(1)**6                                                           
      R1P8  = R(1)**8                                                           
      R1P10 = R(1)**10                                                          
      R2P6  = R(2)**6                                                           
      R2P8  = R(2)**8                                                           
      R2P10 = R(2)**10                                                          
      R3P6  = R(3)**6                                                           
      R3P8  = R(3)**8                                                           
      R3P10 = R(3)**10                                                          
C                                                                               
      COR2R1 = -DP1(1)*CHF(6)/R1P6                                              
     1         -DP1(2)*CHF(8)/R1P8                                              
     2         -DP1(3)*CHF(10)/R1P10                                            
C                                                                               
      COR2R2 = -DP2(1)*CHH(6)/R2P6                                              
     1         -DP2(2)*CHH(8)/R2P8                                              
     2         -DP2(3)*CHH(10)/R2P10                                            
C                                                                               
      COR2R3 = -DP3(1)*CHF(6)/R3P6                                              
     1         -DP3(2)*CHF(8)/R3P8                                              
     2         -DP3(3)*CHF(10)/R3P10                                            
C                                                                               
      ECOR2B = COR2R1 + COR2R2 + COR2R3                                         
C                                                                               
C   Compute the derivatives w.r.t. R(i) if NDER = 1                             
C                                                                               
      IF (NDER .NE. 1) GO TO 100                                                
C                                                                               
      DCORR2(1) = -CHF(6)*(DDP1(1)-6.0D0*DP1(1)/R(1))/R1P6                      
     1            -CHF(8)*(DDP1(2)-8.0D0*DP1(2)/R(1))/R1P8                      
     2            -CHF(10)*(DDP1(3)-10.0D0*DP1(3)/R(1))/R1P10                   
C                                                                               
      DCORR2(2) = -CHH(6)*(DDP2(1)-6.0D0*DP2(1)/R(2))/R2P6                      
     1            -CHH(8)*(DDP2(2)-8.0D0*DP2(2)/R(2))/R2P8                      
     2            -CHH(10)*(DDP2(3)-10.0D0*DP2(3)/R(2))/R2P10                   
C                                                                               
      DCORR2(3) = -CHF(6)*(DDP3(1)-6.0D0*DP3(1)/R(3))/R3P6                      
     1            -CHF(8)*(DDP3(2)-8.0D0*DP3(2)/R(3))/R3P8                      
     2            -CHF(10)*(DDP3(3)-10.0D0*DP3(3)/R(3))/R3P10                   
C                                                                               
100   CONTINUE                                                                  
C                                                                               
      RETURN                                                                    
      END                                                                       
C                                                                               
C****                                                                           
C                                                                               
      SUBROUTINE DAMP(RT1,RT2)                                                  
C============================================================================== 
C   Compute the damping function for the Nth. dispersion coefficient and the    
C   derivative w.r.t. R(i)                                                      
C============================================================================== 
C                                                                               
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)                                       
C                                                                               
      CHARACTER*75 REF(5)                                                       
C                                                                               
      PARAMETER (N3ATOM = 75)                                                   
      PARAMETER (ISURF = 5)                                                     
      PARAMETER (JSURF = ISURF*(ISURF+1)/2)                             
      PARAMETER (PI = 3.141592653589793D0)                                      
      PARAMETER (NATOM = 25)                                                    
C                                                                               
      COMMON /PT1CM/ R(N3ATOM),ENGYGS,DEGSDR(N3ATOM)                            
      COMMON /PT3CM/ EZERO(ISURF+1)                                             
      COMMON /PT4CM/ ENGYES(ISURF),DEESDR(N3ATOM,ISURF)                         
      COMMON /PT5CM/ ENGYIJ(JSURF),DEIJDR(N3ATOM,JSURF)                         
C                                                                               
      COMMON/INFOCM/ CARTNU(NATOM,3),INDEXES(NATOM),                            
     +               IRCTNT,NATOMS,ICARTR,MDER,MSURF,REF                        
C                                                                               
      COMMON/USROCM/ PENGYGS,PENGYES(ISURF),                                    
     +               PENGYIJ(JSURF),                                            
     +               DGSCART(NATOM,3),DESCART(NATOM,3,ISURF),                   
     +               DIJCART(NATOM,3,JSURF)                                     
C                                                                               
      COMMON/USRICM/ CART(NATOM,3),ANUZERO,                                     
     +               NULBL(NATOM),NFLAG(20),                                    
     +               NASURF(ISURF+1,ISURF+1),NDER                               
C                                                                               
      COMMON /ASYCM/ EASYAB,EASYBC,EASYAC                                       
C                                                                               
      COMMON /DAMPC/ AD1,AD2,AD3,BD1,BD2,BD3                                    
      COMMON /DPC/ DP1(3),DP2(3),DP3(3),DDP1(3),DDP2(3),DDP3(3)                 
      COMMON /DIST/RM(3),R0(3)                                                  
      DIMENSION RT1(3),RT2(3),X(3),DX(3),POL1(3),POL2(3),POL3(3)                
      DIMENSION DPOL1(3),DPOL2(3),DPOL3(3)                                      
C                                                                               
            X(1) = 2.0D0*RT1(1)/(RT2(1)+2.5D0*R0(1))                            
            X(2) = 2.0D0*RT1(2)/(RT2(2)+2.5D0*R0(2))                            
            X(3) = 2.0D0*RT1(3)/(RT2(3)+2.5D0*R0(3))                            
C                                                                               
            POL1(1) = AD1*X(1)+BD1*X(1)**2                                      
            POL2(1) = AD2*X(1)+BD2*X(1)**2                                      
            POL3(1) = AD3*X(1)+BD3*X(1)**2                                      
C                                                                               
            POL1(2) = AD1*X(2)+BD1*X(2)**2                                      
            POL2(2) = AD2*X(2)+BD2*X(2)**2                                      
            POL3(2) = AD3*X(2)+BD3*X(2)**2                                      
C                                                                               
            POL1(3) = AD1*X(3)+BD1*X(3)**2                                      
            POL2(3) = AD2*X(3)+BD2*X(3)**2                                      
            POL3(3) = AD3*X(3)+BD3*X(3)**2                                      
C                                                                               
            DP1(1) = (1.0D0-EXP(-POL1(1)))**6                                   
            DP1(2) = (1.0D0-EXP(-POL2(1)))**8                                   
            DP1(3) = (1.0D0-EXP(-POL3(1)))**10                                  
C                                                                               
            DP2(1) = (1.0D0-EXP(-POL1(2)))**6                                   
            DP2(2) = (1.0D0-EXP(-POL2(2)))**8                                   
            DP2(3) = (1.0D0-EXP(-POL3(2)))**10                                  
C                                                                               
            DP3(1) = (1.0D0-EXP(-POL1(3)))**6                                   
            DP3(2) = (1.0D0-EXP(-POL2(3)))**8                                   
            DP3(3) = (1.0D0-EXP(-POL3(3)))**10                                  
C                                                                               
      IF (NDER .EQ. 1) THEN                                                     
          DX(1) = 2.0D0/(RT2(1)+2.5D0*R0(1))                                    
          DX(2) = 2.0D0/(RT2(2)+2.5D0*R0(2))                                    
          DX(3) = 2.0D0/(RT2(3)+2.5D0*R0(3))                                    
C                                                                               
          DPOL1(1) = AD1+2.0D0*BD1*X(1)                                         
          DPOL2(1) = AD2+2.0D0*BD2*X(1)                                         
          DPOL3(1) = AD3+2.0D0*BD3*X(1)                                         
C                                                                               
          DPOL1(2) = AD1+2.0D0*BD1*X(2)                                         
          DPOL2(2) = AD2+2.0D0*BD2*X(2)                                         
          DPOL3(2) = AD3+2.0D0*BD3*X(2)                                         
C                                                                               
          DPOL1(3) = AD1+2.0D0*BD1*X(3)                                         
          DPOL2(3) = AD2+2.0D0*BD2*X(3)                                         
          DPOL3(3) = AD3+2.0D0*BD3*X(3)                                         
C                                                                               
          DDP1(1) = 6.0D0*DP1(1)*EXP(-POL1(1))*DPOL1(1)*DX(1)/                  
     1              (1.0D0-EXP(-POL1(1)))                                       
          DDP1(2) = 8.0D0*DP1(2)*EXP(-POL2(1))*DPOL2(1)*DX(1)/                  
     1              (1.0D0-EXP(-POL2(1)))                                       
          DDP1(3) = 10.0D0*DP1(3)*EXP(-POL3(1))*DPOL3(1)*DX(1)/                 
     1              (1.0D0-EXP(-POL3(1)))                                       
C                                                                               
          DDP2(1) = 6.0D0*DP2(1)*EXP(-POL1(2))*DPOL1(2)*DX(2)/                  
     1              (1.0D0-EXP(-POL1(2)))                                       
          DDP2(2) = 8.0D0*DP2(2)*EXP(-POL2(2))*DPOL2(2)*DX(2)/                  
     1              (1.0D0-EXP(-POL2(2)))                                       
          DDP2(3) = 10.0D0*DP2(3)*EXP(-POL3(2))*DPOL3(2)*DX(2)/                 
     1              (1.0D0-EXP(-POL3(2)))                                       
C                                                                               
          DDP3(1) = 6.0D0*DP3(1)*EXP(-POL1(3))*DPOL1(3)*DX(3)/                  
     1              (1.0D0-EXP(-POL1(3)))                                       
          DDP3(2) = 8.0D0*DP3(2)*EXP(-POL2(3))*DPOL2(3)*DX(3)/                  
     1              (1.0D0-EXP(-POL2(3)))                                       
          DDP3(3) = 10.0D0*DP3(3)*EXP(-POL3(3))*DPOL3(3)*DX(3)/                 
     1              (1.0D0-EXP(-POL3(3)))                                       
      ENDIF                                                                     
C                                                                               
      RETURN                                                                    
      END                                                                       
C                                                                               
C*****                                                                          
C                                                                               
      SUBROUTINE CORR3                                                          
C============================================================================== 
C   Compute the three-body dynamical energies and derivatives.                  
C============================================================================== 
C                                                                               
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)                                       
C                                                                               
      CHARACTER*75 REF(5)                                                       
C                                                                               
      PARAMETER (N3ATOM = 75)                                                   
      PARAMETER (ISURF = 5)                                                     
      PARAMETER (JSURF = ISURF*(ISURF+1)/2)                             
      PARAMETER (PI = 3.141592653589793D0)                                      
      PARAMETER (NATOM = 25)                                                    
C                                                                               
      COMMON /PT1CM/ R(N3ATOM),ENGYGS,DEGSDR(N3ATOM)                            
      COMMON /PT3CM/ EZERO(ISURF+1)                                             
      COMMON /PT4CM/ ENGYES(ISURF),DEESDR(N3ATOM,ISURF)                         
      COMMON /PT5CM/ ENGYIJ(JSURF),DEIJDR(N3ATOM,JSURF)                         
C                                                                               
      COMMON/INFOCM/ CARTNU(NATOM,3),INDEXES(NATOM),                            
     +               IRCTNT,NATOMS,ICARTR,MDER,MSURF,REF                        
C                                                                               
      COMMON/USROCM/ PENGYGS,PENGYES(ISURF),                                    
     +               PENGYIJ(JSURF),                                            
     +               DGSCART(NATOM,3),DESCART(NATOM,3,ISURF),                   
     +               DIJCART(NATOM,3,JSURF)                                     
C                                                                               
      COMMON/USRICM/ CART(NATOM,3),ANUZERO,                                     
     +               NULBL(NATOM),NFLAG(20),                                    
     +               NASURF(ISURF+1,ISURF+1),NDER                               
C                                                                               
      COMMON /ASYCM/ EASYAB,EASYBC,EASYAC                                       
C                                                                               
      COMMON /ATAT/CHH(10),CHF(10)                                              
      COMMON /DEGSDRCM/DCORR2(3),DCORR3(3),DLDR(3),DE3C(3)                      
      COMMON /ENGYCM/ECOR2B, ECOR3B, ELOND, E3C                                 
      COMMON /DPC/DP1(3),DP2(3),DP3(3),DDP1(3),DDP2(3),DDP3(3)                  
      COMMON /KKP/CK1(10),CK2(10),CK3(10),CKP1(10),CKP2(10),CKP3(10)            
      COMMON /REF/RO(3)                                                         
      COMMON /TRIAL/ETA1(10),ETA2(10),ETA3(10),                                 
     1              ETAP1(10),ETAP2(10),ETAP3(10)                               
      COMMON /VTANH/ RTANH(3,10),DRTANH(3,10)                                   
      DIMENSION CO3(3),DC3DR1(3),DC3DR2(3),DC3DR3(3)                            
C                                                                               
      JJ=0                                                                      
C                                                                               
      DO 10 I=6,10,2                                                            
            JJ = JJ+1                                                           
            FI = DBLE(I)                                                        
            R1PI = R(1)**I                                                      
            R2PI = R(2)**I                                                      
            R3PI = R(3)**I                                                      
C                                                                               
C   Compute the auxiliary function gn(R)                                        
C                                                                               
            G1 = 1.0D0+CK1(I)*EXP(-CKP1(I)*(R(1)-RO(1)))                        
            G2 = 1.0D0+CK2(I)*EXP(-CKP2(I)*(R(2)-RO(2)))                        
            G3 = 1.0D0+CK3(I)*EXP(-CKP3(I)*(R(3)-RO(3)))                        
C                                                                               
C   Compute the auxiliary function hn(R)                                        
C                                                                               
            H1 = RTANH(1,I)**ETAP1(I)                                           
            H2 = RTANH(2,I)**ETAP2(I)                                           
            H3 = RTANH(3,I)**ETAP3(I)                                           
C                                                                               
            T1 = CHF(I)*(1.0D0-0.5D0*(G2*H3+G3*H2))                             
     1           *DP1(JJ)/R1PI                                                  
            T2 = CHH(I)*(1.0D0-0.5D0*(G3*H1+G1*H3))                             
     1           *DP2(JJ)/R2PI                                                  
            T3 = CHF(I)*(1.0D0-0.5D0*(G1*H2+G2*H1))                             
     1           *DP3(JJ)/R3PI                                                  
C                                                                               
            CO3(JJ) = T1+T2+T3                                                  
C                                                                               
            IF (NDER .EQ. 1) THEN                                               
C                                                                               
C   Compute the partial derivatives w.r.t. R(i)                                 
C                                                                               
                DG1 = -CKP1(I)*(G1-1.0D0)                                       
                DG2 = -CKP2(I)*(G2-1.0D0)                                       
                DG3 = -CKP3(I)*(G3-1.0D0)                                       
C                                                                               
                DH1 = ETAP1(I)*(RTANH(1,I)**(ETAP1(I)-1))*DRTANH(1,I)           
                DH2 = ETAP2(I)*(RTANH(2,I)**(ETAP2(I)-1))*DRTANH(2,I)           
                DH3 = ETAP3(I)*(RTANH(3,I)**(ETAP3(I)-1))*DRTANH(3,I)           
C                                                                               
                DT1DR1 = T1*(DDP1(JJ)/DP1(JJ)-FI/R(1))                          
                DT1DR2 = -0.5D0*CHF(I)*DP1(JJ)*(DG2*H3+G3*DH2)/R1PI             
                DT1DR3 = -0.5D0*CHF(I)*DP1(JJ)*(G2*DH3+DG3*H2)/R1PI             
C                                                                               
                DT2DR1 = -0.5D0*CHH(I)*DP2(JJ)*(G3*DH1+DG1*H3)/R2PI             
                DT2DR2 = T2*DDP2(JJ)/DP2(JJ)-T2*FI/R(2)                         
                DT2DR3 = -0.5D0*CHH(I)*DP2(JJ)*(DG3*H1+G1*DH3)/R2PI             
C                                                                               
                DT3DR1 = -0.5D0*CHF(I)*DP3(JJ)*(DG1*H2+G2*DH1)/R3PI             
                DT3DR2 = -0.5D0*CHF(I)*DP3(JJ)*(G1*DH2+DG2*H1)/R3PI             
                DT3DR3 = T3*(DDP3(JJ)/DP3(JJ)-FI/R(3))                          
C                                                                               
                DC3DR1(JJ) = DT1DR1+DT2DR1+DT3DR1                               
                DC3DR2(JJ) = DT1DR2+DT2DR2+DT3DR2                               
                DC3DR3(JJ) = DT1DR3+DT2DR3+DT3DR3                               
            ENDIF                                                               
10    CONTINUE                                                                  
C                                                                               
C   Compute the three-body dynamical correlation term by summing over all       
C   C6, C8, and C10 terms.                                                      
C                                                                               
       ECOR3B = CO3(1)+CO3(2)+CO3(3)                                            
C                                                                               
      IF (NDER .EQ. 1) THEN                                                     
C                                                                               
C   Sum all the partial derivatives.                                            
C                                                                               
          DCORR3(1) = DC3DR1(1)+DC3DR1(2)+DC3DR1(3)                             
          DCORR3(2) = DC3DR2(1)+DC3DR2(2)+DC3DR2(3)                             
          DCORR3(3) = DC3DR3(1)+DC3DR3(2)+DC3DR3(3)                             
      ENDIF                                                                     
C                                                                               
      RETURN                                                                    
      END                                                                       
C                                                                               
C*****                                                                          
C                                                                               
      SUBROUTINE VLOND                                                          
C============================================================================== 
C   Compute the energy expressed by the lower eignenvalue of the London eq.     
C============================================================================== 
C                                                                               
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)                                       
C                                                                               
      CHARACTER*75 REF(5)                                                       
C                                                                               
      PARAMETER (N3ATOM = 75)                                                   
      PARAMETER (ISURF = 5)                                                     
      PARAMETER (JSURF = ISURF*(ISURF+1)/2)                             
      PARAMETER (PI = 3.141592653589793D0)                                      
      PARAMETER (NATOM = 25)                                                    
C                                                                               
      COMMON /PT1CM/ R(N3ATOM),ENGYGS,DEGSDR(N3ATOM)                            
      COMMON /PT3CM/ EZERO(ISURF+1)                                             
      COMMON /PT4CM/ ENGYES(ISURF),DEESDR(N3ATOM,ISURF)                         
      COMMON /PT5CM/ ENGYIJ(JSURF),DEIJDR(N3ATOM,JSURF)                         
C                                                                               
      COMMON/INFOCM/ CARTNU(NATOM,3),INDEXES(NATOM),                            
     +               IRCTNT,NATOMS,ICARTR,MDER,MSURF,REF                        
C                                                                               
      COMMON/USROCM/ PENGYGS,PENGYES(ISURF),                                    
     +               PENGYIJ(JSURF),                                            
     +               DGSCART(NATOM,3),DESCART(NATOM,3,ISURF),                   
     +               DIJCART(NATOM,3,JSURF)                                     
C                                                                               
      COMMON/USRICM/ CART(NATOM,3),ANUZERO,                                     
     +               NULBL(NATOM),NFLAG(20),                                    
     +               NASURF(ISURF+1,ISURF+1),NDER                               
C                                                                               
      COMMON /ASYCM/ EASYAB,EASYBC,EASYAC                                       
C                                                                               
      COMMON /DEGSDRCM/DCORR2(3),DCORR3(3),DLDR(3),DE3C(3)                      
      COMMON /DIAT/D,A1,A2,A3,GAMMA                                             
      COMMON /DIST/RM,R0                                                        
      COMMON /ENGYCM/ECOR2B, ECOR3B, ELOND, E3C                                 
      COMMON /PAR/BHH(5),BHF(5)                                                 
      COMMON /SWPAR/ DEC(3),RB(3),SW(3),DSW(3,3)                                
      COMMON /TPAR/XHH(3),XHF(3),P(4)                                           
C                                                                               
      DIMENSION RM(3),R0(3)                                                     
      DIMENSION D(3),A1(3),A2(3),A3(3),GAMMA(3)                                 
      DIMENSION DCSI(3),DFCSI1(3),DFCSI2(3),EHF(3),DEHF(3)                      
      DIMENSION EHFT(3),DEHFT(3),DSUMQ(3),TI(3),DTI(3,3)                        
      DIMENSION ETRIP(3),DETRIP(3,3),DX(3),DRI(3),X(3)                          
      DIMENSION Q(3),DQ(3,3),EX(3),DEX(3,3)                                     
      DIMENSION TSCALE(3), DTSCLE(3,3)                                          
C                                                                               
C   Initialize the arrays that will be used to store the partial                
C   derivatives w.r.t. R(i)                                                     
C                                                                               
      DO 11 I = 1, 3                                                            
      DO 12 J = 1, 3                                                            
            DETRIP(I,J) = 0.0D0                                                 
            DTSCLE(I,J) = 0.0D0                                                 
12    CONTINUE                                                                  
11    CONTINUE                                                                  
C                                                                               
C   Compute the pseudo-angular coordinate                                       
C                                                                               
      CSI = (R(1)-R(3))/R(2)                                                    
      CSIP2 = CSI**2                                                            
      CSIP3 = CSI**3                                                            
      CSIP4 = CSI**4                                                            
C                                                                               
C    Compute the F1 and F2 terms                                                
C                                                                               
      FCSI1T = 1.0D0+P(1)*(1.0D0-CSIP2)+P(2)*(1.0D0-CSIP4)                      
      FCSI2T = 1.0D0+P(3)*(1.0D0-CSIP2)+P(4)*(1.0D0-CSIP4)                      
C                                                                               
      FCSI1 = FCSI1T**2                                                         
      FCSI2 = FCSI2T**2                                                         
C                                                                               
      IF (NDER .EQ. 1) THEN                                                     
C                                                                               
C   Compute the derivatives w.r.t. R of the terms computed to this point.       
C                                                                               
          DCSI(1) = 1.0D0/R(2)                                                  
          DCSI(2) = -CSI/R(2)                                                   
          DCSI(3) = -1.0D0/R(2)                                                 
C                                                                               
          TMP1 = 2.0D0*FCSI1T*(-2.0D0*P(1)*CSI-4.0D0*P(2)*CSIP3)                
          TMP2 = 2.0D0*FCSI2T*(-2.0D0*P(3)*CSI-4.0D0*P(4)*CSIP3)                
C                                                                               
          DO 10 I=1,3                                                           
                DFCSI1(I) = TMP1*DCSI(I)                                        
                DFCSI2(I) = TMP2*DCSI(I)                                        
10        CONTINUE                                                              
      ENDIF                                                                     
C                                                                               
      R2P2 = R(2)**2                                                            
      R2P3 = R(2)**3                                                            
      R2P4 = R(2)**4                                                            
C                                                                               
C   Compute the extended-Hartree-Fock curves and the derivatives w.r.t. R(i)    
C   for the singlet state of H2 and HF.                                         
C   Ref: A. J. C. Varandas and J. D. Silva, J. Chem. Soc. Faraday Trans. II,    
C        82, 593 (1986).                                                        
C                                                                               
      DO 20 I=1,3                                                               
            DR = R(I)-RM(I)                                                     
            DRP2 = DR**2                                                        
            EHF(I) = -D(I)*(1.0D0+A1(I)*DR+A2(I)*DRP2+A3(I)*DRP2*DR)            
     1               *EXP(-GAMMA(I)*DR)                                         
            IF (NDER .EQ. 1)                                                    
     1          DEHF(I) = -D(I)*(A1(I) + 2.0D0*A2(I)*DR +                       
     2                    3.0D0*A3(I)*DRP2)*EXP(-GAMMA(I)*DR) -                 
     3                    GAMMA(I)*EHF(I)                                       
20    CONTINUE                                                                  
C                                                                               
C   Compute the triplet state curve and the derivative of the triplet state     
C   curve w.r.t. R(i) for the H2 diatomic                                       
C   Ref.: A. J. C. Varandas and J. Brando                                       
C         Mol. Phys. 45, 857 (1982)                                             
C                                                                               
      SCALE = 1.0D0+XHH(1)*R(2)+XHH(2)*R2P2+XHH(3)*R2P3                         
C                                                                               
      ARG = BHH(2)*R(2)+BHH(3)*R2P2+BHH(4)*R2P3+BHH(5)*R2P4                     
C                                                                               
      EHFT(2) = BHH(1)*EXP(-ARG)/R(2)                                           
C                                                                               
      ETRIP(2) = SCALE*EHFT(2)                                                  
C                                                                               
      IF (NDER .EQ. 1) THEN                                                     
C                                                                               
C   Compute the derivatives of the H2 triplet curve w.r.t. R(i)                 
C                                                                               
          DSCALE = XHH(1)+2.0D0*XHH(2)*R(2)+3.0D0*XHH(3)*R2P2                   
          DARG = BHH(2)+2.0D0*BHH(3)*R(2)+3.0D0*BHH(4)*R2P2+                    
     1           4.0D0*BHH(5)*R2P3                                              
          DEHFT(2) = EHFT(2)*(-DARG-1.0D0/R(2))                                 
C                                                                               
          DETRIP(2,2) = DSCALE*EHFT(2)+SCALE*DEHFT(2)                           
          DETRIP(2,1) = 0.0D0                                                   
          DETRIP(2,3) = 0.0D0                                                   
      ENDIF                                                                     
C                                                                               
C   Compute the triplet state curve and the derivatives of the triplet          
C   state curve w.r.t. R(i) for the HF diatomic.                                
C                                                                               
      DO 30 I=1, 3, 2                                                           
            ARG      = BHF(2)*R(I)+BHF(3)*R(I)**2                               
            EHFT(I)  = BHF(1)*EXP(-ARG)/R(I)                                    
            X(I)     = EXP(-XHF(2)*R(I))                                        
            ETRIP(I) = XHF(1)*(FCSI1*X(I)*X(I)+FCSI2*XHF(3)*X(I))/R(I)          
30    CONTINUE                                                                  
C                                                                               
      IF (NDER .EQ. 1) THEN                                                     
C                                                                               
C   Compute the derivatives of the HF triplet state curve w.r.t. R(i)           
C                                                                               
          DO 50 I = 1, 3, 2                                                     
                DARG     = BHF(2)+2.0D0*BHF(3)*R(I)                             
                DEHFT(I) = EHFT(I)*(-1.0D0/R(I)-DARG)                           
                DX(I)    = -XHF(2)*X(I)                                         
                DRI(I)   = 1.0D0                                                
                DO 40 J = 1, 3                                                  
                      IF (J .NE. I) THEN                                        
                          DX(J) = 0.0D0                                         
                          DRI(J) = 0.0D0                                        
                      ENDIF                                                     
                      DETRIP(I,J) = XHF(1) * (DFCSI1(J)*X(I)*X(I) +             
     1                                        2.0D0*FCSI1*X(I)*DX(J) +          
     2                                        DFCSI2(J)*XHF(3)*X(I) +           
     3                                        FCSI2*XHF(3)*DX(J))/R(I) -        
     4                              ETRIP(I)*DRI(J)/R(I)                        
40              CONTINUE                                                        
50    CONTINUE                                                                  
      ENDIF                                                                     
C                                                                               
C   Compute the scaling factor for the triplet state curves                     
C                                                                               
      DO 51 I = 1, 3                                                            
            TSCALE(I) = 1.0D0                                                   
51    CONTINUE                                                                  
      ASC1   = 0.07D0                                                           
      ASC2   = 0.1D0                                                            
      RSC    = (4.0D0 - R(2)) / 2.0D0                                           
      DSC    = 1.0D0 - RSC*RSC                                                  
      IF (R(2) .GT. 2.0D0 .AND. R(2) .LT. 6.0D0) THEN                           
          TSCALE(2) = 1.0D0+ASC1*EXP(-ASC2/DSC)                                 
          IF (NDER .EQ. 1)                                                      
     1        DTSCLE(2,2) = ASC1*EXP(-ASC2/DSC)*                                
     2                      (ASC2*RSC/(DSC*DSC))                                
      ENDIF                                                                     
C                                                                               
C   Compute the triplet state curves and combine the triplet and the            
C   singlet state curves to determine the eigenvalue of the                     
C   London equation.                                                            
C                                                                               
      DO 60 I = 1, 3                                                            
C                                                                               
C   Compute the triplet state curves                                            
C                                                                               
            TI(I) = (1.0D0-SW(I))*ETRIP(I)+SW(I)*EHFT(I)                        
C                                                                               
C   Scale the triplet state curves                                              
C                                                                               
            TI(I) = TI(I)*TSCALE(I)                                             
C                                                                               
C   Compute the coulomb integrals                                               
C                                                                               
            Q(I) = 0.5D0*(EHF(I)+TI(I))                                         
C                                                                               
C   Compute the exchange integrals                                              
C                                                                               
            EX(I) = 0.5D0*(EHF(I)-TI(I))                                        
60    CONTINUE                                                                  
C                                                                               
      FF1 = (EX(1) - EX(2)) ** 2                                                
      FF2 = (EX(2) - EX(3)) ** 2                                                
      FF3 = (EX(3) - EX(1)) ** 2                                                
C                                                                               
      EXCH = SQRT(0.5D0*(FF1+FF2+FF3))                                          
C                                                                               
      ELOND = Q(1) + Q(2) + Q(3) - EXCH                                         
C                                                                               
      IF (NDER .EQ. 1) THEN                                                     
C                                                                               
C   Compute the derivatives of the lowest eignenvalue of the London equation    
C   w.r.t. R(i)                                                                 
C                                                                               
          DO 70 I = 1, 3                                                        
          DO 71 J = 1, 3                                                        
                DTI(I,J) = DSW(I,J)*(EHFT(I)-ETRIP(I)) +                        
     1                     DETRIP(I,J)*(1.0D0 - SW(I))                          
                IF (J .EQ. I) DTI(I,J) = DTI(I,J) + SW(I)*DEHFT(I)              
                DTI(I,J) = DTI(I,J)*TSCALE(I) +                                 
     1                     TI(I)*DTSCLE(I,J)/TSCALE(I)                          
71        CONTINUE                                                              
70        CONTINUE                                                              
C                                                                               
          DO 80 I = 1, 3                                                        
          DO 81 J = 1, 3                                                        
                IF(J .EQ. I)THEN                                                
                   DQ(I,J) = 0.5D0*(DEHF(J)+DTI(I,J))                           
                   DEX(I,J) = 0.5D0*(DEHF(J)-DTI(I,J))                          
                ELSE                                                            
                   DQ(I,J) = 0.5D0*DTI(I,J)                                     
                   DEX(I,J) = -DQ(I,J)                                          
                ENDIF                                                           
81        CONTINUE                                                              
80        CONTINUE                                                              
C                                                                               
          DSUMQ(1) = DQ(1,1)+DQ(2,1)+DQ(3,1)                                    
          DSUMQ(2) = DQ(1,2)+DQ(2,2)+DQ(3,2)                                    
          DSUMQ(3) = DQ(1,3)+DQ(2,3)+DQ(3,3)                                    
C                                                                               
          XTERM1 = 2.0D0*EX(1)-EX(2)-EX(3)                                      
          XTERM2 = 2.0D0*EX(2)-EX(1)-EX(3)                                      
          XTERM3 = 2.0D0*EX(3)-EX(1)-EX(2)                                      
C                                                                               
          DO 90 I = 1, 3                                                        
                TEXCH = EXCH                                                    
                IF (TEXCH .EQ. 0.0D0)TEXCH = 1.0D0                              
                XTERM = 0.5D0*(XTERM1*DEX(1,I) + XTERM2*DEX(2,I)+               
     1                         XTERM3*DEX(3,I))/TEXCH                           
                DLDR(I) = DSUMQ(I)-XTERM                                        
90        CONTINUE                                                              
      ENDIF                                                                     
C                                                                               
      RETURN                                                                    
      END                                                                       
C                                                                               
C****                                                                           
C                                                                               
      SUBROUTINE THCENT                                                         
C============================================================================== 
C   Compute the localized three-body term and the derivatives w.r.t. R(i)       
C============================================================================== 
C                                                                               
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)                                       
C                                                                               
      CHARACTER*75 REF(5)                                                       
C                                                                               
      PARAMETER (N3ATOM = 75)                                                   
      PARAMETER (ISURF = 5)                                                     
      PARAMETER (JSURF = ISURF*(ISURF+1)/2)                             
      PARAMETER (PI = 3.141592653589793D0)                                      
      PARAMETER (NATOM = 25)                                                    
C                                                                               
      COMMON /PT1CM/ R(N3ATOM),ENGYGS,DEGSDR(N3ATOM)                            
      COMMON /PT3CM/ EZERO(ISURF+1)                                             
      COMMON /PT4CM/ ENGYES(ISURF),DEESDR(N3ATOM,ISURF)                         
      COMMON /PT5CM/ ENGYIJ(JSURF),DEIJDR(N3ATOM,JSURF)                         
C                                                                               
      COMMON/INFOCM/ CARTNU(NATOM,3),INDEXES(NATOM),                            
     +               IRCTNT,NATOMS,ICARTR,MDER,MSURF,REF                        
C                                                                               
      COMMON/USROCM/ PENGYGS,PENGYES(ISURF),                                    
     +               PENGYIJ(JSURF),                                            
     +               DGSCART(NATOM,3),DESCART(NATOM,3,ISURF),                   
     +               DIJCART(NATOM,3,JSURF)                                     
C                                                                               
      COMMON/USRICM/ CART(NATOM,3),ANUZERO,                                     
     +               NULBL(NATOM),NFLAG(20),                                    
     +               NASURF(ISURF+1,ISURF+1),NDER                               
C                                                                               
      COMMON /ASYCM/ EASYAB,EASYBC,EASYAC                                       
C                                                                               
      COMMON /DEGSDRCM/DCORR2(3),DCORR3(3),DLDR(3),DE3C(3)                      
      COMMON /ENGYCM/ECOR2B, ECOR3B, ELOND, E3C                                 
      COMMON /LOCAL/C3C,ALF,ALFP,ALFT,P3C,Q3C,BETP                              
C                                                                               
      OMP3C = 1.D0 - P3C                                                        
      OMQ3C = 1.D0 - Q3C                                                        
      R12 = R(1) * R(1)                                                         
      R22 = R(2) * R(2)                                                         
      R32 = R(3) * R(3)                                                         
      RSUM = R(1) + R(3)                                                        
      RDIF = R(1) - R(3)                                                        
      RDIF2 = RDIF * RDIF                                                       
      T1 = -ALFP * RSUM                                                         
      EX1 = C3C * EXP(T1 * RSUM)                                                
      T2 = -ALF * RDIF                                                          
      EX2 = OMP3C * EXP(T2 * RDIF)                                              
      T3 = -ALFT * RDIF2                                                        
      EX3 = P3C * EXP(T3 * RDIF2)                                               
      R1I = 1.D0 / R(1)                                                         
      R3I = 1.D0 / R(3)                                                         
      T4 = R1I*R3I                                                              
C                                                                               
C   COSTH IS THE ANGLE BETWEEN R1 AND R3                                        
C                                                                               
      COSTH = 0.5D0 * (R12 + R32 - R22) * T4                                    
      T5 = OMQ3C * COSTH                                                        
C                                                                               
C   SET MODIFICATION ...                                                        
C                                                                               
      T = Q3C + T5 * COSTH                                                      
C                                                                               
C   E3C CONTAINS THE THREE CENTER CORRECTION TO V                               
C                                                                               
      E3C = (EX2 + EX3) * T * EX1                                               
      F3=EXP(-BETP*(R(1)+R(3)-R(2))**2)                                         
      E3C=E3C*F3                                                                
      IF (NDER .NE. 1) GO TO 280                                                
C                                                                               
C   COMPUTE DERIVATIVE OF THE 3C TERM                                           
C   FIRST, DERIVATIVE OF COSTH                                                  
C                                                                               
         DCOS1 = R3I - COSTH*R1I                                                
         DCOS2 = - R(2)*T4                                                      
         DCOS3 = R1I - COSTH*R3I                                                
         T4 = EX2 + EX3                                                         
         T5 = T4 * T5                                                           
C                                                                               
C   NOW, DERIVATIVES OF E3C                                                     
C                                                                               
         DE3C(1) = 2.D0*((T2 * EX2 + 2.D0 * T3 * RDIF * EX3 + T1 * T4)          
     *      * T + T5 * DCOS1) * EX1*F3+                                         
     1      2.0D0*E3C*(-BETP*(R(1)+R(3)-R(2)))                                  
         DE3C(2) = 2.D0 * T5 * DCOS2 * EX1*F3+                                  
     1           2.0D0*E3C*(BETP*(R(1)+R(3)-R(2)))                              
         DE3C(3) = 2.D0*((-T2 * EX2 - 2.D0 * T3 * RDIF * EX3 + T1 * T4)         
     *      * T + T5 * DCOS3) * EX1*F3+                                         
     1      2.0D0*E3C*(-BETP*(R(1)+R(3)-R(2)))                                  
  280 CONTINUE                                                                  
      RETURN                                                                    
      END                                                                       
C                                                                               
C*****                                                                          
C                                                                               
      SUBROUTINE XTANH(I,A)                                                     
C============================================================================== 
C   Compute the auxiliary function, hn, and the derivatives of hn w.r.t. R(i)   
C============================================================================== 
C                                                                               
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)                                       
C                                                                               
      CHARACTER*75 REF(5)                                                       
C                                                                               
      PARAMETER (N3ATOM = 75)                                                   
      PARAMETER (ISURF = 5)                                                     
      PARAMETER (JSURF = ISURF*(ISURF+1)/2)                             
      PARAMETER (PI = 3.141592653589793D0)                                      
      PARAMETER (NATOM = 25)                                                    
C                                                                               
      COMMON /PT1CM/ R(N3ATOM),ENGYGS,DEGSDR(N3ATOM)                            
      COMMON /PT3CM/ EZERO(ISURF+1)                                             
      COMMON /PT4CM/ ENGYES(ISURF),DEESDR(N3ATOM,ISURF)                         
      COMMON /PT5CM/ ENGYIJ(JSURF),DEIJDR(N3ATOM,JSURF)                         
C                                                                               
      COMMON/INFOCM/ CARTNU(NATOM,3),INDEXES(NATOM),                            
     +               IRCTNT,NATOMS,ICARTR,MDER,MSURF,REF                        
C                                                                               
      COMMON/USROCM/ PENGYGS,PENGYES(ISURF),                                    
     +               PENGYIJ(JSURF),                                            
     +               DGSCART(NATOM,3),DESCART(NATOM,3,ISURF),                   
     +               DIJCART(NATOM,3,JSURF)                                     
C                                                                               
      COMMON/USRICM/ CART(NATOM,3),ANUZERO,                                     
     +               NULBL(NATOM),NFLAG(20),                                    
     +               NASURF(ISURF+1,ISURF+1),NDER                               
C                                                                               
      COMMON /ASYCM/ EASYAB,EASYBC,EASYAC                                       
C                                                                               
      COMMON /VTANH/ RTANH(3,10),DRTANH(3,10)                                   
      DIMENSION A(10)                                                           
C                                                                               
      DO 10 J = 6, 10, 2                                                        
            RVAL = R(I) * A(J)                                                  
            IF(RVAL .GT. 0.0D0) THEN                                            
               EX = EXP( -2.0D0 * RVAL)                                         
               SGN = 1.0D0                                                      
            ELSE                                                                
               EX = EXP( 2.0D0 * RVAL)                                          
               SGN = -1.0D0                                                     
            ENDIF                                                               
            T = 1.0D0 + EX                                                      
            TH = 1.0D0/T                                                        
            IF (NDER .EQ. 1) DRTANH(I,J) = 4.0D0 * A(J) * EX * TH * TH          
            RTANH(I,J) = SGN * TH * (1.0D0 - EX)                                
10    CONTINUE                                                                  
      RETURN                                                                    
      END                                                                       
C                                                                               
C*****                                                                          
C                                                                               
      SUBROUTINE SWITCH                                                         
C============================================================================== 
C   Compute the switching function, S, and the derivatives of S w.r.t. R(i)     
C============================================================================== 
C                                                                               
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)                                       
C                                                                               
      CHARACTER*75 REF(5)                                                       
C                                                                               
      PARAMETER (N3ATOM = 75)                                                   
      PARAMETER (ISURF = 5)                                                     
      PARAMETER (JSURF = ISURF*(ISURF+1)/2)                             
      PARAMETER (PI = 3.141592653589793D0)                                      
      PARAMETER (NATOM = 25)                                                    
C                                                                               
      COMMON /PT1CM/ R(N3ATOM),ENGYGS,DEGSDR(N3ATOM)                            
      COMMON /PT3CM/ EZERO(ISURF+1)                                             
      COMMON /PT4CM/ ENGYES(ISURF),DEESDR(N3ATOM,ISURF)                         
      COMMON /PT5CM/ ENGYIJ(JSURF),DEIJDR(N3ATOM,JSURF)                         
C                                                                               
      COMMON/INFOCM/ CARTNU(NATOM,3),INDEXES(NATOM),                            
     +               IRCTNT,NATOMS,ICARTR,MDER,MSURF,REF                        
C                                                                               
      COMMON/USROCM/ PENGYGS,PENGYES(ISURF),                                    
     +               PENGYIJ(JSURF),                                            
     +               DGSCART(NATOM,3),DESCART(NATOM,3,ISURF),                   
     +               DIJCART(NATOM,3,JSURF)                                     
C                                                                               
      COMMON/USRICM/ CART(NATOM,3),ANUZERO,                                     
     +               NULBL(NATOM),NFLAG(20),                                    
     +               NASURF(ISURF+1,ISURF+1),NDER                               
C                                                                               
      COMMON /ASYCM/ EASYAB,EASYBC,EASYAC                                       
C                                                                               
      COMMON /SWPAR/ DEC(3),RB(3),SW(3),DSW(3,3)                                
C                                                                               
C   Initialize the array that will be used to store the derivatives of          
C   the switching function w.r.t. R(i)                                          
C                                                                               
      DO 10 I = 1, 3                                                            
      DO 10 J = 1, 3                                                            
            DSW(I,J) = 0.0D0                                                    
10    CONTINUE                                                                  
C                                                                               
C   Compute the switching function.                                             
C                                                                               
      DO 20 I=1,3                                                               
            RMRB = R(I)-RB(I)                                                   
            RVAL = RMRB*DEC(I)                                                  
            IF (RVAL .GT. 0.0D0)THEN                                            
                EX2U = EXP(-2.0D0*RVAL)                                         
                EXU  = EXP(-RVAL)                                               
                SGN  = 1.0D0                                                    
            ELSE                                                                
                EX2U = EXP(2.0D0*RVAL)                                          
                EXU  = EXP(RVAL)                                                
                SGN = -1.0D0                                                    
            ENDIF                                                               
            TEMP1 = 1.0D0 + EX2U                                                
            HYTAN = SGN*(1.0D0 - EX2U)/TEMP1                                    
            SW(I) = 0.5D0*(1.0D0 + HYTAN)                                       
   20 CONTINUE                                                                  
      IF (NDER .NE. 1) GO TO 100                                                
      DO 30 I = 1, 3                                                            
            RMRB = R(I)-RB(I)                                                   
            RVAL = RMRB*DEC(I)                                                  
            IF (RVAL .GT. 0.0D0)THEN                                            
                EXU  = EXP(-RVAL)                                               
                SGN  = 1.0D0                                                    
            ELSE                                                                
                EXU  = EXP(RVAL)                                                
                SGN = -1.0D0                                                    
            ENDIF                                                               
            TEMP2 = 1.0D0 + EXU*EXU                                             
            HYSEC = SGN*2.0D0*EXU/TEMP2                                         
            DSW(I,I) = 0.5D0*DEC(I)*HYSEC*HYSEC                                 
30    CONTINUE                                                                  
C                                                                               
100   CONTINUE                                                                  
      RETURN                                                                    
      END                                                                       
C                                                                               
C*****                                                                          
C============================================================================== 
      BLOCK DATA PTPACM                                                         
C============================================================================== 
C     INPUT DATA FOR FH2                                                        
C                                                                               
C============================================================================== 
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)                                       
C                                                                               
      CHARACTER*75 REF(5)                                                       
C                                                                               
      PARAMETER (N3ATOM = 75)                                                   
      PARAMETER (ISURF = 5)                                                     
      PARAMETER (JSURF = ISURF*(ISURF+1)/2)                             
      PARAMETER (PI = 3.141592653589793D0)                                      
      PARAMETER (NATOM = 25)                                                    
C                                                                               
      COMMON /PT3CM/ EZERO(ISURF+1)                                             
C                                                                               
      COMMON/INFOCM/ CARTNU(NATOM,3),INDEXES(NATOM),                            
     +               IRCTNT,NATOMS,ICARTR,MDER,MSURF,REF                        
C                                                                               
C                                                                               
      COMMON/USRICM/ CART(NATOM,3),ANUZERO,                                     
     +               NULBL(NATOM),NFLAG(20),                                    
     +               NASURF(ISURF+1,ISURF+1),NDER                               
C                                                                               
      COMMON /ASYCM/ EASYAB,EASYBC,EASYAC                                       
C                                                                               
      COMMON /DECM/ DISSE(3)                                                    
      COMMON /ATAT/CHH(10),CHF(10)                                              
      COMMON /DIAT/D(3),A1(3),A2(3),A3(3),GAMMA(3)                              
      COMMON /DIST/RM(3),R0(3)                                                  
      COMMON /DISPC/ALPH0,ALPH1,BET0,BET1                                       
      COMMON /KKP/CK1(10),CK2(10),CK3(10),                                      
     1            CKP1(10),CKP2(10),CKP3(10)                                    
      COMMON /LOCAL/C3C,ALF,ALFP,ALFT,P3C,Q3C,BETP                              
      COMMON /PAR/BHH(5),BHF(5)                                                 
      COMMON /REF/RO(3)                                                         
      COMMON /SWPAR/ DEC(3),RB(3),SW(3),DSW(3,3)                                
      COMMON /TPAR/XHH(3),XHF(3),P(4)                                           
      COMMON /TRIAL/ETA1(10),ETA2(10),ETA3(10),                                 
     1              ETAP1(10),ETAP2(10),ETAP3(10)                               
C                                                                               
      DATA NASURF /1,35*0/                                                      
      DATA NDER /0/                                                             
      DATA NFLAG /1,1,15*0,6,0,0/                                               
C                                                                               
      DATA ANUZERO /0.0D0/                                                      
      DATA ICARTR,MSURF,MDER/3,0,1/                                             
      DATA NULBL /25*0/                                                         
      DATA NATOMS /3/                                                           
C                                                                               
      DATA DISSE /0.224989335D0, 0.174472692D0, 0.224989355D0/                  
C                                                                               
      DATA XHF /2.633449D0, 0.417523D0, -0.090289D0/                            
      DATA XHH /-0.393828D0, 0.167810D0, -0.017081D0/                           
      DATA P  /-0.071547D0, -0.108550D0, 0.050461D0, -0.370255D0/               
      DATA C3C, ALFP /0.296668D0, 0.078606D0/                                   
C                                                                               
      DATA ALF,ALFT/0.18D0,2.14D0/                                              
      DATA P3C,Q3C,BETP/0.95D0,1.0D0,0.18D0/                                    
      DATA DEC/2.0D0,2.0D0,2.0D0/                                               
      DATA RB/6.80D0,5.00D0,6.80D0/                                             
      DATA BHH/0.448467D0,-0.056687D0,0.246831D0,-0.018419D0,0.000598D0/        
      DATA BHF/0.9149555D0,0.3222197D0,0.1273001D0,0.0D0,0.0D0/                 
      DATA CHH(6),CHH(8),CHH(10)/6.499027D0,1.243991D2,3.2858D3/                
      DATA CHF(6),CHF(8),CHF(10)/6.68799D0,1.0289812D2,2.07391451D3/            
      DATA RM(1),RM(2),RM(3)/1.7329D0,1.4010D0,1.7329D0/                        
      DATA R0(1),R0(2),R0(3)/5.9D0,6.9283D0,5.9D0/                              
      DATA RO(1),RO(2),RO(3)/1.7329D0,1.449D0,1.7329D0/                         
      DATA ALPH0,ALPH1,BET0,BET1/2.59528D1,1.1868D0,1.57381D1,9.729D-2/         
      DATA ETA1(6),ETA1(8),ETA1(10)/0.9438421608D0,0.9774440533D0,              
     1                              0.9452240321D0/                             
      DATA ETA2(6),ETA2(8),ETA2(10)/0.1085550150D1,0.1117269260D1,              
     1                              0.1138536961D1/                             
      DATA ETA3(6),ETA3(8),ETA3(10)/0.9438421608D0,0.9774440533D0,              
     1                              0.9452240321D0/                             
      DATA ETAP1(6),ETAP1(8),ETAP1(10)/6.0D0,6.0D0,6.0D0/                       
      DATA ETAP2(6),ETAP2(8),ETAP2(10)/6.0D0,6.0D0,6.0D0/                       
      DATA ETAP3(6),ETAP3(8),ETAP3(10)/6.0D0,6.0D0,6.0D0/                       
      DATA CK1(6),CK1(8),CK1(10)/-0.2610767389D-1,-0.3428701964D-1,             
     1                           -0.4858536634D-1/                              
      DATA CK2(6),CK2(8),CK2(10)/-0.9709847270D-1,-0.1248186655D 0,             
     1                           -0.1426680807D 0/                              
      DATA CK3(6),CK3(8),CK3(10)/-0.2610767389D-1,-0.3428701964D-1,             
     1                           -0.4858536634D-1/                              
      DATA CKP1(6),CKP1(8),CKP1(10)/0.9438421608D 0,0.9774440533D 0,            
     1                            0.9452240321D 0/                              
      DATA CKP2(6),CKP2(8),CKP2(10)/0.1085550150D 1,0.1117269260D 1,            
     1                            0.1138536961D 1/                              
      DATA CKP3(6),CKP3(8),CKP3(10)/0.9438421608D 0,0.9774440533D 0,            
     1                            0.9452240321D 0/                              
      DATA D(1),A1(1),A2(1),A3(1),GAMMA(1)/0.19383609D 0,2.4822787D 0,          
     1                        1.5435337D 0,0.83093855D 0,2.3992999D 0/          
      DATA D(2),A1(2),A2(2),A3(2),GAMMA(2)/0.15796326D0,2.1977034D0,            
     1                        1.2932502D0,0.64375666D0,2.1835071D0/             
      DATA D(3),A1(3),A2(3),A3(3),GAMMA(3)/0.19383609D 0,2.4822787D 0,          
     1                        1.5435337D 0,0.83093855D 0,2.3992999D 0/          
      END                                                                       
C============================================================================== 

