/*
This file is part of the FElt finite element analysis package.
Copyright (C) 1993-2000 Jason I. Gobat and Darren C. Atkinson
This program 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 2 of the License, or
(at your option) any later version.
This program 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 this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/************************************************************************
* File: cmatrix.h
*
* Description:
************************************************************************/
# ifndef _CMATRIX_H
# define _CMATRIX_H
# include <stdio.h> /* for FILE definition */
# include "complex.h"
# include "status.h"
# include "proto.h"
typedef struct complex_matrix *ComplexMatrix;
struct complex_matrix {
unsigned nrows; /* number of rows */
unsigned ncols; /* number of columns */
complex **data; /* matrix data */
unsigned *diag; /* diagonal addresses for compact column */
unsigned size; /* actual size of compact storage */
unsigned refcount; /* count of children */
ComplexMatrix parent; /* parent of possible subsection */
};
# define rdata(m,y,x) (((m) -> data [(y)][(x)]).r)
# define idata(m,y,x) (((m) -> data [(y)][(x)]).i)
typedef ComplexMatrix ComplexVector;
/*
* prototypes for DATA manipulation routines
*/
complex cmdata PROTO ((
ComplexMatrix, /* matrix to fetch data from */
unsigned, /* row index */
unsigned /* column index */
));
ComplexMatrix CreateFullComplexMatrix PROTO ((
unsigned, /* number of rows */
unsigned /* number of columns */
));
ComplexMatrix CreateComplexRowVector PROTO ((
unsigned /* vector length */
));
ComplexMatrix CreateComplexColumnVector PROTO ((
unsigned /* vector length */
));
void DestroyComplexMatrix PROTO ((
ComplexMatrix /* matrix to free */
));
ComplexMatrix CreateCompactComplexMatrix PROTO ((
unsigned, /* number of rows */
unsigned, /* number of columns */
unsigned, /* actual size of storage */
unsigned * /* diagonal index array */
));
ComplexMatrix CreateCopyComplexMatrix PROTO ((
ComplexMatrix /* matrix to copy data from */
));
ComplexMatrix MakeFullFromCompactComplex PROTO ((
ComplexMatrix /* compact matrix to expand */
));
ComplexMatrix MakeCompactFromFullComplex PROTO ((
ComplexMatrix /* full matrix to compact */
));
/*
* prototypes for the BASIC matrix routines
*/
int ZeroComplexMatrix PROTO (( /* a = 0 */
ComplexMatrix /* matrix to fill with zeros */
));
int CopyComplexMatrix PROTO (( /* b = a */
ComplexMatrix, /* source matrix */
ComplexMatrix /* destination matrix */
));
int RandomComplexMatrix PROTO (( /* a(i,j) = rand() */
ComplexMatrix, /* matrix to randomize */
int /* optional seed */
));
int MirrorComplexMatrix PROTO ((
ComplexMatrix /* matrix to complete */
));
int MultiplyComplexMatrices PROTO (( /* c = ab */
ComplexMatrix, /* destination matrix */
ComplexMatrix, /* source matrix 1 */
ComplexMatrix /* source matrix 2 */
));
int AddComplexMatrices PROTO (( /* c = a + b */
ComplexMatrix, /* destination matrix */
ComplexMatrix, /* source matrix 1 */
ComplexMatrix /* source matrix 2 */
));
int SubtractComplexMatrices PROTO (( /* c = a - b */
ComplexMatrix, /* destination matrix */
ComplexMatrix, /* source matrix 1 */
ComplexMatrix /* source matrix 2 */
));
int ScaleComplexMatrix PROTO (( /* b = a*y + x */
ComplexMatrix, /* destination matrix */
ComplexMatrix, /* source matrix */
complex,
complex
));
int ModulusComplexMatrix PROTO (( /* b = |a| */
Matrix, /* real destination matrix */
ComplexMatrix /* complex source matrix */
));
int TransposeComplexMatrix PROTO (( /* b = aT */
ComplexMatrix, /* destination matrix */
ComplexMatrix /* source matrix */
));
int PrintComplexMatrix PROTO (( /* print matrix m to file fp */
ComplexMatrix, /* matrix to print */
FILE * /* file pointer for output */
));
/*
* protoypes for the FACTORization machine
*/
int InvertComplexMatrix PROTO (( /* compute b = inv(a) where a is LU factored */
ComplexMatrix, /* destination matrix */
ComplexMatrix, /* factored source matrix */
Matrix /* pivot vector */
));
int LUFactorComplexMatrix PROTO (( /* factor a into LU and store in b */
ComplexMatrix, /* destination matrix */
ComplexMatrix, /* source matrix */
Matrix, /* permutation vector */
int * /* singularity code */
));
int LUBackSolveComplexMatrix PROTO (( /* solve Ax=b and store result in c */
ComplexMatrix, /* destination vector */
ComplexMatrix, /* factorized source matrix */
ComplexMatrix, /* right hand side vector */
Matrix /* pivot vector */
));
int DeterminantComplexMatix PROTO (( /* x = |a| */
complex *, /* pointer to result location */
ComplexMatrix, /* LU factored source matrix */
Matrix /* pivot vector */
));
int InvertCroutComplexMatrix PROTO ((
ComplexMatrix,
ComplexMatrix,
unsigned
));
int CroutFactorComplexMatrix PROTO (( /* Crout factorize A and store in A */
ComplexMatrix /* source and destination matrix */
));
int CroutBackSolveComplexMatrix PROTO (( /* solve Ax=b and store x in b */
ComplexMatrix, /* Crout factored LHS matrix */
ComplexMatrix /* RHS (and dest) vector */
));
/*
* prototypes for the PROPERTY routines
*/
int IsSymmetricComplexMatrix PROTO ((
ComplexMatrix
));
# endif /* _CMATRIX_H */
syntax highlighted by Code2HTML, v. 0.9.1