MPS_FREE
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