Merge branch 'multichain' of mmka:unres into lipid
authorAdam Sieradzan <adasko@piasek4.chem.univ.gda.pl>
Wed, 4 Mar 2015 21:12:29 +0000 (22:12 +0100)
committerAdam Sieradzan <adasko@piasek4.chem.univ.gda.pl>
Wed, 4 Mar 2015 21:12:29 +0000 (22:12 +0100)
1  2 
source/unres/src_MD-M/energy_p_new_barrier.F
source/unres/src_MD-M/parmread.F

@@@ -99,7 -99,6 +99,7 @@@ c      endi
  C 
  C Compute the side-chain and electrostatic interaction energy
  C
 +C      print *,ipot
        goto (101,102,103,104,105,106) ipot
  C Lennard-Jones potential.
    101 call elj(evdw)
@@@ -113,7 -112,6 +113,7 @@@ C Berne-Pechukas potential (dilated LJ
        goto 107
  C Gay-Berne potential (shifted LJ, angular dependence).
    104 call egb(evdw)
 +C      print *,"bylem w egb"
        goto 107
  C Gay-Berne-Vorobjev potential (shifted LJ, angular dependence).
    105 call egbv(evdw)
@@@ -201,7 -199,6 +201,7 @@@ c      print *,"Processor",myrank," com
  C
  C Calculate the SC local energy.
  C
 +C      print *,"TU DOCHODZE?"
        call esc(escloc)
  c      print *,"Processor",myrank," computed USC"
  C
        else
          esccor=0.0d0
        endif
 +C      print *,"PRZED MULIt"
  c      print *,"Processor",myrank," computed Usccorr"
  C 
  C 12/1/95 Multi-body terms
@@@ -265,14 -261,6 +265,14 @@@ C  after the equilibration tim
           Uconst=0.0d0
           Uconst_back=0.0d0
        endif
 +C 01/27/2015 added by adasko
 +C the energy component below is energy transfer into lipid environment 
 +C based on partition function
 +C      print *,"przed lipidami"
 +      if (wliptran.gt.0) then
 +        call Eliptransfer(eliptran)
 +      endif
 +C      print *,"za lipidami"
  #ifdef TIMING
        time_enecalc=time_enecalc+MPI_Wtime()-time00
  #endif
        energia(17)=estr
        energia(20)=Uconst+Uconst_back
        energia(21)=esccor
 +      energia(22)=eliptran
  c    Here are the energies showed per procesor if the are more processors 
  c    per molecule then we sum it up in sum_energy subroutine 
  c      print *," Processor",myrank," calls SUM_ENERGY"
@@@ -406,21 -393,20 +406,21 @@@ cMS$ATTRIBUTES C ::  proc_pro
        estr=energia(17)
        Uconst=energia(20)
        esccor=energia(21)
 +      eliptran=energia(22)
  #ifdef SPLITELE
        etot=wsc*evdw+wscp*evdw2+welec*ees+wvdwpp*evdw1
       & +wang*ebe+wtor*etors+wscloc*escloc
       & +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5
       & +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3
       & +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
 -     & +wbond*estr+Uconst+wsccor*esccor
 +     & +wbond*estr+Uconst+wsccor*esccor+wliptran*eliptran
  #else
        etot=wsc*evdw+wscp*evdw2+welec*(ees+evdw1)
       & +wang*ebe+wtor*etors+wscloc*escloc
       & +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5
       & +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3
       & +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
 -     & +wbond*estr+Uconst+wsccor*esccor
 +     & +wbond*estr+Uconst+wsccor*esccor+wliptran*eliptran
  #endif
        energia(0)=etot
  c detecting NaNQ
@@@ -457,9 -443,8 +457,9 @@@ cMS$ATTRIBUTES C ::  proc_pro
  #ifdef MPI
        include 'mpif.h'
  #endif
 -      double precision gradbufc(3,maxres),gradbufx(3,maxres),
 -     &  glocbuf(4*maxres),gradbufc_sum(3,maxres),gloc_scbuf(3,maxres)
 +      double precision gradbufc(3,-1:maxres),gradbufx(3,-1:maxres),
 +     & glocbuf(4*maxres),gradbufc_sum(3,-1:maxres)
 +     & ,gloc_scbuf(3,-1:maxres)
        include 'COMMON.SETUP'
        include 'COMMON.IOUNITS'
        include 'COMMON.FFIELD'
@@@ -512,7 -497,7 +512,7 @@@ c      endd
        call flush(iout)
  #endif
  #ifdef SPLITELE
 -      do i=1,nct
 +      do i=0,nct
          do j=1,3
            gradbufc(j,i)=wsc*gvdwc(j,i)+
       &                wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+
       &                wcorr6*gradcorr6_long(j,i)+
       &                wturn6*gcorr6_turn_long(j,i)+
       &                wstrain*ghpbc(j,i)
 +     &                +wliptran*gliptranc(j,i)
 +
          enddo
        enddo 
  #else
 -      do i=1,nct
 +      do i=0,nct
          do j=1,3
            gradbufc(j,i)=wsc*gvdwc(j,i)+
       &                wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+
       &                wcorr6*gradcorr6_long(j,i)+
       &                wturn6*gcorr6_turn_long(j,i)+
       &                wstrain*ghpbc(j,i)
 +     &                +wliptran*gliptranc(j,i)
          enddo
        enddo 
  #endif
        enddo
        call flush(iout)
  #endif
 -      do i=1,nres
 +      do i=0,nres
          do j=1,3
            gradbufc_sum(j,i)=gradbufc(j,i)
          enddo
@@@ -597,7 -579,7 +597,7 @@@ c      endd
        do j=1,3
          gradbufc(j,nres-1)=gradbufc_sum(j,nres)
        enddo
 -      do i=nres-2,nnt,-1
 +      do i=nres-2,-1,-1
          do j=1,3
            gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
          enddo
        enddo
        call flush(iout)
  #endif
 -      do i=1,nres
 +      do i=-1,nres
          do j=1,3
            gradbufc_sum(j,i)=gradbufc(j,i)
            gradbufc(j,i)=0.0d0
        do j=1,3
          gradbufc(j,nres-1)=gradbufc_sum(j,nres)
        enddo
 -      do i=nres-2,nnt,-1
 +      do i=nres-2,-1,-1
          do j=1,3
            gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
          enddo
@@@ -655,7 -637,7 +655,7 @@@ c      endd
        do k=1,3
          gradbufc(k,nres)=0.0d0
        enddo
 -      do i=1,nct
 +      do i=-1,nct
          do j=1,3
  #ifdef SPLITELE
            gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+
       &                wturn6*gcorr6_turn(j,i)+
       &                wsccor*gsccorc(j,i)
       &               +wscloc*gscloc(j,i)
 +     &               +wliptran*gliptranc(j,i)
  #else
            gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+
       &                wel_loc*gel_loc(j,i)+
       &                wturn6*gcorr6_turn(j,i)+
       &                wsccor*gsccorc(j,i)
       &               +wscloc*gscloc(j,i)
 +     &               +wliptran*gliptranc(j,i)
  #endif
            gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
       &                  wbond*gradbx(j,i)+
       &                  wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
       &                  wsccor*gsccorx(j,i)
       &                 +wscloc*gsclocx(j,i)
 +     &                 +wliptran*gliptranx(j,i)
          enddo
        enddo 
  #ifdef DEBUG
@@@ -992,7 -971,6 +992,7 @@@ C--------------------------------------
        estr=energia(17)
        Uconst=energia(20)
        esccor=energia(21)
 +      eliptran=energia(22)
  #ifdef SPLITELE
        write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,evdw1,wvdwpp,
       &  estr,wbond,ebe,wang,
       &  ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
       &  eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccor,
       &  edihcnstr,ebr*nss,
 -     &  Uconst,etot
 +     &  Uconst,eliptran,wliptran,etot
     10 format (/'Virtual-chain energies:'//
       & 'EVDW=  ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
       & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
       & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
       & 'ESS=   ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
       & 'UCONST= ',1pE16.6,' (Constraint energy)'/ 
 +     & 'ELT=',1pE16.6, ' WEIGHT=',1pD16.6,' (Lipid transfer energy)'/
       & 'ETOT=  ',1pE16.6,' (total)')
  #else
        write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,
       &  ecorr,wcorr,
       &  ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
       &  eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccro,edihcnstr,
 -     &  ebr*nss,Uconst,etot
 +     &  ebr*nss,Uconst,eliptran,wliptran,etot
     10 format (/'Virtual-chain energies:'//
       & 'EVDW=  ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
       & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
       & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
       & 'ESS=   ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
       & 'UCONST=',1pE16.6,' (Constraint energy)'/ 
 +     & 'ELT=',1pE16.6, ' WEIGHT=',1pD16.6,' (Lipid transfer energy)'/
       & 'ETOT=  ',1pE16.6,' (total)')
  #endif
        return
@@@ -1112,14 -1088,13 +1112,14 @@@ C Change 12/1/95 to calculate four-bod
  c           write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
              eps0ij=eps(itypi,itypj)
              fac=rrij**expon2
 -            e1=fac*fac*aa(itypi,itypj)
 -            e2=fac*bb(itypi,itypj)
 +C have you changed here?
 +            e1=fac*fac*aa
 +            e2=fac*bb
              evdwij=e1+e2
  cd          sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
  cd          epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
  cd          write (iout,'(2(a3,i3,2x),6(1pd12.4)/2(3(1pd12.4),5x)/)')
 -cd   &        restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
 +cd   &        restyp(itypi),i,restyp(itypj),j,a(itypi,itypj),
  cd   &        bb(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,epsi,sigm,
  cd   &        (c(k,i),k=1,3),(c(k,j),k=1,3)
              evdw=evdw+evdwij
              rij=1.0D0/r_inv_ij 
              r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
              fac=r_shift_inv**expon
 -            e1=fac*fac*aa(itypi,itypj)
 -            e2=fac*bb(itypi,itypj)
 +C have you changed here?
 +            e1=fac*fac*aa
 +            e2=fac*bb
              evdwij=e_augm+e1+e2
  cd          sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
  cd          epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
@@@ -1391,18 -1365,17 +1391,18 @@@ C Calculate the angle-dependent terms o
              call sc_angular
  C Calculate whole angle-dependent part of epsilon and contributions
  C to its derivatives
 +C have you changed here?
              fac=(rrij*sigsq)**expon2
 -            e1=fac*fac*aa(itypi,itypj)
 -            e2=fac*bb(itypi,itypj)
 +            e1=fac*fac*aa
 +            e2=fac*bb
              evdwij=eps1*eps2rt*eps3rt*(e1+e2)
              eps2der=evdwij*eps3rt
              eps3der=evdwij*eps2rt
              evdwij=evdwij*eps2rt*eps3rt
              evdw=evdw+evdwij
              if (lprn) then
 -            sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
 -            epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
 +            sigm=dabs(aa/bb)**(1.0D0/6.0D0)
 +            epsi=bb**2/aa
  cd            write (iout,'(2(a3,i3,2x),15(0pf7.3))')
  cd     &        restyp(itypi),i,restyp(itypj),j,
  cd     &        epsi,sigm,chi1,chi2,chip1,chip2,
        integer xshift,yshift,zshift
        evdw=0.0D0
  ccccc      energy_dec=.false.
 -c     print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
 +C      print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
        evdw=0.0D0
        lprn=.false.
  c     if (icall.eq.0) lprn=.false.
@@@ -1500,35 -1473,6 +1500,35 @@@ c        endi
            if (yi.lt.0) yi=yi+boxysize
            zi=mod(zi,boxzsize)
            if (zi.lt.0) zi=zi+boxzsize
 +C define scaling factor for lipids
 +
 +C        if (positi.le.0) positi=positi+boxzsize
 +C        print *,i
 +C first for peptide groups
 +c for each residue check if it is in lipid or lipid water border area
 +       if ((zi.gt.bordlipbot)
 +     &.and.(zi.lt.bordliptop)) then
 +C the energy transfer exist
 +        if (zi.lt.buflipbot) then
 +C what fraction I am in
 +         fracinbuf=1.0d0-
 +     &        ((zi-bordlipbot)/lipbufthick)
 +C lipbufthick is thickenes of lipid buffore
 +         sslipi=sscalelip(fracinbuf)
 +         ssgradlipi=-sscagradlip(fracinbuf)/lipbufthick
 +        elseif (zi.gt.bufliptop) then
 +         fracinbuf=1.0d0-((bordliptop-zi)/lipbufthick)
 +         sslipi=sscalelip(fracinbuf)
 +         ssgradlipi=sscagradlip(fracinbuf)/lipbufthick
 +        else
 +         sslipi=1.0d0
 +         ssgradlipi=0.0
 +        endif
 +       else
 +         sslipi=0.0d0
 +         ssgradlipi=0.0
 +       endif
 +
  C          xi=xi+xshift*boxxsize
  C          yi=yi+yshift*boxysize
  C          zi=zi+zshift*boxzsize
@@@ -1613,36 -1557,6 +1613,36 @@@ c        endi
            if (yj.lt.0) yj=yj+boxysize
            zj=mod(zj,boxzsize)
            if (zj.lt.0) zj=zj+boxzsize
 +       if ((zj.gt.bordlipbot)
 +     &.and.(zj.lt.bordliptop)) then
 +C the energy transfer exist
 +        if (zj.lt.buflipbot) then
 +C what fraction I am in
 +         fracinbuf=1.0d0-
 +     &        ((zj-bordlipbot)/lipbufthick)
 +C lipbufthick is thickenes of lipid buffore
 +         sslipj=sscalelip(fracinbuf)
 +         ssgradlipj=-sscagradlip(fracinbuf)/lipbufthick
 +        elseif (zi.gt.bufliptop) then
 +         fracinbuf=1.0d0-((bordliptop-zj)/lipbufthick)
 +         sslipj=sscalelip(fracinbuf)
 +         ssgradlipj=sscagradlip(fracinbuf)/lipbufthick
 +        else
 +         sslipj=1.0d0
 +         ssgradlipj=0.0
 +        endif
 +       else
 +         sslipj=0.0d0
 +         ssgradlipj=0.0
 +       endif
 +      aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0
 +     &  +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
 +      bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0
 +     &  +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
 +      if (aa.ne.aa_aq(itypi,itypj)) write(63,'(2e10.5)')
 +     &(aa-aa_aq(itypi,itypj)),(bb-bb_aq(itypi,itypj))
 +C      if (ssgradlipj.gt.0.0d0) print *,"??WTF??"
 +      print *,sslipi,sslipj,bordlipbot,zi,zj
        dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
        xj_safe=xj
        yj_safe=yj
@@@ -1711,24 -1625,18 +1711,24 @@@ cd     &        rij_shift,1.0D0/rij,sig
  c---------------------------------------------------------------
              rij_shift=1.0D0/rij_shift 
              fac=rij_shift**expon
 -            e1=fac*fac*aa(itypi,itypj)
 -            e2=fac*bb(itypi,itypj)
 +C here to start with
 +C            if (c(i,3).gt.
 +            faclip=fac
 +            e1=fac*fac*aa
 +            e2=fac*bb
              evdwij=eps1*eps2rt*eps3rt*(e1+e2)
              eps2der=evdwij*eps3rt
              eps3der=evdwij*eps2rt
 +C       write(63,'(2i3,2e10.3,2f10.5)') i,j,aa,bb, evdwij,
 +C     &((sslipi+sslipj)/2.0d0+
 +C     &(2.0d0-sslipi-sslipj)/2.0d0)
  c            write (iout,*) "sigsq",sigsq," sig",sig," eps2rt",eps2rt,
  c     &        " eps3rt",eps3rt," eps1",eps1," e1",e1," e2",e2
              evdwij=evdwij*eps2rt*eps3rt
              evdw=evdw+evdwij*sss
              if (lprn) then
 -            sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
 -            epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
 +            sigm=dabs(aa/bb)**(1.0D0/6.0D0)
 +            epsi=bb**2/aa
              write (iout,'(2(a3,i3,2x),17(0pf7.3))')
       &        restyp(itypi),i,restyp(itypj),j,
       &        epsi,sigm,chi1,chi2,chip1,chip2,
@@@ -1750,20 -1658,11 +1750,20 @@@ c     &      evdwij,fac,sigma(itypi,ity
              fac=fac+evdwij/sss*sssgrad/sigma(itypi,itypj)*rij
  c            fac=0.0d0
  C Calculate the radial part of the gradient
 +            gg_lipi(3)=eps1*(eps2rt*eps2rt)
 +     &*(eps3rt*eps3rt)*sss/2.0d0*(faclip*faclip*
 +     & (aa_lip(itypi,itypj)-aa_aq(itypi,itypj))
 +     &+faclip*(bb_lip(itypi,itypj)-bb_aq(itypi,itypj)))
 +            gg_lipj(3)=ssgradlipj*gg_lipi(3)
 +            gg_lipi(3)=gg_lipi(3)*ssgradlipi
 +C            gg_lipi(3)=0.0d0
 +C            gg_lipj(3)=0.0d0
              gg(1)=xj*fac
              gg(2)=yj*fac
              gg(3)=zj*fac
  C Calculate angular part of the gradient.
              call sc_grad
 +            endif
              ENDIF    ! dyn_ss            
            enddo      ! j
          enddo        ! iint
@@@ -1807,41 -1706,6 +1807,41 @@@ c     if (icall.eq.0) lprn=.true
          xi=c(1,nres+i)
          yi=c(2,nres+i)
          zi=c(3,nres+i)
 +          xi=mod(xi,boxxsize)
 +          if (xi.lt.0) xi=xi+boxxsize
 +          yi=mod(yi,boxysize)
 +          if (yi.lt.0) yi=yi+boxysize
 +          zi=mod(zi,boxzsize)
 +          if (zi.lt.0) zi=zi+boxzsize
 +C define scaling factor for lipids
 +
 +C        if (positi.le.0) positi=positi+boxzsize
 +C        print *,i
 +C first for peptide groups
 +c for each residue check if it is in lipid or lipid water border area
 +       if ((zi.gt.bordlipbot)
 +     &.and.(zi.lt.bordliptop)) then
 +C the energy transfer exist
 +        if (zi.lt.buflipbot) then
 +C what fraction I am in
 +         fracinbuf=1.0d0-
 +     &        ((positi-bordlipbot)/lipbufthick)
 +C lipbufthick is thickenes of lipid buffore
 +         sslipi=sscalelip(fracinbuf)
 +         ssgradlipi=-sscagradlip(fracinbuf)/lipbufthick
 +        elseif (zi.gt.bufliptop) then
 +         fracinbuf=1.0d0-((bordliptop-positi)/lipbufthick)
 +         sslipi=sscalelip(fracinbuf)
 +         ssgradlipi=sscagradlip(fracinbuf)/lipbufthick
 +        else
 +         sslipi=1.0d0
 +         ssgradlipi=0.0
 +        endif
 +       else
 +         sslipi=0.0d0
 +         ssgradlipi=0.0
 +       endif
 +
          dxi=dc_norm(1,nres+i)
          dyi=dc_norm(2,nres+i)
          dzi=dc_norm(3,nres+i)
@@@ -1878,74 -1742,9 +1878,74 @@@ c           chip12=0.0D
  c           alf1=0.0D0
  c           alf2=0.0D0
  c           alf12=0.0D0
 -            xj=c(1,nres+j)-xi
 -            yj=c(2,nres+j)-yi
 -            zj=c(3,nres+j)-zi
 +C            xj=c(1,nres+j)-xi
 +C            yj=c(2,nres+j)-yi
 +C            zj=c(3,nres+j)-zi
 +          xj=mod(xj,boxxsize)
 +          if (xj.lt.0) xj=xj+boxxsize
 +          yj=mod(yj,boxysize)
 +          if (yj.lt.0) yj=yj+boxysize
 +          zj=mod(zj,boxzsize)
 +          if (zj.lt.0) zj=zj+boxzsize
 +       if ((zj.gt.bordlipbot)
 +     &.and.(zj.lt.bordliptop)) then
 +C the energy transfer exist
 +        if (zj.lt.buflipbot) then
 +C what fraction I am in
 +         fracinbuf=1.0d0-
 +     &        ((positi-bordlipbot)/lipbufthick)
 +C lipbufthick is thickenes of lipid buffore
 +         sslipj=sscalelip(fracinbuf)
 +         ssgradlipj=-sscagradlip(fracinbuf)/lipbufthick
 +        elseif (zi.gt.bufliptop) then
 +         fracinbuf=1.0d0-((bordliptop-positi)/lipbufthick)
 +         sslipj=sscalelip(fracinbuf)
 +         ssgradlipj=sscagradlip(fracinbuf)/lipbufthick
 +        else
 +         sslipj=1.0d0
 +         ssgradlipj=0.0
 +        endif
 +       else
 +         sslipj=0.0d0
 +         ssgradlipj=0.0
 +       endif
 +      aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0
 +     &  +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
 +      bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0
 +     &  +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
 +C      if (aa.ne.aa_aq(itypi,itypj)) write(63,'2e10.5') 
 +C     &(aa-aa_aq(itypi,itypj)),(bb-bb_aq(itypi,itypj))
 +      dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
 +      xj_safe=xj
 +      yj_safe=yj
 +      zj_safe=zj
 +      subchap=0
 +      do xshift=-1,1
 +      do yshift=-1,1
 +      do zshift=-1,1
 +          xj=xj_safe+xshift*boxxsize
 +          yj=yj_safe+yshift*boxysize
 +          zj=zj_safe+zshift*boxzsize
 +          dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
 +          if(dist_temp.lt.dist_init) then
 +            dist_init=dist_temp
 +            xj_temp=xj
 +            yj_temp=yj
 +            zj_temp=zj
 +            subchap=1
 +          endif
 +       enddo
 +       enddo
 +       enddo
 +       if (subchap.eq.1) then
 +          xj=xj_temp-xi
 +          yj=yj_temp-yi
 +          zj=zj_temp-zi
 +       else
 +          xj=xj_safe-xi
 +          yj=yj_safe-yi
 +          zj=zj_safe-zi
 +       endif
              dxj=dc_norm(1,nres+j)
              dyj=dc_norm(2,nres+j)
              dzj=dc_norm(3,nres+j)
@@@ -1966,8 -1765,8 +1966,8 @@@ C I hate to put IF's in the loops, but 
  c---------------------------------------------------------------
              rij_shift=1.0D0/rij_shift 
              fac=rij_shift**expon
 -            e1=fac*fac*aa(itypi,itypj)
 -            e2=fac*bb(itypi,itypj)
 +            e1=fac*fac*aa
 +            e2=fac*bb
              evdwij=eps1*eps2rt*eps3rt*(e1+e2)
              eps2der=evdwij*eps3rt
              eps3der=evdwij*eps2rt
              evdwij=evdwij*eps2rt*eps3rt
              evdw=evdw+evdwij+e_augm
              if (lprn) then
 -            sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
 -            epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
 +            sigm=dabs(aa/bb)**(1.0D0/6.0D0)
 +            epsi=bb**2/aa
              write (iout,'(2(a3,i3,2x),17(0pf7.3))')
       &        restyp(itypi),i,restyp(itypj),j,
       &        epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),
@@@ -1991,7 -1790,6 +1991,7 @@@ C Calculate gradient components
              fac=-expon*(e1+evdwij)*rij_shift
              sigder=fac*sigder
              fac=rij*fac-2*expon*rrij*e_augm
 +            fac=fac+evdwij/sss*sssgrad/sigma(itypi,itypj)*rij
  C Calculate the radial part of the gradient
              gg(1)=xj*fac
              gg(2)=yj*fac
@@@ -2102,10 -1900,10 +2102,10 @@@ c      write (iout,*) "eom1",eom1," eom
        enddo 
  c      write (iout,*) "gg",(gg(k),k=1,3)
        do k=1,3
 -        gvdwx(k,i)=gvdwx(k,i)-gg(k)
 +        gvdwx(k,i)=gvdwx(k,i)-gg(k)+gg_lipi(k)
       &            +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
       &            +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv*sss
 -        gvdwx(k,j)=gvdwx(k,j)+gg(k)
 +        gvdwx(k,j)=gvdwx(k,j)+gg(k)+gg_lipj(k)
       &            +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
       &            +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv*sss
  c        write (iout,*)(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
@@@ -2122,8 -1920,8 +2122,8 @@@ cgrad          gvdwc(l,k)=gvdwc(l,k)+gg
  cgrad        enddo
  cgrad      enddo
        do l=1,3
 -        gvdwc(l,i)=gvdwc(l,i)-gg(l)
 -        gvdwc(l,j)=gvdwc(l,j)+gg(l)
 +        gvdwc(l,i)=gvdwc(l,i)-gg(l)+gg_lipi(l)
 +        gvdwc(l,j)=gvdwc(l,j)+gg(l)+gg_lipj(l)
        enddo
        return
        end
  C Compute the virtual-bond-torsional-angle dependent quantities needed
  C to calculate the el-loc multibody terms of various order.
  C
+ c      write(iout,*) 'nphi=',nphi,nres
  #ifdef PARMAT
        do i=ivec_start+2,ivec_end+2
  #else
        do i=3,nres+1
  #endif
+ #ifdef NEWCORR
+         if (i.gt. nnt+2 .and. i.lt.nct+2) then
+           iti = itortyp(itype(i-2))
+         else
+           iti=ntortyp+1
+         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))
+         else
+           iti1=ntortyp+1
+         endif
+ c        write(iout,*),i
+         b1(1,i-2)=bnew1(1,1,iti)*dsin(theta(i-1)/2.0)
+      &           +bnew1(2,1,iti)*dsin(theta(i-1))
+      &           +bnew1(3,1,iti)*dcos(theta(i-1)/2.0)
+         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)
+      &           +bnew2(2,1,iti)*dsin(theta(i-1))
+      &           +bnew2(3,1,iti)*dcos(theta(i-1)/2.0)
+ 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
+      &             +bnew2(2,1,iti)*dcos(theta(i-1))
+      &             -bnew2(3,1,iti)*dsin(theta(i-1)/2.0d0)/2.0d0
+ c        if (ggb1(1,i).eq.0.0d0) then
+ c        write(iout,*) 'i=',i,ggb1(1,i),
+ c     &bnew1(1,1,iti)*cos(theta(i)/2.0)/2.0,
+ c     &bnew1(2,1,iti)*cos(theta(i)),
+ c     &bnew1(3,1,iti)*sin(theta(i)/2.0)/2.0
+ c        endif
+         b1(2,i-2)=bnew1(1,2,iti)
+         gtb1(2,i-2)=0.0
+         b2(2,i-2)=bnew2(1,2,iti)
+         gtb2(2,i-2)=0.0
+         EE(1,1,i-2)=eenew(1,iti)*dcos(theta(i-1))
+         EE(1,2,i-2)=eeold(1,2,iti)
+         EE(2,1,i-2)=eeold(2,1,iti)
+         EE(2,2,i-2)=eeold(2,2,iti)
+         gtEE(1,1,i-2)=-eenew(1,iti)*dsin(theta(i-1))
+         gtEE(1,2,i-2)=0.0d0
+         gtEE(2,2,i-2)=0.0d0
+         gtEE(2,1,i-2)=0.0d0
+ c        EE(2,2,iti)=0.0d0
+ c        EE(1,2,iti)=0.5d0*eenew(1,iti)
+ c        EE(2,1,iti)=0.5d0*eenew(1,iti)
+ c        b1(2,iti)=bnew1(1,2,iti)*sin(alpha(i))*sin(beta(i))
+ c        b2(2,iti)=bnew2(1,2,iti)*sin(alpha(i))*sin(beta(i))
+        b1tilde(1,i-2)=b1(1,i-2)
+        b1tilde(2,i-2)=-b1(2,i-2)
+        b2tilde(1,i-2)=b2(1,i-2)
+        b2tilde(2,i-2)=-b2(2,i-2)
+ c       write (iout,*) 'i=',i-2,gtb1(2,i-2),gtb1(1,i-2)
+ c       write(iout,*)  'b1=',b1(1,i-2)
+ c       write (iout,*) 'theta=', theta(i-1)
+        enddo
+ #ifdef PARMAT
+       do i=ivec_start+2,ivec_end+2
+ #else
+       do i=3,nres+1
+ #endif
+ #endif
          if (i .lt. nres+1) then
            sin1=dsin(phi(i))
            cos1=dcos(phi(i))
@@@ -2723,8 -2588,18 +2790,18 @@@ cd        write (iout,*) 'b2',b2(:,iti
  cd        write (iout,*) 'Ug',Ug(:,:,i-2)
  c        if (i .gt. iatel_s+2) then
          if (i .gt. nnt+2) then
-           call matvec2(Ug(1,1,i-2),b2(1,iti),Ub2(1,i-2))
-           call matmat2(EE(1,1,iti),Ug(1,1,i-2),EUg(1,1,i-2))
+           call matvec2(Ug(1,1,i-2),b2(1,i-2),Ub2(1,i-2))
+ #ifdef NEWCORR
+           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)
+           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",
+ c     &    eug(1,1,i-2),eug(1,2,i-2),eug(2,1,i-2),
+ c     &    eug(2,2,i-2)
            if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) 
       &    then
            call matmat2(CC(1,1,iti),Ug(1,1,i-2),CUg(1,1,i-2))
              enddo
            enddo
          endif
