Files | |
file | mtool.h |
Some sparse matrix tools. | |
file | mc_base.h |
The base (or foundation) header for MC. | |
file | dyn.h |
Class Dyn: dynamics library. | |
file | vel.h |
Class Vel: a canonical set element object. | |
file | ves.h |
Class V,E,S: the fundamental simplex geometry objects. | |
file | nam.h |
The primary header for the Nolinear Algebraic Mutilevel methods. | |
file | whb.h |
Class Whb: stabilized hierarchical basis library. | |
file | mc.h |
The foundation header for MC. | |
Classes | |
struct | aNode |
Class Node: Parameters and datatypes. More... | |
struct | Link |
A sparse matrix tool. More... | |
struct | LinkA |
A sparse matrix tool. More... | |
struct | LinkRC |
A sparse matrix tool. More... | |
struct | LinkRCS |
A sparse matrix tool. More... | |
struct | LinkRCN |
A sparse matrix tool. More... | |
struct | DynPDE |
Class DynPDE definition. More... | |
struct | Gip |
struct Gip (2*4=8 bytes) More... | |
struct | Vip |
struct Vip (3*8+3*4=36 bytes) More... | |
struct | Eip |
struct Eip (6*4=24 bytes) More... | |
struct | Fip |
struct Fip (3*4=12 bytes) More... | |
struct | Sip |
(14*4=56 bytes OR 24*4=96 bytes) More... | |
union | VES |
typedef union VES (40 bytes=max[36,24,40] OR 80 bytes=max[36,24,80]) More... | |
struct | Vel |
Class Vel: Definition (8+80 bytes). More... | |
struct | TT |
Class T: Definition. More... | |
Enumerations | |
enum | MATformat { ZERO_FORMAT, DRC_FORMAT, ROW_FORMAT, COL_FORMAT, SLU_FORMAT, RLN_FORMAT, CLN_FORMAT, XLN_FORMAT, RFL_FORMAT, CFL_FORMAT } |
A sparse matrix tool. More... | |
enum | MATsym { ISNOT_SYM, IS_SYM, STRUC_SYM } |
matrix symmantec options More... | |
enum | MATmirror { ISNOT_MIRROR, IS_MIRROR } |
matrix mirrow options More... | |
enum | MATimpl { ISNOT_IMPL, IS_IMPL } |
the sparse matrix impl More... | |
enum | MATstate { NULL_STATE, ZERO_STATE, ASSEMBLED_STATE, FACTORED_STATE } |
different states of the sparse matrix More... | |
enum | DYNtype { SIMP_TYPE, TDEP_TYPE, NLIN_TYPE } |
Class Dyn: Parameters and datatypes. More... | |
enum | HBMATtype { ZERO_TYPE, AMIN_TYPE, ANOR_TYPE, GHB_TYPE, GWM_TYPE } |
Class Whb: Parameters and datatypes. | |
Functions | |
void | mPlaceit (int *IA, int *JA, double *A, int key, int i, int j, double val) |
Set or add a value to a matrix row/column. | |
void | mContrib (Vset *mtpool, int key, int *count, int i, int j, double val) |
Set or add a value to a linked matrix entry list. | |
void | lContrib (Vset *mtpool, int *count, int i, int j) |
Add a link to a linked graph entry list. | |
void | mBuildGraphT (Vmem *vmem, int **IJAT, double **AT, int *ATnumO, int *IJA, double *A, int n, int m, int flag, int *work) |
Builds an index (and value) array in transposed format given the index and value array of a ROW or COL matrix. | |
void | buildG (Vmem *vmem, MATformat frmt, MATsym sym, int m, int n, int *numO, int *numA, int **ijb, double **b, int **ib, int **jb, double **diagb, double **offUb, double **offLb, int *ir, int *jr, double *r, int *ia, int *ja, double *a, double *diag, double *offU, double *offL, int *ip, int *jp, double *p) |
Produce the sparse triple matrix product: B = R*A*P, where A is a sparse NxN square matrix, R is a sparse MxN retangular matrix, and P is a sparse NxM rectangular matrix, with M < N (possibly M << N). The result is a smaller (but possibly much more dense) square MxM matrix B. |
enum DYNtype |
Class Dyn: Parameters and datatypes.
enum MATformat |
A sparse matrix tool.
enum MATimpl |
the sparse matrix impl
enum MATmirror |
matrix mirrow options
enum MATstate |
different states of the sparse matrix
enum MATsym |
matrix symmantec options
void buildG | ( | Vmem * | vmem, | |
MATformat | frmt, | |||
MATsym | sym, | |||
int | m, | |||
int | n, | |||
int * | numO, | |||
int * | numA, | |||
int ** | ijb, | |||
double ** | b, | |||
int ** | ib, | |||
int ** | jb, | |||
double ** | diagb, | |||
double ** | offUb, | |||
double ** | offLb, | |||
int * | ir, | |||
int * | jr, | |||
double * | r, | |||
int * | ia, | |||
int * | ja, | |||
double * | a, | |||
double * | diag, | |||
double * | offU, | |||
double * | offL, | |||
int * | ip, | |||
int * | jp, | |||
double * | p | |||
) |
Produce the sparse triple matrix product: B = R*A*P, where A is a sparse NxN square matrix, R is a sparse MxN retangular matrix, and P is a sparse NxM rectangular matrix, with M < N (possibly M << N).
The result is a smaller (but possibly much more dense) square MxM matrix B.
* The input matrices R,A,P are assumed to have the following * storage formats: R is stored column-wise (ROW-format), P is * stored row-wise (ROW-format), and A is stored in one of three * forms, namely, either row-wise (ROW), col-wise (COL), or by * diagonal followed by upper-triangle row-wise and then by lower * triangle columne-wise (DRC). The resulting B is stored in the * same format as the input matrix A. I.e., the matrices have the * following possible storage format combinations: * * The matrices A and B in DRC format: * * B = R * A * P * * \-- | | | | | | | \------ --- * |\- = | | | | | | | * |\----- * --- * ||\ | | | | | | | ||\---- --- * |||\--- --- * ||||\-- --- * |||||\- --- * ||||||\ --- * * Or, the matrices A and B in ROW format: * * B = R * A * P * * --- | | | | | | | ------- --- * --- = | | | | | | | * ------- * --- * --- | | | | | | | ------- --- * ------- --- * ------- --- * ------- --- * ------- --- * * Or, finally, the matrices A and B in COL format: * * B = R * A * P * * ||| | | | | | | | ||||||| --- * ||| = | | | | | | | * ||||||| * --- * ||| | | | | | | | ||||||| --- * ||||||| --- * ||||||| --- * ||||||| --- * ||||||| --- * * We compute the product B = R*A*P by splitting up A into its * three structures A=D+L+U, and then by splitting up the sum: * * B = R*D*P + R*L*P + R*U*P * * In the case of A in ROW form, only the last term is * present. In the case of COL form, only the middle * term is present. In the DRC case, all terms are present. * Note that in the ROW and COL forms, U and L are not * actually upper and lower triangular, but general rectangular * matrices; this is all that we need here. In the DRC form, * they are strict triangles, but we never use this fact directly. * * The first and last terms are easy to compute using the * datastructures used for R,D,U,P. However, the middle term * R*L*P is not straightforward to compute directly, since the * lower-triangle L of A is stored column-wise rather than * row-wise. However, this product can be easily formed by * computing its transpose instead: * * B = R*D*P + (P^T*L^T*R^T)^T + R*U*P * * The product P^T*L^T*R^T is easy to compute using the column-wise * structure of L, hence row-wise structure of L^T; the result is * then transposed and added into B. * * The product is formed component-wise; no temporary matrices * are stored, except for a linked-list structure to build the * non-zero structure of B, which is not possible to predict * without actually doing the product (at least symbolically). *
vmem | Memory management object | |
frmt | possible format types of this matrix | |
sym | symmetry keys for the matrix | |
m | an index | |
n | an index | |
numO | num of nonzeros we are actually storing in the strict upper-triangle of matrix. (DRC only) | |
numA | num of nonzeros we are actually storing, counting the diagonal, the strict upper-triangle, and also the strict lower-triangle if we are actually storing the lower-triangle (sym=0). | |
ijb | Pointer to memory location of the arry ijb | |
b | Pointer to memory location of the arry b | |
ib | Pointer to memory location of the arry ib | |
jb | Pointer to memory location of the arry jb | |
diagb | Pointer to memory location of the arry diagb | |
offUb | Pointer to memory location of the arry offUb | |
offLb | Pointer to memory location of the arry offLb | |
ir | Pointer to the arry ir | |
jr | Pointer to the arry jr | |
r | Pointer to the arry r | |
ia | Pointer to the arry ia | |
ja | Pointer to the arry ja | |
a | Pointer to the arry a | |
diag | Pointer to the arry diag | |
offU | Pointer to the arry offU | |
offL | Pointer to the arry offL | |
ip | Pointer to the arry ip | |
jp | Pointer to the arry jp | |
p | Pointer to the arry p |
void lContrib | ( | Vset * | mtpool, | |
int * | count, | |||
int | i, | |||
int | j | |||
) |
Add a link to a linked graph entry list.
mtpool | Pointer to a Class Vset | |
count | Pointer to the inserted position | |
i | an index | |
j | an index |
void mBuildGraphT | ( | Vmem * | vmem, | |
int ** | IJAT, | |||
double ** | AT, | |||
int * | ATnumO, | |||
int * | IJA, | |||
double * | A, | |||
int | n, | |||
int | m, | |||
int | flag, | |||
int * | work | |||
) |
Builds an index (and value) array in transposed format given the index and value array of a ROW or COL matrix.
vmem | Memory management object | |
IJAT | Pointer to the index array | |
AT | Pointer to the trasposed A array | |
ATnumO | number of nonzeros in each row (col) | |
IJA | integer structure [ IA ; JA ] | |
A | packed nozeros: DRC: [ diag ; offU ; offL ] ROW: [ offU ] COL: [ offL ] RFL: [ everything; stored row-wise ] CFL: [ everything; stored col-wise ] | |
n | an index | |
m | an index | |
flag | 0 ==> Build index array only, don't use matrix values. 1 ==> Build index array only, guard against zero values. 2 ==> Build index and val array, don't guard for zeros. 3 ==> Build index and val arrays, guard for zero values. | |
work | Pointer to the work array with zeros |
void mContrib | ( | Vset * | mtpool, | |
int | key, | |||
int * | count, | |||
int | i, | |||
int | j, | |||
double | val | |||
) |
Set or add a value to a linked matrix entry list.
mtpool | Pointer to a Class Vset | |
key | 0 ==> Set the value, 1 ==> Add the value | |
count | Pointer to the inserted position | |
i | an index | |
j | an index | |
val | the value of the matrix component |
void mPlaceit | ( | int * | IA, | |
int * | JA, | |||
double * | A, | |||
int | key, | |||
int | i, | |||
int | j, | |||
double | val | |||
) |
Set or add a value to a matrix row/column.
IA | pos in JA/offU/offL for row/col start | |
JA | row/col indices for nonzeros in col/row | |
A | packed nozeros: DRC: [ diag ; offU ; offL ] ROW: [ offU ] COL: [ offL ] RFL: [ everything; stored row-wise ] CFL: [ everything; stored col-wise ] | |
key | 0 ==> Set the value, 1 ==> Add the value | |
i | an index | |
j | an index | |
val | the value of the matrix component |