unres
[unres.git] / source / unres / src-HCD-5D / energy_p_new_barrier.F
index 2c701ca..9ec8107 100644 (file)
@@ -37,6 +37,7 @@ c      include 'COMMON.MD'
      & eliptran,Eafmforce,Etube,
      & esaxs_constr,ehomology_constr,edfator,edfanei,edfabet
       integer n_corr,n_corr1
+      double precision time01
 #ifdef MPI      
 c      print*,"ETOTAL Processor",fg_rank," absolute rank",myrank,
 c     & " nfgtasks",nfgtasks
@@ -103,10 +104,10 @@ C FG slaves receive the WEIGHTS array
           wliptran=weights(22)
           wtube=weights(25)
           wsaxs=weights(26)
-          wdfa_dist=weights_(28)
-          wdfa_tor=weights_(29)
-          wdfa_nei=weights_(30)
-          wdfa_beta=weights_(31)
+          wdfa_dist=weights(28)
+          wdfa_tor=weights(29)
+          wdfa_nei=weights(30)
+          wdfa_beta=weights(31)
         endif
         time_Bcast=time_Bcast+MPI_Wtime()-time00
         time_Bcastw=time_Bcastw+MPI_Wtime()-time00
@@ -117,6 +118,9 @@ c        call chainbuild_cart
       endif
 c      write (iout,*) "itime_mat",itime_mat," imatupdate",imatupdate
       if (mod(itime_mat,imatupdate).eq.0) then
+#ifdef TIMING_ENE
+        time01=MPI_Wtime()
+#endif
         call make_SCp_inter_list
 c        write (iout,*) "Finished make_SCp_inter_list"
 c        call flush(iout)
@@ -126,9 +130,12 @@ c        call flush(iout)
         call make_pp_inter_list
 c        write (iout,*) "Finished make_pp_inter_list"
 c        call flush(iout)
-        call make_pp_vdw_inter_list
+c        call make_pp_vdw_inter_list
 c        write (iout,*) "Finished make_pp_vdw_inter_list"
 c        call flush(iout)
+#ifdef TIMING_ENE
+        time_list=time_list+MPI_Wtime()-time01
+#endif
       endif
 c      print *,'Processor',myrank,' calling etotal ipot=',ipot
 c      print *,'Processor',myrank,' nnt=',nnt,' nct=',nct
@@ -151,6 +158,9 @@ C
 C Compute the side-chain and electrostatic interaction energy
 C
 C      print *,ipot
+#ifdef TIMING_ENE
+      time01=MPI_Wtime()
+#endif
       goto (101,102,103,104,105,106) ipot
 C Lennard-Jones potential.
   101 call elj(evdw)
@@ -175,10 +185,15 @@ C
 C Calculate electrostatic (H-bonding) energy of the main chain.
 C
   107 continue
+#ifdef TIMING_ENE
+      time_evdw=time_evdw+MPI_Wtime()-time01
+#endif
 #ifdef DFA
 C     BARTEK for dfa test!
+c      print *,"Processors",MyRank," wdfa",wdfa_dist
       if (wdfa_dist.gt.0) then
         call edfad(edfadis)
+c        print *,"Processors",MyRank," edfadis",edfadis
       else
         edfadis=0
       endif
@@ -214,6 +229,9 @@ c      print *,"Processor",myrank," computed USCSC"
 #ifdef TIMING
       time_vec=time_vec+MPI_Wtime()-time01
 #endif
+#ifdef TIMING_ENE
+      time01=MPI_Wtime()
+#endif
 C Introduction of shielding effect first for each peptide group
 C the shielding factor is set this factor is describing how each
 C peptide group is shielded by side-chains
@@ -250,6 +268,9 @@ c      print *,"Processor",myrank," left VEC_AND_DERIV"
 c        call eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,
 c     &   eello_turn4)
       endif
+#ifdef TIMING_ENE
+      time_eelec=time_eelec+MPI_Wtime()-time01
+#endif
 c#ifdef TIMING
 c      time_enecalc=time_enecalc+MPI_Wtime()-time00
 c#endif
@@ -258,6 +279,9 @@ C
 C Calculate excluded-volume interaction energy between peptide groups
 C and side chains.
 C
+#ifdef TIMING_ENE
+      time01=MPI_Wtime()
+#endif
       if (ipot.lt.6) then
        if(wscp.gt.0d0) then
         call escp(evdw2,evdw2_14)
@@ -269,6 +293,9 @@ C
 c        write (iout,*) "Soft-sphere SCP potential"
         call escp_soft_sphere(evdw2,evdw2_14)
       endif
+#ifdef TIMING_ENE
+      time_escp=time_escp+MPI_Wtime()-time01
+#endif
 c
 c Calculate the bond-stretching energy
 c
@@ -831,17 +858,18 @@ c      call flush(iout)
 #ifdef TIMING
 c      time_allreduce=time_allreduce+MPI_Wtime()-time00
 #endif
-      do i=nnt,nres
+c      do i=nnt,nres
+      do i=0,nres
         do k=1,3
           gradbufc(k,i)=0.0d0
         enddo
       enddo
-#ifdef DEBUG
-      write (iout,*) "igrad_start",igrad_start," igrad_end",igrad_end
-      write (iout,*) (i," jgrad_start",jgrad_start(i),
-     &                  " jgrad_end  ",jgrad_end(i),
-     &                  i=igrad_start,igrad_end)
-#endif
+c#ifdef DEBUG
+c      write (iout,*) "igrad_start",igrad_start," igrad_end",igrad_end
+c      write (iout,*) (i," jgrad_start",jgrad_start(i),
+c     &                  " jgrad_end  ",jgrad_end(i),
+c     &                  i=igrad_start,igrad_end)
+c#endif
 c
 c Obsolete and inefficient code; we can make the effort O(n) and, therefore,
 c do not parallelize this part.
@@ -856,7 +884,8 @@ c      enddo
       do j=1,3
         gradbufc(j,nres-1)=gradbufc_sum(j,nres)
       enddo
-      do i=nres-2,-1,-1
+c      do i=nres-2,-1,-1
+      do i=nres-2,0,-1
         do j=1,3
           gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
         enddo
@@ -872,12 +901,13 @@ c      enddo
 #endif
 #ifdef DEBUG
       write (iout,*) "gradbufc"
-      do i=1,nres
+      do i=0,nres
         write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
       enddo
       call flush(iout)
 #endif
-      do i=-1,nres
+c      do i=-1,nres
+      do i=0,nres
         do j=1,3
           gradbufc_sum(j,i)=gradbufc(j,i)
           gradbufc(j,i)=0.0d0
@@ -886,7 +916,8 @@ c      enddo
       do j=1,3
         gradbufc(j,nres-1)=gradbufc_sum(j,nres)
       enddo
-      do i=nres-2,-1,-1
+c      do i=nres-2,-1,-1
+      do i=nres-2,0,-1
         do j=1,3
           gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
         enddo
@@ -914,7 +945,8 @@ c      enddo
       do k=1,3
         gradbufc(k,nres)=0.0d0
       enddo
-      do i=-1,nct
+c      do i=-1,nct
+      do i=0,nct
         do j=1,3
 #ifdef SPLITELE
 C          print *,gradbufc(1,13)
@@ -1019,6 +1051,8 @@ C          print *,gradafm(1,13),"AFM"
       endif
 #ifdef DEBUG
       write (iout,*) "gradc gradx gloc after adding"