-         call matvec2(Ugder(1,1,i-2),b2(1,iti),Ub2der(1,i-2))
-         call matmat2(EE(1,1,iti),Ugder(1,1,i-2),EUgder(1,1,i-2))
+         call matvec2(Ugder(1,1,i-2),b2(1,i-2),Ub2der(1,i-2))
+         call matmat2(EE(1,1,i-2),Ugder(1,1,i-2),EUgder(1,1,i-2))
          do k=1,2
            muder(k,i-2)=Ub2der(k,i-2)
          enddo
@@@ -2762,9 -2637,9 +2839,9 @@@ c        if (i.gt. iatel_s+1 .and. i.lt
            iti1=ntortyp
          endif
          do k=1,2
-           mu(k,i-2)=Ub2(k,i-2)+b1(k,iti1)
+           mu(k,i-2)=Ub2(k,i-2)+b1(k,i-1)
          enddo
- cd        write (iout,*) 'mu ',mu(:,i-2)
+ c        write (iout,*) 'mu ',mu(:,i-2),i-2
  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)
          call matvec2(Ctilde(1,1,iti1),obrot_der(1,i-2),Ctobrder(1,i-2))
          call matvec2(Dtilde(1,1,iti),obrot2_der(1,i-2),Dtobr2der(1,i-2))
  C Vectors and matrices dependent on a single virtual-bond dihedral.
