COIN-OR::LEMON - Graph Library

source: glpk-cmake/src/glpspm.h @ 1:c445c931472f

Last change on this file since 1:c445c931472f was 1:c445c931472f, checked in by Alpar Juttner <alpar@…>, 10 years ago

Import glpk-4.45

  • Generated files and doc/notes are removed
File size: 5.0 KB
Line 
1/* glpspm.h (general sparse matrix) */
2
3/***********************************************************************
4*  This code is part of GLPK (GNU Linear Programming Kit).
5*
6*  Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
7*  2009, 2010 Andrew Makhorin, Department for Applied Informatics,
8*  Moscow Aviation Institute, Moscow, Russia. All rights reserved.
9*  E-mail: <mao@gnu.org>.
10*
11*  GLPK is free software: you can redistribute it and/or modify it
12*  under the terms of the GNU General Public License as published by
13*  the Free Software Foundation, either version 3 of the License, or
14*  (at your option) any later version.
15*
16*  GLPK is distributed in the hope that it will be useful, but WITHOUT
17*  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
18*  or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
19*  License for more details.
20*
21*  You should have received a copy of the GNU General Public License
22*  along with GLPK. If not, see <http://www.gnu.org/licenses/>.
23***********************************************************************/
24
25#ifndef GLPSPM_H
26#define GLPSPM_H
27
28#include "glpdmp.h"
29
30typedef struct SPM SPM;
31typedef struct SPME SPME;
32
33struct SPM
34{     /* general sparse matrix */
35      int m;
36      /* number of rows, m >= 0 */
37      int n;
38      /* number of columns, n >= 0 */
39      DMP *pool;
40      /* memory pool to store matrix elements */
41      SPME **row; /* SPME *row[1+m]; */
42      /* row[i], 1 <= i <= m, is a pointer to i-th row list */
43      SPME **col; /* SPME *col[1+n]; */
44      /* col[j], 1 <= j <= n, is a pointer to j-th column list */
45};
46
47struct SPME
48{     /* sparse matrix element */
49      int i;
50      /* row number */
51      int j;
52      /* column number */
53      double val;
54      /* element value */
55      SPME *r_prev;
56      /* pointer to previous element in the same row */
57      SPME *r_next;
58      /* pointer to next element in the same row */
59      SPME *c_prev;
60      /* pointer to previous element in the same column */
61      SPME *c_next;
62      /* pointer to next element in the same column */
63};
64
65typedef struct PER PER;
66
67struct PER
68{     /* permutation matrix */
69      int n;
70      /* matrix order, n >= 0 */
71      int *row; /* int row[1+n]; */
72      /* row[i] = j means p[i,j] = 1 */
73      int *col; /* int col[1+n]; */
74      /* col[j] = i means p[i,j] = 1 */
75};
76
77#define spm_create_mat _glp_spm_create_mat
78SPM *spm_create_mat(int m, int n);
79/* create general sparse matrix */
80
81#define spm_new_elem _glp_spm_new_elem
82SPME *spm_new_elem(SPM *A, int i, int j, double val);
83/* add new element to sparse matrix */
84
85#define spm_delete_mat _glp_spm_delete_mat
86void spm_delete_mat(SPM *A);
87/* delete general sparse matrix */
88
89#define spm_test_mat_e _glp_spm_test_mat_e
90SPM *spm_test_mat_e(int n, int c);
91/* create test sparse matrix of E(n,c) class */
92
93#define spm_test_mat_d _glp_spm_test_mat_d
94SPM *spm_test_mat_d(int n, int c);
95/* create test sparse matrix of D(n,c) class */
96
97#define spm_show_mat _glp_spm_show_mat
98int spm_show_mat(const SPM *A, const char *fname);
99/* write sparse matrix pattern in BMP file format */
100
101#define spm_read_hbm _glp_spm_read_hbm
102SPM *spm_read_hbm(const char *fname);
103/* read sparse matrix in Harwell-Boeing format */
104
105#define spm_count_nnz _glp_spm_count_nnz
106int spm_count_nnz(const SPM *A);
107/* determine number of non-zeros in sparse matrix */
108
109#define spm_drop_zeros _glp_spm_drop_zeros
110int spm_drop_zeros(SPM *A, double eps);
111/* remove zero elements from sparse matrix */
112
113#define spm_read_mat _glp_spm_read_mat
114SPM *spm_read_mat(const char *fname);
115/* read sparse matrix from text file */
116
117#define spm_write_mat _glp_spm_write_mat
118int spm_write_mat(const SPM *A, const char *fname);
119/* write sparse matrix to text file */
120
121#define spm_transpose _glp_spm_transpose
122SPM *spm_transpose(const SPM *A);
123/* transpose sparse matrix */
124
125#define spm_add_sym _glp_spm_add_sym
126SPM *spm_add_sym(const SPM *A, const SPM *B);
127/* add two sparse matrices (symbolic phase) */
128
129#define spm_add_num _glp_spm_add_num
130void spm_add_num(SPM *C, double alfa, const SPM *A, double beta,
131      const SPM *B);
132/* add two sparse matrices (numeric phase) */
133
134#define spm_add_mat _glp_spm_add_mat
135SPM *spm_add_mat(double alfa, const SPM *A, double beta,
136      const SPM *B);
137/* add two sparse matrices (driver routine) */
138
139#define spm_mul_sym _glp_spm_mul_sym
140SPM *spm_mul_sym(const SPM *A, const SPM *B);
141/* multiply two sparse matrices (symbolic phase) */
142
143#define spm_mul_num _glp_spm_mul_num
144void spm_mul_num(SPM *C, const SPM *A, const SPM *B);
145/* multiply two sparse matrices (numeric phase) */
146
147#define spm_mul_mat _glp_spm_mul_mat
148SPM *spm_mul_mat(const SPM *A, const SPM *B);
149/* multiply two sparse matrices (driver routine) */
150
151#define spm_create_per _glp_spm_create_per
152PER *spm_create_per(int n);
153/* create permutation matrix */
154
155#define spm_check_per _glp_spm_check_per
156void spm_check_per(PER *P);
157/* check permutation matrix for correctness */
158
159#define spm_delete_per _glp_spm_delete_per
160void spm_delete_per(PER *P);
161/* delete permutation matrix */
162
163#endif
164
165/* eof */
Note: See TracBrowser for help on using the repository browser.