CONOPT
Loading...
Searching...
No Matches
pinopt.f90
Go to the documentation of this file.
1!> @file pinopt.f90
2!! @ingroup FORT1THREAD_EXAMPLES
3!!
4!!
5!! pinopt is a version of pindyck in which we define options
6!! with an options routine.
7!!
8!!
9!! For more information about the individual callbacks, please have a look at the source code.
10
11#if defined(_WIN32) && !defined(_WIN64)
12#define dec_directives_win32
13#endif
14
15!> Main program. A simple setup and call of CONOPT
16!!
17Program pindyck
18 Use proginfo
20 Use data_t
21 Implicit none
22!
23! Declare the user callback routines as Integer, External:
24!
25 Integer, External :: pin_readmatrix ! Mandatory Matrix definition routine defined below
26 Integer, External :: pin_fdeval ! Function and Derivative evaluation routine
27 ! needed a nonlinear model.
28 Integer, External :: std_status ! Standard callback for displaying solution status
29 Integer, External :: pin_solution ! Specialized callback for displaying solution values
30 Integer, External :: std_message ! Standard callback for managing messages
31 Integer, External :: std_errmsg ! Standard callback for managing error messages
32 Integer, External :: pin_option ! Option defining callback routine
33#ifdef dec_directives_win32
34!DEC$ ATTRIBUTES STDCALL, REFERENCE, NOMIXED_STR_LEN_ARG :: Pin_ReadMatrix
35!DEC$ ATTRIBUTES STDCALL, REFERENCE, NOMIXED_STR_LEN_ARG :: Pin_FDEval
36!DEC$ ATTRIBUTES STDCALL, REFERENCE, NOMIXED_STR_LEN_ARG :: Std_Status
37!DEC$ ATTRIBUTES STDCALL, REFERENCE, NOMIXED_STR_LEN_ARG :: Pin_Solution
38!DEC$ ATTRIBUTES STDCALL, REFERENCE, NOMIXED_STR_LEN_ARG :: Std_Message
39!DEC$ ATTRIBUTES STDCALL, REFERENCE, NOMIXED_STR_LEN_ARG :: Std_ErrMsg
40!DEC$ ATTRIBUTES STDCALL, REFERENCE, NOMIXED_STR_LEN_ARG :: Pin_Option
41#endif
42!
43! Control vector
44!
45 INTEGER, Dimension(:), Pointer :: cntvect
46 INTEGER :: coi_error
47!
48! Other variables
49!
50 INTEGER :: major, minor, patch
51
52 call startup
53!
54! Create and initialize a Control Vector
55!
56 coi_error = coi_create( cntvect )
57
58! Write which version of CONOPT we are using.
59
60 call coiget_version( major, minor, patch )
61 write(*,"('Solving Pindyck Model using CONOPT version ',i2,'.',i2,'.',i2)") major, minor, patch
62!
63! Define the number of time periods, T.
64!
65 t = 16
66!
67! Tell CONOPT about the size of the model by populating the Control Vector:
68!
69! Number of variables (excl. slacks): 7 per period
70!
71 coi_error = max( coi_error, coidef_numvar( cntvect, 7 * t ) )
72!
73! Number of equations: 1 objective + 6 per period
74!
75 coi_error = max( coi_error, coidef_numcon( cntvect, 1 + 6 * t ) )
76!
77! Number of nonzeros in the Jacobian. See the counting in ReadMatrix below:
78! For each period there is 1 in the objective, 16 for unlagged
79! variables and 4 for lagged variables.
80!
81 coi_error = max( coi_error, coidef_numnz( cntvect, 17 * t + 4 * (t-1) ) )
82!
83! Number of nonlinear nonzeros. 5 unlagged for each period.
84!
85 coi_error = max( coi_error, coidef_numnlnz( cntvect, 5 * t ) )
86!
87! Direction: +1 = maximization.
88!
89 coi_error = max( coi_error, coidef_optdir( cntvect, 1 ) )
90!
91! Objective: Constraint no 1
92!
93 coi_error = max( coi_error, coidef_objcon( cntvect, 1 ) )
94!
95! Tell CONOPT about the callback routines:
96!
97 coi_error = max( coi_error, coidef_readmatrix( cntvect, pin_readmatrix ) )
98 coi_error = max( coi_error, coidef_fdeval( cntvect, pin_fdeval ) )
99 coi_error = max( coi_error, coidef_status( cntvect, std_status ) )
100 coi_error = max( coi_error, coidef_solution( cntvect, pin_solution ) )
101 coi_error = max( coi_error, coidef_message( cntvect, std_message ) )
102 coi_error = max( coi_error, coidef_errmsg( cntvect, std_errmsg ) )
103 coi_error = max( coi_error, coidef_option( cntvect, pin_option ) )
104
105#if defined(CONOPT_LICENSE_INT_1) && defined(CONOPT_LICENSE_INT_2) && defined(CONOPT_LICENSE_INT_3) && defined(CONOPT_LICENSE_TEXT)
106 coi_error = max( coi_error, coidef_license( cntvect, conopt_license_int_1, conopt_license_int_2, conopt_license_int_3, conopt_license_text) )
107#endif
108
109 If ( coi_error .ne. 0 ) THEN
110 write(*,*)
111 write(*,*) '**** Fatal Error while loading CONOPT Callback routines.'
112 write(*,*)
113 call flog( "Skipping Solve due to setup errors", 1 )
114 ENDIF
115!
116! Save the solution so we can check the duals:
117!
118 do_allocate = .true.
119!
120! Start CONOPT:
121!
122 coi_error = coi_solve( cntvect )
123
124 write(*,*)
125 write(*,*) 'End of Pindyck Model. Return code=',coi_error
126
127 If ( coi_error /= 0 ) then
128 call flog( "Errors encountered during solution", 1 )
129 elseif ( stacalls == 0 .or. solcalls == 0 ) then
130 call flog( "Status or Solution routine was not called", 1 )
131 elseif ( sstat /= 1 .or. mstat /= 2 ) then
132 call flog( "Solver and Model Status was not as expected (1,2)", 1 )
133 elseif ( abs( obj-1170.4863d0 ) > 0.0001d0 ) then
134 call flog( "Incorrect objective returned", 1 )
135 Else
136 Call checkdual( 'PinOpt', maximize )
137 endif
138
139 if ( coi_free(cntvect) /= 0 ) call flog( "Error while freeing control vector",1)
140
141 call flog( "Successful Solve", 0 )
143end Program pindyck
144!
145! =====================================================================
146! Define information about the model structure
147!
148
149!> Define information about the model
150!!
151!! @include{doc} readMatrix_params.dox
152Integer Function pin_readmatrix( lower, curr, upper, vsta, type, rhs, esta, &
153 colsta, rowno, value, nlflag, n, m, nz, usrmem )
154#ifdef dec_directives_win32
155!DEC$ ATTRIBUTES STDCALL, REFERENCE, NOMIXED_STR_LEN_ARG :: Pin_ReadMatrix
156#endif
157 Use data_t
158 implicit none
159 integer, intent (in) :: n ! number of variables
160 integer, intent (in) :: m ! number of constraints
161 integer, intent (in) :: nz ! number of nonzeros
162 real*8, intent (in out), dimension(n) :: lower ! vector of lower bounds
163 real*8, intent (in out), dimension(n) :: curr ! vector of initial values
164 real*8, intent (in out), dimension(n) :: upper ! vector of upper bounds
165 integer, intent (in out), dimension(n) :: vsta ! vector of initial variable status
166 ! (not defined here)
167 integer, intent (out), dimension(m) :: type ! vector of equation types
168 integer, intent (in out), dimension(m) :: esta ! vector of initial equation status
169 ! (not defined here)
170 real*8, intent (in out), dimension(m) :: rhs ! vector of right hand sides
171 integer, intent (in out), dimension(n+1) :: colsta ! vector with start of column indices
172 integer, intent (out), dimension(nz) :: rowno ! vector of row numbers
173 integer, intent (in out), dimension(nz) :: nlflag ! vector of nonlinearity flags
174 real*8, intent (in out), dimension(nz) :: value ! vector of matrix values
175 real*8 usrmem(*) ! optional user memory
176
177 Integer :: it, is, i, icol, iz
178!
179! Define the information for the columns.
180!
181! We should not supply status information, vsta.
182!
183! We order the variables as follows:
184! td, cs, s, d, r, p, and rev. All variables for period 1 appears
185! first followed by all variables for period 2 etc.
186!
187! td, cs, s, and d have lower bounds of 0, r and p have lower
188! bounds of 1, and rev has no lower bound.
189! All have infinite upper bounds (default).
190! The initial value of td is 18, s is 7, cs is 7*t, d is td-s,
191! p is 14, and r is r(t-1)-d. No initial value for rev.
192!
193 do it = 1, t
194 is = 7*(it-1)
195 lower(is+1) = 0.d0
196 lower(is+2) = 0.d0
197 lower(is+3) = 0.d0
198 lower(is+4) = 0.d0
199 lower(is+5) = 1.d0
200 lower(is+6) = 1.d0
201 curr(is+1) = 18.d0
202 curr(is+2) = 7.d0*it
203 curr(is+3) = 7.d0
204 curr(is+4) = curr(is+1) - curr(is+3)
205 if ( it .gt. 1 ) then
206 curr(is+5) = curr(is+5-7) - curr(is+4)
207 else
208 curr(is+5) = 500.d0 - curr(is+4)
209 endif
210 curr(is+6) = 14.d0
211 enddo
212!
213! Define the information for the rows
214!
215! We order the constraints as follows: The objective is first,
216! followed by tddef, sdef, csdef, ddef, rdef, and revdef for
217! the first period, the same for the second period, etc.
218!
219! The objective is a nonbinding constraint:
220!
221 type(1) = 3
222!
223! All others are equalities:
224!
225 do i = 2, m
226 type(i) = 0
227 enddo
228!
229! Right hand sides: In all periods except the first, only tddef
230! has a nonzero right hand side of 1+2.3*1.015**(t-1).
231! In the initial period there are contributions from lagged
232! variables in the constraints that have lagged variables.
233!
234 do it = 1, t
235 is = 1 + 6*(it-1)
236 rhs(is+1) = 1.d0+2.3d0*1.015d0**(it-1)
237 enddo
238!
239! tddef: + 0.87*td(0)
240!
241 rhs(2) = rhs(2) + 0.87d0*18.d0
242!
243! sdef: +0.75*s(0)
244!
245 rhs(3) = 0.75d0*6.5d0
246!
247! csdef: +1*cs(0)
248!
249 rhs(4) = 0.d0
250!
251! rdef: +1*r(0)
252!
253 rhs(6) = 500.d0
254!
255! Define the structure and content of the Jacobian:
256! To help define the Jacobian pattern and values it can be useful to
257! make a picture of the Jacobian. We describe the variables for one
258! period and the constraints they are part of:
259!
260! td cs s d r p rev
261! Obj (1+r)**(1-t)
262! Period t:
263! tddef 1.0 0.13
264! sdef NL 1.0 NL
265! csdef 1.0 -1.0
266! ddef -1.0 1.0 1.0
267! rdef 1.0 1.0
268! revdef NL NL NL 1.0
269! Period t+1:
270! tddef -0.87
271! sdef -0.75
272! csdef -1.0
273! ddef
274! rdef -1.0
275! revdef
276!
277! The Jacobian has to be sorted column-wise so we will just define
278! the elements column by column according to the table above:
279!
280 iz = 1
281 icol = 1
282 do it = 1, t
283!
284! is points to the position before the first equation for the period
285!
286 is = 1 + 6*(it-1)
287!
288! Column td:
289!
290 colsta(icol) = iz
291 icol = icol + 1
292 rowno(iz) = is+1
293 value(iz) = +1.d0
294 nlflag(iz) = 0
295 iz = iz + 1
296 rowno(iz) = is+4
297 value(iz) = -1.d0
298 nlflag(iz) = 0
299 iz = iz + 1
300 if ( it .lt. t ) then
301 rowno(iz) = is+7
302 value(iz) = -0.87d0
303 nlflag(iz) = 0
304 iz = iz + 1
305 endif
306!
307! Column cs
308!
309 colsta(icol) = iz
310 icol = icol + 1
311 rowno(iz) = is+2
312 nlflag(iz) = 1
313 iz = iz + 1
314 rowno(iz) = is+3
315 value(iz) = +1.d0
316 nlflag(iz) = 0
317 iz = iz + 1
318 if ( it .lt. t ) then
319 rowno(iz) = is+9
320 value(iz) = -1.d0
321 nlflag(iz) = 0
322 iz = iz + 1
323 endif
324!
325! Column s
326!
327 colsta(icol) = iz
328 icol = icol + 1
329 rowno(iz) = is+2
330 value(iz) = +1.d0
331 nlflag(iz) = 0
332 iz = iz + 1
333 rowno(iz) = is+3
334 value(iz) = -1.d0
335 nlflag(iz) = 0
336 iz = iz + 1
337 rowno(iz) = is+4
338 value(iz) = +1.d0
339 nlflag(iz) = 0
340 iz = iz + 1
341 if ( it .lt. t ) then
342 rowno(iz) = is+8
343 value(iz) = -0.75d0
344 nlflag(iz) = 0
345 iz = iz + 1
346 endif
347!
348! Column d:
349!
350 colsta(icol) = iz
351 icol = icol + 1
352 rowno(iz) = is+4
353 value(iz) = +1.d0
354 nlflag(iz) = 0
355 iz = iz + 1
356 rowno(iz) = is+5
357 value(iz) = +1.d0
358 nlflag(iz) = 0
359 iz = iz + 1
360 rowno(iz) = is+6
361 nlflag(iz) = 1
362 iz = iz + 1
363!
364! Column r:
365!
366 colsta(icol) = iz
367 icol = icol + 1
368 rowno(iz) = is+5
369 value(iz) = +1.d0
370 nlflag(iz) = 0
371 iz = iz + 1
372 rowno(iz) = is+6
373 nlflag(iz) = 1
374 iz = iz + 1
375 if ( it .lt. t ) then
376 rowno(iz) = is+11
377 value(iz) = -1.d0
378 nlflag(iz) = 0
379 iz = iz + 1
380 endif
381!
382! Column p:
383!
384 colsta(icol) = iz
385 icol = icol + 1
386 rowno(iz) = is+1
387 value(iz) = +0.13d0
388 nlflag(iz) = 0
389 iz = iz + 1
390 rowno(iz) = is+2
391 nlflag(iz) = 1
392 iz = iz + 1
393 rowno(iz) = is+6
394 nlflag(iz) = 1
395 iz = iz + 1
396!
397! Column rev:
398!
399 colsta(icol) = iz
400 icol = icol + 1
401 rowno(iz) = +1
402 value(iz) = 1.05d0**(1-it)
403 nlflag(iz) = 0
404 iz = iz + 1
405 rowno(iz) = is+6
406 value(iz) = 1.d0
407 nlflag(iz) = 0
408 iz = iz + 1
409 enddo
410 colsta(icol) = iz
411
413
414end Function pin_readmatrix
415!
416! =====================================================================
417! Compute nonlinear terms and non-constant Jacobian elements
418!
419
420!> Compute nonlinear terms and non-constant Jacobian elements
421!!
422!! @include{doc} fdeval_params.dox
423Integer Function pin_fdeval( x, g, jac, rowno, jcnm, mode, ignerr, errcnt, &
424 n, nz, thread, usrmem )
425#ifdef dec_directives_win32
426!DEC$ ATTRIBUTES STDCALL, REFERENCE, NOMIXED_STR_LEN_ARG :: Pin_FDEval
427#endif
428 Use data_t
429 implicit none
430 integer, intent (in) :: n ! number of variables
431 integer, intent (in) :: rowno ! number of the row to be evaluated
432 integer, intent (in) :: nz ! number of nonzeros in this row
433 real*8, intent (in), dimension(n) :: x ! vector of current solution values
434 real*8, intent (in out) :: g ! constraint value
435 real*8, intent (in out), dimension(n) :: jac ! vector of derivatives for current constraint
436 integer, intent (in), dimension(nz) :: jcnm ! list of variables that appear nonlinearly
437 ! in this row. Ffor information only.
438 integer, intent (in) :: mode ! evaluation mode: 1 = function value
439 ! 2 = derivatives, 3 = both
440 integer, intent (in) :: ignerr ! if 1 then errors can be ignored as long
441 ! as errcnt is incremented
442 integer, intent (in out) :: errcnt ! error counter to be incremented in case
443 ! of function evaluation errors.
444 integer, intent (in) :: thread
445 real*8 usrmem(*) ! optional user memory
446
447 integer it, is
448 real*8 h1, h2
449!
450! Compute the number of the period
451!
452 pin_fdeval = 0
453 it = (rowno+4) / 6
454 is = 7*(it-1)
455 if ( rowno == (it-1)*6+3 ) then
456!
457! sdef equation. Nonlinear term = -(1.1+0.1*p)*1.02**(-cs/7)
458!
459 h1 = (1.1d0+0.1d0*x(is+6))
460 h2 = 1.02d0**(-x(is+2)/7.d0)
461 if ( mode == 1 .or. mode == 3 ) then
462 g = -h1*h2
463 endif
464 if ( mode == 2 .or. mode == 3 ) then
465 jac(is+2) = h1*h2*log(1.02d0)/7.d0
466 jac(is+6) = -h2*0.1d0
467 endif
468 elseif ( rowno == (it-1)*6+7 ) then
469!
470! revdef equation. Nonlinear term = -d*(p-250/r)
471!
472 if ( mode == 1 .or. mode == 3 ) then
473 g = -x(is+4)*(x(is+6)-250.d0/x(is+5))
474 endif
475 if ( mode == 2 .or. mode == 3 ) then
476 jac(is+4) = -(x(is+6)-250.d0/x(is+5))
477 jac(is+5) = -x(is+4)*250d0/x(is+5)**2
478 jac(is+6) = -x(is+4)
479 endif
480 else
481!
482! Error - this equation is not nonlinear
483!
484 write(*,*)
485 write(*,*) 'Error. FDEval called with rowno=',rowno
486 write(*,*)
487 pin_fdeval = 1
488 endif
489
490end Function pin_fdeval
491
492Integer Function pin_solution( XVAL, XMAR, XBAS, XSTA, YVAL, YMAR, YBAS, YSTA, N, M, USRMEM )
493#ifdef dec_directives_win32
494!DEC$ ATTRIBUTES STDCALL, REFERENCE, NOMIXED_STR_LEN_ARG :: Pin_Solution
495#endif
496!
497! Specialized solution callback routine with names for variables and constraints
498!
499 Use proginfo
500 Use data_t
501 IMPLICIT NONE
502 INTEGER, Intent(IN) :: n, m
503 INTEGER, Intent(IN), Dimension(N) :: xbas, xsta
504 INTEGER, Intent(IN), Dimension(M) :: ybas, ysta
505 real*8, Intent(IN), Dimension(N) :: xval, xmar
506 real*8, Intent(IN), Dimension(M) :: yval, ymar
507 real*8, Intent(IN OUT) :: usrmem(*)
508 character*6, parameter, dimension(7) :: vname = (/'td ','cs ','s ','d ','r ','p ','rev '/)
509 character*6, parameter, dimension(6) :: ename = (/'tddef ','sdef ','csdef ','ddef ','rdef ','revdef'/)
510
511 INTEGER :: i, it, i1
512 CHARACTER*5, Parameter, Dimension(4) :: stat = (/ 'Lower','Upper','Basic','Super' /)
513
514 WRITE(10,"(/' Variable Solution value Reduced cost B-stat'/)")
515 i = 0
516 do it = 1, t
517 DO i1 = 1, 7
518 i = i + 1
519 WRITE(10,"(1X,A6,i2,1p,E20.6,E16.6,4X,A5 )") vname(i1), it, xval(i), xmar(i), stat(1+xbas(i))
520 ENDDO
521 enddo
522
523 WRITE(10,"(/' Constrnt Activity level Marginal cost B-stat'/)")
524 i = 1
525 WRITE(10,"(1x,'Objective',1P,E19.6,E16.6,4X,A5 )") yval(i), ymar(i), stat(1+ybas(i))
526 do it = 1, t
527 do i1 = 1, 6
528 i = i + 1
529 WRITE(10,"(1x,A6,i2,1P,E20.6,E16.6,4X,A5 )") ename(i1),it, yval(i), ymar(i), stat(1+ybas(i))
530 enddo
531 ENDDO
532
533 solcalls = solcalls + 1
534 pin_solution = 0
535
536END Function pin_solution
537
538
539!> Sets runtime options
540!!
541!! @include{doc} option_params.dox
542Integer Function pin_option( ncall, rval, ival, lval, usrmem, name )
543#ifdef dec_directives_win32
544!DEC$ ATTRIBUTES STDCALL, REFERENCE, NOMIXED_STR_LEN_ARG :: Pin_Option
545#endif
546 integer ncall, ival, lval
547 character(Len=*) :: name
548 real*8 rval
549 real*8 usrmem(*) ! optional user memory
550
551 Select case (ncall)
552 case (1)
553 name = 'Doprep' ! Turn the preprocessor off.
554 lval = 0 ! false
555 case (2)
556 name = 'Lotria' ! Output from the preprocessor
557 ival = 1 !
558 case default
559 name = ' '
560 end Select
561 pin_option = 0
562
563end Function pin_option
integer function std_status(modsta, solsta, iter, objval, usrmem)
Definition comdecl.f90:88
subroutine checkdual(case, minmax)
Definition comdecl.f90:394
integer function std_message(smsg, dmsg, nmsg, llen, usrmem, msgv)
Definition comdecl.f90:205
integer function std_errmsg(rowno, colno, posno, msglen, usrmem, msg)
Definition comdecl.f90:248
integer function pin_fdeval(x, g, jac, rowno, jcnm, mode, ignerr, errcnt, n, nz, thread, usrmem)
Compute nonlinear terms and non-constant Jacobian elements.
Definition fvboth.f90:425
integer function pin_readmatrix(lower, curr, upper, vsta, type, rhs, esta, colsta, rowno, value, nlflag, n, m, nz, usrmem)
Define information about the model.
Definition fvboth.f90:157
integer function pin_solution(xval, xmar, xbas, xsta, yval, ymar, ybas, ysta, n, m, usrmem)
Definition fvboth.f90:531
integer(c_int) function coidef_message(cntvect, coi_message)
define callback routine for handling messages returned during the solution process.
Definition conopt.f90:1265
integer(c_int) function coidef_solution(cntvect, coi_solution)
define callback routine for returning the final solution values.
Definition conopt.f90:1238
integer(c_int) function coidef_status(cntvect, coi_status)
define callback routine for returning the completion status.
Definition conopt.f90:1212
integer(c_int) function coidef_readmatrix(cntvect, coi_readmatrix)
define callback routine for providing the matrix data to CONOPT.
Definition conopt.f90:1111
integer(c_int) function coidef_errmsg(cntvect, coi_errmsg)
define callback routine for returning error messages for row, column or Jacobian elements.
Definition conopt.f90:1291
integer(c_int) function coidef_fdeval(cntvect, coi_fdeval)
define callback routine for performing function and derivative evaluations.
Definition conopt.f90:1135
integer(c_int) function coidef_option(cntvect, coi_option)
define callback routine for defining runtime options.
Definition conopt.f90:1346
integer(c_int) function coidef_license(cntvect, licint1, licint2, licint3, licstring)
define the License Information.
Definition conopt.f90:293
integer(c_int) function coidef_numvar(cntvect, numvar)
defines the number of variables in the model.
Definition conopt.f90:97
integer(c_int) function coidef_numcon(cntvect, numcon)
defines the number of constraints in the model.
Definition conopt.f90:121
integer(c_int) function coidef_numnlnz(cntvect, numnlnz)
defines the Number of Nonlinear Nonzeros.
Definition conopt.f90:167
integer(c_int) function coidef_optdir(cntvect, optdir)
defines the Optimization Direction.
Definition conopt.f90:213
integer(c_int) function coidef_numnz(cntvect, numnz)
defines the number of nonzero elements in the Jacobian.
Definition conopt.f90:144
integer(c_int) function coidef_objcon(cntvect, objcon)
defines the Objective Constraint.
Definition conopt.f90:239
integer(c_int) function coi_create(cntvect)
initializes CONOPT and creates the control vector.
Definition conopt.f90:1726
integer(c_int) function coi_free(cntvect)
frees the control vector.
Definition conopt.f90:1749
subroutine coiget_version(major, minor, patch)
returns the version number. It can be used to ensure that the modeler is linked to the correct versio...
Definition conopt.f90:1645
integer(c_int) function coi_solve(cntvect)
method for starting the solving process of CONOPT.
Definition conopt.f90:1625
real *8 obj
Definition comdecl.f90:16
integer solcalls
Definition comdecl.f90:15
integer sstat
Definition comdecl.f90:18
integer stacalls
Definition comdecl.f90:14
subroutine flog(msg, code)
Definition comdecl.f90:62
logical do_allocate
Definition comdecl.f90:27
integer, parameter maximize
Definition comdecl.f90:31
integer mstat
Definition comdecl.f90:17
subroutine startup
Definition comdecl.f90:41
program pindyck
Main program. A simple setup and call of CONOPT.
Definition pindyck.f90:85
integer function pin_option(ncall, rval, ival, lval, usrmem, name)
Sets runtime options.
Definition pinopt.f90:524