8/11/12 by Adam: fixed disulfide bridge problems
[unres.git] / source / unres / src_MD / readrtns.F
index 6ce9ec3..5b74f87 100644 (file)
@@ -44,7 +44,8 @@ C Print restraint information
      &write (iout,'(a,i5,a)') "The following",nhpb-nss,
      & " distance constraints have been imposed"
       do i=nss+1,nhpb
-        write (iout,'(3i6,f10.5)') i-nss,ihpb(i),jhpb(i),forcon(i)
+        write (iout,'(3i6,i2,3f10.5)') i-nss,ihpb(i),jhpb(i),
+     &     ibecarb(i),dhpb(i),dhpb1(i),forcon(i)
       enddo
 #ifdef MPI
       endif
@@ -137,7 +138,7 @@ C Set up the time limit (caution! The time must be input in minutes!)
       call readi(controlcard,'MAXGEN',maxgen,10000)
       call readi(controlcard,'MAXOVERLAP',maxoverlap,1000)
       call readi(controlcard,"KDIAG",kdiag,0)
-      call readi(controlcard,"RESCALE_MODE",rescale_mode,1)
+      call readi(controlcard,"RESCALE_MODE",rescale_mode,2)
       if(me.eq.king .or. .not. out1file .and. fg_rank.eq.0)
      & write (iout,*) "RESCALE_MODE",rescale_mode
       split_ene=index(controlcard,'SPLIT_ENE').gt.0
@@ -892,6 +893,9 @@ c        print *,'Finished reading pdb data'
         call contact(.false.,ncont_ref,icont_ref,co)
 
         if (sideadd) then 
+C Following 2 lines for diagnostics; comment out if not needed
+         write (iout,*) "Before sideadd"
+         call intout
          if(me.eq.king.or..not.out1file)
      &    write(iout,*)'Adding sidechains'
          maxsi=1000
@@ -908,7 +912,12 @@ c        print *,'Finished reading pdb data'
      &              i,' after ',nsi,' trials'
           endif
          enddo
+C 10/03/12 Adam: Recalculate coordinates with new side chain positions
+         call chainbuild
         endif  
+C Following 2 lines for diagnostics; comment out if not needed
+        write (iout,*) "After sideadd"
+        call intout
       endif
       if (indpdb.eq.0) then
 C Read sequence if not taken from the pdb file.
@@ -1075,11 +1084,6 @@ czscore          call geom_to_var(nvar,coord_exp_zs(1,1))
           enddo
           call contact(.true.,ncont_ref,icont_ref,co)
         endif
-c        write (iout,*) "constr_dist",constr_dist,nstart_sup,nsup
-        call flush(iout)
-        if (constr_dist.gt.0) call read_dist_constr
-c        write (iout,*) "After read_dist_constr nhpb",nhpb
-        call hpb_partition
         if(me.eq.king.or..not.out1file)
      &   write (iout,*) 'Contact order:',co
         if (pdbref) then
@@ -1096,6 +1100,13 @@ c        write (iout,*) "After read_dist_constr nhpb",nhpb
         enddo
         endif
       endif
+c        write (iout,*) "constr_dist",constr_dist,nstart_sup,nsup
+      if (constr_dist.gt.0) then
+        call read_dist_constr
+      endif
+      if (nhpb.gt.0) call hpb_partition
+c      write (iout,*) "After read_dist_constr nhpb",nhpb
+c      call flush(iout)
       if (indpdb.eq.0 .and. modecalc.ne.2 .and. modecalc.ne.4
      &    .and. modecalc.ne.8 .and. modecalc.ne.9 .and. 
      &    modecalc.ne.10) then
@@ -1810,6 +1821,9 @@ c----------------------------------------------------------------------------
       call readi(minimcard,'MINFUN',minfun,maxmin)
       call reada(minimcard,'TOLF',tolf,1.0D-2)
       call reada(minimcard,'RTOLF',rtolf,1.0D-4)
