& vtot(MAXRES2),Gvec(maxres2,maxres2),Geigen(maxres2)
real*8 odl(max_template,maxdim),sigma_odl(max_template,maxdim),
- & dih(max_template,maxres),sigma_dih(max_template,maxres)
+ & dih(max_template,maxres),sigma_dih(max_template,maxres),
+ & sigma_odlir(max_template,maxdim)
c
c Specification of new variables used in subroutine e_modeller
c modified by FP (Nov.,2014)
& lim_odl,lim_dih,ires_homo,jres_homo,link_start_homo,
& link_end_homo,idihconstr_start_homo,idihconstr_end_homo,
c
-c FP (30/10/2014)
+c FP (30/10/2014,04/03/2015)
c
- & xxtpl,yytpl,zztpl,thetatpl,sigma_theta,sigma_d
+ & xxtpl,yytpl,zztpl,thetatpl,sigma_theta,sigma_d,sigma_odlir
c
common /qmeas/ qfrag,qpair,qinfrag,qinpair,wfrag,wpair,eq_time,
& Ucdfrag,Ucdpair,dUdconst,dUdxconst,dqwol,dxqwol,Uconst,
c------------------------------------------------------------------------------
c LICZENIE WIEZOW Z ROWNANIA ENERGII MODELLERA
subroutine e_modeller(ehomology_constr)
- ehomology_constr=0.0
+ ehomology_constr=0.0d0
write (iout,*) "!!!!!UWAGA, JESTEM W DZIWNEJ PETLI, TEST!!!!!"
return
end
do k=1,constr_homology
distance(k)=odl(k,ii)-dij
c write (iout,*) "distance(",k,") =",distance(k)
+c
+c For Gaussian-type Urestr
+c
distancek(k)=0.5d0*distance(k)**2*sigma_odl(k,ii) ! waga_dist rmvd from Gaussian argument
c write (iout,*) "sigma_odl(",k,ii,") =",sigma_odl(k,ii)
c write (iout,*) "distancek(",k,") =",distancek(k)
c distancek(k)=0.5d0*waga_dist*distance(k)**2*sigma_odl(k,ii)
+c
+c For Lorentzian-type Urestr
+c
+ if (waga_dist.lt.0.0d0) then
+ sigma_odlir(k,ii)=dsqrt(1/sigma_odl(k,ii))
+ distancek(k)=distance(k)**2/(sigma_odlir(k,ii)*
+ & (distance(k)**2+sigma_odlir(k,ii)**2))
+ endif
enddo
min_odl=minval(distancek)
c Nie wiem po co to liczycie jeszcze raz!
c odleg3=-waga_dist(iset)*((distance(i,j,k)**2)/
c & (2*(sigma_odl(i,j,k))**2))
+ if (waga_dist.ge.0.0d0) then
+c
+c For Gaussian-type Urestr
+c
godl(k)=dexp(-distancek(k)+min_odl)
odleg2=odleg2+godl(k)
+c
+c For Lorentzian-type Urestr
+c
+ else
+ odleg2=odleg2+distancek(k)
+ endif
ccc write(iout,779) i,j,k, "odleg2=",odleg2, "odleg3=", odleg3,
ccc & "dEXP(odleg3)=", dEXP(odleg3),"distance(i,j,k)^2=",
write (iout,*) "godl",(godl(k),k=1,constr_homology) ! exponents
write (iout,*) "ii i j",ii,i,j," odleg2",odleg2 ! sum of exps
#endif
- odleg=odleg-dLOG(odleg2/constr_homology)+min_odl
+ if (waga_dist.ge.0.0d0) then
+c
+c For Gaussian-type Urestr
+c
+ odleg=odleg-dLOG(odleg2/constr_homology)+min_odl
+c
+c For Lorentzian-type Urestr
+c
+ else
+ odleg=odleg+odleg2/constr_homology
+ endif
+c
c write (iout,*) "odleg",odleg ! sum of -ln-s
c Gradient
- sum_godl=odleg2
+c
+c For Gaussian-type Urestr
+c
+ if (waga_dist.ge.0.0d0) sum_godl=odleg2
sum_sgodl=0.0d0
do k=1,constr_homology
c godl=dexp(((-(distance(i,j,k)**2)/(2*(sigma_odl(i,j,k))**2))
c & *waga_dist)+min_odl
c sgodl=-godl(k)*distance(k)*sigma_odl(k,ii)*waga_dist
+c
+ if (waga_dist.ge.0.0d0) then
+c For Gaussian-type Urestr
+c
sgodl=-godl(k)*distance(k)*sigma_odl(k,ii) ! waga_dist rmvd
+c
+c For Lorentzian-type Urestr
+c
+ else
+ sgodl=-2*sigma_odlir(k,ii)*(distance(k)/(distance(k)**2+
+ & sigma_odlir(k,ii)**2)**2)
+ endif
sum_sgodl=sum_sgodl+sgodl
c sgodl2=sgodl2+sgodl
c write(iout,*) "constr_homology=",constr_homology
c write(iout,*) i, j, k, "TEST K"
enddo
-
- grad_odl3=waga_homology(iset)*waga_dist
- & *sum_sgodl/(sum_godl*dij)
+ if (waga_dist.ge.0.0d0) then
+c
+c For Gaussian-type Urestr
+c
+ grad_odl3=waga_homology(iset)*waga_dist
+ & *sum_sgodl/(sum_godl*dij)
+c
+c For Lorentzian-type Urestr
+c
+ else
+c Original grad expr modified by analogy w Gaussian-type Urestr grad
+c grad_odl3=-waga_homology(iset)*waga_dist*sum_sgodl
+ grad_odl3=-waga_homology(iset)*waga_dist*
+ & sum_sgodl/(constr_homology*dij)
+ endif
+c
c grad_odl3=sum_sgodl/(sum_godl*dij)
c Addition of energy of theta angle and SC local geom over constr_homologs ref strs
c
c ehomology_constr=odleg+kat
- ehomology_constr=(waga_dist*odleg+waga_angle*kat+waga_theta*Eval
- & +waga_d*Erot)*waga_homology(iset)
+c
+c For Lorentzian-type Urestr
+c
+
+ if (waga_dist.ge.0.0d0) then
+c
+c For Gaussian-type Urestr
+c
+ ehomology_constr=(waga_dist*odleg+waga_angle*kat+
+ & waga_theta*Eval+waga_d*Erot)*waga_homology(iset)
+c write (iout,*) "ehomology_constr=",ehomology_constr
+ else
+c
+c For Lorentzian-type Urestr
+c
+ ehomology_constr=(-waga_dist*odleg+waga_angle*kat+
+ & waga_theta*Eval+waga_d*Erot)*waga_homology(iset)
+c write (iout,*) "ehomology_constr=",ehomology_constr
+ endif
c write (iout,*) "odleg",odleg," kat",kat," Uconst_back",Uconst_back
c write (iout,*) "ehomology_constr",ehomology_constr
c ehomology_constr=odleg+kat+Uconst_back