Merge branch 'AFM' of mmka:unres into AFM
authorAdam Sieradzan <adasko@piasek4.chem.univ.gda.pl>
Thu, 14 Jan 2016 10:28:17 +0000 (11:28 +0100)
committerAdam Sieradzan <adasko@piasek4.chem.univ.gda.pl>
Thu, 14 Jan 2016 10:28:17 +0000 (11:28 +0100)
1  2 
source/unres/src_MD-M/energy_p_new_barrier.F

@@@ -1107,7 -1107,7 +1107,7 @@@ C--------------------------------------
       &  escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,
       &  ecorr,wcorr,
       &  ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
 -     &  eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccro,edihcnstr,
 +     &  eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccor,edihcnstr,
       &  ethetacnstr,ebr*nss,Uconst,eliptran,wliptran,Eafmforc,
       &  etot
     10 format (/'Virtual-chain energies:'//
@@@ -2783,28 -2783,28 +2783,28 @@@ c      write(iout,*) 'nphi=',nphi,nre
  #endif
  #ifdef NEWCORR
          if (i.gt. nnt+2 .and. i.lt.nct+2) then
-           iti = itortyp(itype(i-2))
+           iti = itype2loc(itype(i-2))
          else
-           iti=ntortyp+1
+           iti=nloctyp
          endif
  c        if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
          if (i.gt. nnt+1 .and. i.lt.nct+1) then
-           iti1 = itortyp(itype(i-1))
+           iti1 = itype2loc(itype(i-1))
          else
-           iti1=ntortyp+1
+           iti1=nloctyp
          endif
  c        write(iout,*),i
-         b1(1,i-2)=bnew1(1,1,iti)*dsin(theta(i-1)/2.0)
+         b1(1,i-2)=bnew1(1,1,iti)*dsin(theta(i-1)/2.0d0)
       &           +bnew1(2,1,iti)*dsin(theta(i-1))
-      &           +bnew1(3,1,iti)*dcos(theta(i-1)/2.0)
+      &           +bnew1(3,1,iti)*dcos(theta(i-1)/2.0d0)
          gtb1(1,i-2)=bnew1(1,1,iti)*dcos(theta(i-1)/2.0d0)/2.0d0
       &             +bnew1(2,1,iti)*dcos(theta(i-1))
       &             -bnew1(3,1,iti)*dsin(theta(i-1)/2.0d0)/2.0d0
  c     &           +bnew1(3,1,iti)*sin(alpha(i))*cos(beta(i))
  c     &*(cos(theta(i)/2.0)
-         b2(1,i-2)=bnew2(1,1,iti)*dsin(theta(i-1)/2.0)
+         b2(1,i-2)=bnew2(1,1,iti)*dsin(theta(i-1)/2.0d0)
       &           +bnew2(2,1,iti)*dsin(theta(i-1))
-      &           +bnew2(3,1,iti)*dcos(theta(i-1)/2.0)
+      &           +bnew2(3,1,iti)*dcos(theta(i-1)/2.0d0)
  c     &           +bnew2(3,1,iti)*sin(alpha(i))*cos(beta(i))
  c     &*(cos(theta(i)/2.0)
          gtb2(1,i-2)=bnew2(1,1,iti)*dcos(theta(i-1)/2.0d0)/2.0d0
@@@ -2843,15 -2843,15 +2843,15 @@@ c       write (iout,*) 'theta=', theta(
         enddo
  #else
          if (i.gt. nnt+2 .and. i.lt.nct+2) then
-           iti = itortyp(itype(i-2))
+           iti = itype2loc(itype(i-2))
          else
-           iti=ntortyp+1
+           iti=nloctyp
          endif
  c        if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
          if (i.gt. nnt+1 .and. i.lt.nct+1) then
-           iti1 = itortyp(itype(i-1))
+           iti1 = itype2loc(itype(i-1))
          else
-           iti1=ntortyp+1
+           iti1=nloctyp
          endif
          b1(1,i-2)=b(3,iti)
          b1(2,i-2)=b(5,iti)
          endif
  c        if (i.gt. iatel_s+2 .and. i.lt.iatel_e+5) then
          if (i.gt. nnt+2 .and. i.lt.nct+2) then
-           iti = itortyp(itype(i-2))
+           iti = itype2loc(itype(i-2))
          else
-           iti=ntortyp
+           iti=nloctyp
          endif
  c        if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
          if (i.gt. nnt+1 .and. i.lt.nct+1) then
-           iti1 = itortyp(itype(i-1))
+           iti1 = itype2loc(itype(i-1))
          else
-           iti1=ntortyp
+           iti1=nloctyp
          endif
  cd        write (iout,*) '*******i',i,' iti1',iti
  cd        write (iout,*) 'b1',b1(:,iti)
@@@ -2961,8 -2961,8 +2961,8 @@@ c        if (i .gt. iatel_s+2) the
            call matvec2(Ug(1,1,i-2),gtb2(1,i-2),gUb2(1,i-2))
  c          write (iout,*) Ug(1,1,i-2),gtb2(1,i-2),gUb2(1,i-2),"chuj"
  #endif
- c          write(iout,*) "co jest kurwa", iti, EE(1,1,iti),EE(2,1,iti),
- c     &    EE(1,2,iti),EE(2,2,iti)
+ c          write(iout,*) "co jest kurwa", iti, EE(1,1,i),EE(2,1,i),
+ c     &    EE(1,2,iti),EE(2,2,i)
            call matmat2(EE(1,1,i-2),Ug(1,1,i-2),EUg(1,1,i-2))
            call matmat2(gtEE(1,1,i-2),Ug(1,1,i-2),gtEUg(1,1,i-2))
  c          write(iout,*) "Macierz EUG",
@@@ -2997,18 -2997,24 +2997,24 @@@ c     &    eug(2,2,i-2
  c        if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
          if (i.gt. nnt+1 .and. i.lt.nct+1) then
            if (itype(i-1).le.ntyp) then
-             iti1 = itortyp(itype(i-1))
+             iti1 = itype2loc(itype(i-1))
            else
-             iti1=ntortyp
+             iti1=nloctyp
            endif
          else
-           iti1=ntortyp
+           iti1=nloctyp
          endif
          do k=1,2
            mu(k,i-2)=Ub2(k,i-2)+b1(k,i-1)
          enddo
- C        write (iout,*) 'mumu',i,b1(1,i-1),Ub2(1,i-2)
- c        write (iout,*) 'mu ',mu(:,i-2),i-2
+ #ifdef MUOUT
+         write (iout,'(2hmu,i3,3f8.1,12f10.5)') i-2,rad2deg*theta(i-1),
+      &     rad2deg*theta(i),rad2deg*phi(i),mu(1,i-2),mu(2,i-2),
+      &       -b2(1,i-2),b2(2,i-2),b1(1,i-2),b1(2,i-2),
+      &       dsqrt(b2(1,i-1)**2+b2(2,i-1)**2)
+      &      +dsqrt(b1(1,i-1)**2+b1(2,i-1)**2),
+      &      ((ee(l,k,i-2),l=1,2),k=1,2),eenew(1,itype2loc(iti))
+ #endif
  cd        write (iout,*) 'mu1',mu1(:,i-2)
  cd        write (iout,*) 'mu2',mu2(:,i-2)
          if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
@@@ -3295,11 -3301,11 +3301,11 @@@ c      endi
  #endif
  #endif
  cd      do i=1,nres
- cd        iti = itortyp(itype(i))
+ cd        iti = itype2loc(itype(i))
  cd        write (iout,*) i
  cd        do j=1,2
  cd        write (iout,'(2f10.5,5x,2f10.5,5x,2f10.5)') 
- cd     &  (EE(j,k,iti),k=1,2),(Ug(j,k,i),k=1,2),(EUg(j,k,i),k=1,2)
+ cd     &  (EE(j,k,i),k=1,2),(Ug(j,k,i),k=1,2),(EUg(j,k,i),k=1,2)
  cd        enddo
  cd      enddo
        return
@@@ -3417,21 -3423,23 +3423,23 @@@ C Loop over i,i+2 and i,i+3 pairs of th
  C
  C 14/01/2014 TURN3,TUNR4 does no go under periodic boundry condition
        do i=iturn3_start,iturn3_end
-         if (i.le.1) cycle
+ c        if (i.le.1) cycle
  C        write(iout,*) "tu jest i",i
          if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
  C changes suggested by Ana to avoid out of bounds
-      & .or.((i+4).gt.nres)
-      & .or.((i-1).le.0)
+ C Adam: Unnecessary: handled by iturn3_end and iturn3_start
+ c     & .or.((i+4).gt.nres)
+ c     & .or.((i-1).le.0)
  C end of changes by Ana
       &  .or. itype(i+2).eq.ntyp1
       &  .or. itype(i+3).eq.ntyp1) cycle
-         if(i.gt.1)then
-           if(itype(i-1).eq.ntyp1)cycle
-         end if
-         if(i.LT.nres-3)then
-           if (itype(i+4).eq.ntyp1) cycle
-         end if
+ C Adam: Instructions below will switch off existing interactions
+ c        if(i.gt.1)then
+ c          if(itype(i-1).eq.ntyp1)cycle
+ c        end if
+ c        if(i.LT.nres-3)then
+ c          if (itype(i+4).eq.ntyp1) cycle
+ c        end if
          dxi=dc(1,i)
          dyi=dc(2,i)
          dzi=dc(3,i)
          if (i.le.1) cycle
          if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
  C changes suggested by Ana to avoid out of bounds
-      & .or.((i+5).gt.nres)
-      & .or.((i-1).le.0)
+ c     & .or.((i+5).gt.nres)
+ c     & .or.((i-1).le.0)
  C end of changes suggested by Ana
       &    .or. itype(i+3).eq.ntyp1
       &    .or. itype(i+4).eq.ntyp1
-      &    .or. itype(i+5).eq.ntyp1
-      &    .or. itype(i).eq.ntyp1
-      &    .or. itype(i-1).eq.ntyp1
+ c     &    .or. itype(i+5).eq.ntyp1
+ c     &    .or. itype(i).eq.ntyp1
+ c     &    .or. itype(i-1).eq.ntyp1
       &                             ) cycle
          dxi=dc(1,i)
          dyi=dc(2,i)
  CTU KURWA
        do i=iatel_s,iatel_e
  C        do i=75,75
-         if (i.le.1) cycle
+ c        if (i.le.1) cycle
          if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
  C changes suggested by Ana to avoid out of bounds
-      & .or.((i+2).gt.nres)
-      & .or.((i-1).le.0)
+ c     & .or.((i+2).gt.nres)
+ c     & .or.((i-1).le.0)
  C end of changes by Ana
-      &  .or. itype(i+2).eq.ntyp1
-      &  .or. itype(i-1).eq.ntyp1
+ c     &  .or. itype(i+2).eq.ntyp1
+ c     &  .or. itype(i-1).eq.ntyp1
       &                ) cycle
          dxi=dc(1,i)
          dyi=dc(2,i)
@@@ -3586,11 -3594,11 +3594,11 @@@ C          write (iout,*) i,
           if (j.le.1) cycle
            if (itype(j).eq.ntyp1.or. itype(j+1).eq.ntyp1
  C changes suggested by Ana to avoid out of bounds
-      & .or.((j+2).gt.nres)
-      & .or.((j-1).le.0)
+ c     & .or.((j+2).gt.nres)
+ c     & .or.((j-1).le.0)
  C end of changes by Ana
-      & .or.itype(j+2).eq.ntyp1
-      & .or.itype(j-1).eq.ntyp1
+ c     & .or.itype(j+2).eq.ntyp1
+ c     & .or.itype(j-1).eq.ntyp1
       &) cycle
            call eelecij(i,j,ees,evdw1,eel_loc)
          enddo ! j
@@@ -4832,9 -4840,9 +4840,9 @@@ c        write(iout,*)"WCHODZE W PROGRA
          a_temp(1,2)=a23
          a_temp(2,1)=a32
          a_temp(2,2)=a33
-         iti1=itortyp(itype(i+1))
-         iti2=itortyp(itype(i+2))
-         iti3=itortyp(itype(i+3))
+         iti1=itype2loc(itype(i+1))
+         iti2=itype2loc(itype(i+2))
+         iti3=itype2loc(itype(i+3))
  c        write(iout,*) "iti1",iti1," iti2",iti2," iti3",iti3
          call transpose2(EUg(1,1,i+1),e1t(1,1))
          call transpose2(Eug(1,1,i+2),e2t(1,1))
@@@ -7473,11 -7481,12 +7481,12 @@@ C The rigorous attempt to derive energ
        include 'COMMON.TORCNSTR'
        include 'COMMON.CONTROL'
        logical lprn
-       double precision thybt1(maxtermkcc),thybt2(maxtermkcc)
+ c      double precision thybt1(maxtermkcc),thybt2(maxtermkcc)
  C Set lprn=.true. for debugging
        lprn=.false.
  c     lprn=.true.
  C      print *,"wchodze kcc"
+       if (lprn) write (iout,*) "etor_kcc tor_mode",tor_mode
        if (tor_mode.ne.2) then
        etors=0.0D0
        endif
@@@ -7497,60 -7506,86 +7506,86 @@@ c     &      ((itype(i-1).eq.ntyp1).and
          sumnonchebyshev=0.0d0
          sumchebyshev=0.0d0
  C to avoid multiple devision by 2
-         theti22=0.5d0*theta(i)
+ c        theti22=0.5d0*theta(i)
  C theta 12 is the theta_1 /2
  C theta 22 is theta_2 /2
-         theti12=0.5d0*theta(i-1)
+ c        theti12=0.5d0*theta(i-1)
  C and appropriate sinus function
-         sinthet2=dsin(theta(i))
          sinthet1=dsin(theta(i-1))
+         sinthet2=dsin(theta(i))
          costhet1=dcos(theta(i-1))
          costhet2=dcos(theta(i))
+ c Cosines of halves thetas
+         costheti12=0.5d0*(1.0d0+costhet1)
+         costheti22=0.5d0*(1.0d0+costhet2)
  C to speed up lets store its mutliplication
-          sint1t2=sinthet2*sinthet1        
+         sint1t2=sinthet2*sinthet1        
+         sint1t2n=1.0d0
  C \sum_{i=1}^n (sin(theta_1) * sin(theta_2))^n * (c_n* cos(n*gamma)
  C +d_n*sin(n*gamma)) *
  C \sum_{i=1}^m (1+a_m*Tb_m(cos(theta_1 /2))+b_m*Tb_m(cos(theta_2 /2))) 
  C we have two sum 1) Non-Chebyshev which is with n and gamma
+         etori=0.0d0
          do j=1,nterm_kcc(itori,itori1)
  
+           nval=nterm_kcc_Tb(itori,itori1)
            v1ij=v1_kcc(j,itori,itori1)
            v2ij=v2_kcc(j,itori,itori1)
+ c          write (iout,*) "i",i," j",j," v1",v1ij," v2",v2ij
  C v1ij is c_n and d_n in euation above
            cosphi=dcos(j*phii)
            sinphi=dsin(j*phii)
-           sint1t2n=sint1t2**j
-           sumnonchebyshev=
-      &                    sint1t2n*(v1ij*cosphi+v2ij*sinphi)
-           actval=sint1t2n*(v1ij*cosphi+v2ij*sinphi)
+           sint1t2n1=sint1t2n
+           sint1t2n=sint1t2n*sint1t2
+           sumth1tyb1=tschebyshev(1,nval,v11_chyb(1,j,itori,itori1),
+      &        costheti12)
+           gradth1tyb1=-0.5d0*sinthet1*gradtschebyshev(0,nval-1,
+      &        v11_chyb(1,j,itori,itori1),costheti12)
+ c          write (iout,*) "v11",(v11_chyb(k,j,itori,itori1),k=1,nval),
+ c     &      " sumth1tyb1",sumth1tyb1," gradth1tyb1",gradth1tyb1
+           sumth2tyb1=tschebyshev(1,nval,v21_chyb(1,j,itori,itori1),
+      &        costheti22)
+           gradth2tyb1=-0.5d0*sinthet2*gradtschebyshev(0,nval-1,
+      &        v21_chyb(1,j,itori,itori1),costheti22)
+ c          write (iout,*) "v21",(v21_chyb(k,j,itori,itori1),k=1,nval),
+ c     &      " sumth2tyb1",sumth2tyb1," gradth2tyb1",gradth2tyb1
+           sumth1tyb2=tschebyshev(1,nval,v12_chyb(1,j,itori,itori1),
+      &        costheti12)
+           gradth1tyb2=-0.5d0*sinthet1*gradtschebyshev(0,nval-1,
+      &        v12_chyb(1,j,itori,itori1),costheti12)
+ c          write (iout,*) "v12",(v12_chyb(k,j,itori,itori1),k=1,nval),
+ c     &      " sumth1tyb2",sumth1tyb2," gradth1tyb2",gradth1tyb2
+           sumth2tyb2=tschebyshev(1,nval,v22_chyb(1,j,itori,itori1),
+      &        costheti22)
+           gradth2tyb2=-0.5d0*sinthet2*gradtschebyshev(0,nval-1,
+      &        v22_chyb(1,j,itori,itori1),costheti22)
+ c          write (iout,*) "v22",(v22_chyb(k,j,itori,itori1),k=1,nval),
+ c     &      " sumth2tyb2",sumth2tyb2," gradth2tyb2",gradth2tyb2
  C          etors=etors+sint1t2n*(v1ij*cosphi+v2ij*sinphi)
  C          if (energy_dec) etors_ii=etors_ii+
  C     &                v1ij*cosphi+v2ij*sinphi
  C glocig is the gradient local i site in gamma
-           glocig=j*(v2ij*cosphi-v1ij*sinphi)*sint1t2n
+           actval1=v1ij*cosphi*(1.0d0+sumth1tyb1+sumth2tyb1)
+           actval2=v2ij*sinphi*(1.0d0+sumth1tyb2+sumth2tyb2)
+           etori=etori+sint1t2n*(actval1+actval2)
+           glocig=glocig+
+      &        j*sint1t2n*(v2ij*cosphi*(1.0d0+sumth1tyb2+sumth2tyb2)
+      &        -v1ij*sinphi*(1.0d0+sumth1tyb1+sumth2tyb1))
  C now gradient over theta_1
-           glocit1=actval/sinthet1*j*costhet1
-           glocit2=actval/sinthet2*j*costhet2
+           glocit1=glocit1+
+      &       j*sint1t2n1*costhet1*sinthet2*(actval1+actval2)+
+      &       sint1t2n*(v1ij*cosphi*gradth1tyb1+v2ij*sinphi*gradth1tyb2)
+           glocit2=glocit2+
+      &       j*sint1t2n1*sinthet1*costhet2*(actval1+actval2)+
+      &       sint1t2n*(v1ij*cosphi*gradth2tyb1+v2ij*sinphi*gradth2tyb2)
  
  C now the Czebyshev polinominal sum
-         do k=1,nterm_kcc_Tb(itori,itori1)
-          thybt1(k)=v1_chyb(k,j,itori,itori1)
-          thybt2(k)=v2_chyb(k,j,itori,itori1)
+ c        do k=1,nterm_kcc_Tb(itori,itori1)
+ c         thybt1(k)=v1_chyb(k,j,itori,itori1)
+ c         thybt2(k)=v2_chyb(k,j,itori,itori1)
  C         thybt1(k)=0.0
  C         thybt2(k)=0.0
-         enddo 
-         sumth1thyb=tschebyshev
-      &         (1,nterm_kcc_Tb(itori,itori1),thybt1(1),dcos(theti12)**2)
-         gradthybt1=gradtschebyshev
-      &         (0,nterm_kcc_Tb(itori,itori1)-1,thybt1(1),
-      &        dcos(theti12)**2)
-      & *dcos(theti12)*(-dsin(theti12))
-         sumth2thyb=tschebyshev
-      &         (1,nterm_kcc_Tb(itori,itori1),thybt2(1),dcos(theti22)**2)
-         gradthybt2=gradtschebyshev
-      &         (0,nterm_kcc_Tb(itori,itori1)-1,thybt2(1),
-      &         dcos(theti22)**2)
-      & *dcos(theti22)*(-dsin(theti22))
+ c        enddo 
  C        print *, sumth1thyb, gradthybt1, sumth2thyb, gradthybt2,
  C     &         gradtschebyshev
  C     &         (0,nterm_kcc_Tb(itori,itori1)-1,thybt2(1),
@@@ -7558,22 -7593,19 +7593,19 @@@ C     &         dcos(theti22)**2)
  C     &         dsin(theti22)
  
  C now overal sumation
-          etors=etors+(1.0d0+sumth1thyb+sumth2thyb)*sumnonchebyshev
  C         print *,"sumnon", sumnonchebyshev,sumth1thyb+sumth2thyb
+         enddo ! j
+         etors=etors+etori
  C derivative over gamma
-          gloc(i-3,icg)=gloc(i-3,icg)+wtor*glocig
-      &   *(1.0d0+sumth1thyb+sumth2thyb)
+         gloc(i-3,icg)=gloc(i-3,icg)+wtor*glocig
  C derivative over theta1
-         gloc(nphi+i-3,icg)=gloc(nphi+i-3,icg)+wtor*
-      &  (glocit1*(1.0d0+sumth1thyb+sumth2thyb)+
-      &   sumnonchebyshev*gradthybt1)
+         gloc(nphi+i-3,icg)=gloc(nphi+i-3,icg)+wtor*glocit1
  C now derivative over theta2
-         gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)+wtor*
-      &  (glocit2*(1.0d0+sumth1thyb+sumth2thyb)+
-      &   sumnonchebyshev*gradthybt2)
-        enddo
+         gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)+wtor*glocit2
+         if (lprn) 
+      &    write (iout,*) i-2,i-1,itype(i-2),itype(i-1),itori,itori1,
+      &       theta(i-1)*rad2deg,theta(i)*rad2deg,phii*rad2deg,etori
        enddo