+      write (iout,'(i5,3f10.5,5x,3f10.5,5x,f10.5)') 
+     &   i,(gradc(j,0,icg),j=1,3),(gradx(j,0,icg),j=1,3)
       do i=1,nres
         write (iout,'(i5,3f10.5,5x,3f10.5,5x,f10.5)') 
      &   i,(gradc(j,i,icg),j=1,3),(gradx(j,i,icg),j=1,3),gloc(i,icg)
@@ -1048,7 +1082,7 @@ C          print *,gradafm(1,13),"AFM"
 #ifdef MPI
       if (nfgtasks.gt.1) then
         do j=1,3
-          do i=1,nres
+          do i=0,nres
             gradbufc(j,i)=gradc(j,i,icg)
             gradbufx(j,i)=gradx(j,i,icg)
           enddo
@@ -1075,9 +1109,9 @@ c#undef DEBUG
         call MPI_Barrier(FG_COMM,IERR)
         time_barrier_g=time_barrier_g+MPI_Wtime()-time00
         time00=MPI_Wtime()
-        call MPI_Reduce(gradbufc(1,1),gradc(1,1,icg),3*nres,
+        call MPI_Reduce(gradbufc(1,0),gradc(1,0,icg),3*(nres+1),
      &    MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
-        call MPI_Reduce(gradbufx(1,1),gradx(1,1,icg),3*nres,
+        call MPI_Reduce(gradbufx(1,0),gradx(1,0,icg),3*(nres+1),
      &    MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
         call MPI_Reduce(glocbuf(1),gloc(1,icg),4*nres,
      &    MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
@@ -1087,7 +1121,7 @@ c#undef DEBUG
         time_reduce=time_reduce+MPI_Wtime()-time00
 #ifdef DEBUG
       write (iout,*) "gradc after reduce"
-      do i=1,nres
+      do i=0,nres
        do j=1,3
         write (iout,*) i,j,gradc(j,i,icg)
        enddo
       double precision xi,yi,zi,xj,yj,zj,rij,eps0ij,fac,e1,e2,rrij,
      & sigij,r0ij,rcut,sqrij,sss1,sssgrad1
       double precision fcont,fprimcont
-      double precision sscale,sscagrad
+      double precision fracinbuf,sslipi,sslipj,ssgradlipj,ssgradlipi,
+     & faclip
+      double precision sscale,sscagrad,sscagradlip,sscalelip
+      double precision gg_lipi(3),gg_lipj(3)
       double precision boxshift
+      external boxshift
 c      write(iout,*)'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
       evdw=0.0D0
+      gg_lipi=0.0d0
+      gg_lipj=0.0d0
 c      do i=iatsc_s,iatsc_e
       do ikont=g_listscsc_start,g_listscsc_end
         i=newcontlisti(ikont)
@@ -1511,6 +1551,7 @@ c      do i=iatsc_s,iatsc_e
         yi=c(2,nres+i)
         zi=c(3,nres+i)
         call to_box(xi,yi,zi)
+        call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
 C Change 12/1/95
         num_conti=0
 C
@@ -1526,6 +1567,11 @@ c          do j=istart(i,iint),iend(i,iint)
             yj=c(2,nres+j)
             zj=c(3,nres+j)
             call to_box(xj,yj,zj)
+            call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
+            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
             xj=boxshift(xj-xi,boxxsize)
             yj=boxshift(yj-yi,boxysize)
             zj=boxshift(zj-zi,boxzsize)
@@ -1540,6 +1586,7 @@ C Change 12/1/95 to calculate four-body interactions
 c           write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
             eps0ij=eps(itypi,itypj)
             fac=rrij**expon2
+            faclip=fac
 C have you changed here?
             e1=fac*fac*aa
             e2=fac*bb
             gg(1)=xj*fac
             gg(2)=yj*fac
             gg(3)=zj*fac
+            gg_lipi(3)=(sss1/2.0d0*(faclip*faclip*
+     &         (aa_lip(itypi,itypj)-aa_aq(itypi,itypj))
+     &        +faclip*(bb_lip(itypi,itypj)-bb_aq(itypi,itypj))))/expon
+            gg_lipj(3)=ssgradlipj*gg_lipi(3)
+            gg_lipi(3)=gg_lipi(3)*ssgradlipi
             do k=1,3
-              gvdwx(k,i)=gvdwx(k,i)-gg(k)
-              gvdwx(k,j)=gvdwx(k,j)+gg(k)
-              gvdwc(k,i)=gvdwc(k,i)-gg(k)
-              gvdwc(k,j)=gvdwc(k,j)+gg(k)
+              gvdwx(k,i)=gvdwx(k,i)-gg(k)+gg_lipi(k)
+              gvdwx(k,j)=gvdwx(k,j)+gg(k)+gg_lipj(k)
+              gvdwc(k,i)=gvdwc(k,i)-gg(k)+gg_lipi(k)
+              gvdwc(k,j)=gvdwc(k,j)+gg(k)+gg_lipj(k)
             enddo
 cgrad            do k=i,j-1
 cgrad              do l=1,3
       double precision xi,yi,zi,xj,yj,zj,rij,eps0ij,fac,e1,e2,rrij,
      & fac_augm,e_augm,r_inv_ij,r_shift_inv,sss1,sssgrad1
       logical scheck
-      double precision sscale,sscagrad
       double precision boxshift
+      double precision fracinbuf,sslipi,sslipj,ssgradlipj,ssgradlipi,
+     & faclip
+      double precision gg_lipi(3),gg_lipj(3)
+      double precision sscale,sscagrad,sscagradlip,sscalelip
 c     print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
       evdw=0.0D0
+      gg_lipi=0.0d0
+      gg_lipj=0.0d0
 c      do i=iatsc_s,iatsc_e
       do ikont=g_listscsc_start,g_listscsc_end
         i=newcontlisti(ikont)
@@ -1690,6 +1747,7 @@ c      do i=iatsc_s,iatsc_e
         yi=c(2,nres+i)
         zi=c(3,nres+i)
         call to_box(xi,yi,zi)
+        call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
 C
 C Calculate SC interaction energy.
 C
@@ -1701,6 +1759,11 @@ c          do j=istart(i,iint),iend(i,iint)
             yj=c(2,nres+j)
             zj=c(3,nres+j)
             call to_box(xj,yj,zj)
+            call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
+            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
             xj=boxshift(xj-xi,boxxsize)
             yj=boxshift(yj-yi,boxysize)
             zj=boxshift(zj-zi,boxzsize)
@@ -1714,6 +1777,7 @@ c          do j=istart(i,iint),iend(i,iint)
             sssgrad1=sscagrad(rij,r_cut_int)
             r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
             fac=r_shift_inv**expon
+            faclip=fac
 C have you changed here?
             e1=fac*fac*aa
             e2=fac*bb
             gg(1)=xj*fac
             gg(2)=yj*fac
             gg(3)=zj*fac
+            gg_lipi(3)=(sss1/2.0d0*(faclip*faclip*
+     &         (aa_lip(itypi,itypj)-aa_aq(itypi,itypj))
+     &        +faclip*(bb_lip(itypi,itypj)-bb_aq(itypi,itypj))))/expon
+            gg_lipj(3)=ssgradlipj*gg_lipi(3)
+            gg_lipi(3)=gg_lipi(3)*ssgradlipi
             do k=1,3
-              gvdwx(k,i)=gvdwx(k,i)-gg(k)
-              gvdwx(k,j)=gvdwx(k,j)+gg(k)
-              gvdwc(k,i)=gvdwc(k,i)-gg(k)
-              gvdwc(k,j)=gvdwc(k,j)+gg(k)
+              gvdwx(k,i)=gvdwx(k,i)-gg(k)+gg_lipi(k)
+              gvdwx(k,j)=gvdwx(k,j)+gg(k)+gg_lipj(k)
+              gvdwc(k,i)=gvdwc(k,i)-gg(k)+gg_lipi(k)
+              gvdwc(k,j)=gvdwc(k,j)+gg(k)+gg_lipj(k)
             enddo
 cgrad            do k=i,j-1
 cgrad              do l=1,3
       integer itypi,itypj,itypi1,iint,ind,ikont
       double precision eps0ij,epsi,sigm,fac,e1,e2,rrij,xi,yi,zi,
      & sss1,sssgrad1
-      double precision sscale,sscagrad
+      double precision fracinbuf,sslipi,sslipj,ssgradlipj,ssgradlipi,
+     & faclip
+      double precision sscale,sscagrad,sscagradlip,sscalelip
       double precision boxshift
 c     double precision rrsave(maxdim)
       logical lprn
       evdw=0.0D0
 c     print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
-      evdw=0.0D0
+      gg_lipi=0.0d0
+      gg_lipj=0.0d0
 c     if (icall.eq.0) then
 c       lprn=.true.
 c     else
@@ -1804,6 +1876,7 @@ c      do i=iatsc_s,iatsc_e
         yi=c(2,nres+i)
         zi=c(3,nres+i)
         call to_box(xi,yi,zi)
+        call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
         dxi=dc_norm(1,nres+i)
         dyi=dc_norm(2,nres+i)
         dzi=dc_norm(3,nres+i)
@@ -1842,6 +1915,11 @@ c           alf12=0.0D0
             yj=c(2,nres+j)
             zj=c(3,nres+j)
             call to_box(xj,yj,zj)
+            call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
+            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
             xj=boxshift(xj-xi,boxxsize)
             yj=boxshift(yj-yi,boxysize)
             zj=boxshift(zj-zi,boxzsize)
@@ -1864,6 +1942,7 @@ C Calculate whole angle-dependent part of epsilon and contributions
 C to its derivatives
 C have you changed here?
             fac=(rrij*sigsq)**expon2
+            faclip=fac
             e1=fac*fac*aa
             e2=fac*bb
             evdwij=eps1*eps2rt*eps3rt*(e1+e2)
@@ -1891,6 +1970,12 @@ C Calculate radial part of the gradient
             gg(1)=xj*fac
             gg(2)=yj*fac
             gg(3)=zj*fac
+            gg_lipi(3)=eps1*(eps2rt*eps2rt)
+     &        *(eps3rt*eps3rt)*sss1/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 Calculate the angular part of the gradient and sum add the contributions
 C to the appropriate components of the Cartesian gradient.
             call sc_grad
      & sslipj,ssgradlipj,ssgradlipi,sig,rij_shift,faclip
       double precision dist,sscale,sscagrad,sscagradlip,sscalelip
       double precision boxshift
+      double precision x0,y0,r012,rij12,facx0,
+     &  facx02,afacx0,bfacx0,abfacx0,Afac,BBfac,Afacsig,Bfacsig
+c      alpha_GB=0.5d0
+c      alpha_GB=0.01d0
+c      alpha_GB1=1.0d0+1.0d0/alpha_GB 
       evdw=0.0D0
 ccccc      energy_dec=.false.
 C      print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
-      evdw=0.0D0
+      gg_lipi=0.0d0
+      gg_lipj=0.0d0
       lprn=.false.
 c     if (icall.eq.0) lprn=.false.
       ind=0
@@ -1979,12 +2070,14 @@ c          do j=istart(i,iint),iend(i,iint)
 c              write(iout,*) "PRZED ZWYKLE", evdwij
               call dyn_ssbond_ene(i,j,evdwij)
 c              write(iout,*) "PO ZWYKLE", evdwij
+c              call flush(iout)
 
               evdw=evdw+evdwij
               if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)') 
      &                        'evdw',i,j,evdwij,' ss'
 C triple bond artifac removal
-              do k=j+1,iend(i,iint) 
+c              do k=j+1,iend(i,iint) 
+              do k=j+1,nct
 C search over all next residues
                 if (dyn_ss_mask(k)) then
 C check if they are cysteins
@@ -2043,9 +2136,15 @@ c           alf12=0.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      write(iout,*) "tu,", i,j,aa_lip(itypi,itypj),bb_lip(itypi,itypj)
-C      if (aa.ne.aa_aq(itypi,itypj)) write(63,'(2e10.5)')
-C     &(aa-aa_aq(itypi,itypj)),(bb-bb_aq(itypi,itypj))
+c            write (iout,*) "aa bb",aa_lip(itypi,itypj),
+c     &       bb_lip(itypi,itypj),aa_aq(itypi,itypj),
+c     &       bb_aq(itypi,itypj),aa,bb
+c            write (iout,*) (sslipi+sslipj)/2.0d0,
+c     &        (2.0d0-sslipi-sslipj)/2.0d0
+
+c      write(iout,*) "tu,", i,j,aa_lip(itypi,itypj),bb_lip(itypi,itypj)
+c      if (aa.ne.aa_aq(itypi,itypj)) write(iout,'(2e15.5)')
+c     &(aa-aa_aq(itypi,itypj)),(bb-bb_aq(itypi,itypj))
 C      if (ssgradlipj.gt.0.0d0) print *,"??WTF??"
 C      print *,sslipi,sslipj,bordlipbot,zi,zj
               xj=boxshift(xj-xi,boxxsize)
@@ -2079,67 +2178,150 @@ c     &       " sig",sig," sig0ij",sig0ij
 c for diagnostics; uncomment
 c            rij_shift=1.2*sig0ij
 C I hate to put IF's in the loops, but here don't have another choice!!!!
-              if (rij_shift.le.0.0D0) then
-                evdw=1.0D20
+c              if (rij_shift.le.0.0D0) then
+              x0=alpha_GB*(sig-sig0ij)
+              if (energy_dec) write (iout,*) i,j," x0",x0
+              if (rij_shift.le.x0) then
+c                sig=2.0d0*sig0ij
+                sigder=-sig*sigsq
+c                sigder=0.0d0
+                fac=rij**expon
+                rij12=fac*fac
+c                rij12=1.0d0
+                x0=alpha_GB*(sig-sig0ij)
+                facx0=1.0d0/x0**expon
+                facx02=facx0*facx0
+                r012=((1.0d0+alpha_GB)*(sig-sig0ij))**(2*expon)
+                afacx0=aa*facx02
+                bfacx0=bb*facx0
+                abfacx0=afacx0+0.5d0*bfacx0
+                Afac=alpha_GB1*abfacx0
+                Afacsig=0.5d0*alpha_GB1*bfacx0/(sig-sig0ij)
+                BBfac=Afac-(afacx0+bfacx0)
+c                BBfac=0.0d0
+                Bfacsig=(-alpha_GB1*(abfacx0+afacx0)+
+     &              (afacx0+afacx0+bfacx0))/(sig-sig0ij)
+c                Bfacsig=0.0d0
+                Afac=Afac*r012
+                Afacsig=Afacsig*r012
+c                Afac=1.0d0
+c                Afacsig=0.0d0
+c    w(x)=4*eps*((1.0+1.0/alpha_GB)*(y0**12-0.5*y0**6)*(r0/x)**12-(1+1/alpha)*(y0**12-0.5*y0**6)+y0**12-y0**6)
+c                eps1=1.0d0
+c                eps2rt=1.0d0
+c                eps3rt=1.0d0
+                e1 = eps1*eps2rt*eps3rt*Afac*rij12
+                e2 = -eps1*eps2rt*eps3rt*BBfac
+                evdwij = e1+e2
+                eps2der=evdwij*eps3rt
+                eps3der=evdwij*eps2rt
+c                eps2der=0.0d0
+c                eps3der=0.0d0
+c                eps1_om12=0.0d0
+                evdwij=evdwij*eps2rt*eps3rt
+c                Afacsig=0.d0
+c                Bfacsig=0.0d0
+                if (lprn) then
+                  write (iout,*) "aa",aa," bb",bb," sig0ij",sig0ij
+                  sigm=dabs(aa/bb)**(1.0D0/6.0D0)
+                  epsi=bb**2/aa
+                  write (iout,'(2(a3,i3,2x),18(0pf9.5))')
+     &             restyp(itypi),i,restyp(itypj),j,
+     &             epsi,sigm,chi1,chi2,chip1,chip2,
+     &             eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
+     &             eps1*eps2rt**2*eps3rt**2,om1,om2,om12,
+     &             1.0D0/rij,rij_shift,
+     &             evdwij
+                endif
+                if (energy_dec) write (iout,'(a,2i5,4f10.5,e15.5)') 
+     &          'RE r sss evdw',i,j,1.0d0/rij,sss,sslipi,sslipj,evdwij
+                evdw=evdw+evdwij*sss
+C Calculate gradient components.
+                e1=e1*eps2rt*eps3rt
+                sigder=-expon*eps1*eps2rt*eps2rt*eps3rt*eps3rt
+     &            *(Afacsig*rij12-Bfacsig)*sigder
+                fac=-2.0d0*expon*e1*rij*rij
+c              print '(2i4,6f8.4)',i,j,sss,sssgrad*
+c     &        evdwij,fac,sigma(itypi,itypj),expon
+                fac=fac+evdwij*sssgrad/sss*rij
+c                fac=0.0d0
+c                write (iout,*) "sigder",sigder," fac",fac," e1",e1,
+c     &              " e2",e2," sss",sss," sssgrad",sssgrad,"esp123",
+c     &              eps1*eps2rt**2*eps3rt**2
+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                evdw=1.0D20
 cd              write (iout,'(2(a3,i3,2x),17(0pf7.3))')
 cd     &        restyp(itypi),i,restyp(itypj),j,
 cd     &        rij_shift,1.0D0/rij,sig,sig0ij,sigsq,1-dsqrt(sigsq) 
 c                return
-              endif
-              sigder=-sig*sigsq
+              else
+                rij_shift=1.0D0/rij_shift 
+                sigder=-sig*sigsq
 c---------------------------------------------------------------
-              rij_shift=1.0D0/rij_shift 
-              fac=rij_shift**expon
+                fac=rij_shift**expon
 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
+                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/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,
-     &           eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
-     &           om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
-     &           evdwij
-              endif
+                evdwij=evdwij*eps2rt*eps3rt
+                evdw=evdw+evdwij*sss
+                if (energy_dec) write (iout,'(a,2i5,4f10.5,e15.5)') 
+     &          'GB r sss evdw',i,j,1.0d0/rij,sss,sslipi,sslipj,evdwij
+                if (lprn) then
+                  write (iout,*) "aa",aa," bb",bb," sig0ij",sig0ij
+                  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,
+     &             eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
+     &             om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
+     &             evdwij
+                endif
 
-              if (energy_dec) write (iout,'(a,2i5,2f10.5,e15.5)') 
-     &                    'r sss evdw',i,j,1.0d0/rij,sss,evdwij
 
 C Calculate gradient components.
-              e1=e1*eps1*eps2rt**2*eps3rt**2
-              fac=-expon*(e1+evdwij)*rij_shift
-              sigder=fac*sigder
-              fac=rij*fac
-c            print '(2i4,6f8.4)',i,j,sss,sssgrad*
-c     &      evdwij,fac,sigma(itypi,itypj),expon
-              fac=fac+evdwij*sssgrad/sss*rij
-c            fac=0.0d0
+                e1=e1*eps1*eps2rt**2*eps3rt**2
+                fac=-expon*(e1+evdwij)*rij_shift
+                sigder=fac*sigder
+                fac=rij*fac
+c              print '(2i4,6f8.4)',i,j,sss,sssgrad*
+c     &        evdwij,fac,sigma(itypi,itypj),expon
+                fac=fac+evdwij*sssgrad/sss*rij
+c              fac=0.0d0
 C Calculate the radial part of the gradient
-              gg_lipi(3)=eps1*(eps2rt*eps2rt)
+                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
+                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
+              endif
 C Calculate angular part of the gradient.
 c            call sc_grad_scale(sss)
               call sc_grad
@@ -2185,7 +2367,8 @@ C
       double precision dist,sscale,sscagrad,sscagradlip,sscalelip
       evdw=0.0D0
 c     print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
-      evdw=0.0D0
+      gg_lipi=0.0d0
+      gg_lipj=0.0d0
       lprn=.false.
 c     if (icall.eq.0) lprn=.true.
       ind=0
@@ -2281,6 +2464,7 @@ C I hate to put IF's in the loops, but here don't have another choice!!!!
 c---------------------------------------------------------------
            rij_shift=1.0D0/rij_shift 
            fac=rij_shift**expon
+           faclip=fac
            e1=fac*fac*aa
            e2=fac*bb
            evdwij=eps1*eps2rt*eps3rt*(e1+e2)
@@ -2310,7 +2494,7 @@ C Calculate gradient components.
 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))
+     &       (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
@@ -2980,7 +3164,7 @@ c
         write(iout,*)  'b2=',(b2(k,i-2),k=1,2)
 #endif
       enddo
-      mu=0.0d0
+      mu(:,:nres)=0.0d0
 #ifdef PARMAT
       do i=ivec_start+2,ivec_end+2
 #else
@@ -3479,6 +3663,8 @@ C
       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
+      double precision sslipi,sslipj,ssgradlipi,ssgradlipj
+      common /lipcalc/ sslipi,sslipj,ssgradlipi,ssgradlipj
 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
 #ifdef MOMENT
       double precision scal_el /1.0d0/
@@ -3585,6 +3771,7 @@ c        end if
         ymedi=c(2,i)+0.5d0*dyi
         zmedi=c(3,i)+0.5d0*dzi
         call to_box(xmedi,ymedi,zmedi)
+        call lipid_layer(xmedi,ymedi,zmedi,sslipi,ssgradlipi)
         num_conti=0
         call eelecij(i,i+2,ees,evdw1,eel_loc)
         if (wturn3.gt.0.0d0) call eturn3(i,eello_turn3)
@@ -3640,6 +3827,7 @@ c     &       (zmedi.lt.((-0.5d0)*boxzsize))) then
 c        go to 196
 c        endif
         call to_box(xmedi,ymedi,zmedi)
+        call lipid_layer(xmedi,ymedi,zmedi,sslipi,ssgradlipi)
 #ifdef FOURBODY
         num_conti=num_cont_hb(i)
 #endif
@@ -3683,6 +3871,7 @@ c     &  .or. itype(i-1).eq.ntyp1
         ymedi=c(2,i)+0.5d0*dyi
         zmedi=c(3,i)+0.5d0*dzi
         call to_box(xmedi,ymedi,zmedi)
+        call lipid_layer(xmedi,ymedi,zmedi,sslipi,ssgradlipi)
 C          xmedi=xmedi+xshift*boxxsize
 C          ymedi=ymedi+yshift*boxysize
 C          zmedi=zmedi+zshift*boxzsize
@@ -3802,6 +3991,9 @@ C-------------------------------------------------------------------------------
       double precision xmedi,ymedi,zmedi
       double precision sscale,sscagrad,scalar
       double precision boxshift
+      double precision sslipi,sslipj,ssgradlipi,ssgradlipj,faclipij,
+     & faclipij2
+      common /lipcalc/ sslipi,sslipj,ssgradlipi,ssgradlipj,faclipij
 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
 #ifdef MOMENT
       double precision scal_el /1.0d0/
@@ -3816,6 +4008,7 @@ C 13-go grudnia roku pamietnego...
 c          time00=MPI_Wtime()
 cd      write (iout,*) "eelecij",i,j
 c          ind=ind+1
+c          write (iout,*) "lipscale",lipscale
           iteli=itel(i)
           itelj=itel(j)
           if (j.eq.i+2 .and. itelj.eq.2) iteli=2
@@ -3836,6 +4029,9 @@ C          zj=c(3,j)+0.5D0*dzj-zmedi
           yj=c(2,j)+0.5D0*dyj
           zj=c(3,j)+0.5D0*dzj
           call to_box(xj,yj,zj)
+          call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
+          faclipij=(sslipi+sslipj)/2.0d0*lipscale+1.0d0
+          faclipij2=(sslipi+sslipj)/2.0d0*lipscale**2+1.0d0
           xj=boxshift(xj-xmedi,boxxsize)
           yj=boxshift(yj-ymedi,boxysize)
           zj=boxshift(zj-zmedi,boxzsize)
@@ -3875,14 +4071,15 @@ C          fac_shield(j)=0.6
           el1=el1*fac_shield(i)**2*fac_shield(j)**2
           el2=el2*fac_shield(i)**2*fac_shield(j)**2
           eesij=(el1+el2)
-          ees=ees+eesij
+          ees=ees+eesij*sss*faclipij2
           else
           fac_shield(i)=1.0
           fac_shield(j)=1.0
           eesij=(el1+el2)
-          ees=ees+eesij*sss
+          ees=ees+eesij*sss*faclipij2
           endif
-          evdw1=evdw1+evdwij*sss
+          ees=ees
+          evdw1=evdw1+evdwij*sss*faclipij2
 cd          write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
 cd     &      iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
 cd     &      1.0D0/dsqrt(rrmij),evdwij,eesij,
@@ -3891,8 +4088,9 @@ cd     &      xmedi,ymedi,zmedi,xj,yj,zj
           if (energy_dec) then 
             write (iout,'(a6,2i5,0pf7.3,2i5,e11.3,3f10.5)') 
      &        'evdw1',i,j,evdwij,iteli,itelj,aaa,evdw1,sss,rij
-            write (iout,'(a6,2i5,0pf7.3,2f8.3)') 'ees',i,j,eesij,
-     &        fac_shield(i),fac_shield(j)
+            write (iout,'(a6,2i5,0pf7.3,6f8.5)') 'ees',i,j,eesij,
+     &        fac_shield(i),fac_shield(j),sslipi,sslipj,faclipij,
+     &        faclipij2
           endif
 
 C
@@ -3909,7 +4107,7 @@ C
 *
 * Radial derivatives. First process both termini of the fragment (i,j)
 *
-          aux=facel*sss+rmij*sssgrad*eesij
+          aux=(facel*sss+rmij*sssgrad*eesij)*faclipij2
           ggg(1)=aux*xj
           ggg(2)=aux*yj
           ggg(3)=aux*zj
@@ -3991,15 +4189,14 @@ c 9/28/08 AL Gradient compotents will be summed only at the end
 C           print *,"before", gelc_long(1,i), gelc_long(1,j)
           do k=1,3
             gelc_long(k,j)=gelc_long(k,j)+ggg(k)
-C     &                    +grad_shield(k,j)*eesij/fac_shield(j)
             gelc_long(k,i)=gelc_long(k,i)-ggg(k)
-C     &                    +grad_shield(k,i)*eesij/fac_shield(i)
-C            gelc_long(k,i-1)=gelc_long(k,i-1)
-C     &                    +grad_shield(k,i)*eesij/fac_shield(i)
-C            gelc_long(k,j-1)=gelc_long(k,j-1)
-C     &                    +grad_shield(k,j)*eesij/fac_shield(j)
           enddo
-C           print *,"bafter", gelc_long(1,i), gelc_long(1,j)
+          gelc_long(3,j)=gelc_long(3,j)+
+     &      ssgradlipj*eesij/2.0d0*lipscale**2*sss
+
+          gelc_long(3,i)=gelc_long(3,i)+
+     &      ssgradlipi*eesij/2.0d0*lipscale**2*sss
+
 
 *
 * Loop over residues i+1 thru j-1.
@@ -4009,7 +4206,7 @@ cgrad            do l=1,3
 cgrad              gelc(l,k)=gelc(l,k)+ggg(l)
 cgrad            enddo
 cgrad          enddo
-          facvdw=facvdw+sssgrad*rmij*evdwij
+          facvdw=(facvdw+sssgrad*rmij*evdwij)*faclipij2
           ggg(1)=facvdw*xj
           ggg(2)=facvdw*yj
           ggg(3)=facvdw*zj
@@ -4023,6 +4220,11 @@ c 9/28/08 AL Gradient compotents will be summed only at the end
             gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
             gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
           enddo
+!C Lipidic part for scaling weight
+          gvdwpp(3,j)=gvdwpp(3,j)+
+     &      sss*ssgradlipj*evdwij/2.0d0*lipscale**2
+          gvdwpp(3,i)=gvdwpp(3,i)+
+     &      sss*ssgradlipi*evdwij/2.0d0*lipscale**2
 *
 * Loop over residues i+1 thru j-1.
 *
@@ -4033,7 +4235,7 @@ cgrad            enddo
 cgrad          enddo
 #else
 C MARYSIA
-          facvdw=(ev1+evdwij)
+          facvdw=(ev1+evdwij)*faclipij2
           facel=(el1+eesij)
           fac1=fac
           fac=-3*rrmij*(facvdw+facvdw+facel)*sss
@@ -4076,6 +4278,10 @@ c 9/28/08 AL Gradient compotents will be summed only at the end
             gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
             gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
           enddo
+          gvdwpp(3,j)=gvdwpp(3,j)+ 
+     &      sss*ssgradlipj*evdwij/2.0d0*lipscale**2
+          gvdwpp(3,i)=gvdwpp(3,i)+ 
+     &      sss*ssgradlipi*evdwij/2.0d0*lipscale**2
 #endif
 *
 * Angular part
@@ -4093,7 +4299,7 @@ cd        print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
 cd   &          (dcosg(k),k=1,3)
           do k=1,3
             ggg(k)=(ecosb*dcosb(k)+ecosg*dcosg(k))*
-     &      fac_shield(i)**2*fac_shield(j)**2*sss
+     &      fac_shield(i)**2*fac_shield(j)**2*sss*faclipij2
           enddo
 c          do k=1,3
 c            ghalf=0.5D0*ggg(k)
@@ -4114,11 +4320,11 @@ C                     print *,"before22", gelc_long(1,i), gelc_long(1,j)
             gelc(k,i)=gelc(k,i)
      &           +((ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
      &           + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1))*sss
-     &           *fac_shield(i)**2*fac_shield(j)**2   
+     &           *fac_shield(i)**2*fac_shield(j)**2*faclipij2
             gelc(k,j)=gelc(k,j)
      &           +((ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
      &           + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1))*sss
-     &           *fac_shield(i)**2*fac_shield(j)**2
+     &           *fac_shield(i)**2*fac_shield(j)**2*faclipij2
             gelc_long(k,j)=gelc_long(k,j)+ggg(k)
             gelc_long(k,i)=gelc_long(k,i)-ggg(k)
           enddo
@@ -4353,7 +4559,7 @@ C           fac_shield(i)=0.4
 C           fac_shield(j)=0.6
           endif
           eel_loc_ij=eel_loc_ij
-     &    *fac_shield(i)*fac_shield(j)*sss
+     &    *fac_shield(i)*fac_shield(j)*sss*faclipij
 c          if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
 c     &            'eelloc',i,j,eel_loc_ij
 C Now derivative over eel_loc
@@ -4411,7 +4617,7 @@ C Calculate patrial derivative for theta angle
      &     +a23*gmuij1(2)
      &     +a32*gmuij1(3)
      &     +a33*gmuij1(4))
-     &    *fac_shield(i)*fac_shield(j)*sss
+     &    *fac_shield(i)*fac_shield(j)*sss*faclipij
 c         write(iout,*) "derivative over thatai"
 c         write(iout,*) a22*gmuij1(1), a23*gmuij1(2) ,a32*gmuij1(3),
 c     &   a33*gmuij1(4) 
@@ -4427,7 +4633,7 @@ c     &   a33*gmuij2(4)
      &     +a33*gmuij2(4)
          gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
      &      geel_loc_ij*wel_loc
-     &    *fac_shield(i)*fac_shield(j)*sss
+     &    *fac_shield(i)*fac_shield(j)*sss*faclipij
 
 c  Derivative over j residue
          geel_loc_ji=a22*gmuji1(1)
@@ -4440,7 +4646,7 @@ c     &   a33*gmuji1(4)
 
         gloc(nphi+j,icg)=gloc(nphi+j,icg)+
      &      geel_loc_ji*wel_loc
-     &    *fac_shield(i)*fac_shield(j)*sss
+     &    *fac_shield(i)*fac_shield(j)*sss*faclipij
 
          geel_loc_ji=
      &     +a22*gmuji2(1)
@@ -4452,7 +4658,7 @@ 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
-     &    *fac_shield(i)*fac_shield(j)*sss
+     &    *fac_shield(i)*fac_shield(j)*sss*faclipij
 #endif
 cd          write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
 
@@ -4468,12 +4674,12 @@ C Partial derivatives in virtual-bond dihedral angles gamma
      &    gel_loc_loc(i-1)=gel_loc_loc(i-1)+ 
      &            (a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j)
      &           +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j))