-         call matvec2(DD(1,1,iti),b1tilde(1,iti1),auxvec(1))
+         call matvec2(DD(1,1,iti),b1tilde(1,i-1),auxvec(1))
          call matvec2(Ug2(1,1,i-2),auxvec(1),Ug2Db1t(1,i-2)) 
          call matvec2(Ug2der(1,1,i-2),auxvec(1),Ug2Db1tder(1,i-2)) 
          call matvec2(CC(1,1,iti1),Ub2(1,i-2),CUgb2(1,i-2))
        dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
       &          erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
        double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
-      &    aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4)
+      &    aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4),gmuij(4)
        common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
       &    dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
       &    num_conti,j1,j2
@@@ -3173,8 -3048,6 +3250,8 @@@ 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        write(iout,*) "tu jest i",i
          if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
       &  .or. itype(i+2).eq.ntyp1
       &  .or. itype(i+3).eq.ntyp1
          num_cont_hb(i)=num_conti
        enddo
        do i=iturn4_start,iturn4_end
 +        if (i.le.1) cycle
          if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
       &    .or. itype(i+3).eq.ntyp1
       &    .or. itype(i+4).eq.ntyp1
@@@ -3252,6 -3124,7 +3329,7 @@@ c        endi
            if (zmedi.lt.0) zmedi=zmedi+boxzsize
  
          num_conti=num_cont_hb(i)
+ c        write(iout,*) "JESTEM W PETLI"
          call eelecij(i,i+3,ees,evdw1,eel_loc)
          if (wturn4.gt.0.0d0 .and. itype(i+2).ne.ntyp1) 
       &   call eturn4(i,eello_turn4)
  c Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
  c
        do i=iatel_s,iatel_e
 +        if (i.le.1) cycle
          if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
       &  .or. itype(i+2).eq.ntyp1
       &  .or. itype(i-1).eq.ntyp1
@@@ -3318,8 -3190,7 +3396,8 @@@ c        endi
  c        write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
          num_conti=num_cont_hb(i)
          do j=ielstart(i),ielend(i)
 -c          write (iout,*) i,j,itype(i),itype(j)
 +C          write (iout,*) i,j
 +         if (j.le.1) cycle
            if (itype(j).eq.ntyp1.or. itype(j+1).eq.ntyp1
       & .or.itype(j+2).eq.ntyp1
       & .or.itype(j-1).eq.ntyp1
@@@ -3366,7 -3237,8 +3444,8 @@@ C--------------------------------------
        dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
       &          erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
        double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
-      &    aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4)
+      &    aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4),gmuij1(4),gmuji1(4),
+      &    gmuij2(4),gmuji2(4)
        common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
       &    dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
       &    num_conti,j1,j2
