25#include "fasp_functs.h"
66 unsigned int jcform=0;
67 INT na,mb,icpp,iastrt,ibstrt,iaend,ibend,i,j,k,jia,jib;
73 icp=(
INT *) calloc(mb,
sizeof(
INT));
75 for (i = 0; i < mb; ++i) icp[i] = 0;
77 for (i = 0; i < na; ++i) {
82 for (jia = iastrt; jia < iaend; ++jia) {
87 for (jib = ibstrt; jib< ibend; ++jib) {
90 if (jcform) jc[icpp-1] = k+1;
140 INT na,mb,iastrt,ibstrt,iaend,ibend,icstrt,icend,i,j,k,ji,jia,jib;
151 for (i = 0; i < na; ++i) {
154 if (icend > icstrt) {
155 for (ji = icstrt;ji < icend;++ji) {
161 if (iaend > iastrt) {
162 for (jia = iastrt; jia < iaend ; ++jia) {
167 if (ibend > ibstrt) {
168 for (jib = ibstrt; jib < ibend; ++jib) {
175 for (ji = icstrt; ji < icend; ++ji) {
205 INT i,j,jp,n,m,mh,nh,iaa,iab,k;
227 for (i = 1; i < mh; ++i) {
231 for (i = 1; i <= iab; ++i) {
234 iat[j-1] = iat[j-1] + 1;
239 for (i= 2; i< mh; ++i) {
240 iat[i] = iat[i] + iat[i-1];
243 for (i = 1; i <= n; ++i) {
247 for (jp = iaa; jp <= iab; ++jp) {
283 INT i,j,jp,n,m,mh,nh,iaa,iab,k;
306 for (i = 1; i < mh; ++i) {
310 for (i = 1;i<=iab; ++i) {
313 iat[j-1] = iat[j-1] + 1;
319 for (i= 2; i< mh; ++i) {
320 iat[i] = iat[i] + iat[i-1];
324 for (i=1; i<=n; ++i) {
328 for (jp = iaa; jp <= iab; ++jp) {
368 unsigned int jcform=0;
369 INT icpp,i1,i,j,jp,n,m,iastrt,iaend,ibstrt,ibend;
378 icp=(
INT *) calloc(m,
sizeof(
INT));
379 for (i=0; i< m; ++i) icp[i] = 0;
381 for (i=0; i< n; ++i) {
386 if (iaend > iastrt) {
387 for (jp = iastrt; jp < iaend; ++jp) {
389 if (jcform) jc[icpp-1] = j;
396 if (ibend > ibstrt) {
397 for (jp = ibstrt; jp < ibend; ++jp) {
399 if (icp[j-1] != i1) {
400 if (jcform) jc[icpp-1] = j;
443 INT n,m,icpp,i1,i,j,iastrt,iaend,ibstrt,ibend,icstrt,icend;
456 if (icend > icstrt) {
457 for (icpp = icstrt;icpp<icend;++icpp) {
463 if (iaend > iastrt) {
464 for (icpp = iastrt;icpp<iaend;++icpp) {
471 if (ibend > ibstrt) {
472 for (icpp = ibstrt;icpp<ibend;++icpp) {
474 x[j] = x[j] + b[icpp];
477 for (icpp = icstrt;icpp<icend;++icpp) {
527 INT i,jk,jak,jpk,ic,jc,nc,icp1,ira,irb,ipa,ipb;
528 INT maxri,maxr,iaa,iab,iacp,if1,jf1,jacform=0;
532 ix=(
INT *) calloc(nc,
sizeof(
INT));
535 for (i =0;i<nc; ++i) {
540 if (maxr < maxri) maxr=maxri;
544 for (ic = 0;ic<nc;ic++) {
548 for (jk = ira;jk<irb;jk++) {
552 for (jak = iaa;jak < iab;jak++) {
556 for (jpk = ipa;jpk < ipb;jpk++) {
558 if (ix[jc] != icp1) {
560 if (jacform) jac[iacp] = jc+1;
605 INT nw,nv,iastrt,iaend,j,k,jiw,jia;
606 if (*nwp<=0) {*nvp=0;
return;}
609 for (jiw = 0;jiw < nw; ++jiw) {
613 if (iaend > iastrt) {
614 for (jia = iastrt ;jia< iaend;jia++) {
659 INT nw,nv,iastrt,iaend,j,k,ji,jiw,jia;
662 if (*nwp<=0) {*nvp=-1;
return;}
665 for (ji = 0;ji < nv;++ji) {
669 for (jiw = 0;jiw<nw; ++jiw) {
674 if (iaend > iastrt) {
675 for (jia = iastrt;jia < iaend;jia++) {
708 for (i = 0;i< *nyp; ++i) {
744 if ((*nyp > 0) && (*nxp > 0)) {
745 for (i = 0;i< *nyp; ++i) {
803 INT i,j,k,n,nc,nv,nw,nptjc,iacst,iacen,ic,jc,is,js,jkc,iastrt,iaend,ji,jia;
805 INT *icp=NULL, *jv=NULL,*jris=NULL, *jptjs=NULL;
806 REAL *v=NULL, *ris=NULL, *ptjs=NULL;
810 v = (
REAL *) calloc(n,
sizeof(
REAL));
811 icp = (
INT *) calloc(n,
sizeof(
INT));
812 jv = (
INT *) calloc(n,
sizeof(
INT));
813 if (!(icp && v && jv)) {
814 fprintf(stderr,
"### ERROR: Could not allocate memory!\n");
822 for (ic = 0;ic<nc;ic++) {
823 nw = ir[ic+1]-ir[ic];
832 for (ji = 0;ji < nw; ++ji) {
836 if (iaend > iastrt) {
837 for (jia = iastrt ;jia< iaend;jia++) {
849 for (ji = 0;ji < nv;++ji) {
853 for (ji = 0;ji<nw ; ++ji) {
858 if (iaend > iastrt) {
859 for (jia = iastrt;jia < iaend;jia++) {
867 for (jkc = iacst; jkc<iacen;jkc++) {
869 nptjc = ipt[jc+1]-ipt[jc];
876 for (i = 0;i< nptjc; ++i) {
878 aij += (*(ptjs+i))*(*(v+j));
884 for (i=0; i < nv; ++i) {
916 INT row_begin, row_end;
921 memset(flag, 0,
sizeof(
INT)*n);
933 row_begin = IA[i] - 1; row_end = IA[i+1] - 1;
934 for (j = row_begin; j<row_end; j++) {
935 if (flag[JA[j]-1] > 0) {
941 work[count] = i; count++;
942 for (j = row_begin; j<row_end; j++) {
void fasp_mem_free(void *mem)
Free up previous allocated memory body and set pointer to NULL.
void * fasp_mem_realloc(void *oldmem, const LONGLONG tsize)
Reallocate, initiate, and check memory.
void * fasp_mem_calloc(const unsigned int size, const unsigned int type)
Allocate, initiate, and check memory.
void fasp_chkerr(const SHORT status, const char *fctname)
Check error status and print out error messages before quit.
void fasp_sparse_rapms_(INT *ir, INT *jr, INT *ia, INT *ja, INT *ip, INT *jp, INT *nin, INT *ncin, INT *iac, INT *jac, INT *maxrout)
Calculates the nonzero structure of R*A*P, if jac is not null. If jac is null only finds num of nonze...
void fasp_sparse_wta_(INT *jw, REAL *w, INT *ia, INT *ja, REAL *a, INT *nwp, INT *map, INT *jv, REAL *v, INT *nvp)
Calculate v^t = w^t A, where w is a sparse vector and A is sparse matrix. v is an array of dimension ...
void fasp_sparse_wtams_(INT *jw, INT *ia, INT *ja, INT *nwp, INT *map, INT *jv, INT *nvp, INT *icp)
Finds the nonzeroes in the result of v^t = w^t A, where w is a sparse vector and A is sparse matrix....
void fasp_sparse_abyb_(INT *ia, INT *ja, REAL *a, INT *ib, INT *jb, REAL *b, INT *nap, INT *map, INT *mbp, INT *ic, INT *jc, REAL *c)
Multiplication of two sparse matrices.
void fasp_sparse_aplusb_(INT *ia, INT *ja, REAL *a, INT *ib, INT *jb, REAL *b, INT *nab, INT *mab, INT *ic, INT *jc, REAL *c)
Addition of two sparse matrices.
void fasp_sparse_ytxbig_(INT *jy, REAL *y, INT *nyp, REAL *x, REAL *s)
Calculates s = y^t x. y-sparse, x - no.
void fasp_sparse_aat_(INT *ia, INT *ja, REAL *a, INT *na, INT *ma, INT *iat, INT *jat, REAL *at)
Transpose a boolean matrix (only given by ia, ja)
ivector fasp_sparse_mis(dCSRmat *A)
Get the maximal independet set of a CSR matrix.
void fasp_sparse_abybms_(INT *ia, INT *ja, INT *ib, INT *jb, INT *nap, INT *map, INT *mbp, INT *ic, INT *jc)
Multiplication of two sparse matrices: calculating the nonzero structure of the result if jc is not n...
void fasp_sparse_iit_(INT *ia, INT *ja, INT *na, INT *ma, INT *iat, INT *jat)
Transpose a boolean matrix (only given by ia, ja)
void fasp_sparse_ytx_(INT *jy, REAL *y, INT *jx, REAL *x, INT *nyp, INT *nxp, INT *icp, REAL *s)
Calculates s = y^t x. y is sparse, x is sparse.
void fasp_sparse_rapcmp_(INT *ir, INT *jr, REAL *r, INT *ia, INT *ja, REAL *a, INT *ipt, INT *jpt, REAL *pt, INT *nin, INT *ncin, INT *iac, INT *jac, REAL *ac, INT *idummy)
Calculates R*A*P after the nonzero structure of the result is known. iac,jac,ac have to be allocated ...
void fasp_sparse_aplbms_(INT *ia, INT *ja, INT *ib, INT *jb, INT *nab, INT *mab, INT *ic, INT *jc)
Addition of two sparse matrices: calculating the nonzero structure of the result if jc is not null....
Main header file for the FASP project.
Sparse matrix of REAL type in CSR format.
INT row
row number of matrix A, m
INT * IA
integer array of row pointers, the size is m+1
INT * JA
integer array of column indexes, the size is nnz
Vector with n entries of INT type.
INT * val
actual vector entries