1*c96caaccSSatish Balay! 2*c96caaccSSatish Balay! 3*c96caaccSSatish Balay! Fortran kernel for sparse matrix-vector product in the AIJ matrix format 4*c96caaccSSatish Balay! 5*c96caaccSSatish Balay#include <petsc/finclude/petscsys.h> 6*c96caaccSSatish Balay! 7*c96caaccSSatish Balay subroutine FortranMultTransposeAddAIJ(n,x,ii,jj,a,y) 8*c96caaccSSatish Balay implicit none 9*c96caaccSSatish Balay PetscScalar x(0:*),a(0:*),y(0:*) 10*c96caaccSSatish Balay PetscScalar alpha 11*c96caaccSSatish Balay PetscInt n,ii(*),jj(0:*) 12*c96caaccSSatish Balay 13*c96caaccSSatish Balay PetscInt i,j,jstart,jend 14*c96caaccSSatish Balay 15*c96caaccSSatish Balay jend = ii(1) 16*c96caaccSSatish Balay do 10,i=1,n 17*c96caaccSSatish Balay jstart = jend 18*c96caaccSSatish Balay jend = ii(i+1) 19*c96caaccSSatish Balay alpha = x(i-1) 20*c96caaccSSatish Balay do 20 j=jstart,jend-1 21*c96caaccSSatish Balay y(jj(j)) = y(jj(j)) + alpha*a(j) 22*c96caaccSSatish Balay 20 continue 23*c96caaccSSatish Balay 10 continue 24*c96caaccSSatish Balay 25*c96caaccSSatish Balay return 26*c96caaccSSatish Balay end 27*c96caaccSSatish Balay 28*c96caaccSSatish Balay subroutine FortranMultAIJ(n,x,ii,jj,a,y) 29*c96caaccSSatish Balay implicit none 30*c96caaccSSatish Balay PetscScalar x(0:*),a(0:*),y(*) 31*c96caaccSSatish Balay PetscInt n,ii(*),jj(0:*) 32*c96caaccSSatish Balay 33*c96caaccSSatish Balay PetscInt i,j,jstart,jend 34*c96caaccSSatish Balay PetscScalar sum 35*c96caaccSSatish Balay 36*c96caaccSSatish Balay jend = ii(1) 37*c96caaccSSatish Balay do 10,i=1,n 38*c96caaccSSatish Balay jstart = jend 39*c96caaccSSatish Balay jend = ii(i+1) 40*c96caaccSSatish Balay sum = 0.d0 41*c96caaccSSatish Balay do 20 j=jstart,jend-1 42*c96caaccSSatish Balay sum = sum + a(j)*x(jj(j)) 43*c96caaccSSatish Balay 20 continue 44*c96caaccSSatish Balay y(i) = sum 45*c96caaccSSatish Balay 10 continue 46*c96caaccSSatish Balay 47*c96caaccSSatish Balay return 48*c96caaccSSatish Balay end 49*c96caaccSSatish Balay 50