@@@ -3667,6 -3539,7 +3746,7 @@@ C   Fourier series in the angles lambda
  C   Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
  C   are computed for EVERY pair of non-contiguous peptide groups.
  C
            if (j.lt.nres-1) then
              j1=j+1
              j2=j-1
              j2=j-2
            endif
            kkk=0
+           lll=0
            do k=1,2
              do l=1,2
                kkk=kkk+1
                muij(kkk)=mu(k,i)*mu(l,j)
+ c              write(iout,*) 'mumu=', mu(k,i),mu(l,j),i,j,k,l
+ #ifdef NEWCORR
+              gmuij1(kkk)=gtb1(k,i+1)*mu(l,j)
+ c             write(iout,*) 'k=',k,i,gtb1(k,i+1),gtb1(k,i+1)*mu(l,j)
+              gmuij2(kkk)=gUb2(k,i)*mu(l,j)
+              gmuji1(kkk)=mu(k,i)*gtb1(l,j+1)
+ c             write(iout,*) 'l=',l,j,gtb1(l,j+1),gtb1(l,j+1)*mu(k,i)
+              gmuji2(kkk)=mu(k,i)*gUb2(l,j)
+ #endif
              enddo
            enddo  
  cd         write (iout,*) 'EELEC: i',i,' j',j
@@@ -3846,6 -3729,51 +3936,51 @@@ C Contribution to the local-electrostat
       &     +a33*muij(4)
  c          write (iout,*) 'i',i,' j',j,itype(i),itype(j),
  c     &                     ' eel_loc_ij',eel_loc_ij
+ c          write(iout,*) 'muije=',muij(1),muij(2),muij(3),muij(4)
+ C Calculate patrial derivative for theta angle
+ #ifdef NEWCORR
+          geel_loc_ij=a22*gmuij1(1)
+      &     +a23*gmuij1(2)
+      &     +a32*gmuij1(3)
+      &     +a33*gmuij1(4)         
+ c         write(iout,*) "derivative over thatai"
+ c         write(iout,*) a22*gmuij1(1), a23*gmuij1(2) ,a32*gmuij1(3),
+ c     &   a33*gmuij1(4) 
+          gloc(nphi+i,icg)=gloc(nphi+i,icg)+
+      &      geel_loc_ij*wel_loc
+ c         write(iout,*) "derivative over thatai-1" 
+ c         write(iout,*) a22*gmuij2(1), a23*gmuij2(2) ,a32*gmuij2(3),
+ c     &   a33*gmuij2(4)
+          geel_loc_ij=
+      &     a22*gmuij2(1)
+      &     +a23*gmuij2(2)
+      &     +a32*gmuij2(3)
+      &     +a33*gmuij2(4)
+          gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
+      &      geel_loc_ij*wel_loc
+ c  Derivative over j residue
+          geel_loc_ji=a22*gmuji1(1)
+      &     +a23*gmuji1(2)
+      &     +a32*gmuji1(3)
+      &     +a33*gmuji1(4)
+ c         write(iout,*) "derivative over thataj" 
+ c         write(iout,*) a22*gmuji1(1), a23*gmuji1(2) ,a32*gmuji1(3),
+ c     &   a33*gmuji1(4)
+         gloc(nphi+j,icg)=gloc(nphi+j,icg)+
+      &      geel_loc_ji*wel_loc
+          geel_loc_ji=
+      &     +a22*gmuji2(1)
+      &     +a23*gmuji2(2)
+      &     +a32*gmuji2(3)
+      &     +a33*gmuji2(4)
+ c         write(iout,*) "derivative over thataj-1"
+ c         write(iout,*) a22*gmuji2(1), a23*gmuji2(2) ,a32*gmuji2(3),
+ c     &   a33*gmuji2(4)
+          gloc(nphi+j-1,icg)=gloc(nphi+j-1,icg)+
+      &      geel_loc_ji*wel_loc
+ #endif
+ cd          write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
  
            if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
       &            'eelloc',i,j,eel_loc_ij
@@@ -4099,7 -4027,9 +4234,9 @@@ C Third- and fourth-order contribution
        dimension ggg(3)
        double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
       &  e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
-      &  e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2)
+      &  e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2),gpizda1(2,2),
+      &  gpizda2(2,2),auxgmat1(2,2),auxgmatt1(2,2),
+      &  auxgmat2(2,2),auxgmatt2(2,2)
        double precision agg(3,4),aggi(3,4),aggi1(3,4),
       &    aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
        common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
  CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC   
  cd        call checkint_turn3(i,a_temp,eello_turn3_num)
          call matmat2(EUg(1,1,i+1),EUg(1,1,i+2),auxmat(1,1))
+ c auxalary matices for theta gradient
+ c auxalary matrix for i+1 and constant i+2
+         call matmat2(gtEUg(1,1,i+1),EUg(1,1,i+2),auxgmat1(1,1))
+ c auxalary matrix for i+2 and constant i+1
+         call matmat2(EUg(1,1,i+1),gtEUg(1,1,i+2),auxgmat2(1,1))
          call transpose2(auxmat(1,1),auxmat1(1,1))
+         call transpose2(auxgmat1(1,1),auxgmatt1(1,1))
+         call transpose2(auxgmat2(1,1),auxgmatt2(1,1))
          call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
+         call matmat2(a_temp(1,1),auxgmatt1(1,1),gpizda1(1,1))
+         call matmat2(a_temp(1,1),auxgmatt2(1,1),gpizda2(1,1))
          eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2))
+ C Derivatives in theta
+         gloc(nphi+i,icg)=gloc(nphi+i,icg)
+      &  +0.5d0*(gpizda1(1,1)+gpizda1(2,2))*wturn3
+         gloc(nphi+i+1,icg)=gloc(nphi+i+1,icg)
+      &  +0.5d0*(gpizda2(1,1)+gpizda2(2,2))*wturn3
          if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
       &          'eturn3',i,j,0.5d0*(pizda(1,1)+pizda(2,2))
  cd        write (2,*) 'i,',i,' j',j,'eello_turn3',
@@@ -4199,7 -4144,11 +4351,11 @@@ C Third- and fourth-order contribution
        dimension ggg(3)
        double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
       &  e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
-      &  e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2)
+      &  e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2),auxgvec(2),
+      &  auxgEvec1(2),auxgEvec2(2),auxgEvec3(2),
+      &  gte1t(2,2),gte2t(2,2),gte3t(2,2),
+      &  gte1a(2,2),gtae3(2,2),gtae3e2(2,2), ae3gte2(2,2),
+      &  gtEpizda1(2,2),gtEpizda2(2,2),gtEpizda3(2,2)
        double precision agg(3,4),aggi(3,4),aggi1(3,4),
       &    aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
        common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
  CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC   
  cd        call checkint_turn4(i,a_temp,eello_turn4_num)
  c        write (iout,*) "eturn4 i",i," j",j," j1",j1," j2",j2
+ c        write(iout,*)"WCHODZE W PROGRAM"
          a_temp(1,1)=a22
          a_temp(1,2)=a23
          a_temp(2,1)=a32
@@@ -4230,33 -4180,100 +4387,100 @@@ c        write(iout,*) "iti1",iti1," it
          call transpose2(EUg(1,1,i+1),e1t(1,1))
          call transpose2(Eug(1,1,i+2),e2t(1,1))
          call transpose2(Eug(1,1,i+3),e3t(1,1))
+ C Ematrix derivative in theta
+         call transpose2(gtEUg(1,1,i+1),gte1t(1,1))
+         call transpose2(gtEug(1,1,i+2),gte2t(1,1))
+         call transpose2(gtEug(1,1,i+3),gte3t(1,1))
          call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
+ c       eta1 in derivative theta
+         call matmat2(gte1t(1,1),a_temp(1,1),gte1a(1,1))
          call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
-         s1=scalar2(b1(1,iti2),auxvec(1))
+ c       auxgvec is derivative of Ub2 so i+3 theta
+         call matvec2(e1a(1,1),gUb2(1,i+3),auxgvec(1)) 
+ c       auxalary matrix of E i+1
+         call matvec2(gte1a(1,1),Ub2(1,i+3),auxgEvec1(1))
+ c        s1=0.0
+ c        gs1=0.0    
+         s1=scalar2(b1(1,i+2),auxvec(1))
+ c derivative of theta i+2 with constant i+3
+         gs23=scalar2(gtb1(1,i+2),auxvec(1))
+ c derivative of theta i+2 with constant i+2
+         gs32=scalar2(b1(1,i+2),auxgvec(1))
+ c derivative of E matix in theta of i+1
+         gsE13=scalar2(b1(1,i+2),auxgEvec1(1))
          call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
+ c       ea31 in derivative theta
+         call matmat2(a_temp(1,1),gte3t(1,1),gtae3(1,1))
          call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1)) 
-         s2=scalar2(b1(1,iti1),auxvec(1))
+ c auxilary matrix auxgvec of Ub2 with constant E matirx
+         call matvec2(ae3(1,1),gUb2(1,i+2),auxgvec(1))
+ c auxilary matrix auxgEvec1 of E matix with Ub2 constant
+         call matvec2(gtae3(1,1),Ub2(1,i+2),auxgEvec3(1))
+ c        s2=0.0
+ c        gs2=0.0
+         s2=scalar2(b1(1,i+1),auxvec(1))
+ c derivative of theta i+1 with constant i+3
+         gs13=scalar2(gtb1(1,i+1),auxvec(1))
+ c derivative of theta i+2 with constant i+1
+         gs21=scalar2(b1(1,i+1),auxgvec(1))
+ c derivative of theta i+3 with constant i+1
+         gsE31=scalar2(b1(1,i+1),auxgEvec3(1))
+ c        write(iout,*) gs1,gs2,'i=',i,auxgvec(1),gUb2(1,i+2),gtb1(1,i+2),
+ c     &  gtb1(1,i+1)
          call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
+ c two derivatives over diffetent matrices
+ c gtae3e2 is derivative over i+3
+         call matmat2(gtae3(1,1),e2t(1,1),gtae3e2(1,1))
+ c ae3gte2 is derivative over i+2
+         call matmat2(ae3(1,1),gte2t(1,1),ae3gte2(1,1))
          call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
+ c three possible derivative over theta E matices
+ c i+1
+         call matmat2(ae3e2(1,1),gte1t(1,1),gtEpizda1(1,1))
+ c i+2
+         call matmat2(ae3gte2(1,1),e1t(1,1),gtEpizda2(1,1))
+ c i+3
+         call matmat2(gtae3e2(1,1),e1t(1,1),gtEpizda3(1,1))
          s3=0.5d0*(pizda(1,1)+pizda(2,2))