-     &    *fac_shield(i)*fac_shield(j)*sss
+     &    *fac_shield(i)*fac_shield(j)*sss*faclipij
 
           gel_loc_loc(j-1)=gel_loc_loc(j-1)+ 
      &           (a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j)
      &           +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j))
-     &    *fac_shield(i)*fac_shield(j)*sss
+     &    *fac_shield(i)*fac_shield(j)*sss*faclipij
 C Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
           aux=eel_loc_ij/sss*sssgrad*rmij
           ggg(1)=aux*xj
@@ -4482,13 +4688,19 @@ C Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
           do l=1,3
             ggg(l)=ggg(l)+(agg(l,1)*muij(1)+
      &          agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4))
-     &    *fac_shield(i)*fac_shield(j)*sss
+     &    *fac_shield(i)*fac_shield(j)*sss*faclipij
             gel_loc_long(l,j)=gel_loc_long(l,j)+ggg(l)
             gel_loc_long(l,i)=gel_loc_long(l,i)-ggg(l)
 cgrad            ghalf=0.5d0*ggg(l)
 cgrad            gel_loc(l,i)=gel_loc(l,i)+ghalf
 cgrad            gel_loc(l,j)=gel_loc(l,j)+ghalf
           enddo
+          gel_loc_long(3,j)=gel_loc_long(3,j)+ 
+     &      ssgradlipj*eel_loc_ij/2.0d0*lipscale/faclipij
+
+          gel_loc_long(3,i)=gel_loc_long(3,i)+ 
+     &      ssgradlipi*eel_loc_ij/2.0d0*lipscale/faclipij
+
 cgrad          do k=i+1,j2
 cgrad            do l=1,3
 cgrad              gel_loc(l,k)=gel_loc(l,k)+ggg(l)
