ifdef poporawa
[unres4.git] / source / unres / io_config.f90
index 490ecad..0c2d645 100644 (file)
@@ -30,7 +30,7 @@
 !
 !-----------------------------------------------------------------------------
       contains
-#if .not. defined(WHAM_RUN) && .not. defined(CLUSTER)
+#if !defined(WHAM_RUN) && !defined(CLUSTER)
 !-----------------------------------------------------------------------------
 ! bank.F    io_csa
 !-----------------------------------------------------------------------------
 
       use geometry_data
       use energy_data
-      use control_data, only:maxtor,maxterm
+      use control_data, only:maxterm !,maxtor
       use MD_data
       use MPI_data
 !el      use map_data
       character(len=1) :: toronelet(-2:2) = (/"p","a","G","A","P"/)
       logical :: lprint,LaTeX
       real(kind=8),dimension(3,3,maxlob) :: blower     !(3,3,maxlob)
-      real(kind=8),dimension(13) :: b
+      real(kind=8),dimension(13) :: bN
       character(len=3) :: lancuch      !,ucase
 !el  local variables
       integer :: m,n,l,i,j,k,iblock,lll,llll,ll,nlobi,mm
       real(kind=8) :: v0ijsccor,v0ijsccor1,v0ijsccor2,v0ijsccor3,si,&
                 dwa16,rjunk,akl,v0ij,rri,epsij,rrij,sigeps,sigt1sq,&
                 sigt2sq,sigii1,sigii2,ratsig1,ratsig2,rsum_max,r_augm,&
-                res1
+                res1,epsijlip,epspeptube,epssctube,sigmapeptube,      &
+                sigmasctube
       integer :: ichir1,ichir2
 !      real(kind=8),dimension(maxterm,-maxtor:maxtor,-maxtor:maxtor,2) :: v1_el,v2_el !(maxterm,-maxtor:maxtor,-maxtor:maxtor,2)
 !el      allocate(v1_el(maxterm,-maxtor:maxtor,-maxtor:maxtor,2))
       allocate(isc(ntyp+1)) !(ntyp+1)
       allocate(restok(ntyp+1)) !(ntyp+1)
       allocate(abond0(maxbondterm,ntyp)) !(maxbondterm,ntyp)
-
+      allocate(long_r_sidechain(ntyp))
+      allocate(short_r_sidechain(ntyp))
       dsc(:)=0.0d0
       dsc_inv(:)=0.0d0
 
         endif
       enddo
 #else
-      read (ibond,*) junk,vbldp0,akp,rjunk,mp,ip,pstok
+      read (ibond,*) junk,vbldp0,vbldpDUM,akp,rjunk,mp,ip,pstok
       do i=1,ntyp
         read (ibond,*) nbondterm(i),(vbldsc0(j,i),aksc(j,i),abond0(j,i),&
          j=1,nbondterm(i)),msc(i),isc(i),restok(i)
       allocate(bthet(2,-ntyp:ntyp,-1:1,-1:1)) !(2,-ntyp:ntyp,-1:1,-1:1)
       allocate(polthet(0:3,-ntyp:ntyp))        !(0:3,-ntyp:ntyp)
       allocate(gthet(3,-ntyp:ntyp))    !(3,-ntyp:ntyp)
-      do i=-ntyp,ntyp
-       a0thet(i)=0.0D0
-       do j=1,2
-         do ichir1=-1,1
-          do ichir2=-1,1
-          athet(j,i,ichir1,ichir2)=0.0D0
-          bthet(j,i,ichir1,ichir2)=0.0D0
-          enddo
-         enddo
-        enddo
-        do j=0,3
-         polthet(j,i)=0.0D0
-        enddo
-       do j=1,3
-         gthet(j,i)=0.0D0
-        enddo
-       theta0(i)=0.0D0
-       sig0(i)=0.0D0
-       sigc0(i)=0.0D0
-      enddo
+
+      a0thet(:)=0.0D0
+      athet(:,:,:,:)=0.0D0
+      bthet(:,:,:,:)=0.0D0
+      polthet(:,:)=0.0D0
+      gthet(:,:)=0.0D0
+      theta0(:)=0.0D0
+      sig0(:)=0.0D0
+      sigc0(:)=0.0D0
+      allocate(liptranene(ntyp))
+!C reading lipid parameters
+      write (iout,*) "iliptranpar",iliptranpar
+      call flush(iout)
+       read(iliptranpar,*) pepliptran
+       print *,pepliptran
+       do i=1,ntyp
+       read(iliptranpar,*) liptranene(i)
+        print *,liptranene(i)
+       enddo
+       close(iliptranpar)
 
 #ifdef CRYST_THETA
 !
 
 !----------------------------------------------------
       allocate(ithetyp(-ntyp1:ntyp1)) !(-ntyp1:ntyp1)
-      allocate(aa0thet(-maxthetyp1:maxthetyp1,&
-        -maxthetyp1:maxthetyp1,-maxthetyp1:maxthetyp1,2))
+      allocate(aa0thet(-nthetyp-1:nthetyp+1,&
+        -nthetyp-1:nthetyp+1,-nthetyp-1:nthetyp+1,2))
 !(-maxthetyp1:maxthetyp1,-maxthetyp1:maxthetyp1,-maxthetyp1:maxthetyp1,2)
