Example #1
0
void atimes(unsigned long n, double x[], double r[], int itrnsp)
{
	void dsprsax(double sa[], unsigned long ija[], double x[], double b[],
		unsigned long n);
	void dsprstx(double sa[], unsigned long ija[], double x[], double b[],
		unsigned long n);

	if (itrnsp) dsprstx(sa,ija,x,r,n);
	else dsprsax(sa,ija,x,r,n);
}
Example #2
0
int main(void)
{
	int i,ii,iter;
	double *b,*bcmp,*x,err;

	b=dvector(1,NP);
	bcmp=dvector(1,NP);
	x=dvector(1,NP);
	for (i=1;i<=NP;i++) {
		x[i]=0.0;
		b[i]=1.0;
	}
	b[1]=3.0;
	b[NP] = -1.0;
	linbcg(NP,b,x,ITOL,TOL,ITMAX,&iter,&err);
	printf("%s %15e\n","Estimated error:",err);
	printf("%s %6d\n","Iterations needed:",iter);
	printf("\nSolution vector:\n");
	for (ii=1;ii<=NP/5;ii++) {
		for (i=5*(ii-1)+1;i<=5*ii;i++) printf("%12.6f",x[i]);
		printf("\n");
	}
	for (i=1;i<=(NP % 5);i++)
		printf("%12.6f",x[5*(NP/5)+i]);
	printf("\n");
	dsprsax(sa,ija,x,bcmp,NP);
	/* this is a double precision version of sprsax */
	printf("\npress RETURN to continue...\n");
	(void) getchar();
	printf("test of solution vector:\n");
	printf("%9s %12s\n","a*x","b");
	for (i=1;i<=NP;i++)
		printf("%12.6f %12.6f\n",bcmp[i],b[i]);
	free_dvector(x,1,NP);
	free_dvector(bcmp,1,NP);
	free_dvector(b,1,NP);
	return 0;
}
Example #3
0
void PCBCGSolver::atimes(unsigned long n, double x[], double r[], int itrnsp) {
    if (itrnsp) dsprstx(sa,ija,x,r,n);
    else dsprsax(sa,ija,x,r,n);
}