Merge branch 'devel' into AFM
[unres.git] / source / unres / src_Eshel / openunits.F
diff --git a/source/unres/src_Eshel/openunits.F b/source/unres/src_Eshel/openunits.F
new file mode 100644 (file)
index 0000000..8259dac
--- /dev/null
@@ -0,0 +1,367 @@
+      subroutine openunits
+      implicit real*8 (a-h,o-z)
+      include 'DIMENSIONS'    
+#ifdef MPI
+      include 'mpif.h'
+      character*16 form,nodename
+      integer nodelen
+#endif
+      include 'COMMON.SETUP'
+      include 'COMMON.IOUNITS'
+      include 'COMMON.MD'
+      include 'COMMON.CONTROL'
+      integer lenpre,lenpot,ilen,lentmp
+      external ilen
+      character*3 out1file_text,ucase
+      character*3 ll
+      external ucase
+c      print *,"Processor",myrank,"fg_rank",fg_rank," entered openunits"
+      call getenv_loc("PREFIX",prefix)
+      pref_orig = prefix
+      call getenv_loc("POT",pot)
+      call getenv_loc("DIRTMP",tmpdir)
+      call getenv_loc("CURDIR",curdir)
+      call getenv_loc("OUT1FILE",out1file_text)
+c      print *,"Processor",myrank,"fg_rank",fg_rank," did GETENV"
+      out1file_text=ucase(out1file_text)
+      if (out1file_text(1:1).eq."Y") then
+        out1file=.true.
+      else 
+        out1file=fg_rank.gt.0
+      endif
+      lenpre=ilen(prefix)
+      lenpot=ilen(pot)
+      lentmp=ilen(tmpdir)
+      if (lentmp.gt.0) then
+          write (*,'(80(1h!))')
+          write (*,'(a,19x,a,19x,a)') "!","  A T T E N T I O N  ","!"
+          write (*,'(80(1h!))')
+          write (*,*)"All output files will be on node /tmp directory." 
+#ifdef MPI
+        call  MPI_GET_PROCESSOR_NAME( nodename, nodelen, IERROR )
+        if (me.eq.king) then
+          write (*,*) "The master node is ",nodename
+        else if (fg_rank.eq.0) then
+          write (*,*) "I am the CG slave node ",nodename
+        else 
+          write (*,*) "I am the FG slave node ",nodename
+        endif
+#endif
+        PREFIX = tmpdir(:lentmp)//'/'//prefix(:lenpre)
+        lenpre = lentmp+lenpre+1
+      endif
+      entname=prefix(:lenpre)//'_'//pot(:lenpot)//'.entr'
+C Get the names and open the input files
+#if defined(WINIFL) || defined(WINPGI)
+      open(1,file=pref_orig(:ilen(pref_orig))//
+     &  '.inp',status='old',readonly,shared)
+       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,shared)
+      call getenv_loc('THETPAR',thetname)
+      open (ithep,file=thetname,status='old',readonly,shared)
+#ifndef CRYST_THETA
+      call getenv_loc('THETPARPDB',thetname_pdb)
+      open (ithep_pdb,file=thetname_pdb,status='old',readonly,shared)
+#endif
+      call getenv_loc('ROTPAR',rotname)
+      open (irotam,file=rotname,status='old',readonly,shared)
+#ifndef CRYST_SC
+      call getenv_loc('ROTPARPDB',rotname_pdb)
+      open (irotam_pdb,file=rotname_pdb,status='old',readonly,shared)
+#endif
+      call getenv_loc('TORPAR',torname)
+      open (itorp,file=torname,status='old',readonly,shared)
+      call getenv_loc('TORDPAR',tordname)
+      open (itordp,file=tordname,status='old',readonly,shared)
+      call getenv_loc('FOURIER',fouriername)
+      open (ifourier,file=fouriername,status='old',readonly,shared)
+      call getenv_loc('ELEPAR',elename)
+      open (ielep,file=elename,status='old',readonly,shared)
+      call getenv_loc('SIDEPAR',sidename)
+      open (isidep,file=sidename,status='old',readonly,shared)
+#elif (defined CRAY) || (defined AIX)
+      open(1,file=pref_orig(:ilen(pref_orig))//'.inp',status='old',
+     &  action='read')
+c      print *,"Processor",myrank," opened file 1" 
+      open (9,file=prefix(:ilen(prefix))//'.intin',status='unknown')
+c      print *,"Processor",myrank," opened file 9" 
+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',action='read')
+c      print *,"Processor",myrank," opened file IBOND" 
+      call getenv_loc('THETPAR',thetname)
+      open (ithep,file=thetname,status='old',action='read')
+c      print *,"Processor",myrank," opened file ITHEP" 
+#ifndef CRYST_THETA
+      call getenv_loc('THETPARPDB',thetname_pdb)
+      open (ithep_pdb,file=thetname_pdb,status='old',action='read')
+#endif
+      call getenv_loc('ROTPAR',rotname)
+      open (irotam,file=rotname,status='old',action='read')
+c      print *,"Processor",myrank," opened file IROTAM" 
+#ifndef CRYST_SC
+      call getenv_loc('ROTPARPDB',rotname_pdb)
+      open (irotam_pdb,file=rotname_pdb,status='old',action='read')
+#endif
+      call getenv_loc('TORPAR',torname)
+      open (itorp,file=torname,status='old',action='read')
+c      print *,"Processor",myrank," opened file ITORP" 
+      call getenv_loc('TORDPAR',tordname)
+      open (itordp,file=tordname,status='old',action='read')
+c      print *,"Processor",myrank," opened file ITORDP" 
+      call getenv_loc('SCCORPAR',sccorname)
+      open (isccor,file=sccorname,status='old',action='read')
+c      print *,"Processor",myrank," opened file ISCCOR" 
+      call getenv_loc('FOURIER',fouriername)
+      open (ifourier,file=fouriername,status='old',action='read')
+c      print *,"Processor",myrank," opened file IFOURIER" 
+      call getenv_loc('ELEPAR',elename)
+      open (ielep,file=elename,status='old',action='read')
+c      print *,"Processor",myrank," opened file IELEP" 
+      call getenv_loc('SIDEPAR',sidename)
+      open (isidep,file=sidename,status='old',action='read')
+c      print *,"Processor",myrank," opened file ISIDEP" 
+c      print *,"Processor",myrank," opened parameter files" 
+#elif (defined G77)
+      open(1,file=pref_orig(:ilen(pref_orig))//'.inp',status='old')
+      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')
+      call getenv_loc('THETPAR',thetname)
+      open (ithep,file=thetname,status='old')
+#ifndef CRYST_THETA
+      call getenv_loc('THETPARPDB',thetname_pdb)
+      open (ithep_pdb,file=thetname_pdb,status='old')
+#endif
+      call getenv_loc('ROTPAR',rotname)
+      open (irotam,file=rotname,status='old')
+#ifndef CRYST_SC
+      call getenv_loc('ROTPARPDB',rotname_pdb)
+      open (irotam_pdb,file=rotname_pdb,status='old')
+#endif
+      call getenv_loc('TORPAR',torname)
+      open (itorp,file=torname,status='old')
+      call getenv_loc('TORDPAR',tordname)
+      open (itordp,file=tordname,status='old')
+      call getenv_loc('SCCORPAR',sccorname)
+      open (isccor,file=sccorname,status='old')
+      call getenv_loc('FOURIER',fouriername)
+      open (ifourier,file=fouriername,status='old')
+      call getenv_loc('ELEPAR',elename)
+      open (ielep,file=elename,status='old')
+      call getenv_loc('SIDEPAR',sidename)
+      open (isidep,file=sidename,status='old')
+#else
+      open(1,file=pref_orig(:ilen(pref_orig))//'.inp',status='old',
+     &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',action='read')
+      call getenv_loc('THETPAR',thetname)
+      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',action='read')
+      print *,ithep_pdb," opened"
+#endif
+      call getenv_loc('ROTPAR',rotname)
+      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',action='read')
+#endif
+      call getenv_loc('TORPAR',torname)
+      open (itorp,file=torname,status='old',action='read')
+      call getenv_loc('TORDPAR',tordname)
+      open (itordp,file=tordname,status='old',action='read')
+      call getenv_loc('SCCORPAR',sccorname)
+      open (isccor,file=sccorname,status='old',action='read')
+      call getenv_loc('FOURIER',fouriername)
+      open (ifourier,file=fouriername,status='old',action='read')
+      call getenv_loc('ELEPAR',elename)
+      open (ielep,file=elename,status='old',action='read')
+      call getenv_loc('SIDEPAR',sidename)
+      open (isidep,file=sidename,status='old',action='read')
+#endif
+#ifndef OLDSCP
+C
+C 8/9/01 In the newest version SCp interaction constants are read from a file
+C Use -DOLDSCP to use hard-coded constants instead.
+C
+      call getenv_loc('SCPPAR',scpname)
+#if defined(WINIFL) || defined(WINPGI)
+      open (iscpp,file=scpname,status='old',readonly,shared)
+#elif (defined CRAY)  || (defined AIX)
+      open (iscpp,file=scpname,status='old',action='read')
+#elif (defined G77)
+      open (iscpp,file=scpname,status='old')
+#else
+      open (iscpp,file=scpname,status='old',action='read')
+#endif
+#endif
+      call getenv_loc('PATTERN',patname)
+#if defined(WINIFL) || defined(WINPGI)
+      open (icbase,file=patname,status='old',readonly,shared)
+#elif (defined CRAY)  || (defined AIX)
+      open (icbase,file=patname,status='old',action='read')
+#elif (defined G77)
+      open (icbase,file=patname,status='old')
+#else
+      open (icbase,file=patname,status='old',action='read')
+#endif
+#ifdef MPI
+C Open output file only for CG processes
+c      print *,"Processor",myrank," fg_rank",fg_rank
+      if (fg_rank.eq.0) then
+
+      if (nodes.eq.1) then
+        npos=3
+      else
+        npos = dlog10(dfloat(nodes-1))+1
+      endif
+      if (npos.lt.3) npos=3
+      write (liczba,'(i1)') npos
+      form = '(bz,i'//liczba(:ilen(liczba))//'.'//liczba(:ilen(liczba))
+     &  //')'
+      write (liczba,form) me
+      outname=prefix(:lenpre)//'.out_'//pot(:lenpot)//
+     &  liczba(:ilen(liczba))
+      intname=prefix(:lenpre)//'_'//pot(:lenpot)//liczba(:ilen(liczba))
+     &  //'.int'
+      pdbname(1)=prefix(:lenpre)//'_'//pot(:lenpot)//
+     & liczba(:ilen(liczba))
+     &  //'.pdb'
+      mol2name=prefix(:lenpre)//'_'//pot(:lenpot)//
+     &  liczba(:ilen(liczba))//'.mol2'
+      statname=prefix(:lenpre)//'_'//pot(:lenpot)//
+     &  liczba(:ilen(liczba))//'.stat'
+      if (lentmp.gt.0)
+     &  call copy_to_tmp(pref_orig(:ilen(pref_orig))//'_'//pot(:lenpot)
+     &      //liczba(:ilen(liczba))//'.stat')
+      rest2name=prefix(:ilen(prefix))//"_"//liczba(:ilen(liczba))
+     &  //'.rst'
+      if(usampl) then
+          qname=prefix(:lenpre)//'_'//pot(:lenpot)//
+     & liczba(:ilen(liczba))//'.const'
+      endif 
+
+      endif
+#else
+      outname=prefix(:lenpre)//'.out_'//pot(:lenpot)
+      intname=prefix(:lenpre)//'_'//pot(:lenpot)//'.int'
+      pdbname(1)=prefix(:lenpre)//'_'//pot(:lenpot)//'.pdb'
+      mol2name=prefix(:lenpre)//'_'//pot(:lenpot)//'.mol2'
+      statname=prefix(:lenpre)//'_'//pot(:lenpot)//'.stat'
+      if (lentmp.gt.0)
+     &  call copy_to_tmp(pref_orig(:ilen(pref_orig))//'_'//pot(:lenpot)
+     &    //'.stat')
+      rest2name=prefix(:ilen(prefix))//'.rst'
+#endif
+#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
+        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',position='append')
+       open(ipdb,file=pdbname(1),status='unknown')
+       open(imol2,file=mol2name,status='unknown')
+       open(istat,file=statname,status='unknown',position='append')
+      else
+c1out       open(iout,file=outname,status='unknown')
+      endif
+#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(1),status='unknown')
+       open(imol2,file=mol2name,status='unknown')
+       open(istat,file=statname,status='unknown',access='append')
+      else
+c1out       open(iout,file=outname,status='unknown')
+      endif
+#endif
+csa      csa_rbank=prefix(:lenpre)//'.CSA.rbank'
+csa      csa_seed=prefix(:lenpre)//'.CSA.seed'
+csa      csa_history=prefix(:lenpre)//'.CSA.history'
+csa      csa_bank=prefix(:lenpre)//'.CSA.bank'
+csa      csa_bank1=prefix(:lenpre)//'.CSA.bank1'
+csa      csa_alpha=prefix(:lenpre)//'.CSA.alpha'
+csa      csa_alpha1=prefix(:lenpre)//'.CSA.alpha1'
+csac!bankt      csa_bankt=prefix(:lenpre)//'.CSA.bankt'
+csa      csa_int=prefix(:lenpre)//'.int'
+csa      csa_bank_reminimized=prefix(:lenpre)//'.CSA.bank_reminimized'
+csa      csa_native_int=prefix(:lenpre)//'.CSA.native.int'
+csa      csa_in=prefix(:lenpre)//'.CSA.in'
+c      print *,"Processor",myrank,"fg_rank",fg_rank," opened files"
+C Write file names
+      if (me.eq.king)then
+      write (iout,'(80(1h-))')
+      write (iout,'(30x,a)') "FILE ASSIGNMENT"
+      write (iout,'(80(1h-))')
+      write (iout,*) "Input file                      : ",
+     &  pref_orig(:ilen(pref_orig))//'.inp'
+      write (iout,*) "Output file                     : ",
+     &  outname(:ilen(outname))
+      write (iout,*)
+      write (iout,*) "Sidechain potential file        : ",
+     &  sidename(:ilen(sidename))
+#ifndef OLDSCP
+      write (iout,*) "SCp potential file              : ",
+     &  scpname(:ilen(scpname))
+#endif
+      write (iout,*) "Electrostatic potential file    : ",
+     &  elename(:ilen(elename))
+      write (iout,*) "Cumulant coefficient file       : ",
+     &  fouriername(:ilen(fouriername))
+      write (iout,*) "Torsional parameter file        : ",
+     &  torname(:ilen(torname))
+      write (iout,*) "Double torsional parameter file : ",
+     &  tordname(:ilen(tordname))
+      write (iout,*) "SCCOR parameter file : ",
+     &  sccorname(:ilen(sccorname))
+      write (iout,*) "Bond & inertia constant file    : ",
+     &  bondname(:ilen(bondname))
+      write (iout,*) "Bending parameter file          : ",
+     &  thetname(:ilen(thetname))
+      write (iout,*) "Rotamer parameter file          : ",
+     &  rotname(:ilen(rotname))
+      write (iout,*) "Threading database              : ",
+     &  patname(:ilen(patname))
+      if (lentmp.ne.0) 
+     &write (iout,*)" DIRTMP                          : ",
+     &  tmpdir(:lentmp)
+      write (iout,'(80(1h-))')
+      endif
+      return
+      end
+