@@ -4498,19 +4710,19 @@ C Remaining derivatives of eello
           do l=1,3
             gel_loc(l,i)=gel_loc(l,i)+(aggi(l,1)*muij(1)+
      &        aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4))
-     &    *fac_shield(i)*fac_shield(j)*sss
+     &        *fac_shield(i)*fac_shield(j)*sss*faclipij
 
             gel_loc(l,i+1)=gel_loc(l,i+1)+(aggi1(l,1)*muij(1)+
-     &     aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4))
-     &    *fac_shield(i)*fac_shield(j)*sss
+     &        aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4))
+     &        *fac_shield(i)*fac_shield(j)*sss*faclipij
 
             gel_loc(l,j)=gel_loc(l,j)+(aggj(l,1)*muij(1)+
-     &       aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4))
-     &    *fac_shield(i)*fac_shield(j)*sss
+     &        aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4))
+     &        *fac_shield(i)*fac_shield(j)*sss*faclipij
 
             gel_loc(l,j1)=gel_loc(l,j1)+(aggj1(l,1)*muij(1)+
-     &     aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4))
-     &    *fac_shield(i)*fac_shield(j)*sss
+     &        aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4))
+     &        *fac_shield(i)*fac_shield(j)*sss*faclipij
 
           enddo
           ENDIF
