1 subroutine check_cartgrad
2 C Check the gradient of Cartesian coordinates in internal coordinates.
3 implicit real*8 (a-h,o-z)
5 include 'COMMON.IOUNITS'
10 include 'COMMON.DERIV'
11 include 'COMMON.SCCOR'
12 dimension temp(6,maxres),xx(3),gg(3)
13 indmat(i,j)=((2*(nres-2)-i)*(i-1))/2+j-1
15 * Check the gradient of the virtual-bond and SC vectors in the internal
21 write (iout,'(a)') '**************** dx/dalpha'
27 temp(k,i)=dc(k,nres+i)
31 gg(k)=(dc(k,nres+i)-temp(k,i))/aincr
32 xx(k)=dabs((gg(k)-dxds(k,i))/(aincr*dabs(dxds(k,i))+aincr))
34 write (iout,'(i4,3e15.6/4x,3e15.6,3f9.3)')
35 & i,(gg(k),k=1,3),(dxds(k,i),k=1,3),(xx(k),k=1,3)
41 write (iout,'(a)') '**************** dx/domega'
47 temp(k,i)=dc(k,nres+i)
51 gg(k)=(dc(k,nres+i)-temp(k,i))/aincr
52 xx(k)=dabs((gg(k)-dxds(k+3,i))/
53 & (aincr*dabs(dxds(k+3,i))+aincr))
55 write (iout,'(i4,3e15.6/4x,3e15.6,3f9.3)')
56 & i,(gg(k),k=1,3),(dxds(k+3,i),k=1,3),(xx(k),k=1,3)
62 write (iout,'(a)') '**************** dx/dtheta'
66 theta(i)=theta(i)+aincr
69 temp(k,j)=dc(k,nres+j)
75 c print *,'i=',i-2,' j=',j-1,' ii=',ii
77 gg(k)=(dc(k,nres+j)-temp(k,j))/aincr
78 xx(k)=dabs((gg(k)-dxdv(k,ii))/
79 & (aincr*dabs(dxdv(k,ii))+aincr))
81 write (iout,'(2i4,3e14.6/8x,3e14.6,3f9.3)')
82 & i,j,(gg(k),k=1,3),(dxdv(k,ii),k=1,3),(xx(k),k=1,3)
89 write (iout,'(a)') '***************** dx/dphi'
95 temp(k,j)=dc(k,nres+j)
103 gg(k)=(dc(k,nres+j)-temp(k,j))/aincr
104 xx(k)=dabs((gg(k)-dxdv(k+3,ii))/
105 & (aincr*dabs(dxdv(k+3,ii))+aincr))
107 write (iout,'(2i4,3e14.6/8x,3e14.6,3f9.3)')
108 & i,j,(gg(k),k=1,3),(dxdv(k+3,ii),k=1,3),(xx(k),k=1,3)
114 write (iout,'(a)') '****************** ddc/dtheta'
117 theta(i+2)=thet+aincr
128 gg(k)=(dc(k,j)-temp(k,j))/aincr
129 xx(k)=dabs((gg(k)-dcdv(k,ii))/
130 & (aincr*dabs(dcdv(k,ii))+aincr))
132 write (iout,'(2i4,3e14.6/8x,3e14.6,3f9.3)')
133 & i,j,(gg(k),k=1,3),(dcdv(k,ii),k=1,3),(xx(k),k=1,3)
143 write (iout,'(a)') '******************* ddc/dphi'
157 gg(k)=(dc(k,j)-temp(k,j))/aincr
158 xx(k)=dabs((gg(k)-dcdv(k+3,ii))/
159 & (aincr*dabs(dcdv(k+3,ii))+aincr))
161 write (iout,'(2i4,3e14.6/8x,3e14.6,3f9.3)')
162 & i,j,(gg(k),k=1,3),(dcdv(k+3,ii),k=1,3),(xx(k),k=1,3)
174 C----------------------------------------------------------------------------
175 subroutine check_ecart
176 C Check the gradient of the energy in Cartesian coordinates.
177 implicit real*8 (a-h,o-z)
179 include 'COMMON.CHAIN'
180 include 'COMMON.DERIV'
181 include 'COMMON.IOUNITS'
183 include 'COMMON.CONTACTS'
184 include 'COMMON.SCCOR'
186 dimension ggg(6),cc(3),xx(3),ddc(3),ddx(3),x(maxvar),g(maxvar)
187 dimension grad_s(6,maxres)
188 double precision energia(0:n_ene),energia1(0:n_ene)
190 double precision urparm(1)
197 print '(a)','CG processor',me,' calling CHECK_CART.'
200 call geom_to_var(nvar,x)
201 call etotal(energia(0))
203 call enerprint(energia(0))
204 call gradient(nvar,x,nf,g,uiparm,urparm,fdum)
207 write (iout,'(i5,3f10.5)') i,(gradxorr(j,i),j=1,3)
211 grad_s(j,i)=gradc(j,i,icg)
212 grad_s(j+3,i)=gradx(j,i,icg)
216 write (iout,'(/a/)') 'Gradient in virtual-bond and SC vectors'
224 dc(j,i)=dc(j,i)+aincr
227 c(j,k+nres)=c(j,k+nres)+aincr
229 call etotal(energia1(0))
231 ggg(j)=(etot1-etot)/aincr
235 c(j,k+nres)=c(j,k+nres)-aincr
239 c(j,i+nres)=c(j,i+nres)+aincr
240 dc(j,i+nres)=dc(j,i+nres)+aincr
241 call etotal(energia1(0))
243 ggg(j+3)=(etot1-etot)/aincr
247 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/)')
248 & i,(ggg(k),k=1,6),(grad_s(k,i),k=1,6)
252 c----------------------------------------------------------------------------
253 subroutine check_ecartint
254 C Check the gradient of the energy in Cartesian coordinates.
255 implicit real*8 (a-h,o-z)
257 include 'COMMON.CONTROL'
258 include 'COMMON.CHAIN'
259 include 'COMMON.DERIV'
260 include 'COMMON.IOUNITS'
262 include 'COMMON.CONTACTS'
264 include 'COMMON.LOCAL'
265 include 'COMMON.SPLITELE'
266 include 'COMMON.SCCOR'
268 dimension ggg(6),ggg1(6),cc(3),xx(3),ddc(3),ddx(3),x(maxvar),
270 dimension dcnorm_safe(3),dxnorm_safe(3)
271 dimension grad_s(6,0:maxres),grad_s1(6,0:maxres)
272 double precision phi_temp(maxres),theta_temp(maxres),
273 & alph_temp(maxres),omeg_temp(maxres)
274 double precision energia(0:n_ene),energia1(0:n_ene)
276 double precision urparm(1)
285 c call checkintcartgrad
288 write(iout,*) 'Calling CHECK_ECARTINT.'
291 call geom_to_var(nvar,x)
292 call etotal(energia(0))
294 c write (iout,*) "atu?", gloc_sc(1,i,icg),gloc(i,icg)
297 call enerprint(energia(0))
299 write (iout,*) "enter cartgrad"
301 c write (iout,*) gloc_sc(1,i,icg)
305 write (iout,*) "exit cartgrad"
309 write (iout,'(i5,3f10.5)') i,(gradxorr(j,i),j=1,3)
312 grad_s(j,0)=gcart(j,0)
316 grad_s(j,i)=gcart(j,i)
317 grad_s(j+3,i)=gxcart(j,i)
320 write (iout,'(/a/)') 'Gradient in virtual-bond and SC vectors'
327 dcnorm_safe(k)=dc_norm(k,i)
328 dxnorm_safe(k)=dc_norm(k,i+nres)
335 c Broadcast the order to compute internal coordinates to the slaves.
337 c & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
339 c call int_from_cart1(.false.)
340 call etotal(energia1(0))
342 !- end split gradient
343 c write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot1",etot1
346 c call int_from_cart1(.false.)
347 call etotal(energia1(0))
349 ggg(j)=(etot1-etot2)/(2*aincr)
350 c write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot2",etot2
355 dc(j,i+nres)=ddx(j)+aincr
357 c write (iout,*) "i",i," j",j," dxnorm+ and dxnorm"
358 c write (iout,'(3f15.10)') (dc_norm(k,i+nres),k=1,3)
359 c write (iout,'(3f15.10)') (dxnorm_safe(k),k=1,3)
360 c write (iout,*) "dxnormnorm",dsqrt(
361 c & dc_norm(1,i+nres)**2+dc_norm(2,i+nres)**2+dc_norm(3,i+nres)**2)
362 c write (iout,*) "dxnormnormsafe",dsqrt(
363 c & dxnorm_safe(1)**2+dxnorm_safe(2)**2+dxnorm_safe(3)**2)
365 call etotal(energia1(0))
367 !- end split gradient
368 c write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot1",etot1
369 dc(j,i+nres)=ddx(j)-aincr
371 c write (iout,*) "i",i," j",j," dxnorm- and dxnorm"
372 c write (iout,'(3f15.10)') (dc_norm(k,i+nres),k=1,3)
373 c write (iout,'(3f15.10)') (dxnorm_safe(k),k=1,3)
375 c write (iout,*) "dxnormnorm",dsqrt(
376 c & dc_norm(1,i+nres)**2+dc_norm(2,i+nres)**2+dc_norm(3,i+nres)**2)
377 c write (iout,*) "dxnormnormsafe",dsqrt(
378 c & dxnorm_safe(1)**2+dxnorm_safe(2)**2+dxnorm_safe(3)**2)
379 call etotal(energia1(0))
381 ggg(j+3)=(etot1-etot2)/(2*aincr)
382 c write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot2",etot2
386 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)')
387 & i,(ggg(k),k=1,6),(grad_s(k,i),k=1,6),(ggg(k)/grad_s(k,i),k=1,6)
389 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)')
390 & i,(ggg1(k),k=1,6),(grad_s1(k,i),k=1,6),(ggg1(k)/grad_s1(k,i),
392 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)')
393 & i,(ggg(k)+ggg1(k),k=1,6),(grad_s(k,i)+grad_s1(k,i),k=1,6),
394 & ((ggg(k)+ggg1(k))/(grad_s(k,i)+grad_s1(k,i)),k=1,6)
399 c-------------------------------------------------------------------------
400 subroutine int_from_cart1(lprn)
401 implicit real*8 (a-h,o-z)
407 include 'COMMON.IOUNITS'
409 include 'COMMON.CHAIN'
411 include 'COMMON.INTERACT'
412 include 'COMMON.LOCAL'
413 include 'COMMON.NAMES'
414 include 'COMMON.SETUP'
415 include 'COMMON.TIME1'
417 if (lprn) write (iout,'(/a)') 'Recalculated internal coordinates'
421 #if defined(PARINT) && defined(MPI)
422 do i=iint_start,iint_end+1
429 c(j,maxres2)=0.5D0*(2*c(j,i)+(c(j,i-1)-c(j,i))/dnorm1
430 & +(c(j,i+1)-c(j,i))/dnorm2)
434 if (i.le.nres) phi(i+1)=beta(i-2,i-1,i,i+1)
435 if ((itype(i).ne.10).and.(itype(i-1).ne.10)) then
436 tauangle(3,i+1)=beta(i+nres-1,i-1,i,i+nres)
438 if (itype(i-1).ne.10) then
439 tauangle(1,i+1)=beta(i-1+nres,i-1,i,i+1)
440 omicron(1,i)=alpha(i-2,i-1,i-1+nres)
441 omicron(2,i)=alpha(i-1+nres,i-1,i)
443 if (itype(i).ne.10) then
444 tauangle(2,i+1)=beta(i-2,i-1,i,i+nres)
447 omeg(i)=beta(nres+i,i,maxres2,i+1)
448 alph(i)=alpha(nres+i,i,maxres2)
449 theta(i+1)=alpha(i-1,i,i+1)
451 vbld_inv(i)=1.0d0/vbld(i)
452 vbld(nres+i)=dist(nres+i,i)
453 if (itype(i).ne.10) then
454 vbld_inv(nres+i)=1.0d0/vbld(nres+i)
456 vbld_inv(nres+i)=0.0d0
460 #if defined(PARINT) && defined(MPI)
461 if (nfgtasks1.gt.1) then
462 cd write(iout,*) "iint_start",iint_start," iint_count",
463 cd & (iint_count(i),i=0,nfgtasks-1)," iint_displ",
464 cd & (iint_displ(i),i=0,nfgtasks-1)
465 cd write (iout,*) "Gather vbld backbone"
468 call MPI_Allgatherv(vbld(iint_start),iint_count(fg_rank1),
469 & MPI_DOUBLE_PRECISION,vbld(1),iint_count(0),iint_displ(0),
470 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
471 cd write (iout,*) "Gather vbld_inv"
473 call MPI_Allgatherv(vbld_inv(iint_start),iint_count(fg_rank1),
474 & MPI_DOUBLE_PRECISION,vbld_inv(1),iint_count(0),iint_displ(0),
475 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
476 cd write (iout,*) "Gather vbld side chain"
478 call MPI_Allgatherv(vbld(iint_start+nres),iint_count(fg_rank1),
479 & MPI_DOUBLE_PRECISION,vbld(nres+1),iint_count(0),iint_displ(0),
480 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
481 cd write (iout,*) "Gather vbld_inv side chain"
483 call MPI_Allgatherv(vbld_inv(iint_start+nres),
484 & iint_count(fg_rank1),MPI_DOUBLE_PRECISION,vbld_inv(nres+1),
485 & iint_count(0),iint_displ(0),MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
486 cd write (iout,*) "Gather theta"
488 call MPI_Allgatherv(theta(iint_start+1),iint_count(fg_rank1),
489 & MPI_DOUBLE_PRECISION,theta(2),iint_count(0),iint_displ(0),
490 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
491 cd write (iout,*) "Gather phi"
493 call MPI_Allgatherv(phi(iint_start+1),iint_count(fg_rank1),
494 & MPI_DOUBLE_PRECISION,phi(2),iint_count(0),iint_displ(0),
495 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
497 cd write (iout,*) "Gather alph"
499 call MPI_Allgatherv(alph(iint_start),iint_count(fg_rank1),
500 & MPI_DOUBLE_PRECISION,alph(1),iint_count(0),iint_displ(0),
501 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
502 cd write (iout,*) "Gather omeg"
504 call MPI_Allgatherv(omeg(iint_start),iint_count(fg_rank1),
505 & MPI_DOUBLE_PRECISION,omeg(1),iint_count(0),iint_displ(0),
506 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
508 time_gather=time_gather+MPI_Wtime()-time00
513 dc_norm(j,i)=dc(j,i)*vbld_inv(i+1)
518 dc_norm(j,i+nres)=dc(j,i+nres)*vbld_inv(i+nres)
523 write (iout,1212) restyp(itype(i)),i,vbld(i),
524 &rad2deg*theta(i),rad2deg*phi(i),vbld(nres+i),
525 &rad2deg*alph(i),rad2deg*omeg(i)
528 1212 format (a3,'(',i3,')',2(f15.10,2f10.2))
530 time_intfcart=time_intfcart+MPI_Wtime()-time01
534 c----------------------------------------------------------------------------
535 subroutine check_eint
536 C Check the gradient of energy in internal coordinates.
537 implicit real*8 (a-h,o-z)
539 include 'COMMON.CHAIN'
540 include 'COMMON.DERIV'
541 include 'COMMON.IOUNITS'
545 dimension x(maxvar),gana(maxvar),gg(maxvar)
547 double precision urparm(1)
548 double precision energia(0:n_ene),energia1(0:n_ene),
554 print '(a)','Calling CHECK_INT.'
558 call geom_to_var(nvar,x)
559 call var_to_geom(nvar,x)
563 call etotal(energia(0))
565 call enerprint(energia(0))
568 if (MyID.ne.BossID) then
569 call mp_bcast(x(1),8*(nvar+3),BossID,fgGroupID)
577 cd write (iout,'(10f8.3)') (rad2deg*x(i),i=1,nvar)
578 call gradient(nvar,x,nf,gana,uiparm,urparm,fdum)
579 cd write (iout,'(i3,1pe14.4)') (i,gana(i),i=1,nvar)
584 call var_to_geom(nvar,x)
586 call etotal(energia1(0))
589 call var_to_geom(nvar,x)
591 call etotal(energia2(0))
593 gg(i)=(etot2-etot1)/aincr
594 write (iout,*) i,etot1,etot2
597 write (iout,'(/2a)')' Variable Numerical Analytical',
603 else if (i.le.nphi+ntheta) then
606 else if (i.le.nphi+ntheta+nside) then
610 ii=i-(nphi+ntheta+nside)
613 write (iout,'(i3,a,i3,3(1pd16.6))')
614 & i,key,ii,gg(i),gana(i),
615 & 100.0D0*dabs(gg(i)-gana(i))/(dabs(gana(i))+aincr)