-      allocate(aathet(ntheterm,-maxthetyp1:maxthetyp1,&
-        -maxthetyp1:maxthetyp1,-maxthetyp1:maxthetyp1,2))
+      allocate(aathet(ntheterm,-nthetyp-1:nthetyp+1,&
+        -nthetyp-1:nthetyp+1,-nthetyp-1:nthetyp+1,2))
 !(maxtheterm,-maxthetyp1:maxthetyp1,&
 !        -maxthetyp1:maxthetyp1,-maxthetyp1:maxthetyp1,2)
-      allocate(bbthet(nsingle,ntheterm2,-maxthetyp1:maxthetyp1,&
-        -maxthetyp1:maxthetyp1,-maxthetyp1:maxthetyp1,2))
-      allocate(ccthet(nsingle,ntheterm2,-maxthetyp1:maxthetyp1,&
-        -maxthetyp1:maxthetyp1,-maxthetyp1:maxthetyp1,2))
-      allocate(ddthet(nsingle,ntheterm2,-maxthetyp1:maxthetyp1,&
-        -maxthetyp1:maxthetyp1,-maxthetyp1:maxthetyp1,2))
-      allocate(eethet(nsingle,ntheterm2,-maxthetyp1:maxthetyp1,&
-        -maxthetyp1:maxthetyp1,-maxthetyp1:maxthetyp1,2))
+      allocate(bbthet(nsingle,ntheterm2,-nthetyp-1:nthetyp+1,&
+        -nthetyp-1:nthetyp+1,-nthetyp-1:nthetyp+1,2))
+      allocate(ccthet(nsingle,ntheterm2,-nthetyp-1:nthetyp+1,&
+        -nthetyp-1:nthetyp+1,-nthetyp-1:nthetyp+1,2))
+      allocate(ddthet(nsingle,ntheterm2,-nthetyp-1:nthetyp+1,&
+        -nthetyp-1:nthetyp+1,-nthetyp-1:nthetyp+1,2))
+      allocate(eethet(nsingle,ntheterm2,-nthetyp-1:nthetyp+1,&
+        -nthetyp-1:nthetyp+1,-nthetyp-1:nthetyp+1,2))
 !(maxsingle,maxtheterm2,-maxthetyp1:maxthetyp1,&
 !        -maxthetyp1:maxthetyp1,-maxthetyp1:maxthetyp1,2)
-      allocate(ffthet(ndouble,ndouble,ntheterm3,-maxthetyp1:maxthetyp1,&
-        -maxthetyp1:maxthetyp1,-maxthetyp1:maxthetyp1,2))
-      allocate(ggthet(ndouble,ndouble,ntheterm3,-maxthetyp1:maxthetyp1,&
-        -maxthetyp1:maxthetyp1,-maxthetyp1:maxthetyp1,2))
+      allocate(ffthet(ndouble,ndouble,ntheterm3,-nthetyp-1:nthetyp+1,&
+        -nthetyp-1:nthetyp+1,-nthetyp-1:nthetyp+1,2))
+      allocate(ggthet(ndouble,ndouble,ntheterm3,-nthetyp-1:nthetyp+1,&
+        -nthetyp-1:nthetyp+1,-nthetyp-1:nthetyp+1,2))
 !(maxdouble,maxdouble,maxtheterm3,-maxthetyp1:maxthetyp1,&
 !        -maxthetyp1:maxthetyp1,-maxthetyp1:maxthetyp1,2))
 
       do i=-ntyp1,-1
         ithetyp(i)=-ithetyp(-i)
       enddo
-      do iblock=1,2
-      do i=-maxthetyp,maxthetyp
-        do j=-maxthetyp,maxthetyp
-          do k=-maxthetyp,maxthetyp
-            aa0thet(i,j,k,iblock)=0.0d0
-            do l=1,ntheterm
-              aathet(l,i,j,k,iblock)=0.0d0
-            enddo
-            do l=1,ntheterm2
-              do m=1,nsingle
-                bbthet(m,l,i,j,k,iblock)=0.0d0
-                ccthet(m,l,i,j,k,iblock)=0.0d0
-                ddthet(m,l,i,j,k,iblock)=0.0d0
-                eethet(m,l,i,j,k,iblock)=0.0d0
-              enddo
-            enddo
-            do l=1,ntheterm3
-              do m=1,ndouble
-                do mm=1,ndouble
-                 ffthet(mm,m,l,i,j,k,iblock)=0.0d0
-                 ggthet(mm,m,l,i,j,k,iblock)=0.0d0
-                enddo
-              enddo
-            enddo
-          enddo
-        enddo
-      enddo
-      enddo
+
+      aa0thet(:,:,:,:)=0.0d0
+      aathet(:,:,:,:,:)=0.0d0
+      bbthet(:,:,:,:,:,:)=0.0d0
+      ccthet(:,:,:,:,:,:)=0.0d0
+      ddthet(:,:,:,:,:,:)=0.0d0
+      eethet(:,:,:,:,:,:)=0.0d0
+      ffthet(:,:,:,:,:,:,:)=0.0d0
+      ggthet(:,:,:,:,:,:,:)=0.0d0
+
 ! VAR:iblock means terminally blocking group 1=non-proline 2=proline
       do iblock=1,2 
 ! VAR:ntethtyp is type of theta potentials type currently 0=glycine 
       allocate(censc(3,maxlob,-ntyp:ntyp)) !(3,maxlob,-ntyp:ntyp)
       allocate(gaussc(3,3,maxlob,-ntyp:ntyp)) !(3,3,maxlob,-ntyp:ntyp)
 
