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 )
142!
143! Free solution memory
144!
145 call finalize
147end Program pindyck
148!
149! =====================================================================
150! Define information about the model structure
151!
152
153!> Define information about the model
154!!
155!! @include{doc} readMatrix_params.dox
156Integer Function pin_readmatrix( lower, curr, upper, vsta, type, rhs, esta, &
157 colsta, rowno, value, nlflag, n, m, nz, usrmem )
158#ifdef dec_directives_win32
159!DEC$ ATTRIBUTES STDCALL, REFERENCE, NOMIXED_STR_LEN_ARG :: Pin_ReadMatrix
160#endif
161 Use data_t
162 implicit none
163 integer, intent (in) :: n ! number of variables
164 integer, intent (in) :: m ! number of constraints
165 integer, intent (in) :: nz ! number of nonzeros
166 real*8, intent (in out), dimension(n) :: lower ! vector of lower bounds
167 real*8, intent (in out), dimension(n) :: curr ! vector of initial values
168 real*8, intent (in out), dimension(n) :: upper ! vector of upper bounds
169 integer, intent (in out), dimension(n) :: vsta ! vector of initial variable status
170 ! (not defined here)
171 integer, intent (out), dimension(m) :: type ! vector of equation types
172 integer, intent (in out), dimension(m) :: esta ! vector of initial equation status
173 ! (not defined here)
174 real*8, intent (in out), dimension(m) :: rhs ! vector of right hand sides
175 integer, intent (in out), dimension(n+1) :: colsta ! vector with start of column indices
176 integer, intent (out), dimension(nz) :: rowno ! vector of row numbers
177 integer, intent (in out), dimension(nz) :: nlflag ! vector of nonlinearity flags
178 real*8, intent (in out), dimension(nz) :: value ! vector of matrix values
179 real*8 usrmem(*) ! optional user memory
180
181 Integer :: it, is, i, icol, iz
182!
183! Define the information for the columns.
184!
185! We should not supply status information, vsta.
186!
187! We order the variables as follows:
188! td, cs, s, d, r, p, and rev. All variables for period 1 appears
189! first followed by all variables for period 2 etc.
190!
191! td, cs, s, and d have lower bounds of 0, r and p have lower
192! bounds of 1, and rev has no lower bound.
193! All have infinite upper bounds (default).
194! The initial value of td is 18, s is 7, cs is 7*t, d is td-s,
195! p is 14, and r is r(t-1)-d. No initial value for rev.
196!
197 do it = 1, t
198 is = 7*(it-1)
199 lower(is+1) = 0.d0
200 lower(is+2) = 0.d0
201 lower(is+3) = 0.d0
202 lower(is+4) = 0.d0
203 lower(is+5) = 1.d0
204 lower(is+6) = 1.d0
205 curr(is+1) = 18.d0
206 curr(is+2) = 7.d0*it
207 curr(is+3) = 7.d0
208 curr(is+4) = curr(is+1) - curr(is+3)
209 if ( it .gt. 1 ) then
210 curr(is+5) = curr(is+5-7) - curr(is+4)
211 else
212 curr(is+5) = 500.d0 - curr(is+4)
213 endif
214 curr(is+6) = 14.d0
215 enddo
216!
217! Define the information for the rows
218!
219! We order the constraints as follows: The objective is first,
220! followed by tddef, sdef, csdef, ddef, rdef, and revdef for
221! the first period, the same for the second period, etc.
222!
223! The objective is a nonbinding constraint:
224!
225 type(1) = 3
226!
227! All others are equalities:
228!
229 do i = 2, m
230 type(i) = 0
231 enddo
232!
233! Right hand sides: In all periods except the first, only tddef
234! has a nonzero right hand side of 1+2.3*1.015**(t-1).
235! In the initial period there are contributions from lagged
236! variables in the constraints that have lagged variables.
237!
238 do it = 1, t
239 is = 1 + 6*(it-1)
240 rhs(is+1) = 1.d0+2.3d0*1.015d0**(it-1)
241 enddo
242!
243! tddef: + 0.87*td(0)
244!
245 rhs(2) = rhs(2) + 0.87d0*18.d0
246!
247! sdef: +0.75*s(0)
248!
249 rhs(3) = 0.75d0*6.5d0
250!
251! csdef: +1*cs(0)
252!
253 rhs(4) = 0.d0
254!
255! rdef: +1*r(0)
256!
257 rhs(6) = 500.d0
258!
259! Define the structure and content of the Jacobian:
260! To help define the Jacobian pattern and values it can be useful to
261! make a picture of the Jacobian. We describe the variables for one
262! period and the constraints they are part of:
263!
264! td cs s d r p rev
265! Obj (1+r)**(1-t)
266! Period t:
267! tddef 1.0 0.13
268! sdef NL 1.0 NL
269! csdef 1.0 -1.0
270! ddef -1.0 1.0 1.0
271! rdef 1.0 1.0
272! revdef NL NL NL 1.0
273! Period t+1:
274! tddef -0.87
275! sdef -0.75
276! csdef -1.0
277! ddef
278! rdef -1.0
279! revdef
280!
281! The Jacobian has to be sorted column-wise so we will just define
282! the elements column by column according to the table above:
283!
284 iz = 1
285 icol = 1
286 do it = 1, t
287!
288! is points to the position before the first equation for the period
289!
290 is = 1 + 6*(it-1)
291!
292! Column td:
293!
294 colsta(icol) = iz
295 icol = icol + 1
296 rowno(iz) = is+1
297 value(iz) = +1.d0
298 nlflag(iz) = 0
299 iz = iz + 1
300 rowno(iz) = is+4
301 value(iz) = -1.d0
302 nlflag(iz) = 0
303 iz = iz + 1
304 if ( it .lt. t ) then
305 rowno(iz) = is+7
306 value(iz) = -0.87d0
307 nlflag(iz) = 0
308 iz = iz + 1
309 endif
310!
311! Column cs
312!
313 colsta(icol) = iz
314 icol = icol + 1
315 rowno(iz) = is+2
316 nlflag(iz) = 1
317 iz = iz + 1
318 rowno(iz) = is+3
319 value(iz) = +1.d0
320 nlflag(iz) = 0
321 iz = iz + 1
322 if ( it .lt. t ) then
323 rowno(iz) = is+9
324 value(iz) = -1.d0
325 nlflag(iz) = 0
326 iz = iz + 1
327 endif
328!
329! Column s
330!
331 colsta(icol) = iz
332 icol = icol + 1
333 rowno(iz) = is+2
334 value(iz) = +1.d0
335 nlflag(iz) = 0
336 iz = iz + 1
337 rowno(iz) = is+3
338 value(iz) = -1.d0
339 nlflag(iz) = 0
340 iz = iz + 1
341 rowno(iz) = is+4
342 value(iz) = +1.d0
343 nlflag(iz) = 0
344 iz = iz + 1
345 if ( it .lt. t ) then
346 rowno(iz) = is+8
347 value(iz) = -0.75d0
348 nlflag(iz) = 0
349 iz = iz + 1
350 endif
351!
352! Column d:
353!
354 colsta(icol) = iz
355 icol = icol + 1
356 rowno(iz) = is+4
357 value(iz) = +1.d0
358 nlflag(iz) = 0
359 iz = iz + 1
360 rowno(iz) = is+5
361 value(iz) = +1.d0
362 nlflag(iz) = 0
363 iz = iz + 1
364 rowno(iz) = is+6
365 nlflag(iz) = 1
366 iz = iz + 1
367!
368! Column r:
369!
370 colsta(icol) = iz
371 icol = icol + 1
372 rowno(iz) = is+5
373 value(iz) = +1.d0
374 nlflag(iz) = 0
375 iz = iz + 1
376 rowno(iz) = is+6
377 nlflag(iz) = 1
378 iz = iz + 1
379 if ( it .lt. t ) then
380 rowno(iz) = is+11
381 value(iz) = -1.d0
382 nlflag(iz) = 0
383 iz = iz + 1
384 endif
385!
386! Column p:
387!
388 colsta(icol) = iz
389 icol = icol + 1
390 rowno(iz) = is+1
391 value(iz) = +0.13d0
392 nlflag(iz) = 0
393 iz = iz + 1
394 rowno(iz) = is+2
395 nlflag(iz) = 1
396 iz = iz + 1
397 rowno(iz) = is+6
398 nlflag(iz) = 1
399 iz = iz + 1
400!
401! Column rev:
402!
403 colsta(icol) = iz
404 icol = icol + 1
405 rowno(iz) = +1
406 value(iz) = 1.05d0**(1-it)
407 nlflag(iz) = 0
408 iz = iz + 1
409 rowno(iz) = is+6
410 value(iz) = 1.d0
411 nlflag(iz) = 0
412 iz = iz + 1
413 enddo
414 colsta(icol) = iz
415
417
418end Function pin_readmatrix
419!
420! =====================================================================
421! Compute nonlinear terms and non-constant Jacobian elements
422!
423
424!> Compute nonlinear terms and non-constant Jacobian elements
425!!
426!! @include{doc} fdeval_params.dox
427Integer Function pin_fdeval( x, g, jac, rowno, jcnm, mode, ignerr, errcnt, &
428 n, nz, thread, usrmem )
429#ifdef dec_directives_win32
430!DEC$ ATTRIBUTES STDCALL, REFERENCE, NOMIXED_STR_LEN_ARG :: Pin_FDEval
431#endif
432 Use data_t
433 implicit none
434 integer, intent (in) :: n ! number of variables
435 integer, intent (in) :: rowno ! number of the row to be evaluated
436 integer, intent (in) :: nz ! number of nonzeros in this row
437 real*8, intent (in), dimension(n) :: x ! vector of current solution values
438 real*8, intent (in out) :: g ! constraint value
439 real*8, intent (in out), dimension(n) :: jac ! vector of derivatives for current constraint
440 integer, intent (in), dimension(nz) :: jcnm ! list of variables that appear nonlinearly
441 ! in this row. Ffor information only.
442 integer, intent (in) :: mode ! evaluation mode: 1 = function value
443 ! 2 = derivatives, 3 = both
444 integer, intent (in) :: ignerr ! if 1 then errors can be ignored as long
445 ! as errcnt is incremented
446 integer, intent (in out) :: errcnt ! error counter to be incremented in case
447 ! of function evaluation errors.
448 integer, intent (in) :: thread
449 real*8 usrmem(*) ! optional user memory
450
451 integer it, is
452 real*8 h1, h2
453!
454! Compute the number of the period
455!
456 pin_fdeval = 0
457 it = (rowno+4) / 6
458 is = 7*(it-1)
459 if ( rowno == (it-1)*6+3 ) then
460!
461! sdef equation. Nonlinear term = -(1.1+0.1*p)*1.02**(-cs/7)
462!
463 h1 = (1.1d0+0.1d0*x(is+6))
464 h2 = 1.02d0**(-x(is+2)/7.d0)
465 if ( mode == 1 .or. mode == 3 ) then
466 g = -h1*h2
467 endif
468 if ( mode == 2 .or. mode == 3 ) then
469 jac(is+2) = h1*h2*log(1.02d0)/7.d0
470 jac(is+6) = -h2*0.1d0
471 endif
472 elseif ( rowno == (it-1)*6+7 ) then
473!
474! revdef equation. Nonlinear term = -d*(p-250/r)
475!
476 if ( mode == 1 .or. mode == 3 ) then
477 g = -x(is+4)*(x(is+6)-250.d0/x(is+5))
478 endif
479 if ( mode == 2 .or. mode == 3 ) then
480 jac(is+4) = -(x(is+6)-250.d0/x(is+5))
481 jac(is+5) = -x(is+4)*250d0/x(is+5)**2
482 jac(is+6) = -x(is+4)
483 endif
484 else
485!
486! Error - this equation is not nonlinear
487!
488 write(*,*)
489 write(*,*) 'Error. FDEval called with rowno=',rowno
490 write(*,*)
491 pin_fdeval = 1
492 endif
493
494end Function pin_fdeval
495
496Integer Function pin_solution( XVAL, XMAR, XBAS, XSTA, YVAL, YMAR, YBAS, YSTA, N, M, USRMEM )
497#ifdef dec_directives_win32
498!DEC$ ATTRIBUTES STDCALL, REFERENCE, NOMIXED_STR_LEN_ARG :: Pin_Solution
499#endif
500!
501! Specialized solution callback routine with names for variables and constraints
502!
503 Use proginfo
504 Use data_t
505 IMPLICIT NONE
506 INTEGER, Intent(IN) :: n, m
507 INTEGER, Intent(IN), Dimension(N) :: xbas, xsta
508 INTEGER, Intent(IN), Dimension(M) :: ybas, ysta
509 real*8, Intent(IN), Dimension(N) :: xval, xmar
510 real*8, Intent(IN), Dimension(M) :: yval, ymar
511 real*8, Intent(IN OUT) :: usrmem(*)
512 character*6, parameter, dimension(7) :: vname = (/'td ','cs ','s ','d ','r ','p ','rev '/)
513 character*6, parameter, dimension(6) :: ename = (/'tddef ','sdef ','csdef ','ddef ','rdef ','revdef'/)
514
515 INTEGER :: i, it, i1
516 CHARACTER*5, Parameter, Dimension(4) :: stat = (/ 'Lower','Upper','Basic','Super' /)
517
518 WRITE(10,"(/' Variable Solution value Reduced cost B-stat'/)")
519 i = 0
520 do it = 1, t
521 DO i1 = 1, 7
522 i = i + 1
523 WRITE(10,"(1X,A6,i2,1p,E20.6,E16.6,4X,A5 )") vname(i1), it, xval(i), xmar(i), stat(1+xbas(i))
524 ENDDO
525 enddo
526
527 WRITE(10,"(/' Constrnt Activity level Marginal cost B-stat'/)")
528 i = 1
529 WRITE(10,"(1x,'Objective',1P,E19.6,E16.6,4X,A5 )") yval(i), ymar(i), stat(1+ybas(i))
530 do it = 1, t
531 do i1 = 1, 6
532 i = i + 1
533 WRITE(10,"(1x,A6,i2,1P,E20.6,E16.6,4X,A5 )") ename(i1),it, yval(i), ymar(i), stat(1+ybas(i))
534 enddo
535 ENDDO
536
537 solcalls = solcalls + 1
538 pin_solution = 0
539
540END Function pin_solution
541
542
543!> Sets runtime options
544!!
545!! @include{doc} option_params.dox
546Integer Function pin_option( ncall, rval, ival, lval, usrmem, name )
547#ifdef dec_directives_win32
548!DEC$ ATTRIBUTES STDCALL, REFERENCE, NOMIXED_STR_LEN_ARG :: Pin_Option
549#endif
550 integer ncall, ival, lval
551 character(Len=*) :: name
552 real*8 rval
553 real*8 usrmem(*) ! optional user memory
554
555 Select case (ncall)
556 case (1)
557 name = 'Doprep' ! Turn the preprocessor off.
558 lval = 0 ! false
559 case (2)
560 name = 'Lotria' ! Output from the preprocessor
561 ival = 1 !
562 case default
563 name = ' '
564 end Select
565 pin_option = 0
566
567end Function pin_option
Main program. A simple setup and call of CONOPT.
Definition pindyck.java:14
integer function std_status(modsta, solsta, iter, objval, usrmem)
Definition comdecl.f90:126
subroutine checkdual(case, minmax)
Definition comdecl.f90:432
integer function std_message(smsg, dmsg, nmsg, llen, usrmem, msgv)
Definition comdecl.f90:243
integer function std_errmsg(rowno, colno, posno, msglen, usrmem, msg)
Definition comdecl.f90:286
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:429
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:161
integer function pin_solution(xval, xmar, xbas, xsta, yval, ymar, ybas, ysta, n, m, usrmem)
Definition fvboth.f90:535
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
subroutine finalize
Definition comdecl.f90:79
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
integer function pin_option(ncall, rval, ival, lval, usrmem, name)
Sets runtime options.
Definition pinopt.f90:528