16f79c3a4SBarry Smith #ifndef lint 2*06be10caSBarry Smith static char vcid[] = "$Id: axpy.c,v 1.1 1995/05/09 02:08:00 bsmith Exp bsmith $"; 36f79c3a4SBarry Smith #endif 46f79c3a4SBarry Smith 56f79c3a4SBarry Smith 6*06be10caSBarry Smith #include "matimpl.h" 76f79c3a4SBarry Smith #include "options.h" 86f79c3a4SBarry Smith 9*06be10caSBarry Smith /*@ 10*06be10caSBarry Smith MatAXPY - Y = a*X + Y 116f79c3a4SBarry Smith 126f79c3a4SBarry Smith Input Parameters: 13*06be10caSBarry Smith . X,Y - the matrices 14*06be10caSBarry Smith . a - the scalar multiple 156f79c3a4SBarry Smith 16*06be10caSBarry Smith .keywods: Mat, add 17*06be10caSBarry Smith @*/ 186f79c3a4SBarry Smith 19*06be10caSBarry Smith int MatAXPY(Scalar *a,Mat X,Mat Y) 206f79c3a4SBarry Smith { 21*06be10caSBarry Smith int m1,m2,n1,n2,i,*row,start,end,j,ncols,ierr; 22*06be10caSBarry Smith Scalar *val,*vals; 236f79c3a4SBarry Smith 24*06be10caSBarry Smith VALIDHEADER(X,MAT_COOKIE); VALIDHEADER(Y,MAT_COOKIE); 25*06be10caSBarry Smith MatGetSize(X,&m1,&n1); MatGetSize(X,&m2,&n2); 26*06be10caSBarry Smith if (m1 != m2 || n1 != n2) SETERR(1,"Non conforming matrix add"); 27*06be10caSBarry Smith vals = (Scalar *) MALLOC( n1*sizeof(Scalar) ); CHKPTR(vals); 28*06be10caSBarry Smith MatGetOwnershipRange(X,&start,&end); 29*06be10caSBarry Smith for ( i=start; i<end; i++ ) { 30*06be10caSBarry Smith MatGetRow(X,i,&ncols,&row,&val); 31*06be10caSBarry Smith for ( j=0; j<ncols; j++ ) { 32*06be10caSBarry Smith vals[j] = (*a)*val[j]; 336f79c3a4SBarry Smith } 34*06be10caSBarry Smith ierr = MatSetValues(Y,1,&i,ncols,row,vals,ADDVALUES); CHKERR(ierr); 35*06be10caSBarry Smith MatRestoreRow(X,i,&ncols,&row,&val); 366f79c3a4SBarry Smith } 37*06be10caSBarry Smith FREE(vals); 38*06be10caSBarry Smith ierr = MatAssemblyBegin(Y,FINAL_ASSEMBLY); CHKERR(ierr); 39*06be10caSBarry Smith ierr = MatAssemblyEnd(Y,FINAL_ASSEMBLY); CHKERR(ierr); 406f79c3a4SBarry Smith return 0; 416f79c3a4SBarry Smith } 42