-      do i=1,ntyp
-       do j=1,maxlob
-         bsc(j,i)=0.0D0
-         nlob(i)=0
-        enddo
-      enddo
-      nlob(ntyp1)=0
-      dsc(ntyp1)=0.0D0
-
-      do i=-ntyp,ntyp
-       do j=1,maxlob
-         do k=1,3
-           censc(k,j,i)=0.0D0
-          enddo
-          do k=1,3
-           do l=1,3
-             gaussc(l,k,j,i)=0.0D0
-            enddo
-          enddo
-        enddo
-      enddo
-
+      bsc(:,:)=0.0D0
+      nlob(:)=0
+      nlob(:)=0
+      dsc(:)=0.0D0
+      censc(:,:,:)=0.0D0
+      gaussc(:,:,:,:)=0.0D0
 #ifdef CRYST_SC
 !
 ! Read the parameters of the probability distribution/energy expression
       allocate(v1(maxterm,-ntortyp:ntortyp,-ntortyp:ntortyp,2))
       allocate(v2(maxterm,-ntortyp:ntortyp,-ntortyp:ntortyp,2)) !(maxterm,-maxtor:maxtor,-maxtor:maxtor,2)
 !el---------------------------
-      do iblock=1,2
-        do i=-ntortyp,ntortyp
-          do j=-ntortyp,ntortyp
-            nterm(i,j,iblock)=0
-            nlor(i,j,iblock)=0
-          enddo
-        enddo
-      enddo
+      nterm(:,:,:)=0
+      nlor(:,:,:)=0
 !el---------------------------
 
       read (itorp,*,end=113,err=113) (itortyp(i),i=1,ntyp)
       do i=-ntyp,-1
        itortyp(i)=-itortyp(-i)
       enddo
-!      itortyp(ntyp1)=ntortyp
-!      itortyp(-ntyp1)=-ntortyp
+      itortyp(ntyp1)=ntortyp
+      itortyp(-ntyp1)=-ntortyp
       do iblock=1,2 
       write (iout,*) 'ntortyp',ntortyp
       do i=0,ntortyp-1
 
       do i=0,nloctyp-1
         read (ifourier,*,end=115,err=115)
-        read (ifourier,*,end=115,err=115) (b(ii),ii=1,13)
+        read (ifourier,*,end=115,err=115) (bN(ii),ii=1,13)
         if (lprint) then
           write (iout,*) 'Type',i
-          write (iout,'(a,i2,a,f10.5)') ('b(',ii,')=',b(ii),ii=1,13)
+          write (iout,'(a,i2,a,f10.5)') ('bN(',ii,')=',bN(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)
+        B1(1,i)  = bN(3)
+        B1(2,i)  = bN(5)
+        B1(1,-i) = bN(3)
+        B1(2,-i) = -bN(5)
 !        b1(1,i)=0.0d0
 !        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)
+        B1tilde(1,i) = bN(3)
+        B1tilde(2,i) =-bN(5)
+        B1tilde(1,-i) =-bN(3)
+        B1tilde(2,-i) =bN(5)
 !        b1tilde(1,i)=0.0d0
 !        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)
+        B2(1,i)  = bN(2)
+        B2(2,i)  = bN(4)
+        B2(1,-i)  =bN(2)
+        B2(2,-i)  =-bN(4)
 
 !        b2(1,i)=0.0d0
 !        b2(2,i)=0.0d0
-        CC(1,1,i)= b(7)
-        CC(2,2,i)=-b(7)
-        CC(2,1,i)= b(9)
-        CC(1,2,i)= b(9)
-        CC(1,1,-i)= b(7)
-        CC(2,2,-i)=-b(7)
-        CC(2,1,-i)=-b(9)
-        CC(1,2,-i)=-b(9)
+        CC(1,1,i)= bN(7)
+        CC(2,2,i)=-bN(7)
+        CC(2,1,i)= bN(9)
+        CC(1,2,i)= bN(9)
+        CC(1,1,-i)= bN(7)
+        CC(2,2,-i)=-bN(7)
+        CC(2,1,-i)=-bN(9)
+        CC(1,2,-i)=-bN(9)
 !        CC(1,1,i)=0.0d0
 !        CC(2,2,i)=0.0d0
 !        CC(2,1,i)=0.0d0
 !        CC(1,2,i)=0.0d0
