source: Sophya/trunk/SophyaExt/CodeMinuit/code/mngrad.F@ 2860

Last change on this file since 2860 was 2403, checked in by cmv, 22 years ago

Creation du module de code source de MINUIT (CERNLIB) extrait par CMV

cmv 11/06/2003

File size: 2.2 KB
Line 
1*
2* $Id: mngrad.F,v 1.1.1.1 2003-06-11 14:18:27 cmv Exp $
3*
4* $Log: not supported by cvs2svn $
5* Revision 1.1.1.1 1996/03/07 14:31:29 mclareni
6* Minuit
7*
8*
9#include "minuit/pilot.h"
10 SUBROUTINE MNGRAD(FCN,FUTIL)
11#include "minuit/d506dp.inc"
12CC Called from MNSET
13CC Interprets the SET GRAD command, which informs MINUIT whether
14CC the first derivatives of FCN will be calculated by the user
15CC inside FCN. It can check the user's derivative calculation
16CC by comparing it with a finite difference approximation.
17CC
18#include "minuit/d506cm.inc"
19C
20 EXTERNAL FCN,FUTIL
21 CHARACTER*4 CGOOD,CBAD,CNONE,CWD
22 LOGICAL LNONE
23 DIMENSION GF(MNI)
24 PARAMETER (CGOOD='GOOD',CBAD=' BAD',CNONE='NONE')
25C
26 ISW(3) = 1
27 NPARX = NPAR
28 IF (WORD7(1) .GT. ZERO) GO TO 2000
29C get user-calculated first derivatives from FCN
30 DO 30 I= 1, NU
31 30 GIN(I) = UNDEFI
32 CALL MNINEX(X)
33 CALL FCN(NPARX,GIN,FZERO,U,2,FUTIL)
34 NFCN = NFCN + 1
35 CALL MNDERI(FCN,FUTIL)
36 DO 40 I= 1, NPAR
37 40 GF(I) = GRD(I)
38C get MINUIT-calculated first derivatives
39 ISW(3) = 0
40 ISTSAV = ISTRAT
41 ISTRAT = 2
42 CALL MNHES1(FCN,FUTIL)
43 ISTRAT = ISTSAV
44 WRITE (ISYSWR,51)
45 51 FORMAT(/' CHECK OF GRADIENT CALCULATION IN FCN'/12X,'PARAMETER',
46 + 6X,9HG(IN FCN) ,3X,9HG(MINUIT) ,2X,'DG(MINUIT)',3X,9HAGREEMENT)
47 ISW(3) = 1
48 LNONE = .FALSE.
49 DO 100 LC = 1, NPAR
50 I = NEXOFI(LC)
51 CWD = CGOOD
52 ERR = DGRD(LC)
53 IF (ABS(GF(LC)-GRD(LC)) .GT. ERR) CWD = CBAD
54 IF (GIN(I) .EQ. UNDEFI) THEN
55 CWD = CNONE
56 LNONE = .TRUE.
57 GF(LC) = 0.
58 ENDIF
59 IF (CWD .NE. CGOOD) ISW(3) = 0
60 WRITE (ISYSWR,99) I,CPNAM(I),GF(LC),GRD(LC),ERR,CWD
61 99 FORMAT (7X,I5,2X ,A10,3E12.4,4X ,A4)
62 100 CONTINUE
63 IF (LNONE) WRITE (ISYSWR,'(A)')
64 + ' AGREEMENT=NONE MEANS FCN DID NOT CALCULATE THE DERIVATIVE'
65 IF (ISW(3) .EQ. 0) WRITE (ISYSWR,1003)
66 1003 FORMAT(/' MINUIT DOES NOT ACCEPT DERIVATIVE CALCULATIONS BY FCN'/
67 + ' TO FORCE ACCEPTANCE, ENTER "SET GRAD 1"'/)
68C
69 2000 CONTINUE
70 RETURN
71 END
Note: See TracBrowser for help on using the repository browser.