+         gsEE1=0.5d0*(gtEpizda1(1,1)+gtEpizda1(2,2))
+         gsEE2=0.5d0*(gtEpizda2(1,1)+gtEpizda2(2,2))
+         gsEE3=0.5d0*(gtEpizda3(1,1)+gtEpizda3(2,2))
          eello_turn4=eello_turn4-(s1+s2+s3)
  c             write(iout,*)'chujOWO', auxvec(1),b1(1,iti2)
          if (energy_dec) write (iout,'(a6,2i5,0pf7.3,3f7.3)')
       &      'eturn4',i,j,-(s1+s2+s3),s1,s2,s3
  cd        write (2,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
  cd     &    ' eello_turn4_num',8*eello_turn4_num
+ #ifdef NEWCORR
+         gloc(nphi+i,icg)=gloc(nphi+i,icg)
+      &                  -(gs13+gsE13+gsEE1)*wturn4
+         gloc(nphi+i+1,icg)= gloc(nphi+i+1,icg)
+      &                    -(gs23+gs21+gsEE2)*wturn4
+         gloc(nphi+i+2,icg)= gloc(nphi+i+2,icg)
+      &                    -(gs32+gsE31+gsEE3)*wturn4
+ c         gloc(nphi+i+1,icg)=gloc(nphi+i+1,icg)-
+ c     &   gs2
+ #endif
+         if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
+      &      'eturn4',i,j,-(s1+s2+s3)
+ c        write (iout,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
+ c     &    ' eello_turn4_num',8*eello_turn4_num
  C Derivatives in gamma(i)
          call transpose2(EUgder(1,1,i+1),e1tder(1,1))
          call matmat2(e1tder(1,1),a_temp(1,1),auxmat(1,1))
          call matvec2(auxmat(1,1),Ub2(1,i+3),auxvec(1))
-         s1=scalar2(b1(1,iti2),auxvec(1))
+         s1=scalar2(b1(1,i+2),auxvec(1))
          call matmat2(ae3e2(1,1),e1tder(1,1),pizda(1,1))
          s3=0.5d0*(pizda(1,1)+pizda(2,2))
          gel_loc_turn4(i)=gel_loc_turn4(i)-(s1+s3)
  C Derivatives in gamma(i+1)
          call transpose2(EUgder(1,1,i+2),e2tder(1,1))
          call matvec2(ae3(1,1),Ub2der(1,i+2),auxvec(1)) 
-         s2=scalar2(b1(1,iti1),auxvec(1))
+         s2=scalar2(b1(1,i+1),auxvec(1))
          call matmat2(ae3(1,1),e2tder(1,1),auxmat(1,1))
          call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
          s3=0.5d0*(pizda(1,1)+pizda(2,2))
  C Derivatives in gamma(i+2)
          call transpose2(EUgder(1,1,i+3),e3tder(1,1))
          call matvec2(e1a(1,1),Ub2der(1,i+3),auxvec(1))
-         s1=scalar2(b1(1,iti2),auxvec(1))
+         s1=scalar2(b1(1,i+2),auxvec(1))
          call matmat2(a_temp(1,1),e3tder(1,1),auxmat(1,1))
          call matvec2(auxmat(1,1),Ub2(1,i+2),auxvec(1)) 
-         s2=scalar2(b1(1,iti1),auxvec(1))
+         s2=scalar2(b1(1,i+1),auxvec(1))
          call matmat2(auxmat(1,1),e2t(1,1),auxmat3(1,1))
          call matmat2(auxmat3(1,1),e1t(1,1),pizda(1,1))
          s3=0.5d0*(pizda(1,1)+pizda(2,2))
@@@ -4282,10 -4299,10 +4506,10 @@@ C Derivatives of this turn contribution
              a_temp(2,2)=agg(l,4)
              call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
              call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
-             s1=scalar2(b1(1,iti2),auxvec(1))
+             s1=scalar2(b1(1,i+2),auxvec(1))
              call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
              call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1)) 
-             s2=scalar2(b1(1,iti1),auxvec(1))
+             s2=scalar2(b1(1,i+1),auxvec(1))
              call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
              call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
              s3=0.5d0*(pizda(1,1)+pizda(2,2))
@@@ -4301,10 -4318,10 +4525,10 @@@ C Remaining derivatives of this turn co
            a_temp(2,2)=aggi(l,4)
            call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
            call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
-           s1=scalar2(b1(1,iti2),auxvec(1))
+           s1=scalar2(b1(1,i+2),auxvec(1))
            call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
            call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1)) 
-           s2=scalar2(b1(1,iti1),auxvec(1))
+           s2=scalar2(b1(1,i+1),auxvec(1))
            call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
            call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
            s3=0.5d0*(pizda(1,1)+pizda(2,2))
            a_temp(2,2)=aggi1(l,4)
            call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
            call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
-           s1=scalar2(b1(1,iti2),auxvec(1))
+           s1=scalar2(b1(1,i+2),auxvec(1))
            call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
            call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1)) 
-           s2=scalar2(b1(1,iti1),auxvec(1))
+           s2=scalar2(b1(1,i+1),auxvec(1))
            call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
            call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
            s3=0.5d0*(pizda(1,1)+pizda(2,2))
            a_temp(2,2)=aggj(l,4)
            call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
            call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
-           s1=scalar2(b1(1,iti2),auxvec(1))
+           s1=scalar2(b1(1,i+2),auxvec(1))
            call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
            call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1)) 
-           s2=scalar2(b1(1,iti1),auxvec(1))
+           s2=scalar2(b1(1,i+1),auxvec(1))
            call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
            call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
            s3=0.5d0*(pizda(1,1)+pizda(2,2))
            a_temp(2,2)=aggj1(l,4)
            call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
            call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
-           s1=scalar2(b1(1,iti2),auxvec(1))
+           s1=scalar2(b1(1,i+2),auxvec(1))
            call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
            call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1)) 
-           s2=scalar2(b1(1,iti1),auxvec(1))
+           s2=scalar2(b1(1,i+1),auxvec(1))
            call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
            call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
            s3=0.5d0*(pizda(1,1)+pizda(2,2))
@@@ -4856,8 -4873,8 +5080,8 @@@ c        write (iout,*) "i",i," ii",ii,
  c     &    dhpb(i),dhpb1(i),forcon(i)
  C 24/11/03 AL: SS bridges handled separately because of introducing a specific
  C    distance and angle dependent SS bond potential.
 -        if (ii.gt.nres .and. iabs(itype(iii)).eq.1 .and.
 -     & iabs(itype(jjj)).eq.1) then
 +C        if (ii.gt.nres .and. iabs(itype(iii)).eq.1 .and.
 +C     & iabs(itype(jjj)).eq.1) then
  cmc        if (ii.gt.nres .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then
  C 18/07/06 MC: Use the convention that the first nss pairs are SS bonds
          if (.not.dyn_ss .and. i.le.nss) then
@@@ -5536,7 -5553,7 +5760,7 @@@ c        lprn1=.false
          etheta=etheta+ethetai
          if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
          if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
-         gloc(nphi+i-2,icg)=wang*dethetai+ gloc(nphi+i-2,icg)
+         gloc(nphi+i-2,icg)=wang*dethetai+gloc(nphi+i-2,icg)
        enddo
        return
        end
@@@ -7659,10 -7676,10 +7883,10 @@@ C--------------------------------------
        do iii=1,2
          dipi(iii,1)=Ub2(iii,i)
          dipderi(iii)=Ub2der(iii,i)
-         dipi(iii,2)=b1(iii,iti1)
+         dipi(iii,2)=b1(iii,i+1)
          dipj(iii,1)=Ub2(iii,j)
          dipderj(iii)=Ub2der(iii,j)
-         dipj(iii,2)=b1(iii,itj1)
+         dipj(iii,2)=b1(iii,j+1)
        enddo
        kkk=0
        do iii=1,2
@@@ -7842,26 -7859,26 +8066,26 @@@ C They are needed only when the fifth- 
  C indluded.
          IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) THEN
          call transpose2(AEA(1,1,1),auxmat(1,1))
-         call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
+         call matvec2(auxmat(1,1),b1(1,i),AEAb1(1,1,1))
          call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
          call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
          call transpose2(AEAderg(1,1,1),auxmat(1,1))
-         call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
+         call matvec2(auxmat(1,1),b1(1,i),AEAb1derg(1,1,1))
          call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
-         call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
-         call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
+         call matvec2(AEA(1,1,1),b1(1,k+1),AEAb1(1,2,1))
+         call matvec2(AEAderg(1,1,1),b1(1,k+1),AEAb1derg(1,2,1))
          call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
          call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
          call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
          call transpose2(AEA(1,1,2),auxmat(1,1))
-         call matvec2(auxmat(1,1),b1(1,itj),AEAb1(1,1,2))
+         call matvec2(auxmat(1,1),b1(1,j),AEAb1(1,1,2))
          call matvec2(auxmat(1,1),Ub2(1,j),AEAb2(1,1,2))
          call matvec2(auxmat(1,1),Ub2der(1,j),AEAb2derg(1,2,1,2))
          call transpose2(AEAderg(1,1,2),auxmat(1,1))
-         call matvec2(auxmat(1,1),b1(1,itj),AEAb1derg(1,1,2))
+         call matvec2(auxmat(1,1),b1(1,j),AEAb1derg(1,1,2))
          call matvec2(auxmat(1,1),Ub2(1,j),AEAb2derg(1,1,1,2))
-         call matvec2(AEA(1,1,2),b1(1,itl1),AEAb1(1,2,2))
-         call matvec2(AEAderg(1,1,2),b1(1,itl1),AEAb1derg(1,2,2))
+         call matvec2(AEA(1,1,2),b1(1,l+1),AEAb1(1,2,2))
+         call matvec2(AEAderg(1,1,2),b1(1,l+1),AEAb1derg(1,2,2))
          call matvec2(AEA(1,1,2),Ub2(1,l+1),AEAb2(1,2,2))
          call matvec2(AEAderg(1,1,2),Ub2(1,l+1),AEAb2derg(1,1,2,2))
          call matvec2(AEA(1,1,2),Ub2der(1,l+1),AEAb2derg(1,2,2,2))
@@@ -7870,20 -7887,20 +8094,20 @@@ C Calculate the Cartesian derivatives o
            do kkk=1,5
              do lll=1,3
                call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
-               call matvec2(auxmat(1,1),b1(1,iti),
+               call matvec2(auxmat(1,1),b1(1,i),
       &          AEAb1derx(1,lll,kkk,iii,1,1))
                call matvec2(auxmat(1,1),Ub2(1,i),
       &          AEAb2derx(1,lll,kkk,iii,1,1))
-               call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
+               call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
       &          AEAb1derx(1,lll,kkk,iii,2,1))
                call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
       &          AEAb2derx(1,lll,kkk,iii,2,1))
                call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
-               call matvec2(auxmat(1,1),b1(1,itj),
+               call matvec2(auxmat(1,1),b1(1,j),
       &          AEAb1derx(1,lll,kkk,iii,1,2))
                call matvec2(auxmat(1,1),Ub2(1,j),
       &          AEAb2derx(1,lll,kkk,iii,1,2))
-               call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
+               call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,l+1),
       &          AEAb1derx(1,lll,kkk,iii,2,2))
                call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,l+1),
       &          AEAb2derx(1,lll,kkk,iii,2,2))
