Deallocates the
space allocated for the IMSL derived type s_MPS. This routine is usually used in
conjunction with READ_MPS.
Required Arguments
MPS — A structure
of IMSL defined derived type s_MPS containing
the data read from the MPS file. (Input/Output)
The allocated components
of s_MPS will be
deallocated on output.
The IMSL defined derived type s_MPS consists of the following
components:
Component |
Description |
character,
allocatable :: filename |
Name of the MPS file. |
character
(len=8) name |
Name of the problem. |
integer nrows |
Number of rows in the
constraint matrix. |
integer ncolumns |
Number of columns in the
constraint matrix. This is also the number of variables. |
integer nonzeros |
Number of non-zeros in
the constraint matrix. |
integer nhessian |
Number of non-zeros in
the Hessian matrix. If zero, then there is no Hessian matrix. |
integer ninteger |
Number of variables
required to be integer. This includes binary variables. |
integer nbinary |
Number of variables
required to be binary (0 or 1). |
real (kind(1e0)),
allocatable :: objective(:) |
A real array of
length ncolumns
containing the objective vector. |
type (s_SparseMatrixElement), allocatable
:: constraint(:) |
A derived type array of
length nonzeros and of
type s_SparseMatrixElement
containing the sparse matrix representation of the constraint matrix. See
below for details. |
type(s_SparseMatrixElement),
allocatable :: hessian(:) |
A derived type array of
length nhessian
and of type s_SparseMatrixElement
containing the sparse matrix representation of the Hessian matrix. If nhessian
is zero, then this field is not allocated. |
real (kind(1e0)),
allocatable ::lower_range(:) |
A real array of
length nrows
containing the lower constraint bounds. If a constraint is unbounded
below, the corresponding entry in lower_range
is set to negative_infinity,
defined below. |
real (kind(1e0)),
allocatable ::upper_range(:) |
A real array of
length nrows
containing the upper constraint bounds. If a constraint is unbounded
above, the corresponding entry in upper_range
is set to positive_infinity,
defined below. |
real (kind(1e0)),
allocatable :: lower_bound(:) |
A real array of
length ncolumns
containing the lower variable bounds. If a variable is unbounded below,
the corresponding entry in lower_bound
is set to negative_infinity,
defined below. |
real (kind(1e0)),
allocatable :: upper_bound(:) |
A real array of
length ncolumns
containing the upper variable bounds. If a variable is unbounded above,
the corresponding entry in upper_bound
is set to positive_infinity,
defined below. |
integer,
allocatable :: variable_type(:) |
An integer
array of length ncolumns
containing the type of each variable. Variable types are: |
0 |
Continous |
1 |
Integer |
2 |
Binary (0 or 1) |
3 |
Semicontinuous |
character
(len=8) name_objective |
Name of the set in ROWS
used for the objective row. |
character
(len=8) name_rhs |
Name of the RHS set
used. |
character
(len=8) name_ranges |
Name of the RANGES set
used or the empty string if no RANGES section in the file. |
character
(len=8) name_bounds |
Name of the BOUNDS set
used or the empty string if no BOUNDS section in the file. |
character
(len=8), allocatable :: name_row(:) |
Array of length nrows
containing the row names. The name of the i-th constraint row is name_row(i). |
character
(len=8), allocatable :: name_column(:) |
Array of length ncolumns
containing the column names. The name of the i-th column and
variable is name_column(i). |
real (kind
(1e0)) positive_infinity |
Value used for a
constraint or bound upper limit when the constraint or bound is unbounded
above. This can be set using an optional argument. Default is 1.0e+30. |
real (kind
(1e0)) negative_infinity |
Value used for a
constraint or bound lower limit when the constraint or bound is unbounded
below. This can be set using an optional argument. Default is -1.0e+30. |
This derived type stores the constraint and Hessian
matrices in a simple sparse matrix format of derived type s_SparseMatrixElement
defined in the interface module mp_types.
s_SparseMatrixElement
consists of three components; a row index, a column index, and a value.
For each non-zero element in the constraint and Hessian matrices an element of
derived type s_SparseMatrixElement
is stored The following code fragment expands the sparse constraint matrix of
the derived type s_SparseMatrixElement
contained in mps,
a derived type of type s_MPS,
into a dense matrix:
! allocate a matrix
integer nr = mps%nrows
integer nc = mps%ncolumns
real (kind(1e0)), allocatable ::
matrix(:,:)
allocate(matrix(nr,nc))
matrix = 0.0e0
! expand the sparse matrix
do k = 1, mps%nonzeros
i =
mps%constraint(k)%row
j =
mps%constraint(k)%column
matrix(i,j) = mps%constraint(k)%value
end do
The IMSL derived type d_MPS
is the double precision counterpart to s_MPS.
The IMSL derived type d_SparseMatrixElement
is the double precision counterpart to s_SparseMatrixElement.
FORTRAN 90 Interface
Generic:
CALL MPS_FREE (MPS)
Specific:
The specific interface names are S_MPS_FREE and D_MPS_FREE.
Description
This subroutine simply issues deallocate statements for
each of the arrays allocated in the IMSL derived type s_MPS
defined above. It is supplied as a convenience utility to the user of READ_MPS.
Example
In the following example, the space that had been allocated
to accommodate the IMSL derived type S_MPS
is deallocated with a call to MPS_FREE
after a call to READ_MPS
was made.
use read_mps_int
use mps_free_int
implicit none
TYPE(S_MPS) mps
CALL read_mps ('test.mps', mps)
.
.
.
call mps_free (mps)
end