-      
  C        gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
  ! 6/20/98 - dihedral angle constraints
        if (tor_mode.ne.2) then
@@@ -7622,7 -7654,8 +7654,8 @@@ C Set lprn=.true. for debuggin
        lprn=.false.
  c     lprn=.true.
  C      print *,"wchodze kcc"
-       if (tormode.ne.2) etheta=0.0D0
+       if (lprn) write (iout,*) "ebend_kcc tor_mode",tor_mode
+       if (tor_mode.ne.2) etheta=0.0D0
        do i=ithet_start,ithet_end
  c        print *,i,itype(i-1),itype(i),itype(i-2)
          if ((itype(i-1).eq.ntyp1).or.itype(i-2).eq.ntyp1
           enddo
           sumth1thyb=tschebyshev
       &         (1,nbend_kcc_Tb(iti),thybt1(1),costhet)
+         if (lprn) write (iout,*) i-1,itype(i-1),iti,theta(i)*rad2deg,
+      &    sumth1thyb
          ihelp=nbend_kcc_Tb(iti)-1
          gradthybt1=gradtschebyshev
       &         (0,ihelp,thybt1(1),costhet)
@@@ -7643,7 -7678,7 +7678,7 @@@ C        print *,sumth1thyb,gradthybt1,
          gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)+wang*
       &   gradthybt1*sinthet*(-0.5d0)
        enddo
