/* initAsSubmtx.c */
#include "../DenseMtx.h"
#define MYDEBUG 1
/*--------------------------------------------------------------------*/
/*
----------------------------------------------------------------
purpose -- initialize as a submatrix of another DenseMtx object.
B = A(firstrow:lastrow, firstcol:lastcol)
note, B only points into the storage of A.
return values --
1 -- normal return
-1 -- B is NULL
-2 -- A is NULL
-3 -- A has invalid type
-4 -- requested rows are invalid
-5 -- requested columns are invalid
created -- 98nov11, cca
----------------------------------------------------------------
*/
int
DenseMtx_initAsSubmatrix (
DenseMtx *B,
DenseMtx *A,
int firstrow,
int lastrow,
int firstcol,
int lastcol
) {
/*
---------------
check the input
---------------
*/
if ( B == NULL ) {
fprintf(stderr, "\n error in DenseMtx_initAsSubmatrix()"
"\n B is NULL\n") ;
return(-1) ;
}
if ( A == NULL ) {
fprintf(stderr, "\n error in DenseMtx_initAsSubmatrix()"
"\n A is NULL\n") ;
return(-2) ;
}
if ( A->type != SPOOLES_REAL && A->type != SPOOLES_COMPLEX ) {
fprintf(stderr, "\n error in DenseMtx_initAsSubmatrix()"
"\n invalid type %d\n", A->type) ;
return(-3) ;
}
if ( firstrow < 0 || lastrow >= A->nrow ) {
fprintf(stderr, "\n error in DenseMtx_initAsSubmatrix()"
"\n %d rows in A, firstrow is %d\n", A->nrow, firstrow) ;
return(-4) ;
}
if ( firstcol < 0 || lastcol >= A->ncol ) {
fprintf(stderr, "\n error in DenseMtx_initAsSubmatrix()"
"\n %d columns in A, firstcol is %d\n", A->ncol, firstcol) ;
return(-5) ;
}
/*
---------------------
set the scalar fields
---------------------
*/
B->type = A->type ;
B->rowid = A->rowid ;
B->colid = A->colid ;
B->nrow = lastrow - firstrow + 1 ;
B->ncol = lastcol - firstcol + 1 ;
B->inc1 = A->inc1 ;
B->inc2 = A->inc2 ;
B->rowind = A->rowind + firstrow ;
B->colind = A->colind + firstcol ;
if ( A->type == SPOOLES_REAL ) {
B->entries = A->entries + firstrow*A->inc1 + firstcol*A->inc2 ;
} else {
B->entries = A->entries + 2*(firstrow*A->inc1 + firstcol*A->inc2) ;
}
return(1) ; }
/*--------------------------------------------------------------------*/
syntax highlighted by Code2HTML, v. 0.9.1