xref: /petsc/src/mat/impls/aij/seq/ftn-kernels/fmult.F90 (revision c96caacc6f00ba95b366aeae86152d44f6880d6b)
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