-       if (tormode.ne.2) then
+       if (tor_mode.ne.2) then
        ethetacnstr=0.0d0
  C      print *,ithetaconstr_start,ithetaconstr_end,"TU"
        do i=ithetaconstr_start,ithetaconstr_end
@@@ -8685,7 -8720,7 +8720,7 @@@ c     & ' eij',eij,' eesij',ees0pij,ees
  c     & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' energy=',ekont*ees,
  c     & 'gradcorr_long'
  C Calculate the multi-body contribution to energy.
 -c      ecorr=ecorr+ekont*ees
 +C      ecorr=ecorr+ekont*ees
  C Calculate multi-body contributions to the gradient.
        coeffpees0pij=coeffp*ees0pij
        coeffmees0mij=coeffm*ees0mij
@@@ -8839,9 -8874,9 +8874,9 @@@ C--------------------------------------
       &  auxmat(2,2)
        iti1 = itortyp(itype(i+1))
        if (j.lt.nres-1) then
-         itj1 = itortyp(itype(j+1))
+         itj1 = itype2loc(itype(j+1))
        else
-         itj1=ntortyp
+         itj1=nloctyp
        endif
        do iii=1,2
          dipi(iii,1)=Ub2(iii,i)
@@@ -8929,16 -8964,16 +8964,16 @@@ cd      write (iout,*) "a_chujkl",((a_c
        if (l.eq.j+1) then
  C parallel orientation of the two CA-CA-CA frames.
          if (i.gt.1) then
-           iti=itortyp(itype(i))
+           iti=itype2loc(itype(i))
          else
-           iti=ntortyp
+           iti=nloctyp
          endif
-         itk1=itortyp(itype(k+1))
-         itj=itortyp(itype(j))
+         itk1=itype2loc(itype(k+1))
+         itj=itype2loc(itype(j))
          if (l.lt.nres-1) then
-           itl1=itortyp(itype(l+1))
+           itl1=itype2loc(itype(l+1))
          else
-           itl1=ntortyp
+           itl1=nloctyp
          endif
  C A1 kernel(j+1) A2T
  cd        do iii=1,2
@@@ -9082,17 -9117,17 +9117,17 @@@ C End vector
        else
  C Antiparallel orientation of the two CA-CA-CA frames.
          if (i.gt.1) then
-           iti=itortyp(itype(i))
+           iti=itype2loc(itype(i))
          else
-           iti=ntortyp
+           iti=nloctyp
          endif
-         itk1=itortyp(itype(k+1))
-         itl=itortyp(itype(l))
-         itj=itortyp(itype(j))
+         itk1=itype2loc(itype(k+1))
+         itl=itype2loc(itype(l))
+         itj=itype2loc(itype(j))
          if (j.lt.nres-1) then
-           itj1=itortyp(itype(j+1))
+           itj1=itype2loc(itype(j+1))
          else 
-           itj1=ntortyp
+           itj1=nloctyp
          endif
  C A2 kernel(j-1)T A1T
          call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
@@@ -9430,9 -9465,9 +9465,9 @@@ cd      endi
  cd      write (iout,*)
  cd     &   'EELLO5: Contacts have occurred for peptide groups',i,j,
  cd     &   ' and',k,l
-       itk=itortyp(itype(k))
-       itl=itortyp(itype(l))
-       itj=itortyp(itype(j))
+       itk=itype2loc(itype(k))
+       itl=itype2loc(itype(l))
+       itj=itype2loc(itype(j))
        eello5_1=0.0d0
        eello5_2=0.0d0
        eello5_3=0.0d0
@@@ -9501,7 -9536,7 +9536,7 @@@ C Cartesian gradien
  c      goto 1112
  c1111  continue
  C Contribution from graph II 
-       call transpose2(EE(1,1,itk),auxmat(1,1))
+       call transpose2(EE(1,1,k),auxmat(1,1))
        call matmat2(auxmat(1,1),AEA(1,1,1),pizda(1,1))
        vv(1)=pizda(1,1)+pizda(2,2)
        vv(2)=pizda(2,1)-pizda(1,2)
@@@ -9582,7 -9617,7 +9617,7 @@@ C Cartesian gradien
  cd        goto 1112
  C Contribution from graph IV
  cd1110    continue
-         call transpose2(EE(1,1,itl),auxmat(1,1))
+         call transpose2(EE(1,1,l),auxmat(1,1))
          call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
          vv(1)=pizda(1,1)+pizda(2,2)
          vv(2)=pizda(2,1)-pizda(1,2)
@@@ -9655,7 -9690,7 +9690,7 @@@ C Cartesian gradien
  cd        goto 1112
  C Contribution from graph IV
  1110    continue
-         call transpose2(EE(1,1,itj),auxmat(1,1))
+         call transpose2(EE(1,1,j),auxmat(1,1))
          call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
          vv(1)=pizda(1,1)+pizda(2,2)
          vv(2)=pizda(2,1)-pizda(1,2)
@@@ -9952,7 -9987,7 +9987,7 @@@ C       o     o       o     
  C       i             i                                                        C
  C                                                                              C
  CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-       itk=itortyp(itype(k))
+       itk=itype2loc(itype(k))
        s1= scalar2(AEAb1(1,2,imat),CUgb2(1,i))
        s2=-scalar2(AEAb2(1,1,imat),Ug2Db1t(1,k))
        s3= scalar2(AEAb2(1,1,imat),CUgb2(1,k))
@@@ -10244,16 -10279,16 +10279,16 @@@ C 4/7/01 AL Component s1 was removed, b
  C           energy moment and not to the cluster cumulant.
        iti=itortyp(itype(i))
        if (j.lt.nres-1) then
-         itj1=itortyp(itype(j+1))
+         itj1=itype2loc(itype(j+1))
        else
-         itj1=ntortyp
+         itj1=nloctyp
        endif
-       itk=itortyp(itype(k))
-       itk1=itortyp(itype(k+1))
+       itk=itype2loc(itype(k))
+       itk1=itype2loc(itype(k+1))
        if (l.lt.nres-1) then
-         itl1=itortyp(itype(l+1))
+         itl1=itype2loc(itype(l+1))
        else
-         itl1=ntortyp
+         itl1=nloctyp
        endif
  #ifdef MOMENT
        s1=dip(4,jj,i)*dip(4,kk,k)
        s2=0.5d0*scalar2(b1(1,k),auxvec(1))
        call matvec2(AECA(1,1,2),b1(1,l+1),auxvec(1))
        s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
-       call transpose2(EE(1,1,itk),auxmat(1,1))
+       call transpose2(EE(1,1,k),auxmat(1,1))
        call matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
        vv(1)=pizda(1,1)+pizda(2,2)
        vv(2)=pizda(2,1)-pizda(1,2)
  C 4/7/01 AL Component s1 was removed, because it pertains to the respective 
  C           energy moment and not to the cluster cumulant.
  cd      write (2,*) 'eello_graph4: wturn6',wturn6
-       iti=itortyp(itype(i))
-       itj=itortyp(itype(j))
+       iti=itype2loc(itype(i))
+       itj=itype2loc(itype(j))
        if (j.lt.nres-1) then
-         itj1=itortyp(itype(j+1))
+         itj1=itype2loc(itype(j+1))
        else
-         itj1=ntortyp
+         itj1=nloctyp
        endif
-       itk=itortyp(itype(k))
+       itk=itype2loc(itype(k))
        if (k.lt.nres-1) then
-         itk1=itortyp(itype(k+1))
+         itk1=itype2loc(itype(k+1))
        else
-         itk1=ntortyp
+         itk1=nloctyp
        endif
-       itl=itortyp(itype(l))
+       itl=itype2loc(itype(l))
        if (l.lt.nres-1) then
-         itl1=itortyp(itype(l+1))
+         itl1=itype2loc(itype(l+1))
        else
-         itl1=ntortyp
+         itl1=nloctyp
        endif
  cd      write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
  cd      write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
        j=i+4
        k=i+1
        l=i+3
-       iti=itortyp(itype(i))
-       itk=itortyp(itype(k))
-       itk1=itortyp(itype(k+1))
-       itl=itortyp(itype(l))
-       itj=itortyp(itype(j))
+       iti=itype2loc(itype(i))
+       itk=itype2loc(itype(k))
+       itk1=itype2loc(itype(k+1))
+       itl=itype2loc(itype(l))
+       itj=itype2loc(itype(j))
  cd      write (2,*) 'itk',itk,' itk1',itk1,' itl',itl,' itj',itj
  cd      write (2,*) 'i',i,' k',k,' j',j,' l',l
  cd      if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
@@@ -11441,7 -11476,7 +11476,7 @@@ C--------------------------------------
        include "DIMENSIONS"
        integer i,m,n
        double precision x(n+1),y,yy(0:maxvar),aux
- c Tschebyshev polynomial. Note that the first term is omitted 
+ c Tschebyshev polynomial. Note that the first term is omitted
  c m=0: the constant term is included
  c m=1: the constant term is not included
        yy(0)=1.0d0