source: tags/initial/GDE/MOLPHY/matrixut.c

Last change on this file was 2, checked in by oldcode, 24 years ago

Initial revision

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.3 KB
Line 
1/*
2 * matrixut.c - numerical matrix utility
3 * Ver. 1.2  Aug 26, 1993  Adachi, J.
4 *
5 * Copyright (C) 1992, 1993 J. Adachi & M. Hasegawa, All rights reserved.
6 */
7
8#ifndef MATRIX_UTILITY
9#define MATRIX_UTILITY
10
11#include <stdio.h>
12#include <stddef.h>
13
14#include "matrixut.h"
15
16void
17maerror(message)
18char *message;
19/* memory allocation error handler */
20{
21        fprintf(stderr, "\nmemory allocation failure %s\n", message);
22        exit(1);
23}
24
25/*
26 * float matrix utility
27 */
28
29fvector
30new_fvector(n)
31int n;
32/* memory allocate a float vector */
33{
34        fvector v;
35
36        v = (fvector) malloc((unsigned) (n * sizeof(float)));
37        if (v == NULL) maerror("in fvector().");
38        return v;
39}
40
41fmatrix
42new_fmatrix(nrow, ncol)
43int nrow;
44int ncol;
45/* memory allocate a float matrix */
46{
47        int i;
48        fmatrix m;
49
50        m = (fmatrix) malloc((unsigned) (nrow * sizeof(fvector)));
51        if (m == NULL) maerror("1 in fmatrix().");
52        *m = (fvector) malloc((unsigned) (nrow * ncol * sizeof(float)));
53        if (*m == NULL) maerror("2 in fmatrix().");
54        for (i = 1; i < nrow; i++) m[i] = m[i-1] + ncol;
55        return m;
56}
57
58fcube
59new_fcube(ntri, nrow, ncol)
60int ntri;
61int nrow;
62int ncol;
63/* memory allocate a float cube */
64{
65        int i, j;
66        fcube c;
67
68        c = (fcube) malloc((unsigned) (ntri * sizeof(fmatrix)));
69        if (c == NULL) maerror("1 in fcube().");
70        *c = (fmatrix) malloc((unsigned) (ntri * nrow * sizeof(fvector)));
71        if (*c == NULL) maerror("2 in fcube().");
72        **c = (fvector) malloc((unsigned) (ntri * nrow * ncol * sizeof(float)));
73        if (**c == NULL) maerror("3 in fcube().");
74        for (j = 1; j < nrow; j++) c[0][j] = c[0][j-1] + ncol;
75        for (i = 1; i < ntri; i++) {
76                c[i] = c[i-1] + nrow;
77                c[i][0] = c[i-1][0] + nrow * ncol;
78                for (j = 1; j < nrow; j++) c[i][j] = c[i][j-1] + ncol;
79        }
80        return c;
81}
82
83void
84free_fvector(v)
85fvector v;
86{
87        free((char *) v);
88}
89
90void
91free_fmatrix(m)
92fmatrix m;
93{
94        free((char *) *m);
95        free((char *) m);
96}
97
98void
99free_fcube(c)
100fcube c;
101{
102        free((char *) **c);
103        free((char *) *c);
104        free((char *) c);
105}
106
107
108/*
109 * double matrix utility
110 */
111
112dvector
113new_dvector(n)
114int n;
115/* memory allocate a double vector */
116{
117        dvector v;
118
119        v = (dvector) malloc((unsigned) (n * sizeof(double)));
120        if (v == NULL) maerror("in dvector().");
121        return v;
122}
123
124dmatrix
125new_dmatrix(nrow, ncol)
126int nrow;
127int ncol;
128/* memory allocate a double matrix */
129{
130        int i;
131        dmatrix m;
132
133        m = (dmatrix) malloc((unsigned) (nrow * sizeof(dvector)));
134        if (m == NULL) maerror("1 in dmatrix().");
135        *m = (dvector) malloc((unsigned) (nrow * ncol * sizeof(double)));
136        if (*m == NULL) maerror("2 in dmatrix().");
137        for (i = 1; i < nrow; i++) m[i] = m[i-1] + ncol;
138        return m;
139}
140
141dcube
142new_dcube(ntri, nrow, ncol)
143int ntri;
144int nrow;
145int ncol;
146/* memory allocate a double cube */
147{
148        int i, j;
149        dcube c;
150
151        c = (dcube) malloc((unsigned) (ntri * sizeof(dmatrix)));
152        if (c == NULL) maerror("1 in dcube().");
153        *c = (dmatrix) malloc((unsigned) (ntri * nrow * sizeof(dvector)));
154        if (*c == NULL) maerror("2 in dcube().");
155        **c = (dvector) malloc((unsigned) (ntri * nrow * ncol * sizeof(double)));
156        if (**c == NULL) maerror("3 in dcube().");
157        for (j = 1; j < nrow; j++) c[0][j] = c[0][j-1] + ncol;
158        for (i = 1; i < ntri; i++) {
159                c[i] = c[i-1] + nrow;
160                c[i][0] = c[i-1][0] + nrow * ncol;
161                for (j = 1; j < nrow; j++) c[i][j] = c[i][j-1] + ncol;
162        }
163        return c;
164}
165
166void
167free_dvector(v)
168dvector v;
169{
170        free((char *) v);
171}
172
173void
174free_dmatrix(m)
175dmatrix m;
176{
177        free((char *) *m);
178        free((char *) m);
179}
180
181void
182free_dcube(c)
183dcube c;
184{
185        free((char *) **c);
186        free((char *) *c);
187        free((char *) c);
188}
189
190
191/*
192 * char matrix utility
193 */
194
195cvector
196new_cvector(n)
197int n;
198/* memory allocate a char vector */
199{
200        cvector v;
201
202        v = (cvector) malloc((unsigned)n * sizeof(char));
203        if (v == NULL) maerror("in cvector().");
204        return v;
205}
206
207cmatrix
208new_cmatrix(nrow, ncol)
209int nrow;
210int ncol;
211/* memory allocate a char matrix */
212{
213        int i;
214        cmatrix m;
215
216        m = (cmatrix) malloc((unsigned) (nrow * sizeof(cvector)));
217        if (m == NULL) maerror("1 in cmatrix().");
218        *m = (cvector) malloc((unsigned) (nrow * ncol * sizeof(char)));
219        if (*m == NULL) maerror("2 in cmatrix().");
220        for (i = 1; i < nrow; i++) m[i] = m[i-1] + ncol;
221        return m;
222}
223
224ccube
225new_ccube(ntri, nrow, ncol)
226int ntri;
227int nrow;
228int ncol;
229/* memory allocate a char cube */
230{
231        int i, j;
232        ccube c;
233
234        c = (ccube) malloc((unsigned) (ntri * sizeof(cmatrix)));
235        if (c == NULL) maerror("1 in ccube().");
236        *c = (cmatrix) malloc((unsigned) (ntri * nrow * sizeof(cvector)));
237        if (*c == NULL) maerror("2 in ccube().");
238        **c = (cvector) malloc((unsigned) (ntri * nrow * ncol * sizeof(char)));
239        if (**c == NULL) maerror("3 in ccube().");
240        for (j = 1; j < nrow; j++) c[0][j] = c[0][j-1] + ncol;
241        for (i = 1; i < ntri; i++) {
242                c[i] = c[i-1] + nrow;
243                c[i][0] = c[i-1][0] + nrow * ncol;
244                for (j = 1; j < nrow; j++) c[i][j] = c[i][j-1] + ncol;
245        }
246        return c;
247}
248
249void
250free_cvector(v)
251cvector v;
252{
253        free((char *) v);
254}
255
256void
257free_cmatrix(m)
258cmatrix m;
259{
260        free((char *) *m);
261        free((char *) m);
262}
263
264void
265free_ccube(c)
266ccube c;
267{
268        free((char *) **c);
269        free((char *) *c);
270        free((char *) c);
271}
272
273
274/*
275 * int matrix utility
276 */
277
278ivector
279new_ivector(n)
280int n;
281/* memory allocate a int vector */
282{
283        ivector v;
284
285        v = (ivector) malloc((unsigned) (n * sizeof(int)));
286        if (v == NULL) maerror("in ivector().");
287        return v;
288}
289
290imatrix
291new_imatrix(nrow, ncol)
292int nrow;
293int ncol;
294/* memory allocate a int matrix */
295{
296        int i;
297        imatrix m;
298
299        m = (imatrix) malloc((unsigned) (nrow * sizeof(ivector)));
300        if (m == NULL) maerror("1 in imatrix().");
301        *m = (ivector) malloc((unsigned) (nrow * ncol * sizeof(int)));
302        if (*m == NULL) maerror("2 in imatrix().");
303        for (i = 1; i < nrow; i++) m[i] = m[i-1] + ncol;
304        return m;
305}
306
307icube
308new_icube(ntri, nrow, ncol)
309int ntri;
310int nrow;
311int ncol;
312/* memory allocate a int cube */
313{
314        int i, j;
315        icube c;
316
317        c = (icube) malloc((unsigned) (ntri * sizeof(imatrix)));
318        if (c == NULL) maerror("1 in icube().");
319        *c = (imatrix) malloc((unsigned) (ntri * nrow * sizeof(ivector)));
320        if (*c == NULL) maerror("2 in icube().");
321        **c = (ivector) malloc((unsigned) (ntri * nrow * ncol * sizeof(int)));
322        if (**c == NULL) maerror("3 in icube().");
323        for (j = 1; j < nrow; j++) c[0][j] = c[0][j-1] + ncol;
324        for (i = 1; i < ntri; i++) {
325                c[i] = c[i-1] + nrow;
326                c[i][0] = c[i-1][0] + nrow * ncol;
327                for (j = 1; j < nrow; j++) c[i][j] = c[i][j-1] + ncol;
328        }
329        return c;
330}
331
332void
333free_ivector(v)
334ivector v;
335{
336        free((char *) v);
337}
338
339void
340free_imatrix(m)
341imatrix m;
342{
343        free((char *) *m);
344        free((char *) m);
345}
346
347void
348free_icube(c)
349icube c;
350{
351        free((char *) **c);
352        free((char *) *c);
353        free((char *) c);
354}
355
356
357#endif /* MATRIX_UTILITY */
Note: See TracBrowser for help on using the repository browser.