23 IMPLICIT DOUBLE PRECISION (
a-
h,
o-
z)
48 2/mn7ext/ u(mne) ,alim(mne) ,blim(mne)
49 3/mn7err/ erp(mni) ,ern(mni) ,werr(mni) ,globcc(mni)
50 4/mn7inx/ nvarl(mne) ,niofex(mne),nexofi(mni)
51 5/mn7int/
x(mni) ,xt(mni) ,dirin(mni)
52 6/mn7fx2/
xs(mni) ,xts(mni) ,dirins(mni)
53 7/mn7der/ grd(mni) ,g2(mni) ,gstep(mni) ,gin(mne) ,dgrd(mni)
54 8/mn7fx3/ grds(mni) ,g2s(mni) ,gsteps(mni)
55 9/mn7fx1/ ipfix(mni) ,npfix
56 a/mn7var/ vhmat(mnihl)
57 b/mn7vat/ vthmat(mnihl)
58 c/mn7sim/
p(mni,mni+1),pstar(mni),pstst(mni) ,pbar(mni),prho(mni)
60 parameter(maxdbg=10, maxstk=10, maxcwd=20,
maxp=30, maxcpt=101)
63 d/mn7npr/ maxint ,npar ,maxext ,nu
64 e/mn7iou/ isysrd ,isyswr ,isyssa ,npagwd ,npagln ,newpag
65 e/mn7io2/ istkrd(maxstk) ,nstkrd ,istkwr(maxstk) ,nstkwr
66 f/mn7tit/ cfrom ,cstatu ,ctitl ,cword ,cundef ,cvrsn ,covmes
67 g/mn7flg/ isw(7) ,idbg(0:maxdbg) ,nblock ,icomnd
68 h/mn7min/ amin ,
up ,edm ,fval3 ,epsi ,apsi ,dcovar
69 i/mn7cnv/ nfcn ,nfcnmx ,nfcnlc ,nfcnfr ,itaur,istrat,nwrmes(2)
71 k/mn7log/ lwarn ,lrepor ,limset ,lnolim ,lnewmn ,lphead
72 l/mn7cns/ epsmac ,epsma2 ,vlimlo ,vlimhi ,undefi ,bigedm,updflt
73 m/mn7rpt/ xpt(maxcpt) ,ypt(maxcpt)
74 n/mn7cpt/ chpt(maxcpt)
75 o/mn7xcr/ xmidcr ,ymidcr ,xdircr ,ydircr ,ke1cr ,ke2cr
76 CHARACTER ctitl*50, cword*(maxcwd), cundef*10, cfrom*8,
77 + cvrsn*6, covmes(0:3)*22, cstatu*10, chpt*1
78 LOGICAL lwarn, lrepor, limset, lnolim, lnewmn, lphead
84 ldebug = (idbg(3) .GE. 1)
85 IF (amin .EQ. undefi)
CALL mnamin(fcn,futil)
86 IF (istrat .LE. 0)
THEN 90 ELSE IF (istrat .EQ. 1)
THEN 99 IF (isw(5).GE.2 .OR. ldebug)
WRITE (isyswr,
'(A)')
100 +
' START COVARIANCE MATRIX CALCULATION.' 108 CALL fcn(nparx,gin,fs1,u,4,futil)
110 IF (fs1 .NE. amin)
THEN 112 WRITE (cbf1(1:12),
'(G12.3)') df
114 +
'function value differs from AMIN by '//cbf1(1:12) )
117 IF (ldebug)
WRITE (isyswr,
'(A,A)')
' PAR D GSTEP ',
122 aimsag = sqrt(epsma2)*(abs(amin)+
up)
124 npar2 = npar*(npar+1)/2
131 i = id + npar - npard
133 IF (g2(
i) .EQ. zero)
THEN 134 WRITE (cbf1(1:4),
'(I4)') iext
136 +
'Second derivative enters zero, param '//cbf1(1:4) )
138 IF (nvarl(iext) .GT. 1)
THEN 140 IF (abs(dxdi) .LT. .001)
THEN 143 wint = wint/abs(dxdi)
149 dmin = 8.*epsma2*abs(xtf)
160 CALL fcn(nparx,gin,fs1,u,4,futil)
164 CALL fcn(nparx,gin,fs2,u,4,futil)
167 sag = 0.5*(fs1+fs2-2.0*amin)
168 IF (sag .NE. zero)
GO TO 30
169 IF (gstep(
i) .LT. zero)
THEN 170 IF (
d .GE. .5)
GO TO 26
172 IF (
d .GT. 0.5)
d = 0.51
177 26
WRITE (cbf1(1:4),
'(I4)') iext
179 +
'Second derivative zero for parameter'//cbf1(1:4) )
184 grd(
i) = (fs1-fs2)/(2.*
d)
185 IF (ldebug)
WRITE (isyswr,31)
i,idrv,gstep(
i),
d,g2(
i),grd(
i),sag
186 31
FORMAT (i4,i2,6g12.5)
187 gstep(
i) = sign(
d,gstep(
i))
191 d = sqrt(2.0*aimsag/abs(g2(
i)))
194 IF (gstep(
i) .LT. zero)
d = min(
d,stpinm)
195 IF (
d .LT. dmin)
d = dmin
197 IF (abs((
d-dlast)/
d) .LT. tlrstp)
GO TO 50
198 IF (abs((g2(
i)-g2bfor)/g2(
i)) .LT. tlrg2 )
GO TO 50
199 d = min(
d, 10.*dlast)
200 d = max(
d, 0.1*dlast)
203 WRITE (cbf1,
'(I2,2E10.2)') iext,sag,aimsag
204 CALL mnwarn(
'D',
'MNHESS',
'Second Deriv. SAG,AIM= '//cbf1)
213 IF (istrat .GT. 0)
CALL mnhes1(fcn,futil)
217 IF (npar .EQ. 1)
GO TO 214
222 x(
i) = xti + dirin(
i)
223 x(
j) = xtj + dirin(
j)
225 CALL fcn(nparx,gin,fs1,u,4,futil)
229 elem = (fs1+amin-yy(
i)-yy(
j)) / (dirin(
i)*dirin(
j))
243 CALL mnvert(
p,maxint,maxint,npar,ifail)
244 IF (ifail .GT. 0)
THEN 245 CALL mnwarn(
'W',
'HESSE',
'Matrix inversion fails.')
256 edm = edm + grd(
i)*ztemp*grd(
j)
257 225 vhmat(ndex) = ztemp
260 vhmat(ndex) = 2.0 *
p(
i,
i)
261 edm = edm +
p(
i,
i) * grd(
i)**2
263 IF (isw(5).GE.1 .AND. isw(2).EQ.3 .AND. itaur.EQ.0)
264 +
WRITE(isyswr,
'(A)')
' COVARIANCE MATRIX CALCULATED SUCCESSFULLY' 270 IF (isw(5) .GE. 0)
WRITE (isyswr,
'(A)')
271 +
' MNHESS FAILS AND WILL RETURN DIAGONAL MATRIX. ' 276 394 vhmat(ndex) = 0.0
279 IF (g2i .LE. zero) g2i = 1.0
280 395 vhmat(ndex) = 2.0/g2i
integer npitbl real *nx parameter(n=101, npitbl=46, nx=n-1) real *8 uconst
block data include Zlatfit h c fitting region data data data data data d0 data data d0 data data h g *is for param c g data up(2, 1)/7.0d0/
dE dx *! Nuc Int sampling table e
subroutine mnvert(A, L, M, N, IFAIL)
real(4), dimension(:), allocatable, save h
! constants thru Cosmos real ! if multiplied to deg radian Torad ! light velocity m sec ! infinty ! kg m2 *Togpcm2 g cm2 ! g cm2 *Tokgpm2 kg m2 ! cm *Tom m ! m *Tocm cm ! g cm3 *Tokgpm3 kg m3 ! kg m3 *Togpcm3 g cm3 ! sec *Tonsec nsec ! Tesla m ! Avogadro *A2deninv ! mfp *n * xs
subroutine mnamin(FCN, FUTIL)
********************block data cblkHeavy ********************integer j data *HeavyG2symbol p
********************block data cblkHeavy ********************integer j data *HeavyG2symbol *data *HeavyG2code kiron data j
subroutine mndxdi(PINT, IPAR, DXDI)
dE dx *! Nuc Int sampling table d
subroutine mnhes1(FCN, FUTIL)
block data include Zlatfit h c fitting region data data data data data d0 data data d0 data data m
dE dx *! Nuc Int sampling table g
subroutine mnwarn(COPT, CORG, CMES)
! structure defining a particle at production ! Basic idea of what is to be contained in ! the particle structue is that dynamical ones should be included those derivable from the particle code ! is not included ******************************************************type fmom momentum sequence union map real e endmap map real * x
dE dx *! Nuc Int sampling table f
dE dx *! Nuc Int sampling table c