This is file "READMEchanges.txt" for MINOS 5.6.

CHANGES      describes the main changes since MINOS 5.5 (Jun 2000).
FILES        describes the files contained in minos56.zip.

01 Oct 2002: First version of "readme" for MINOS 5.51.
             Michael Saunders, SOL, Stanford University.
             saunders@stanford.edu       (650) 723-1875
06 Dec 2002: Makefiles revised by Michael Friedlander.
06 Jun 2013: mi27lu.f updated to improve LUSOL TRP efficiency.
             lu1fad and lu1mxr were improved in sn28lusol.f90
             (Ding Ma and Michael Saunders, MS&E, Stanford).
             We downgraded these to f77 for mi27lu.f and sn27lu.f.
             lu1fad and lu1mxr need 3 local work arrays.
             These were not allowed in f77, but they work fine
             with an f90 compiler (they are f90 automatic arrays).

17 Mar 2014: mi27lu.f is now strictly f77 to allow for f2c translation.
             lu1fac.f has the 3 work arrays as inputs.
             m2bsol in mi26bfac.f modified accordingly.
             (The equivalent changes were already done for snopt7
             in sn27lu.f subroutines s2Bmap and s2BLU.)

17 Mar 2014: Changed
      common    /m3mps3/ aijtol,bstruc(2),mlst,mer
     $                   aijmin,aijmax,na0,line,ier(20)
   to
      common    /m3mps3/ aijtol,bstruc(2),
     $                   aijmin,aijmax,na0,line,ier(20),mlst,mer
   in several files to fix alignment in quad Minos.
   (Should have been that way already.)

29 Apr 2014: MINOS 5.6 is essentially the same as MINOS 5.51.
             Summary and Print file outputs allow for more iterations
             (i9 format) and more nonzeros in L and U.

08 Sep 2014: Changed 'double precision'
             to      'real(8)         ' everywhere
             to facilitate changing
                     'real(8) '         in minos56/src
             to      'real(16)'         in qminos56/src
----------------------------------------------------------------------


CHANGES relative to MINOS 5.5

 1. The mi*.f source files have been reorganized to minimize the
    warning messages issued by compilers when segments of real*8 z(*)
    are passed to subroutines that treat them as integer arrays.
    Such subroutines are now in separate files from the calling routines.

    Note that common blocks are still used because it is such a
    major change to eliminate them the way we did in SNOPT.
    MINOS is NOT reentrant or thread-safe.

 2. The LUSOL basis package has new threshold pivoting options
    to improve its ability to judge the rank of B or (B S).
    They may be selected by one of the following:

       LU Partial  Pivoting       (default as before)
       LU Rook     Pivoting
       LU Complete Pivoting

    If LU Factor tol is small enough (say 4.0 or 3.0 or 2.0),
    the options are increasingly able to pinpoint singularities.
    The work and storage increase also.

    If LU Partial Pivoting is set and excessive growth occurs
    in the numerical size of the elements of U, MINOS switches
    permanently to LU Rook Pivoting.  The LU Factor tol is
    set to 10.0 (or the current value if it is less).

    "BS factorizes" to re-partition (B S) are done with the current
    PP, RP or CP  but with a tighter LU Factor tol (which is later
    restored to its previous value).

    The strategy used in SNOPT is more elaborate (making greater
    use of LU Rook Pivoting).

 3. Erwin Kalvelagen has linked MINOS 5.51 to GAMS with reasonable
    ease (October 2002).

    Beware that the 5.51 files are not compatible with m55.c,
    the AMPL interface to MINOS 5.5.  David Gay has provided m551.c
    (see ampl/m551.c and makefiles in the ampl directory).

 4. 14 Feb 2004: misolf implemented (in mi02lib.f).
    It flags primal and dual infeasibilities in the printed solution.
    Called by GAMS for similar purpose.
----------------------------------------------------------------------


MINOS 5.6 files

==================
minos56 (top dir)
==================

Makefile.defs      defines compiler options for Makefiles in src and test.

READMEchanges.txt  is this file.
READMEinstall.txt  describes installation on Unix and Linux systems.
READMEwindows.txt  gives a few clues for PC Win* users.

minos56/examples   contains example function and data files to look at.
minos56/src        contains the f77 source files for MINOS 5.6.
minos56/test       contains files for running copies of the examples.
                   New examples can be tested here.

===============
minos56/src    
===============
driver.c     Example C program that calls MINOS as a Fortran subroutine.
             (Rather old.)

Makefile     creates shared object libraries libminos.so, libminosdbg.so
             in minos56/lib/ and .o files in minos56/obj/, minos56/objdbg/.

mi*.f        is the set of Fortran 77 source files listed next:
             