@@ -4763,6 +4975,8 @@ C Third- and fourth-order contributions from turns
       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
+      double precision sslipi,sslipj,ssgradlipi,ssgradlipj,faclipij
+      common /lipcalc/ sslipi,sslipj,ssgradlipi,ssgradlipj,faclipij
       j=i+2
 c      write (iout,*) "eturn3",i,j,j1,j2
       a_temp(1,1)=a22
@@ -4800,7 +5014,7 @@ C        fac_shield(i)=0.4
 C        fac_shield(j)=0.6
         endif
         eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2))
-     &  *fac_shield(i)*fac_shield(j)
+     &  *fac_shield(i)*fac_shield(j)*faclipij
         eello_t3=0.5d0*(pizda(1,1)+pizda(2,2))
      &  *fac_shield(i)*fac_shield(j)
         if (energy_dec) write (iout,'(6heturn3,2i5,0pf7.3)') i,i+2,
@@ -4809,10 +5023,10 @@ C#ifdef NEWCORR
 C Derivatives in theta
         gloc(nphi+i,icg)=gloc(nphi+i,icg)
      &  +0.5d0*(gpizda1(1,1)+gpizda1(2,2))*wturn3
-     &   *fac_shield(i)*fac_shield(j)
+     &   *fac_shield(i)*fac_shield(j)*faclipij
         gloc(nphi+i+1,icg)=gloc(nphi+i+1,icg)
      &  +0.5d0*(gpizda2(1,1)+gpizda2(2,2))*wturn3
