26 REAL DERGB(8),DERLC(2),PAR(8)
28 REAL Z(nplan),SIGMA(nplan),SL(nplan),BIAS(nplan),FONE(8),FROT(8)
29 DATA sigma/0.0020,0.0020,8*0.0300/
30 DATA sl/5.0,9.0,20.0,25.0,30.0,35.0,40.0,45.0,50.0,55.0/
31 DATA bias/0.0,0.0,+0.1,+0.05,-0.10,+0.05,-0.1,+0.1,-0.05,-0.05/
42 frot(i)=1.0/(sl(i+2)-37.5)
49 slope= 2.0*
urand()-1.0
50 znull=20.0*
urand()-10.0
52 z(i)=znull+slope*sl(i) + bias(i)+sigma(i)*
unorm()
58 IF(i.GT.2) dergb(i-2)=1.0
59 CALL equloc(dergb,derlc,z(i),sigma(i))
68 parameter(ia=205,ic=29573,im=139968)
70 last=mod(ia*last+ic,im)
71 IF(last.EQ.0) last=mod(ia*last+ic,im)
72 urand=float(last)/float(im)
76 parameter(ia=205,ic=29573,im=139968)
80 last=mod(ia*last+ic,im)
86 SUBROUTINE initgl(NAGBAR,NALCAR,NSTD,IPRLIM)
94 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
95 parameter(mgl=mglobl+mcs)
97 parameter(msymgb =(mglobl*mglobl+mglobl)/2,
98 + msym =(mgl*mgl+mgl)/2,
99 + msymlc=(mlocal*mlocal+mlocal)/2,
100 + mrecta= mglobl*mlocal,
101 + mglocs= mglobl*mcs,
102 + msymcs= (mcs*mcs+mcs)/2 )
103 DOUBLE PRECISION CGMAT,CLMAT,CLCMAT,BGVEC,BLVEC,
104 + corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs,
107 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta),
108 + diag(mgl),bgvec(mgl),blvec(mlocal),
109 + corrm(msymgb),corrv(mglobl),psigm(mglobl),
110 + pparm(mglobl),adercs(mglocs),arhs(mcs),
112 + scdiag(mglobl),summ,scflag(mglobl),
113 + indgb(mglobl),indlc(mlocal),loctot,locrej,
114 + nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51),
115 + nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs,
116 + nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
119 DATA ndr/1,2,5,10,20,50,100/
122 IF(icnlim.GE.0)
WRITE(*,199)
127 +
' o ooooo o o o oo ooo oo ooo oo '/
128 +
' o o o o o o o o o o o o o o o o '/
129 +
' o o o o o o oooo o o oooo o o oooo '/
130 +
' o o o o o o o ooo o o o o '/
131 +
' o o o o oo oo oo o oo ooo oo starting'/
140 nstdev=max(0,min(nstd,3))
142 IF (nstd.GT.nstdev) cfactr=(float(nstd)/float(nstdev))**2
147 WRITE(*,*)
'Number of global parameters ',nagb
148 WRITE(*,*)
'Number of local parameters ',nalc
149 WRITE(*,*)
' Number of standard deviations ',nstdev
150 WRITE(*,*)
' Initial cut factor ',cfactr
151 WRITE(*,*)
' Number of test printouts ',icnlim
153 IF(nagb.GT.mglobl.OR.nalc.GT.mlocal)
THEN 154 WRITE(*,*)
'Too many parameter - STOP' 157 IF(nstdev.NE.0.AND.icnlim.GE.0)
THEN 158 WRITE(*,*)
'Final cut corresponds to',nstdev,
159 +
' standard deviations.' 160 WRITE(*,*)
'The actual cuts are made in Chisquare/Ndf at:' 162 WRITE(*,101) ndr(i),
chindl(nstdev,ndr(i))
163 101
FORMAT(20x,
'Ndf =',i4,
' Limit =',f8.2)
174 DO i=1,(nagb*nagb+nagb)/2
190 DO i=1,(nalc*nalc+nalc)/2
205 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
206 parameter(mgl=mglobl+mcs)
208 parameter(msymgb =(mglobl*mglobl+mglobl)/2,
209 + msym =(mgl*mgl+mgl)/2,
210 + msymlc=(mlocal*mlocal+mlocal)/2,
211 + mrecta= mglobl*mlocal,
212 + mglocs= mglobl*mcs,
213 + msymcs= (mcs*mcs+mcs)/2 )
214 DOUBLE PRECISION CGMAT,CLMAT,CLCMAT,BGVEC,BLVEC,
215 + corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs,
218 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta),
219 + diag(mgl),bgvec(mgl),blvec(mlocal),
220 + corrm(msymgb),corrv(mglobl),psigm(mglobl),
221 + pparm(mglobl),adercs(mglocs),arhs(mcs),
223 + scdiag(mglobl),summ,scflag(mglobl),
224 + indgb(mglobl),indlc(mlocal),loctot,locrej,
225 + nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51),
226 + nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs,
227 + nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
235 SUBROUTINE parsig(INDEX,SIGMA)
239 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
240 parameter(mgl=mglobl+mcs)
242 parameter(msymgb =(mglobl*mglobl+mglobl)/2,
243 + msym =(mgl*mgl+mgl)/2,
244 + msymlc=(mlocal*mlocal+mlocal)/2,
245 + mrecta= mglobl*mlocal,
246 + mglocs= mglobl*mcs,
247 + msymcs= (mcs*mcs+mcs)/2 )
248 DOUBLE PRECISION CGMAT,CLMAT,CLCMAT,BGVEC,BLVEC,
249 + corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs,
252 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta),
253 + diag(mgl),bgvec(mgl),blvec(mlocal),
254 + corrm(msymgb),corrv(mglobl),psigm(mglobl),
255 + pparm(mglobl),adercs(mglocs),arhs(mcs),
257 + scdiag(mglobl),summ,scflag(mglobl),
258 + indgb(mglobl),indlc(mlocal),loctot,locrej,
259 + nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51),
260 + nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs,
261 + nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
263 IF(index.LT.1.OR.index.GT.nagb)
RETURN 264 IF(sigma.LT.0.0)
RETURN 269 SUBROUTINE parget(INDEX,PAR,SIG)
273 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
274 parameter(mgl=mglobl+mcs)
276 parameter(msymgb =(mglobl*mglobl+mglobl)/2,
277 + msym =(mgl*mgl+mgl)/2,
278 + msymlc=(mlocal*mlocal+mlocal)/2,
279 + mrecta= mglobl*mlocal,
280 + mglocs= mglobl*mcs,
281 + msymcs= (mcs*mcs+mcs)/2 )
282 DOUBLE PRECISION CGMAT,CLMAT,CLCMAT,BGVEC,BLVEC,
283 + corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs,
286 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta),
287 + diag(mgl),bgvec(mgl),blvec(mlocal),
288 + corrm(msymgb),corrv(mglobl),psigm(mglobl),
289 + pparm(mglobl),adercs(mglocs),arhs(mcs),
291 + scdiag(mglobl),summ,scflag(mglobl),
292 + indgb(mglobl),indlc(mlocal),loctot,locrej,
293 + nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51),
294 + nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs,
295 + nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
299 IF(index.LT.1.OR.index.GT.nagb)
RETURN 308 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
309 parameter(mgl=mglobl+mcs)
311 parameter(msymgb =(mglobl*mglobl+mglobl)/2,
312 + msym =(mgl*mgl+mgl)/2,
313 + msymlc=(mlocal*mlocal+mlocal)/2,
314 + mrecta= mglobl*mlocal,
315 + mglocs= mglobl*mcs,
316 + msymcs= (mcs*mcs+mcs)/2 )
317 DOUBLE PRECISION CGMAT,CLMAT,CLCMAT,BGVEC,BLVEC,
318 + corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs,
321 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta),
322 + diag(mgl),bgvec(mgl),blvec(mlocal),
323 + corrm(msymgb),corrv(mglobl),psigm(mglobl),
324 + pparm(mglobl),adercs(mglocs),arhs(mcs),
326 + scdiag(mglobl),summ,scflag(mglobl),
327 + indgb(mglobl),indlc(mlocal),loctot,locrej,
328 + nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51),
329 + nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs,
330 + nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
332 IF(index.LT.1.OR.index.GT.nagb)
RETURN 336 SUBROUTINE initun(LUN,CUTFAC)
340 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
341 parameter(mgl=mglobl+mcs)
343 parameter(msymgb =(mglobl*mglobl+mglobl)/2,
344 + msym =(mgl*mgl+mgl)/2,
345 + msymlc=(mlocal*mlocal+mlocal)/2,
346 + mrecta= mglobl*mlocal,
347 + mglocs= mglobl*mcs,
348 + msymcs= (mcs*mcs+mcs)/2 )
349 DOUBLE PRECISION CGMAT,CLMAT,CLCMAT,BGVEC,BLVEC,
350 + corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs,
353 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta),
354 + diag(mgl),bgvec(mgl),blvec(mlocal),
355 + corrm(msymgb),corrv(mglobl),psigm(mglobl),
356 + pparm(mglobl),adercs(mglocs),arhs(mcs),
358 + scdiag(mglobl),summ,scflag(mglobl),
359 + indgb(mglobl),indlc(mlocal),loctot,locrej,
360 + nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51),
361 + nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs,
362 + nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
366 INQUIRE(unit=lun,opened=opn,iostat=ios)
368 stop
'<INITUN: Inquire error>' 372 OPEN(unit=lun,form=
'UNFORMATTED',status=
'SCRATCH',iostat=ios)
374 stop
'<INITUN: Open error>' 376 IF(icnlim.GE.0)
WRITE(*,*)
'Scratch file opened' 379 cfactr=max(1.0,cutfac)
380 IF(icnlim.GE.0)
WRITE(*,*)
'Initial cut factor is',cfactr
384 SUBROUTINE constf(DERCS,RHS)
388 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
389 parameter(mgl=mglobl+mcs)
391 parameter(msymgb =(mglobl*mglobl+mglobl)/2,
392 + msym =(mgl*mgl+mgl)/2,
393 + msymlc=(mlocal*mlocal+mlocal)/2,
394 + mrecta= mglobl*mlocal,
395 + mglocs= mglobl*mcs,
396 + msymcs= (mcs*mcs+mcs)/2 )
397 DOUBLE PRECISION CGMAT,CLMAT,CLCMAT,BGVEC,BLVEC,
398 + corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs,
401 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta),
402 + diag(mgl),bgvec(mgl),blvec(mlocal),
403 + corrm(msymgb),corrv(mglobl),psigm(mglobl),
404 + pparm(mglobl),adercs(mglocs),arhs(mcs),
406 + scdiag(mglobl),summ,scflag(mglobl),
407 + indgb(mglobl),indlc(mlocal),loctot,locrej,
408 + nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51),
409 + nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs,
410 + nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
413 IF(ncs.GE.mcs) stop
'<INITCS> too many constraints' 415 adercs(nagb*ncs+i)=dercs(i)
421 SUBROUTINE equloc(DERGB,DERLC,RRMEAS,SIGMA)
430 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
431 parameter(mgl=mglobl+mcs)
433 parameter(msymgb =(mglobl*mglobl+mglobl)/2,
434 + msym =(mgl*mgl+mgl)/2,
435 + msymlc=(mlocal*mlocal+mlocal)/2,
436 + mrecta= mglobl*mlocal,
437 + mglocs= mglobl*mcs,
438 + msymcs= (mcs*mcs+mcs)/2 )
439 DOUBLE PRECISION CGMAT,CLMAT,CLCMAT,BGVEC,BLVEC,
440 + corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs,
443 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta),
444 + diag(mgl),bgvec(mgl),blvec(mlocal),
445 + corrm(msymgb),corrv(mglobl),psigm(mglobl),
446 + pparm(mglobl),adercs(mglocs),arhs(mcs),
448 + scdiag(mglobl),summ,scflag(mglobl),
449 + indgb(mglobl),indlc(mlocal),loctot,locrej,
450 + nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51),
451 + nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs,
452 + nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
454 REAL DERGB(*),DERLC(*)
457 IF(sigma.LE.0.0)
THEN 471 IF(derlc(i).NE.0.0)
THEN 480 IF(dergb(i).NE.0.0)
THEN 486 IF(nst+nonzer+2.GE.nstore)
THEN 494 IF(derlc(i).NE.0.0)
THEN 505 IF(dergb(i).NE.0.0)
THEN 514 SUBROUTINE zerloc(DERGB,DERLC)
520 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
521 parameter(mgl=mglobl+mcs)
523 parameter(msymgb =(mglobl*mglobl+mglobl)/2,
524 + msym =(mgl*mgl+mgl)/2,
525 + msymlc=(mlocal*mlocal+mlocal)/2,
526 + mrecta= mglobl*mlocal,
527 + mglocs= mglobl*mcs,
528 + msymcs= (mcs*mcs+mcs)/2 )
529 DOUBLE PRECISION CGMAT,CLMAT,CLCMAT,BGVEC,BLVEC,
530 + corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs,
533 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta),
534 + diag(mgl),bgvec(mgl),blvec(mlocal),
535 + corrm(msymgb),corrv(mglobl),psigm(mglobl),
536 + pparm(mglobl),adercs(mglocs),arhs(mcs),
538 + scdiag(mglobl),summ,scflag(mglobl),
539 + indgb(mglobl),indlc(mlocal),loctot,locrej,
540 + nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51),
541 + nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs,
542 + nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
544 REAL DERGB(*),DERLC(*)
558 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
559 parameter(mgl=mglobl+mcs)
561 parameter(msymgb =(mglobl*mglobl+mglobl)/2,
562 + msym =(mgl*mgl+mgl)/2,
563 + msymlc=(mlocal*mlocal+mlocal)/2,
564 + mrecta= mglobl*mlocal,
565 + mglocs= mglobl*mcs,
566 + msymcs= (mcs*mcs+mcs)/2 )
567 DOUBLE PRECISION CGMAT,CLMAT,CLCMAT,BGVEC,BLVEC,
568 + corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs,
571 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta),
572 + diag(mgl),bgvec(mgl),blvec(mlocal),
573 + corrm(msymgb),corrv(mglobl),psigm(mglobl),
574 + pparm(mglobl),adercs(mglocs),arhs(mcs),
576 + scdiag(mglobl),summ,scflag(mglobl),
577 + indgb(mglobl),indlc(mlocal),loctot,locrej,
578 + nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51),
579 + nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs,
580 + nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim,
581 + indnz(mglobl),indbk(mglobl)
586 COMMON / csfspy / nrank, ndf, rms, parloc, dcvloc
594 WRITE(lunit) nst,(indst(i),i=1,nst),(arest(i),i=1,nst)
603 DO i=1,(nalc*nalc+nalc)/2
617 IF(nst.LE.1)
GOTO 100
622 IF(ist.GT.nst.OR.indst(ist).EQ.0)
THEN 625 ELSE IF(jb.EQ.0)
THEN 633 IF(nlnpa(ij).EQ.0)
THEN 634 rmeas=rmeas-arest(jb+j)*(pparm(ij)+dparm(ij))
636 rmeas=rmeas-arest(jb+j)*dparm(ij)
643 blvec(ij)=blvec(ij)+wght*rmeas*arest(ja+j)
647 clmat(jk)=clmat(jk)+wght*arest(ja+j)*arest(ja+k)
651 IF(ist.EQ.nst)
GOTO 21
655 IF(ist.LE.nst)
GOTO 20
657 21
CALL spminv(clmat,blvec,nalc,nrank,scdiag,scflag)
661 parloc(kk)=sngl(blvec(kk))
667 dcvloc(k1,k2)=clmat(kk)
668 dcvloc(k2,k1)=clmat(kk)
672 IF(icnpr.LE.icnlim)
THEN 674 WRITE(*,*)
'__________________________________________________' 675 WRITE(*,*)
'Printout of local fit (FITLOC) with rank=',nrank
676 WRITE(*,*)
' Result of local fit: (Index/Parameter/error)' 677 WRITE(*,103) (j,blvec(j),sqrt(clmat((j*j+j/2))),j=1,jb-ja-1)
678 103
FORMAT(2(i6,2g12.4))
688 IF(ist.GT.nst.OR.indst(ist).EQ.0)
THEN 691 ELSE IF(jb.EQ.0)
THEN 695 IF(icnpr.LE.icnlim.AND.incrp.LE.11)
THEN 700 WRITE(*,*) incrp,
'. equation: ',
701 +
'measured value ',arest(ja),
' +-',1.0/sqrt(arest(jb))
704 +
' number of derivates (global, local):',ndergl,
',',nderlc
706 +
' Global derivatives are: (index/derivative/parvalue)' 707 WRITE(*,101) (indst(jb+j),arest(jb+j),
708 + pparm(indst(jb+j)),j=1,ist-jb)
709 101
FORMAT(2(i6,2g12.4))
711 +
' Local derivatives are: (index/derivative)' 712 WRITE(*,102) (indst(ja+j),arest(ja+j),j=1,jb-ja-1)
713 102
FORMAT(3(i6,g14.6))
716 WRITE(*,*)
'... (+ further equations)' 723 IF(nlnpa(ij).EQ.0)
THEN 724 rmeas=rmeas-arest(jb+j)*(pparm(ij)+dparm(ij))
726 rmeas=rmeas-arest(jb+j)*dparm(ij)
733 rmeas=rmeas-arest(ja+j)*blvec(ij)
735 IF(icnpr.LE.icnlim)
THEN 736 WRITE(*,104) wght*rmeas**2,rmeas
737 104
FORMAT(
' Chi square contribution=',f8.2,
738 + 5x,g12.4,
'= residuum')
741 ihbin=1.0+5.0*(rmeas*sqrt(wght)+5.0)
742 IF(ihbin.LT. 1) ihbin=51
743 IF(ihbin.GT.50) ihbin=51
744 lhist(ihbin)=lhist(ihbin)+1
745 summ=summ+wght*rmeas**2
747 IF(ist.EQ.nst)
GOTO 41
751 IF(ist.LE.nst)
GOTO 40
753 IF(icnpr.LE.icnlim)
THEN 754 WRITE(*,*)
'Entry number',icnpr
755 WRITE(*,*)
'Final chi square, degrees of freedom',summ,ndf
762 IF(ihbin.LT. 1) ihbin= 1
763 IF(ihbin.GT.50) ihbin=51
764 mhist(ihbin)=mhist(ihbin)+1
768 IF(nstdev.NE.0.AND.ndf.GT.0)
THEN 769 cutval=
chindl(nstdev,ndf)*cfactr
770 IF(icnpr.LE.icnlim)
THEN 771 WRITE(*,*)
'Reject if Chisq/Ndf=',rms,
' > ',cutval
773 IF(rms.GT.cutval)
THEN 784 IF(ist.GT.nst.OR.indst(ist).EQ.0)
THEN 787 ELSE IF(jb.EQ.0)
THEN 795 IF(nlnpa(ij).EQ.0)
THEN 796 rmeas=rmeas-arest(jb+j)*(pparm(ij)+dparm(ij))
798 rmeas=rmeas-arest(jb+j)*dparm(ij)
806 bgvec(ij)=bgvec(ij)+wght*rmeas*arest(jb+j)
810 cgmat(jk)=cgmat(jk)+wght*arest(jb+j)*arest(jb+k)
821 clcmat(nagbn*nalc+k)=0.0
833 clcmat(jk)=clcmat(jk)+wght*arest(jb+j)*arest(ja+k)
836 IF(ist.EQ.nst)
GOTO 70
840 IF(ist.LE.nst)
GOTO 60
854 70
CALL spavat(clmat,clcmat,corrm,nalc,nagbn)
855 CALL spax(clcmat,blvec,corrv,nagbn,nalc)
859 bgvec(i)=bgvec(i)-corrv(in)
868 cgmat(ij)=cgmat(ij)-corrm(ijn)
873 100
IF(itert.LE.1)
THEN 876 ibin=1.0+50.0*float(nst)/float(nstore)
878 khist(ibin)=khist(ibin)+1
880 khist(51)=khist(51)+1
894 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
895 parameter(mgl=mglobl+mcs)
897 parameter(msymgb =(mglobl*mglobl+mglobl)/2,
898 + msym =(mgl*mgl+mgl)/2,
899 + msymlc=(mlocal*mlocal+mlocal)/2,
900 + mrecta= mglobl*mlocal,
901 + mglocs= mglobl*mcs,
902 + msymcs= (mcs*mcs+mcs)/2 )
903 DOUBLE PRECISION CGMAT,CLMAT,CLCMAT,BGVEC,BLVEC,
904 + corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs,
907 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta),
908 + diag(mgl),bgvec(mgl),blvec(mlocal),
909 + corrm(msymgb),corrv(mglobl),psigm(mglobl),
910 + pparm(mglobl),adercs(mglocs),arhs(mcs),
912 + scdiag(mglobl),summ,scflag(mglobl),
913 + indgb(mglobl),indlc(mlocal),loctot,locrej,
914 + nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51),
915 + nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs,
916 + nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
918 IF(itert.LE.1) itelim=10
922 lthist=lthist+lhist(i)
925 WRITE(*,*)
' Initial residual histogram:',
926 +
' Total',lthist,
' entries with',lhist(51),
928 CALL pxhist(lhist,50,-5.0,+5.0)
937 WRITE(*,*)
'Histogram of used local fit storage:',
938 +
' total',khtot,
' local fits with',khist(51),
941 IF(khist(51).NE.0.AND.icnlim.GE.0)
THEN 942 WRITE(*,*)
'Parameter NSTORE to small! Change and rerun!' 945 CALL pxhist(khist,50,0.0,float(nstore))
947 10
IF(icnlim.GE.0)
THEN 949 WRITE(*,*)
'... making global fit ...' 956 IF(psigm(i).EQ.0.0)
THEN 963 ELSE IF(psigm(i).GT.0.0)
THEN 964 cgmat(ii)=cgmat(ii)+1.0/psigm(i)**2
974 ii=(nagb*nagb+nagb)/2
978 cgmat(ii+j)=adercs(nagb*(i-1)+j)
979 sum=sum-adercs(nagb*(i-1)+j)*(pparm(j)+dparm(j))
990 CALL spminv(cgmat,bgvec,nvar,nrank,scdiag,scflag)
994 dparm(i)=dparm(i)+bgvec(i)
998 WRITE(*,*)
'The rank defect of the symmetric',nvar,
'-by-',nvar,
999 +
' matrix is ',ndefec,
' (should be zero).' 1001 IF(itert.EQ.0.OR.nstdev.EQ.0.OR.itert.GE.itelim)
GOTO 90
1003 IF(icnlim.GE.0)
THEN 1005 WRITE(*,*)
' Total',loctot,
' local fits,',locrej,
' rejected.' 1006 WRITE(*,*)
' Histogram of Chisq/Ndf:',
1007 +
' Total',nhist,
' entries with',mhist(51),
1009 CALL pxhist(mhist,50,0.0,10.0)
1020 IF(cfactr.NE.1.0)
THEN 1022 IF(cfactr.LT.1.2)
THEN 1027 IF(icnlim.GE.0)
WRITE(*,107) itert,cfactr
1028 107
FORMAT(
' Iteration',i3,
' with cut factor=',f6.2)
1033 DO i=1,(nagb*nagb+nagb)/2
1037 20
READ(lunit,end=10) nst,(indst(i),i=1,nst),(arest(i),i=1,nst)
1041 90
IF(icnlim.GE.0)
THEN 1043 WRITE(*,*)
' Result of fit for global parameters' 1044 WRITE(*,*)
' ===================================' 1050 err=sqrt(abs(cgmat(ii)))
1051 IF(cgmat((i*i+i)/2).LT.0.0) err=-err
1053 IF(cgmat(ii)*diag(i).GT.0.0)
THEN 1055 gcor=sqrt(abs(1.0-1.0/(cgmat(ii)*diag(i))))
1057 IF(i.LE.25.OR.nagb-i.LE.25)
THEN 1059 IF(nlnpa(i).NE.0) patext=
'nl' 1060 IF(icnlim.GE.0)
WRITE(*,102) i,patext,
1061 + pparm(i),pparm(i)+dparm(i),dparm(i),bgvec(i),err,gcor
1063 par(i)=pparm(i)+dparm(i)
1066 IF(i.EQ.1)
WRITE(*,*)
' ' 1069 ppp=pparm(j)+dparm(j)
1070 sum=sum+ppp*adercs(nagb*(i-1)+j)
1073 WRITE(*,106) i,sum,arhs(i),sum-arhs(i)
1075 IF(icnlim.GE.0)
THEN 1077 WRITE(*,*)
' Total',loctot,
' local fits,',locrej,
' rejected.' 1078 WRITE(*,*)
' Histogram of Chisq/Ndf:',
1079 +
' Total',nhist,
' entries with',mhist(51),
1081 CALL pxhist(mhist,50,0.0,10.0)
1085 lthist=lthist+lhist(i)
1087 IF(icnlim.GE.0)
THEN 1088 WRITE(*,*)
' Residual histogram:',
1089 +
' Total',lthist,
' entries with',lhist(51),
1091 CALL pxhist(lhist,50,-5.0,+5.0)
1098 +
' o ooooo o o o oo ooo oo ooo oo '/
1099 +
' o o o o o o o o o o o o o o o o '/
1100 +
' o o o o o o oooo o o oooo o o oooo '/
1101 +
' o o o o o o o ooo o o o o '/
1102 +
' o o o o oo oo oo o oo ooo oo ending.'/
1104 101
FORMAT(1x,
' I initial final differ',
1105 +
' lastcor Error glcor'/
1106 + 1x,
' --- ----------- ----------- -----------',
1107 +
' ----------- -------- -----')
1108 102
FORMAT(1x,i4,1x,a2,1x,4f12.5,f9.5,f6.3)
1109 106
FORMAT(
' Constraint',i2,
' Sum - RHS =',g12.5,
' -',g12.5,
1117 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
1118 parameter(mgl=mglobl+mcs)
1120 parameter(msymgb =(mglobl*mglobl+mglobl)/2,
1121 + msym =(mgl*mgl+mgl)/2,
1122 + msymlc=(mlocal*mlocal+mlocal)/2,
1123 + mrecta= mglobl*mlocal,
1124 + mglocs= mglobl*mcs,
1125 + msymcs= (mcs*mcs+mcs)/2 )
1126 DOUBLE PRECISION CGMAT,CLMAT,CLCMAT,BGVEC,BLVEC,
1127 + corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs,
1130 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta),
1131 + diag(mgl),bgvec(mgl),blvec(mlocal),
1132 + corrm(msymgb),corrv(mglobl),psigm(mglobl),
1133 + pparm(mglobl),adercs(mglocs),arhs(mcs),
1135 + scdiag(mglobl),summ,scflag(mglobl),
1136 + indgb(mglobl),indlc(mlocal),loctot,locrej,
1137 + nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51),
1138 + nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs,
1139 + nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
1142 IF(i.LE.0.OR.i.GT.nagb)
RETURN 1144 errpar=sqrt(abs(cgmat(ii)))
1152 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
1153 parameter(mgl=mglobl+mcs)
1155 parameter(msymgb =(mglobl*mglobl+mglobl)/2,
1156 + msym =(mgl*mgl+mgl)/2,
1157 + msymlc=(mlocal*mlocal+mlocal)/2,
1158 + mrecta= mglobl*mlocal,
1159 + mglocs= mglobl*mcs,
1160 + msymcs= (mcs*mcs+mcs)/2 )
1161 DOUBLE PRECISION CGMAT,CLMAT,CLCMAT,BGVEC,BLVEC,
1162 + corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs,
1165 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta),
1166 + diag(mgl),bgvec(mgl),blvec(mlocal),
1167 + corrm(msymgb),corrv(mglobl),psigm(mglobl),
1168 + pparm(mglobl),adercs(mglocs),arhs(mcs),
1170 + scdiag(mglobl),summ,scflag(mglobl),
1171 + indgb(mglobl),indlc(mlocal),loctot,locrej,
1172 + nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51),
1173 + nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs,
1174 + nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
1177 IF(i.LE.0.OR.i.GT.nagb)
RETURN 1178 IF(j.LE.0.OR.j.GT.nagb)
RETURN 1183 ij=(k*k-k)/2+min(i,j)
1184 err=sqrt(abs(cgmat(ii)*cgmat(jj)))
1185 IF(err.NE.0.0)
corpar=cgmat(ij)/err
1191 parameter(mglobl=1400,mlocal=10,nstore=10000,mcs=30)
1192 parameter(mgl=mglobl+mcs)
1194 parameter(msymgb =(mglobl*mglobl+mglobl)/2,
1195 + msym =(mgl*mgl+mgl)/2,
1196 + msymlc=(mlocal*mlocal+mlocal)/2,
1197 + mrecta= mglobl*mlocal,
1198 + mglocs= mglobl*mcs,
1199 + msymcs= (mcs*mcs+mcs)/2 )
1200 DOUBLE PRECISION CGMAT,CLMAT,CLCMAT,BGVEC,BLVEC,
1201 + corrm,corrv,summ,diag,scdiag,pparm,dparm,adercs,
1204 common/lsqred/cgmat(msym),clmat(msymlc),clcmat(mrecta),
1205 + diag(mgl),bgvec(mgl),blvec(mlocal),
1206 + corrm(msymgb),corrv(mglobl),psigm(mglobl),
1207 + pparm(mglobl),adercs(mglocs),arhs(mcs),
1209 + scdiag(mglobl),summ,scflag(mglobl),
1210 + indgb(mglobl),indlc(mlocal),loctot,locrej,
1211 + nagb,nalc,nsum,nhist,mhist(51),khist(51),lhist(51),
1212 + nst,nfl,indst(nstore),arest(nstore),itert,lunit,ncs,
1213 + nlnpa(mglobl),nstdev,cfactr,icnpr,icnlim
1219 WRITE(lup,*)
' Result of fit for global parameters' 1220 WRITE(lup,*)
' ===================================' 1225 err=sqrt(abs(cgmat(ii)))
1226 IF(cgmat(ii).LT.0.0) err=-err
1228 IF(cgmat(ii)*diag(i).GT.0.0)
THEN 1230 gcor=sqrt(abs(1.0-1.0/(cgmat(ii)*diag(i))))
1233 IF(nlnpa(i).NE.0) patext=
'nl' 1234 WRITE(lup,102) i,patext,
1235 + pparm(i),pparm(i)+dparm(i),dparm(i),bgvec(i),err,gcor
1237 101
FORMAT(1x,
' I initial final differ',
1238 +
' lastcor Error glcor'/
1239 + 1x,
' --- ----------- ----------- -----------',
1240 +
' ----------- -------- -----')
1241 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)