dist homology matrix clean update
authorCezary Czaplewski <czarek@chem.univ.gda.pl>
Thu, 7 May 2020 00:03:28 +0000 (02:03 +0200)
committerCezary Czaplewski <czarek@chem.univ.gda.pl>
Thu, 7 May 2020 00:03:28 +0000 (02:03 +0200)
source/unres/src-HCD-5D/readrtns_CSA.F

index c51e45e..5dd78ea 100644 (file)
@@ -2979,10 +2979,11 @@ c    &    sigma_odl_temp(maxres,maxres,max_template)
       character*24 model_ki_dist, model_ki_angle
       character*500 controlcard
       integer ki,i,ii,j,k,l,ii_in_use(maxdim),i_tmp,idomain_tmp,irec,
-     & ik,iistart,iishift
+     & ik,iistart
       integer ilen
       external ilen
-      logical liiflag
+      logical liiflag,lfirst
+      integer i01,i10
 c
 c     FP - Nov. 2014 Temporary specifications for new vars
 c
@@ -3314,6 +3315,7 @@ c      write (iout,*) "waga_dist",waga_dist," nnt",nnt," nct",nct
       if (waga_dist.ne.0.0d0) then
         ii=0
         liiflag=.true.
+        lfirst=.true.
         do i=nnt,nct-2 
          do j=i+2,nct 
           ii=ii+1
@@ -3321,34 +3323,35 @@ c          if (idomain(k,i).eq.idomain(k,j).and.idomain(k,i).ne.0
 c     &            .and. distal.le.dist2_cut ) then
 c          write (iout,*) "i",i," j",j," ii",ii
 c          call flush(iout)
-          if (ii_in_use(ii).eq.0.and.liiflag) then
+          if (ii_in_use(ii).eq.0.and.liiflag.or.
+     &     ii_in_use(ii).eq.1.and.liiflag.and.ii.eq.lim_odl) then
             liiflag=.false.
-            iistart=ii
+            i10=ii
+            if (lfirst) then
+              lfirst=.false.
+              iistart=ii
+            else
+              if(i10.eq.lim_odl) i10=i10+1
+              do ki=0,i10-i01-1
+               ires_homo(iistart+ki)=ires_homo(ki+i01)
+               jres_homo(iistart+ki)=jres_homo(ki+i01)
+               ii_in_use(iistart+ki)=ii_in_use(ki+i01)
+               do k=1,constr_homology
+                odl(k,iistart+ki)=odl(k,ki+i01)
+                sigma_odl(k,iistart+ki)=sigma_odl(k,ki+i01)
+                l_homo(k,iistart+ki)=l_homo(k,ki+i01)
+               enddo
+              enddo
+              iistart=iistart+i10-i01
+            endif
           endif
-          if (ii_in_use(ii).ne.0.and..not.liiflag.or.
-     &                   .not.liiflag.and.ii.eq.lim_odl) then
-             if (ii.eq.lim_odl) then
-              iishift=ii-iistart+1
-             else
-              iishift=ii-iistart
-             endif
+          if (ii_in_use(ii).ne.0.and..not.liiflag) then
+             i01=ii
              liiflag=.true.
-             do ki=iistart,lim_odl-iishift
-              ires_homo(ki)=ires_homo(ki+iishift)
-              jres_homo(ki)=jres_homo(ki+iishift)
-              ii_in_use(ki)=ii_in_use(ki+iishift)
-              do k=1,constr_homology
-               odl(k,ki)=odl(k,ki+iishift)
-               sigma_odl(k,ki)=sigma_odl(k,ki+iishift)
-               l_homo(k,ki)=l_homo(k,ki+iishift)
-              enddo
-             enddo
-             ii=ii-iishift
-             lim_odl=lim_odl-iishift
-c          endif
           endif
          enddo
         enddo
+        lim_odl=iistart-1
       endif
 c      write (iout,*) "Removing distances completed"
 c      call flush(iout)
@@ -3556,12 +3559,13 @@ c----------------------------------------------------------------------
       character*24 model_ki_dist, model_ki_angle
       character*500 controlcard
       integer ki, i, j, k, l, ii_in_use(maxdim),i_tmp,idomain_tmp,
-     & ik,ll,ii,kk,iistart,iishift,lim_xx
+     & ik,ll,ii,kk,iistart,lim_xx
       double precision distal
       logical lprn /.true./
       integer ilen
       external ilen
-      logical liiflag
+      logical liiflag,lfirst
+      integer i01,i10
 c
 c
       double precision rescore_tmp,x12,y12,z12,rescore2_tmp
       if (waga_dist.ne.0.0d0) then
         ii=0
         liiflag=.true.
+        lfirst=.true.
         do i=nnt,nct-2 
          do j=i+2,nct 
           ii=ii+1
-          if (ii_in_use(ii).eq.0.and.liiflag) then
+          if (ii_in_use(ii).eq.0.and.liiflag.or.
+     &     ii_in_use(ii).eq.1.and.liiflag.and.ii.eq.lim_odl) then
             liiflag=.false.
-            iistart=ii
+            i10=ii
+            if (lfirst) then
+              lfirst=.false.
+              iistart=ii
+            else
+              if(i10.eq.lim_odl) i10=i10+1
+              do ki=0,i10-i01-1
+               ires_homo(iistart+ki)=ires_homo(ki+i01)
+               jres_homo(iistart+ki)=jres_homo(ki+i01)
+               ii_in_use(iistart+ki)=ii_in_use(ki+i01)
+               do k=1,constr_homology
+                odl(k,iistart+ki)=odl(k,ki+i01)
+                sigma_odl(k,iistart+ki)=sigma_odl(k,ki+i01)
+                l_homo(k,iistart+ki)=l_homo(k,ki+i01)
+               enddo
+              enddo
+              iistart=iistart+i10-i01
+            endif
           endif
-          if (ii_in_use(ii).ne.0.and..not.liiflag.or.
-     &                   .not.liiflag.and.ii.eq.lim_odl) then
-             if (ii.eq.lim_odl) then
-              iishift=ii-iistart+1
-             else
-              iishift=ii-iistart
-             endif
+          if (ii_in_use(ii).ne.0.and..not.liiflag) then
+             i01=ii
              liiflag=.true.
-             do ki=iistart,lim_odl-iishift
-              ires_homo(ki)=ires_homo(ki+iishift)
-              jres_homo(ki)=jres_homo(ki+iishift)
-              ii_in_use(ki)=ii_in_use(ki+iishift)
-              do k=1,constr_homology
-               odl(k,ki)=odl(k,ki+iishift)
-               sigma_odl(k,ki)=sigma_odl(k,ki+iishift)
-               l_homo(k,ki)=l_homo(k,ki+iishift)
-              enddo
-             enddo
-             ii=ii-iishift
-             lim_odl=lim_odl-iishift
           endif
          enddo
         enddo
+        lim_odl=iistart-1
       endif
 
       return