-     &   *fac_shield(i)*fac_shield(j)
+     &   *fac_shield(i)*fac_shield(j)*faclipij
 C#endif
 
 C Derivatives in shield mode
@@ -4867,14 +5081,14 @@ C Derivatives in gamma(i)
         call transpose2(auxmat2(1,1),auxmat3(1,1))
         call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
         gel_loc_turn3(i)=gel_loc_turn3(i)+0.5d0*(pizda(1,1)+pizda(2,2))
-     &   *fac_shield(i)*fac_shield(j)
+     &   *fac_shield(i)*fac_shield(j)*faclipij
 C Derivatives in gamma(i+1)
         call matmat2(EUg(1,1,i+1),EUgder(1,1,i+2),auxmat2(1,1))
         call transpose2(auxmat2(1,1),auxmat3(1,1))
         call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
         gel_loc_turn3(i+1)=gel_loc_turn3(i+1)
      &    +0.5d0*(pizda(1,1)+pizda(2,2))
-     &   *fac_shield(i)*fac_shield(j)
+     &   *fac_shield(i)*fac_shield(j)*faclipij
 C Cartesian derivatives
         do l=1,3
 c            ghalf1=0.5d0*agg(l,1)
@@ -4888,7 +5102,7 @@ c            ghalf4=0.5d0*agg(l,4)
           call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
           gcorr3_turn(l,i)=gcorr3_turn(l,i)
      &      +0.5d0*(pizda(1,1)+pizda(2,2))