-        Ctilde(1,1,i)=b(7)
-        Ctilde(1,2,i)=b(9)
-        Ctilde(2,1,i)=-b(9)
-        Ctilde(2,2,i)=b(7)
-        Ctilde(1,1,-i)=b(7)
-        Ctilde(1,2,-i)=-b(9)
-        Ctilde(2,1,-i)=b(9)
-        Ctilde(2,2,-i)=b(7)
+        Ctilde(1,1,i)=bN(7)
+        Ctilde(1,2,i)=bN(9)
+        Ctilde(2,1,i)=-bN(9)
+        Ctilde(2,2,i)=bN(7)
+        Ctilde(1,1,-i)=bN(7)
+        Ctilde(1,2,-i)=-bN(9)
+        Ctilde(2,1,-i)=bN(9)
+        Ctilde(2,2,-i)=bN(7)
 
 !        Ctilde(1,1,i)=0.0d0
 !        Ctilde(1,2,i)=0.0d0
 !        Ctilde(2,1,i)=0.0d0
 !        Ctilde(2,2,i)=0.0d0
-        DD(1,1,i)= b(6)
-        DD(2,2,i)=-b(6)
-        DD(2,1,i)= b(8)
-        DD(1,2,i)= b(8)
-        DD(1,1,-i)= b(6)
-        DD(2,2,-i)=-b(6)
-        DD(2,1,-i)=-b(8)
-        DD(1,2,-i)=-b(8)
+        DD(1,1,i)= bN(6)
+        DD(2,2,i)=-bN(6)
+        DD(2,1,i)= bN(8)
+        DD(1,2,i)= bN(8)
+        DD(1,1,-i)= bN(6)
+        DD(2,2,-i)=-bN(6)
+        DD(2,1,-i)=-bN(8)
+        DD(1,2,-i)=-bN(8)
 !        DD(1,1,i)=0.0d0
 !        DD(2,2,i)=0.0d0
 !        DD(2,1,i)=0.0d0
 !        DD(1,2,i)=0.0d0
-        Dtilde(1,1,i)=b(6)
-        Dtilde(1,2,i)=b(8)
-        Dtilde(2,1,i)=-b(8)
-        Dtilde(2,2,i)=b(6)
-        Dtilde(1,1,-i)=b(6)
-        Dtilde(1,2,-i)=-b(8)
-        Dtilde(2,1,-i)=b(8)
-        Dtilde(2,2,-i)=b(6)
+        Dtilde(1,1,i)=bN(6)
+        Dtilde(1,2,i)=bN(8)
+        Dtilde(2,1,i)=-bN(8)
+        Dtilde(2,2,i)=bN(6)
+        Dtilde(1,1,-i)=bN(6)
+        Dtilde(1,2,-i)=-bN(8)
+        Dtilde(2,1,-i)=bN(8)
+        Dtilde(2,2,-i)=bN(6)
 
 !        Dtilde(1,1,i)=0.0d0
 !        Dtilde(1,2,i)=0.0d0
 !        Dtilde(2,1,i)=0.0d0
 !        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)
+        EE(1,1,i)= bN(10)+bN(11)
+        EE(2,2,i)=-bN(10)+bN(11)
+        EE(2,1,i)= bN(12)-bN(13)
+        EE(1,2,i)= bN(12)+bN(13)
+        EE(1,1,-i)= bN(10)+bN(11)
+        EE(2,2,-i)=-bN(10)+bN(11)
+        EE(2,1,-i)=-bN(12)+bN(13)
+        EE(1,2,-i)=-bN(12)-bN(13)
 
 !        ee(1,1,i)=1.0d0
 !        ee(2,2,i)=1.0d0
       allocate(eps_scp(ntyp,2),rscp(ntyp,2)) !(ntyp,2)
       allocate(sigma0(ntyp),rr0(ntyp),sigii(ntyp)) !(ntyp)
       allocate(chip(ntyp1),alp(ntyp1)) !(ntyp)
-      do i=1,ntyp
-       do j=1,ntyp
-         augm(i,j)=0.0D0
-        enddo
-       chip(i)=0.0D0
-       alp(i)=0.0D0
-       sigma0(i)=0.0D0
-       sigii(i)=0.0D0
-       rr0(i)=0.0D0
-      enddo
+      allocate(epslip(ntyp,ntyp))
+      augm(:,:)=0.0D0
+      chip(:)=0.0D0
+      alp(:)=0.0D0
+      sigma0(:)=0.0D0
+      sigii(:)=0.0D0
+      rr0(:)=0.0D0
 !--------------------------------
 
       read (isidep,*,end=117,err=117) ipot,expon
         read (isidep,*,end=117,err=117)(sigii(i),i=1,ntyp)
         read (isidep,*,end=117,err=117)(chip(i),i=1,ntyp)
         read (isidep,*,end=117,err=117)(alp(i),i=1,ntyp)
+        do i=1,ntyp
+         read (isidep,*,end=117,err=117)(epslip(i,j),j=i,ntyp)
+        enddo
+
 ! For the GB potential convert sigma'**2 into chi'
         if (ipot.eq.4) then
          do i=1,ntyp
 ! Calculate the "working" parameters of SC interactions.
 
 !el from module energy - COMMON.INTERACT-------
