1 subroutine check_cartgrad
2 C Check the gradient of Cartesian coordinates in internal coordinates.
5 include 'COMMON.CONTROL'
6 include 'COMMON.IOUNITS'
10 include 'COMMON.LOCAL'
11 include 'COMMON.DERIV'
12 double precision temp(6,maxres),xx(3),gg(3),thet,theti,phii,alphi,
16 indmat(i,j)=((2*(nres-2)-i)*(i-1))/2+j-1
19 * Check the gradient of the virtual-bond and SC vectors in the internal
22 print '("Calling CHECK_ECART",1pd12.3)',aincr
23 write (iout,'("Calling CHECK_ECART",1pd12.3)') aincr
25 call chainbuild_extconf
27 write (iout,'(a)') '**************** dx/dalpha'
33 temp(k,i)=dc(k,nres+i)
35 call chainbuild_extconf
37 gg(k)=(dc(k,nres+i)-temp(k,i))/aincr
38 xx(k)=dabs((gg(k)-dxds(k,i))/(aincr*dabs(dxds(k,i))+aincr))
40 write (iout,'(i4,3e15.6/4x,3e15.6,3f9.3)')
41 & i,(gg(k),k=1,3),(dxds(k,i),k=1,3),(xx(k),k=1,3)
44 call chainbuild_extconf
47 write (iout,'(a)') '**************** dx/domega'
53 temp(k,i)=dc(k,nres+i)
55 call chainbuild_extconf
57 gg(k)=(dc(k,nres+i)-temp(k,i))/aincr
58 xx(k)=dabs((gg(k)-dxds(k+3,i))/
59 & (aincr*dabs(dxds(k+3,i))+aincr))
61 write (iout,'(i4,3e15.6/4x,3e15.6,3f9.3)')
62 & i,(gg(k),k=1,3),(dxds(k+3,i),k=1,3),(xx(k),k=1,3)
65 call chainbuild_extconf
68 write (iout,'(a)') '**************** dx/dtheta'
72 theta(i)=theta(i)+aincr
75 temp(k,j)=dc(k,nres+j)
78 call chainbuild_extconf
81 c print *,'i=',i-2,' j=',j-1,' ii=',ii
83 gg(k)=(dc(k,nres+j)-temp(k,j))/aincr
84 xx(k)=dabs((gg(k)-dxdv(k,ii))/
85 & (aincr*dabs(dxdv(k,ii))+aincr))
87 write (iout,'(2i4,3e14.6/8x,3e14.6,3f9.3)')
88 & i,j,(gg(k),k=1,3),(dxdv(k,ii),k=1,3),(xx(k),k=1,3)
93 call chainbuild_extconf
95 write (iout,'(a)') '***************** dx/dphi'
101 temp(k,j)=dc(k,nres+j)
104 call chainbuild_extconf
109 gg(k)=(dc(k,nres+j)-temp(k,j))/aincr
110 xx(k)=dabs((gg(k)-dxdv(k+3,ii))/
111 & (aincr*dabs(dxdv(k+3,ii))+aincr))
113 write (iout,'(2i4,3e14.6/8x,3e14.6,3f9.3)')
114 & i,j,(gg(k),k=1,3),(dxdv(k+3,ii),k=1,3),(xx(k),k=1,3)
118 call chainbuild_extconf
120 write (iout,'(a)') '****************** ddc/dtheta'
123 theta(i+2)=thet+aincr
129 call chainbuild_extconf
134 gg(k)=(dc(k,j)-temp(k,j))/aincr
135 xx(k)=dabs((gg(k)-dcdv(k,ii))/
136 & (aincr*dabs(dcdv(k,ii))+aincr))
138 write (iout,'(2i4,3e14.6/8x,3e14.6,3f9.3)')
139 & i,j,(gg(k),k=1,3),(dcdv(k,ii),k=1,3),(xx(k),k=1,3)
149 write (iout,'(a)') '******************* ddc/dphi'
158 call chainbuild_extconf
163 gg(k)=(dc(k,j)-temp(k,j))/aincr
164 xx(k)=dabs((gg(k)-dcdv(k+3,ii))/
165 & (aincr*dabs(dcdv(k+3,ii))+aincr))
167 write (iout,'(2i4,3e14.6/8x,3e14.6,3f9.3)')
168 & i,j,(gg(k),k=1,3),(dcdv(k+3,ii),k=1,3),(xx(k),k=1,3)
180 C----------------------------------------------------------------------------
181 subroutine check_ecart
182 C Check the gradient of the energy in Cartesian coordinates.
185 include 'COMMON.CONTROL'
186 include 'COMMON.CHAIN'
187 include 'COMMON.DERIV'
188 include 'COMMON.IOUNITS'
190 include 'COMMON.CONTACTS'
194 double precision ggg(6),cc(3),xx(3),ddc(3),ddx(3),x(maxvar),
195 & g(maxvar),grad_s(6,maxres)
196 double precision energia(0:n_ene),energia1(0:n_ene)
197 double precision aincr2,etot,etot1,etot2
198 double precision dist,alpha,beta
201 double precision urparm(1)
202 double precision fdum
208 print '("Calling CHECK_ECART",1pd12.3)',aincr
209 write (iout,'("Calling CHECK_ECART",1pd12.3)') aincr
212 call geom_to_var(nvar,x)
213 call etotal(energia(0))
215 call enerprint(energia(0))
216 call gradient(nvar,x,nf,g,uiparm,urparm,fdum)
219 write (iout,'(i5,3f10.5)') i,(gradxorr(j,i),j=1,3)
223 grad_s(j,i)=gradc(j,i,icg)
224 grad_s(j+3,i)=gradx(j,i,icg)
228 write (iout,'(/a/)') 'Gradient in virtual-bond and SC vectors'
236 dc(j,i)=dc(j,i)+aincr
239 c(j,k+nres)=c(j,k+nres)+aincr
241 call etotal(energia1(0))
243 ggg(j)=(etot1-etot)/aincr
247 c(j,k+nres)=c(j,k+nres)-aincr
251 c(j,i+nres)=c(j,i+nres)+aincr
252 dc(j,i+nres)=dc(j,i+nres)+aincr
253 call etotal(energia1(0))
255 ggg(j+3)=(etot1-etot)/aincr
259 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/)')
260 & i,(ggg(k),k=1,6),(grad_s(k,i),k=1,6)
265 !-----------------------------------------------------------------------------
266 subroutine check_ecartint
267 ! Check the gradient of the energy in Cartesian coordinates.
270 include 'COMMON.CONTROL'
271 include 'COMMON.CHAIN'
272 include 'COMMON.INTERACT'
273 include 'COMMON.DERIV'
274 include 'COMMON.IOUNITS'
276 include 'COMMON.CONTACTS'
278 include 'COMMON.LOCAL'
279 include 'COMMON.SPLITELE'
282 double precision ggg(6),ggg1(6),cc(3),xx(3),ddc(3),ddx(3),
283 & x(maxvar),g(maxvar)
284 double precision dcnorm_safe(3),dxnorm_safe(3)
285 double precision grad_s(6,0:maxres),grad_s1(6,0:maxres)
286 double precision phi_temp(maxres),theta_temp(maxres),
287 & alph_temp(maxres),omeg_temp(maxres)
288 double precision ddc1(3),ddcn(3),dcnorm_safe1(3),dcnorm_safe2(3)
289 double precision energia(0:n_ene),energia1(0:n_ene)
291 double precision urparm(1)
292 double precision fdum
295 double precision etot,etot1,etot2,etot11,etot12,etot21,etot22
296 double precision dist,alpha,beta
302 ! call checkintcartgrad
305 write(iout,*) 'Calling CHECK_ECARTINT.'
308 write (iout,*) "Before geom_to_var"
309 call geom_to_var(nvar,x)
310 write (iout,*) "after geom_to_var"
311 write (iout,*) "split_ene ",split_ene
313 if (.not.split_ene) then
314 write(iout,*) 'Calling CHECK_ECARTINT if'
316 !elwrite(iout,*) 'Calling CHECK_ECARTINT if'
318 write (iout,*) "etot",etot
319 call enerprint(energia(0))
321 !el call enerprint(energia)
322 !elwrite(iout,*) 'Calling CHECK_ECARTINT if'
324 write (iout,*) "enter cartgrad"
327 !elwrite(iout,*) 'Calling CHECK_ECARTINT if'
328 write (iout,*) "exit cartgrad"
332 write (iout,'(i5,3f10.5)') i,(gradxorr(j,i),j=1,3)
335 grad_s(j,0)=gcart(j,0)
337 !elwrite(iout,*) 'Calling CHECK_ECARTINT if'
340 grad_s(j,i)=gcart(j,i)
341 grad_s(j+3,i)=gxcart(j,i)
345 write(iout,*) 'Calling CHECK_ECARTIN else.'
346 !- split gradient check
348 call etotal_long(energia)
349 call enerprint(energia(0))
350 !el call enerprint(energia)
352 write (iout,*) "enter cartgrad"
355 write (iout,*) "exit cartgrad"
358 write (iout,*) "longrange grad"
360 write (iout,'(i5,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3),
361 & (gxcart(j,i),j=1,3)
364 grad_s(j,0)=gcart(j,0)
368 grad_s(j,i)=gcart(j,i)
369 grad_s(j+3,i)=gxcart(j,i)
373 call etotal_short(energia)
374 call enerprint(energia(0))
376 write (iout,*) "enter cartgrad"
379 write (iout,*) "exit cartgrad"
382 write (iout,*) "shortrange grad"
384 write (iout,'(i5,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3),
385 & (gxcart(j,i),j=1,3)
388 grad_s1(j,0)=gcart(j,0)
392 grad_s1(j,i)=gcart(j,i)
393 grad_s1(j+3,i)=gxcart(j,i)
397 write (iout,'(/a/)') 'Gradient in virtual-bond and SC vectors'
402 if (nnt.gt.1 .and. i.eq.nnt) ddc1(j)=c(j,1)
403 if (nct.lt.nres .and. i.eq.nct) ddcn(j)=c(j,nres)
406 dcnorm_safe1(j)=dc_norm(j,i-1)
407 dcnorm_safe2(j)=dc_norm(j,i)
408 dxnorm_safe(j)=dc_norm(j,i+nres)
412 if (nnt.gt.1 .and. i.eq.nnt) c(j,1)=c(j,1)+aincr
413 if (nct.lt.nres .and. i.eq.nct) c(j,nres)=c(j,nres)+aincr
414 if (i.gt.1) dc(j,i-1)=c(j,i)-c(j,i-1)
415 dc(j,i)=c(j,i+1)-c(j,i)
416 dc(j,i+nres)=c(j,i+nres)-c(j,i)
417 call int_from_cart1(.false.)
418 if (.not.split_ene) then
419 call etotal(energia1)
421 c write (iout,*) "ij",i,j," etot1",etot1
424 call etotal_long(energia1)
426 call etotal_short(energia1)
429 !- end split gradient
430 ! write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot1",etot1
432 if (nnt.gt.1 .and. i.eq.nnt) c(j,1)=ddc1(j)-aincr
433 if (nct.lt.nres .and. i.eq.nct) c(j,nres)=ddcn(j)-aincr
434 if (i.gt.1) dc(j,i-1)=c(j,i)-c(j,i-1)
435 dc(j,i)=c(j,i+1)-c(j,i)
436 dc(j,i+nres)=c(j,i+nres)-c(j,i)
437 call int_from_cart1(.false.)
438 if (.not.split_ene) then
439 call etotal(energia1)
441 c write (iout,*) "ij",i,j," etot2",etot2
442 ggg(j)=(etot1-etot2)/(2*aincr)
445 call etotal_long(energia1)
447 ggg(j)=(etot11-etot21)/(2*aincr)
448 call etotal_short(energia1)
450 ggg1(j)=(etot12-etot22)/(2*aincr)
451 !- end split gradient
452 ! write (iout,*) "etot21",etot21," etot22",etot22
454 ! write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot2",etot2
456 if (nnt.gt.1 .and. i.eq.nnt) c(j,1)=ddc1(j)
457 if (nct.lt.nres .and. i.eq.nct) c(j,nres)=ddcn(j)
458 if (i.gt.1) dc(j,i-1)=c(j,i)-c(j,i-1)
459 dc(j,i)=c(j,i+1)-c(j,i)
460 dc(j,i+nres)=c(j,i+nres)-c(j,i)
461 dc_norm(j,i-1)=dcnorm_safe1(j)
462 dc_norm(j,i)=dcnorm_safe2(j)
463 dc_norm(j,i+nres)=dxnorm_safe(j)
466 c(j,i+nres)=ddx(j)+aincr
467 dc(j,i+nres)=c(j,i+nres)-c(j,i)
468 call int_from_cart1(.false.)
469 if (.not.split_ene) then
470 call etotal(energia1)
474 call etotal_long(energia1)
476 call etotal_short(energia1)
479 !- end split gradient
480 c(j,i+nres)=ddx(j)-aincr
481 dc(j,i+nres)=c(j,i+nres)-c(j,i)
482 call int_from_cart1(.false.)
483 if (.not.split_ene) then
484 call etotal(energia1)
486 ggg(j+3)=(etot1-etot2)/(2*aincr)
489 call etotal_long(energia1)
491 ggg(j+3)=(etot11-etot21)/(2*aincr)
492 call etotal_short(energia1)
494 ggg1(j+3)=(etot12-etot22)/(2*aincr)
495 !- end split gradient
497 ! write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot2",etot2
499 dc(j,i+nres)=c(j,i+nres)-c(j,i)
500 dc_norm(j,i+nres)=dxnorm_safe(j)
501 call int_from_cart1(.false.)
503 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)')
504 & i,(ggg(k),k=1,6),(grad_s(k,i),k=1,6),(ggg(k)/grad_s(k,i),k=1,6)
506 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)')
507 & i,(ggg1(k),k=1,6),(grad_s1(k,i),k=1,6),(ggg1(k)/grad_s1(k,i),
509 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)')
510 & i,(ggg(k)+ggg1(k),k=1,6),(grad_s(k,i)+grad_s1(k,i),k=1,6),
511 & ((ggg(k)+ggg1(k))/(grad_s(k,i)+grad_s1(k,i)),k=1,6)
517 c----------------------------------------------------------------------------
518 subroutine check_ecartint
519 C Check the gradient of the energy in Cartesian coordinates.
522 include 'COMMON.CONTROL'
523 include 'COMMON.CHAIN'
524 include 'COMMON.DERIV'
525 include 'COMMON.IOUNITS'
527 include 'COMMON.CONTACTS'
529 include 'COMMON.LOCAL'
530 include 'COMMON.SPLITELE'
533 double precision ggg(6),ggg1(6),cc(3),xx(3),ddc(3),ddx(3),
534 & x(maxvar),g(maxvar)
535 double precision dcnorm_safe(3),dxnorm_safe(3)
536 double precision grad_s(6,0:maxres),grad_s1(6,0:maxres)
537 double precision phi_temp(maxres),theta_temp(maxres),
538 & alph_temp(maxres),omeg_temp(maxres)
539 double precision energia(0:n_ene),energia1(0:n_ene)
541 double precision urparm(1)
544 double precision etot,etot1,etot2,etot11,etot12,etot21,etot22
545 double precision dist,alpha,beta
552 call int_from_cart1(.false.)
555 c call checkintcartgrad
559 print '("Calling CHECK_ECARTINT",1pd12.3)',aincr
560 write (iout,'("Calling CHECK_ECARTINT",1pd12.3)') aincr
563 call geom_to_var(nvar,x)
564 if (.not.split_ene) then
565 call etotal(energia(0))
567 call enerprint(energia(0))
568 c write (iout,*) "enter cartgrad"
571 c write (iout,*) "exit cartgrad"
574 write (iout,'(//27(1h*)," Checking energy gradient ",27(1h*))')
575 write (iout,'(//4x,3a12,3x,3a12)')"gcart_x","gcart_y","gcart_z",
576 & "gxcart_x","gxcart_y","gxcart_z"
578 write (iout,'(i4,3e12.4,3x,3e12.4)') i,(gcart(j,i),j=1,3),
579 & (gxcart(j,i),j=1,3)
582 grad_s(j,0)=gcart(j,0)
586 grad_s(j,i)=gcart(j,i)
587 grad_s(j+3,i)=gxcart(j,i)
591 !- split gradient check
593 call etotal_long(energia(0))
594 call enerprint(energia(0))
596 write (iout,*) "enter cartgrad"
599 write (iout,*) "exit cartgrad"
602 write (iout,*) "longrange grad"
604 write (iout,'(i5,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3),
605 & (gxcart(j,i),j=1,3)
608 grad_s(j,0)=gcart(j,0)
612 grad_s(j,i)=gcart(j,i)
613 grad_s(j+3,i)=gxcart(j,i)
617 call etotal_short(energia(0))
618 call enerprint(energia(0))
620 write (iout,*) "enter cartgrad"
623 write (iout,*) "exit cartgrad"
626 write (iout,*) "shortrange grad"
628 write (iout,'(i5,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3),
629 & (gxcart(j,i),j=1,3)
632 grad_s1(j,0)=gcart(j,0)
636 grad_s1(j,i)=gcart(j,i)
637 grad_s1(j+3,i)=gxcart(j,i)
641 write (iout,'(/a/)') 'Gradient in virtual-bond and SC vectors'
649 dcnorm_safe(k)=dc_norm(k,i)
650 dxnorm_safe(k)=dc_norm(k,i+nres)
657 c Broadcast the order to compute internal coordinates to the slaves.
659 c & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
661 c call int_from_cart1(.false.)
662 if (.not.split_ene) then
663 call etotal(energia1(0))
667 call etotal_long(energia1(0))
669 call etotal_short(energia1(0))
671 c write (iout,*) "etot11",etot11," etot12",etot12
673 !- end split gradient
674 c write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot1",etot1
678 c call int_from_cart1(.false.)
679 if (.not.split_ene) then
680 call etotal(energia1(0))
682 ggg(j)=(etot1-etot2)/(2*aincr)
685 call etotal_long(energia1(0))
687 ggg(j)=(etot11-etot21)/(2*aincr)
688 call etotal_short(energia1(0))
690 ggg1(j)=(etot12-etot22)/(2*aincr)
691 !- end split gradient
692 c write (iout,*) "etot21",etot21," etot22",etot22
694 c write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot2",etot2
699 dc(j,i+nres)=ddx(j)+aincr
701 c write (iout,*) "i",i," j",j," dxnorm+ and dxnorm"
702 c write (iout,'(3f15.10)') (dc_norm(k,i+nres),k=1,3)
703 c write (iout,'(3f15.10)') (dxnorm_safe(k),k=1,3)
704 c write (iout,*) "dxnormnorm",dsqrt(
705 c & dc_norm(1,i+nres)**2+dc_norm(2,i+nres)**2+dc_norm(3,i+nres)**2)
706 c write (iout,*) "dxnormnormsafe",dsqrt(
707 c & dxnorm_safe(1)**2+dxnorm_safe(2)**2+dxnorm_safe(3)**2)
709 if (.not.split_ene) then
710 call etotal(energia1(0))
714 call etotal_long(energia1(0))
716 call etotal_short(energia1(0))
719 !- end split gradient
720 c write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot1",etot1
721 dc(j,i+nres)=ddx(j)-aincr
723 c write (iout,*) "i",i," j",j," dxnorm- and dxnorm"
724 c write (iout,'(3f15.10)') (dc_norm(k,i+nres),k=1,3)
725 c write (iout,'(3f15.10)') (dxnorm_safe(k),k=1,3)
727 c write (iout,*) "dxnormnorm",dsqrt(
728 c & dc_norm(1,i+nres)**2+dc_norm(2,i+nres)**2+dc_norm(3,i+nres)**2)
729 c write (iout,*) "dxnormnormsafe",dsqrt(
730 c & dxnorm_safe(1)**2+dxnorm_safe(2)**2+dxnorm_safe(3)**2)
731 if (.not.split_ene) then
732 call etotal(energia1(0))
734 ggg(j+3)=(etot1-etot2)/(2*aincr)
737 call etotal_long(energia1(0))
739 ggg(j+3)=(etot11-etot21)/(2*aincr)
740 call etotal_short(energia1(0))
742 ggg1(j+3)=(etot12-etot22)/(2*aincr)
743 !- end split gradient
745 c write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot2",etot2
749 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)')
750 & i,(ggg(k),k=1,6),(grad_s(k,i),k=1,6),(ggg(k)/grad_s(k,i),k=1,6)
752 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)')
753 & i,(ggg1(k),k=1,6),(grad_s1(k,i),k=1,6),(ggg1(k)/grad_s1(k,i),
755 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)')
756 & i,(ggg(k)+ggg1(k),k=1,6),(grad_s(k,i)+grad_s1(k,i),k=1,6),
757 & ((ggg(k)+ggg1(k))/(grad_s(k,i)+grad_s1(k,i)),k=1,6)
763 c-------------------------------------------------------------------------
764 subroutine int_from_cart1(lprn)
771 include 'COMMON.IOUNITS'
773 include 'COMMON.CHAIN'
775 include 'COMMON.INTERACT'
776 include 'COMMON.LOCAL'
777 include 'COMMON.NAMES'
778 include 'COMMON.SETUP'
779 include 'COMMON.TIME1'
782 double precision dnorm1,dnorm2,be
783 double precision time00
784 double precision dist,alpha,beta
785 if (lprn) write (iout,'(/a)') 'Recalculated internal coordinates'
789 #if defined(PARINT) && defined(MPI)
790 do i=iint_start,iint_end
797 C print *,i,dnorm1,dnorm2
799 c(j,maxres2)=0.5D0*(2*c(j,i)+(c(j,i-1)-c(j,i))/dnorm1
800 & +(c(j,i+1)-c(j,i))/dnorm2)
804 if (i.le.nres) phi(i+1)=beta(i-2,i-1,i,i+1)
805 if ((itype(i).ne.10).and.(itype(i-1).ne.10)) then
806 tauangle(3,i+1)=beta(i+nres-1,i-1,i,i+nres)
808 if (itype(i-1).ne.10) then
809 tauangle(1,i+1)=beta(i-1+nres,i-1,i,i+1)
810 omicron(1,i)=alpha(i-2,i-1,i-1+nres)
811 omicron(2,i)=alpha(i-1+nres,i-1,i)
813 if (itype(i).ne.10) then
814 tauangle(2,i+1)=beta(i-2,i-1,i,i+nres)
817 omeg(i)=beta(nres+i,i,maxres2,i+1)
819 alph(i)=alpha(nres+i,i,maxres2)
821 theta(i+1)=alpha(i-1,i,i+1)
824 vbld_inv(i)=1.0d0/vbld(i)
825 vbld(nres+i)=dist(nres+i,i)
826 C print *,vbld(i+nres)
828 if (itype(i).ne.10) then
829 vbld_inv(nres+i)=1.0d0/vbld(nres+i)
831 vbld_inv(nres+i)=0.0d0
834 #if defined(PARINT) && defined(MPI)
835 if (nfgtasks1.gt.1) then
836 cd write(iout,*) "iint_start",iint_start," iint_count",
837 cd & (iint_count(i),i=0,nfgtasks-1)," iint_displ",
838 cd & (iint_displ(i),i=0,nfgtasks-1)
839 cd write (iout,*) "Gather vbld backbone"
842 call MPI_Allgatherv(vbld(iint_start),iint_count(fg_rank1),
843 & MPI_DOUBLE_PRECISION,vbld(1),iint_count(0),iint_displ(0),
844 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
845 cd write (iout,*) "Gather vbld_inv"
847 call MPI_Allgatherv(vbld_inv(iint_start),iint_count(fg_rank1),
848 & MPI_DOUBLE_PRECISION,vbld_inv(1),iint_count(0),iint_displ(0),
849 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
850 cd write (iout,*) "Gather vbld side chain"
852 call MPI_Allgatherv(vbld(iint_start+nres),iint_count(fg_rank1),
853 & MPI_DOUBLE_PRECISION,vbld(nres+1),iint_count(0),iint_displ(0),
854 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
855 cd write (iout,*) "Gather vbld_inv side chain"
857 call MPI_Allgatherv(vbld_inv(iint_start+nres),
858 & iint_count(fg_rank1),MPI_DOUBLE_PRECISION,vbld_inv(nres+1),
859 & iint_count(0),iint_displ(0),MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
860 cd write (iout,*) "Gather theta"
862 call MPI_Allgatherv(theta(iint_start+1),iint_count(fg_rank1),
863 & MPI_DOUBLE_PRECISION,theta(2),iint_count(0),iint_displ(0),
864 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
865 cd write (iout,*) "Gather phi"
867 call MPI_Allgatherv(phi(iint_start+1),iint_count(fg_rank1),
868 & MPI_DOUBLE_PRECISION,phi(2),iint_count(0),iint_displ(0),
869 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
871 cd write (iout,*) "Gather alph"
873 call MPI_Allgatherv(alph(iint_start),iint_count(fg_rank1),
874 & MPI_DOUBLE_PRECISION,alph(1),iint_count(0),iint_displ(0),
875 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
876 cd write (iout,*) "Gather omeg"
878 call MPI_Allgatherv(omeg(iint_start),iint_count(fg_rank1),
879 & MPI_DOUBLE_PRECISION,omeg(1),iint_count(0),iint_displ(0),
880 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
882 time_gather=time_gather+MPI_Wtime()-time00
887 dc_norm(j,i)=dc(j,i)*vbld_inv(i+1)
892 dc_norm(j,i+nres)=dc(j,i+nres)*vbld_inv(i+nres)
897 write (iout,1212) restyp(itype(i)),i,vbld(i),
898 &rad2deg*theta(i),rad2deg*phi(i),vbld(nres+i),
899 &rad2deg*alph(i),rad2deg*omeg(i)
902 1212 format (a3,'(',i3,')',2(f15.10,2f10.2))
904 time_intfcart=time_intfcart+MPI_Wtime()-time01
908 c----------------------------------------------------------------------------
909 subroutine check_eint
910 C Check the gradient of energy in internal coordinates.
913 include 'COMMON.CONTROL'
914 include 'COMMON.CHAIN'
915 include 'COMMON.DERIV'
916 include 'COMMON.IOUNITS'
921 double precision x(maxvar),gana(maxvar),gg(maxvar)
923 double precision urparm(1)
924 double precision energia(0:n_ene),energia1(0:n_ene),
927 double precision fdum
930 double precision xi,etot,etot1,etot2
933 print '("Calling CHECK_INT",1pd12.3)',aincr
934 write (iout,'("Calling CHECK_INT",1pd12.3)') aincr
938 call geom_to_var(nvar,x)
939 call var_to_geom(nvar,x)
943 call etotal(energia(0))
945 call enerprint(energia(0))
948 if (MyID.ne.BossID) then
949 call mp_bcast(x(1),8*(nvar+3),BossID,fgGroupID)
957 cd write (iout,'(10f8.3)') (rad2deg*x(i),i=1,nvar)
958 call gradient(nvar,x,nf,gana,uiparm,urparm,fdum)
959 cd write (iout,'(i3,1pe14.4)') (i,gana(i),i=1,nvar)
964 call var_to_geom(nvar,x)
965 call chainbuild_extconf
966 call etotal(energia1(0))
969 call var_to_geom(nvar,x)
970 call chainbuild_extconf
971 call etotal(energia2(0))
973 gg(i)=(etot2-etot1)/aincr
974 write (iout,*) i,etot1,etot2
977 write (iout,'(/2a)')' Variable Numerical Analytical',
983 else if (i.le.nphi+ntheta) then
986 else if (i.le.nphi+ntheta+nside) then
990 ii=i-(nphi+ntheta+nside)
993 write (iout,'(i3,a,i3,3(1pd16.6))')
994 & i,key,ii,gg(i),gana(i),
995 & 100.0D0*dabs(gg(i)-gana(i))/(dabs(gana(i))+aincr)