xref: /petsc/src/mat/utils/axpy.c (revision 1a9411475029bd0c092ff088e6540bae5153ea53)
16f79c3a4SBarry Smith #ifndef lint
2*1a941147SBarry Smith static char vcid[] = "$Id: axpy.c,v 1.6 1995/07/17 20:41:50 bsmith Exp bsmith $";
36f79c3a4SBarry Smith #endif
46f79c3a4SBarry Smith 
548b35521SBarry Smith #include "matimpl.h"  /*I   "mat.h"  I*/
66f79c3a4SBarry Smith 
706be10caSBarry Smith /*@
806be10caSBarry Smith    MatAXPY - Y = a*X + Y
96f79c3a4SBarry Smith 
106f79c3a4SBarry Smith    Input Parameters:
1106be10caSBarry Smith .  X,Y - the matrices
1206be10caSBarry Smith .  a - the scalar multiple
136f79c3a4SBarry Smith 
1406be10caSBarry Smith .keywods: Mat, add
1506be10caSBarry Smith  @*/
166f79c3a4SBarry Smith 
1706be10caSBarry Smith int MatAXPY(Scalar *a,Mat X,Mat Y)
186f79c3a4SBarry Smith {
1906be10caSBarry Smith   int    m1,m2,n1,n2,i,*row,start,end,j,ncols,ierr;
2006be10caSBarry Smith   Scalar *val,*vals;
216f79c3a4SBarry Smith 
22*1a941147SBarry Smith   PETSCVALIDHEADERSPECIFIC(X,MAT_COOKIE);  PETSCVALIDHEADERSPECIFIC(Y,MAT_COOKIE);
2306be10caSBarry Smith   MatGetSize(X,&m1,&n1);  MatGetSize(X,&m2,&n2);
24bbb6d6a8SBarry Smith   if (m1 != m2 || n1 != n2) SETERRQ(1,"MatAXPY:Non conforming matrix add");
2578b31e54SBarry Smith   vals = (Scalar *) PETSCMALLOC( n1*sizeof(Scalar) ); CHKPTRQ(vals);
2606be10caSBarry Smith   MatGetOwnershipRange(X,&start,&end);
2706be10caSBarry Smith   for ( i=start; i<end; i++ ) {
2806be10caSBarry Smith     MatGetRow(X,i,&ncols,&row,&val);
2906be10caSBarry Smith     for ( j=0; j<ncols; j++ ) {
3006be10caSBarry Smith       vals[j] = (*a)*val[j];
316f79c3a4SBarry Smith     }
3278b31e54SBarry Smith     ierr = MatSetValues(Y,1,&i,ncols,row,vals,ADDVALUES); CHKERRQ(ierr);
3306be10caSBarry Smith     MatRestoreRow(X,i,&ncols,&row,&val);
346f79c3a4SBarry Smith   }
3578b31e54SBarry Smith   PETSCFREE(vals);
3678b31e54SBarry Smith   ierr = MatAssemblyBegin(Y,FINAL_ASSEMBLY); CHKERRQ(ierr);
3778b31e54SBarry Smith   ierr = MatAssemblyEnd(Y,FINAL_ASSEMBLY); CHKERRQ(ierr);
386f79c3a4SBarry Smith   return 0;
396f79c3a4SBarry Smith }
40