-      allocate(aa(ntyp1,ntyp1),bb(ntyp1,ntyp1),chi(ntyp1,ntyp1)) !(ntyp,ntyp)
+      allocate(aa_aq(ntyp1,ntyp1),bb_aq(ntyp1,ntyp1),chi(ntyp1,ntyp1)) !(ntyp,ntyp)
+      allocate(aa_lip(ntyp1,ntyp1),bb_lip(ntyp1,ntyp1)) !(ntyp,ntyp)
       allocate(sigma(0:ntyp1,0:ntyp1),r0(ntyp1,ntyp1)) !(0:ntyp1,0:ntyp1)
-      do i=1,ntyp1
-        do j=1,ntyp1
-          aa(i,j)=0.0D0
-          bb(i,j)=0.0D0
-          chi(i,j)=0.0D0
-          sigma(i,j)=0.0D0
-          r0(i,j)=0.0D0
-        enddo
-      enddo
+      allocate(acavtub(ntyp1),bcavtub(ntyp1),ccavtub(ntyp1),&
+        dcavtub(ntyp1))
+      allocate(sc_aa_tube_par(ntyp1),sc_bb_tube_par(ntyp1),&
+        tubetranene(ntyp1))
+      aa_aq(:,:)=0.0D0
+      bb_aq(:,:)=0.0D0
+      aa_lip(:,:)=0.0D0
+      bb_lip(:,:)=0.0D0
+      chi(:,:)=0.0D0
+      sigma(:,:)=0.0D0
+      r0(:,:)=0.0D0
+      acavtub(:)=0.0d0
+      bcavtub(:)=0.0d0
+      ccavtub(:)=0.0d0
+      dcavtub(:)=0.0d0
+      sc_aa_tube_par(:)=0.0d0
+      sc_bb_tube_par(:)=0.0d0
+
 !--------------------------------
 
       do i=2,ntyp
         do j=1,i-1
           eps(i,j)=eps(j,i)
+          epslip(i,j)=epslip(j,i)
         enddo
       enddo
       do i=1,ntyp
          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)
+!C          write(iout,*) aa_lip
          if (ipot.gt.2) then
            sigt1sq=sigma0(i)**2
            sigt2sq=sigma0(j)**2
           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
       enddo
-
-      allocate(aad(ntyp,2),bad(ntyp,2)) !(ntyp,2)
+      write(iout,*) "tube param"
+      read(itube,*) epspeptube,sigmapeptube,acavtubpep,bcavtubpep, &
+      ccavtubpep,dcavtubpep,tubetranenepep
+      sigmapeptube=sigmapeptube**6
+      sigeps=dsign(1.0D0,epspeptube)
+      epspeptube=dabs(epspeptube)
+      pep_aa_tube=4.0d0*epspeptube*sigmapeptube**2
+      pep_bb_tube=-sigeps*4.0d0*epspeptube*sigmapeptube
+      write(iout,*) pep_aa_tube,pep_bb_tube,tubetranenepep
       do i=1,ntyp
-       do j=1,2
-         bad(i,j)=0.0D0
-        enddo
+       read(itube,*) epssctube,sigmasctube,acavtub(i),bcavtub(i), &
+      ccavtub(i),dcavtub(i),tubetranene(i)
+       sigmasctube=sigmasctube**6
+       sigeps=dsign(1.0D0,epssctube)
+       epssctube=dabs(epssctube)
+       sc_aa_tube_par(i)=4.0d0*epssctube*sigmasctube**2
+       sc_bb_tube_par(i)=-sigeps*4.0d0*epssctube*sigmasctube
+      write(iout,*) sc_aa_tube_par(i), sc_bb_tube_par(i),tubetranene(i)
       enddo
 
+      allocate(aad(ntyp,2),bad(ntyp,2)) !(ntyp,2)
+      bad(:,:)=0.0D0
+
 #ifdef OLDSCP
 !
 ! Define the SC-p interaction constants (hard-coded; old style)
           goto 10
         else if (card(:3).eq.'TER') then
 ! End current chain
-          ires_old=ires+1
+          ires_old=ires+2
           ishift1=ishift1+1
           itype(ires_old)=ntyp1
+          itype(ires_old-1)=ntyp1
           ibeg=2
 !          write (iout,*) "Chain ended",ires,ishift,ires_old
           if (unres_pdb) then
             enddo
           else
             call sccenter(ires,iii,sccor)
+!          iii=0
           endif
           iii=0
         endif
 !              write (iout,*) "Calculating sidechain center iii",iii
               if (unres_pdb) then
                 do j=1,3
-                  dc(j,ires+nres)=sccor(j,iii)
+                  dc(j,ires+ishift1-ishift-1)=sccor(j,iii)
                 enddo
               else
                 call sccenter(ires_old,iii,sccor)
       nres=ires
       do i=2,nres-1
 !        write (iout,*) i,itype(i)