mi00main.f
mi02lib.f
mi05funs.f
mi10pc.f
mi10unix.f
mi10vms.f
mi11sys.f
mi12solv.f
mi15blas.f
mi17util.f
mi20amat.f
mi21amat.f
mi25bfac.f
mi26bfac.f
mi27lu.f
mi30spec.f
mi35mps.f
mi36mps.f
mi40bfil.f
mi50lp.f
mi60srch.f
mi65rmod.f
mi70nobj.f
mi80ncon.f
mi81ncon.f


mi02lib.f    contains subroutines that may be called from a user's program,
             including mistart, mispec and minoss.
             That's the best place to look for documentation.

mi10*.f      is a set of machine-dependent files.
             Only one mi10*.f file should be selected for use.

mi10unix.f   is used in the makefiles.
             It may also be used on Windows systems
             with the Visual Fortran 90 compiler
             (which recognizes the timer "etime").

             This file should be adapted for MOST systems and compilers,
             according to the in-line comments.

mi10pc.f     is also suitable for Windows with Visual Fortran,
             using a different timer.
             Careful:  USE DFPORT, ONLY: RTC  works only with that compiler.

mi10vms.f    is suitable for OpenVMS systems.

mi10gams.f   is specially for GAMS (calls their timer).


===============
minos56/examples
===============
This is a collection of test problems to be added to but not changed.
They are in minos56/test also (where you may change them for experiments).

*.f          Various source files containing main programs that
             call MINOS as a stand-alone system or as a subroutine.

*.mps        MPS files containing constraint data,
             input by stand-alone MINOS.

*.spc        SPECS files containing run-time options.

minost.f     (t for test) is an example main program that
             declares one big work array z(*) for MINOS,
             generates data for a nonlinear problem (problem t4manne),
             then calls subroutine minoss to solve the problem
             using a Cold Start.  The nonlinear function routines
             are in       minos56/src/mi05funs.f
             (and also in minos56/test/minosfuns.f).

minost2.f    is similar to minost.f but it first calls minoss to obtain
             "mincor" to see how big z(*) should be.  An f90 version
             could then allocate z(*) to be that size (or bigger!!).

minost3.f    is similar to minost2.f but includes further calls
             to minoss using Warm and Hot Starts.

minosm.f     (m for MPS) is an example main program that calls mirmps
             to read an MPS file containing constraint data for a
             nonlinear program (problem t4manne).
             It then calls subroutine minoss to solve the problem.
             As a test, it also calls miwmps to write a new copy of
             the MPS file.

ramsey.f     Generates and solves problems of variable size
             as specified in ramsey.spc.

spring.f     A self-contained nonlinear problem.

t1diet.*     A tiny LP problem.
t2banana.*   Minimizes an unconstrained nonlinear objective.
t3qp.*       A tiny QP problem.
t4manne.*    Small example of Alan Manne's Ramsey economic growth model.
t5weapon.*   A linearly constrained problem with nonlinear objective.
t6wood.*     A problem with nonlinear objective and nonlinear constraints.


===============
minos56/test
===============
This is where examples can be tested and new ones created.

Makefile    Compiles test programs and links to ../lib/*.a
                make minos         uses mi00main.f and mi05funs
                make minost        uses minost.f   and mi05funs
                make minost2
                make minost3          etc
                make minosm
                make ramsey
                make spring        uses spring.f and its own functions

             minos  is the stand-alone form of MINOS.
             It can process one or more SPECS files (in the same file)
             and it reads data from MPS files. 

mi05funs.f   Nonlinear functions for most of the test problems in this dir
             (funobj and funcon for minost, t4manne, etc.)

run          is a typical Unix script for running executables.
             The following commands make and test stand-alone MINOS
             using t*.spc and t*.mps data files:

             make minos
             ./run minos t1diet
             ./run minos t2banana
             ./run minos t3qp
             ./run minos t4manne
             ./run minos t5weapon
             ./run minos t6wood

             ./run minos afiro lp        uses afiro.mps and lp.spc

             The following commands test minost.f using minost.spc:

             make minost
             ./run minost

             The following commands test minosm.f, using minosm.spc
             and t4manne.mps:

             make minosm
             ./run minosm

runmps       is the same as "run" but gets the MPS file from ~/mps/
             and is intended for LP problems only.
             To run minos on ~/mps/afiro.mps with lp.spc:

             ./runmps minos afiro lp
----------------------------------------------------------------------


The MINOS 5.5 manual documents most things correctly, but...
some library routines are new or have changed:

    mistart  is new (and MUST be called first);
    mispec   is optional (and has fewer parameters);
    micore, minose, micjac, micmps, mirmps, miwmps, misolf
             are new.

Consult the source file mi02lib.f for documentation.
Good luck!
