COSMOS v7.655  COSMOSv7655
(AirShowerMC)
mncont.f File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine mncont (FCN, KE1, KE2, NPTU, XPTU, YPTU, IERRF, FUTIL)
 

Function/Subroutine Documentation

◆ mncont()

subroutine mncont ( external  FCN,
  KE1,
  KE2,
  NPTU,
dimension(nptu)  XPTU,
dimension(nptu)  YPTU,
  IERRF,
external  FUTIL 
)

Definition at line 10 of file mncont.f.

References a, b, c, d, e, f, g, h, softenpik::half, i, j, m, maxp, mncros(), mncuve(), mnfixp(), mnfree(), mninex(), mnmnot(), mnplot(), mnwarn(), n, o, p, parameter(), up(), x, xs, and z.

Referenced by mnexcm().

10 *
11 * $Id: d506dp.inc,v 1.1.1.1 1996/03/07 14:31:32 mclareni Exp $
12 *
13 * $Log: d506dp.inc,v $
14 * Revision 1.1.1.1 1996/03/07 14:31:32 mclareni
15 * Minuit
16 *
17 *
18 *
19 *
20 * d506dp.inc
21 *
22 C ************ DOUBLE PRECISION VERSION *************
23  IMPLICIT DOUBLE PRECISION (a-h,o-z)
24 CC Find NPTU points along a contour where the function
25 CC FMIN (X(KE1),X(KE2)) = AMIN+UP
26 CC where FMIN is the minimum of FCN with respect to all
27 CC the other NPAR-2 variable parameters (if any).
28 CC IERRF on return will be equal to the number of points found:
29 CC NPTU if normal termination with NPTU points found
30 CC -1 if errors in the calling sequence (KE1, KE2 not variable)
31 CC 0 if less than four points can be found (using MNMNOT)
32 CC n>3 if only n points can be found (n < NPTU)
33 CC
34 *
35 * $Id: d506cm.inc,v 1.1.1.1 1996/03/07 14:31:32 mclareni Exp $
36 *
37 * $Log: d506cm.inc,v $
38 * Revision 1.1.1.1 1996/03/07 14:31:32 mclareni
39 * Minuit
40 *
41 *
42 *
43 *
44 * d506cm.inc
45 *
46  parameter(mne=100 , mni=50)
47  parameter(mnihl=mni*(mni+1)/2)
48  CHARACTER*10 cpnam
49  COMMON
50  1/mn7nam/ cpnam(mne)
51  2/mn7ext/ u(mne) ,alim(mne) ,blim(mne)
52  3/mn7err/ erp(mni) ,ern(mni) ,werr(mni) ,globcc(mni)
53  4/mn7inx/ nvarl(mne) ,niofex(mne),nexofi(mni)
54  5/mn7int/ x(mni) ,xt(mni) ,dirin(mni)
55  6/mn7fx2/ xs(mni) ,xts(mni) ,dirins(mni)
56  7/mn7der/ grd(mni) ,g2(mni) ,gstep(mni) ,gin(mne) ,dgrd(mni)
57  8/mn7fx3/ grds(mni) ,g2s(mni) ,gsteps(mni)
58  9/mn7fx1/ ipfix(mni) ,npfix
59  a/mn7var/ vhmat(mnihl)
60  b/mn7vat/ vthmat(mnihl)
61  c/mn7sim/ p(mni,mni+1),pstar(mni),pstst(mni) ,pbar(mni),prho(mni)
62 C
63  parameter(maxdbg=10, maxstk=10, maxcwd=20, maxp=30, maxcpt=101)
64  parameter(zero=0.0, one=1.0, half=0.5)
65  COMMON
66  d/mn7npr/ maxint ,npar ,maxext ,nu
67  e/mn7iou/ isysrd ,isyswr ,isyssa ,npagwd ,npagln ,newpag
68  e/mn7io2/ istkrd(maxstk) ,nstkrd ,istkwr(maxstk) ,nstkwr
69  f/mn7tit/ cfrom ,cstatu ,ctitl ,cword ,cundef ,cvrsn ,covmes
70  g/mn7flg/ isw(7) ,idbg(0:maxdbg) ,nblock ,icomnd
71  h/mn7min/ amin ,up ,edm ,fval3 ,epsi ,apsi ,dcovar
72  i/mn7cnv/ nfcn ,nfcnmx ,nfcnlc ,nfcnfr ,itaur,istrat,nwrmes(2)
73  j/mn7arg/ word7(maxp)
74  k/mn7log/ lwarn ,lrepor ,limset ,lnolim ,lnewmn ,lphead
75  l/mn7cns/ epsmac ,epsma2 ,vlimlo ,vlimhi ,undefi ,bigedm,updflt
76  m/mn7rpt/ xpt(maxcpt) ,ypt(maxcpt)
77  n/mn7cpt/ chpt(maxcpt)
78  o/mn7xcr/ xmidcr ,ymidcr ,xdircr ,ydircr ,ke1cr ,ke2cr
79  CHARACTER ctitl*50, cword*(maxcwd), cundef*10, cfrom*8,
80  + cvrsn*6, covmes(0:3)*22, cstatu*10, chpt*1
81  LOGICAL lwarn, lrepor, limset, lnolim, lnewmn, lphead
82  dimension xptu(nptu), yptu(nptu), w(mni),gcc(mni)
83  CHARACTER chere*10
84  parameter(chere='MNContour ')
85  LOGICAL ldebug
86  EXTERNAL fcn,futil
87 C input arguments: parx, pary, devs, ngrid
88  ldebug = (idbg(6) .GE. 1)
89  IF (ke1.LE.0 .OR. ke2.LE.0) GO TO 1350
90  IF (ke1.GT.nu .OR. ke2.GT.nu) GO TO 1350
91  ki1 = niofex(ke1)
92  ki2 = niofex(ke2)
93  IF (ki1.LE.0 .OR. ki2.LE.0) GO TO 1350
94  IF (ki1 .EQ. ki2) GO TO 1350
95  IF (nptu .LT. 4) GO TO 1400
96 C
97  nfcnco = nfcn
98  nfcnmx = 100*(nptu+5)*(npar+1)
99 C The minimum
100  CALL mncuve(fcn,futil)
101  u1min = u(ke1)
102  u2min = u(ke2)
103  ierrf = 0
104  cfrom = chere
105  nfcnfr = nfcnco
106  IF (isw(5) .GE. 0) THEN
107  WRITE (isyswr,'(1X,A,I4,A)')
108  + 'START MNCONTOUR CALCULATION OF',nptu,' POINTS ON CONTOUR.'
109  IF (npar .GT. 2) THEN
110  IF (npar .EQ. 3) THEN
111  ki3 = 6 - ki1 - ki2
112  ke3 = nexofi(ki3)
113  WRITE (isyswr,'(1X,A,I3,2X,A)')
114  + 'EACH POINT IS A MINIMUM WITH RESPECT TO PARAMETER ',
115  + ke3, cpnam(ke3)
116  ELSE
117  WRITE (isyswr,'(1X,A,I3,A)')
118  + 'EACH POINT IS A MINIMUM WITH RESPECT TO THE OTHER',
119  + npar-2, ' VARIABLE PARAMETERS.'
120  ENDIF
121  ENDIF
122  ENDIF
123 C
124 C Find the first four points using MNMNOT
125 C ........................ first two points
126  CALL mnmnot(fcn,ke1,ke2,val2pl,val2mi,futil)
127  IF (ern(ki1) .EQ. undefi) THEN
128  xptu(1) = alim(ke1)
129  CALL mnwarn('W',chere,'Contour squeezed by parameter limits.')
130  ELSE
131  IF (ern(ki1) .GE. zero) GO TO 1500
132  xptu(1) = u1min+ern(ki1)
133  ENDIF
134  yptu(1) = val2mi
135 C
136  IF (erp(ki1) .EQ. undefi) THEN
137  xptu(3) = blim(ke1)
138  CALL mnwarn('W',chere,'Contour squeezed by parameter limits.')
139  ELSE
140  IF (erp(ki1) .LE. zero) GO TO 1500
141  xptu(3) = u1min+erp(ki1)
142  ENDIF
143  yptu(3) = val2pl
144  scalx = 1.0/(xptu(3) - xptu(1))
145 C ........................... next two points
146  CALL mnmnot(fcn,ke2,ke1,val2pl,val2mi,futil)
147  IF (ern(ki2) .EQ. undefi) THEN
148  yptu(2) = alim(ke2)
149  CALL mnwarn('W',chere,'Contour squeezed by parameter limits.')
150  ELSE
151  IF (ern(ki2) .GE. zero) GO TO 1500
152  yptu(2) = u2min+ern(ki2)
153  ENDIF
154  xptu(2) = val2mi
155  IF (erp(ki2) .EQ. undefi) THEN
156  yptu(4) = blim(ke2)
157  CALL mnwarn('W',chere,'Contour squeezed by parameter limits.')
158  ELSE
159  IF (erp(ki2) .LE. zero) GO TO 1500
160  yptu(4) = u2min+erp(ki2)
161  ENDIF
162  xptu(4) = val2pl
163  scaly = 1.0/(yptu(4) - yptu(2))
164  nowpts = 4
165  next = 5
166  IF (ldebug) THEN
167  WRITE (isyswr,'(A)') ' Plot of four points found by MINOS'
168  xpt(1) = u1min
169  ypt(1) = u2min
170  chpt(1) = ' '
171  nall = min(nowpts+1,maxcpt)
172  DO 85 i= 2, nall
173  xpt(i) = xptu(i-1)
174  ypt(i) = yptu(i-1)
175  85 CONTINUE
176  chpt(2)= 'A'
177  chpt(3)= 'B'
178  chpt(4)= 'C'
179  chpt(5)= 'D'
180  CALL mnplot(xpt,ypt,chpt,nall,isyswr,npagwd,npagln)
181  ENDIF
182 C
183 C ..................... save some values before fixing
184  isw2 = isw(2)
185  isw4 = isw(4)
186  sigsav = edm
187  istrav = istrat
188  dc = dcovar
189  apsi = epsi*0.5
190  abest=amin
191  mpar=npar
192  nfmxin = nfcnmx
193  DO 125 i= 1, mpar
194  125 xt(i) = x(i)
195  DO 130 j= 1, mpar*(mpar+1)/2
196  130 vthmat(j) = vhmat(j)
197  DO 135 i= 1, mpar
198  gcc(i) = globcc(i)
199  135 w(i) = werr(i)
200 C fix the two parameters in question
201  kints = niofex(ke1)
202  CALL mnfixp (kints,ierr)
203  kints = niofex(ke2)
204  CALL mnfixp (kints,ierr)
205 C ......................Fill in the rest of the points
206  DO 900 inew= next, nptu
207 C find the two neighbouring points with largest separation
208  bigdis = 0.
209  DO 200 iold = 1, inew-1
210  i2 = iold + 1
211  IF (i2 .EQ. inew) i2 = 1
212  dist = (scalx*(xptu(iold)-xptu(i2)))**2 +
213  + (scaly*(yptu(iold)-yptu(i2)))**2
214  IF (dist .GT. bigdis) THEN
215  bigdis = dist
216  idist = iold
217  ENDIF
218  200 CONTINUE
219  i1 = idist
220  i2 = i1 + 1
221  IF (i2 .EQ. inew) i2 = 1
222 C next point goes between I1 and I2
223  a1 = half
224  a2 = half
225  300 xmidcr = a1*xptu(i1) + a2*xptu(i2)
226  ymidcr = a1*yptu(i1) + a2*yptu(i2)
227  xdir = yptu(i2) - yptu(i1)
228  ydir = xptu(i1) - xptu(i2)
229  sclfac = max(abs(xdir*scalx), abs(ydir*scaly))
230  xdircr = xdir/sclfac
231  ydircr = ydir/sclfac
232  ke1cr = ke1
233  ke2cr = ke2
234 C Find the contour crossing point along DIR
235  amin = abest
236  CALL mncros(fcn,aopt,iercr,futil)
237  IF (iercr .GT. 1) THEN
238 C If cannot find mid-point, try closer to point 1
239  IF (a1 .GT. half) THEN
240  IF (isw(5) .GE. 0)
241  + WRITE (isyswr,'(A,A,I3,A)') ' MNCONT CANNOT FIND NEXT',
242  + ' POINT ON CONTOUR. ONLY ',nowpts,' POINTS FOUND.'
243  GO TO 950
244  ENDIF
245  CALL mnwarn('W',chere,'Cannot find midpoint, try closer.')
246  a1 = 0.75
247  a2 = 0.25
248  GO TO 300
249  ENDIF
250 C Contour has been located, insert new point in list
251  DO 830 move= nowpts,i1+1,-1
252  xptu(move+1) = xptu(move)
253  yptu(move+1) = yptu(move)
254  830 CONTINUE
255  nowpts = nowpts + 1
256  xptu(i1+1) = xmidcr + xdircr*aopt
257  yptu(i1+1) = ymidcr + ydircr*aopt
258  900 CONTINUE
259  950 CONTINUE
260 C
261  ierrf = nowpts
262  cstatu = 'SUCCESSFUL'
263  IF (nowpts .LT. nptu) cstatu = 'INCOMPLETE'
264 C make a lineprinter plot of the contour
265  IF (isw(5) .GE. 0) THEN
266  xpt(1) = u1min
267  ypt(1) = u2min
268  chpt(1) = ' '
269  nall = min(nowpts+1,maxcpt)
270  DO 1000 i= 2, nall
271  xpt(i) = xptu(i-1)
272  ypt(i) = yptu(i-1)
273  chpt(i)= 'X'
274  1000 CONTINUE
275  WRITE (isyswr,'(A,I3,2X,A)') ' Y-AXIS: PARAMETER ',ke2,
276  + cpnam(ke2)
277  CALL mnplot(xpt,ypt,chpt,nall,isyswr,npagwd,npagln)
278  WRITE (isyswr,'(25X,A,I3,2X,A)') 'X-AXIS: PARAMETER ',
279  + ke1,cpnam(ke1)
280  ENDIF
281 C print out the coordinates around the contour
282  IF (isw(5) .GE. 1) THEN
283  npcol = (nowpts+1)/2
284  nfcol = nowpts/2
285  WRITE (isyswr,'(/I5,A,G13.5,A,G11.3)') nowpts,
286  + ' POINTS ON CONTOUR. FMIN=',abest,' ERRDEF=',up
287  WRITE (isyswr,'(9X,A,3X,A,18X,A,3X,A)')
288  + cpnam(ke1),cpnam(ke2),cpnam(ke1),cpnam(ke2)
289  DO 1050 line = 1, nfcol
290  lr = line + npcol
291  WRITE (isyswr,'(1X,I5,2G13.5,10X,I5,2G13.5)')
292  + line,xptu(line),yptu(line),lr,xptu(lr),yptu(lr)
293  1050 CONTINUE
294  IF (nfcol .LT. npcol) WRITE (isyswr,'(1X,I5,2G13.5)')
295  + npcol,xptu(npcol),yptu(npcol)
296  ENDIF
297 C . . contour finished. reset v
298  itaur = 1
299  CALL mnfree(1)
300  CALL mnfree(1)
301  DO 1100 j= 1, mpar*(mpar+1)/2
302  1100 vhmat(j) = vthmat(j)
303  DO 1120 i= 1, mpar
304  globcc(i) = gcc(i)
305  werr(i) = w(i)
306  1120 x(i) = xt(i)
307  CALL mninex (x)
308  edm = sigsav
309  amin = abest
310  isw(2) = isw2
311  isw(4) = isw4
312  dcovar = dc
313  itaur = 0
314  nfcnmx = nfmxin
315  istrat = istrav
316  u(ke1) = u1min
317  u(ke2) = u2min
318  GO TO 2000
319 C Error returns
320  1350 WRITE (isyswr,'(A)') ' INVALID PARAMETER NUMBERS.'
321  GO TO 1450
322  1400 WRITE (isyswr,'(A)') ' LESS THAN FOUR POINTS REQUESTED.'
323  1450 ierrf = -1
324  cstatu = 'USER ERROR'
325  GO TO 2000
326  1500 WRITE (isyswr,'(A)') ' MNCONT UNABLE TO FIND FOUR POINTS.'
327  u(ke1) = u1min
328  u(ke2) = u2min
329  ierrf = 0
330  cstatu = 'FAILED'
331  2000 CONTINUE
332  cfrom = chere
333  nfcnfr = nfcnco
334  RETURN
integer npitbl real *nx parameter(n=101, npitbl=46, nx=n-1) real *8 uconst
nodes z
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
Definition: cblkMuInt.h:130
nodes i
subroutine mnfree(K)
Definition: mnfree.f:10
real(4), dimension(:), allocatable, save h
Definition: cNRLAtmos.f:28
subroutine mnmnot(FCN, ILAX, ILAX2, VAL2PL, VAL2MI, FUTIL)
Definition: mnmnot.f:10
! 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
Definition: Zglobalc.h:18
********************block data cblkHeavy ********************integer j data *HeavyG2symbol p
Definition: cblkHeavy.h:7
********************block data cblkHeavy ********************integer j data *HeavyG2symbol *data *HeavyG2code kiron data j
Definition: cblkHeavy.h:36
struct ob o[NpMax]
Definition: Zprivate.h:34
subroutine mninex(PINT)
Definition: mninex.f:10
dE dx *! Nuc Int sampling table d
Definition: cblkMuInt.h:130
block data include Zlatfit h c fitting region data data data data data d0 data data d0 data data m
Definition: ZlatfitBD.h:35
subroutine mnfixp(IINT, IERR)
Definition: mnfixp.f:10
subroutine mncros(FCN, AOPT, IERCR, FUTIL)
Definition: mncros.f:10
real(4), save a
Definition: cNRLAtmos.f:20
dE dx *! Nuc Int sampling table g
Definition: cblkMuInt.h:130
subroutine mncuve(FCN, FUTIL)
Definition: mncuve.f:10
real(4), save b
Definition: cNRLAtmos.f:21
!onst int maxp
Definition: Zprivate.h:3
subroutine mnwarn(COPT, CORG, CMES)
Definition: mnwarn.f:10
integer n
Definition: Zcinippxc.h:1
integer, parameter half
Definition: csoftenPiK.f:108
subroutine mnplot(XPT, YPT, CHPT, NXYPT, NUNIT, NPAGWD, NPAGLN)
Definition: mnplot.f:10
! 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
Definition: Zptcl.h:21
dE dx *! Nuc Int sampling table f
Definition: cblkMuInt.h:130
dE dx *! Nuc Int sampling table c
Definition: cblkMuInt.h:130
Here is the call graph for this function:
Here is the caller graph for this function: