xref: /petsc/src/mat/utils/axpy.c (revision 06be10ca4f085c2e9270836f16403695238752a1)
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