FNLMath : Optimization : MPS_FREE
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