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.CONTROL'
6 include 'COMMON.IOUNITS'
10 include 'COMMON.LOCAL'
11 include 'COMMON.DERIV'
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
18 print '("Calling CHECK_ECART",1pd12.3)',aincr
19 write (iout,'("Calling CHECK_ECART",1pd12.3)') aincr
22 write (iout,'(a)') '**************** dx/dalpha'
28 temp(k,i)=dc(k,nres+i)
32 gg(k)=(dc(k,nres+i)-temp(k,i))/aincr
33 xx(k)=dabs((gg(k)-dxds(k,i))/(aincr*dabs(dxds(k,i))+aincr))
35 write (iout,'(i4,3e15.6/4x,3e15.6,3f9.3)')
36 & i,(gg(k),k=1,3),(dxds(k,i),k=1,3),(xx(k),k=1,3)
42 write (iout,'(a)') '**************** dx/domega'
48 temp(k,i)=dc(k,nres+i)
52 gg(k)=(dc(k,nres+i)-temp(k,i))/aincr
53 xx(k)=dabs((gg(k)-dxds(k+3,i))/
54 & (aincr*dabs(dxds(k+3,i))+aincr))
56 write (iout,'(i4,3e15.6/4x,3e15.6,3f9.3)')
57 & i,(gg(k),k=1,3),(dxds(k+3,i),k=1,3),(xx(k),k=1,3)
63 write (iout,'(a)') '**************** dx/dtheta'
67 theta(i)=theta(i)+aincr
70 temp(k,j)=dc(k,nres+j)
76 c print *,'i=',i-2,' j=',j-1,' ii=',ii
78 gg(k)=(dc(k,nres+j)-temp(k,j))/aincr
79 xx(k)=dabs((gg(k)-dxdv(k,ii))/
80 & (aincr*dabs(dxdv(k,ii))+aincr))
82 write (iout,'(2i4,3e14.6/8x,3e14.6,3f9.3)')
83 & i,j,(gg(k),k=1,3),(dxdv(k,ii),k=1,3),(xx(k),k=1,3)
90 write (iout,'(a)') '***************** dx/dphi'
96 temp(k,j)=dc(k,nres+j)
104 gg(k)=(dc(k,nres+j)-temp(k,j))/aincr
105 xx(k)=dabs((gg(k)-dxdv(k+3,ii))/
106 & (aincr*dabs(dxdv(k+3,ii))+aincr))
108 write (iout,'(2i4,3e14.6/8x,3e14.6,3f9.3)')
109 & i,j,(gg(k),k=1,3),(dxdv(k+3,ii),k=1,3),(xx(k),k=1,3)
115 write (iout,'(a)') '****************** ddc/dtheta'
118 theta(i+2)=thet+aincr
129 gg(k)=(dc(k,j)-temp(k,j))/aincr
130 xx(k)=dabs((gg(k)-dcdv(k,ii))/
131 & (aincr*dabs(dcdv(k,ii))+aincr))
133 write (iout,'(2i4,3e14.6/8x,3e14.6,3f9.3)')
134 & i,j,(gg(k),k=1,3),(dcdv(k,ii),k=1,3),(xx(k),k=1,3)
144 write (iout,'(a)') '******************* ddc/dphi'
158 gg(k)=(dc(k,j)-temp(k,j))/aincr
159 xx(k)=dabs((gg(k)-dcdv(k+3,ii))/
160 & (aincr*dabs(dcdv(k+3,ii))+aincr))
162 write (iout,'(2i4,3e14.6/8x,3e14.6,3f9.3)')
163 & i,j,(gg(k),k=1,3),(dcdv(k+3,ii),k=1,3),(xx(k),k=1,3)
175 C----------------------------------------------------------------------------
176 subroutine check_ecart
177 C Check the gradient of the energy in Cartesian coordinates.
178 implicit real*8 (a-h,o-z)
180 include 'COMMON.CONTROL'
181 include 'COMMON.CHAIN'
182 include 'COMMON.DERIV'
183 include 'COMMON.IOUNITS'
185 include 'COMMON.CONTACTS'
187 dimension ggg(6),cc(3),xx(3),ddc(3),ddx(3),x(maxvar),g(maxvar)
188 dimension grad_s(6,maxres)
189 double precision energia(0:n_ene),energia1(0:n_ene)
191 double precision urparm(1)
197 print '("Calling CHECK_ECART",1pd12.3)',aincr
198 write (iout,'("Calling CHECK_ECART",1pd12.3)') aincr
201 call geom_to_var(nvar,x)
202 call etotal(energia(0))
204 call enerprint(energia(0))
205 call gradient(nvar,x,nf,g,uiparm,urparm,fdum)
208 write (iout,'(i5,3f10.5)') i,(gradxorr(j,i),j=1,3)
212 grad_s(j,i)=gradc(j,i,icg)
213 grad_s(j+3,i)=gradx(j,i,icg)
217 write (iout,'(/a/)') 'Gradient in virtual-bond and SC vectors'
225 dc(j,i)=dc(j,i)+aincr
228 c(j,k+nres)=c(j,k+nres)+aincr
230 call etotal(energia1(0))
232 ggg(j)=(etot1-etot)/aincr
236 c(j,k+nres)=c(j,k+nres)-aincr
240 c(j,i+nres)=c(j,i+nres)+aincr
241 dc(j,i+nres)=dc(j,i+nres)+aincr
242 call etotal(energia1(0))
244 ggg(j+3)=(etot1-etot)/aincr
248 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/)')
249 & i,(ggg(k),k=1,6),(grad_s(k,i),k=1,6)
253 c----------------------------------------------------------------------------
254 subroutine check_ecartint
255 C Check the gradient of the energy in Cartesian coordinates.
256 implicit real*8 (a-h,o-z)
258 include 'COMMON.CONTROL'
259 include 'COMMON.CHAIN'
260 include 'COMMON.DERIV'
261 include 'COMMON.IOUNITS'
263 include 'COMMON.CONTACTS'
265 include 'COMMON.LAGRANGE'
266 include 'COMMON.LOCAL'
267 include 'COMMON.SPLITELE'
269 dimension ggg(6),ggg1(6),cc(3),xx(3),ddc(3),ddx(3),x(maxvar),
271 dimension dcnorm_safe(3),dxnorm_safe(3)
272 dimension grad_s(6,0:maxres),grad_s1(6,0:maxres)
273 double precision phi_temp(maxres),theta_temp(maxres),
274 & alph_temp(maxres),omeg_temp(maxres)
275 double precision energia(0:n_ene),energia1(0:n_ene)
277 double precision urparm(1)
285 call int_from_cart1(.false.)
288 c call checkintcartgrad
292 print '("Calling CHECK_ECARTINT",1pd12.3)',aincr
293 write (iout,'("Calling CHECK_ECARTINT",1pd12.3)') aincr
296 call geom_to_var(nvar,x)
297 if (.not.split_ene) then
298 call etotal(energia(0))
300 call enerprint(energia(0))
302 c write (iout,*) "enter cartgrad"
305 c write (iout,*) "exit cartgrad"
308 write (iout,'(//27(1h*)," Checking energy gradient ",27(1h*))')
309 write (iout,'(//4x,3a12,3x,3a12)')"gcart_x","gcart_y","gcart_z",
310 & "gxcart_x","gxcart_y","gxcart_z"
312 write (iout,'(i4,3e12.4,3x,3e12.4)') i,(gcart(j,i),j=1,3),
313 & (gxcart(j,i),j=1,3)
316 grad_s(j,0)=gcart(j,0)
320 grad_s(j,i)=gcart(j,i)
321 grad_s(j+3,i)=gxcart(j,i)
325 !- split gradient check
327 call etotal_long(energia(0))
328 call enerprint(energia(0))
330 write (iout,*) "enter cartgrad"
333 write (iout,*) "exit cartgrad"
336 write (iout,*) "longrange grad"
338 write (iout,'(i5,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3),
339 & (gxcart(j,i),j=1,3)
342 grad_s(j,0)=gcart(j,0)
346 grad_s(j,i)=gcart(j,i)
347 grad_s(j+3,i)=gxcart(j,i)
351 call etotal_short(energia(0))
352 call enerprint(energia(0))
354 write (iout,*) "enter cartgrad"
357 write (iout,*) "exit cartgrad"
360 write (iout,*) "shortrange grad"
362 write (iout,'(i5,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3),
363 & (gxcart(j,i),j=1,3)
366 grad_s1(j,0)=gcart(j,0)
370 grad_s1(j,i)=gcart(j,i)
371 grad_s1(j+3,i)=gxcart(j,i)
375 write (iout,'(/a/)') 'Gradient in virtual-bond and SC vectors'
383 dcnorm_safe(k)=dc_norm(k,i)
384 dxnorm_safe(k)=dc_norm(k,i+nres)
391 c Broadcast the order to compute internal coordinates to the slaves.
393 c & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
395 c call int_from_cart1(.false.)
396 if (.not.split_ene) then
397 call etotal(energia1(0))
401 call etotal_long(energia1(0))
403 call etotal_short(energia1(0))
405 c write (iout,*) "etot11",etot11," etot12",etot12
407 !- end split gradient
408 c write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot1",etot1
412 c call int_from_cart1(.false.)
413 if (.not.split_ene) then
414 call etotal(energia1(0))
416 ggg(j)=(etot1-etot2)/(2*aincr)
419 call etotal_long(energia1(0))
421 ggg(j)=(etot11-etot21)/(2*aincr)
422 call etotal_short(energia1(0))
424 ggg1(j)=(etot12-etot22)/(2*aincr)
425 !- end split gradient
426 c write (iout,*) "etot21",etot21," etot22",etot22
428 c write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot2",etot2
433 dc(j,i+nres)=ddx(j)+aincr
435 c write (iout,*) "i",i," j",j," dxnorm+ and dxnorm"
436 c write (iout,'(3f15.10)') (dc_norm(k,i+nres),k=1,3)
437 c write (iout,'(3f15.10)') (dxnorm_safe(k),k=1,3)
438 c write (iout,*) "dxnormnorm",dsqrt(
439 c & dc_norm(1,i+nres)**2+dc_norm(2,i+nres)**2+dc_norm(3,i+nres)**2)
440 c write (iout,*) "dxnormnormsafe",dsqrt(
441 c & dxnorm_safe(1)**2+dxnorm_safe(2)**2+dxnorm_safe(3)**2)
443 if (.not.split_ene) then
444 call etotal(energia1(0))
448 call etotal_long(energia1(0))
450 call etotal_short(energia1(0))
453 !- end split gradient
454 c write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot1",etot1
455 dc(j,i+nres)=ddx(j)-aincr
457 c write (iout,*) "i",i," j",j," dxnorm- and dxnorm"
458 c write (iout,'(3f15.10)') (dc_norm(k,i+nres),k=1,3)
459 c write (iout,'(3f15.10)') (dxnorm_safe(k),k=1,3)
461 c write (iout,*) "dxnormnorm",dsqrt(
462 c & dc_norm(1,i+nres)**2+dc_norm(2,i+nres)**2+dc_norm(3,i+nres)**2)
463 c write (iout,*) "dxnormnormsafe",dsqrt(
464 c & dxnorm_safe(1)**2+dxnorm_safe(2)**2+dxnorm_safe(3)**2)
465 if (.not.split_ene) then
466 call etotal(energia1(0))
468 ggg(j+3)=(etot1-etot2)/(2*aincr)
471 call etotal_long(energia1(0))
473 ggg(j+3)=(etot11-etot21)/(2*aincr)
474 call etotal_short(energia1(0))
476 ggg1(j+3)=(etot12-etot22)/(2*aincr)
477 !- end split gradient
479 c write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot2",etot2
483 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)')
484 & i,(ggg(k),k=1,6),(grad_s(k,i),k=1,6),(ggg(k)/grad_s(k,i),k=1,6)
486 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)')
487 & i,(ggg1(k),k=1,6),(grad_s1(k,i),k=1,6),(ggg1(k)/grad_s1(k,i),
489 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)')
490 & i,(ggg(k)+ggg1(k),k=1,6),(grad_s(k,i)+grad_s1(k,i),k=1,6),
491 & ((ggg(k)+ggg1(k))/(grad_s(k,i)+grad_s1(k,i)),k=1,6)
496 c-------------------------------------------------------------------------
497 subroutine int_from_cart1(lprn)
498 implicit real*8 (a-h,o-z)
504 include 'COMMON.IOUNITS'
506 include 'COMMON.CHAIN'
508 include 'COMMON.INTERACT'
509 include 'COMMON.LOCAL'
510 include 'COMMON.NAMES'
511 include 'COMMON.SETUP'
512 include 'COMMON.TIME1'
514 if (lprn) write (iout,'(/a)') 'Recalculated internal coordinates'
518 #if defined(PARINT) && defined(MPI)
519 do i=iint_start,iint_end
526 C print *,i,dnorm1,dnorm2
528 c(j,maxres2)=0.5D0*(2*c(j,i)+(c(j,i-1)-c(j,i))/dnorm1
529 & +(c(j,i+1)-c(j,i))/dnorm2)
533 if (i.le.nres) phi(i+1)=beta(i-2,i-1,i,i+1)
534 if ((itype(i).ne.10).and.(itype(i-1).ne.10)) then
535 tauangle(3,i+1)=beta(i+nres-1,i-1,i,i+nres)
537 if (itype(i-1).ne.10) then
538 tauangle(1,i+1)=beta(i-1+nres,i-1,i,i+1)
539 omicron(1,i)=alpha(i-2,i-1,i-1+nres)
540 omicron(2,i)=alpha(i-1+nres,i-1,i)
542 if (itype(i).ne.10) then
543 tauangle(2,i+1)=beta(i-2,i-1,i,i+nres)
546 omeg(i)=beta(nres+i,i,maxres2,i+1)
548 alph(i)=alpha(nres+i,i,maxres2)
550 theta(i+1)=alpha(i-1,i,i+1)
553 vbld_inv(i)=1.0d0/vbld(i)
554 vbld(nres+i)=dist(nres+i,i)
555 C print *,vbld(i+nres)
557 if (itype(i).ne.10) then
558 vbld_inv(nres+i)=1.0d0/vbld(nres+i)
560 vbld_inv(nres+i)=0.0d0
563 #if defined(PARINT) && defined(MPI)
564 if (nfgtasks1.gt.1) then
565 cd write(iout,*) "iint_start",iint_start," iint_count",
566 cd & (iint_count(i),i=0,nfgtasks-1)," iint_displ",
567 cd & (iint_displ(i),i=0,nfgtasks-1)
568 cd write (iout,*) "Gather vbld backbone"
571 call MPI_Allgatherv(vbld(iint_start),iint_count(fg_rank1),
572 & MPI_DOUBLE_PRECISION,vbld(1),iint_count(0),iint_displ(0),
573 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
574 cd write (iout,*) "Gather vbld_inv"
576 call MPI_Allgatherv(vbld_inv(iint_start),iint_count(fg_rank1),
577 & MPI_DOUBLE_PRECISION,vbld_inv(1),iint_count(0),iint_displ(0),
578 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
579 cd write (iout,*) "Gather vbld side chain"
581 call MPI_Allgatherv(vbld(iint_start+nres),iint_count(fg_rank1),
582 & MPI_DOUBLE_PRECISION,vbld(nres+1),iint_count(0),iint_displ(0),
583 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
584 cd write (iout,*) "Gather vbld_inv side chain"
586 call MPI_Allgatherv(vbld_inv(iint_start+nres),
587 & iint_count(fg_rank1),MPI_DOUBLE_PRECISION,vbld_inv(nres+1),
588 & iint_count(0),iint_displ(0),MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
589 cd write (iout,*) "Gather theta"
591 call MPI_Allgatherv(theta(iint_start+1),iint_count(fg_rank1),
592 & MPI_DOUBLE_PRECISION,theta(2),iint_count(0),iint_displ(0),
593 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
594 cd write (iout,*) "Gather phi"
596 call MPI_Allgatherv(phi(iint_start+1),iint_count(fg_rank1),
597 & MPI_DOUBLE_PRECISION,phi(2),iint_count(0),iint_displ(0),
598 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
600 cd write (iout,*) "Gather alph"
602 call MPI_Allgatherv(alph(iint_start),iint_count(fg_rank1),
603 & MPI_DOUBLE_PRECISION,alph(1),iint_count(0),iint_displ(0),
604 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
605 cd write (iout,*) "Gather omeg"
607 call MPI_Allgatherv(omeg(iint_start),iint_count(fg_rank1),
608 & MPI_DOUBLE_PRECISION,omeg(1),iint_count(0),iint_displ(0),
609 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
611 time_gather=time_gather+MPI_Wtime()-time00
616 dc_norm(j,i)=dc(j,i)*vbld_inv(i+1)
621 dc_norm(j,i+nres)=dc(j,i+nres)*vbld_inv(i+nres)
626 write (iout,1212) restyp(itype(i)),i,vbld(i),
627 &rad2deg*theta(i),rad2deg*phi(i),vbld(nres+i),
628 &rad2deg*alph(i),rad2deg*omeg(i)
631 1212 format (a3,'(',i3,')',2(f15.10,2f10.2))
633 time_intfcart=time_intfcart+MPI_Wtime()-time01
637 c----------------------------------------------------------------------------
638 subroutine check_eint
639 C Check the gradient of energy in internal coordinates.
640 implicit real*8 (a-h,o-z)
642 include 'COMMON.CONTROL'
643 include 'COMMON.CHAIN'
644 include 'COMMON.DERIV'
645 include 'COMMON.IOUNITS'
649 dimension x(maxvar),gana(maxvar),gg(maxvar)
651 double precision urparm(1)
652 double precision energia(0:n_ene),energia1(0:n_ene),
658 print '("Calling CHECK_INT",1pd12.3)',aincr
659 write (iout,'("Calling CHECK_INT",1pd12.3)') aincr
663 call geom_to_var(nvar,x)
664 call var_to_geom(nvar,x)
668 call etotal(energia(0))
670 call enerprint(energia(0))
673 if (MyID.ne.BossID) then
674 call mp_bcast(x(1),8*(nvar+3),BossID,fgGroupID)
682 cd write (iout,'(10f8.3)') (rad2deg*x(i),i=1,nvar)
683 call gradient(nvar,x,nf,gana,uiparm,urparm,fdum)
684 cd write (iout,'(i3,1pe14.4)') (i,gana(i),i=1,nvar)
689 call var_to_geom(nvar,x)
690 call chainbuild_extconf
691 call etotal(energia1(0))
694 call var_to_geom(nvar,x)
695 call chainbuild_extconf
696 call etotal(energia2(0))
698 gg(i)=(etot2-etot1)/aincr
699 write (iout,*) i,etot1,etot2
702 write (iout,'(/2a)')' Variable Numerical Analytical',
708 else if (i.le.nphi+ntheta) then
711 else if (i.le.nphi+ntheta+nside) then
715 ii=i-(nphi+ntheta+nside)
718 write (iout,'(i3,a,i3,3(1pd16.6))')
719 & i,key,ii,gg(i),gana(i),
720 & 100.0D0*dabs(gg(i)-gana(i))/(dabs(gana(i))+aincr)