+      print_min_stat=min0(index(minimcard,'PRINT_MIN_STAT'),1)
+      print_min_res=min0(index(minimcard,'PRINT_MIN_RES'),1)
+      print_min_ini=min0(index(minimcard,'PRINT_MIN_INI'),1)
       write (iout,'(/80(1h*)/20x,a/80(1h*))') 
      &         'Options in energy minimization:'
       write (iout,'(4(a,i5),a,1pe14.5,a,1pe14.5)')
@@ -2080,38 +2094,38 @@ C Get parameter filenames and open the parameter files.
       open (isidep,file=sidename,status='old')
 #else
       open(1,file=pref_orig(:ilen(pref_orig))//'.inp',status='old',
-     &  readonly)
+     &action='read')
        open (9,file=prefix(:ilen(prefix))//'.intin',status='unknown')
 C      open (18,file=prefix(:ilen(prefix))//'.entin',status='unknown')
 C Get parameter filenames and open the parameter files.
       call getenv_loc('BONDPAR',bondname)
-      open (ibond,file=bondname,status='old',readonly)
+      open (ibond,file=bondname,status='old',action='read')
       call getenv_loc('THETPAR',thetname)
-      open (ithep,file=thetname,status='old',readonly)
+      open (ithep,file=thetname,status='old',action='read')
 #ifndef CRYST_THETA
       call getenv_loc('THETPARPDB',thetname_pdb)
       print *,"thetname_pdb ",thetname_pdb
-      open (ithep_pdb,file=thetname_pdb,status='old',readonly)
+      open (ithep_pdb,file=thetname_pdb,status='old',action='read')
       print *,ithep_pdb," opened"
 #endif
       call getenv_loc('ROTPAR',rotname)
-      open (irotam,file=rotname,status='old',readonly)
+      open (irotam,file=rotname,status='old',action='read')
 #ifndef CRYST_SC
       call getenv_loc('ROTPARPDB',rotname_pdb)
-      open (irotam_pdb,file=rotname_pdb,status='old',readonly)
+      open (irotam_pdb,file=rotname_pdb,status='old',action='read')
 #endif
       call getenv_loc('TORPAR',torname)
-      open (itorp,file=torname,status='old',readonly)
+      open (itorp,file=torname,status='old',action='read')
       call getenv_loc('TORDPAR',tordname)
-      open (itordp,file=tordname,status='old',readonly)
+      open (itordp,file=tordname,status='old',action='read')
       call getenv_loc('SCCORPAR',sccorname)
-      open (isccor,file=sccorname,status='old',readonly)
+      open (isccor,file=sccorname,status='old',action='read')
       call getenv_loc('FOURIER',fouriername)
-      open (ifourier,file=fouriername,status='old',readonly)
+      open (ifourier,file=fouriername,status='old',action='read')
       call getenv_loc('ELEPAR',elename)
-      open (ielep,file=elename,status='old',readonly)
+      open (ielep,file=elename,status='old',action='read')
       call getenv_loc('SIDEPAR',sidename)
-      open (isidep,file=sidename,status='old',readonly)
+      open (isidep,file=sidename,status='old',action='read')
 #endif
 #ifndef OLDSCP
 C
@@ -2126,7 +2140,7 @@ C
 #elif (defined G77)
       open (iscpp,file=scpname,status='old')
 #else
-      open (iscpp,file=scpname,status='old',readonly)
+      open (iscpp,file=scpname,status='old',action='read')
 #endif
 #endif
       call getenv_loc('PATTERN',patname)
@@ -2137,7 +2151,7 @@ C
 #elif (defined G77)
       open (icbase,file=patname,status='old')
 #else
-      open (icbase,file=patname,status='old',readonly)
+      open (icbase,file=patname,status='old',action='read')
 #endif
 #ifdef MPI
 C Open output file only for CG processes
@@ -2192,6 +2206,7 @@ c      print *,"Processor",myrank," fg_rank",fg_rank
 #if defined(AIX) || defined(PGI)
       if (me.eq.king .or. .not. out1file) 
      &   open(iout,file=outname,status='unknown')
+c#define DEBUG
 #ifdef DEBUG
       if (fg_rank.gt.0) then
         write (liczba,'(i3.3)') myrank/nfgtasks
@@ -2200,6 +2215,7 @@ c      print *,"Processor",myrank," fg_rank",fg_rank
      &   status='unknown')
       endif
 #endif
+c#undef DEBUG
       if(me.eq.king) then
        open(igeom,file=intname,status='unknown',position='append')
        open(ipdb,file=pdbname,status='unknown')
@@ -2211,14 +2227,17 @@ c1out       open(iout,file=outname,status='unknown')
 #else
       if (me.eq.king .or. .not.out1file)
      &    open(iout,file=outname,status='unknown')
+c#define DEBUG
 #ifdef DEBUG
       if (fg_rank.gt.0) then
+        print "Processor",fg_rank," opening output file"
         write (liczba,'(i3.3)') myrank/nfgtasks
         write (ll,'(bz,i3.3)') fg_rank
         open(iout,file="debug"//liczba(:ilen(liczba))//"."//ll,
      &   status='unknown')
       endif
 #endif
+c#undef DEBUG
       if(me.eq.king) then
        open(igeom,file=intname,status='unknown',access='append')
        open(ipdb,file=pdbname,status='unknown')
@@ -2401,6 +2420,18 @@ c      write (iout,*) "IPAIR"
 c      do i=1,npair_
 c        write (iout,*) i,ipair_(1,i),ipair_(2,i),wpair_(i)
 c      enddo
+      if (.not.refstr .and. nfrag.gt.0) then
+        write (iout,*) 
+     &  "ERROR: no reference structure to compute distance restraints"
+        write (iout,*)
+     &  "Restraints must be specified explicitly (NDIST=number)"
+        stop 
+      endif
+      if (nfrag.lt.2 .and. npair.gt.0) then 
+        write (iout,*) "ERROR: Less than 2 fragments specified",
+     &   " but distance restraints between pairs requested"
+        stop 
+      endif 
       call flush(iout)
       do i=1,nfrag_
         if (ifrag_(1,i).lt.nstart_sup) ifrag_(1,i)=nstart_sup
@@ -2475,21 +2506,29 @@ c        write (iout,*) i,ifrag_(1,i),ifrag_(2,i),wfrag_(i)
         endif
       enddo 
       do i=1,ndist_
-        read (inp,*) ihpb(nhpb+1),jhpb(nhpb+1),forcon(nhpb+1)
+        read (inp,*) ihpb(nhpb+1),jhpb(nhpb+1),dhpb(i),dhpb1(i),
+     &     ibecarb(i),forcon(nhpb+1)
         if (forcon(nhpb+1).gt.0.0d0) then
           nhpb=nhpb+1
-          dhpb(nhpb)=dist(ihpb(nhpb),jhpb(nhpb))
+          if (ibecarb(i).gt.0) then
+            ihpb(i)=ihpb(i)+nres
+            jhpb(i)=jhpb(i)+nres
+          endif
+          if (dhpb(nhpb).eq.0.0d0) 
+     &       dhpb(nhpb)=dist(ihpb(nhpb),jhpb(nhpb))
+        endif
+      enddo
 #ifdef MPI
-          if (.not.out1file .or. me.eq.king)
-     &    write (iout,'(a,3i5,f8.2,f10.1)') "+dist.constr ",
-     &     nhpb,ihpb(nhpb),jhpb(nhpb),dhpb(nhpb),forcon(nhpb)
-#else
-          write (iout,'(a,3i5,f8.2,f10.1)') "+dist.constr ",
-     &     nhpb,ihpb(nhpb),jhpb(nhpb),dhpb(nhpb),forcon(nhpb)
+      if (.not.out1file .or. me.eq.king) then
 #endif
-        endif
+      do i=1,nhpb
+          write (iout,'(a,3i5,2f8.2,i2,f10.1)') "+dist.constr ",
+     &     i,ihpb(i),jhpb(i),dhpb(i),dhpb1(i),ibecarb(i),forcon(i)
       enddo
       call flush(iout)
+#ifdef MPI
+      endif
+#endif
       return
       end
 c-------------------------------------------------------------------------------