@@@ -7980,26 -7997,26 +8204,26 @@@ C indluded
          IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 .or.
       &    (wturn6.gt.0.0d0 .and. j.eq.i+4 .and. l.eq.i+3)) THEN
          call transpose2(AEA(1,1,1),auxmat(1,1))
-         call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
+         call matvec2(auxmat(1,1),b1(1,i),AEAb1(1,1,1))
          call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
          call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
          call transpose2(AEAderg(1,1,1),auxmat(1,1))
-         call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
+         call matvec2(auxmat(1,1),b1(1,i),AEAb1derg(1,1,1))
          call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
-         call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
-         call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
+         call matvec2(AEA(1,1,1),b1(1,k+1),AEAb1(1,2,1))
+         call matvec2(AEAderg(1,1,1),b1(1,k+1),AEAb1derg(1,2,1))
          call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
          call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
          call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
          call transpose2(AEA(1,1,2),auxmat(1,1))
-         call matvec2(auxmat(1,1),b1(1,itj1),AEAb1(1,1,2))
+         call matvec2(auxmat(1,1),b1(1,j+1),AEAb1(1,1,2))
          call matvec2(auxmat(1,1),Ub2(1,l),AEAb2(1,1,2))
          call matvec2(auxmat(1,1),Ub2der(1,l),AEAb2derg(1,2,1,2))
          call transpose2(AEAderg(1,1,2),auxmat(1,1))
-         call matvec2(auxmat(1,1),b1(1,itl),AEAb1(1,1,2))
+         call matvec2(auxmat(1,1),b1(1,l),AEAb1(1,1,2))
          call matvec2(auxmat(1,1),Ub2(1,l),AEAb2derg(1,1,1,2))
-         call matvec2(AEA(1,1,2),b1(1,itj1),AEAb1(1,2,2))
-         call matvec2(AEAderg(1,1,2),b1(1,itj1),AEAb1derg(1,2,2))
+         call matvec2(AEA(1,1,2),b1(1,j+1),AEAb1(1,2,2))
+         call matvec2(AEAderg(1,1,2),b1(1,j+1),AEAb1derg(1,2,2))
          call matvec2(AEA(1,1,2),Ub2(1,j),AEAb2(1,2,2))
          call matvec2(AEAderg(1,1,2),Ub2(1,j),AEAb2derg(1,1,2,2))
          call matvec2(AEA(1,1,2),Ub2der(1,j),AEAb2derg(1,2,2,2))
@@@ -8008,20 -8025,20 +8232,20 @@@ C Calculate the Cartesian derivatives o
            do kkk=1,5
              do lll=1,3
                call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
-               call matvec2(auxmat(1,1),b1(1,iti),
+               call matvec2(auxmat(1,1),b1(1,i),
       &          AEAb1derx(1,lll,kkk,iii,1,1))
                call matvec2(auxmat(1,1),Ub2(1,i),
       &          AEAb2derx(1,lll,kkk,iii,1,1))
-               call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
+               call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
       &          AEAb1derx(1,lll,kkk,iii,2,1))
                call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
       &          AEAb2derx(1,lll,kkk,iii,2,1))
                call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
-               call matvec2(auxmat(1,1),b1(1,itl),
+               call matvec2(auxmat(1,1),b1(1,l),
       &          AEAb1derx(1,lll,kkk,iii,1,2))
                call matvec2(auxmat(1,1),Ub2(1,l),
       &          AEAb2derx(1,lll,kkk,iii,1,2))
-               call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itj1),
+               call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,j+1),
       &          AEAb1derx(1,lll,kkk,iii,2,2))
                call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,j),
       &          AEAb2derx(1,lll,kkk,iii,2,2))
@@@ -8318,7 -8335,7 +8542,7 @@@ C Contribution from graph I
        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)
-       eello5_2=scalar2(AEAb1(1,2,1),b1(1,itk))
+       eello5_2=scalar2(AEAb1(1,2,1),b1(1,k))
       & -0.5d0*scalar2(vv(1),Ctobr(1,k))
  C Explicit gradient in virtual-dihedral angles.
        g_corr5_loc(k-1)=g_corr5_loc(k-1)
        vv(2)=pizda(2,1)-pizda(1,2)
        if (l.eq.j+1) then
          g_corr5_loc(l-1)=g_corr5_loc(l-1)
-      &   +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
+      &   +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,k))
       &   -0.5d0*scalar2(vv(1),Ctobr(1,k)))
        else
          g_corr5_loc(j-1)=g_corr5_loc(j-1)
-      &   +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
+      &   +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,k))
       &   -0.5d0*scalar2(vv(1),Ctobr(1,k)))
        endif
  C Cartesian gradient
              vv(1)=pizda(1,1)+pizda(2,2)
              vv(2)=pizda(2,1)-pizda(1,2)
              derx(lll,kkk,iii)=derx(lll,kkk,iii)
-      &       +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,itk))
+      &       +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,k))
       &       -0.5d0*scalar2(vv(1),Ctobr(1,k))
            enddo
          enddo
@@@ -8399,7 -8416,7 +8623,7 @@@ cd1110    continu
          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)
-         eello5_4=scalar2(AEAb1(1,2,2),b1(1,itl))
+         eello5_4=scalar2(AEAb1(1,2,2),b1(1,l))
       &   -0.5d0*scalar2(vv(1),Ctobr(1,l))
  C Explicit gradient in virtual-dihedral angles.
          g_corr5_loc(l-1)=g_corr5_loc(l-1)
          vv(1)=pizda(1,1)+pizda(2,2)
          vv(2)=pizda(2,1)-pizda(1,2)
          g_corr5_loc(k-1)=g_corr5_loc(k-1)
-      &   +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itl))
+      &   +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,l))
       &   -0.5d0*scalar2(vv(1),Ctobr(1,l)))
  C Cartesian gradient
          do iii=1,2
                vv(1)=pizda(1,1)+pizda(2,2)
                vv(2)=pizda(2,1)-pizda(1,2)
                derx(lll,kkk,iii)=derx(lll,kkk,iii)
-      &         +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itl))
+      &         +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,l))
       &         -0.5d0*scalar2(vv(1),Ctobr(1,l))
              enddo
            enddo
@@@ -8472,7 -8489,7 +8696,7 @@@ C Contribution from graph I
          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)
-         eello5_4=scalar2(AEAb1(1,2,2),b1(1,itj))
+         eello5_4=scalar2(AEAb1(1,2,2),b1(1,j))
       &   -0.5d0*scalar2(vv(1),Ctobr(1,j))
  C Explicit gradient in virtual-dihedral angles.
          g_corr5_loc(j-1)=g_corr5_loc(j-1)
          vv(1)=pizda(1,1)+pizda(2,2)
          vv(2)=pizda(2,1)-pizda(1,2)
          g_corr5_loc(k-1)=g_corr5_loc(k-1)
-      &   +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itj))
+      &   +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,j))
       &   -0.5d0*scalar2(vv(1),Ctobr(1,j)))
  C Cartesian gradient
          do iii=1,2
                vv(1)=pizda(1,1)+pizda(2,2)
                vv(2)=pizda(2,1)-pizda(1,2)
                derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
-      &         +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itj))
+      &         +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,j))
       &         -0.5d0*scalar2(vv(1),Ctobr(1,j))
              enddo
            enddo
@@@ -8774,8 -8791,8 +8998,8 @@@ CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
        vv1(1)=pizda1(1,1)-pizda1(2,2)
        vv1(2)=pizda1(1,2)+pizda1(2,1)
        s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
-       vv(1)=AEAb1(1,2,imat)*b1(1,itk)-AEAb1(2,2,imat)*b1(2,itk)
-       vv(2)=AEAb1(1,2,imat)*b1(2,itk)+AEAb1(2,2,imat)*b1(1,itk)
+       vv(1)=AEAb1(1,2,imat)*b1(1,k)-AEAb1(2,2,imat)*b1(2,k)
+       vv(2)=AEAb1(1,2,imat)*b1(2,k)+AEAb1(2,2,imat)*b1(1,k)
        s5=scalar2(vv(1),Dtobr2(1,i))
  cd      write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4', s4,' s5',s5
        eello6_graph1=-0.5d0*(s1+s2+s3+s4+s5)
        call matmat2(AEAderg(1,1,imat),auxmat(1,1),pizda1(1,1))
        vv1(1)=pizda1(1,1)-pizda1(2,2)
        vv1(2)=pizda1(1,2)+pizda1(2,1)
-       vv(1)=AEAb1derg(1,2,imat)*b1(1,itk)-AEAb1derg(2,2,imat)*b1(2,itk)
-       vv(2)=AEAb1derg(1,2,imat)*b1(2,itk)+AEAb1derg(2,2,imat)*b1(1,itk)
+       vv(1)=AEAb1derg(1,2,imat)*b1(1,k)-AEAb1derg(2,2,imat)*b1(2,k)
+       vv(2)=AEAb1derg(1,2,imat)*b1(2,k)+AEAb1derg(2,2,imat)*b1(1,k)
        if (l.eq.j+1) then
          g_corr6_loc(l-1)=g_corr6_loc(l-1)
       & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
              vv1(1)=pizda1(1,1)-pizda1(2,2)
              vv1(2)=pizda1(1,2)+pizda1(2,1)
              s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
-             vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,itk)
-      &       -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,itk)
-             vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,itk)
-      &       +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,itk)
+             vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,k)
+      &       -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,k)
+             vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,k)
+      &       +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,k)
              s5=scalar2(vv(1),Dtobr2(1,i))
              derx(lll,kkk,ind)=derx(lll,kkk,ind)-0.5d0*(s1+s2+s3+s4+s5)
            enddo
@@@ -9071,10 -9088,10 +9295,10 @@@ C           energy moment and not to th
  #ifdef MOMENT
        s1=dip(4,jj,i)*dip(4,kk,k)
  #endif
-       call matvec2(AECA(1,1,1),b1(1,itk1),auxvec(1))
-       s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
-       call matvec2(AECA(1,1,2),b1(1,itl1),auxvec(1))
-       s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
+       call matvec2(AECA(1,1,1),b1(1,k+1),auxvec(1))
+       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 matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
        vv(1)=pizda(1,1)+pizda(2,2)
@@@ -9089,13 -9106,13 +9313,13 @@@ cd     & "sum",-(s2+s3+s4
  #endif
  c      eello6_graph3=-s4
  C Derivatives in gamma(k-1)
-       call matvec2(AECAderg(1,1,2),b1(1,itl1),auxvec(1))
-       s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
+       call matvec2(AECAderg(1,1,2),b1(1,l+1),auxvec(1))
+       s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
        s4=-0.25d0*scalar2(vv(1),Ctobrder(1,k))
        g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s3+s4)
  C Derivatives in gamma(l-1)