-        if (itype(i).eq.ntyp1) then
+!        if (itype(i).eq.ntyp1) then
 !          write (iout,*) "dummy",i,itype(i)
-          do j=1,3
-            c(j,i)=((c(j,i-1)+c(j,i+1))/2+2*c(j,i-1)-c(j,i-2))/2
+!          do j=1,3
+!            c(j,i)=((c(j,i-1)+c(j,i+1))/2+2*c(j,i-1)-c(j,i-2))/2
 !            c(j,i)=(c(j,i-1)+c(j,i+1))/2
-            dc(j,i)=c(j,i)
-          enddo
-        endif
+!            dc(j,i)=c(j,i)
+!          enddo
+!        endif
+        if (itype(i).eq.ntyp1) then
+         if (itype(i+1).eq.ntyp1) then
+! 16/01/2014 by Adasko: Adding to dummy atoms in the chain
+! first is connected prevous chain (itype(i+1).eq.ntyp1)=true
+! second dummy atom is conected to next chain itype(i+1).eq.ntyp1=false
+           if (unres_pdb) then
+! 2/15/2013 by Adam: corrected insertion of the last dummy residue
+!            print *,i,'tu dochodze'
+            call refsys(i-3,i-2,i-1,e1,e2,e3,fail)
+            if (fail) then
+              e2(1)=0.0d0
+              e2(2)=1.0d0
+              e2(3)=0.0d0
+            endif !fail
+            print *,i,'a tu?'
+            do j=1,3
+             c(j,i)=c(j,i-1)-1.9d0*e2(j)
+            enddo
+           else   !unres_pdb
+           do j=1,3
+             dcj=(c(j,i-2)-c(j,i-3))/2.0
+            if (dcj.eq.0) dcj=1.23591524223
+             c(j,i)=c(j,i-1)+dcj
+             c(j,nres+i)=c(j,i)
+           enddo
+          endif   !unres_pdb
+         else     !itype(i+1).eq.ntyp1
+          if (unres_pdb) then
+! 2/15/2013 by Adam: corrected insertion of the first dummy residue
+            call refsys(i+1,i+2,i+3,e1,e2,e3,fail)
+            if (fail) then
+              e2(1)=0.0d0
+              e2(2)=1.0d0
+              e2(3)=0.0d0
+            endif
+            do j=1,3
+              c(j,i)=c(j,i+1)-1.9d0*e2(j)
+            enddo
+          else !unres_pdb
+           do j=1,3
+            dcj=(c(j,i+3)-c(j,i+2))/2.0
+            if (dcj.eq.0) dcj=1.23591524223
+            c(j,i)=c(j,i+1)-dcj
+            c(j,nres+i)=c(j,i)
+           enddo
+          endif !unres_pdb
+         endif !itype(i+1).eq.ntyp1
+        endif  !itype.eq.ntyp1
+
       enddo
 ! Calculate the CM of the last side chain.
       if (iii.gt.0)  then
             e2(3)=0.0d0
           endif
           do j=1,3
-            c(j,nres)=c(j,nres-1)-3.8d0*e2(j)
+            c(j,nres)=c(j,nres-1)-1.9d0*e2(j)
           enddo
         else
         do j=1,3
-          dcj=c(j,nres-2)-c(j,nres-3)
+          dcj=(c(j,nres-2)-c(j,nres-3))/2.0
           c(j,nres)=c(j,nres-1)+dcj
           c(j,2*nres)=c(j,nres)
         enddo
         endif
       endif
+!el kontrola nres w pliku inputowym WHAM-a w porownaniu z wartoscia wczytana z pliku pdb
+#ifdef WHAM_RUN
+      if (nres.ne.nres0) then
+        write (iout,*) "Error: wrong parameter value: NRES=",nres,&
+                       " NRES0=",nres0
+        stop "Error nres value in WHAM input"
+      endif
+#endif
 !---------------------------------
 !el reallocate tables
 !      do i=1,maxres/3
             e2(3)=0.0d0
           endif
           do j=1,3
-            c(j,1)=c(j,2)-3.8d0*e2(j)
+            c(j,1)=c(j,2)-1.9d0*e2(j)
           enddo
         else
         do j=1,3
-          dcj=c(j,4)-c(j,3)
+          dcj=(c(j,4)-c(j,3))/2.0
           c(j,1)=c(j,2)-dcj
           c(j,nres+1)=c(j,1)
         enddo
           (c(j,ires+nres),j=1,3)
       enddo
       endif
+! znamy już nres wiec mozna alokowac tablice
 ! Calculate internal coordinates.
       if(me.eq.king.or..not.out1file)then
        write (iout,'(a)') &
 !!!el
       if(.not.allocated(theta)) then
         allocate(theta(nres+2))
-!        allocate(phi(nres+2))
-!        allocate(alph(nres+2))
-!        allocate(omeg(nres+2))
-        do i=1,nres+2
-          theta(i)=0.0d0
-!          phi(i)=0.0d0
-!          alph(i)=0.0d0
-!          omeg(i)=0.0d0
-        enddo
+        theta(:)=0.0d0
       endif
