1
C SCALE OBJECTIVE FUNCTION AND CONSTRAINTS
3
C ******************************************************************
4
C ******************************************************************
6
subroutine sinip(n,x,l,u,m,lambda,equatn,linear,coded,checkder,
16
logical coded(10),equatn(m),linear(m)
17
double precision l(n),lambda(m),u(n),x(n)
21
#include "scaling.com"
22
#include "algparam.com"
25
integer i,fun,j,jcnnz,nbds,neq,file50_unit
26
double precision scmax
30
integer jcfun(jcnnzmax),jcvar(jcnnzmax)
31
double precision g(nmax),jcval(jcnnzmax)
35
if ( equatn(j) ) neq = neq + 1
40
if ( l(i) .gt. - 1.0d+20 ) nbds = nbds + 1
41
if ( u(i) .lt. 1.0d+20 ) nbds = nbds + 1
44
if ( iprintctl(2) ) then
45
write(* ,100) n,neq,m-neq,nbds
46
write(file10_unit,100) n,neq,m-neq,nbds
49
call tinip(n,x,l,u,m,lambda,equatn,linear,coded,checkder,inform)
50
if ( inform .lt. 0 ) return
52
C Write classification line of final model
54
if ( iprintctl(6) ) then
55
file50_unit_loop: do file50_unit=10, 99
57
inquire(unit=file50_unit, opened=connected)
59
if (.not.connected) exit file50_unit_loop
61
end do file50_unit_loop
63
open(file50_unit,file='class-tabline.out')
64
write(file50_unit,400) n,neq,m-neq,nbds
79
if ( iprintctl(2) ) then
80
write(* ,200) 1.0d0 / sf
81
write(file10_unit,200) 1.0d0 / sf
91
call tevalgjac(n,x,g,m,jcfun,jcvar,jcval,jcnnz,inform)
92
if ( inform .lt. 0 ) return
103
sc(fun) = max( sc(fun), abs( jcval(i) ) )
108
call tevalg(n,x,g,inform)
109
if ( inform .lt. 0 ) return
116
call tevaljac(n,x,j,jcvar,jcval,jcnnz,inform)
117
if ( inform .lt. 0 ) return
120
sc(j) = max( sc(j), abs( jcval(i) ) )
126
C Scale objective function
130
sf = max( sf, abs( g(i) ) )
133
C Report scaling factors
137
scmax = max( scmax, sc(j) )
140
if ( iprintctl(2) ) then
141
write(* ,300) 1.0d0 / sf,1.0d0 / scmax
142
write(file10_unit,300) 1.0d0 / sf,1.0d0 / scmax
146
C NON-EXECUTABLE STATEMENTS
148
100 format(/,1X,'Number of variables : ',I7,
149
+ /,1X,'Number of equality constraints : ',I7,
150
+ /,1X,'Number of inequality constraints : ',I7,
151
+ /,1X,'Number of bound constraints : ',I7)
153
200 format(/,1X,'Objective function scale factor : ',1P,D7.1,
154
+ /,1X,'The scaling feature was mainly developed for ',
155
+ 'constrained problems. For',/,1X,'unconstrained and ',
156
+ 'bound-constrained problem, please, set the ',
157
+ 'optimality',/,1X,'tolerance (related to the ',
158
+ 'sup-norm of the projected gradient of the',/,1X,
159
+ 'objective function) with a convenient value.')
161
300 format(/,1X,'Objective function scale factor : ',1P,D7.1,
162
+ /,1X,'Smallest constraints scale factor : ',1P,D7.1)
164
400 format( 1X,I6,1X,I6,1X,I6,1X,I6)
168
C ******************************************************************
169
C ******************************************************************
171
subroutine sendp(n,x,l,u,m,lambda,equatn,linear,inform)
179
logical equatn(m),linear(m)
180
double precision l(n),lambda(m),u(n),x(n)
183
#include "scaling.com"
190
lambda(i) = lambda(i) * sf / sc(i)
196
call tendp(n,x,l,u,m,lambda,equatn,linear,inform)
197
if ( inform .lt. 0 ) return
201
C ******************************************************************
202
C ******************************************************************
204
subroutine sevalf(n,x,f,inform)
213
double precision x(n)
216
#include "scaling.com"
218
call tevalf(n,x,f,inform)
219
if ( inform .lt. 0 ) return
221
if ( scale ) f = f / sf
225
C ******************************************************************
226
C ******************************************************************
228
subroutine sevalg(n,x,g,inform)
236
double precision g(n),x(n)
239
#include "scaling.com"
244
call tevalg(n,x,g,inform)
245
if ( inform .lt. 0 ) return
255
C ******************************************************************
256
C ******************************************************************
258
subroutine sevalh(n,x,hlin,hcol,hval,hnnz,inform)
263
integer inform,n,hnnz
266
integer hcol(*),hlin(*)
267
double precision hval(*),x(n)
270
#include "scaling.com"
275
call tevalh(n,x,hlin,hcol,hval,hnnz,inform)
276
if ( inform .lt. 0 ) return
280
hval(i) = hval(i) / sf
286
C ******************************************************************
287
C ******************************************************************
289
subroutine sevalc(n,x,ind,c,inform)
298
double precision x(n)
301
#include "scaling.com"
303
call tevalc(n,x,ind,c,inform)
304
if ( inform .lt. 0 ) return
306
if ( scale ) c = c / sc(ind)
310
C ******************************************************************
311
C ******************************************************************
313
subroutine sevaljac(n,x,ind,jcvar,jcval,jcnnz,inform)
318
integer inform,ind,n,jcnnz
322
double precision x(n),jcval(n)
325
#include "scaling.com"
330
call tevaljac(n,x,ind,jcvar,jcval,jcnnz,inform)
331
if ( inform .lt. 0 ) return
335
jcval(i) = jcval(i) / sc(ind)
341
C ******************************************************************
342
C ******************************************************************
344
subroutine sevalhc(n,x,ind,hlin,hcol,hval,hnnz,inform)
349
integer inform,ind,n,hnnz
352
integer hcol(*),hlin(*)
353
double precision hval(*),x(n)
356
#include "scaling.com"
361
call tevalhc(n,x,ind,hlin,hcol,hval,hnnz,inform)
362
if ( inform .lt. 0 ) return
366
hval(i) = hval(i) / sc(ind)
372
C ******************************************************************
373
C ******************************************************************
375
subroutine sevalhl(n,x,m,lambda,hlin,hcol,hval,hnnz,inform)
380
integer hnnz,inform,m,n
383
integer hlin(*),hcol(*)
384
double precision hval(*),lambda(m),x(n)
387
#include "scaling.com"
390
call tevalhl(n,x,m,lambda,sf,sc,hlin,hcol,hval,hnnz,inform)
391
if ( inform .lt. 0 ) return
394
call tevalhl(n,x,m,lambda,usf,usc,hlin,hcol,hval,hnnz,inform)
395
if ( inform .lt. 0 ) return
400
C ******************************************************************
401
C ******************************************************************
403
subroutine sevalhlp(n,x,m,lambda,p,hp,gothl,inform)
412
double precision hp(n),lambda(m),p(n),x(n)
415
#include "scaling.com"
418
call tevalhlp(n,x,m,lambda,sf,sc,p,hp,gothl,inform)
419
if ( inform .lt. 0 ) return
422
call tevalhlp(n,x,m,lambda,usf,usc,p,hp,gothl,inform)
423
if ( inform .lt. 0 ) return
428
C ******************************************************************
429
C ******************************************************************
431
subroutine sevalfc(n,x,f,m,c,inform)
440
double precision c(m),x(n)
443
#include "scaling.com"
448
call tevalfc(n,x,f,m,c,inform)
449
if ( inform .lt. 0 ) return
461
C ******************************************************************
462
C ******************************************************************
464
subroutine sevalgjac(n,x,g,m,jcfun,jcvar,jcval,jcnnz,inform)
469
integer inform,jcnnz,m,n
472
integer jcfun(*),jcvar(*)
473
double precision g(n),jcval(*),x(n)
476
#include "scaling.com"
481
call tevalgjac(n,x,g,m,jcfun,jcvar,jcval,jcnnz,inform)
482
if ( inform .lt. 0 ) return
490
jcval(i) = jcval(i) / sc(jcfun(i))
496
C ******************************************************************
497
C ******************************************************************
499
subroutine ssetp(n,x)
507
double precision x(n)
513
C ******************************************************************
514
C ******************************************************************