-     &   *fac_shield(i)*fac_shield(j)
+     &      *fac_shield(i)*fac_shield(j)*faclipij
 
           a_temp(1,1)=aggi1(l,1)!+agg(l,1)
           a_temp(1,2)=aggi1(l,2)!+agg(l,2)
@@ -4897,7 +5111,7 @@ c            ghalf4=0.5d0*agg(l,4)
           call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
           gcorr3_turn(l,i+1)=gcorr3_turn(l,i+1)
      &      +0.5d0*(pizda(1,1)+pizda(2,2))
-     &   *fac_shield(i)*fac_shield(j)
+     &      *fac_shield(i)*fac_shield(j)*faclipij
           a_temp(1,1)=aggj(l,1)!+ghalf1
           a_temp(1,2)=aggj(l,2)!+ghalf2
           a_temp(2,1)=aggj(l,3)!+ghalf3
@@ -4905,7 +5119,7 @@ c            ghalf4=0.5d0*agg(l,4)
           call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
           gcorr3_turn(l,j)=gcorr3_turn(l,j)
      &      +0.5d0*(pizda(1,1)+pizda(2,2))
-     &   *fac_shield(i)*fac_shield(j)
+     &      *fac_shield(i)*fac_shield(j)*faclipij
           a_temp(1,1)=aggj1(l,1)
           a_temp(1,2)=aggj1(l,2)
           a_temp(2,1)=aggj1(l,3)
@@ -4913,8 +5127,17 @@ c            ghalf4=0.5d0*agg(l,4)
           call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
           gcorr3_turn(l,j1)=gcorr3_turn(l,j1)
      &      +0.5d0*(pizda(1,1)+pizda(2,2))
-     &   *fac_shield(i)*fac_shield(j)
+     &      *fac_shield(i)*fac_shield(j)*faclipij
         enddo
+        gshieldc_t3(3,i)=gshieldc_t3(3,i)+
+     &    ssgradlipi*eello_t3/4.0d0*lipscale
+        gshieldc_t3(3,j)=gshieldc_t3(3,j)+
+     &    ssgradlipj*eello_t3/4.0d0*lipscale
+        gshieldc_t3(3,i-1)=gshieldc_t3(3,i-1)+
+     &    ssgradlipi*eello_t3/4.0d0*lipscale
+        gshieldc_t3(3,j-1)=gshieldc_t3(3,j-1)+
+     &    ssgradlipj*eello_t3/4.0d0*lipscale
+
       return
       end
 C-------------------------------------------------------------------------------
@@ -5043,7 +5266,7 @@ C        fac_shield(i)=0.6
 C        fac_shield(j)=0.4
         endif
         eello_turn4=eello_turn4-(s1+s2+s3)
-     &  *fac_shield(i)*fac_shield(j)
+     &  *fac_shield(i)*fac_shield(j)*faclipij
         eello_t4=-(s1+s2+s3)
      &  *fac_shield(i)*fac_shield(j)
 c             write(iout,*)'chujOWO', auxvec(1),b1(1,iti2)
@@ -5091,12 +5314,6 @@ C     &     *2.0
      &              grad_shield(k,j)*eello_t4/fac_shield(j)
            enddo
            endif
-
-
-
-
-
-
 cd        write (2,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
 cd     &    ' eello_turn4_num',8*eello_turn4_num
 #ifdef NEWCORR
@@ -5126,7 +5343,7 @@ C Derivatives in gamma(i)
         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)
-     &  *fac_shield(i)*fac_shield(j)
+     &  *fac_shield(i)*fac_shield(j)*faclipij
 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)) 
@@ -5135,7 +5352,7 @@ C Derivatives in gamma(i+1)
         call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
         s3=0.5d0*(pizda(1,1)+pizda(2,2))
         gel_loc_turn4(i+1)=gel_loc_turn4(i+1)-(s2+s3)
-     &  *fac_shield(i)*fac_shield(j)
+     &  *fac_shield(i)*fac_shield(j)*faclipij
 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))
@@ -5147,7 +5364,7 @@ C Derivatives in gamma(i+2)
         call matmat2(auxmat3(1,1),e1t(1,1),pizda(1,1))
         s3=0.5d0*(pizda(1,1)+pizda(2,2))
         gel_loc_turn4(i+2)=gel_loc_turn4(i+2)-(s1+s2+s3)
-     &  *fac_shield(i)*fac_shield(j)
+     &  *fac_shield(i)*fac_shield(j)*faclipij
 C Cartesian derivatives
 C Derivatives of this turn contributions in DC(i+2)
         if (j.lt.nres-1) then
@@ -5167,7 +5384,7 @@ C Derivatives of this turn contributions in DC(i+2)
             s3=0.5d0*(pizda(1,1)+pizda(2,2))
             ggg(l)=-(s1+s2+s3)
             gcorr4_turn(l,i+2)=gcorr4_turn(l,i+2)-(s1+s2+s3)
-     &  *fac_shield(i)*fac_shield(j)
+     &       *fac_shield(i)*fac_shield(j)*faclipij
           enddo
         endif
 C Remaining derivatives of this turn contribution
@@ -5186,7 +5403,7 @@ C Remaining derivatives of this turn contribution
           call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
           s3=0.5d0*(pizda(1,1)+pizda(2,2))
           gcorr4_turn(l,i)=gcorr4_turn(l,i)-(s1+s2+s3)
-     &  *fac_shield(i)*fac_shield(j)
+     &     *fac_shield(i)*fac_shield(j)*faclipij
           a_temp(1,1)=aggi1(l,1)
           a_temp(1,2)=aggi1(l,2)
           a_temp(2,1)=aggi1(l,3)
@@ -5201,7 +5418,7 @@ C Remaining derivatives of this turn contribution
           call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
           s3=0.5d0*(pizda(1,1)+pizda(2,2))
           gcorr4_turn(l,i+1)=gcorr4_turn(l,i+1)-(s1+s2+s3)
-     &  *fac_shield(i)*fac_shield(j)
+     &      *fac_shield(i)*fac_shield(j)*faclipij
           a_temp(1,1)=aggj(l,1)
           a_temp(1,2)=aggj(l,2)
           a_temp(2,1)=aggj(l,3)
@@ -5216,7 +5433,7 @@ C Remaining derivatives of this turn contribution
           call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
           s3=0.5d0*(pizda(1,1)+pizda(2,2))
           gcorr4_turn(l,j)=gcorr4_turn(l,j)-(s1+s2+s3)