-!       allocate(costtab(nres))
-!        allocate(sinttab(nres))
-!        allocate(cost2tab(nres))
-!        allocate(sint2tab(nres))
-!        allocate(xxref(nres))
-!        allocate(yyref(nres))
-!        allocate(zzref(nres)) !(maxres)
-!        do i=1,nres
-!          costtab(i)=0.0d0
-!          sinttab(i)=0.0d0
-!          cost2tab(i)=0.0d0
-!          sint2tab(i)=0.0d0
-!          xxref(i)=0.0d0
-!          yyref(i)=0.0d0
-!          zzref(i)=0.0d0
-!        enddo
-!      endif 
+
       if(.not.allocated(phi)) allocate(phi(nres+2))
       if(.not.allocated(alph)) allocate(alph(nres+2))
       if(.not.allocated(omeg)) allocate(omeg(nres+2))
       if(.not.allocated(dc_norm)) then
 !      if(.not.allocated(dc_norm)) allocate(dc_norm(3,0:2*nres+2))
         allocate(dc_norm(3,0:2*nres+2))
-        do i=0,2*nres+2
-          dc_norm(1,i)=0.d0
-          dc_norm(2,i)=0.d0
-          dc_norm(3,i)=0.d0
-        enddo
+        dc_norm(:,:)=0.d0
       endif
  
       call int_from_cart(.true.,.false.)
-      call sc_loc_geom(.true.)
-!      call sc_loc_geom(.false.)
-! wczesbiej bylo false
+      call sc_loc_geom(.false.)
       do i=1,nres
         thetaref(i)=theta(i)
         phiref(i)=phi(i)
 ! enddiagnostic
 ! makes copy of chains
         write (iout,*) "symetr", symetr
+      do j=1,3
+      dc(j,0)=c(j,1)
+      enddo
 
       if (symetr.gt.1) then
        call permut(symetr)
 
       return
       end subroutine readpdb
-#if .not. defined(WHAM_RUN) && .not. defined(CLUSTER)
+#if !defined(WHAM_RUN) && !defined(CLUSTER)
 !-----------------------------------------------------------------------------
 ! readrtns_CSA.F
 !-----------------------------------------------------------------------------
       character(len=640) :: controlcard
 
       real(kind=8) :: seed,rmsdbc,rmsdbc1max,rmsdbcm,drms,timem!,&
-                 
+      integer i                 
 
       nglob_csa=0
       eglob_csa=1d99
       timem=timlim
       modecalc=0
       call reada(controlcard,"T_BATH",t_bath,300.0d0)
+!C SHIELD keyword sets if the shielding effect of side-chains is used
+!C 0 denots no shielding is used all peptide are equally despite the 
+!C solvent accesible area
+!C 1 the newly introduced function
+!C 2 reseved for further possible developement
+      call readi(controlcard,'SHIELD',shield_mode,0)
+!C      if(me.eq.king .or. .not. out1file .and. fg_rank.eq.0) then
+        write(iout,*) "shield_mode",shield_mode
+!C  Varibles set size of box
+      with_theta_constr = index(controlcard,"WITH_THETA_CONSTR").gt.0
+      write (iout,*) "with_theta_constr ",with_theta_constr
+      AFMlog=(index(controlcard,'AFM'))
+      selfguide=(index(controlcard,'SELFGUIDE'))
+      print *,'AFMlog',AFMlog,selfguide,"KUPA"
+      call readi(controlcard,'GENCONSTR',genconstr,0)
+      call reada(controlcard,'BOXX',boxxsize,100.0d0)
+      call reada(controlcard,'BOXY',boxysize,100.0d0)
+      call reada(controlcard,'BOXZ',boxzsize,100.0d0)
+      call readi(controlcard,'TUBEMOD',tubemode,0)
+      write (iout,*) TUBEmode,"TUBEMODE"
+      if (TUBEmode.gt.0) then
+       call reada(controlcard,"XTUBE",tubecenter(1),0.0d0)
+       call reada(controlcard,"YTUBE",tubecenter(2),0.0d0)
+       call reada(controlcard,"ZTUBE",tubecenter(3),0.0d0)
+       call reada(controlcard,"RTUBE",tubeR0,0.0d0)
+       call reada(controlcard,"TUBETOP",bordtubetop,boxzsize)
+       call reada(controlcard,"TUBEBOT",bordtubebot,0.0d0)
+       call reada(controlcard,"TUBEBUF",tubebufthick,1.0d0)
+       buftubebot=bordtubebot+tubebufthick
+       buftubetop=bordtubetop-tubebufthick
+      endif
+
+! CUTOFFF ON ELECTROSTATICS
+      call reada(controlcard,"R_CUT_ELE",r_cut_ele,15.0d0)
+      call reada(controlcard,"LAMBDA_ELE",rlamb_ele,0.3d0)
+      write(iout,*) "R_CUT_ELE=",r_cut_ele
+! Lipidic parameters
+      call reada(controlcard,"LIPTHICK",lipthick,0.0d0)
+      call reada(controlcard,"LIPAQBUF",lipbufthick,0.0d0)
+      if (lipthick.gt.0.0d0) then
+       bordliptop=(boxzsize+lipthick)/2.0
+       bordlipbot=bordliptop-lipthick
+      if ((bordliptop.gt.boxzsize).or.(bordlipbot.lt.0.0)) &
+      write(iout,*) "WARNING WRONG SIZE OF LIPIDIC PHASE"
+      buflipbot=bordlipbot+lipbufthick
+      bufliptop=bordliptop-lipbufthick
+      if ((lipbufthick*2.0d0).gt.lipthick) &
+       write(iout,*) "WARNING WRONG SIZE OF LIP AQ BUF"
+      endif !lipthick.gt.0
+      write(iout,*) "bordliptop=",bordliptop
+      write(iout,*) "bordlipbot=",bordlipbot
+      write(iout,*) "bufliptop=",bufliptop
+      write(iout,*) "buflipbot=",buflipbot
+      write (iout,*) "SHIELD MODE",shield_mode
+
+!C-------------------------
       minim=(index(controlcard,'MINIMIZE').gt.0)
       dccart=(index(controlcard,'CART').gt.0)
       overlapsc=(index(controlcard,'OVERLAP').gt.0)
       if(me.eq.king.or..not.out1file) &
        write (iout,'(2a)') diagmeth(kdiag),&
         ' routine used to diagonalize matrices.'
