xref: /petsc/src/mat/impls/aij/seq/ftn-kernels/fmultadd.F90 (revision c96caacc6f00ba95b366aeae86152d44f6880d6b)
1*c96caaccSSatish Balay!
2*c96caaccSSatish Balay!
3*c96caaccSSatish Balay!    Fortran kernel for sparse matrix-vector product in the AIJ format
4*c96caaccSSatish Balay!
5*c96caaccSSatish Balay#include <petsc/finclude/petscsys.h>
6*c96caaccSSatish Balay!
7*c96caaccSSatish Balay      subroutine FortranMultAddAIJ(n,x,ii,jj,a,y,z)
8*c96caaccSSatish Balay      implicit none
9*c96caaccSSatish Balay      PetscScalar      x(0:*),a(0:*),y(*),z(*)
10*c96caaccSSatish Balay      PetscInt          n,ii(*),jj(0:*)
11*c96caaccSSatish Balay
12*c96caaccSSatish Balay      PetscInt i,j,jstart,jend
13*c96caaccSSatish Balay      PetscScalar  sum
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        sum    = y(i)
20*c96caaccSSatish Balay        do 20 j=jstart,jend-1
21*c96caaccSSatish Balay          sum = sum + a(j)*x(jj(j))
22*c96caaccSSatish Balay 20     continue
23*c96caaccSSatish Balay        z(i) = sum
24*c96caaccSSatish Balay 10   continue
25*c96caaccSSatish Balay
26*c96caaccSSatish Balay      return
27*c96caaccSSatish Balay      end
28*c96caaccSSatish Balay
29