You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

127 lines
4.5 KiB

/* glphbm.h (Harwell-Boeing sparse matrix format) */
/***********************************************************************
* This code is part of GLPK (GNU Linear Programming Kit).
*
* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
* 2009, 2010, 2011, 2013 Andrew Makhorin, Department for Applied
* Informatics, Moscow Aviation Institute, Moscow, Russia. All rights
* reserved. E-mail: <mao@gnu.org>.
*
* GLPK is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* GLPK is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
* License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GLPK. If not, see <http://www.gnu.org/licenses/>.
***********************************************************************/
#ifndef GLPHBM_H
#define GLPHBM_H
typedef struct HBM HBM;
struct HBM
{ /* sparse matrix in Harwell-Boeing format; for details see the
report: I.S.Duff, R.G.Grimes, J.G.Lewis. User's Guide for the
Harwell-Boeing Sparse Matrix Collection (Release I), 1992 */
char title[72+1];
/* matrix title (informative) */
char key[8+1];
/* matrix key (informative) */
char mxtype[3+1];
/* matrix type:
R.. real matrix
C.. complex matrix
P.. pattern only (no numerical values supplied)
.S. symmetric (lower triangle + main diagonal)
.U. unsymmetric
.H. hermitian (lower triangle + main diagonal)
.Z. skew symmetric (lower triangle only)
.R. rectangular
..A assembled
..E elemental (unassembled) */
char rhstyp[3+1];
/* optional types:
F.. right-hand sides in dense format
M.. right-hand sides in same format as matrix
.G. starting vector(s) (guess) is supplied
..X exact solution vector(s) is supplied */
char ptrfmt[16+1];
/* format for pointers */
char indfmt[16+1];
/* format for row (or variable) indices */
char valfmt[20+1];
/* format for numerical values of coefficient matrix */
char rhsfmt[20+1];
/* format for numerical values of right-hand sides */
int totcrd;
/* total number of cards excluding header */
int ptrcrd;
/* number of cards for ponters */
int indcrd;
/* number of cards for row (or variable) indices */
int valcrd;
/* number of cards for numerical values */
int rhscrd;
/* number of lines for right-hand sides;
including starting guesses and solution vectors if present;
zero indicates no right-hand side data is present */
int nrow;
/* number of rows (or variables) */
int ncol;
/* number of columns (or elements) */
int nnzero;
/* number of row (or variable) indices;
equal to number of entries for assembled matrix */
int neltvl;
/* number of elemental matrix entries;
zero in case of assembled matrix */
int nrhs;
/* number of right-hand sides */
int nrhsix;
/* number of row indices;
ignored in case of unassembled matrix */
int nrhsvl;
/* total number of entries in all right-hand sides */
int nguess;
/* total number of entries in all starting guesses */
int nexact;
/* total number of entries in all solution vectors */
int *colptr; /* alias: eltptr */
/* column pointers (in case of assembled matrix);
elemental matrix pointers (in case of unassembled matrix) */
int *rowind; /* alias: varind */
/* row indices (in case of assembled matrix);
variable indices (in case of unassembled matrix) */
int *rhsptr;
/* right-hand side pointers */
int *rhsind;
/* right-hand side indices */
double *values;
/* matrix values */
double *rhsval;
/* right-hand side values */
double *sguess;
/* starting guess values */
double *xexact;
/* solution vector values */
};
#define hbm_read_mat _glp_hbm_read_mat
HBM *hbm_read_mat(const char *fname);
/* read sparse matrix in Harwell-Boeing format */
#define hbm_free_mat _glp_hbm_free_mat
void hbm_free_mat(HBM *hbm);
/* free sparse matrix in Harwell-Boeing format */
#endif
/* eof */