--- /dev/null
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ subroutine make_var(n,idum,iter_csa)
+ implicit real*8 (a-h,o-z)
+ include 'DIMENSIONS'
+ include 'COMMON.IOUNITS'
+ include 'COMMON.CSA'
+ include 'COMMON.BANK'
+ include 'COMMON.CHAIN'
+ include 'COMMON.INTERACT'
+ include 'COMMON.HAIRPIN'
+ include 'COMMON.VAR'
+ include 'COMMON.DISTFIT'
+ include 'COMMON.GEO'
+ include 'COMMON.CONTROL'
+ logical nicht_getan,nicht_getan1,fail,lfound
+ integer nharp,iharp(4,maxres/3),nconf_harp
+ integer iisucc(mxio)
+ logical ifused(mxio)
+ integer nhx_seed(max_seed),ihx_seed(4,maxres/3,max_seed)
+ integer nhx_use(max_seed),ihx_use(0:4,maxres/3,max_seed)
+ integer nlx_seed(max_seed),ilx_seed(2,maxres/3,max_seed),
+ & nlx_use(max_seed),ilx_use(maxres/3,max_seed)
+ real ran1,ran2
+
+ write (iout,*) 'make_var : nseed=',nseed,'ntry=',n
+ index=0
+
+c-----------------------------------------
+ if (n7.gt.0.or.n8.gt.0.or.n9.gt.0.or.n14.gt.0.or.n15.gt.0
+ & .or.n16.gt.0.or.n17.gt.0.or.n18.gt.0)
+ & call select_frag(n7frag,n8frag,n14frag,
+ & n15frag,nbefrag,iter_csa)
+
+c---------------------------------------------------
+c N18 - random perturbation of one phi(=gamma) angle in a loop
+c
+ IF (n18.gt.0) THEN
+ nlx_tot=0
+ do iters=1,nseed
+ i1=is(iters)
+ nlx_seed(iters)=0
+ do i2=1,n14frag
+ if (lvar_frag(i2,1).eq.i1) then
+ nlx_seed(iters)=nlx_seed(iters)+5
+ ilx_seed(1,nlx_seed(iters),iters)=lvar_frag(i2,2)
+ ilx_seed(2,nlx_seed(iters),iters)=lvar_frag(i2,3)
+ ilx_use(nlx_seed(iters),iters)=5
+ endif
+ enddo
+ nlx_use(iters)=nlx_seed(iters)
+ nlx_tot=nlx_tot+nlx_seed(iters)
+ enddo
+
+ if (nlx_tot .ge. n18*nseed) then
+ ntot_gen=n18*nseed
+ else
+ ntot_gen=(nlx_tot/nseed)*nseed
+ endif
+
+ ngen=0
+ do while (ngen.lt.ntot_gen)
+ do iters=1,nseed
+ iseed=is(iters)
+ if (nlx_use(iters).gt.0) then
+ nicht_getan=.true.
+ do while (nicht_getan)
+ iih=iran_num(1,nlx_seed(iters))
+ if (ilx_use(iih,iters).gt.0) then
+ nicht_getan=.false.
+ ilx_use(iih,iters)=ilx_use(iih,iters)-1
+ nlx_use(iters)=nlx_use(iters)-1
+ endif
+ enddo
+ ngen=ngen+1
+ index=index+1
+ movenx(index)=18
+ parent(1,index)=iseed
+ parent(2,index)=0
+
+
+ if (vdisulf) then
+ nss_in(index)=bvar_nss(iseed)
+ do ij=1,nss_in(index)
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ enddo
+ endif
+
+
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ dihang_in(i,j,k,index)=bvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+
+ jr=iran_num(ilx_seed(1,iih,iters),ilx_seed(2,iih,iters))
+ d=ran_number(-pi,pi)
+ dihang_in(2,jr-2,1,index)=pinorm(dihang_in(2,jr-2,1,index)+d)
+
+
+ if (ngen.eq.ntot_gen) goto 145
+ endif
+ enddo
+ enddo
+ 145 continue
+
+ ENDIF
+
+
+c-----------------------------------------
+c N17 : zip a beta in a seed by forcing one additional p-p contact
+c
+ IF (n17.gt.0) THEN
+ nhx_tot=0
+ do iters=1,nseed
+ i1=is(iters)
+ nhx_seed(iters)=0
+ nhx_use(iters)=0
+ do i2=1,nbefrag
+ if (avar_frag(i2,1).eq.i1) then
+ nhx_seed(iters)=nhx_seed(iters)+1
+ ihx_use(2,nhx_seed(iters),iters)=1
+ if (avar_frag(i2,5)-avar_frag(i2,3).le.3.and.
+ & avar_frag(i2,2).gt.1.and.avar_frag(i2,4).lt.nres) then
+ ihx_seed(1,nhx_seed(iters),iters)=avar_frag(i2,2)-1
+ ihx_seed(2,nhx_seed(iters),iters)=avar_frag(i2,4)+1
+ ihx_use(0,nhx_seed(iters),iters)=1
+ ihx_use(1,nhx_seed(iters),iters)=0
+ nhx_use(iters)=nhx_use(iters)+1
+ else
+ if (avar_frag(i2,4).gt.avar_frag(i2,5)) then
+ if (avar_frag(i2,2).gt.1.and.
+ & avar_frag(i2,4).lt.nres) then
+ ihx_seed(1,nhx_seed(iters),iters)=avar_frag(i2,2)-1
+ ihx_seed(2,nhx_seed(iters),iters)=avar_frag(i2,4)+1
+ ihx_use(0,nhx_seed(iters),iters)=1
+ ihx_use(1,nhx_seed(iters),iters)=0
+ nhx_use(iters)=nhx_use(iters)+1
+ endif
+ if (avar_frag(i2,3).lt.nres.and.
+ & avar_frag(i2,5).gt.1) then
+ ihx_seed(1,nhx_seed(iters),iters)=avar_frag(i2,3)+1
+ ihx_seed(2,nhx_seed(iters),iters)=avar_frag(i2,5)-1
+ ihx_use(0,nhx_seed(iters),iters)=
+ & ihx_use(0,nhx_seed(iters),iters)+1
+ ihx_use(2,nhx_seed(iters),iters)=0
+ nhx_use(iters)=nhx_use(iters)+1
+ endif
+ else
+ if (avar_frag(i2,2).gt.1.and.
+ & avar_frag(i2,4).gt.1) then
+ ihx_seed(1,nhx_seed(iters),iters)=avar_frag(i2,2)-1
+ ihx_seed(2,nhx_seed(iters),iters)=avar_frag(i2,4)-1
+ ihx_use(0,nhx_seed(iters),iters)=1
+ ihx_use(1,nhx_seed(iters),iters)=0
+ nhx_use(iters)=nhx_use(iters)+1
+ endif
+ if (avar_frag(i2,3).lt.nres.and.
+ & avar_frag(i2,5).lt.nres) then
+ ihx_seed(1,nhx_seed(iters),iters)=avar_frag(i2,3)+1
+ ihx_seed(2,nhx_seed(iters),iters)=avar_frag(i2,5)+1
+ ihx_use(0,nhx_seed(iters),iters)=
+ & ihx_use(0,nhx_seed(iters),iters)+1
+ ihx_use(2,nhx_seed(iters),iters)=0
+ nhx_use(iters)=nhx_use(iters)+1
+ endif
+ endif
+ endif
+ endif
+ enddo
+
+ nhx_tot=nhx_tot+nhx_use(iters)
+cd write (iout,*) "debug N17",iters,nhx_seed(iters),
+cd & nhx_use(iters),nhx_tot
+ enddo
+
+ if (nhx_tot .ge. n17*nseed) then
+ ntot_gen=n17*nseed
+ else if (nhx_tot .ge. nseed) then
+ ntot_gen=(nhx_tot/nseed)*nseed
+ else
+ ntot_gen=nhx_tot
+ endif
+cd write (iout,*) "debug N17==",ntot_gen,nhx_tot,nseed
+
+ ngen=0
+ do while (ngen.lt.ntot_gen)
+ do iters=1,nseed
+ iseed=is(iters)
+ if (nhx_use(iters).gt.0) then
+cd write (iout,*) "debug N17",nhx_use(iters),ngen,ntot_gen
+cd write (iout,*) "debugN17^",
+cd & (ihx_use(0,k,iters),k=1,nhx_use(iters))
+ nicht_getan=.true.
+ do while (nicht_getan)
+ iih=iran_num(1,nhx_seed(iters))
+cd write (iout,*) "debugN17^",iih
+ if (ihx_use(0,iih,iters).gt.0) then
+ iim=iran_num(1,2)
+cd write (iout,*) "debugN17=",iih,nhx_seed(iters)
+cd write (iout,*) "debugN17-",iim,'##',
+cd & (ihx_use(k,iih,iters),k=0,2)
+cd call flush(iout)
+ do while (ihx_use(iim,iih,iters).eq.1)
+ iim=iran_num(1,2)
+cd write (iout,*) "debugN17-",iim,'##',
+cd & (ihx_use(k,iih,iters),k=0,2)
+cd call flush(iout)
+ enddo
+ nicht_getan=.false.
+ ihx_use(iim,iih,iters)=1
+ ihx_use(0,iih,iters)=ihx_use(0,iih,iters)-1
+ nhx_use(iters)=nhx_use(iters)-1
+ endif
+ enddo
+ ngen=ngen+1
+ index=index+1
+ movenx(index)=17
+ parent(1,index)=iseed
+ parent(2,index)=0
+
+ if (vdisulf) then
+ nss_in(index)=bvar_nss(iseed)
+ do ij=1,nss_in(index)
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ enddo
+ endif
+
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ dihang_in(i,j,k,index)=bvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+
+ if (iim.eq.1) then
+ idata(1,index)=ihx_seed(1,iih,iters)
+ idata(2,index)=ihx_seed(2,iih,iters)
+ else
+ idata(1,index)=ihx_seed(3,iih,iters)
+ idata(2,index)=ihx_seed(4,iih,iters)
+ endif
+
+ if (ngen.eq.ntot_gen) goto 115
+ endif
+ enddo
+ enddo
+ 115 continue
+ write (iout,*) "N17",n17," ngen/nseed",ngen/nseed,
+ & ngen,nseed
+
+
+ ENDIF
+c-----------------------------------------
+c N16 : slide non local beta in a seed by +/- 1 or +/- 2
+c
+ IF (n16.gt.0) THEN
+ nhx_tot=0
+ do iters=1,nseed
+ i1=is(iters)
+ nhx_seed(iters)=0
+ do i2=1,n7frag
+ if (bvar_frag(i2,1).eq.i1) then
+ nhx_seed(iters)=nhx_seed(iters)+1
+ ihx_seed(1,nhx_seed(iters),iters)=bvar_frag(i2,3)
+ ihx_seed(2,nhx_seed(iters),iters)=bvar_frag(i2,4)
+ ihx_seed(3,nhx_seed(iters),iters)=bvar_frag(i2,5)
+ ihx_seed(4,nhx_seed(iters),iters)=bvar_frag(i2,6)
+ ihx_use(0,nhx_seed(iters),iters)=4
+ do i3=1,4
+ ihx_use(i3,nhx_seed(iters),iters)=0
+ enddo
+ endif
+ enddo
+ nhx_use(iters)=4*nhx_seed(iters)
+ nhx_tot=nhx_tot+nhx_seed(iters)
+cd write (iout,*) "debug N16",iters,nhx_seed(iters)
+ enddo
+
+ if (4*nhx_tot .ge. n16*nseed) then
+ ntot_gen=n16*nseed
+ else if (4*nhx_tot .ge. nseed) then
+ ntot_gen=(4*nhx_tot/nseed)*nseed
+ else
+ ntot_gen=4*nhx_tot
+ endif
+ write (iout,*) "debug N16",ntot_gen,4*nhx_tot,nseed
+
+ ngen=0
+ do while (ngen.lt.ntot_gen)
+ do iters=1,nseed
+ iseed=is(iters)
+ if (nhx_use(iters).gt.0) then
+ nicht_getan=.true.
+ do while (nicht_getan)
+ iih=iran_num(1,nhx_seed(iters))
+ if (ihx_use(0,iih,iters).gt.0) then
+ iim=iran_num(1,4)
+ do while (ihx_use(iim,iih,iters).eq.1)
+cd write (iout,*) iim,
+cd & ihx_use(0,iih,iters),ihx_use(iim,iih,iters)
+ iim=iran_num(1,4)
+ enddo
+ nicht_getan=.false.
+ ihx_use(iim,iih,iters)=1
+ ihx_use(0,iih,iters)=ihx_use(0,iih,iters)-1
+ nhx_use(iters)=nhx_use(iters)-1
+ endif
+ enddo
+ ngen=ngen+1
+ index=index+1
+ movenx(index)=16
+ parent(1,index)=iseed
+ parent(2,index)=0
+
+ if (vdisulf) then
+ nss_in(index)=bvar_nss(iseed)
+ do ij=1,nss_in(index)
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ enddo
+ endif
+
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ dihang_in(i,j,k,index)=bvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+
+ do i=1,4
+ idata(i,index)=ihx_seed(i,iih,iters)
+ enddo
+ idata(5,index)=iim
+
+ if (ngen.eq.ntot_gen) goto 116
+ endif
+ enddo
+ enddo
+ 116 continue
+ write (iout,*) "N16",n16," ngen/nseed",ngen/nseed,
+ & ngen,nseed
+ ENDIF
+c-----------------------------------------
+c N15 : copy two 2nd structure elements from 1 or 2 conf. in bank to a seed
+c
+ IF (n15.gt.0) THEN
+
+ do iters=1,nseed
+ iseed=is(iters)
+ do i=1,mxio
+ ifused(i)=.false.
+ enddo
+
+ do idummy=1,n15
+ iter=0
+ 84 continue
+
+ iran=0
+ iif=iran_num(1,n15frag)
+ do while( (ifused(iif) .or. svar_frag(iif,1).eq.iseed) .and.
+ & iran.le.mxio )
+ iif=iran_num(1,n15frag)
+ iran=iran+1
+ enddo
+ if(iran.ge.mxio) goto 811
+
+ iran=0
+ iig=iran_num(1,n15frag)
+ do while( (ifused(iig) .or. svar_frag(iig,1).eq.iseed .or.
+ & .not.(svar_frag(iif,3).lt.svar_frag(iig,2).or.
+ & svar_frag(iig,3).lt.svar_frag(iif,2)) ) .and.
+ & iran.le.mxio )
+ iig=iran_num(1,n15frag)
+ iran=iran+1
+ enddo
+ if(iran.ge.mxio) goto 811
+
+ index=index+1
+ movenx(index)=15
+ parent(1,index)=iseed
+ parent(2,index)=svar_frag(iif,1)
+ parent(3,index)=svar_frag(iig,1)
+
+
+ if (vdisulf) then
+ nss_in(index)=bvar_nss(iseed)
+ do ij=1,nss_in(index)
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ enddo
+ endif
+
+ ifused(iif)=.true.
+ ifused(iig)=.true.
+ call newconf_copy(idum,dihang_in(1,1,1,index),
+ & svar_frag(iif,1),svar_frag(iif,2),svar_frag(iif,3))
+
+ do j=svar_frag(iig,2),svar_frag(iig,3)
+ do i=1,4
+ dihang_in(i,j,1,index)=bvar(i,j,1,svar_frag(iig,1))
+ enddo
+ enddo
+
+
+ if(iter.lt.10) then
+ call check_old(icheck,index)
+ if(icheck.eq.1) then
+ index=index-1
+ ifused(iif)=.false.
+ goto 84
+ endif
+ endif
+
+ 811 continue
+ enddo
+ enddo
+ ENDIF
+
+c-----------------------------------------
+c N14 local_move (Maurizio) for loops in a seed
+c
+ IF (n14.gt.0) THEN
+ nlx_tot=0
+ do iters=1,nseed
+ i1=is(iters)
+ nlx_seed(iters)=0
+ do i2=1,n14frag
+ if (lvar_frag(i2,1).eq.i1) then
+ nlx_seed(iters)=nlx_seed(iters)+3
+ ilx_seed(1,nlx_seed(iters),iters)=lvar_frag(i2,2)
+ ilx_seed(2,nlx_seed(iters),iters)=lvar_frag(i2,3)
+ ilx_use(nlx_seed(iters),iters)=3
+ endif
+ enddo
+ nlx_use(iters)=nlx_seed(iters)
+ nlx_tot=nlx_tot+nlx_seed(iters)
+cd write (iout,*) "debug N14",iters,nlx_seed(iters)
+ enddo
+
+ if (nlx_tot .ge. n14*nseed) then
+ ntot_gen=n14*nseed
+ else
+ ntot_gen=(nlx_tot/nseed)*nseed
+ endif
+cd write (iout,*) "debug N14",ntot_gen,n14frag,nseed
+
+ ngen=0
+ do while (ngen.lt.ntot_gen)
+ do iters=1,nseed
+ iseed=is(iters)
+ if (nlx_use(iters).gt.0) then
+ nicht_getan=.true.
+ do while (nicht_getan)
+ iih=iran_num(1,nlx_seed(iters))
+ if (ilx_use(iih,iters).gt.0) then
+ nicht_getan=.false.
+ ilx_use(iih,iters)=ilx_use(iih,iters)-1
+ nlx_use(iters)=nlx_use(iters)-1
+ endif
+ enddo
+ ngen=ngen+1
+ index=index+1
+ movenx(index)=14
+ parent(1,index)=iseed
+ parent(2,index)=0
+
+ idata(1,index)=ilx_seed(1,iih,iters)
+ idata(2,index)=ilx_seed(2,iih,iters)
+
+
+ if (vdisulf) then
+ nss_in(index)=bvar_nss(iseed)
+ do ij=1,nss_in(index)
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ enddo
+ endif
+
+
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ dihang_in(i,j,k,index)=bvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+
+ if (ngen.eq.ntot_gen) goto 131
+ endif
+ enddo
+ enddo
+ 131 continue
+cd write (iout,*) "N14",n14," ngen/nseed",ngen/nseed,
+cd & ngen,nseed
+
+ ENDIF
+c-----------------------------------------
+c N9 : shift a helix in a seed
+c
+ IF (n9.gt.0) THEN
+ nhx_tot=0
+ do iters=1,nseed
+ i1=is(iters)
+ nhx_seed(iters)=0
+ do i2=1,n8frag
+ if (hvar_frag(i2,1).eq.i1) then
+ nhx_seed(iters)=nhx_seed(iters)+1
+ ihx_seed(1,nhx_seed(iters),iters)=hvar_frag(i2,2)
+ ihx_seed(2,nhx_seed(iters),iters)=hvar_frag(i2,3)
+ ihx_use(0,nhx_seed(iters),iters)=4
+ do i3=1,4
+ ihx_use(i3,nhx_seed(iters),iters)=0
+ enddo
+ endif
+ enddo
+ nhx_use(iters)=4*nhx_seed(iters)
+ nhx_tot=nhx_tot+nhx_seed(iters)
+cd write (iout,*) "debug N9",iters,nhx_seed(iters)
+ enddo
+
+ if (4*nhx_tot .ge. n9*nseed) then
+ ntot_gen=n9*nseed
+ else
+ ntot_gen=(4*nhx_tot/nseed)*nseed
+ endif
+cd write (iout,*) "debug N9",ntot_gen,n8frag,nseed
+
+ ngen=0
+ do while (ngen.lt.ntot_gen)
+ do iters=1,nseed
+ iseed=is(iters)
+ if (nhx_use(iters).gt.0) then
+ nicht_getan=.true.
+ do while (nicht_getan)
+ iih=iran_num(1,nhx_seed(iters))
+ if (ihx_use(0,iih,iters).gt.0) then
+ iim=iran_num(1,4)
+ do while (ihx_use(iim,iih,iters).eq.1)
+cd write (iout,*) iim,
+cd & ihx_use(0,iih,iters),ihx_use(iim,iih,iters)
+ iim=iran_num(1,4)
+ enddo
+ nicht_getan=.false.
+ ihx_use(iim,iih,iters)=1
+ ihx_use(0,iih,iters)=ihx_use(0,iih,iters)-1
+ nhx_use(iters)=nhx_use(iters)-1
+ endif
+ enddo
+ ngen=ngen+1
+ index=index+1
+ movenx(index)=9
+ parent(1,index)=iseed
+ parent(2,index)=0
+
+ if (vdisulf) then
+ nss_in(index)=bvar_nss(iseed)
+ do ij=1,nss_in(index)
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ enddo
+ endif
+
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ dihang_in(i,j,k,index)=bvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+
+ jstart=max(nnt,ihx_seed(1,iih,iters)+1)
+ jend=min(nct,ihx_seed(2,iih,iters))
+cd write (iout,*) "debug N9",iters,iih,jstart,jend
+ if (iim.eq.1) then
+ ishift=-2
+ else if (iim.eq.2) then
+ ishift=-1
+ else if (iim.eq.3) then
+ ishift=1
+ else if (iim.eq.4) then
+ ishift=2
+ else
+ write (iout,*) 'CHUJ NASTAPIL: iim=',iim
+ call mpi_abort(mpi_comm_world,ierror,ierrcode)
+ endif
+ do j=jstart,jend
+ if (itype(j).eq.10) then
+ iang=2
+ else
+ iang=4
+ endif
+ do i=1,iang
+ if (j+ishift.ge.nnt.and.j+ishift.le.nct)
+ & dihang_in(i,j+ishift,1,index)=bvar(i,j,1,iseed)
+ enddo
+ enddo
+ if (ishift.gt.0) then
+ do j=0,ishift-1
+ if (itype(jend+j).eq.10) then
+ iang=2
+ else
+ iang=4
+ endif
+ do i=1,iang
+ if (jend+j.ge.nnt.and.jend+j.le.nct)
+ & dihang_in(i,jstart+j,1,index)=bvar(i,jend+j,1,iseed)
+ enddo
+ enddo
+ else
+ do j=0,-ishift-1
+ if (itype(jstart+j).eq.10) then
+ iang=2
+ else
+ iang=4
+ endif
+ do i=1,iang
+ if (jend+j.ge.nnt.and.jend+j.le.nct)
+ & dihang_in(i,jend+j,1,index)=bvar(i,jstart+j,1,iseed)
+ enddo
+ enddo
+ endif
+ if (ngen.eq.ntot_gen) goto 133
+ endif
+ enddo
+ enddo
+ 133 continue
+cd write (iout,*) "N9",n9," ngen/nseed",ngen/nseed,
+cd & ngen,nseed
+
+ ENDIF
+c-----------------------------------------
+c N8 : copy a helix from bank to seed
+c
+ if (n8.gt.0) then
+ if (n8frag.lt.n8) then
+ write (iout,*) "N8: only ",n8frag,'helices'
+ n8c=n8frag
+ else
+ n8c=n8
+ endif
+
+ do iters=1,nseed
+ iseed=is(iters)
+ do i=1,mxio
+ ifused(i)=.false.
+ enddo
+
+
+ do idummy=1,n8c
+ iter=0
+ 94 continue
+ iran=0
+ iif=iran_num(1,n8frag)
+ do while( (ifused(iif) .or. hvar_frag(iif,1).eq.iseed) .and.
+ & iran.le.mxio )
+ iif=iran_num(1,n8frag)
+ iran=iran+1
+ enddo
+
+ if(iran.ge.mxio) goto 911
+
+ index=index+1
+ movenx(index)=8
+ parent(1,index)=iseed
+ parent(2,index)=hvar_frag(iif,1)
+
+
+ if (vdisulf) then
+ nss_in(index)=bvar_nss(iseed)
+ do ij=1,nss_in(index)
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ enddo
+ endif
+
+ ifused(iif)=.true.
+ if (hvar_frag(iif,3)-hvar_frag(iif,2).le.6) then
+ call newconf_copy(idum,dihang_in(1,1,1,index),
+ & hvar_frag(iif,1),hvar_frag(iif,2),hvar_frag(iif,3))
+ else
+ ih_start=iran_num(hvar_frag(iif,2),hvar_frag(iif,3)-6)
+ ih_end=iran_num(ih_start,hvar_frag(iif,3))
+ call newconf_copy(idum,dihang_in(1,1,1,index),
+ & hvar_frag(iif,1),ih_start,ih_end)
+ endif
+ iter=iter+1
+ if(iter.lt.10) then
+ call check_old(icheck,index)
+ if(icheck.eq.1) then
+ index=index-1
+ ifused(iif)=.false.
+ goto 94
+ endif
+ endif
+
+
+ 911 continue
+
+ enddo
+ enddo
+
+ endif
+
+c-----------------------------------------
+c N7 : copy nonlocal beta fragment from bank to seed
+c
+ if (n7.gt.0) then
+ if (n7frag.lt.n7) then
+ write (iout,*) "N7: only ",n7frag,'nonlocal fragments'
+ n7c=n7frag
+ else
+ n7c=n7
+ endif
+
+ do i=1,maxres
+ do j=1,mxio2
+ iff_in(i,j)=0
+ enddo
+ enddo
+ index2=0
+ do i=1,mxio
+ isend2(i)=0
+ enddo
+
+ do iters=1,nseed
+ iseed=is(iters)
+ do i=1,mxio
+ ifused(i)=.false.
+ enddo
+
+ do idummy=1,n7c
+ iran=0
+ iif=iran_num(1,n7frag)
+ do while( (ifused(iif) .or. bvar_frag(iif,1).eq.iseed) .and.
+ & iran.le.mxio )
+ iif=iran_num(1,n7frag)
+ iran=iran+1
+ enddo
+
+cd write (*,'(3i5,l,4i5)'),iters,idummy,iif,ifused(iif),
+cd & bvar_frag(iif,1),iseed,iran,index2
+
+ if(iran.ge.mxio) goto 999
+ if(index2.ge.mxio2) goto 999
+
+ index=index+1
+ movenx(index)=7
+ parent(1,index)=iseed
+ parent(2,index)=bvar_frag(iif,1)
+ index2=index2+1
+ isend2(index)=index2
+ ifused(iif)=.true.
+
+ if (vdisulf) then
+ nss_in(index)=bvar_nss(iseed)
+ do ij=1,nss_in(index)
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ enddo
+ endif
+
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ dihang_in2(i,j,k,index2)=bvar(i,j,k,bvar_frag(iif,1))
+ enddo
+ enddo
+ enddo
+
+ if (bvar_frag(iif,2).eq.4) then
+ do i=bvar_frag(iif,3),bvar_frag(iif,4)
+ iff_in(i,index2)=1
+ enddo
+ if (bvar_frag(iif,5).lt.bvar_frag(iif,6)) then
+cd print *,'###',bvar_frag(iif,3),bvar_frag(iif,4),
+cd & bvar_frag(iif,5),bvar_frag(iif,6)
+ do i=bvar_frag(iif,5),bvar_frag(iif,6)
+ iff_in(i,index2)=1
+ enddo
+ else
+cd print *,'###',bvar_frag(iif,3),bvar_frag(iif,4),
+cd & bvar_frag(iif,6),bvar_frag(iif,5)
+ do i=bvar_frag(iif,6),bvar_frag(iif,5)
+ iff_in(i,index2)=1
+ enddo
+ endif
+ endif
+
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ dihang_in(i,j,k,index)=bvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+
+
+ 999 continue
+
+ enddo
+ enddo
+
+ endif
+c-----------------------------------------------
+c N6 : copy random continues fragment from bank to seed
+c
+ do iters=1,nseed
+ iseed=is(iters)
+ do idummy=1,n6
+ isize=(is2-is1+1)*ran1(idum)+is1
+ index=index+1
+ movenx(index)=6
+
+
+ if (vdisulf) then
+ nss_in(index)=bvar_nss(iseed)
+ do ij=1,nss_in(index)
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ enddo
+ endif
+
+ iter=0
+ 104 continue
+ if(icycle.le.0) then
+ i1=nconf* ran1(idum)+1
+ i1=nbank-nconf+i1
+ else
+ i1=nbank* ran1(idum)+1
+ endif
+ if(i1.eq.iseed) goto 104
+ iter=iter+1
+ call newconf_residue(idum,dihang_in(1,1,1,index),i1,isize)
+ parent(1,index)=iseed
+ parent(2,index)=i1
+ if(iter.lt.10) then
+ call check_old(icheck,index)
+ if(icheck.eq.1) goto 104
+ endif
+ enddo
+ enddo
+c-----------------------------------------
+ if (n3.gt.0.or.n4.gt.0) call gen_hairpin
+ nconf_harp=0
+ do iters=1,nseed
+ if (nharp_seed(iters).gt.0) nconf_harp=nconf_harp+1
+ enddo
+c-----------------------------------------
+c N3 : copy hairpin from bank to seed
+c
+ do iters=1,nseed
+ iseed=is(iters)
+ nsucc=0
+ nacc=0
+ do idummy=1,n3
+ index=index+1
+ iter=0
+ 124 continue
+ if(icycle.le.0) then
+ i1=nconf* ran1(idum)+1
+ i1=nbank-nconf+i1
+ else
+ i1=nbank* ran1(idum)+1
+ endif
+ if(i1.eq.iseed) goto 124
+ do k=1,nsucc
+ if (i1.eq.iisucc(k).and.nsucc.lt.nconf_harp-1) goto 124
+ enddo
+ nsucc=nsucc+1
+ iisucc(nsucc)=i1
+ iter=iter+1
+ call newconf_residue_hairpin(idum,dihang_in(1,1,1,index),
+ & i1,fail)
+ if (fail) then
+ if (icycle.le.0 .and. nsucc.eq.nconf .or.
+ & icycle.gt.0 .and. nsucc.eq.nbank) then
+ index=index-1
+ goto 125
+ else
+ goto 124
+ endif
+ endif
+ if(iter.lt.10) then
+ call check_old(icheck,index)
+ if(icheck.eq.1) goto 124
+ endif
+ movenx(index)=3
+ parent(1,index)=iseed
+ parent(2,index)=i1
+
+
+ if (vdisulf) then
+ nss_in(index)=bvar_nss(iseed)
+ do ij=1,nss_in(index)
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ enddo
+ endif
+
+ nacc=nacc+1
+ enddo
+c if not enough hairpins, supplement with windows
+ 125 continue
+cdd if (n3.ne.0) write (iout,*) "N3",n3," nsucc",nsucc," nacc",nacc
+ do idummy=nacc+1,n3
+ isize=(is2-is1+1)*ran1(idum)+is1
+ index=index+1
+ movenx(index)=6
+ parent(1,index)=iseed
+ parent(2,index)=i1
+
+
+ if (vdisulf) then
+ nss_in(index)=bvar_nss(iseed)
+ do ij=1,nss_in(index)
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ enddo
+ endif
+
+ iter=0
+ 114 continue
+ if(icycle.le.0) then
+ i1=nconf* ran1(idum)+1
+ i1=nbank-nconf+i1
+ else
+ i1=nbank* ran1(idum)+1
+ endif
+ if(i1.eq.iseed) goto 114
+ iter=iter+1
+ call newconf_residue(idum,dihang_in(1,1,1,index),i1,isize)
+ if(iter.lt.10) then
+ call check_old(icheck,index)
+ if(icheck.eq.1) goto 114
+ endif
+ enddo
+ enddo
+c-----------------------------------------
+c N4 : shift a turn in hairpin in seed
+c
+ IF (N4.GT.0) THEN
+ if (4*nharp_tot .ge. n4*nseed) then
+ ntot_gen=n4*nseed
+ else
+ ntot_gen=(4*nharp_tot/nseed)*nseed
+ endif
+ ngen=0
+ do while (ngen.lt.ntot_gen)
+ do iters=1,nseed
+ iseed=is(iters)
+c write (iout,*) 'iters',iters,' iseed',iseed,' nharp_seed',
+c & nharp_seed(iters),' nharp_use',nharp_use(iters),
+c & ' ntot_gen',ntot_gen
+c write (iout,*) 'iharp_use(0)',
+c & (iharp_use(0,k,iters),k=1,nharp_seed(iters))
+ if (nharp_use(iters).gt.0) then
+ nicht_getan=.true.
+ do while (nicht_getan)
+ iih=iran_num(1,nharp_seed(iters))
+c write (iout,*) 'iih',iih,' iharp_use',
+c & (iharp_use(k,iih,iters),k=1,4)
+ if (iharp_use(0,iih,iters).gt.0) then
+ nicht_getan1=.true.
+ do while (nicht_getan1)
+ iim=iran_num(1,4)
+ nicht_getan1=iharp_use(iim,iih,iters).eq.1
+ enddo
+ nicht_getan=.false.
+ iharp_use(iim,iih,iters)=1
+ iharp_use(0,iih,iters)=iharp_use(0,iih,iters)-1
+ nharp_use(iters)=nharp_use(iters)-1
+cdd write (iout,'(a16,i3,a5,i2,a10,2i4)')
+cdd & 'N4 selected hairpin',iih,' move',iim,' iharp_seed',
+cdd & iharp_seed(1,iih,iters),iharp_seed(2,iih,iters)
+ endif
+ enddo
+ ngen=ngen+1
+ index=index+1
+ movenx(index)=4
+ parent(1,index)=iseed
+ parent(2,index)=0
+
+
+ if (vdisulf) then
+ nss_in(index)=bvar_nss(iseed)
+ do ij=1,nss_in(index)
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ enddo
+ endif
+
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ dihang_in(i,j,k,index)=bvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+ jstart=iharp_seed(1,iih,iters)+1
+ jend=iharp_seed(2,iih,iters)
+ if (iim.eq.1) then
+ ishift=-2
+ else if (iim.eq.2) then
+ ishift=-1
+ else if (iim.eq.3) then
+ ishift=1
+ else if (iim.eq.4) then
+ ishift=2
+ else
+ write (iout,*) 'CHUJ NASTAPIL: iim=',iim
+ call mpi_abort(mpi_comm_world,ierror,ierrcode)
+ endif
+c write (iout,*) 'jstart',jstart,' jend',jend,' ishift',ishift
+c write (iout,*) 'Before turn shift'
+c do j=2,nres-1
+c theta(j+1)=dihang_in(1,j,1,index)
+c phi(j+2)=dihang_in(2,j,1,index)
+c alph(j)=dihang_in(3,j,1,index)
+c omeg(j)=dihang_in(4,j,1,index)
+c enddo
+c call intout
+ do j=jstart,jend
+ if (itype(j).eq.10) then
+ iang=2
+ else
+ iang=4
+ endif
+ do i=1,iang
+ if (j+ishift.ge.nnt.and.j+ishift.le.nct)
+ & dihang_in(i,j+ishift,1,index)=bvar(i,j,1,iseed)
+ enddo
+ enddo
+c write (iout,*) 'After turn shift'
+c do j=2,nres-1
+c theta(j+1)=dihang_in(1,j,1,index)
+c phi(j+2)=dihang_in(2,j,1,index)
+c alph(j)=dihang_in(3,j,1,index)
+c omeg(j)=dihang_in(4,j,1,index)
+c enddo
+c call intout
+ if (ngen.eq.ntot_gen) goto 135
+ endif
+ enddo
+ enddo
+c if not enough hairpins, supplement with windows
+c write (iout,*) 'end of enddo'
+ 135 continue
+cdd write (iout,*) "N4",n4," ngen/nseed",ngen/nseed,
+cdd & ngen,nseed
+ do iters=1,nseed
+ iseed=is(iters)
+ do idummy=ngen/nseed+1,n4
+ isize=(is2-is1+1)*ran1(idum)+is1
+ index=index+1
+ movenx(index)=6
+
+ if (vdisulf) then
+ nss_in(index)=bvar_nss(iseed)
+ do ij=1,nss_in(index)
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ enddo
+ endif
+
+
+ iter=0
+ 134 continue
+ if(icycle.le.0) then
+ i1=nconf* ran1(idum)+1
+ i1=nbank-nconf+i1
+ else
+ i1=nbank* ran1(idum)+1
+ endif
+ if(i1.eq.iseed) goto 134
+ iter=iter+1
+ call newconf_residue(idum,dihang_in(1,1,1,index),i1,isize)
+ parent(1,index)=iseed
+ parent(2,index)=i1
+ if(iter.lt.10) then
+ call check_old(icheck,index)
+ if(icheck.eq.1) goto 134
+ endif
+ enddo
+ enddo
+ ENDIF
+c-----------------------------------------
+c N5 : copy one residue from bank to seed (normally switched off - use N1)
+c
+ do iters=1,nseed
+ iseed=is(iters)
+ isize=1
+ do i=1,n5
+ index=index+1
+ movenx(index)=5
+
+ if (vdisulf) then
+ nss_in(index)=bvar_nss(iseed)
+ do ij=1,nss_in(index)
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ enddo
+ endif
+
+
+ iter=0
+ 105 continue
+ if(icycle.le.0) then
+ i1=nconf* ran1(idum)+1
+ i1=nbank-nconf+i1
+ else
+ i1=nbank* ran1(idum)+1
+ endif
+ if(i1.eq.iseed) goto 105
+ iter=iter+1
+ call newconf_residue(idum,dihang_in(1,1,1,index),i1,isize)
+ parent(1,index)=iseed
+ parent(2,index)=i1
+ if(iter.lt.10) then
+ call check_old(icheck,index)
+ if(icheck.eq.1) goto 105
+ endif
+ enddo
+ enddo
+c-----------------------------------------
+c N2 : copy backbone of one residue from bank or first bank to seed
+c (normally switched off - use N1)
+c
+ do iters=1,nseed
+ iseed=is(iters)
+ do i=n2,1,-1
+ if(icycle.le.0.and.iuse.gt.nconf-irr) then
+ iseed=ran1(idum)*nconf+1
+ iseed=nbank-nconf+iseed
+ endif
+ index=index+1
+ movenx(index)=2
+
+ if (vdisulf) then
+ nss_in(index)=bvar_nss(iseed)
+ do ij=1,nss_in(index)
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ enddo
+ endif
+
+ iter=0
+ 102 i1= ran1(idum)*nbank+1
+ if(i1.eq.iseed) goto 102
+ iter=iter+1
+ if(icycle.le.0.and.iuse.gt.nconf-irr) then
+ nran=mod(i-1,nran0)+3
+ call newconf1arr(idum,dihang_in(1,1,1,index),nran,i1)
+ parent(1,index)=-iseed
+ parent(2,index)=-i1
+ else if(icycle.le.0.and.iters.le.iuse) then
+ nran=mod(i-1,nran0)+1
+ call newconf1abr(idum,dihang_in(1,1,1,index),nran,i1)
+ parent(1,index)=iseed
+ parent(2,index)=-i1
+ else
+ nran=mod(i-1,nran1)+1
+ if(ran1(idum).lt.0.5) then
+ call newconf1abr(idum,dihang_in(1,1,1,index),nran,i1)
+ parent(1,index)=iseed
+ parent(2,index)=-i1
+ else
+ call newconf1abb(idum,dihang_in(1,1,1,index),nran,i1)
+ parent(1,index)=iseed
+ parent(2,index)=i1
+ endif
+ endif
+ if(iter.lt.10) then
+ call check_old(icheck,index)
+ if(icheck.eq.1) goto 102
+ endif
+ enddo
+ enddo
+c-----------------------------------------
+c N1 : copy backbone or sidechain of one residue from bank or
+c first bank to seed
+c
+ do iters=1,nseed
+ iseed=is(iters)
+ do i=n1,1,-1
+ if(icycle.le.0.and.iuse.gt.nconf-irr) then
+ iseed=ran1(idum)*nconf+1
+ iseed=nbank-nconf+iseed
+ endif
+ index=index+1
+ movenx(index)=1
+
+ if (vdisulf) then
+ nss_in(index)=bvar_nss(iseed)
+ do ij=1,nss_in(index)
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ enddo
+ endif
+
+ iter=0
+ 101 i1= ran1(idum)*nbank+1
+
+ if(i1.eq.iseed) goto 101
+ iter=iter+1
+ if(icycle.le.0.and.iuse.gt.nconf-irr) then
+ nran=mod(i-1,nran0)+3
+ call newconf1rr(idum,dihang_in(1,1,1,index),nran,i1)
+ parent(1,index)=-iseed
+ parent(2,index)=-i1
+ else if(icycle.le.0.and.iters.le.iuse) then
+ nran=mod(i-1,nran0)+1
+ call newconf1br(idum,dihang_in(1,1,1,index),nran,i1)
+ parent(1,index)=iseed
+ parent(2,index)=-i1
+ else
+ nran=mod(i-1,nran1)+1
+ if(ran1(idum).lt.0.5) then
+ call newconf1br(idum,dihang_in(1,1,1,index),nran,i1)
+ parent(1,index)=iseed
+ parent(2,index)=-i1
+ else
+ call newconf1bb(idum,dihang_in(1,1,1,index),nran,i1)
+ parent(1,index)=iseed
+ parent(2,index)=i1
+ endif
+ endif
+ if(iter.lt.10) then
+ call check_old(icheck,index)
+ if(icheck.eq.1) goto 101
+ endif
+ enddo
+ enddo
+c-----------------------------------------
+c N0 just all seeds
+c
+ IF (n0.gt.0) THEN
+ do iters=1,nseed
+ iseed=is(iters)
+ index=index+1
+ movenx(index)=0
+ parent(1,index)=iseed
+ parent(2,index)=0
+
+ if (vdisulf) then
+ nss_in(index)=bvar_nss(iseed)
+ do ij=1,nss_in(index)
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ enddo
+ endif
+
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ dihang_in(i,j,k,index)=bvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+ enddo
+ ENDIF
+c-----------------------------------------
+ if (vdisulf) then
+ do iters=1,nseed
+ iseed=is(iters)
+
+ do k=1,numch
+ do j=2,nres-1
+ theta(j+1)=bvar(1,j,k,iseed)
+ phi(j+2)=bvar(2,j,k,iseed)
+ alph(j)=bvar(3,j,k,iseed)
+ omeg(j)=bvar(4,j,k,iseed)
+ enddo
+ enddo
+ call chainbuild
+
+cd write(iout,*) 'makevar DYNSS',iseed,'#',bvar_ns(iseed),
+cd & (bvar_s(k,iseed),k=1,bvar_ns(iseed)),
+cd & bvar_nss(iseed),
+cd & (bvar_ss(1,k,iseed)-nres,'-',
+cd & bvar_ss(2,k,iseed)-nres,k=1,bvar_nss(iseed))
+
+ do i1=1,bvar_ns(iseed)
+c
+c N10 fussion of free halfcysteines in seed
+c first select CYS with distance < 7A
+c
+ do j1=i1+1,bvar_ns(iseed)
+ if (dist(bvar_s(i1,iseed)+nres,bvar_s(j1,iseed)+nres)
+ & .lt.7.0.and.
+ & iabs(bvar_s(i1,iseed)-bvar_s(j1,iseed)).gt.3) then
+
+ index=index+1
+ movenx(index)=10
+ parent(1,index)=iseed
+ parent(2,index)=0
+ do ij=1,bvar_nss(iseed)
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ enddo
+ ij=bvar_nss(iseed)+1
+ nss_in(index)=ij
+ iss_in(ij,index)=bvar_s(i1,iseed)+nres
+ jss_in(ij,index)=bvar_s(j1,iseed)+nres
+
+cd write(iout,*) 'makevar NSS0',index,
+cd & dist(bvar_s(i1,iseed)+nres,bvar_s(j1,iseed)+nres),
+cd & nss_in(index),iss_in(ij,index)-nres,'-',jss_in(ij,index)-nres
+
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ dihang_in(i,j,k,index)=bvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+
+ endif
+ enddo
+c
+c N11 type I transdisulfidation
+c
+ do j1=1,bvar_nss(iseed)
+ if (dist(bvar_s(i1,iseed)+nres,bvar_ss(1,j1,iseed))
+ & .lt.7.0.and.
+ & iabs(bvar_s(i1,iseed)-(bvar_ss(1,j1,iseed)-nres))
+ & .gt.3) then
+
+ index=index+1
+ movenx(index)=11
+ parent(1,index)=iseed
+ parent(2,index)=0
+ do ij=1,bvar_nss(iseed)
+ if (ij.ne.j1) then
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ endif
+ enddo
+ nss_in(index)=bvar_nss(iseed)
+ iss_in(j1,index)=bvar_s(i1,iseed)+nres
+ jss_in(j1,index)=bvar_ss(1,j1,iseed)
+ if (iss_in(j1,index).gt.jss_in(j1,index)) then
+ iss_in(j1,index)=bvar_ss(1,j1,iseed)
+ jss_in(j1,index)=bvar_s(i1,iseed)+nres
+ endif
+
+cd write(iout,*) 'makevar NSS1 #1',index,
+cd & bvar_s(i1,iseed),bvar_ss(1,j1,iseed)-nres,
+cd & dist(bvar_s(i1,iseed)+nres,bvar_ss(1,j1,iseed)),
+cd & (iss_in(ij,index)-nres,'-',jss_in(ij,index)-nres,
+cd & ij=1,nss_in(index))
+
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ dihang_in(i,j,k,index)=bvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+ endif
+ if (dist(bvar_s(i1,iseed)+nres,bvar_ss(2,j1,iseed))
+ & .lt.7.0.and.
+ & iabs(bvar_s(i1,iseed)-(bvar_ss(2,j1,iseed)-nres))
+ & .gt.3) then
+
+ index=index+1
+ movenx(index)=11
+ parent(1,index)=iseed
+ parent(2,index)=0
+ do ij=1,bvar_nss(iseed)
+ if (ij.ne.j1) then
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ endif
+ enddo
+ nss_in(index)=bvar_nss(iseed)
+ iss_in(j1,index)=bvar_s(i1,iseed)+nres
+ jss_in(j1,index)=bvar_ss(2,j1,iseed)
+ if (iss_in(j1,index).gt.jss_in(j1,index)) then
+ iss_in(j1,index)=bvar_ss(2,j1,iseed)
+ jss_in(j1,index)=bvar_s(i1,iseed)+nres
+ endif
+
+
+cd write(iout,*) 'makevar NSS1 #2',index,
+cd & bvar_s(i1,iseed),bvar_ss(2,j1,iseed)-nres,
+cd & dist(bvar_s(i1,iseed)+nres,bvar_ss(2,j1,iseed)),
+cd & (iss_in(ij,index)-nres,'-',jss_in(ij,index)-nres,
+cd & ij=1,nss_in(index))
+
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ dihang_in(i,j,k,index)=bvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+
+ endif
+ enddo
+ enddo
+
+c
+c N12 type II transdisulfidation
+c
+ do i1=1,bvar_nss(iseed)
+ do j1=i1+1,bvar_nss(iseed)
+ if (dist(bvar_ss(1,i1,iseed),bvar_ss(1,j1,iseed))
+ & .lt.7.0.and.
+ & dist(bvar_ss(2,i1,iseed),bvar_ss(2,j1,iseed))
+ & .lt.7.0.and.
+ & iabs(bvar_ss(1,i1,iseed)-bvar_ss(1,j1,iseed))
+ & .gt.3.and.
+ & iabs(bvar_ss(2,i1,iseed)-bvar_ss(2,j1,iseed))
+ & .gt.3) then
+ index=index+1
+ movenx(index)=12
+ parent(1,index)=iseed
+ parent(2,index)=0
+ do ij=1,bvar_nss(iseed)
+ if (ij.ne.i1 .and. ij.ne.j1) then
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ endif
+ enddo
+ nss_in(index)=bvar_nss(iseed)
+ iss_in(i1,index)=bvar_ss(1,i1,iseed)
+ jss_in(i1,index)=bvar_ss(1,j1,iseed)
+ if (iss_in(i1,index).gt.jss_in(i1,index)) then
+ iss_in(i1,index)=bvar_ss(1,j1,iseed)
+ jss_in(i1,index)=bvar_ss(1,i1,iseed)
+ endif
+ iss_in(j1,index)=bvar_ss(2,i1,iseed)
+ jss_in(j1,index)=bvar_ss(2,j1,iseed)
+ if (iss_in(j1,index).gt.jss_in(j1,index)) then
+ iss_in(j1,index)=bvar_ss(2,j1,iseed)
+ jss_in(j1,index)=bvar_ss(2,i1,iseed)
+ endif
+
+
+cd write(iout,*) 'makevar NSS2 #1',index,
+cd & bvar_ss(1,i1,iseed)-nres,bvar_ss(1,j1,iseed)-nres,
+cd & dist(bvar_ss(1,i1,iseed),bvar_ss(1,j1,iseed)),
+cd & bvar_ss(2,i1,iseed)-nres,bvar_ss(2,j1,iseed)-nres,
+cd & dist(bvar_ss(2,i1,iseed),bvar_ss(2,j1,iseed)),
+cd & (iss_in(ij,index)-nres,'-',jss_in(ij,index)-nres,
+cd & ij=1,nss_in(index))
+
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ dihang_in(i,j,k,index)=bvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+
+ endif
+
+ if (dist(bvar_ss(1,i1,iseed),bvar_ss(2,j1,iseed))
+ & .lt.7.0.and.
+ & dist(bvar_ss(2,i1,iseed),bvar_ss(1,j1,iseed))
+ & .lt.7.0.and.
+ & iabs(bvar_ss(1,i1,iseed)-bvar_ss(2,j1,iseed))
+ & .gt.3.and.
+ & iabs(bvar_ss(2,i1,iseed)-bvar_ss(1,j1,iseed))
+ & .gt.3) then
+ index=index+1
+ movenx(index)=12
+ parent(1,index)=iseed
+ parent(2,index)=0
+ do ij=1,bvar_nss(iseed)
+ if (ij.ne.i1 .and. ij.ne.j1) then
+ iss_in(ij,index)=bvar_ss(1,ij,iseed)
+ jss_in(ij,index)=bvar_ss(2,ij,iseed)
+ endif
+ enddo
+ nss_in(index)=bvar_nss(iseed)
+ iss_in(i1,index)=bvar_ss(1,i1,iseed)
+ jss_in(i1,index)=bvar_ss(2,j1,iseed)
+ if (iss_in(i1,index).gt.jss_in(i1,index)) then
+ iss_in(i1,index)=bvar_ss(2,j1,iseed)
+ jss_in(i1,index)=bvar_ss(1,i1,iseed)
+ endif
+ iss_in(j1,index)=bvar_ss(2,i1,iseed)
+ jss_in(j1,index)=bvar_ss(1,j1,iseed)
+ if (iss_in(j1,index).gt.jss_in(j1,index)) then
+ iss_in(j1,index)=bvar_ss(1,j1,iseed)
+ jss_in(j1,index)=bvar_ss(2,i1,iseed)
+ endif
+
+
+cd write(iout,*) 'makevar NSS2 #2',index,
+cd & bvar_ss(1,i1,iseed)-nres,bvar_ss(2,j1,iseed)-nres,
+cd & dist(bvar_ss(1,i1,iseed),bvar_ss(2,j1,iseed)),
+cd & bvar_ss(2,i1,iseed)-nres,bvar_ss(1,j1,iseed)-nres,
+cd & dist(bvar_ss(2,i1,iseed),bvar_ss(1,j1,iseed)),
+cd & (iss_in(ij,index)-nres,'-',jss_in(ij,index)-nres,
+cd & ij=1,nss_in(index))
+
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ dihang_in(i,j,k,index)=bvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+
+ endif
+
+
+ enddo
+ enddo
+c
+c N13 removal of disulfide bond
+c
+ if (bvar_nss(iseed).gt.0) then
+ i1=bvar_nss(iseed)*ran1(idum)+1
+
+ index=index+1
+ movenx(index)=13
+ parent(1,index)=iseed
+ parent(2,index)=0
+ ij=0
+ do j1=1,bvar_nss(iseed)
+ if (j1.ne.i1) then
+ ij=ij+1
+ iss_in(ij,index)=bvar_ss(1,j1,iseed)
+ jss_in(ij,index)=bvar_ss(2,j1,iseed)
+ endif
+ enddo
+ nss_in(index)=bvar_nss(iseed)-1
+
+cd write(iout,*) 'NSS3',index,i1,
+cd & bvar_ss(1,i1,iseed)-nres,'=',bvar_ss(2,i1,iseed)-nres,'#',
+cd & (iss_in(ij,index)-nres,'-',jss_in(ij,index)-nres,
+cd & ij=1,nss_in(index))
+
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ dihang_in(i,j,k,index)=bvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+
+ endif
+
+ enddo
+ endif
+c-----------------------------------------
+
+
+
+ if(index.ne.n) write(iout,*)'make_var : ntry=',index
+
+ n=index
+cd do ii=1,n
+cd write (istat,*) "======== ii=",ii," the dihang array"
+cd do i=1,nres
+cd write (istat,'(i5,4f15.5)') i,(dihang_in(k,i,1,ii)*rad2deg,k=1,4)
+cd enddo
+cd enddo
+ return
+ end
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ subroutine check_old(icheck,n)
+ implicit real*8 (a-h,o-z)
+ include 'DIMENSIONS'
+ include 'COMMON.CSA'
+ include 'COMMON.BANK'
+ include 'COMMON.CHAIN'
+ include 'COMMON.GEO'
+ data ctdif /10./
+ data ctdiff /60./
+
+ i1=n
+ do i2=1,n-1
+ diff=0.d0
+ do m=1,numch
+ do j=2,nres-1
+ do i=1,4
+ dif=rad2deg*dabs(dihang_in(i,j,m,i1)-dihang_in(i,j,m,i2))
+ if(dif.gt.180.0) dif=360.0-dif
+ if(dif.gt.ctdif) goto 100
+ diff=diff+dif
+ if(diff.gt.ctdiff) goto 100
+ enddo
+ enddo
+ enddo
+ icheck=1
+ return
+ 100 continue
+ enddo
+
+ icheck=0
+
+ return
+ end
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ subroutine newconf1rr(idum,vvar,nran,i1)
+ implicit real*8 (a-h,o-z)
+ include 'DIMENSIONS'
+ include 'COMMON.IOUNITS'
+ include 'COMMON.CSA'
+ include 'COMMON.BANK'
+ include 'COMMON.CHAIN'
+ include 'COMMON.GEO'
+ real ran1,ran2
+ dimension vvar(mxang,maxres,mxch),iold(ntotal)
+ ctdif=10.
+
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ vvar(i,j,k)=rvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+
+ do index=1,nran
+ iold(index) = 0
+ enddo
+
+ number=ntotgr
+
+ iter=0
+ do index=1,nran
+ 10 iran= ran1(idum)*number+1
+ if(iter.gt.number) return
+ iter=iter+1
+ if(iter.eq.1) goto 11
+ do ind=1,index-1
+ if(iran.eq.iold(ind)) goto 10
+ enddo
+ 11 continue
+
+ do ind=1,ngroup(iran)
+ i=igroup(1,ind,iran)
+ j=igroup(2,ind,iran)
+ k=igroup(3,ind,iran)
+ dif=rad2deg*dabs(vvar(i,j,k)-rvar(i,j,k,i1))
+ if(dif.gt.180.) dif=360.-dif
+ if(dif.gt.ctdif) goto 20
+ enddo
+ if(iter.gt.number) goto 20
+ goto 10
+ 20 continue
+ do ind=1,ngroup(iran)
+ i=igroup(1,ind,iran)
+ j=igroup(2,ind,iran)
+ k=igroup(3,ind,iran)
+ vvar(i,j,k)=rvar(i,j,k,i1)
+ enddo
+ iold(index)=iran
+ enddo
+
+ return
+ end
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ subroutine newconf1br(idum,vvar,nran,i1)
+ implicit real*8 (a-h,o-z)
+ include 'DIMENSIONS'
+ include 'COMMON.IOUNITS'
+ include 'COMMON.CSA'
+ include 'COMMON.BANK'
+ include 'COMMON.CHAIN'
+ include 'COMMON.GEO'
+ include 'COMMON.TORCNSTR'
+ include 'COMMON.CONTROL'
+ real ran1,ran2
+ dimension vvar(mxang,maxres,mxch),iold(ntotal)
+ ctdif=10.
+
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ vvar(i,j,k)=bvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+
+ do index=1,nran
+ iold(index) = 0
+ enddo
+
+ number=ntotgr
+
+ iter=0
+ do index=1,nran
+ 10 iran= ran1(idum)*number+1
+ if(i2ndstr.gt.0) then
+ rtmp=ran1(idum)
+ if(rtmp.le.rdih_bias) then
+ i=0
+ do j=1,ndih_nconstr
+ if(igroup(2,1,iran).eq.idih_nconstr(j))i=j
+ enddo
+ if(i.eq.0) then
+ juhc=0
+4321 juhc=juhc+1
+ iran= ran1(idum)*number+1
+ i=0
+ do j=1,ndih_nconstr
+ if(igroup(2,1,iran).eq.idih_nconstr(j))i=j
+ enddo
+ if(i.eq.0.or.juhc.lt.1000)goto 4321
+ if(juhc.eq.1000) then
+ print *, 'move 6 : failed to find unconstrained group'
+ write(iout,*) 'move 6 : failed to find unconstrained group'
+ endif
+ endif
+ endif
+ endif
+ if(iter.gt.number) return
+ iter=iter+1
+ if(iter.eq.1) goto 11
+ do ind=1,index-1
+ if(iran.eq.iold(ind)) goto 10
+ enddo
+ 11 continue
+
+ do ind=1,ngroup(iran)
+ i=igroup(1,ind,iran)
+ j=igroup(2,ind,iran)
+ k=igroup(3,ind,iran)
+ dif=rad2deg*dabs(vvar(i,j,k)-rvar(i,j,k,i1))
+ if(dif.gt.180.) dif=360.-dif
+ if(dif.gt.ctdif) goto 20
+ enddo
+ if(iter.gt.number) goto 20
+ goto 10
+ 20 continue
+ do ind=1,ngroup(iran)
+ i=igroup(1,ind,iran)
+ j=igroup(2,ind,iran)
+ k=igroup(3,ind,iran)
+ vvar(i,j,k)=rvar(i,j,k,i1)
+ enddo
+ iold(index)=iran
+ enddo
+
+ return
+ end
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ subroutine newconf1bb(idum,vvar,nran,i1)
+ implicit real*8 (a-h,o-z)
+ include 'DIMENSIONS'
+ include 'COMMON.IOUNITS'
+ include 'COMMON.CSA'
+ include 'COMMON.BANK'
+ include 'COMMON.CHAIN'
+ include 'COMMON.GEO'
+ real ran1,ran2
+ dimension vvar(mxang,maxres,mxch),iold(ntotal)
+ ctdif=10.
+
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ vvar(i,j,k)=bvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+
+ do index=1,nran
+ iold(index) = 0
+ enddo
+
+ number=ntotgr
+
+ iter=0
+ do index=1,nran
+ 10 iran= ran1(idum)*number+1
+ if(iter.gt.number) return
+ iter=iter+1
+ if(iter.eq.1) goto 11
+ do ind=1,index-1
+ if(iran.eq.iold(ind)) goto 10
+ enddo
+ 11 continue
+
+ do ind=1,ngroup(iran)
+ i=igroup(1,ind,iran)
+ j=igroup(2,ind,iran)
+ k=igroup(3,ind,iran)
+ dif=rad2deg*dabs(vvar(i,j,k)-bvar(i,j,k,i1))
+ if(dif.gt.180.) dif=360.-dif
+ if(dif.gt.ctdif) goto 20
+ enddo
+ if(iter.gt.number) goto 20
+ goto 10
+ 20 continue
+ do ind=1,ngroup(iran)
+ i=igroup(1,ind,iran)
+ j=igroup(2,ind,iran)
+ k=igroup(3,ind,iran)
+ vvar(i,j,k)=bvar(i,j,k,i1)
+ enddo
+ iold(index)=iran
+ enddo
+
+ return
+ end
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ subroutine newconf1arr(idum,vvar,nran,i1)
+ implicit real*8 (a-h,o-z)
+ include 'DIMENSIONS'
+ include 'COMMON.IOUNITS'
+ include 'COMMON.CSA'
+ include 'COMMON.BANK'
+ include 'COMMON.CHAIN'
+ include 'COMMON.GEO'
+ real ran1,ran2
+ dimension vvar(mxang,maxres,mxch),iold(ntotal)
+ ctdif=10.
+
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ vvar(i,j,k)=rvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+
+ do index=1,nran
+ iold(index) = 0
+ enddo
+
+ number=nres-2
+
+ iter=0
+ do index=1,nran
+ 10 iran= ran1(idum)*number+1
+ if(iter.gt.number) return
+ iter=iter+1
+ if(iter.eq.1) goto 11
+ do ind=1,index-1
+ if(iran.eq.iold(ind)) goto 10
+ enddo
+ 11 continue
+
+ do ind=1,ngroup(iran)
+ i=igroup(1,ind,iran)
+ j=igroup(2,ind,iran)
+ k=igroup(3,ind,iran)
+ dif=rad2deg*dabs(vvar(i,j,k)-rvar(i,j,k,i1))
+ if(dif.gt.180.) dif=360.-dif
+ if(dif.gt.ctdif) goto 20
+ enddo
+ if(iter.gt.number) goto 20
+ goto 10
+ 20 continue
+ do ind=1,ngroup(iran)
+ i=igroup(1,ind,iran)
+ j=igroup(2,ind,iran)
+ k=igroup(3,ind,iran)
+ vvar(i,j,k)=rvar(i,j,k,i1)
+ enddo
+ iold(index)=iran
+ enddo
+
+ return
+ end
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ subroutine newconf1abr(idum,vvar,nran,i1)
+ implicit real*8 (a-h,o-z)
+ include 'DIMENSIONS'
+ include 'COMMON.IOUNITS'
+ include 'COMMON.CSA'
+ include 'COMMON.BANK'
+ include 'COMMON.CHAIN'
+ include 'COMMON.GEO'
+ include 'COMMON.TORCNSTR'
+ include 'COMMON.CONTROL'
+ real ran1,ran2
+ dimension vvar(mxang,maxres,mxch),iold(ntotal)
+ ctdif=10.
+
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ vvar(i,j,k)=bvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+
+ do index=1,nran
+ iold(index) = 0
+ enddo
+
+ number=nres-2
+
+ iter=0
+ do index=1,nran
+ 10 iran= ran1(idum)*number+1
+ if(i2ndstr.gt.0) then
+ rtmp=ran1(idum)
+ if(rtmp.le.rdih_bias) then
+ iran=ran1(idum)*ndih_nconstr+1
+ iran=idih_nconstr(iran)
+ endif
+ endif
+ if(iter.gt.number) return
+ iter=iter+1
+ if(iter.eq.1) goto 11
+ do ind=1,index-1
+ if(iran.eq.iold(ind)) goto 10
+ enddo
+ 11 continue
+
+ do ind=1,ngroup(iran)
+ i=igroup(1,ind,iran)
+ j=igroup(2,ind,iran)
+ k=igroup(3,ind,iran)
+ dif=rad2deg*dabs(vvar(i,j,k)-rvar(i,j,k,i1))
+ if(dif.gt.180.) dif=360.-dif
+ if(dif.gt.ctdif) goto 20
+ enddo
+ if(iter.gt.number) goto 20
+ goto 10
+ 20 continue
+ do ind=1,ngroup(iran)
+ i=igroup(1,ind,iran)
+ j=igroup(2,ind,iran)
+ k=igroup(3,ind,iran)
+ vvar(i,j,k)=rvar(i,j,k,i1)
+ enddo
+ iold(index)=iran
+ enddo
+
+ return
+ end
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ subroutine newconf1abb(idum,vvar,nran,i1)
+ implicit real*8 (a-h,o-z)
+ include 'DIMENSIONS'
+ include 'COMMON.IOUNITS'
+ include 'COMMON.CSA'
+ include 'COMMON.BANK'
+ include 'COMMON.CHAIN'
+ include 'COMMON.GEO'
+ include 'COMMON.TORCNSTR'
+ include 'COMMON.CONTROL'
+ real ran1,ran2
+ dimension vvar(mxang,maxres,mxch),iold(ntotal)
+ ctdif=10.
+
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ vvar(i,j,k)=bvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+
+ do index=1,nran
+ iold(index) = 0
+ enddo
+
+ number=nres-2
+
+ iter=0
+ do index=1,nran
+ 10 iran= ran1(idum)*number+1
+ if(i2ndstr.gt.0) then
+ rtmp=ran1(idum)
+ if(rtmp.le.rdih_bias) then
+ iran=ran1(idum)*ndih_nconstr+1
+ iran=idih_nconstr(iran)
+ endif
+ endif
+ if(iter.gt.number) return
+ iter=iter+1
+ if(iter.eq.1) goto 11
+ do ind=1,index-1
+ if(iran.eq.iold(ind)) goto 10
+ enddo
+ 11 continue
+
+ do ind=1,ngroup(iran)
+ i=igroup(1,ind,iran)
+ j=igroup(2,ind,iran)
+ k=igroup(3,ind,iran)
+ dif=rad2deg*dabs(vvar(i,j,k)-bvar(i,j,k,i1))
+ if(dif.gt.180.) dif=360.-dif
+ if(dif.gt.ctdif) goto 20
+ enddo
+ if(iter.gt.number) goto 20
+ goto 10
+ 20 continue
+ do ind=1,ngroup(iran)
+ i=igroup(1,ind,iran)
+ j=igroup(2,ind,iran)
+ k=igroup(3,ind,iran)
+ vvar(i,j,k)=bvar(i,j,k,i1)
+ enddo
+ iold(index)=iran
+ enddo
+
+ return
+ end
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ subroutine newconf_residue(idum,vvar,i1,isize)
+ implicit real*8 (a-h,o-z)
+ include 'DIMENSIONS'
+ include 'COMMON.IOUNITS'
+ include 'COMMON.CSA'
+ include 'COMMON.BANK'
+ include 'COMMON.CHAIN'
+ include 'COMMON.GEO'
+ include 'COMMON.TORCNSTR'
+ include 'COMMON.CONTROL'
+ real ran1,ran2
+ dimension vvar(mxang,maxres,mxch),iold(ntotal)
+ ctdif=10.
+
+ if (iseed.gt.mxio .or. iseed.lt.1) then
+ write (iout,*) 'Dimension ERROR in NEWCONF: ISEED',iseed
+ call mpi_abort(mpi_comm_world,ierror,ierrcode)
+ endif
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ vvar(i,j,k)=bvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+
+
+ k=1
+ number=nres+isize-2
+ iter=1
+ 10 iran= ran1(idum)*number+1
+ if(i2ndstr.gt.0) then
+ rtmp=ran1(idum)
+ if(rtmp.le.rdih_bias) then
+ iran=ran1(idum)*ndih_nconstr+1
+ iran=idih_nconstr(iran)
+ endif
+ endif
+ istart=iran-isize+1
+ iend=iran
+ if(istart.lt.2) istart=2
+ if(iend.gt.nres-1) iend=nres-1
+
+ if(iter.eq.1) goto 11
+ do ind=1,iter-1
+ if(iran.eq.iold(ind)) goto 10
+ enddo
+ 11 continue
+
+ do j=istart,iend
+ do i=1,4
+ dif=rad2deg*dabs(vvar(i,j,k)-bvar(i,j,k,i1))
+ if(dif.gt.180.) dif=360.-dif
+ if(dif.gt.ctdif) goto 20
+ enddo
+ enddo
+ iold(iter)=iran
+ iter=iter+1
+ if(iter.gt.number) goto 20
+ goto 10
+
+ 20 continue
+ do j=istart,iend
+ do i=1,4
+ vvar(i,j,k)=bvar(i,j,k,i1)
+ enddo
+ enddo
+
+ return
+ end
+
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ subroutine newconf_copy(idum,vvar,i1,istart,iend)
+ implicit real*8 (a-h,o-z)
+ include 'DIMENSIONS'
+ include 'COMMON.IOUNITS'
+ include 'COMMON.CSA'
+ include 'COMMON.BANK'
+ include 'COMMON.CHAIN'
+ include 'COMMON.GEO'
+ include 'COMMON.TORCNSTR'
+ include 'COMMON.CONTROL'
+ real ran1,ran2
+ dimension vvar(mxang,maxres,mxch),iold(ntotal)
+ ctdif=10.
+
+ if (iseed.gt.mxio .or. iseed.lt.1) then
+ write (iout,*) 'Dimension ERROR in NEWCONF: ISEED',iseed
+ call mpi_abort(mpi_comm_world,ierror,ierrcode)
+ endif
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ vvar(i,j,k)=bvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+
+
+ do j=istart,iend
+ do i=1,4
+ vvar(i,j,1)=bvar(i,j,1,i1)
+ enddo
+ enddo
+
+ return
+ end
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ subroutine newconf_residue_hairpin(idum,vvar,i1,fail)
+ implicit real*8 (a-h,o-z)
+ include 'DIMENSIONS'
+ include 'COMMON.IOUNITS'
+ include 'COMMON.CSA'
+ include 'COMMON.BANK'
+ include 'COMMON.CHAIN'
+ include 'COMMON.GEO'
+ include 'COMMON.VAR'
+ real ran1,ran2
+ dimension vvar(mxang,maxres,mxch),iold(ntotal)
+ integer nharp,iharp(4,maxres/3),icipa(maxres/3)
+ logical fail,not_done
+ ctdif=10.
+
+ fail=.false.
+ if (iseed.gt.mxio .or. iseed.lt.1) then
+ write (iout,*) 'Dimension ERROR in NEWCONF: ISEED',iseed
+ call mpi_abort(mpi_comm_world,ierror,ierrcode)
+ endif
+ do k=1,numch
+ do j=2,nres-1
+ do i=1,4
+ vvar(i,j,k)=bvar(i,j,k,iseed)
+ enddo
+ enddo
+ enddo
+ do k=1,numch
+ do j=2,nres-1
+ theta(j+1)=bvar(1,j,k,i1)
+ phi(j+2)=bvar(2,j,k,i1)
+ alph(j)=bvar(3,j,k,i1)
+ omeg(j)=bvar(4,j,k,i1)
+ enddo
+ enddo
+c call intout
+ call chainbuild
+ call hairpin(.false.,nharp,iharp)
+
+ if (nharp.eq.0) then
+ fail=.true.
+ return
+ endif
+
+ n_used=0
+
+ DO III=1,NHARP
+
+ not_done = .true.
+ icount=0
+ do while (not_done)
+ icount=icount+1
+ iih=iran_num(1,nharp)
+ do k=1,n_used
+ if (iih.eq.icipa(k)) then
+ iih=0
+ goto 22
+ endif
+ enddo
+ not_done=.false.
+ n_used=n_used+1
+ icipa(n_used)=iih
+ 22 continue
+ not_done = not_done .and. icount.le.nharp
+ enddo
+
+ if (iih.eq.0) then
+ write (iout,*) "CHUJ NASTAPIL W NEWCONF_RESIDUE_HAIRPIN!!!!"
+ fail=.true.
+ return
+ endif
+
+ istart=iharp(1,iih)+1
+ iend=iharp(2,iih)
+
+cdd write (iout,*) "newconf_residue_hairpin: iih",iih,
+cdd & " istart",istart," iend",iend
+
+ do k=1,numch
+ do j=istart,iend
+ do i=1,4
+ dif=rad2deg*dabs(vvar(i,j,k)-bvar(i,j,k,i1))
+ if(dif.gt.180.) dif=360.-dif
+ if(dif.gt.ctdif) goto 20
+ enddo
+ enddo
+ enddo
+ goto 10
+ 20 continue
+ do k=1,numch
+ do j=istart,iend
+ do i=1,4
+ vvar(i,j,k)=bvar(i,j,k,i1)
+ enddo
+ enddo
+ enddo
+c do j=1,numch
+c do l=2,nres-1
+c write (iout,'(4f8.3)') (rad2deg*vvar(i,l,j),i=1,4)
+c enddo
+c enddo
+ return
+ 10 continue
+ ENDDO
+
+ fail=.true.
+
+ return
+ end
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ subroutine gen_hairpin
+ implicit real*8 (a-h,o-z)
+ include 'DIMENSIONS'
+ include 'COMMON.IOUNITS'
+ include 'COMMON.CSA'
+ include 'COMMON.BANK'
+ include 'COMMON.CHAIN'
+ include 'COMMON.GEO'
+ include 'COMMON.VAR'
+ include 'COMMON.HAIRPIN'
+
+c write (iout,*) 'Entering GEN_HAIRPIN'
+ do iters=1,nseed
+ i1=is(iters)
+ do k=1,numch
+ do j=2,nres-1
+ theta(j+1)=bvar(1,j,k,i1)
+ phi(j+2)=bvar(2,j,k,i1)
+ alph(j)=bvar(3,j,k,i1)
+ omeg(j)=bvar(4,j,k,i1)
+ enddo
+ enddo
+ call chainbuild
+ call hairpin(.false.,nharp_seed(iters),iharp_seed(1,1,iters))
+ enddo
+
+ nharp_tot=0
+ do iters=1,nseed
+ nharp_tot=nharp_tot+nharp_seed(iters)
+ nharp_use(iters)=4*nharp_seed(iters)
+ do j=1,nharp_seed(iters)
+ iharp_use(0,j,iters)=4
+ do k=1,4
+ iharp_use(k,j,iters)=0
+ enddo
+ enddo
+ enddo
+
+ write (iout,*) 'GEN_HAIRPIN: nharp_tot',nharp_tot
+cdd do i=1,nseed
+cdd write (iout,*) 'seed',i
+cdd write (iout,*) 'nharp_seed',nharp_seed(i),
+cdd & ' nharp_use',nharp_use(i)
+cd write (iout,*) 'iharp_seed, iharp_use'
+cd do j=1,nharp_seed(i)
+cd write (iout,'(7i3)') iharp_seed(1,j,i),iharp_seed(2,j,i),
+cd & (iharp_use(k,j,i),k=0,4)
+cd enddo
+cdd enddo
+ return
+ end
+
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ccccccccccccccccccccccccccccccccccccccccccccccccc
+ subroutine select_frag(nn,nh,nl,ns,nb,i_csa)
+ implicit real*8 (a-h,o-z)
+ include 'DIMENSIONS'
+ include 'COMMON.IOUNITS'
+ include 'COMMON.CSA'
+ include 'COMMON.BANK'
+ include 'COMMON.CHAIN'
+ include 'COMMON.GEO'
+ include 'COMMON.VAR'
+ include 'COMMON.HAIRPIN'
+ include 'COMMON.DISTFIT'
+ character*50 linia
+ integer isec(maxres)
+
+
+ nn=0
+ nh=0
+ nl=0
+ ns=0
+ nb=0
+cd write (iout,*) 'Entering select_frag'
+ do i1=1,nbank
+ do i=1,nres
+ isec(i)=0
+ enddo
+ do k=1,numch
+ do j=2,nres-1
+ theta(j+1)=bvar(1,j,k,i1)
+ phi(j+2)=bvar(2,j,k,i1)
+ alph(j)=bvar(3,j,k,i1)
+ omeg(j)=bvar(4,j,k,i1)
+ enddo
+ enddo
+ call chainbuild
+cd write (iout,*) ' -- ',i1,' -- '
+ call secondary2(.false.)
+c
+c bvar_frag nn==pair of nonlocal strands in beta sheet (loop>4)
+c strands > 4 residues; used by N7 and N16
+c
+ do j=1,nbfrag
+c
+Ctest 09/12/02 bfrag(2,j)-bfrag(1,j).gt.3
+c
+ do i=bfrag(1,j),bfrag(2,j)
+ isec(i)=1
+ enddo
+ do i=bfrag(4,j),bfrag(3,j),sign(1,bfrag(3,j)-bfrag(4,j))
+ isec(i)=1
+ enddo
+
+ if ( (bfrag(3,j).lt.bfrag(4,j) .or.
+ & bfrag(4,j)-bfrag(2,j).gt.4) .and.
+ & bfrag(2,j)-bfrag(1,j).gt.4 ) then
+ nn=nn+1
+
+
+ if (bfrag(3,j).lt.bfrag(4,j)) then
+ write(linia,'(a6,i3,a1,i3,a1,i3,a1,i3)')
+ & "select",bfrag(1,j)-1,"-",bfrag(2,j)-1
+ & ,",",bfrag(3,j)-1,"-",bfrag(4,j)-1
+ else
+ write(linia,'(a6,i3,a1,i3,a1,i3,a1,i3)')
+ & "select",bfrag(1,j)-1,"-",bfrag(2,j)-1
+ & ,",",bfrag(4,j)-1,"-",bfrag(3,j)-1
+
+ endif
+cd call write_pdb(i_csa*1000+nn+nh,linia,0d0)
+
+ bvar_frag(nn,1)=i1
+ bvar_frag(nn,2)=4
+ do i=1,4
+ bvar_frag(nn,i+2)=bfrag(i,j)
+ enddo
+ endif
+ enddo
+
+c
+c hvar_frag nh==helices; used by N8 and N9
+c
+ do j=1,nhfrag
+
+ do i=hfrag(1,j),hfrag(2,j)
+ isec(i)=2
+ enddo
+
+ if ( hfrag(2,j)-hfrag(1,j).gt.4 ) then
+ nh=nh+1
+
+cd write(linia,'(a6,i3,a1,i3)')
+cd & "select",hfrag(1,j)-1,"-",hfrag(2,j)-1
+cd call write_pdb(i_csa*1000+nn+nh,linia,0d0)
+
+ hvar_frag(nh,1)=i1
+ hvar_frag(nh,2)=hfrag(1,j)
+ hvar_frag(nh,3)=hfrag(2,j)
+ endif
+ enddo
+
+
+cv write(iout,'(i4,1pe12.4,1x,1000i1)')
+cv & i1,bene(i1),(isec(i),i=1,nres)
+cv write(linia,'(i4,1x,1000i1)')
+cv & i1,(isec(i),i=1,nres)
+cv call write_pdb(i_csa*1000+i1,linia,bene(i1))
+c
+c lvar_frag nl==loops; used by N14
+c
+ i=1
+ nl1=nl
+ do while (i.lt.nres)
+ if (isec(i).eq.0) then
+ nl=nl+1
+ lvar_frag(nl,1)=i1
+ lvar_frag(nl,2)=i
+ i=i+1
+ do while (isec(i).eq.0.and.i.le.nres)
+ i=i+1
+ enddo
+ lvar_frag(nl,3)=i-1
+ if (lvar_frag(nl,3)-lvar_frag(nl,2).lt.1) nl=nl-1
+ endif
+ i=i+1
+ enddo
+cd write(iout,'(4i5)') (i,(lvar_frag(i,ii),ii=1,3),i=nl1+1,nl)
+
+c
+c svar_frag ns==an secondary structure element; used by N15
+c
+ i=1
+ ns1=ns
+ do while (i.lt.nres)
+ if (isec(i).gt.0) then
+ ns=ns+1
+ svar_frag(ns,1)=i1
+ svar_frag(ns,2)=i
+ i=i+1
+ do while (isec(i).gt.0.and.isec(i-1).eq.isec(i)
+ & .and.i.le.nres)
+ i=i+1
+ enddo
+ svar_frag(ns,3)=i-1
+ if (svar_frag(ns,3)-svar_frag(ns,2).lt.1) ns=ns-1
+ endif
+ if (isec(i).eq.0) i=i+1
+ enddo
+cd write(iout,'(4i5)') (i,(svar_frag(i,ii),ii=1,3),i=ns1+1,ns)
+
+c
+c avar_frag nb==any pair of beta strands; used by N17
+c
+ do j=1,nbfrag
+ nb=nb+1
+ avar_frag(nb,1)=i1
+ do i=1,4
+ avar_frag(nb,i+1)=bfrag(i,j)
+ enddo
+ enddo
+
+ enddo
+
+ return
+ end