33 REAL :: dergb(8),derlc(2),par(8)
35 REAL :: z(nplan),sigma(nplan),sl(nplan),bias(nplan),fone(8),frot(8)
36 DATA sigma/0.0020,0.0020,8*0.0300/
37 DATA sl/5.0,9.0,20.0,25.0,30.0,35.0,40.0,45.0,50.0,55.0/
38 DATA bias/0.0,0.0,+0.1,+0.05,-0.10,+0.05,-0.1,+0.1,-0.05,-0.05/
49 frot(i)=1.0/(sl(i+2)-37.5)
56 slope= 2.0*
urand()-1.0
57 znull=20.0*
urand()-10.0
59 z(i)=znull+slope*sl(i) + bias(i)+sigma(i)*
unorm()
65 IF(i > 2) dergb(i-2)=1.0
66 CALL equloc(dergb,derlc,z(i),sigma(i))
76 parameter(ia=205,ic=29573,im=139968)
78 last=mod(ia*last+ic,im)
79 IF(last == 0) last=mod(ia*last+ic,im)
80 urand=float(last)/float(im)
84 parameter(ia=205,ic=29573,im=139968)
88 last=mod(ia*last+ic,im)
94 SUBROUTINE initgl(nagbar,nalcar,nstd,iprlim)
102 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
103 parameter(mgl=mglobl+mcs)
105 parameter(msymgb =(mglobl*mglobl+mglobl)/2, msym =(mgl*mgl+mgl)/2, &
106 msymlc=(mlocal*mlocal+mlocal)/2, mrecta= mglobl*mlocal, &
107 mglocs= mglobl*mcs, msymcs= (mcs*mcs+mcs)/2 )
108 DOUBLE PRECISION :: cgmat,clmat,clcmat,bgvec,blvec, &
109 corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs, arhs
111 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta), &
112 diag(mgl),bgvec(mgl),blvec(mlocal), &
113 corrm(msymgb),corrv(mglobl),psigm(mglobl), &
114 pparm(mglobl),adercs(mglocs),arhs(mcs), dparm(mglobl), &
115 scdiag(mglobl),summ,scflag(mglobl), &
116 indgb(mglobl),indlc(mlocal),loctot,locrej, &
117 nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51), &
118 nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs, &
119 nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
122 DATA ndr/1,2,5,10,20,50,100/
125 IF(icnlim >= 0)
WRITE(*,199)
129 ' o ooooo o o o oo ooo oo ooo oo '/ &
130 ' o o o o o o o o o o o o o o o o '/ &
131 ' o o o o o o oooo o o oooo o o oooo '/ &
132 ' o o o o o o o ooo o o o o '/ &
133 ' o o o o oo oo oo o oo ooo oo starting'/ &
142 nstdev=max(0,min(nstd,3))
144 IF (nstd > nstdev) cfactr=(float(nstd)/float(nstdev))**2
149 WRITE(*,*)
'Number of global parameters ',nagb
150 WRITE(*,*)
'Number of local parameters ',nalc
151 WRITE(*,*)
' Number of standard deviations ',nstdev
152 WRITE(*,*)
' Initial cut factor ',cfactr
153 WRITE(*,*)
' Number of test printouts ',icnlim
155 IF(nagb > mglobl.OR.nalc > mlocal)
THEN 156 WRITE(*,*)
'Too many parameter - STOP' 159 IF(nstdev /= 0.AND.icnlim >= 0)
THEN 160 WRITE(*,*)
'Final cut corresponds to',nstdev,
' standard deviations.' 161 WRITE(*,*)
'The actual cuts are made in Chisquare/Ndf at:' 163 WRITE(*,101) ndr(i),
chindl(nstdev,ndr(i))
164 101
FORMAT(20x,
'Ndf =',i4,
' Limit =',f8.2)
175 DO i=1,(nagb*nagb+nagb)/2
191 DO i=1,(nalc*nalc+nalc)/2
206 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
207 parameter(mgl=mglobl+mcs)
209 parameter(msymgb =(mglobl*mglobl+mglobl)/2, msym =(mgl*mgl+mgl)/2, &
210 msymlc=(mlocal*mlocal+mlocal)/2, mrecta= mglobl*mlocal, &
211 mglocs= mglobl*mcs, msymcs= (mcs*mcs+mcs)/2 )
212 DOUBLE PRECISION :: cgmat,clmat,clcmat,bgvec,blvec, &
213 corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs, arhs
215 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta), &
216 diag(mgl),bgvec(mgl),blvec(mlocal), &
217 corrm(msymgb),corrv(mglobl),psigm(mglobl), &
218 pparm(mglobl),adercs(mglocs),arhs(mcs), dparm(mglobl), &
219 scdiag(mglobl),summ,scflag(mglobl), &
220 indgb(mglobl),indlc(mlocal),loctot,locrej, &
221 nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51), &
222 nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs, &
223 nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
231 SUBROUTINE parsig(INDEX,sigma)
235 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
236 parameter(mgl=mglobl+mcs)
238 parameter(msymgb =(mglobl*mglobl+mglobl)/2, msym =(mgl*mgl+mgl)/2, &
239 msymlc=(mlocal*mlocal+mlocal)/2, mrecta= mglobl*mlocal, &
240 mglocs= mglobl*mcs, msymcs= (mcs*mcs+mcs)/2 )
241 DOUBLE PRECISION :: cgmat,clmat,clcmat,bgvec,blvec, &
242 corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs, arhs
244 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta), &
245 diag(mgl),bgvec(mgl),blvec(mlocal), &
246 corrm(msymgb),corrv(mglobl),psigm(mglobl), &
247 pparm(mglobl),adercs(mglocs),arhs(mcs), dparm(mglobl), &
248 scdiag(mglobl),summ,scflag(mglobl), &
249 indgb(mglobl),indlc(mlocal),loctot,locrej, &
250 nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51), &
251 nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs, &
252 nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
254 IF(index < 1.OR.index > nagb)
RETURN 255 IF(sigma < 0.0)
RETURN 260 SUBROUTINE parget(INDEX,par,sig)
264 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
265 parameter(mgl=mglobl+mcs)
267 parameter(msymgb =(mglobl*mglobl+mglobl)/2, msym =(mgl*mgl+mgl)/2, &
268 msymlc=(mlocal*mlocal+mlocal)/2, mrecta= mglobl*mlocal, &
269 mglocs= mglobl*mcs, msymcs= (mcs*mcs+mcs)/2 )
270 DOUBLE PRECISION :: cgmat,clmat,clcmat,bgvec,blvec, &
271 corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs, arhs
273 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta), &
274 diag(mgl),bgvec(mgl),blvec(mlocal), &
275 corrm(msymgb),corrv(mglobl),psigm(mglobl), &
276 pparm(mglobl),adercs(mglocs),arhs(mcs), dparm(mglobl), &
277 scdiag(mglobl),summ,scflag(mglobl), &
278 indgb(mglobl),indlc(mlocal),loctot,locrej, &
279 nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51), &
280 nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs, &
281 nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
285 IF(index < 1.OR.index > nagb)
RETURN 294 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
295 parameter(mgl=mglobl+mcs)
297 parameter(msymgb =(mglobl*mglobl+mglobl)/2, msym =(mgl*mgl+mgl)/2, &
298 msymlc=(mlocal*mlocal+mlocal)/2, mrecta= mglobl*mlocal, &
299 mglocs= mglobl*mcs, msymcs= (mcs*mcs+mcs)/2 )
300 DOUBLE PRECISION :: cgmat,clmat,clcmat,bgvec,blvec, &
301 corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs, arhs
303 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta), &
304 diag(mgl),bgvec(mgl),blvec(mlocal), &
305 corrm(msymgb),corrv(mglobl),psigm(mglobl), &
306 pparm(mglobl),adercs(mglocs),arhs(mcs), dparm(mglobl), &
307 scdiag(mglobl),summ,scflag(mglobl), &
308 indgb(mglobl),indlc(mlocal),loctot,locrej, &
309 nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51), &
310 nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs, &
311 nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
313 IF(index < 1.OR.index > nagb)
RETURN 317 SUBROUTINE initun(lun,cutfac)
321 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
322 parameter(mgl=mglobl+mcs)
324 parameter(msymgb =(mglobl*mglobl+mglobl)/2, msym =(mgl*mgl+mgl)/2, &
325 msymlc=(mlocal*mlocal+mlocal)/2, mrecta= mglobl*mlocal, &
326 mglocs= mglobl*mcs, msymcs= (mcs*mcs+mcs)/2 )
327 DOUBLE PRECISION :: cgmat,clmat,clcmat,bgvec,blvec, &
328 corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs, arhs
330 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta), &
331 diag(mgl),bgvec(mgl),blvec(mlocal), &
332 corrm(msymgb),corrv(mglobl),psigm(mglobl), &
333 pparm(mglobl),adercs(mglocs),arhs(mcs), dparm(mglobl), &
334 scdiag(mglobl),summ,scflag(mglobl), &
335 indgb(mglobl),indlc(mlocal),loctot,locrej, &
336 nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51), &
337 nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs, &
338 nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
342 INQUIRE(unit=lun,opened=opn,iostat=ios)
344 stop
'<INITUN: Inquire error>' 348 OPEN(unit=lun,form=
'UNFORMATTED',status=
'SCRATCH',iostat=ios)
350 stop
'<INITUN: Open error>' 352 IF(icnlim >= 0)
WRITE(*,*)
'Scratch file opened' 355 cfactr=max(1.0,cutfac)
356 IF(icnlim >= 0)
WRITE(*,*)
'Initial cut factor is',cfactr
360 SUBROUTINE constf(dercs,rhs)
364 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
365 parameter(mgl=mglobl+mcs)
367 parameter(msymgb =(mglobl*mglobl+mglobl)/2, msym =(mgl*mgl+mgl)/2, &
368 msymlc=(mlocal*mlocal+mlocal)/2, mrecta= mglobl*mlocal, &
369 mglocs= mglobl*mcs, msymcs= (mcs*mcs+mcs)/2 )
370 DOUBLE PRECISION :: cgmat,clmat,clcmat,bgvec,blvec, &
371 corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs, arhs
373 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta), &
374 diag(mgl),bgvec(mgl),blvec(mlocal), &
375 corrm(msymgb),corrv(mglobl),psigm(mglobl), &
376 pparm(mglobl),adercs(mglocs),arhs(mcs), dparm(mglobl), &
377 scdiag(mglobl),summ,scflag(mglobl), &
378 indgb(mglobl),indlc(mlocal),loctot,locrej, &
379 nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51), &
380 nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs, &
381 nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
384 IF(ncs >= mcs) stop
'<INITCS> too many constraints' 386 adercs(nagb*ncs+i)=dercs(i)
392 SUBROUTINE equloc(dergb,derlc,rrmeas,sigma)
401 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
402 parameter(mgl=mglobl+mcs)
404 parameter(msymgb =(mglobl*mglobl+mglobl)/2, msym =(mgl*mgl+mgl)/2, &
405 msymlc=(mlocal*mlocal+mlocal)/2, mrecta= mglobl*mlocal, &
406 mglocs= mglobl*mcs, msymcs= (mcs*mcs+mcs)/2 )
407 DOUBLE PRECISION :: cgmat,clmat,clcmat,bgvec,blvec, &
408 corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs, arhs
410 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta), &
411 diag(mgl),bgvec(mgl),blvec(mlocal), &
412 corrm(msymgb),corrv(mglobl),psigm(mglobl), &
413 pparm(mglobl),adercs(mglocs),arhs(mcs), dparm(mglobl), &
414 scdiag(mglobl),summ,scflag(mglobl), &
415 indgb(mglobl),indlc(mlocal),loctot,locrej, &
416 nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51), &
417 nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs, &
418 nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
420 REAL :: dergb(*),derlc(*)
423 IF(sigma <= 0.0)
THEN 437 IF(derlc(i) /= 0.0)
THEN 446 IF(dergb(i) /= 0.0)
THEN 452 IF(nst+nonzer+2 >= nstore)
THEN 460 IF(derlc(i) /= 0.0)
THEN 471 IF(dergb(i) /= 0.0)
THEN 480 SUBROUTINE zerloc(dergb,derlc)
486 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
487 parameter(mgl=mglobl+mcs)
489 parameter(msymgb =(mglobl*mglobl+mglobl)/2, msym =(mgl*mgl+mgl)/2, &
490 msymlc=(mlocal*mlocal+mlocal)/2, mrecta= mglobl*mlocal, &
491 mglocs= mglobl*mcs, msymcs= (mcs*mcs+mcs)/2 )
492 DOUBLE PRECISION :: cgmat,clmat,clcmat,bgvec,blvec, &
493 corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs, arhs
495 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta), &
496 diag(mgl),bgvec(mgl),blvec(mlocal), &
497 corrm(msymgb),corrv(mglobl),psigm(mglobl), &
498 pparm(mglobl),adercs(mglocs),arhs(mcs), dparm(mglobl), &
499 scdiag(mglobl),summ,scflag(mglobl), &
500 indgb(mglobl),indlc(mlocal),loctot,locrej, &
501 nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51), &
502 nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs, &
503 nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
505 REAL :: dergb(*),derlc(*)
519 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
520 parameter(mgl=mglobl+mcs)
522 parameter(msymgb =(mglobl*mglobl+mglobl)/2, msym =(mgl*mgl+mgl)/2, &
523 msymlc=(mlocal*mlocal+mlocal)/2, mrecta= mglobl*mlocal, &
524 mglocs= mglobl*mcs, msymcs= (mcs*mcs+mcs)/2 )
525 DOUBLE PRECISION :: cgmat,clmat,clcmat,bgvec,blvec, &
526 corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs, arhs
528 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta), &
529 diag(mgl),bgvec(mgl),blvec(mlocal), &
530 corrm(msymgb),corrv(mglobl),psigm(mglobl), &
531 pparm(mglobl),adercs(mglocs),arhs(mcs), dparm(mglobl), &
532 scdiag(mglobl),summ,scflag(mglobl), &
533 indgb(mglobl),indlc(mlocal),loctot,locrej, &
534 nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51), &
535 nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs, &
536 nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim, indnz(mglobl),indbk(mglobl)
541 COMMON / csfspy / nrank, ndf, rms, parloc, dcvloc
549 WRITE(lunit) nst,(indst(i),i=1,nst),(arest(i),i=1,nst)
558 DO i=1,(nalc*nalc+nalc)/2
572 IF(nst <= 1)
GO TO 100
577 IF(ist > nst.OR.indst(ist) == 0)
THEN 580 ELSE IF(jb == 0)
THEN 588 IF(nlnpa(ij) == 0)
THEN 589 rmeas=rmeas-arest(jb+j)*(pparm(ij)+dparm(ij))
591 rmeas=rmeas-arest(jb+j)*dparm(ij)
598 blvec(ij)=blvec(ij)+wght*rmeas*arest(ja+j)
602 clmat(jk)=clmat(jk)+wght*arest(ja+j)*arest(ja+k)
606 IF(ist == nst)
GO TO 21
610 IF(ist <= nst)
GO TO 20
612 21
CALL spminv(clmat,blvec,nalc,nrank,scdiag,scflag)
616 parloc(kk)=sngl(blvec(kk))
622 dcvloc(k1,k2)=clmat(kk)
623 dcvloc(k2,k1)=clmat(kk)
627 IF(icnpr <= icnlim)
THEN 629 WRITE(*,*)
'__________________________________________________' 630 WRITE(*,*)
'Printout of local fit (FITLOC) with rank=',nrank
631 WRITE(*,*)
' Result of local fit: (Index/Parameter/error)' 632 WRITE(*,103) (j,blvec(j),sqrt(clmat((j*j+j/2))),j=1,jb-ja-1)
633 103
FORMAT(2(i6,2g12.4))
643 IF(ist > nst.OR.indst(ist) == 0)
THEN 646 ELSE IF(jb == 0)
THEN 650 IF(icnpr <= icnlim.AND.incrp <= 11)
THEN 655 WRITE(*,*) incrp,
'. equation: ', &
656 'measured value ',arest(ja),
' +-',1.0/sqrt(arest(jb))
658 WRITE(*,*)
' number of derivates (global, local):',ndergl,
',',nderlc
659 WRITE(*,*)
' Global derivatives are: (index/derivative/parvalue)' 660 WRITE(*,101) (indst(jb+j),arest(jb+j), pparm(indst(jb+j)),j=1,ist-jb)
661 101
FORMAT(2(i6,2g12.4))
662 WRITE(*,*)
' Local derivatives are: (index/derivative)' 663 WRITE(*,102) (indst(ja+j),arest(ja+j),j=1,jb-ja-1)
664 102
FORMAT(3(i6,g14.6))
667 WRITE(*,*)
'... (+ further equations)' 674 IF(nlnpa(ij) == 0)
THEN 675 rmeas=rmeas-arest(jb+j)*(pparm(ij)+dparm(ij))
677 rmeas=rmeas-arest(jb+j)*dparm(ij)
684 rmeas=rmeas-arest(ja+j)*blvec(ij)
686 IF(icnpr <= icnlim)
THEN 687 WRITE(*,104) wght*rmeas**2,rmeas
688 104
FORMAT(
' Chi square contribution=',f8.2, &
689 5x,g12.4,
'= residuum')
692 ihbin=1.0+5.0*(rmeas*sqrt(wght)+5.0)
693 IF(ihbin < 1) ihbin=51
694 IF(ihbin > 50) ihbin=51
695 lhist(ihbin)=lhist(ihbin)+1
696 summ=summ+wght*rmeas**2
698 IF(ist == nst)
GO TO 41
702 IF(ist <= nst)
GO TO 40
704 IF(icnpr <= icnlim)
THEN 705 WRITE(*,*)
'Entry number',icnpr
706 WRITE(*,*)
'Final chi square, degrees of freedom',summ,ndf
713 IF(ihbin < 1) ihbin= 1
714 IF(ihbin > 50) ihbin=51
715 mhist(ihbin)=mhist(ihbin)+1
719 IF(nstdev /= 0.AND.ndf > 0)
THEN 720 cutval=
chindl(nstdev,ndf)*cfactr
721 IF(icnpr <= icnlim)
THEN 722 WRITE(*,*)
'Reject if Chisq/Ndf=',rms,
' > ',cutval
724 IF(rms > cutval)
THEN 735 IF(ist > nst.OR.indst(ist) == 0)
THEN 738 ELSE IF(jb == 0)
THEN 746 IF(nlnpa(ij) == 0)
THEN 747 rmeas=rmeas-arest(jb+j)*(pparm(ij)+dparm(ij))
749 rmeas=rmeas-arest(jb+j)*dparm(ij)
757 bgvec(ij)=bgvec(ij)+wght*rmeas*arest(jb+j)
761 cgmat(jk)=cgmat(jk)+wght*arest(jb+j)*arest(jb+k)
772 clcmat(nagbn*nalc+k)=0.0
784 clcmat(jk)=clcmat(jk)+wght*arest(jb+j)*arest(ja+k)
787 IF(ist == nst)
GO TO 70
791 IF(ist <= nst)
GO TO 60
805 70
CALL spavat(clmat,clcmat,corrm,nalc,nagbn)
806 CALL spax(clcmat,blvec,corrv,nagbn,nalc)
810 bgvec(i)=bgvec(i)-corrv(in)
819 cgmat(ij)=cgmat(ij)-corrm(ijn)
824 100
IF(itert <= 1)
THEN 827 ibin=1.0+50.0*float(nst)/float(nstore)
829 khist(ibin)=khist(ibin)+1
831 khist(51)=khist(51)+1
842 CHARACTER (LEN=2) :: patext
845 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
846 parameter(mgl=mglobl+mcs)
848 parameter(msymgb =(mglobl*mglobl+mglobl)/2, msym =(mgl*mgl+mgl)/2, &
849 msymlc=(mlocal*mlocal+mlocal)/2, mrecta= mglobl*mlocal, &
850 mglocs= mglobl*mcs, msymcs= (mcs*mcs+mcs)/2 )
851 DOUBLE PRECISION :: cgmat,clmat,clcmat,bgvec,blvec, &
852 corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs, arhs
854 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta), &
855 diag(mgl),bgvec(mgl),blvec(mlocal), &
856 corrm(msymgb),corrv(mglobl),psigm(mglobl), &
857 pparm(mglobl),adercs(mglocs),arhs(mcs), dparm(mglobl), &
858 scdiag(mglobl),summ,scflag(mglobl), &
859 indgb(mglobl),indlc(mlocal),loctot,locrej, &
860 nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51), &
861 nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs, &
862 nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
864 IF(itert <= 1) itelim=10
868 lthist=lthist+lhist(i)
871 WRITE(*,*)
' Initial residual histogram:', &
872 ' Total',lthist,
' entries with',lhist(51),
' overflows' 873 CALL pxhist(lhist,50,-5.0,+5.0)
882 WRITE(*,*)
'Histogram of used local fit storage:', &
883 ' total',khtot,
' local fits with',khist(51),
' overflows' 885 IF(khist(51) /= 0.AND.icnlim >= 0)
THEN 886 WRITE(*,*)
'Parameter NSTORE to small! Change and rerun!' 889 CALL pxhist(khist,50,0.0,float(nstore))
891 10
IF(icnlim >= 0)
THEN 893 WRITE(*,*)
'... making global fit ...' 900 IF(psigm(i) == 0.0)
THEN 907 ELSE IF(psigm(i) > 0.0)
THEN 908 cgmat(ii)=cgmat(ii)+1.0/psigm(i)**2
918 ii=(nagb*nagb+nagb)/2
922 cgmat(ii+j)=adercs(nagb*(i-1)+j)
923 sum=sum-adercs(nagb*(i-1)+j)*(pparm(j)+dparm(j))
934 CALL spminv(cgmat,bgvec,nvar,nrank,scdiag,scflag)
938 dparm(i)=dparm(i)+bgvec(i)
942 WRITE(*,*)
'The rank defect of the symmetric',nvar,
'-by-',nvar, &
943 ' matrix is ',ndefec,
' (should be zero).' 945 IF(itert == 0.OR.nstdev == 0.OR.itert >= itelim)
GO TO 90
949 WRITE(*,*)
' Total',loctot,
' local fits,',locrej,
' rejected.' 950 WRITE(*,*)
' Histogram of Chisq/Ndf:', &
951 ' Total',nhist,
' entries with',mhist(51),
' overflows' 952 CALL pxhist(mhist,50,0.0,10.0)
963 IF(cfactr /= 1.0)
THEN 965 IF(cfactr < 1.2)
THEN 970 IF(icnlim >= 0)
WRITE(*,107) itert,cfactr
971 107
FORMAT(
' Iteration',i3,
' with cut factor=',f6.2)
976 DO i=1,(nagb*nagb+nagb)/2
980 20
READ(lunit,end=10) nst,(indst(i),i=1,nst),(arest(i),i=1,nst)
984 90
IF(icnlim >= 0)
THEN 986 WRITE(*,*)
' Result of fit for global parameters' 987 WRITE(*,*)
' ===================================' 993 err=sqrt(abs(cgmat(ii)))
994 IF(cgmat((i*i+i)/2) < 0.0) err=-err
996 IF(cgmat(ii)*diag(i) > 0.0)
THEN 998 gcor=sqrt(abs(1.0-1.0/(cgmat(ii)*diag(i))))
1000 IF(i <= 25.OR.nagb-i <= 25)
THEN 1002 IF(nlnpa(i) /= 0) patext=
'nl' 1003 IF(icnlim >= 0)
WRITE(*,102) i,patext, &
1004 pparm(i),pparm(i)+dparm(i),dparm(i),bgvec(i),err,gcor
1006 par(i)=pparm(i)+dparm(i)
1009 IF(i == 1)
WRITE(*,*)
' ' 1012 ppp=pparm(j)+dparm(j)
1013 sum=sum+ppp*adercs(nagb*(i-1)+j)
1016 WRITE(*,106) i,sum,arhs(i),sum-arhs(i)
1018 IF(icnlim >= 0)
THEN 1020 WRITE(*,*)
' Total',loctot,
' local fits,',locrej,
' rejected.' 1021 WRITE(*,*)
' Histogram of Chisq/Ndf:', &
1022 ' Total',nhist,
' entries with',mhist(51),
' overflows' 1023 CALL pxhist(mhist,50,0.0,10.0)
1027 lthist=lthist+lhist(i)
1029 IF(icnlim >= 0)
THEN 1030 WRITE(*,*)
' Residual histogram:', &
1031 ' Total',lthist,
' entries with',lhist(51),
' overflows' 1032 CALL pxhist(lhist,50,-5.0,+5.0)
1038 ' o ooooo o o o oo ooo oo ooo oo '/ &
1039 ' o o o o o o o o o o o o o o o o '/ &
1040 ' o o o o o o oooo o o oooo o o oooo '/ &
1041 ' o o o o o o o ooo o o o o '/ &
1042 ' o o o o oo oo oo o oo ooo oo ending.'/ &
1044 101
FORMAT(1x,
' I initial final differ', &
1045 ' lastcor Error glcor'/ &
1046 1x,
' --- ----------- ----------- -----------', &
1047 ' ----------- -------- -----')
1048 102
FORMAT(1x,i4,1x,a2,1x,4f12.5,f9.5,f6.3)
1049 106
FORMAT(
' Constraint',i2,
' Sum - RHS =',g12.5,
' -',g12.5,
' = ',g12.5)
1056 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
1057 parameter(mgl=mglobl+mcs)
1059 parameter(msymgb =(mglobl*mglobl+mglobl)/2, msym =(mgl*mgl+mgl)/2, &
1060 msymlc=(mlocal*mlocal+mlocal)/2, mrecta= mglobl*mlocal, &
1061 mglocs= mglobl*mcs, msymcs= (mcs*mcs+mcs)/2 )
1062 DOUBLE PRECISION :: cgmat,clmat,clcmat,bgvec,blvec, &
1063 corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs, arhs
1065 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta), &
1066 diag(mgl),bgvec(mgl),blvec(mlocal), &
1067 corrm(msymgb),corrv(mglobl),psigm(mglobl), &
1068 pparm(mglobl),adercs(mglocs),arhs(mcs), dparm(mglobl), &
1069 scdiag(mglobl),summ,scflag(mglobl), &
1070 indgb(mglobl),indlc(mlocal),loctot,locrej, &
1071 nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51), &
1072 nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs, &
1073 nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
1076 IF(i <= 0.OR.i > nagb)
RETURN 1078 errpar=sqrt(abs(cgmat(ii)))
1086 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
1087 parameter(mgl=mglobl+mcs)
1089 parameter(msymgb =(mglobl*mglobl+mglobl)/2, msym =(mgl*mgl+mgl)/2, &
1090 msymlc=(mlocal*mlocal+mlocal)/2, mrecta= mglobl*mlocal, &
1091 mglocs= mglobl*mcs, msymcs= (mcs*mcs+mcs)/2 )
1092 DOUBLE PRECISION :: cgmat,clmat,clcmat,bgvec,blvec, &
1093 corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs, arhs
1095 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta), &
1096 diag(mgl),bgvec(mgl),blvec(mlocal), &
1097 corrm(msymgb),corrv(mglobl),psigm(mglobl), &
1098 pparm(mglobl),adercs(mglocs),arhs(mcs), dparm(mglobl), &
1099 scdiag(mglobl),summ,scflag(mglobl), &
1100 indgb(mglobl),indlc(mlocal),loctot,locrej, &
1101 nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51), &
1102 nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs, &
1103 nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
1106 IF(i <= 0.OR.i > nagb)
RETURN 1107 IF(j <= 0.OR.j > nagb)
RETURN 1112 ij=(k*k-k)/2+min(i,j)
1113 err=sqrt(abs(cgmat(ii)*cgmat(jj)))
1114 IF(err /= 0.0)
corpar=cgmat(ij)/err
1120 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
1121 parameter(mgl=mglobl+mcs)
1123 parameter(msymgb =(mglobl*mglobl+mglobl)/2, msym =(mgl*mgl+mgl)/2, &
1124 msymlc=(mlocal*mlocal+mlocal)/2, mrecta= mglobl*mlocal, &
1125 mglocs= mglobl*mcs, msymcs= (mcs*mcs+mcs)/2 )
1126 DOUBLE PRECISION :: cgmat,clmat,clcmat,bgvec,blvec, &
1127 corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs, arhs
1129 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta), &
1130 diag(mgl),bgvec(mgl),blvec(mlocal), &
1131 corrm(msymgb),corrv(mglobl),psigm(mglobl), &
1132 pparm(mglobl),adercs(mglocs),arhs(mcs), dparm(mglobl), &
1133 scdiag(mglobl),summ,scflag(mglobl), &
1134 indgb(mglobl),indlc(mlocal),loctot,locrej, &
1135 nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51), &
1136 nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs, &
1137 nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
1139 CHARACTER (LEN=2) :: patext
1143 WRITE(lup,*)
' Result of fit for global parameters' 1144 WRITE(lup,*)
' ===================================' 1149 err=sqrt(abs(cgmat(ii)))
1150 IF(cgmat(ii) < 0.0) err=-err
1152 IF(cgmat(ii)*diag(i) > 0.0)
THEN 1154 gcor=sqrt(abs(1.0-1.0/(cgmat(ii)*diag(i))))
1157 IF(nlnpa(i) /= 0) patext=
'nl' 1158 WRITE(lup,102) i,patext, &
1159 pparm(i),pparm(i)+dparm(i),dparm(i),bgvec(i),err,gcor
1161 101
FORMAT(1x,
' I initial final differ', &
1162 ' lastcor Error glcor'/ &
1163 1x,
' --- ----------- ----------- -----------', &
1164 ' ----------- -------- -----')
1165 102
FORMAT(1x,i4,1x,a2,1x,4f12.5,f9.5,f6.3)
subroutine initgl(NAGBAR, NALCAR, NSTD, IPRLIM)
subroutine parget(INDEX, PAR, SIG)
subroutine initun(LUN, CUTFAC)
subroutine parsig(INDEX, SIGMA)
real(mps) function chindl(n, nd)
Chi2/ndf cuts.
subroutine zerloc(DERGB, DERLC)
subroutine constf(DERCS, RHS)
subroutine equloc(DERGB, DERLC, RRMEAS, SIGMA)