X-Git-Url: http://mmka.chem.univ.gda.pl/gitweb/?a=blobdiff_plain;f=source%2Funres%2Fsrc_MD-M%2Fenergy_p_new_barrier.F;h=23aafae824958a2e51b6659a3d3cfed63c058630;hb=1e3c2bda475e5d4031b8dab868bb8bf379a9e388;hp=6d6e18cd70e7819cd1c1e1b1b84c2a73fe9c66d6;hpb=faea29f012ec8e63652b824ecdd37305fdf75ed8;p=unres.git diff --git a/source/unres/src_MD-M/energy_p_new_barrier.F b/source/unres/src_MD-M/energy_p_new_barrier.F index 6d6e18c..23aafae 100644 --- a/source/unres/src_MD-M/energy_p_new_barrier.F +++ b/source/unres/src_MD-M/energy_p_new_barrier.F @@ -152,9 +152,9 @@ c print *,"Processor",myrank," left VEC_AND_DERIV" eello_turn4=0.0d0 endif else -c write (iout,*) "Soft-spheer ELEC potential" - call eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3, - & eello_turn4) + write (iout,*) "Soft-spheer ELEC potential" +c call eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3, +c & eello_turn4) endif c print *,"Processor",myrank," computed UELEC" C @@ -711,7 +711,7 @@ c enddo do i=1,4*nres glocbuf(i)=gloc(i,icg) enddo -#define DEBUG +c#define DEBUG #ifdef DEBUG write (iout,*) "gloc_sc before reduce" do i=1,nres @@ -720,7 +720,7 @@ c enddo enddo enddo #endif -#undef DEBUG +c#undef DEBUG do i=1,nres do j=1,3 gloc_scbuf(j,i)=gloc_sc(j,i,icg) @@ -740,7 +740,7 @@ c enddo call MPI_Reduce(gloc_scbuf(1,1),gloc_sc(1,1,icg),3*nres, & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR) time_reduce=time_reduce+MPI_Wtime()-time00 -#define DEBUG +c#define DEBUG #ifdef DEBUG write (iout,*) "gloc_sc after reduce" do i=1,nres @@ -749,7 +749,7 @@ c enddo enddo enddo #endif -#undef DEBUG +c#undef DEBUG #ifdef DEBUG write (iout,*) "gloc after reduce" do i=1,4*nres @@ -1425,9 +1425,9 @@ c if (icall.eq.0) lprn=.false. ind=0 C the loop over all 27 posible neigbours (for xshift=0,yshift=0,zshift=0 C we have the original box) - do xshift=-1,1 - do yshift=-1,1 - do zshift=-1,1 +C do xshift=-1,1 +C do yshift=-1,1 +C do zshift=-1,1 do i=iatsc_s,iatsc_e itypi=iabs(itype(i)) if (itypi.eq.ntyp1) cycle @@ -1436,30 +1436,39 @@ C we have the original box) yi=c(2,nres+i) zi=c(3,nres+i) C Return atom into box, boxxsize is size of box in x dimension - 134 continue - if (xi.gt.((xshift+0.5d0)*boxxsize)) xi=xi-boxxsize - if (xi.lt.((xshift-0.5d0)*boxxsize)) xi=xi+boxxsize +c 134 continue +c if (xi.gt.((xshift+0.5d0)*boxxsize)) xi=xi-boxxsize +c if (xi.lt.((xshift-0.5d0)*boxxsize)) xi=xi+boxxsize C Condition for being inside the proper box - if ((xi.gt.((xshift+0.5d0)*boxxsize)).or. - & (xi.lt.((xshift-0.5d0)*boxxsize))) then - go to 134 - endif - 135 continue - if (yi.gt.((yshift+0.5d0)*boxysize)) yi=yi-boxysize - if (yi.lt.((yshift-0.5d0)*boxysize)) yi=yi+boxysize +c if ((xi.gt.((xshift+0.5d0)*boxxsize)).or. +c & (xi.lt.((xshift-0.5d0)*boxxsize))) then +c go to 134 +c endif +c 135 continue +c if (yi.gt.((yshift+0.5d0)*boxysize)) yi=yi-boxysize +c if (yi.lt.((yshift-0.5d0)*boxysize)) yi=yi+boxysize C Condition for being inside the proper box - if ((yi.gt.((yshift+0.5d0)*boxysize)).or. - & (yi.lt.((yshift-0.5d0)*boxysize))) then - go to 135 - endif - 136 continue - if (zi.gt.((zshift+0.5d0)*boxzsize)) zi=zi-boxzsize - if (zi.lt.((zshift-0.5d0)*boxzsize)) zi=zi+boxzsize +c if ((yi.gt.((yshift+0.5d0)*boxysize)).or. +c & (yi.lt.((yshift-0.5d0)*boxysize))) then +c go to 135 +c endif +c 136 continue +c if (zi.gt.((zshift+0.5d0)*boxzsize)) zi=zi-boxzsize +c if (zi.lt.((zshift-0.5d0)*boxzsize)) zi=zi+boxzsize C Condition for being inside the proper box - if ((zi.gt.((zshift+0.5d0)*boxzsize)).or. - & (zi.lt.((zshift-0.5d0)*boxzsize))) then - go to 136 - endif +c if ((zi.gt.((zshift+0.5d0)*boxzsize)).or. +c & (zi.lt.((zshift-0.5d0)*boxzsize))) then +c go to 136 +c endif + xi=mod(xi,boxxsize) + if (xi.lt.0) xi=xi+boxxsize + yi=mod(yi,boxysize) + if (yi.lt.0) yi=yi+boxysize + zi=mod(zi,boxzsize) + if (zi.lt.0) zi=zi+boxzsize +C xi=xi+xshift*boxxsize +C yi=yi+yshift*boxysize +C zi=zi+zshift*boxzsize dxi=dc_norm(1,nres+i) dyi=dc_norm(2,nres+i) @@ -1505,37 +1514,73 @@ c alf12=0.0D0 yj=c(2,nres+j) zj=c(3,nres+j) C Return atom J into box the original box - 137 continue - if (xj.gt.((0.5d0)*boxxsize)) xj=xj-boxxsize - if (xj.lt.((-0.5d0)*boxxsize)) xj=xj+boxxsize +c 137 continue +c if (xj.gt.((0.5d0)*boxxsize)) xj=xj-boxxsize +c if (xj.lt.((-0.5d0)*boxxsize)) xj=xj+boxxsize C Condition for being inside the proper box - if ((xj.gt.((0.5d0)*boxxsize)).or. - & (xj.lt.((-0.5d0)*boxxsize))) then - go to 137 - endif - 138 continue - if (yj.gt.((0.5d0)*boxysize)) yj=yj-boxysize - if (yj.lt.((-0.5d0)*boxysize)) yj=yj+boxysize +c if ((xj.gt.((0.5d0)*boxxsize)).or. +c & (xj.lt.((-0.5d0)*boxxsize))) then +c go to 137 +c endif +c 138 continue +c if (yj.gt.((0.5d0)*boxysize)) yj=yj-boxysize +c if (yj.lt.((-0.5d0)*boxysize)) yj=yj+boxysize C Condition for being inside the proper box - if ((yj.gt.((0.5d0)*boxysize)).or. - & (yj.lt.((-0.5d0)*boxysize))) then - go to 138 - endif - 139 continue - if (zj.gt.((0.5d0)*boxzsize)) zj=zj-boxzsize - if (zj.lt.((-0.5d0)*boxzsize)) zj=zj+boxzsize +c if ((yj.gt.((0.5d0)*boxysize)).or. +c & (yj.lt.((-0.5d0)*boxysize))) then +c go to 138 +c endif +c 139 continue +c if (zj.gt.((0.5d0)*boxzsize)) zj=zj-boxzsize +c if (zj.lt.((-0.5d0)*boxzsize)) zj=zj+boxzsize C Condition for being inside the proper box - if ((zj.gt.((0.5d0)*boxzsize)).or. - & (zj.lt.((-0.5d0)*boxzsize))) then - go to 139 - endif - +c if ((zj.gt.((0.5d0)*boxzsize)).or. +c & (zj.lt.((-0.5d0)*boxzsize))) then +c go to 139 +c endif + xj=mod(xj,boxxsize) + if (xj.lt.0) xj=xj+boxxsize + yj=mod(yj,boxysize) + if (yj.lt.0) yj=yj+boxysize + zj=mod(zj,boxzsize) + if (zj.lt.0) zj=zj+boxzsize + dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2 + xj_safe=xj + yj_safe=yj + zj_safe=zj + subchap=0 + do xshift=-1,1 + do yshift=-1,1 + do zshift=-1,1 + xj=xj_safe+xshift*boxxsize + yj=yj_safe+yshift*boxysize + zj=zj_safe+zshift*boxzsize + dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2 + if(dist_temp.lt.dist_init) then + dist_init=dist_temp + xj_temp=xj + yj_temp=yj + zj_temp=zj + subchap=1 + endif + enddo + enddo + enddo + if (subchap.eq.1) then + xj=xj_temp-xi + yj=yj_temp-yi + zj=zj_temp-zi + else + xj=xj_safe-xi + yj=yj_safe-yi + zj=zj_safe-zi + endif dxj=dc_norm(1,nres+j) dyj=dc_norm(2,nres+j) dzj=dc_norm(3,nres+j) - xj=xj-xi - yj=yj-yi - zj=zj-zi +C xj=xj-xi +C yj=yj-yi +C zj=zj-zi c write (iout,*) "dcnorj",dxi*dxi+dyi*dyi+dzi*dzi c write (iout,*) "j",j," dc_norm", c & dc_norm(1,nres+j),dc_norm(2,nres+j),dc_norm(3,nres+j) @@ -1609,9 +1654,9 @@ C Calculate angular part of the gradient. enddo ! j enddo ! iint enddo ! i - enddo ! zshift - enddo ! yshift - enddo ! xshift +C enddo ! zshift +C enddo ! yshift +C enddo ! xshift c write (iout,*) "Number of loop steps in EGB:",ind cccc energy_dec=.false. return @@ -2884,30 +2929,36 @@ C 14/01/2014 TURN3,TUNR4 does no go under periodic boundry condition ymedi=c(2,i)+0.5d0*dyi zmedi=c(3,i)+0.5d0*dzi C Return atom into box, boxxsize is size of box in x dimension - 184 continue - if (xmedi.gt.((0.5d0)*boxxsize)) xmedi=xmedi-boxxsize - if (xmedi.lt.((-0.5d0)*boxxsize)) xmedi=xmedi+boxxsize -C Condition for being inside the proper box - if ((xmedi.gt.((0.5d0)*boxxsize)).or. - & (xmedi.lt.((-0.5d0)*boxxsize))) then - go to 184 - endif - 185 continue - if (ymedi.gt.((0.5d0)*boxysize)) ymedi=ymedi-boxysize - if (ymedi.lt.((-0.5d0)*boxysize)) ymedi=ymedi+boxysize -C Condition for being inside the proper box - if ((ymedi.gt.((0.5d0)*boxysize)).or. - & (ymedi.lt.((-0.5d0)*boxysize))) then - go to 185 - endif - 186 continue - if (zmedi.gt.((0.5d0)*boxzsize)) zmedi=zmedi-boxzsize - if (zmedi.lt.((-0.5d0)*boxzsize)) zmedi=zmedi+boxzsize +c 184 continue +c if (xmedi.gt.((0.5d0)*boxxsize)) xmedi=xmedi-boxxsize +c if (xmedi.lt.((-0.5d0)*boxxsize)) xmedi=xmedi+boxxsize C Condition for being inside the proper box - if ((zmedi.gt.((0.5d0)*boxzsize)).or. - & (zmedi.lt.((-0.5d0)*boxzsize))) then - go to 186 - endif +c if ((xmedi.gt.((0.5d0)*boxxsize)).or. +c & (xmedi.lt.((-0.5d0)*boxxsize))) then +c go to 184 +c endif +c 185 continue +c if (ymedi.gt.((0.5d0)*boxysize)) ymedi=ymedi-boxysize +c if (ymedi.lt.((-0.5d0)*boxysize)) ymedi=ymedi+boxysize +cC Condition for being inside the proper box +c if ((ymedi.gt.((0.5d0)*boxysize)).or. +c & (ymedi.lt.((-0.5d0)*boxysize))) then +c go to 185 +c endif +c 186 continue +c if (zmedi.gt.((0.5d0)*boxzsize)) zmedi=zmedi-boxzsize +c if (zmedi.lt.((-0.5d0)*boxzsize)) zmedi=zmedi+boxzsize +cC Condition for being inside the proper box +c if ((zmedi.gt.((0.5d0)*boxzsize)).or. +c & (zmedi.lt.((-0.5d0)*boxzsize))) then +c go to 186 +c endif + xmedi=mod(xmedi,boxxsize) + if (xmedi.lt.0) xmedi=xmedi+boxxsize + ymedi=mod(ymedi,boxysize) + if (ymedi.lt.0) ymedi=ymedi+boxysize + zmedi=mod(zmedi,boxzsize) + if (zmedi.lt.0) zmedi=zmedi+boxzsize num_conti=0 call eelecij(i,i+2,ees,evdw1,eel_loc) if (wturn3.gt.0.0d0) call eturn3(i,eello_turn3) @@ -2931,30 +2982,36 @@ C Condition for being inside the proper box ymedi=c(2,i)+0.5d0*dyi zmedi=c(3,i)+0.5d0*dzi C Return atom into box, boxxsize is size of box in x dimension - 194 continue - if (xmedi.gt.((0.5d0)*boxxsize)) xmedi=xmedi-boxxsize - if (xmedi.lt.((-0.5d0)*boxxsize)) xmedi=xmedi+boxxsize +c 194 continue +c if (xmedi.gt.((0.5d0)*boxxsize)) xmedi=xmedi-boxxsize +c if (xmedi.lt.((-0.5d0)*boxxsize)) xmedi=xmedi+boxxsize C Condition for being inside the proper box - if ((xmedi.gt.((0.5d0)*boxxsize)).or. - & (xmedi.lt.((-0.5d0)*boxxsize))) then - go to 194 - endif - 195 continue - if (ymedi.gt.((0.5d0)*boxysize)) ymedi=ymedi-boxysize - if (ymedi.lt.((-0.5d0)*boxysize)) ymedi=ymedi+boxysize +c if ((xmedi.gt.((0.5d0)*boxxsize)).or. +c & (xmedi.lt.((-0.5d0)*boxxsize))) then +c go to 194 +c endif +c 195 continue +c if (ymedi.gt.((0.5d0)*boxysize)) ymedi=ymedi-boxysize +c if (ymedi.lt.((-0.5d0)*boxysize)) ymedi=ymedi+boxysize C Condition for being inside the proper box - if ((ymedi.gt.((0.5d0)*boxysize)).or. - & (ymedi.lt.((-0.5d0)*boxysize))) then - go to 195 - endif - 196 continue - if (zmedi.gt.((0.5d0)*boxzsize)) zmedi=zmedi-boxzsize - if (zmedi.lt.((-0.5d0)*boxzsize)) zmedi=zmedi+boxzsize +c if ((ymedi.gt.((0.5d0)*boxysize)).or. +c & (ymedi.lt.((-0.5d0)*boxysize))) then +c go to 195 +c endif +c 196 continue +c if (zmedi.gt.((0.5d0)*boxzsize)) zmedi=zmedi-boxzsize +c if (zmedi.lt.((-0.5d0)*boxzsize)) zmedi=zmedi+boxzsize C Condition for being inside the proper box - if ((zmedi.gt.((0.5d0)*boxzsize)).or. - & (zmedi.lt.((-0.5d0)*boxzsize))) then - go to 196 - endif +c if ((zmedi.gt.((0.5d0)*boxzsize)).or. +c & (zmedi.lt.((-0.5d0)*boxzsize))) then +c go to 196 +c endif + xmedi=mod(xmedi,boxxsize) + if (xmedi.lt.0) xmedi=xmedi+boxxsize + ymedi=mod(ymedi,boxysize) + if (ymedi.lt.0) ymedi=ymedi+boxysize + zmedi=mod(zmedi,boxzsize) + if (zmedi.lt.0) zmedi=zmedi+boxzsize num_conti=num_cont_hb(i) call eelecij(i,i+3,ees,evdw1,eel_loc) @@ -2963,9 +3020,9 @@ C Condition for being inside the proper box num_cont_hb(i)=num_conti enddo ! i C Loop over all neighbouring boxes - do xshift=-1,1 - do yshift=-1,1 - do zshift=-1,1 +C do xshift=-1,1 +C do yshift=-1,1 +C do zshift=-1,1 c c Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3 c @@ -2983,31 +3040,41 @@ c xmedi=c(1,i)+0.5d0*dxi ymedi=c(2,i)+0.5d0*dyi zmedi=c(3,i)+0.5d0*dzi -C Return atom into box, boxxsize is size of box in x dimension - 164 continue - if (xmedi.gt.((xshift+0.5d0)*boxxsize)) xmedi=xmedi-boxxsize - if (xmedi.lt.((xshift-0.5d0)*boxxsize)) xmedi=xmedi+boxxsize -C Condition for being inside the proper box - if ((xmedi.gt.((xshift+0.5d0)*boxxsize)).or. - & (xmedi.lt.((xshift-0.5d0)*boxxsize))) then - go to 164 - endif - 165 continue - if (ymedi.gt.((yshift+0.5d0)*boxysize)) ymedi=ymedi-boxysize - if (ymedi.lt.((yshift-0.5d0)*boxysize)) ymedi=ymedi+boxysize + xmedi=mod(xmedi,boxxsize) + if (xmedi.lt.0) xmedi=xmedi+boxxsize + ymedi=mod(ymedi,boxysize) + if (ymedi.lt.0) ymedi=ymedi+boxysize + zmedi=mod(zmedi,boxzsize) + if (zmedi.lt.0) zmedi=zmedi+boxzsize +C xmedi=xmedi+xshift*boxxsize +C ymedi=ymedi+yshift*boxysize +C zmedi=zmedi+zshift*boxzsize + +C Return tom into box, boxxsize is size of box in x dimension +c 164 continue +c if (xmedi.gt.((xshift+0.5d0)*boxxsize)) xmedi=xmedi-boxxsize +c if (xmedi.lt.((xshift-0.5d0)*boxxsize)) xmedi=xmedi+boxxsize C Condition for being inside the proper box - if ((ymedi.gt.((yshift+0.5d0)*boxysize)).or. - & (ymedi.lt.((yshift-0.5d0)*boxysize))) then - go to 165 - endif - 166 continue - if (zmedi.gt.((zshift+0.5d0)*boxzsize)) zmedi=zmedi-boxzsize - if (zmedi.lt.((zshift-0.5d0)*boxzsize)) zmedi=zmedi+boxzsize +c if ((xmedi.gt.((xshift+0.5d0)*boxxsize)).or. +c & (xmedi.lt.((xshift-0.5d0)*boxxsize))) then +c go to 164 +c endif +c 165 continue +c if (ymedi.gt.((yshift+0.5d0)*boxysize)) ymedi=ymedi-boxysize +c if (ymedi.lt.((yshift-0.5d0)*boxysize)) ymedi=ymedi+boxysize C Condition for being inside the proper box - if ((zmedi.gt.((zshift+0.5d0)*boxzsize)).or. - & (zmedi.lt.((zshift-0.5d0)*boxzsize))) then - go to 166 - endif +c if ((ymedi.gt.((yshift+0.5d0)*boxysize)).or. +c & (ymedi.lt.((yshift-0.5d0)*boxysize))) then +c go to 165 +c endif +c 166 continue +c if (zmedi.gt.((zshift+0.5d0)*boxzsize)) zmedi=zmedi-boxzsize +c if (zmedi.lt.((zshift-0.5d0)*boxzsize)) zmedi=zmedi+boxzsize +cC Condition for being inside the proper box +c if ((zmedi.gt.((zshift+0.5d0)*boxzsize)).or. +c & (zmedi.lt.((zshift-0.5d0)*boxzsize))) then +c go to 166 +c endif c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i) num_conti=num_cont_hb(i) @@ -3021,9 +3088,9 @@ c write (iout,*) i,j,itype(i),itype(j) enddo ! j num_cont_hb(i)=num_conti enddo ! i - enddo ! zshift - enddo ! yshift - enddo ! xshift +C enddo ! zshift +C enddo ! yshift +C enddo ! xshift c write (iout,*) "Number of loop steps in EELEC:",ind cd do i=1,nres @@ -3096,35 +3163,72 @@ C zj=c(3,j)+0.5D0*dzj-zmedi xj=c(1,j)+0.5D0*dxj yj=c(2,j)+0.5D0*dyj zj=c(3,j)+0.5D0*dzj + xj=mod(xj,boxxsize) + if (xj.lt.0) xj=xj+boxxsize + yj=mod(yj,boxysize) + if (yj.lt.0) yj=yj+boxysize + zj=mod(zj,boxzsize) + if (zj.lt.0) zj=zj+boxzsize + dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2 + xj_safe=xj + yj_safe=yj + zj_safe=zj + isubchap=0 + do xshift=-1,1 + do yshift=-1,1 + do zshift=-1,1 + xj=xj_safe+xshift*boxxsize + yj=yj_safe+yshift*boxysize + zj=zj_safe+zshift*boxzsize + dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2 + if(dist_temp.lt.dist_init) then + dist_init=dist_temp + xj_temp=xj + yj_temp=yj + zj_temp=zj + isubchap=1 + endif + enddo + enddo + enddo + if (isubchap.eq.1) then + xj=xj_temp-xmedi + yj=yj_temp-ymedi + zj=zj_temp-zmedi + else + xj=xj_safe-xmedi + yj=yj_safe-ymedi + zj=zj_safe-zmedi + endif C if ((i+3).lt.j) then !this condition keeps for turn3 and turn4 not subject to PBC - 174 continue - if (xj.gt.((0.5d0)*boxxsize)) xj=xj-boxxsize - if (xj.lt.((-0.5d0)*boxxsize)) xj=xj+boxxsize +c 174 continue +c if (xj.gt.((0.5d0)*boxxsize)) xj=xj-boxxsize +c if (xj.lt.((-0.5d0)*boxxsize)) xj=xj+boxxsize C Condition for being inside the proper box - if ((xj.gt.((0.5d0)*boxxsize)).or. - & (xj.lt.((-0.5d0)*boxxsize))) then - go to 174 - endif - 175 continue - if (yj.gt.((0.5d0)*boxysize)) yj=yj-boxysize - if (yj.lt.((-0.5d0)*boxysize)) yj=yj+boxysize +c if ((xj.gt.((0.5d0)*boxxsize)).or. +c & (xj.lt.((-0.5d0)*boxxsize))) then +c go to 174 +c endif +c 175 continue +c if (yj.gt.((0.5d0)*boxysize)) yj=yj-boxysize +c if (yj.lt.((-0.5d0)*boxysize)) yj=yj+boxysize C Condition for being inside the proper box - if ((yj.gt.((0.5d0)*boxysize)).or. - & (yj.lt.((-0.5d0)*boxysize))) then - go to 175 - endif - 176 continue - if (zj.gt.((0.5d0)*boxzsize)) zj=zj-boxzsize - if (zj.lt.((-0.5d0)*boxzsize)) zj=zj+boxzsize +c if ((yj.gt.((0.5d0)*boxysize)).or. +c & (yj.lt.((-0.5d0)*boxysize))) then +c go to 175 +c endif +c 176 continue +c if (zj.gt.((0.5d0)*boxzsize)) zj=zj-boxzsize +c if (zj.lt.((-0.5d0)*boxzsize)) zj=zj+boxzsize C Condition for being inside the proper box - if ((zj.gt.((0.5d0)*boxzsize)).or. - & (zj.lt.((-0.5d0)*boxzsize))) then - go to 176 - endif +c if ((zj.gt.((0.5d0)*boxzsize)).or. +c & (zj.lt.((-0.5d0)*boxzsize))) then +c go to 176 +c endif C endif !endPBC condintion - xj=xj-xmedi - yj=yj-ymedi - zj=zj-zmedi +C xj=xj-xmedi +C yj=yj-ymedi +C zj=zj-zmedi rij=xj*xj+yj*yj+zj*zj sss=sscale(sqrt(rij)) @@ -4067,9 +4171,9 @@ C r0_scp=4.5d0 cd print '(a)','Enter ESCP' cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e - do xshift=-1,1 - do yshift=-1,1 - do zshift=-1,1 +C do xshift=-1,1 +C do yshift=-1,1 +C do zshift=-1,1 do i=iatscp_s,iatscp_e if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle iteli=itel(i) @@ -4077,30 +4181,39 @@ cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e yi=0.5D0*(c(2,i)+c(2,i+1)) zi=0.5D0*(c(3,i)+c(3,i+1)) C Return atom into box, boxxsize is size of box in x dimension - 134 continue - if (xi.gt.((xshift+0.5d0)*boxxsize)) xi=xi-boxxsize - if (xi.lt.((xshift-0.5d0)*boxxsize)) xi=xi+boxxsize -C Condition for being inside the proper box - if ((xi.gt.((xshift+0.5d0)*boxxsize)).or. - & (xi.lt.((xshift-0.5d0)*boxxsize))) then - go to 134 - endif - 135 continue - if (yi.gt.((yshift+0.5d0)*boxysize)) yi=yi-boxysize - if (yi.lt.((yshift-0.5d0)*boxysize)) yi=yi+boxysize +c 134 continue +c if (xi.gt.((xshift+0.5d0)*boxxsize)) xi=xi-boxxsize +c if (xi.lt.((xshift-0.5d0)*boxxsize)) xi=xi+boxxsize C Condition for being inside the proper box - if ((yi.gt.((yshift+0.5d0)*boxysize)).or. - & (yi.lt.((yshift-0.5d0)*boxysize))) then - go to 135 - endif - 136 continue - if (zi.gt.((zshift+0.5d0)*boxzsize)) zi=zi-boxzsize - if (zi.lt.((zshift-0.5d0)*boxzsize)) zi=zi+boxzsize +c if ((xi.gt.((xshift+0.5d0)*boxxsize)).or. +c & (xi.lt.((xshift-0.5d0)*boxxsize))) then +c go to 134 +c endif +c 135 continue +c if (yi.gt.((yshift+0.5d0)*boxysize)) yi=yi-boxysize +c if (yi.lt.((yshift-0.5d0)*boxysize)) yi=yi+boxysize C Condition for being inside the proper box - if ((zi.gt.((zshift+0.5d0)*boxzsize)).or. - & (zi.lt.((zshift-0.5d0)*boxzsize))) then - go to 136 - endif +c if ((yi.gt.((yshift+0.5d0)*boxysize)).or. +c & (yi.lt.((yshift-0.5d0)*boxysize))) then +c go to 135 +c c endif +c 136 continue +c if (zi.gt.((zshift+0.5d0)*boxzsize)) zi=zi-boxzsize +c if (zi.lt.((zshift-0.5d0)*boxzsize)) zi=zi+boxzsize +cC Condition for being inside the proper box +c if ((zi.gt.((zshift+0.5d0)*boxzsize)).or. +c & (zi.lt.((zshift-0.5d0)*boxzsize))) then +c go to 136 +c endif + xi=mod(xi,boxxsize) + if (xi.lt.0) xi=xi+boxxsize + yi=mod(yi,boxysize) + if (yi.lt.0) yi=yi+boxysize + zi=mod(zi,boxzsize) + if (zi.lt.0) zi=zi+boxzsize +C xi=xi+xshift*boxxsize +C yi=yi+yshift*boxysize +C zi=zi+zshift*boxzsize do iint=1,nscp_gr(i) do j=iscpstart(i,iint),iscpend(i,iint) @@ -4114,33 +4227,70 @@ C Uncomment following three lines for Ca-p interactions xj=c(1,j) yj=c(2,j) zj=c(3,j) - 174 continue - if (xj.gt.((0.5d0)*boxxsize)) xj=xj-boxxsize - if (xj.lt.((-0.5d0)*boxxsize)) xj=xj+boxxsize +c 174 continue +c if (xj.gt.((0.5d0)*boxxsize)) xj=xj-boxxsize +c if (xj.lt.((-0.5d0)*boxxsize)) xj=xj+boxxsize C Condition for being inside the proper box - if ((xj.gt.((0.5d0)*boxxsize)).or. - & (xj.lt.((-0.5d0)*boxxsize))) then - go to 174 - endif - 175 continue - if (yj.gt.((0.5d0)*boxysize)) yj=yj-boxysize - if (yj.lt.((-0.5d0)*boxysize)) yj=yj+boxysize -C Condition for being inside the proper box - if ((yj.gt.((0.5d0)*boxysize)).or. - & (yj.lt.((-0.5d0)*boxysize))) then - go to 175 - endif - 176 continue - if (zj.gt.((0.5d0)*boxzsize)) zj=zj-boxzsize - if (zj.lt.((-0.5d0)*boxzsize)) zj=zj+boxzsize +c if ((xj.gt.((0.5d0)*boxxsize)).or. +c & (xj.lt.((-0.5d0)*boxxsize))) then +c go to 174 +c endif +c 175 continue +c if (yj.gt.((0.5d0)*boxysize)) yj=yj-boxysize +c if (yj.lt.((-0.5d0)*boxysize)) yj=yj+boxysize +cC Condition for being inside the proper box +c if ((yj.gt.((0.5d0)*boxysize)).or. +c & (yj.lt.((-0.5d0)*boxysize))) then +c go to 175 +c endif +c 176 continue +c if (zj.gt.((0.5d0)*boxzsize)) zj=zj-boxzsize +c if (zj.lt.((-0.5d0)*boxzsize)) zj=zj+boxzsize C Condition for being inside the proper box - if ((zj.gt.((0.5d0)*boxzsize)).or. - & (zj.lt.((-0.5d0)*boxzsize))) then - go to 176 - endif - xj=xj-xi - yj=yj-yi - zj=zj-zi +c if ((zj.gt.((0.5d0)*boxzsize)).or. +c & (zj.lt.((-0.5d0)*boxzsize))) then +c go to 176 + xj=mod(xj,boxxsize) + if (xj.lt.0) xj=xj+boxxsize + yj=mod(yj,boxysize) + if (yj.lt.0) yj=yj+boxysize + zj=mod(zj,boxzsize) + if (zj.lt.0) zj=zj+boxzsize + dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2 + xj_safe=xj + yj_safe=yj + zj_safe=zj + subchap=0 + do xshift=-1,1 + do yshift=-1,1 + do zshift=-1,1 + xj=xj_safe+xshift*boxxsize + yj=yj_safe+yshift*boxysize + zj=zj_safe+zshift*boxzsize + dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2 + if(dist_temp.lt.dist_init) then + dist_init=dist_temp + xj_temp=xj + yj_temp=yj + zj_temp=zj + subchap=1 + endif + enddo + enddo + enddo + if (subchap.eq.1) then + xj=xj_temp-xi + yj=yj_temp-yi + zj=zj_temp-zi + else + xj=xj_safe-xi + yj=yj_safe-yi + zj=zj_safe-zi + endif +c c endif +C xj=xj-xi +C yj=yj-yi +C zj=zj-zi rij=xj*xj+yj*yj+zj*zj r0ij=r0_scp @@ -4193,9 +4343,9 @@ cgrad enddo enddo ! iint enddo ! i - enddo !zshift - enddo !yshift - enddo !xshift +C enddo !zshift +C enddo !yshift +C enddo !xshift return end C----------------------------------------------------------------------------- @@ -4220,42 +4370,55 @@ C dimension ggg(3) evdw2=0.0D0 evdw2_14=0.0d0 +c print *,boxxsize,boxysize,boxzsize,'wymiary pudla' cd print '(a)','Enter ESCP' cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e - do xshift=-1,1 - do yshift=-1,1 - do zshift=-1,1 +C do xshift=-1,1 +C do yshift=-1,1 +C do zshift=-1,1 do i=iatscp_s,iatscp_e if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle iteli=itel(i) xi=0.5D0*(c(1,i)+c(1,i+1)) yi=0.5D0*(c(2,i)+c(2,i+1)) zi=0.5D0*(c(3,i)+c(3,i+1)) + xi=mod(xi,boxxsize) + if (xi.lt.0) xi=xi+boxxsize + yi=mod(yi,boxysize) + if (yi.lt.0) yi=yi+boxysize + zi=mod(zi,boxzsize) + if (zi.lt.0) zi=zi+boxzsize +c xi=xi+xshift*boxxsize +c yi=yi+yshift*boxysize +c zi=zi+zshift*boxzsize +c print *,xi,yi,zi,'polozenie i' C Return atom into box, boxxsize is size of box in x dimension - 134 continue - if (xi.gt.((xshift+0.5d0)*boxxsize)) xi=xi-boxxsize - if (xi.lt.((xshift-0.5d0)*boxxsize)) xi=xi+boxxsize +c 134 continue +c if (xi.gt.((xshift+0.5d0)*boxxsize)) xi=xi-boxxsize +c if (xi.lt.((xshift-0.5d0)*boxxsize)) xi=xi+boxxsize C Condition for being inside the proper box - if ((xi.gt.((xshift+0.5d0)*boxxsize)).or. - & (xi.lt.((xshift-0.5d0)*boxxsize))) then - go to 134 - endif - 135 continue - if (yi.gt.((yshift+0.5d0)*boxysize)) yi=yi-boxysize - if (yi.lt.((yshift-0.5d0)*boxysize)) yi=yi+boxysize +c if ((xi.gt.((xshift+0.5d0)*boxxsize)).or. +c & (xi.lt.((xshift-0.5d0)*boxxsize))) then +c go to 134 +c endif +c 135 continue +c print *,xi,boxxsize,"pierwszy" + +c if (yi.gt.((yshift+0.5d0)*boxysize)) yi=yi-boxysize +c if (yi.lt.((yshift-0.5d0)*boxysize)) yi=yi+boxysize C Condition for being inside the proper box - if ((yi.gt.((yshift+0.5d0)*boxysize)).or. - & (yi.lt.((yshift-0.5d0)*boxysize))) then - go to 135 - endif - 136 continue - if (zi.gt.((zshift+0.5d0)*boxzsize)) zi=zi-boxzsize - if (zi.lt.((zshift-0.5d0)*boxzsize)) zi=zi+boxzsize +c if ((yi.gt.((yshift+0.5d0)*boxysize)).or. +c & (yi.lt.((yshift-0.5d0)*boxysize))) then +c go to 135 +c endif +c 136 continue +c if (zi.gt.((zshift+0.5d0)*boxzsize)) zi=zi-boxzsize +c if (zi.lt.((zshift-0.5d0)*boxzsize)) zi=zi+boxzsize C Condition for being inside the proper box - if ((zi.gt.((zshift+0.5d0)*boxzsize)).or. - & (zi.lt.((zshift-0.5d0)*boxzsize))) then - go to 136 - endif +c if ((zi.gt.((zshift+0.5d0)*boxzsize)).or. +c & (zi.lt.((zshift-0.5d0)*boxzsize))) then +c go to 136 +c endif do iint=1,nscp_gr(i) do j=iscpstart(i,iint),iscpend(i,iint) @@ -4269,37 +4432,76 @@ C Uncomment following three lines for Ca-p interactions xj=c(1,j) yj=c(2,j) zj=c(3,j) - 174 continue - if (xj.gt.((0.5d0)*boxxsize)) xj=xj-boxxsize - if (xj.lt.((-0.5d0)*boxxsize)) xj=xj+boxxsize -C Condition for being inside the proper box - if ((xj.gt.((0.5d0)*boxxsize)).or. - & (xj.lt.((-0.5d0)*boxxsize))) then - go to 174 - endif - 175 continue - if (yj.gt.((0.5d0)*boxysize)) yj=yj-boxysize - if (yj.lt.((-0.5d0)*boxysize)) yj=yj+boxysize + xj=mod(xj,boxxsize) + if (xj.lt.0) xj=xj+boxxsize + yj=mod(yj,boxysize) + if (yj.lt.0) yj=yj+boxysize + zj=mod(zj,boxzsize) + if (zj.lt.0) zj=zj+boxzsize +c 174 continue +c if (xj.gt.((0.5d0)*boxxsize)) xj=xj-boxxsize +c if (xj.lt.((-0.5d0)*boxxsize)) xj=xj+boxxsize C Condition for being inside the proper box - if ((yj.gt.((0.5d0)*boxysize)).or. - & (yj.lt.((-0.5d0)*boxysize))) then - go to 175 - endif - 176 continue - if (zj.gt.((0.5d0)*boxzsize)) zj=zj-boxzsize - if (zj.lt.((-0.5d0)*boxzsize)) zj=zj+boxzsize +c if ((xj.gt.((0.5d0)*boxxsize)).or. +c & (xj.lt.((-0.5d0)*boxxsize))) then +c go to 174 +c endif +c 175 continue +c if (yj.gt.((0.5d0)*boxysize)) yj=yj-boxysize +c if (yj.lt.((-0.5d0)*boxysize)) yj=yj+boxysize +cC Condition for being inside the proper box +c if ((yj.gt.((0.5d0)*boxysize)).or. +c & (yj.lt.((-0.5d0)*boxysize))) then +c go to 175 +c endif +c 176 continue +c if (zj.gt.((0.5d0)*boxzsize)) zj=zj-boxzsize +c if (zj.lt.((-0.5d0)*boxzsize)) zj=zj+boxzsize C Condition for being inside the proper box - if ((zj.gt.((0.5d0)*boxzsize)).or. - & (zj.lt.((-0.5d0)*boxzsize))) then - go to 176 - endif - xj=xj-xi - yj=yj-yi - zj=zj-zi +c if ((zj.gt.((0.5d0)*boxzsize)).or. +c & (zj.lt.((-0.5d0)*boxzsize))) then +c go to 176 +c endif +CHERE IS THE CALCULATION WHICH MIRROR IMAGE IS THE CLOSEST ONE + dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2 + xj_safe=xj + yj_safe=yj + zj_safe=zj + subchap=0 + do xshift=-1,1 + do yshift=-1,1 + do zshift=-1,1 + xj=xj_safe+xshift*boxxsize + yj=yj_safe+yshift*boxysize + zj=zj_safe+zshift*boxzsize + dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2 + if(dist_temp.lt.dist_init) then + dist_init=dist_temp + xj_temp=xj + yj_temp=yj + zj_temp=zj + subchap=1 + endif + enddo + enddo + enddo + if (subchap.eq.1) then + xj=xj_temp-xi + yj=yj_temp-yi + zj=zj_temp-zi + else + xj=xj_safe-xi + yj=yj_safe-yi + zj=zj_safe-zi + endif +c print *,xj,yj,zj,'polozenie j' rrij=1.0D0/(xj*xj+yj*yj+zj*zj) +c print *,rrij sss=sscale(1.0d0/(dsqrt(rrij))) +c print *,r_cut,1.0d0/dsqrt(rrij),sss,'tu patrz' +c if (sss.eq.0) print *,'czasem jest OK' + if (sss.le.0.0d0) cycle sssgrad=sscagrad(1.0d0/(dsqrt(rrij))) - if (sss.gt.0.0d0) then fac=rrij**expon2 e1=fac*fac*aad(itypj,iteli) e2=fac*bad(itypj,iteli) @@ -4352,14 +4554,14 @@ cgrad enddo gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k) gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k) enddo - endif !endif for sscale cutoff +c endif !endif for sscale cutoff enddo ! j enddo ! iint enddo ! i - enddo !zshift - enddo !yshift - enddo !xshift +c enddo !zshift +c enddo !yshift +c enddo !xshift do i=1,nct do j=1,3 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i) @@ -4585,7 +4787,7 @@ C YES vbldpDUM is the equlibrium length of spring for Dummy atom C NO vbldp0 is the equlibrium lenght of spring for peptide group diff = vbld(i)-vbldp0 endif - if (energy_dec) write (iout,'(a7,i5,4f7.3)') + if (energy_dec) write (iout,'(a7,i5,4f7.3)') & "estr bb",i,vbld(i),vbldp0,diff,AKP*diff*diff estr=estr+diff*diff do j=1,3 @@ -4604,7 +4806,7 @@ c nbi=nbondterm(iti) if (nbi.eq.1) then diff=vbld(i+nres)-vbldsc0(1,iti) - if (energy_dec) write (iout,*) + if (energy_dec) write (iout,*) & "estr sc",i,iti,vbld(i+nres),vbldsc0(1,iti),diff, & AKSC(1,iti),AKSC(1,iti)*diff*diff estr=estr+0.5d0*AKSC(1,iti)*diff*diff