-       call matvec2(AECAderg(1,1,1),b1(1,itk1),auxvec(1))
-       s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
+       call matvec2(AECAderg(1,1,1),b1(1,k+1),auxvec(1))
+       s2=0.5d0*scalar2(b1(1,k),auxvec(1))
        call matmat2(auxmat(1,1),AECAderg(1,1,1),pizda(1,1))
        vv(1)=pizda(1,1)+pizda(2,2)
        vv(2)=pizda(2,1)-pizda(1,2)
@@@ -9112,12 -9129,12 +9336,12 @@@ C Cartesian derivatives
                s1=dip(4,jj,i)*dipderx(lll,kkk,4,kk,k)
              endif
  #endif
-             call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
+             call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
       &        auxvec(1))
-             s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
-             call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
+             s2=0.5d0*scalar2(b1(1,k),auxvec(1))
+             call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,l+1),
       &        auxvec(1))
-             s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
+             s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
              call matmat2(auxmat(1,1),AECAderx(1,1,lll,kkk,iii,1),
       &        pizda(1,1))
              vv(1)=pizda(1,1)+pizda(2,2)
@@@ -9205,11 -9222,11 +9429,11 @@@ cd     & ' itl',itl,' itl1',itl
        call matvec2(AECA(1,1,imat),Ub2(1,k),auxvec(1))
        s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
        if (j.eq.l+1) then
-         call matvec2(ADtEA1(1,1,3-imat),b1(1,itj1),auxvec1(1))
-         s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
+         call matvec2(ADtEA1(1,1,3-imat),b1(1,j+1),auxvec1(1))
+         s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
        else
-         call matvec2(ADtEA1(1,1,3-imat),b1(1,itl1),auxvec1(1))
-         s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
+         call matvec2(ADtEA1(1,1,3-imat),b1(1,l+1),auxvec1(1))
+         s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
        endif
        call transpose2(EUg(1,1,k),auxmat(1,1))
        call matmat2(AECA(1,1,imat),auxmat(1,1),pizda(1,1))
@@@ -9233,11 -9250,11 +9457,11 @@@ C Derivatives in gamma(i-1
  #endif
          s2=0.5d0*scalar2(Ub2der(1,i),auxvec(1))
          if (j.eq.l+1) then
-           call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itj1),auxvec1(1))
-           s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
+           call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,j+1),auxvec1(1))
+           s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
          else
-           call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itl1),auxvec1(1))
-           s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
+           call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,l+1),auxvec1(1))
+           s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
          endif
          s4=0.25d0*scalar2(vv(1),Dtobr2der(1,i))
          if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
@@@ -9266,11 -9283,11 +9490,11 @@@ C Derivatives in gamma(k-1
        call matvec2(AECA(1,1,imat),Ub2der(1,k),auxvec1(1))
        s2=0.5d0*scalar2(Ub2(1,i),auxvec1(1))
        if (j.eq.l+1) then
-         call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itj1),auxvec1(1))
-         s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
+         call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,j+1),auxvec1(1))
+         s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
        else
-         call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itl1),auxvec1(1))
-         s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
+         call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,l+1),auxvec1(1))
+         s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
        endif
        call transpose2(EUgder(1,1,k),auxmat1(1,1))
        call matmat2(AECA(1,1,imat),auxmat1(1,1),pizda(1,1))
@@@ -9336,12 -9353,12 +9560,12 @@@ C Cartesian derivatives
              s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
              if (j.eq.l+1) then
                call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
-      &          b1(1,itj1),auxvec(1))
-               s3=-0.5d0*scalar2(b1(1,itj),auxvec(1))
+      &          b1(1,j+1),auxvec(1))
+               s3=-0.5d0*scalar2(b1(1,j),auxvec(1))
              else
                call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
-      &          b1(1,itl1),auxvec(1))
-               s3=-0.5d0*scalar2(b1(1,itl),auxvec(1))
+      &          b1(1,l+1),auxvec(1))
+               s3=-0.5d0*scalar2(b1(1,l),auxvec(1))
              endif
              call matmat2(AECAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
       &        pizda(1,1))
@@@ -9441,12 -9458,12 +9665,12 @@@ cd      write (2,*) 'eello6_5',eello6_
  #ifdef MOMENT
        call transpose2(AEA(1,1,1),auxmat(1,1))
        call matmat2(EUg(1,1,i+1),auxmat(1,1),auxmat(1,1))
-       ss1=scalar2(Ub2(1,i+2),b1(1,itl))
+       ss1=scalar2(Ub2(1,i+2),b1(1,l))
        s1 = (auxmat(1,1)+auxmat(2,2))*ss1
  #endif
-       call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
+       call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1(1))
        call matvec2(AEA(1,1,1),vtemp1(1),vtemp1(1))
-       s2 = scalar2(b1(1,itk),vtemp1(1))
+       s2 = scalar2(b1(1,k),vtemp1(1))
  #ifdef MOMENT
        call transpose2(AEA(1,1,2),atemp(1,1))
        call matmat2(atemp(1,1),EUg(1,1,i+4),atemp(1,1))
        call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtemp(1,1))
        call matmat2(gtemp(1,1),EUg(1,1,i+3),gtemp(1,1)) 
        call matvec2(a_chuj(1,1,jj,i),Ub2(1,i+4),vtemp4(1)) 
-       ss13 = scalar2(b1(1,itk),vtemp4(1))
+       ss13 = scalar2(b1(1,k),vtemp4(1))
        s13 = (gtemp(1,1)+gtemp(2,2))*ss13
  #endif
  c      write (2,*) 's1,s2,s8,s12,s13',s1,s2,s8,s12,s13
@@@ -9495,12 -9512,12 +9719,12 @@@ C Derivatives in gamma(i+3
  #ifdef MOMENT
        call transpose2(AEA(1,1,1),auxmatd(1,1))
        call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
-       ss1d=scalar2(Ub2der(1,i+2),b1(1,itl))
+       ss1d=scalar2(Ub2der(1,i+2),b1(1,l))
        s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1d
  #endif
-       call matvec2(EUgder(1,1,i+2),b1(1,itl),vtemp1d(1))
+       call matvec2(EUgder(1,1,i+2),b1(1,l),vtemp1d(1))
        call matvec2(AEA(1,1,1),vtemp1d(1),vtemp1d(1))
-       s2d = scalar2(b1(1,itk),vtemp1d(1))
+       s2d = scalar2(b1(1,k),vtemp1d(1))
  #ifdef MOMENT
        call matvec2(Ug2der(1,1,i+2),dd(1,1,itk1),vtemp2d(1))
        s8d = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2d(1))
@@@ -9548,9 -9565,9 +9772,9 @@@ C Derivatives in gamma(i+5
        call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
        s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
  #endif
-       call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1d(1))
+       call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1d(1))
        call matvec2(AEAderg(1,1,1),vtemp1d(1),vtemp1d(1))
-       s2d = scalar2(b1(1,itk),vtemp1d(1))
+       s2d = scalar2(b1(1,k),vtemp1d(1))
  #ifdef MOMENT
        call transpose2(AEA(1,1,2),atempd(1,1))
        call matmat2(atempd(1,1),EUgder(1,1,i+4),atempd(1,1))
        s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
  #ifdef MOMENT
        call matvec2(a_chuj(1,1,jj,i),Ub2der(1,i+4),vtemp4d(1)) 
-       ss13d = scalar2(b1(1,itk),vtemp4d(1))
+       ss13d = scalar2(b1(1,k),vtemp4d(1))
        s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
  #endif
  c      s1d=0.0d0
@@@ -9584,10 -9601,10 +9808,10 @@@ C Cartesian derivative
              call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
              s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
  #endif
-             call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
+             call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1(1))
              call matvec2(AEAderx(1,1,lll,kkk,iii,1),vtemp1(1),
       &          vtemp1d(1))
-             s2d = scalar2(b1(1,itk),vtemp1d(1))
+             s2d = scalar2(b1(1,k),vtemp1d(1))
  #ifdef MOMENT
              call transpose2(AEAderx(1,1,lll,kkk,iii,2),atempd(1,1))
              call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
@@@ -9631,7 -9648,7 +9855,7 @@@ c      s13d=0.0d
            derx_turn(lll,kkk,2) = derx_turn(lll,kkk,2)-0.5d0*s13d
            call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),Ub2(1,i+4),
       &      vtemp4d(1)) 
-           ss13d = scalar2(b1(1,itk),vtemp4d(1))
+           ss13d = scalar2(b1(1,k),vtemp4d(1))
            s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
            derx_turn(lll,kkk,1) = derx_turn(lll,kkk,1)-0.5d0*s13d
          enddo
