-
Notifications
You must be signed in to change notification settings - Fork 10
/
ucodrv.f
122 lines (122 loc) · 4.05 KB
/
ucodrv.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
c **********
c
c this program tests codes for the unconstrained optimization of
c a nonlinear function of n variables. it consists of a driver
c and an interface subroutine fcn. the driver reads in data,
c calls the unconstrained optimizer, and finally prints out
c information on the performance of the optimizer. this is
c only a sample driver, many other drivers are possible. the
c interface subroutine fcn is necessary to take into account the
c forms of calling sequences used by the function subroutines
c in the various unconstrained optimizers.
c
c subprograms called
c
c user-supplied ...... fcn
c
c minpack-supplied ... dpmpar,drvcr1,enorm,grdfcn,initpt,objfcn
c
c fortran-supplied ... dsqrt
c
c argonne national laboratory. minpack project. march 1980.
c burton s. garbow, kenneth e. hillstrom, jorge j. more
c
c **********
integer i,ic,info,k,lwa,n,nfev,nprob,nread,ntries,nwrite
integer na(120),nf(120),np(120),nx(120)
double precision factor,f1,f2,gnorm1,gnorm2,one,ten,tol
double precision fval(120),gvec(100),gnm(120),wa(6130),x(100)
double precision dpmpar,enorm
external fcn
common /refnum/ nprob,nfev
c
c logical input unit is assumed to be number 5.
c logical output unit is assumed to be number 6.
c
data nread,nwrite /5,6/
c
data one,ten /1.0d0,1.0d1/
tol = dsqrt(dpmpar(1))
lwa = 6130
ic = 0
10 continue
read (nread,50) nprob,n,ntries
if (nprob .le. 0) go to 30
factor = one
do 20 k = 1, ntries
ic = ic + 1
call initpt(n,x,nprob,factor)
call objfcn(n,x,f1,nprob)
call grdfcn(n,x,gvec,nprob)
gnorm1 = enorm(n,gvec)
write (nwrite,60) nprob,n
nfev = 0
call drvcr1(fcn,n,x,f2,gvec,tol,info,wa,lwa)
call objfcn(n,x,f2,nprob)
call grdfcn(n,x,gvec,nprob)
gnorm2 = enorm(n,gvec)
np(ic) = nprob
na(ic) = n
nf(ic) = nfev
nx(ic) = info
fval(ic) = f2
gnm(ic) = gnorm2
write (nwrite,70)
* f1,f2,gnorm1,gnorm2,nfev,info,(x(i), i = 1, n)
factor = ten*factor
20 continue
go to 10
30 continue
write (nwrite,80) ic
write (nwrite,90)
do 40 i = 1, ic
write (nwrite,100) np(i),na(i),nf(i),nx(i),fval(i),gnm(i)
40 continue
stop
50 format (3i5)
60 format ( //// 5x, 8h problem, i5, 5x, 10h dimension, i5, 5x //)
70 format (5x, 23h initial function value, d15.7 // 5x,
* 23h final function value , d15.7 // 5x,
* 23h initial gradient norm , d15.7 // 5x,
* 23h final gradient norm , d15.7 // 5x,
* 33h number of function evaluations , i10 // 5x,
* 15h exit parameter, 18x, i10 // 5x,
* 27h final approximate solution // (5x, 5d15.7))
80 format (12h1summary of , i3, 16h calls to drvcr1 /)
90 format (25h nprob n nfev info ,
* 42h final function value final gradient norm /)
100 format (i4, i6, i7, i6, 5x, d15.7, 6x, d15.7)
c
c last card of driver.
c
end
subroutine fcn(n,x,f,gvec,iflag)
integer n,iflag
double precision f
double precision x(n),gvec(n)
c **********
c
c the calling sequence of fcn should be identical to the
c calling sequence of the function subroutine in the
c unconstrained optimizer. fcn should only call the testing
c function and gradient subroutines objfcn and grdfcn with
c the appropriate value of problem number (nprob).
c
c subprograms called
c
c minpack-supplied ... grdfcn,objfcn
c
c argonne national laboratory. minpack project. march 1980.
c burton s. garbow, kenneth e. hillstrom, jorge j. more
c
c **********
integer nprob,nfev
common /refnum/ nprob,nfev
call objfcn(n,x,f,nprob)
call grdfcn(n,x,gvec,nprob)
nfev = nfev + 1
return
c
c last card of interface subroutine fcn.
c
end