-     &  *fac_shield(i)*fac_shield(j)
+     &      *fac_shield(i)*fac_shield(j)*faclipij
           a_temp(1,1)=aggj1(l,1)
           a_temp(1,2)=aggj1(l,2)
           a_temp(2,1)=aggj1(l,3)
@@ -5232,8 +5449,16 @@ C Remaining derivatives of this turn contribution
           s3=0.5d0*(pizda(1,1)+pizda(2,2))
 c          write (iout,*) "s1",s1," s2",s2," s3",s3," s1+s2+s3",s1+s2+s3
           gcorr4_turn(l,j1)=gcorr4_turn(l,j1)-(s1+s2+s3)
-     &  *fac_shield(i)*fac_shield(j)
-        enddo
+     &      *fac_shield(i)*fac_shield(j)*faclipij
+        enddo
+        gshieldc_t4(3,i)=gshieldc_t4(3,i)+
+     &    ssgradlipi*eello_t4/4.0d0*lipscale
+        gshieldc_t4(3,j)=gshieldc_t4(3,j)+
+     &    ssgradlipj*eello_t4/4.0d0*lipscale
+        gshieldc_t4(3,i-1)=gshieldc_t4(3,i-1)+
+     &    ssgradlipi*eello_t4/4.0d0*lipscale
+        gshieldc_t4(3,j-1)=gshieldc_t4(3,j-1)+
+     &    ssgradlipj*eello_t4/4.0d0*lipscale
       return
       end
 C-----------------------------------------------------------------------------
@@ -5394,6 +5619,9 @@ C peptide-group centers and side chains and its gradient in virtual-bond and
 C side-chain vectors.
 C
       implicit none
+#ifdef MPI
+      include 'mpif.h'
+#endif
       include 'DIMENSIONS'
       include 'COMMON.GEO'
       include 'COMMON.VAR'
@@ -5405,6 +5633,7 @@ C
       include 'COMMON.IOUNITS'
       include 'COMMON.CONTROL'
       include 'COMMON.SPLITELE'
+      include 'COMMON.TIME1'
       double precision ggg(3)
       integer i,iint,j,k,iteli,itypj,subchap,ikont
       double precision xi,yi,zi,xj,yj,zj,rrij,sss1,sssgrad1,
@@ -5412,6 +5641,10 @@ C
       double precision evdw2,evdw2_14,evdwij
       double precision sscale,sscagrad
       double precision boxshift
+      external boxshift,to_box
+c#ifdef TIMING_ENE
+c      double precision time01
+c#endif
       evdw2=0.0D0
       evdw2_14=0.0d0
 c        print *,boxxsize,boxysize,boxzsize,'wymiary pudla'
@@ -5423,6 +5656,9 @@ C      do zshift=-1,1
       if (energy_dec) write (iout,*) "escp:",r_cut_int,rlamb
 c      do i=iatscp_s,iatscp_e
       do ikont=g_listscp_start,g_listscp_end
+c#ifdef TIMING_ENE
+c        time01=MPI_Wtime()
+c#endif
         i=newcontlistscpi(ikont)
         j=newcontlistscpj(ikont)
         if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
@@ -5430,6 +5666,7 @@ c      do i=iatscp_s,iatscp_e
         xi=0.5D0*(c(1,i)+c(1,i+1))
         yi=0.5D0*(c(2,i)+c(2,i+1))
         zi=0.5D0*(c(3,i)+c(3,i+1))
+!DIR$ INLINE
         call to_box(xi,yi,zi)
 c        do iint=1,nscp_gr(i)
 
@@ -5444,11 +5681,21 @@ C Uncomment following three lines for Ca-p interactions
           xj=c(1,j)
           yj=c(2,j)
           zj=c(3,j)
+!DIR$ INLINE
           call to_box(xj,yj,zj)
+c#ifdef TIMING_ENE
+c       time_escpsetup=time_escpsetup+MPI_Wtime()-time01
+c       time01=MPI_Wtime()
+c#endif
+!DIR$ INLINE
           xj=boxshift(xj-xi,boxxsize)
           yj=boxshift(yj-yi,boxysize)
           zj=boxshift(zj-zi,boxzsize)
 c          print *,xj,yj,zj,'polozenie j'
+c#ifdef TIMING_ENE
+c       time_escpsetup=time_escpsetup+MPI_Wtime()-time01
+c       time01=MPI_Wtime()
+c#endif
           rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
 c          print *,rrij
           sss=sscale(1.0d0/(dsqrt(rrij)),r_cut_int)
@@ -5509,6 +5756,9 @@ cgrad          enddo
             gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
             gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
           enddo
+c#ifdef TIMING_ENE
+c          time_escpcalc=time_escpcalc+MPI_Wtime()-time01
+c#endif
 c        endif !endif for sscale cutoff
 c        enddo ! j
 
@@ -5694,7 +5944,8 @@ C 15/02/13 CC dynamic SSbond - additional check
           if (ii.gt.nres .and. iabs(itype(iii)).eq.1 .and.
      &        iabs(itype(jjj)).eq.1) then
            call ssbond_ene(iii,jjj,eij)
-           ehpb=ehpb+2*eij
+c           ehpb=ehpb+2*eij
+           ehpb=ehpb+eij
          endif
 cd          write (iout,*) "eij",eij
 cd   &   ' waga=',waga,' fac=',fac
@@ -11811,6 +12062,7 @@ C--bufliptop--- here true lipid starts
 C      lipid
 C--buflipbot--- lipid ends buffore starts
 C--bordlipbot--buffore ends
+c      call cartprint
       eliptran=0.0
       do i=ilip_start,ilip_end
 C       do i=1,1
@@ -11865,6 +12117,8 @@ CV       do i=1,1
         if (itype(i).eq.ntyp1) cycle
         positi=(mod(c(3,i+nres),boxzsize))
         if (positi.le.0) positi=positi+boxzsize
+c        write(iout,*) "i",i," positi",positi,bordlipbot,buflipbot,
+c     &   bordliptop
 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)
@@ -11875,6 +12129,8 @@ C the energy transfer exist
         if (positi.lt.buflipbot) then
          fracinbuf=1.0d0-
      &     ((positi-bordlipbot)/lipbufthick)
+c         write (iout,*) "i",i,itype(i)," fracinbuf",fracinbuf
+c         write (iout,*) "i",i," liptranene",liptranene(itype(i))
 C lipbufthick is thickenes of lipid buffore
          sslip=sscalelip(fracinbuf)
          ssgradlip=-sscagradlip(fracinbuf)/lipbufthick
@@ -13250,11 +13506,16 @@ c--------------------------------------------------------------------------
       subroutine lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
       implicit none
       include 'DIMENSIONS'
+      include 'COMMON.IOUNITS'
       include 'COMMON.CHAIN'
       double precision xi,yi,zi,sslipi,ssgradlipi
       double precision fracinbuf
       double precision sscalelip,sscagradlip
-
+#ifdef DEBUG
+      write (iout,*) "bordlipbot",bordlipbot," bordliptop",bordliptop
+      write (iout,*) "buflipbot",buflipbot," lipbufthick",lipbufthick
+      write (iout,*) "xi yi zi",xi,yi,zi
+#endif
       if ((zi.gt.bordlipbot).and.(zi.lt.bordliptop)) then
 C the energy transfer exist
         if (zi.lt.buflipbot) then
@@ -13275,5 +13536,8 @@ C lipbufthick is thickenes of lipid buffore
         sslipi=0.0d0
         ssgradlipi=0.0
       endif
+#ifdef DEBUG
+      write (iout,*) "sslipi",sslipi," ssgradlipi",ssgradlipi
+#endif
       return
       end