21 use gbltraj, only: gblini, gbladp, gbladm, gblads, gbladl, gbladg, gbladx, &
26 parameter(mp2=(mp+1)*mp/2)
27 DOUBLE PRECISION :: dpar(mp), dcov(mp2), dpseed(mp2), djac(5,5),daux(15), &
28 ajacp,ajacn,pm2l,pl2m,det
30 dimension clpar(5),dirt(3),dirm(3,2),tmp(5),sarc(100), &
31 dif(2),sig(2),prec(2),ajacp(5,5),ajacn(5,5), &
32 dirz(3),diru(3),dirv(3),pm2l(2,2),pl2m(2,2),beta0(2), &
33 clerr(5),lder(nloc),derlc(2,nloc),thsig(2),thprec(2)
35 DATA dirz / 0.0, 0.0, 1.0 /
44 print *,
' GBLTST ITYPE: ', itype
50 cosl=sqrt(1.0-sinl**2)
76 IF (i <= 5) dpseed(ip)=1.0d0/dble(clerr(i)**2)
94 clpar(k)=clerr(k)*
unrm()
103 ELSE IF (itype == 2)
THEN
105 thsig(2)=theta0/cosl**2
110 thprec(1)=1.0/thsig(1)**2
111 thprec(2)=1.0/thsig(2)**2
115 prec(1)=1.0/sig(1)**2
116 prec(2)=1.0/sig(2)**2
151 IF (mod(i,2) == 0) eps=0.5
153 dirm(2,1)=sqrt(1.0-eps**2)
160 dirm(3,2)=sqrt(1.0-eps**2)
163 pm2l(l,1)= dble(dirm(1,l)*diru(1)+dirm(2,l)*diru(2)+dirm(3,l)*diru(3))
164 pm2l(l,2)= dble(dirm(1,l)*dirv(1)+dirm(2,l)*dirv(2)+dirm(3,l)*dirv(3))
167 det=pm2l(1,1)*pm2l(2,2)-pm2l(1,2)*pm2l(2,1)
168 pl2m(1,1)= pm2l(2,2)/det
169 pl2m(1,2)=-pm2l(1,2)/det
170 pl2m(2,1)=-pm2l(2,1)/det
171 pl2m(2,2)= pm2l(1,1)/det
174 dif(m)=clpar(4)*sngl(pl2m(m,1)) +clpar(5)*sngl(pl2m(m,2))+sig(m)*
unrm()
182 CALL
gbladm(pl2m,dif,prec)
183 IF (ipnt1 == 0) ipnt1=ipnt
196 CALL
gbltjc(itype,step1,bfac,cosl,ajacn)
204 clpar(k)=clpar(k)+sngl(ajacn(k,l))*tmp(l)
214 clpar(2)=clpar(2)+thsig(1)*
unrm()
215 clpar(3)=clpar(3)+thsig(2)*
unrm()
217 CALL
gbltjc(itype,step2,bfac,cosl,ajacn)
225 clpar(k)=clpar(k)+sngl(ajacn(k,l))*tmp(l)
235 CALL
gblfit(
'',mrank,np,ndf,chi2,wls)
237 schi2=schi2+chi2/float(ndf)
240 print *,
' GBLFIT ', mrank, np, ndf, chi2, wls
241 CALL
gblres(ipnt1,dpar,dcov)
242 print *,
' DPAR ', (dpar(k),k=1,np)
243 print *,
' DCOV(loc) '
244 CALL
dbprv(6,dcov,np)
245 CALL
gbll2c(itype,cosl,djac)
246 CALL
dbavat(dcov,djac,daux,5,5)
247 print *,
' DCOV(cvl) '
255 schi2=schi2/float(ntr)
256 print *,
' === <Chi2/ndf> === ', ntr, schi2
262 SUBROUTINE gbltjc(itype,ds,bfac,cosl,ajac)
265 INTEGER,
INTENT(IN) :: itype
266 REAL,
INTENT(IN) :: ds
267 REAL,
INTENT(IN) :: bfac
268 REAL,
INTENT(IN OUT) :: cosl
269 DOUBLE PRECISION,
INTENT(OUT) :: ajac(5,5)
275 ajac(2,1)=-dble(bfac*ds*cosl)
278 ajac(4,1)=-dble(0.5*bfac*ds*ds*cosl)
283 ELSE IF (itype == 2)
THEN
286 ajac(2,1)=-dble(bfac*ds)
289 ajac(4,1)=-dble(0.5*bfac*ds*ds*cosl)
290 ajac(4,2)= dble(ds*cosl)
292 ajac(5,3)= dble(ds*cosl)
298 ajac(3,1)=-dble(bfac*ds)
300 ajac(4,1)=-dble(0.5*bfac*ds*ds*cosl)
301 ajac(4,3)= dble(ds*cosl)
315 INTEGER,
INTENT(IN) :: itype
316 REAL,
INTENT(IN OUT) :: cosl
317 DOUBLE PRECISION,
INTENT(OUT) :: djac(5,5)
330 djac(2,3)=1.0d0/dble(cosl)
333 ELSE IF (itype == 2)
THEN
337 djac(3,2)=dble(cosl)**2
349 CALL random_number(r)
362 ix = 16807* (ix - k1*127773) - k1 * 2836
363 IF (ix < 0) ix = ix + 2147483647
364 unif = ix*4.656612875e-10