CONOPT
Loading...
Searching...
No Matches
comdecl.f90
Go to the documentation of this file.
1Module proginfo
2!
3! Module with information about the progress of the program used to
4! check if the examples execute properly and write messages accordingly.
5!
6 IMPLICIT NONE
7 Character(len=128):: progname ! Program name
8 Integer :: stacalls = 0 ! Number of times Std_Status has been called
9 Integer :: solcalls = 0 ! Number of times Std_Solution has been called
10 real*8 :: obj ! Objective in last Std_Status
11 Integer :: mstat = 0 ! Value of MODSTA in last Std_Status
12 Integer :: sstat = 0 ! Value of SOLSTA in last Std_Status
13 Integer :: miter = 0 ! Value of ITER in last Std_Status
14 Integer :: c_infeas = 0 ! Count of infeasibilities in last Std_Solution
15 Integer :: c_nonopt = 0 ! Count of non-optimalities in last Std_Solution
16 Integer :: c_unbnd = 0 ! Count of unbounded in last Std_Solution
17 real*8, Dimension(:), Pointer :: xprim, xdual ! Primal and dual values for variables
18 real*8, Dimension(:), Pointer :: uprim, udual ! Primal and dual values for equations
19 Integer, Dimension(:), Pointer :: xbasc, xstat ! Basis and Status value for variables
20 Integer, Dimension(:), Pointer :: ubasc, ustat ! Basis and Status value for equations
21 Logical :: do_allocate ! If set to .true. then allocate above vectors at first call to Std_Solution
22 Integer :: maxvar, maxcon ! If defined then these sizes are used to allocate space
23 ! for variable and constraint related vectors with Do_allocate
24
25 Integer, Parameter :: minimize = 1, maximize = 2, infeasible = 3
26! Basis status for variables:
27 Integer, Parameter :: bslower = 0, bsupper = 1, bsbasic = 2, bssuper = 3
28
29 Contains
30!
31! Nullify pointers, get the name of the program, and write the first
32! status-line with "Starting to execute".
33!
34 Subroutine startup
35!$ Use OMP_Lib
36 IMPLICIT NONE
37!$ Integer :: MaxThread
38 Nullify(xprim); Nullify(xdual)
39 Nullify(uprim); Nullify(udual)
40 read(*,"(A)") progname
41 call flog( "Starting to execute", 0 )
42!
43! Open the Progname.lst and Progname.sta files on unit 10 and 11
44!
45 open(10,file=trim(progname) // '.lst',status='Unknown')
46 open(11,file=trim(progname) // '.sta',status='Unknown')
47 do_allocate = .false.
48 maxvar = 0; maxcon = 0
49!$ maxthread = OMP_GET_MAX_THREADS() ! We make the call to force the right libraries to be loaded.
50 End Subroutine startup
51!
52! Write a one-line status report used to monitor in the Progname.rc file
53! how far the program has progressed.
54!
55 Subroutine flog( Msg, Code )
56 IMPLICIT NONE
57 character(len=*), Intent(IN) :: Msg
58 Integer, Intent(IN) :: Code
59
60 open(15,file=trim(progname) // '.rc',action='write',form='formatted',status='unknown')
61 write(15,"(A,': ',A)") trim(progname), msg
62 close(15)
63 if ( code /= 0 ) then ! Error return.
64 close(10) ! Close the Status and
65 close(11) ! Document files and
66 stop 1 ! Stop
67 Endif
68 End Subroutine flog
69
70End Module proginfo
71!
72! Standard routines for Message, Status, Solution, and ErrMsg called
73! Std_Message, Std_Status, Std_Solution, and Std_ErrMsg.
74! The routines assume that the documentation file is opened as unit
75! 10 and that the status file is opened as unit 11.
76! The routines are use in the model if they are defined as callbacks
77! using the COIDEF_* routines. Otherwise, they will be ignored.
78! The routines are intended as inspiration for some more realistic
79! and useful implementations.
80!
81Integer Function std_status( MODSTA, SOLSTA, ITER, OBJVAL, USRMEM )
82#if defined (itl)
83!DEC$ ATTRIBUTES STDCALL, REFERENCE, NOMIXED_STR_LEN_ARG :: Std_Status
84#endif
85!
86! Simple implementation in which we write to all files
87!
88 Use proginfo
89 IMPLICIT NONE
90 INTEGER, Intent(IN) :: modsta, solsta, iter
91 real*8, Intent(IN) :: objval
92 real*8, Intent(IN OUT) :: usrmem(*)
93
94 WRITE(*,*)
95 WRITE(*,*) 'CONOPT has finished optimizing.'
96 WRITE(*,*) 'Model status =',modsta
97 WRITE(*,*) 'Solver status =',solsta
98 WRITE(*,*) 'Iteration count=',iter
99 WRITE(*,*) 'Objective value=',objval
100
101 WRITE(10,*)
102 WRITE(10,*) 'CONOPT has finished optimizing.'
103 WRITE(10,*) 'Model status =',modsta
104 WRITE(10,*) 'Solver status =',solsta
105 WRITE(10,*) 'Iteration count=',iter
106 WRITE(10,*) 'Objective value=',objval
107
108 WRITE(11,*)
109 WRITE(11,*) 'Model status =',modsta
110 WRITE(11,*) 'Solver status =',solsta
111 WRITE(11,*) 'Objective value=',objval
112#if defined (wei)
113 Call flush(10)
114 Call flush(11)
115#endif
116
117 stacalls = stacalls + 1
118 obj = objval
119 mstat = modsta
120 sstat = solsta
121 miter = iter
122
123 std_status = 0
124
125END Function std_status
126
127Integer Function std_solution( XVAL, XMAR, XBAS, XSTA, YVAL, YMAR, YBAS, YSTA, N, M, USRMEM )
128#if defined (itl)
129!DEC$ ATTRIBUTES STDCALL, REFERENCE, NOMIXED_STR_LEN_ARG :: Std_Solution
130#endif
131!
132! Simple implementation in which we write the solution values to
133! the 'Documentation file' on unit 10.
134! If Xprim and Uprim are allocated with enough space, the primal and
135! dual solutions are also saved to Xprim and Uprim.
136!
137 Use proginfo
138 IMPLICIT NONE
139 INTEGER, Intent(IN) :: n, m
140 INTEGER, Intent(IN), Dimension(N) :: xbas, xsta
141 INTEGER, Intent(IN), Dimension(M) :: ybas, ysta
142 real*8, Intent(IN), Dimension(N) :: xval, xmar
143 real*8, Intent(IN), Dimension(M) :: yval, ymar
144 real*8, Intent(IN OUT) :: usrmem(*)
145
146 INTEGER :: i, na, ma
147 CHARACTER*5, Parameter, Dimension(4) :: basc = (/ 'Lower','Upper','Basic','Super' /)
148 CHARACTER*6, Parameter, Dimension(4) :: stat = (/ 'Normal','NonOpt','Infeas','Unbnd ' /)
149
150 c_infeas = 0
151 c_nonopt = 0
152 c_unbnd = 0
153 WRITE(10,"(/' Variable Solution value Reduced cost Var-Basc Var-stat')")
154 DO i = 1, n
155 WRITE(10,"(1P,I7,E20.6,E16.6,4X,A5,7X,A6 )") i, xval(i), xmar(i), basc(1+xbas(i)), stat(1+xsta(i))
156 if ( xsta(i) == 1 ) c_nonopt = c_nonopt + 1
157 if ( xsta(i) == 2 ) c_infeas = c_infeas + 1
158 if ( xsta(i) == 3 ) c_unbnd = c_unbnd + 1
159 ENDDO
160
161 WRITE(10,"(/' Constrnt Activity level Marginal cost Con-Basc Con-stat')")
162 DO i = 1, m
163 WRITE(10,"(1P,I7,E20.6,E16.6,4X,A5,7X,A6 )") i, yval(i), ymar(i), basc(1+ybas(i)), stat(1+ysta(i))
164 if ( ysta(i) == 1 ) c_nonopt = c_nonopt + 1
165 if ( ysta(i) == 2 ) c_infeas = c_infeas + 1
166 if ( ysta(i) == 3 ) c_unbnd = c_unbnd + 1
167 ENDDO
168 if ( c_nonopt > 0 ) write(10,"(/' Number of non-optimalities =',i5)") c_nonopt
169 if ( c_infeas > 0 ) write(10,"(/' Number of infeasibilities =',i5)") c_infeas
170#if defined (wei)
171 Call flush(10)
172 Call flush(11)
173#endif
174
175 If ( do_allocate ) Then
176 If ( maxvar > 0 ) then; na = maxvar; else; na = n; Endif
177 If ( maxcon > 0 ) then; ma = maxcon; else; ma = m; Endif
178 Allocate( xprim(na), xdual(na), uprim(ma), udual(ma), xbasc(na), xstat(na), ubasc(ma), ustat(ma) )
179 do_allocate = .false.
180 Endif
181 If ( associated(xprim) .and. associated(xdual) .and. associated(uprim) .and. associated(udual) ) Then
182 If ( Size(xprim) >= n .and. Size(xdual) >= n .AND. Size(uprim) >= m .and. Size(udual) >= m ) Then
183 xprim(1:n) = xval(1:n)
184 xdual(1:n) = xmar(1:n)
185 uprim(1:m) = yval(1:m)
186 udual(1:m) = ymar(1:m)
187 Endif
188 Endif
189 If ( associated(xbasc) .and. associated(xstat) .and. associated(ubasc) .and. associated(ustat) ) Then
190 If ( Size(xbasc) >= n .and. Size(xstat) >= n .AND. Size(ubasc) >= m .and. Size(ustat) >= m ) Then
191 xbasc(1:n) = xbas(1:n)
192 xstat(1:n) = xsta(1:n)
193 ubasc(1:m) = ybas(1:m)
194 ustat(1:m) = ysta(1:m)
195 Endif
196 Endif
197 solcalls = solcalls + 1
198 std_solution = 0
199
200END Function std_solution
201
202Integer Function std_message( SMSG, DMSG, NMSG, LLEN, USRMEM, MSGV )
203#if defined (itl)
204!DEC$ ATTRIBUTES STDCALL, REFERENCE, NOMIXED_STR_LEN_ARG :: Std_Message
205#endif
206!
207! Simple implementation in which we only write the 'Screen file'
208! to unit *, the 'Status file' to unit 11, and the 'Documentation file'
209! to unit 10.
210!
211 Use proginfo
212 IMPLICIT NONE
213
214 INTEGER, Intent(IN) :: smsg, dmsg, nmsg
215 INTEGER, Intent(IN) , Dimension(*) :: llen
216 CHARACTER(Len=133), Intent(IN), Dimension(*) :: msgv
217 real*8, Intent(IN OUT) :: usrmem(*)
218
219 Integer :: i
220!
221! write to screen
222!
223 do i = 1, smsg
224 write(*,"(A)") msgv(i)(1:llen(i))
225 enddo
226!
227! write to status file
228!
229 do i = 1, nmsg
230 write(11,"(A)") msgv(i)(1:llen(i))
231 enddo
232!
233! write to document file
234!
235 do i = 1, dmsg
236 write(10,"(A)") msgv(i)(1:llen(i))
237 enddo
238#if defined (wei)
239 Call flush(10)
240 Call flush(11)
241#endif
242
243 std_message = 0
244
245END Function std_message
246
247Integer Function std_errmsg( ROWNO, COLNO, POSNO, MSGLEN, USRMEM, MSG )
248#if defined (itl)
249!DEC$ ATTRIBUTES STDCALL, REFERENCE, NOMIXED_STR_LEN_ARG :: Std_ErrMsg
250#endif
251!
252! Simple implementation of ErrMsg in which we just write 'Variable XX',
253! 'Equation YY' or 'Variable XX appearing in Equation YY' followed by
254! the text. We write both to the 'Documentation file' on unit 10 and
255! to the 'Status File' on unit 11.
256!
257 Use proginfo
258 IMPLICIT NONE
259
260 INTEGER, Intent(IN) :: rowno, colno, posno, msglen
261 CHARACTER(len=*), Intent(IN) :: msg
262 real*8, Intent(IN OUT) :: usrmem(*)
263!
264! If Rowno = 0 then the message is about a Column.
265! If Colno = 0 then the message is abuut a Row.
266! Otherwise, the message is about (Rowno,Colno)
267!
268 IF ( rowno .EQ. 0 ) THEN ! Must be a column (error) message
269 WRITE(10,1001) colno, msg(1:msglen)
270 WRITE(11,1001) colno, msg(1:msglen)
271 ELSEIF ( colno .EQ. 0 ) THEN ! Must be a row (error) message
272 WRITE(10,1002) rowno, msg(1:msglen)
273 WRITE(11,1002) rowno, msg(1:msglen)
274 ELSE ! Must be a (row,col) (error) message
275 WRITE(10,1000) colno, rowno, msg(1:msglen)
276 WRITE(11,1000) colno, rowno, msg(1:msglen)
277 ENDIF
278#if defined (wei)
279 Call flush(10)
280 Call flush(11)
281#endif
2821002 FORMAT('Equation',i8,' : ',a)
2831001 FORMAT('Variable',i8,' : ',a)
2841000 FORMAT('Variable',i8,' appearing in Equation',i8,' : ',a)
285
286 std_errmsg = 0
287
288END Function std_errmsg
289
290Integer Function std_triord( Mode, Type, Status, Irow, Icol, Inf, Value, Resid, Usrmem )
291#if defined (itl)
292!DEC$ ATTRIBUTES STDCALL, REFERENCE, NOMIXED_STR_LEN_ARG :: Std_TriOrd
293#endif
294!
295! Simple implementation of the TriOrd callback routine.
296!
297 Implicit NONE
298 INTEGER, INTENT(IN) :: mode, Type, status, irow, icol, inf
299 real*8, INTENT(IN) :: VALUE, resid
300 real*8, Intent(IN OUT) :: usrmem(*)
301
302 include 'preaction.inc'
303
304 If ( mode == -1 ) THEN
305 write(10,"(/'The preprocessing transformation are described below in detection order:'/)")
306 Else if ( mode == -2 ) Then
307 write(10,"(//'The order of the critical transformations is:'/)")
308 Endif
309 Select case (type)
310 Case (pretriangular)
311 If ( inf == 0 ) Then
312 WRITE(10,"('Equation',i7,' solved with respect to variable',i7,'. Value=',1p,e18.10)") irow, icol, value
313 Elseif ( inf == 1 ) Then
314 WRITE(10,"('Equation',i7,' solved with respect to variable',i7,'. Value=',9x,'+Infinity')") irow, icol
315 Else
316 WRITE(10,"('Equation',i7,' solved with respect to variable',i7,'. Value=',9x,'-Infinity')") irow, icol
317 Endif
318 Case (fixedcolumn)
319 WRITE(10,"('Variable',i7,' fixed at value=',1p,e18.10)") icol, value
320 Case (dependentrow)
321 WRITE(10,"('Equation',i7,' is dependent (all variables are fixed.)')") irow
322 Case (redundantrow)
323 WRITE(10,"('Equation',i7,' is redundant (will later be solved with respect to the slack.)')") irow
324 Case (impliedlower)
325 WRITE(10,"('Equation',i7,' turned into lower bound on variable',i7,'. Bound=',1p,e18.10)") irow, icol, value
326 Case (impliedupper)
327 WRITE(10,"('Equation',i7,' turned into upper bound on variable',i7,'. Bound=',1p,e18.10)") irow, icol, value
328 Case (impliedrange)
329 WRITE(10,"('Ranged Equation',i7,' turned into two bounds on variable',i7,'. Bound=',1p,e18.10)") irow, icol, value
330 Case (forcedlower)
331 WRITE(10,"('Variable',i7,' forced to lower bound=',1p,e18.10)") icol, value
332 Case (forcedupper)
333 WRITE(10,"('Variable',i7,' forced to upper bound=',1p,e18.10)") icol, value
334 Case (forcedvalue)
335 WRITE(10,"('Variable',i7,' forced to implied bound=',1p,e18.10)") icol, value
336 Case (forcinglower)
337 WRITE(10,"('Previous variables were forced by equation',i7,' binding as a less than or equal constraint.')") irow
338 Case (forcingupper)
339 WRITE(10,"('Previous variables were forced by equation',i7,' binding as a greater than or equal constraint.')") irow
340 Case (pretriainfeasb)
341 WRITE(10,"('Equation',i7,' cannot be solved with respect to variable',i7,' due to bounds. Value=',1p,e18.10)") &
342 irow, icol, value
343 Case (pretriainfeasl)
344 WRITE(10, &
345 "('Equation',i7,' cannot be solved with respect to variable',i7,'. Infeasibility has local minimum at',1p,e18.10)") &
346 irow, icol, value
347 Case (forcinginfeas)
348 WRITE(10,"('Equation',i7,' is still infeasible after the above variables have been forced to their best bounds.')") irow
349 Case (inconsistentrow)
350 WRITE(10,"('Equation',i7,' cannot be solved. No free variables left.')") irow
351 Case Default
352 WRITE(10,"('Pretriangular action=',i7,' not implemented yet.')") type
353 stop 1
354 End Select
355 If ( resid /= 0.d0 ) write(10,"('Residual after last transformation=',1p,e18.10)") resid
356#if defined (wei)
357 Call flush(10)
358#endif
359
360 std_triord = 0
361
362End Function std_triord
363
364Subroutine checkdual( Case, MinMax )
365!
366! This routine can check if the status and dual information is
367! consistent.
368! Case is a string to be added in front of any error messages.
369! MinMax defines termination status of the model according to
370! Integer, Parameter :: Minimize = 1, Maximize = 2, Infeasible = 3
371! The solution must not be in an intermediate state.
372!
373! The solution must have been saved using DO_Allocate and the size
374! of the model must correspond to the sizes of the allocated vectors,
375! i.e. MaxVar and MaxCon cannot be used with this routine.
376!
377 Use proginfo
378 Implicit NONE
379 Character(Len=*), Intent(IN) :: Case
380 INTEGER, INTENT(IN) :: MinMax
381
382 real*8, Parameter :: opttol = 2.d-6
383 Integer :: I
384 Character(Len=120) Text
385
386 If ( solcalls <= 0 ) Return
387 If ( .not. ( associated(xprim) .and. associated(xdual) .and. associated(uprim) .and. associated(udual) ) ) Return
388 If ( .not. ( associated(xbasc) .and. associated(xstat) .and. associated(ubasc) .and. associated(ustat) ) ) Return
389!
390! Check variable status. Must be normal
391!
392 do i = 1, Size(xstat)
393 If ( xstat(i) /= 0 ) then
394 write(text, "(A,': Status of variable',i6,' is not zero(normal). Is',i10)") Case, i, xstat(i)
395 call flog( trim(text), 1 )
396 Endif
397 Enddo
398!
399! Check Variable Basis status is consistent with the reduced cost in Xdual
400!
401 do i = 1, size(xbasc)
402 select case(xbasc(i))
403 case(bslower)
404 if ( minmax == maximize ) then
405 if ( xdual(i) > opttol ) then
406 write(text, "(A,': Max and variable',i6,' at lower. Reduced cost is positive:',1p,d15.6)") Case, i, xdual(i)
407 call flog( trim(text), 1 )
408 Endif
409 else ! Minimize or infeasible
410 if ( xdual(i) < -opttol ) then
411 write(text, "(A,': Min and variable',i6,' at lower. Reduced cost is negative:',1p,d15.6)") Case, i, xdual(i)
412 call flog( trim(text), 1 )
413 Endif
414 endif
415 case(bsupper)
416 if ( minmax == maximize ) then
417 if ( xdual(i) < -opttol ) then
418 write(text, "(A,': Max and variable',i6,' at upper. Reduced cost is negative:',1p,d15.6)") Case, i, xdual(i)
419 call flog( trim(text), 1 )
420 Endif
421 else ! Minimize or infeasible
422 if ( xdual(i) > opttol ) then
423 write(text, "(A,': Min and variable',i6,' at upper. Reduced cost is positive:',1p,d15.6)") Case, i, xdual(i)
424 call flog( trim(text), 1 )
425 Endif
426 endif
427 case(bsbasic)
428 if ( xdual(i) /= 0.d0 ) then
429 write(text, "(A,': Basic variable',i6,' does not have reduced cost zero. Is',1p,d15.6)") Case, i, xdual(i)
430 call flog( trim(text), 1 )
431 Endif
432 case(bssuper)
433 if ( abs( xdual(i) ) > opttol ) then
434 write(text, "(A,': Superbasic variable',i6,' does not have small reduced cost. Is',1p,d15.6)") Case, i, xdual(i)
435 call flog( trim(text), 1 )
436 Endif
437 case default
438 write(text, "(A,': Variable',i6,' bas illegal basis status:',I10)") Case, i, xbasc(i)
439 call flog( trim(text), 1 )
440 end select
441 enddo
442!
443! Check Equation status. Must be normal if the model is not infeasible
444!
445 if ( minmax /= infeasible ) then
446 do i = 1, Size(ustat)
447 If ( ustat(i) /= 0 ) then
448 write(text, "(A,': Status of constraint',i6,' is not zero(normal). Is',i10)") Case, i, ustat(i)
449 call flog( trim(text), 1 )
450 Endif
451 Enddo
452 Endif
453!
454! Check Constraint Basis status is consistent with the reduced cost in Xdual
455!
456 do i = 1, size(ubasc)
457 select case(ubasc(i))
458 case(bslower)
459 if ( minmax == maximize ) then
460 if ( udual(i) > opttol ) then
461 write(text, "(A,': Max and constraint',i6,' at lower. Reduced cost is positive:',1p,d15.6)") Case, i, udual(i)
462 call flog( trim(text), 1 )
463 Endif
464 else ! Minimize or infeasible
465 if ( udual(i) < -opttol ) then
466 write(text, "(A,': Min and constraint',i6,' at lower. Reduced cost is negative:',1p,d15.6)") Case, i, udual(i)
467 call flog( trim(text), 1 )
468 Endif
469 endif
470 case(bsupper)
471 if ( minmax == maximize ) then
472 if ( udual(i) < -opttol ) then
473 write(text, "(A,': Max and constraint',i6,' at upper. Reduced cost is negative:',1p,d15.6)") Case, i, udual(i)
474 call flog( trim(text), 1 )
475 Endif
476 else ! Minimize or infeasible
477 if ( udual(i) > opttol ) then
478 write(text, "(A,': Min and constraint',i6,' at upper. Reduced cost is positive:',1p,d15.6)") Case, i, udual(i)
479 call flog( trim(text), 1 )
480 Endif
481 endif
482 case(bsbasic)
483 if ( minmax /= infeasible .and. udual(i) /= 0.d0 ) then
484 write(text, "(A,': Basic constraint',i6,' does not have reduced cost zero. Is',1p,d15.6)") Case, i, udual(i)
485 call flog( trim(text), 1 )
486 Endif
487 case(bssuper)
488 if ( minmax /= infeasible .and. abs( udual(i) ) > opttol ) then
489 write(text, "(A,': Superbasic constraint',i6,' does not have small reduced cost. Is',1p,d15.6)") Case, i, udual(i)
490 call flog( trim(text), 1 )
491 Endif
492 case default
493 write(text, "(A,': Constraint',i6,' bas illegal basis status:',I10)") Case, i, ubasc(i)
494 call flog( trim(text), 1 )
495 end select
496 enddo
497
498End Subroutine checkdual
integer function std_solution(xval, xmar, xbas, xsta, yval, ymar, ybas, ysta, n, m, usrmem)
Definition comdecl.f90:128
integer function std_status(modsta, solsta, iter, objval, usrmem)
Definition comdecl.f90:82
subroutine checkdual(case, minmax)
Definition comdecl.f90:365
integer function std_message(smsg, dmsg, nmsg, llen, usrmem, msgv)
Definition comdecl.f90:203
integer function std_triord(mode, type, status, irow, icol, inf, value, resid, usrmem)
Definition comdecl.f90:291
integer function std_errmsg(rowno, colno, posno, msglen, usrmem, msg)
Definition comdecl.f90:248
real *8 obj
Definition comdecl.f90:10
integer, dimension(:), pointer ubasc
Definition comdecl.f90:20
integer c_nonopt
Definition comdecl.f90:15
character(len=128) progname
Definition comdecl.f90:7
integer, parameter bssuper
Definition comdecl.f90:27
integer solcalls
Definition comdecl.f90:9
integer maxvar
Definition comdecl.f90:22
integer sstat
Definition comdecl.f90:12
real *8, dimension(:), pointer udual
Definition comdecl.f90:18
integer, parameter bslower
Definition comdecl.f90:27
real *8, dimension(:), pointer xdual
Definition comdecl.f90:17
integer, dimension(:), pointer xstat
Definition comdecl.f90:19
integer c_infeas
Definition comdecl.f90:14
integer, dimension(:), pointer xbasc
Definition comdecl.f90:19
integer, dimension(:), pointer ustat
Definition comdecl.f90:20
integer, parameter infeasible
Definition comdecl.f90:25
integer, parameter bsbasic
Definition comdecl.f90:27
integer maxcon
Definition comdecl.f90:22
integer, parameter minimize
Definition comdecl.f90:25
integer stacalls
Definition comdecl.f90:8
integer, parameter bsupper
Definition comdecl.f90:27
subroutine flog(msg, code)
Definition comdecl.f90:56
logical do_allocate
Definition comdecl.f90:21
integer, parameter maximize
Definition comdecl.f90:25
integer miter
Definition comdecl.f90:13
real *8, dimension(:), pointer xprim
Definition comdecl.f90:17
real *8, dimension(:), pointer uprim
Definition comdecl.f90:18
integer mstat
Definition comdecl.f90:11
subroutine startup
Definition comdecl.f90:35
integer c_unbnd
Definition comdecl.f90:16