+      if (shield_mode.gt.0) then
+      pi=3.141592d0
+!C VSolvSphere the volume of solving sphere
+!C      print *,pi,"pi"
+!C rpp(1,1) is the energy r0 for peptide group contact and will be used for it 
+!C there will be no distinction between proline peptide group and normal peptide
+!C group in case of shielding parameters
+      VSolvSphere=4.0/3.0*pi*rpp(1,1)**3
+      VSolvSphere_div=VSolvSphere-4.0/3.0*pi*(rpp(1,1)/2.0)**3
+      write (iout,*) VSolvSphere,VSolvSphere_div
+!C long axis of side chain 
+      do i=1,ntyp
+      long_r_sidechain(i)=vbldsc0(1,i)
+      short_r_sidechain(i)=sigma0(i)
+      write(iout,*) "parame for long and short axis",i,vbldsc0(1,i),&
+         sigma0(i) 
+      enddo
+      buff_shield=1.0d0
+      endif
       return
       end subroutine read_control
 !-----------------------------------------------------------------------------
 !-----------------------------------------------------------------------------
       subroutine openunits
 
-      use energy_data, only: usampl
+      use MD_data, only: usampl
       use csa_data
       use MPI_data
       use control_data, only:out1file
 !      print *,"Processor",myrank," opened file IELEP" 
       call getenv_loc('SIDEPAR',sidename)
       open (isidep,file=sidename,status='old',action='read')
+      call getenv_loc('LIPTRANPAR',liptranname)
+      open (iliptranpar,file=liptranname,status='old',action='read')
+      call getenv_loc('TUBEPAR',tubename)
+      open (itube,file=tubename,status='old',action='read')
+
 !      print *,"Processor",myrank," opened file ISIDEP" 
 !      print *,"Processor",myrank," opened parameter files" 
 #elif (defined G77)
       open (ielep,file=elename,status='old')
       call getenv_loc('SIDEPAR',sidename)
       open (isidep,file=sidename,status='old')
+      call getenv_loc('LIPTRANPAR',liptranname)
+      open (iliptranpar,file=liptranname,status='old')
+      call getenv_loc('TUBEPAR',tubename)
+      open (itube,file=tubename,status='old')
 #else
       open(1,file=pref_orig(:ilen(pref_orig))//'.inp',status='old',&
         readonly)
       open (ielep,file=elename,status='old',readonly)
       call getenv_loc('SIDEPAR',sidename)
       open (isidep,file=sidename,status='old',readonly)
+      call getenv_loc('LIPTRANPAR',liptranname)
+      open (iliptranpar,file=liptranname,status='old',action='read')
+      call getenv_loc('TUBEPAR',tubename)
+      open (itube,file=tubename,status='old',action='read')
+
 #ifndef CRYST_SC
       call getenv_loc('ROTPARPDB',rotname_pdb)
       open (irotam_pdb,file=rotname_pdb,status='old',action='read')
       subroutine readrst
 
       use geometry_data, only: nres,dc
-      use energy_data, only: usampl,iset
       use MD_data
 !      implicit real*8 (a-h,o-z)
 !      include 'DIMENSIONS'
 
       open(irest2,file=rest2name,status='unknown')
       read(irest2,*) totT,EK,potE,totE,t_bath
-      do i=1,2*nres
+      totTafm=totT
+!      do i=1,2*nres
+! AL 4/17/17: Now reading d_t(0,:) too
+      do i=0,2*nres
          read(irest2,'(3e15.5)') (d_t(j,i),j=1,3)
       enddo
-      do i=1,2*nres
+!      do i=1,2*nres
+! AL 4/17/17: Now reading d_c(0,:) too
+      do i=0,2*nres
          read(irest2,'(3e15.5)') (dc(j,i),j=1,3)
       enddo
       if(usampl) then