@@@ -9867,120 -9884,4 +10091,120 @@@ crc      print *,((prod(i,j),i=1,2),j=1
  
        return
        end
 +CCC----------------------------------------------
 +      subroutine Eliptransfer(eliptran)
 +      implicit real*8 (a-h,o-z)
 +      include 'DIMENSIONS'
 +      include 'COMMON.GEO'
 +      include 'COMMON.VAR'
 +      include 'COMMON.LOCAL'
 +      include 'COMMON.CHAIN'
 +      include 'COMMON.DERIV'
 +      include 'COMMON.NAMES'
 +      include 'COMMON.INTERACT'
 +      include 'COMMON.IOUNITS'
 +      include 'COMMON.CALC'
 +      include 'COMMON.CONTROL'
 +      include 'COMMON.SPLITELE'
 +      include 'COMMON.SBRIDGE'
 +C this is done by Adasko
 +C      print *,"wchodze"
 +C structure of box:
 +C      water
 +C--bordliptop-- buffore starts
 +C--bufliptop--- here true lipid starts
 +C      lipid
 +C--buflipbot--- lipid ends buffore starts
 +C--bordlipbot--buffore ends
 +      eliptran=0.0
 +      do i=ilip_start,ilip_end
 +C       do i=1,1
 +        if (itype(i).eq.ntyp1) cycle
  
 +        positi=(mod(((c(3,i)+c(3,i+1))/2.0d0),boxzsize))
 +        if (positi.le.0) positi=positi+boxzsize
 +C        print *,i
 +C first for peptide groups
 +c for each residue check if it is in lipid or lipid water border area
 +       if ((positi.gt.bordlipbot)
 +     &.and.(positi.lt.bordliptop)) then
 +C the energy transfer exist
 +        if (positi.lt.buflipbot) then
 +C what fraction I am in
 +         fracinbuf=1.0d0-
 +     &        ((positi-bordlipbot)/lipbufthick)
 +C lipbufthick is thickenes of lipid buffore
 +         sslip=sscalelip(fracinbuf)
 +         ssgradlip=-sscagradlip(fracinbuf)/lipbufthick
 +         eliptran=eliptran+sslip*pepliptran
 +         gliptranc(3,i)=gliptranc(3,i)+ssgradlip*pepliptran/2.0d0
 +         gliptranc(3,i-1)=gliptranc(3,i-1)+ssgradlip*pepliptran/2.0d0
 +C         gliptranc(3,i-2)=gliptranc(3,i)+ssgradlip*pepliptran
 +
 +C         print *,"doing sccale for lower part"
 +        elseif (positi.gt.bufliptop) then
 +         fracinbuf=1.0d0-((bordliptop-positi)/lipbufthick)
 +         sslip=sscalelip(fracinbuf)
 +         ssgradlip=sscagradlip(fracinbuf)/lipbufthick
 +         eliptran=eliptran+sslip*pepliptran
 +         gliptranc(3,i)=gliptranc(3,i)+ssgradlip*pepliptran/2.0d0
 +         gliptranc(3,i-1)=gliptranc(3,i-1)+ssgradlip*pepliptran/2.0d0
 +C         gliptranc(3,i-2)=gliptranc(3,i)+ssgradlip*pepliptran
 +C          print *, "doing sscalefor top part"
 +        else
 +         eliptran=eliptran+pepliptran
 +C         print *,"I am in true lipid"
 +        endif
 +C       else
 +C       eliptran=elpitran+0.0 ! I am in water
 +       endif
 +       enddo
 +C       print *, "nic nie bylo w lipidzie?"
 +C now multiply all by the peptide group transfer factor
 +C       eliptran=eliptran*pepliptran
 +C now the same for side chains
 +C       do i=1,1
 +       do i=ilip_start,ilip_end
 +        if (itype(i).eq.ntyp1) cycle
 +        positi=(mod(c(3,i+nres),boxzsize))
 +        if (positi.le.0) positi=positi+boxzsize
 +C       print *,mod(c(3,i+nres),boxzsize),bordlipbot,bordliptop
 +c for each residue check if it is in lipid or lipid water border area
 +C       respos=mod(c(3,i+nres),boxzsize)
 +C       print *,positi,bordlipbot,buflipbot
 +       if ((positi.gt.bordlipbot)
 +     & .and.(positi.lt.bordliptop)) then
 +C the energy transfer exist
 +        if (positi.lt.buflipbot) then
 +         fracinbuf=1.0d0-
 +     &     ((positi-bordlipbot)/lipbufthick)
 +C lipbufthick is thickenes of lipid buffore
 +         sslip=sscalelip(fracinbuf)
 +         ssgradlip=-sscagradlip(fracinbuf)/lipbufthick
 +         eliptran=eliptran+sslip*liptranene(itype(i))
 +         gliptranx(3,i)=gliptranx(3,i)
 +     &+ssgradlip*liptranene(itype(i))/2.0d0
 +         gliptranc(3,i-1)= gliptranc(3,i-1)
 +     &+ssgradlip*liptranene(itype(i))/2.0d0
 +C         print *,"doing sccale for lower part"
 +        elseif (positi.gt.bufliptop) then
 +         fracinbuf=1.0d0-
 +     &((bordliptop-positi)/lipbufthick)
 +         sslip=sscalelip(fracinbuf)
 +         ssgradlip=sscagradlip(fracinbuf)/lipbufthick
 +         eliptran=eliptran+sslip*liptranene(itype(i))
 +         gliptranx(3,i)=gliptranx(3,i)
 +     &+ssgradlip*liptranene(itype(i))/2.0d0
 +         gliptranc(3,i-1)= gliptranc(3,i-1)
 +     &+ssgradlip*liptranene(itype(i))/2.0d0
 +C          print *, "doing sscalefor top part",sslip,fracinbuf
 +        else
 +         eliptran=eliptran+liptranene(itype(i))
 +C         print *,"I am in true lipid"
 +        endif
 +        endif ! if in lipid or buffor
 +C       else
 +C       eliptran=elpitran+0.0 ! I am in water
 +       enddo
 +       return
 +       end
            enddo
          enddo
        endif
 +C reading lipid parameters
 +       read(iliptranpar,*) pepliptran
 +       do i=1,ntyp
 +       read(iliptranpar,*) liptranene(i)
 +       enddo
 +       close(iliptranpar)
  #ifdef CRYST_THETA
  C
  C Read the parameters of the probability distribution/energy expression 
          write (iout,*) "Coefficients of the cumulants"
        endif
        read (ifourier,*) nloctyp
        do i=0,nloctyp-1
          read (ifourier,*,end=115,err=115)
          read (ifourier,*,end=115,err=115) (b(ii),ii=1,13)
+ #ifdef NEWCORR
+         read (ifourier,*,end=115,err=115) (bnew1(ii,1,i),ii=1,3)
+         read (ifourier,*,end=115,err=115) (bnew2(ii,1,i),ii=1,3)
+         read (ifourier,*,end=115,err=115) (bnew1(ii,2,i),ii=1,1)
+         read (ifourier,*,end=115,err=115) (bnew2(ii,2,i),ii=1,1)
+         read (ifourier,*,end=115,err=115) (eenew(ii,i),ii=1,1)
+ #endif 
          if (lprint) then
          write (iout,*) 'Type',i
          write (iout,'(a,i2,a,f10.5)') ('b(',ii,')=',b(ii),ii=1,13)
          endif
-         B1(1,i)  = b(3)
-         B1(2,i)  = b(5)
-         B1(1,-i) = b(3)
-         B1(2,-i) = -b(5)
+ c        B1(1,i)  = b(3)
+ c        B1(2,i)  = b(5)
+ c        B1(1,-i) = b(3)
+ c        B1(2,-i) = -b(5)
  c        b1(1,i)=0.0d0
  c        b1(2,i)=0.0d0
-         B1tilde(1,i) = b(3)
-         B1tilde(2,i) =-b(5)
-         B1tilde(1,-i) =-b(3)
-         B1tilde(2,-i) =b(5)
+ c        B1tilde(1,i) = b(3)
+ c        B1tilde(2,i) =-b(5)
+ c        B1tilde(1,-i) =-b(3)
+ c        B1tilde(2,-i) =b(5)
  c        b1tilde(1,i)=0.0d0
  c        b1tilde(2,i)=0.0d0
-         B2(1,i)  = b(2)
-         B2(2,i)  = b(4)
-         B2(1,-i)  =b(2)
-         B2(2,-i)  =-b(4)
+ c        B2(1,i)  = b(2)
+ c        B2(2,i)  = b(4)
+ c        B2(1,-i)  =b(2)
+ c        B2(2,-i)  =-b(4)
  
  c        b2(1,i)=0.0d0
  c        b2(2,i)=0.0d0
@@@ -989,21 -991,22 +997,22 @@@ c        Dtilde(1,1,i)=0.0d
  c        Dtilde(1,2,i)=0.0d0
  c        Dtilde(2,1,i)=0.0d0
  c        Dtilde(2,2,i)=0.0d0
-         EE(1,1,i)= b(10)+b(11)
-         EE(2,2,i)=-b(10)+b(11)
-         EE(2,1,i)= b(12)-b(13)
-         EE(1,2,i)= b(12)+b(13)
-         EE(1,1,-i)= b(10)+b(11)
-         EE(2,2,-i)=-b(10)+b(11)
-         EE(2,1,-i)=-b(12)+b(13)
-         EE(1,2,-i)=-b(12)-b(13)
+         EEold(1,1,i)= b(10)+b(11)
+         EEold(2,2,i)=-b(10)+b(11)
+         EEold(2,1,i)= b(12)-b(13)
+         EEold(1,2,i)= b(12)+b(13)
+         EEold(1,1,-i)= b(10)+b(11)
+         EEold(2,2,-i)=-b(10)+b(11)
+         EEold(2,1,-i)=-b(12)+b(13)
+         EEold(1,2,-i)=-b(12)-b(13)
+         write(iout,*) "TU DOCHODZE"
  c        ee(1,1,i)=1.0d0
  c        ee(2,2,i)=1.0d0
  c        ee(2,1,i)=0.0d0
  c        ee(1,2,i)=0.0d0
  c        ee(2,1,i)=ee(1,2,i)
        enddo
+ c      lprint=.true.
        if (lprint) then
        do i=1,nloctyp
          write (iout,*) 'Type',i
          enddo
          write(iout,*) 'EE'
          do j=1,2
-           write (iout,'(2f10.5)') EE(j,1,i),EE(j,2,i)
+           write (iout,'(2f10.5)') EEold(j,1,i),EEold(j,2,i)
          enddo
        enddo
        endif
+ c      lprint=.false.
  
  C 
  C Read electrostatic-interaction parameters
@@@ -1103,14 -1107,6 +1113,14 @@@ C---------------------- GB or BP potent
        read (isidep,*,end=116,err=116)(sigii(i),i=1,ntyp)
        read (isidep,*,end=116,err=116)(chip(i),i=1,ntyp)
        read (isidep,*,end=116,err=116)(alp(i),i=1,ntyp)
 +C now we start reading lipid
 +      do i=1,ntyp
 +       read (isidep,*,end=1161,err=1161)(epslip(i,j),j=i,ntyp)
 +       print *,"WARNING!!"
 +       do j=1,ntyp
 +       epslip(i,j)=epslip(i,j)+0.5d0
 +       enddo
 +      enddo
  C For the GB potential convert sigma'**2 into chi'
        if (ipot.eq.4) then
        do i=1,ntyp
@@@ -1177,17 -1173,10 +1187,17 @@@ C Calculate the "working" parameters o
          epsij=eps(i,j)
          sigeps=dsign(1.0D0,epsij)
          epsij=dabs(epsij)
 -        aa(i,j)=epsij*rrij*rrij
 -        bb(i,j)=-sigeps*epsij*rrij
 -        aa(j,i)=aa(i,j)
 -        bb(j,i)=bb(i,j)
 +          aa_aq(i,j)=epsij*rrij*rrij
 +          bb_aq(i,j)=-sigeps*epsij*rrij
 +          aa_aq(j,i)=aa_aq(i,j)
 +          bb_aq(j,i)=bb_aq(i,j)
 +          epsijlip=epslip(i,j)
 +          sigeps=dsign(1.0D0,epsijlip)
 +          epsijlip=dabs(epsijlip)
 +          aa_lip(i,j)=epsijlip*rrij*rrij
 +          bb_lip(i,j)=-sigeps*epsijlip*rrij
 +          aa_lip(j,i)=aa_lip(i,j)
 +          bb_lip(j,i)=bb_lip(i,j)
          if (ipot.gt.2) then
            sigt1sq=sigma0(i)**2
            sigt2sq=sigma0(j)**2
@@@ -1220,7 -1209,7 +1230,7 @@@ c           augm(i,j)=0.5D0**(2*expon)*
            endif
          if (lprint) then
              write (iout,'(2(a3,2x),3(1pe10.3),5(0pf8.3))') 
 -     &      restyp(i),restyp(j),aa(i,j),bb(i,j),augm(i,j),
 +     &      restyp(i),restyp(j),aa_aq(i,j),bb_aq(i,j),augm(i,j),
       &      sigma(i,j),r0(i,j),chi(i,j),chi(j,i)
          endif
          enddo
@@@ -1324,8 -1313,6 +1334,8 @@@ c      v3ss=0.0d
        goto 999
    116 write (iout,*) "Error reading electrostatic energy parameters."
        goto 999
 + 1161 write (iout,*) "Error reading electrostatic energy parameters.Lip"
 +      goto 999
    117 write (iout,*) "Error reading side chain interaction parameters."
        goto 999
    118 write (iout,*) "Error reading SCp interaction parameters."