23 IMPLICIT DOUBLE PRECISION (
a-
h,
o-
z)
47 2/mn7ext/ u(mne) ,alim(mne) ,blim(mne)
48 3/mn7err/ erp(mni) ,ern(mni) ,werr(mni) ,globcc(mni)
49 4/mn7inx/ nvarl(mne) ,niofex(mne),nexofi(mni)
50 5/mn7int/
x(mni) ,xt(mni) ,dirin(mni)
51 6/mn7fx2/
xs(mni) ,xts(mni) ,dirins(mni)
52 7/mn7der/ grd(mni) ,g2(mni) ,gstep(mni) ,gin(mne) ,dgrd(mni)
53 8/mn7fx3/ grds(mni) ,g2s(mni) ,gsteps(mni)
54 9/mn7fx1/ ipfix(mni) ,npfix
55 a/mn7var/ vhmat(mnihl)
56 b/mn7vat/ vthmat(mnihl)
57 c/mn7sim/
p(mni,mni+1),pstar(mni),pstst(mni) ,pbar(mni),prho(mni)
59 parameter(maxdbg=10, maxstk=10, maxcwd=20,
maxp=30, maxcpt=101)
62 d/mn7npr/ maxint ,npar ,maxext ,nu
63 e/mn7iou/ isysrd ,isyswr ,isyssa ,npagwd ,npagln ,newpag
64 e/mn7io2/ istkrd(maxstk) ,nstkrd ,istkwr(maxstk) ,nstkwr
65 f/mn7tit/ cfrom ,cstatu ,ctitl ,cword ,cundef ,cvrsn ,covmes
66 g/mn7flg/ isw(7) ,idbg(0:maxdbg) ,nblock ,icomnd
67 h/mn7min/ amin ,
up ,edm ,fval3 ,epsi ,apsi ,dcovar
68 i/mn7cnv/ nfcn ,nfcnmx ,nfcnlc ,nfcnfr ,itaur,istrat,nwrmes(2)
70 k/mn7log/ lwarn ,lrepor ,limset ,lnolim ,lnewmn ,lphead
71 l/mn7cns/ epsmac ,epsma2 ,vlimlo ,vlimhi ,undefi ,bigedm,updflt
72 m/mn7rpt/ xpt(maxcpt) ,ypt(maxcpt)
73 n/mn7cpt/ chpt(maxcpt)
74 o/mn7xcr/ xmidcr ,ymidcr ,xdircr ,ydircr ,ke1cr ,ke2cr
75 CHARACTER ctitl*50, cword*(maxcwd), cundef*10, cfrom*8,
76 + cvrsn*6, covmes(0:3)*22, cstatu*10, chpt*1
77 LOGICAL lwarn, lrepor, limset, lnolim, lnewmn, lphead
79 dimension start(*), step(*)
81 dimension xpq(maxpt),ypq(maxpt)
82 CHARACTER*1 chpq(maxpt)
83 dimension xvals(3),fvals(3),coeff(3)
93 DATA charal /
'ABCDEFGHIJKLMNOPQRSTUVWXYZ' /
94 ldebug = (idbg(1).GE.1)
101 CALL fcn(nparx,gin,f1,u,4,futil)
103 IF (f1 .NE. fstart)
THEN 104 WRITE (isyswr,
'(A/2E14.5/2X,10F10.5)')
105 +
' MNLINE start point not consistent, F values, parameters=',
113 chpq(1) = charal(1:1)
119 IF (step(
i) .EQ. zero)
GO TO 20
120 ratio = abs(start(
i)/step(
i))
121 IF (slamin .EQ. zero) slamin = ratio
122 IF (ratio .LT. slamin) slamin = ratio
123 20
x(
i) = start(
i) + step(
i)
124 IF (slamin .EQ. zero) slamin = epsmac
125 slamin = slamin*epsma2
129 CALL fcn(nparx,gin,f1,u,4,futil)
132 chpq(nxypt) = charal(nxypt:nxypt)
135 IF (f1 .LT. fstart)
THEN 146 denom = 2.0*(flast-fstart-slope*slam)/slam**2
149 IF (denom .NE. zero) slam = -slope/denom
150 IF (slam .LT. zero) slam = slamax
151 IF (slam .GT. slamax) slam = slamax
152 IF (slam .LT. toler8) slam = toler8
153 IF (slam .LT. slamin)
GO TO 80
154 IF (abs(slam-1.0).LT.toler8 .AND. f1.LT.fstart)
GO TO 70
155 IF (abs(slam-1.0).LT.toler8) slam = 1.0+toler8
156 IF (nxypt .GE. maxpt)
GO TO 65
158 30
x(
i) = start(
i) + slam*step(
i)
160 CALL fcn(npar,gin,f2,u,4,futil)
163 chpq(nxypt) = charal(nxypt:nxypt)
166 IF (f2 .LT. fvmin)
THEN 170 IF (fstart .EQ. fvmin)
THEN 180 xvals(2) = xpq(nxypt-1)
181 fvals(2) = ypq(nxypt-1)
182 xvals(3) = xpq(nxypt)
183 fvals(3) = ypq(nxypt)
186 slamax = max(slamax,alpha*abs(xvmin))
187 CALL mnpfit(xvals,fvals,3,coeff,sdev)
188 IF (coeff(3) .LE. zero)
THEN 189 slopem = 2.0*coeff(3)*xvmin + coeff(2)
190 IF (slopem .LE. zero)
THEN 191 slam = xvmin + slamax
193 slam = xvmin - slamax
196 slam = -coeff(2)/(2.0*coeff(3))
197 IF (slam .GT. xvmin+slamax) slam = xvmin+slamax
198 IF (slam .LT. xvmin-slamax) slam = xvmin-slamax
200 IF (slam .GT. zero)
THEN 201 IF (slam .GT. overal) slam = overal
203 IF (slam .LT. undral) slam = undral
207 toler9 = max(toler8,abs(toler8*slam))
209 IF (abs(slam-xvals(ipt)) .LT. toler9)
GO TO 70
212 IF (nxypt .GE. maxpt)
GO TO 65
214 60
x(
i) = start(
i)+slam*step(
i)
216 CALL fcn(nparx,gin,f3,u,4,futil)
219 chpq(nxypt) = charal(nxypt:nxypt)
225 IF (fvals(2) .GT. fvmax)
THEN 229 IF (fvals(3) .GT. fvmax)
THEN 234 IF (f3 .GE. fvmax)
THEN 235 IF (nxypt .GE. maxpt)
GO TO 65
236 IF (slam .GT. xvmin) overal = min(overal,slam-toler8)
237 IF (slam .LT. xvmin) undral = max(undral,slam+toler8)
238 slam = 0.5*(slam+xvmin)
244 IF (f3 .LT. fvmin)
THEN 248 IF (slam .GT. xvmin) overal = min(overal,slam-toler8)
249 IF (slam .LT. xvmin) undral = max(undral,slam+toler8)
251 IF (nxypt .LT. maxpt)
GO TO 50
254 65 cmess =
' LINE SEARCH HAS EXHAUSTED THE LIMIT OF FUNCTION CALLS ' 256 WRITE (isyswr,
'(A/(2X,6G12.4))')
' MNLINE DEBUG: steps=',
257 + (step(kk),kk=1,npar)
262 cmess =
' LINE SEARCH HAS ATTAINED TOLERANCE ' 265 cmess =
' STEP SIZE AT ARITHMETICALLY ALLOWED MINIMUM' 269 dirin(
i) = step(
i)*xvmin
270 120
x(
i) = start(
i) + dirin(
i)
272 IF (xvmin .LT. 0.)
CALL mnwarn(
'D',
'MNLINE',
273 +
' LINE MINIMUM IN BACKWARDS DIRECTION')
274 IF (fvmin .EQ. fstart)
CALL mnwarn(
'D',
'MNLINE',
275 +
' LINE SEARCH FINDS NO IMPROVEMENT ')
277 WRITE (isyswr,
'('' AFTER'',I3,'' POINTS,'',A)') nxypt,cmess
278 CALL mnplot(xpq,ypq,chpq,nxypt,isyswr,npagwd,npagln)
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
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
********************block data cblkHeavy ********************integer j data *HeavyG2symbol p
********************block data cblkHeavy ********************integer j data *HeavyG2symbol *data *HeavyG2code kiron data j
dE dx *! Nuc Int sampling table d
subroutine mnpfit(PARX2P, PARY2P, NPAR2P, COEF2P, SDEV2P)
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)
subroutine mnplot(XPT, YPT, CHPT, NXYPT, NUNIT, NPAGWD, NPAGLN)
! 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