--- mdread.f 2006-04-03 16:35:55.000000000 -0700 +++ mdread.f 2006-06-25 16:42:14.000000000 -0700 @@ -1231,6 +1231,22 @@ x(l175-1+i) = -0.16038d0 x(l180-1+i) = -0.00015512d0 x(l185-1+i) = 0.00016453d0 + else if (atype(1:1) == 'F' .or. atype(1:1) == 'f') then + write(6,*) 'GBSA parameters not available for atom ', atype, ' using oxygen parameters.' + x(l165-1+i) = 1.60d0 + 1.4d0 + x(l170-1+i) = 0.77914d0 + x(l175-1+i) = -0.25262d0 + x(l180-1+i) = -0.0016056d0 + x(l185-1+i) = 0.00035071d0 + else if (atype == 'Cl' .or. atype == 'cl' .or. & + atype == 'Br' .or. atype == 'br' .or. & + atype(1:1) == 'I' .or. atype(1:1) == 'i' ) then + write(6,*) 'GBSA parameters not available for atom ', atype, ' using sulphur parameters.' + x(l165-1+i) = 1.90d0 + 1.4d0 + x(l170-1+i) = 0.54581d0 + x(l175-1+i) = -0.19477d0 + x(l180-1+i) = -0.0012873d0 + x(l185-1+i) = 0.00029247d0 else write( 0,* ) 'bad atom type: ',atype call mexit( 6,1 ) @@ -2009,24 +2025,24 @@ x(l60),x(lcrdr),konst,dotgtmd,belly,idecomp,5,.true.) end if - if( ibelly > 0 .and. igb > 0 ) then - - ! ---here, the only allowable belly has just the first - ! NATBEL atoms in the moving part. Check to see that this - ! requirement is satisfied: - - do i=natbel+1,natom - if( ix(ibellygp+i-1) /= 0 ) then - write(6,*) 'When igb>0, the moving part must be at the' - write(6,*) ' start of the molecule. This does not seem' - write(6,*) ' to be the case here.' - write(6,*) 'natbel,i,igroup(i) = ' & - ,natbel,i,ix(ibellygp+i-1) - call mexit(6,1) - end if - end do - end if - +! if( ibelly > 0 .and. igb > 0 ) then +! +! ! ---here, the only allowable belly has just the first +! ! NATBEL atoms in the moving part. Check to see that this +! ! requirement is satisfied: +! +! do i=natbel+1,natom +! if( ix(ibellygp+i-1) /= 0 ) then +! write(6,*) 'When igb>0, the moving part must be at the' +! write(6,*) ' start of the molecule. This does not seem' +! write(6,*) ' to be the case here.' +! write(6,*) 'natbel,i,igroup(i) = ' & +! ,natbel,i,ix(ibellygp+i-1) +! call mexit(6,1) +! end if +! end do +! end if + write (6,'(''| WARNING: This version of AMBER has been customized by Ross Walker and Mike Crowley. It is unsupported and you use it at your own risk'')') ! ----- CALCULATE THE SQUARE OF THE BOND PARAMETERS FOR SHAKE ! THE PARAMETERS ARE PUT SEQUENTIALLY IN THE ARRAY CONP ----- --- egb.f 2006-04-03 16:35:54.000000000 -0700 +++ egb.f 2006-06-25 15:26:19.000000000 -0700 @@ -104,7 +104,7 @@ !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ !+ handles generalized Born functionality, plus reg. nonbon, plus surface area subroutine egb(x,f,rborn,fs,reff,onereff,charge,iac,ico,numex, & - natex,dcharge,cut,ntypes,natom,natbel, & + natex,dcharge,cut,ntypes,natom,natbel,gbbellymask, & epol,eelt,evdw,esurf,dvdl,vdwrad,ineighbor,p1,p2,p3,p4, & rbmax,rbmin,rbave,rbfluct,ncopy ) @@ -238,6 +238,7 @@ integer iac,ico,numex,natex,ntypes,natom,natbel,ncopy integer i,j,k,kk1,maxi,num_j_vals,jjj,count2_fin,num_k_vals, & iexcl,iaci,jexcl,jexcl_last,jjv,ic,kk + integer gbbellymask(natom) integer j3 integer loop_count #ifdef MPI @@ -425,7 +426,7 @@ #endif maxi = natom - if(natbel > 0) maxi = natbel +! if(natbel > 0) maxi = natbel !-------------------------------------------------------------------------- ! @@ -452,9 +453,6 @@ nnbips = 0 call timer_start(TIME_GBFRC) - - ! Note: this code assumes that the belly atoms are the first natbel - ! atoms...this is checked in mdread. #ifdef MPI do i=mpistart,maxi,numtasks @@ -462,7 +460,19 @@ do i=1,maxi #endif - + !If belly skip + if (natbel > 0) then + if (gbbellymask(i) == 0) then +#ifdef MPI + do k=i,(min(i+numtasks-1,natom)) + iexcl = iexcl + numex(k) + end do +#else + iexcl = iexcl + numex(i) +#endif + cycle + end if + end if #ifdef PIMD lestmp = nlesty*(lestyp(i)-1) #endif @@ -925,7 +935,6 @@ !we can use the cached values. rinv = vectmp5(k) !1/rij r2inv = rinv*rinv - if( doeel ) then #ifdef LES eel = intdieli*qiqj*rinv*lesscalefac(k) @@ -1143,6 +1152,10 @@ #else do i=1,maxi #endif + !If belly skip + if (natbel > 0) then + if (gbbellymask(i) == 0) cycle + end if f_xi = zero f_yi = zero @@ -1731,6 +1744,10 @@ #else do j=1,maxi !1 to natom #endif + !If belly skip + if (natbel > 0) then + if (gbbellymask(i) == 0) cycle + end if !Do all atoms that are not excluded and !are within the cutoff for this i. Skip other !MM interactions that are less than i to avoid double --- force.f 2006-04-03 16:35:55.000000000 -0700 +++ force.f 2006-06-24 14:21:20.000000000 -0700 @@ -754,7 +754,7 @@ call timer_start(TIME_EGB) call egb( x,f,rborn,fs,reff,onereff,xx(l15),ix(i04),ix(i06), & ix(i08),ix(i10),xx(l190), & - cut,ntypes,natom,natbel,epol,eelt,evdw, & + cut,ntypes,natom,natbel,ix(ibellygp),epol,eelt,evdw, & esurf,dvdl,xx(l165),ix(i82),xx(l170),xx(l175),xx(l180), & xx(l185), xx(l186),xx(l187),xx(l188),xx(l189),ncopy ) --- findmask.f 2006-04-03 16:35:55.000000000 -0700 +++ findmask.f 2006-06-25 15:47:53.000000000 -0700 @@ -132,7 +132,7 @@ _REAL_ crd(*) integer i - character(80) infix, postfix + character(800) infix, postfix logical error ! check for null input: @@ -176,7 +176,7 @@ ! expressions, such as [@CA], [:LYS,ARG], [:1-10@CB] implicit none - integer, parameter :: BUFLEN=80 + integer, parameter :: BUFLEN=800 character(*) input, infix character(BUFLEN) buffer character(1) symbol @@ -260,7 +260,7 @@ character(1) symbol, topop ! maxstack=40 should be big enough for even very complex expressions ! this only takes 40 chars, so memory is no issue here - integer, parameter :: maxstack=40 + integer, parameter :: maxstack=800 character(1) stack(maxstack) integer top, i, p, inplen logical error, done @@ -397,7 +397,7 @@ character(len=4) igraph(*), isymbl(*), lbres(*) _REAL_ crd(*) character(*) postfix - integer, parameter :: maxstack=20 + integer, parameter :: maxstack=800 integer i, j, p, inplen, top, astat, nselatom integer prnlev @@ -795,7 +795,7 @@ character(*) numlist integer nres, ipres(*), mask(*) - character(80) buffer + character(800) buffer character(1) symbol integer p, i, inplen, res1, res2, ios logical dash @@ -901,7 +901,7 @@ character(*) numlist integer natom, mask(*) - character(80) buffer + character(800) buffer character(1) symbol integer p, i, inplen, at1, at2, ios logical dash