UDALO SIE TERAZ DEBUG
[unres.git] / source / unres / src_MD / int_to_cart.f
index 0528af7..149e86f 100644 (file)
@@ -15,7 +15,7 @@ c-------------------------------------------------------------
       include 'COMMON.IOUNITS'
       
 c   calculating dE/ddc1      
-       if (nres.lt.3) return
+       if (nres.lt.3) goto 18
        do j=1,3
          gcart(j,1)=gcart(j,1)+gloc(1,icg)*dphi(j,1,4)
      &     +gloc(nres-2,icg)*dtheta(j,1,3)      
@@ -113,6 +113,132 @@ c   The side-chain vector derivatives
             enddo
          endif     
        enddo                                                                                                                                                   
+c----------------------------------------------------------------------
+C INTERTYP=1 SC...Ca...Ca...Ca
+C INTERTYP=2 Ca...Ca...Ca...SC
+C INTERTYP=3 SC...Ca...Ca...SC
+c   calculating dE/ddc1      
+  18   continue
+       if (nres.lt.2) return
+       if ((nres.lt.3).and.(itype(1).eq.10)) return
+       if (itype(1).ne.10) then
+        do j=1,3
+cc Derviative was calculated for oposite vector of side chain therefore
+c there is "-" sign before gloc_sc
+         gxcart(j,1)=gxcart(j,1)-gloc_sc(1,0,icg)*
+     &     dtauangle(j,1,1,3)
+         gcart(j,1)=gcart(j,1)+gloc_sc(1,0,icg)*
+     &     dtauangle(j,1,2,3)
+          if (itype(2).ne.10) then
+         gxcart(j,1)= gxcart(j,1)
+     &               -gloc_sc(3,0,icg)*dtauangle(j,3,1,3)
+         gcart(j,1)=gcart(j,1)+gloc_sc(3,0,icg)*
+            dtauangle(j,3,2,3)
+          endif
+       enddo
+       endif
+         if (nres.ge.3).and.(itype(3).ne.10) then
+         do j=1,3
+         gcart(j,1)=gcart(j,1)+gloc_sc(2,1,icg)*dtauangle(j,2,1,4)
+         enddo
+         endif
+c   As potetnial DO NOT depend on omicron anlge their derivative is
+c   ommited 
+c     &     +gloc_sc(intertyp,nres-2,icg)*dtheta(j,1,3)         
+     
+c     Calculating the remainder of dE/ddc2
+       do j=1,3
+         if(itype(2).ne.10) then
+           if (itype(1).ne.10) gxcart=(j,2)=gxcart(j,2)+
+     &                         gloc_sc(3,0,icg)*dtauangle(j,3,3,3)
+          if ((itype(3).ne.10).and.(nres.ge.3)) then
+           gxcart(j,2)=gxcart(j,2)-gloc_sc(3,1,icg)*dtauangle(j,3,1,4)
+cc                  the   - above is due to different vector direction
+           gcart(j,2)=gcart(j,2)+gloc_sc(3,1,icg)*dtauangle(j,3,2,4)
+          endif
+          if (nres.gt.3) then
+           gxcart(j,2)=gxcart(j,2)-gloc_sc(2,1,icg)*dtauangle(j,1,1,4)
+cc                  the   - above is due to different vector direction
+           gcart(j,2)=gcart(j,2)+gloc_sc(2,1,icg)*dtauangle(j,1,2,4)
+          endif
+         endif
+         if (itype(1).ne.10) then
+          gcart(j,2)=gcart(j,2)+gloc_sc(1,0,icg)*dtauangle(j,1,3,3)
+         endif
+         if ((itype(3).ne.10).and(nres.ge.3)) then
+          gcart(j,2)=gcart(j,2)+gloc_sc(2,1,icg)*dtauangle(j,2,2,4)
+         endif
+c    If there are more than five residues
+      if(nres.ge.5) then                          
+        do i=3,nres-2
+         do j=1,3
+          if (itype(i).ne.10) then
+          gxcart(j,i)=gxcart(j,i)+gloc_sc(2,i-2,icg)
+     &    *dtauangle(j,2,3,i+1)
+     &    -gloc_sc(1,i-1,icg)*dtauangle(j,1,1i+2)
+          gcart(j,i)=gcart(j,i)+gloc_sc(1,i-1,icg)*
+     &    *dtauangle(j,1,2,i+2)
+          if (itype(i-1).ne.10) then
+           gxcart(j,i)=gxcart(j,i)+gloc_sc(3,i-2,icg)
+     &*dtauangle(j,3,3,i+1)
+          endif
+          if (itype(i+1).ne.10) then
+           gxcart(j,i)=gxcart(j,i)-gloc_sc(3,i-1,icg)
+     &*dtauangle(j,3,1,i+2)
+           gcart(j,i)=gcart(j,i)+gloc_sc(3,i-1,icg)
+     &*dtauangle(j,3,2,i+2)
+          endif
+          endif
+          if (itype(i-1).ne.10) then
+           gcart(j,i)=gcart(j,i)+gloc_sc(1,i-2,icg)*
+     &     dtauangle(j,1,3,i+1)
+          endif
+          if (itype(i+1).ne.10) then
+           gcart(j,i)=gcart(j,i)+gloc_sc(2,i-1,icg)*
+     &     dtauangle(j,2,2,i+2)
+          endif
+          if (itype(i+2).ne.10) then
+           gcart(j,i)=gcart(j,i)+gloc_sc(2,i,icg)*
+     &     dtauangle(j,2,1,i+3)
+          endif
+         enddo
+        enddo
+      endif    
+c  Setting dE/ddnres-1       
+      if(nres.ge.4) then
+         do j=1,3
+         if (itype(nres-1).ne.10) then
+         gxcart(j,nres-1)=gxcart(j,nres-1)+gloc_sc(2,nres-3,icg)
+     &    *dtauangle(j,2,3,nres)
+         if (itype(nres-2).ne.10) then
+        gxcart(j,nres-1)=gxcart(j,nres-1)+gloc_sc(3,nres-3,icg)
+     &    *dtauangle(j,3,3,nres)
+          endif
+         if (itype(nres).ne.10) then
+        gxcart(j,nres-1)=gxcart(j,nres-1)-gloc_sc(3,nres-2,icg)
+     &    *dtauangle(j,3,1,nres+1)
+        gcart(j,nres-1)=gcart(j,nres-1)+gloc_sc(3,nres-2,icg)
+     &    *dtauangle(j,3,2,nres+1)
+          endif
+         endif
+         if (itype(nres-2).ne.10) then
+            gcart(j,nres-1)=gcart(j,nres-1)+gloc_sc(2,nres-3,icg)*
+     &   *dtauangle(j,2,3,nres)
+         endif
+          if (itype(nres).ne.10) then
+            gcart(j,nres-1)=gcart(j,nres-1)+gloc_sc(2,nres-2,icg)*
+          *dtauangle(j,2,2,nres+1)
+           endif
+         enddo
+      endif 
+c  Settind dE/ddnres       
+       if (nres.ge.3).and(itype(nres).ne.10)then
+       do j=1,3
+        gxcart(j,nres)=gxcart(j,nres)+gloc_sc(3,nres-2,icg)
+     & *dtauangle(j,3,3,nres+1)+gloc_sc(2,nres-2,icg)
+     & *dtauangle(j,2,3,nres+1)
+        enddo
+c   The side-chain vector derivatives
       return
       end